trackhome-react 0.6.0 → 1.0.0
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/README.md +1 -1
- package/dist/widgets/categorical.d.ts +0 -1
- package/dist/widgets/categorical.d.ts.map +1 -1
- package/dist/widgets/categorical.js +19 -16
- package/dist/widgets/categorical.js.map +1 -1
- package/dist/widgets/common.d.ts +1 -7
- package/dist/widgets/common.d.ts.map +1 -1
- package/dist/widgets/common.js +2 -6
- package/dist/widgets/common.js.map +1 -1
- package/dist/widgets/funnel.d.ts.map +1 -1
- package/dist/widgets/funnel.js +4 -4
- package/dist/widgets/funnel.js.map +1 -1
- package/dist/widgets/inputs.d.ts +2 -2
- package/dist/widgets/inputs.d.ts.map +1 -1
- package/dist/widgets/inputs.js +1 -1
- package/dist/widgets/metric.d.ts.map +1 -1
- package/dist/widgets/metric.js +4 -6
- package/dist/widgets/metric.js.map +1 -1
- package/dist/widgets/registry.d.ts +2 -1
- package/dist/widgets/registry.d.ts.map +1 -1
- package/dist/widgets/registry.js +24 -4
- package/dist/widgets/registry.js.map +1 -1
- package/dist/widgets/timeseries.d.ts.map +1 -1
- package/dist/widgets/timeseries.js +2 -2
- package/dist/widgets/timeseries.js.map +1 -1
- package/dist/widgets/types.d.ts +4 -6
- package/dist/widgets/types.d.ts.map +1 -1
- package/dist/widgets/types.js +1 -0
- package/dist/widgets/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ The authKey is **read-only** — it can only read dashboard configs and aggregat
|
|
|
54
54
|
- **Zero config**: widget layout stored server-side, fetched by uid
|
|
55
55
|
- **Self-styled**: inline CSS, no dependency on host app's CSS framework
|
|
56
56
|
- **Light/dark theme**: stored in the embed config, switchable
|
|
57
|
-
- **All widget kinds**: metric, timeseries, area, bar, pie,
|
|
57
|
+
- **All widget kinds**: metric, timeseries, area, bar, pie, top_tags (use prefix `event:` for top events)
|
|
58
58
|
- **Auto-refresh**: polls for new data every 30s (configurable)
|
|
59
59
|
- **Edit mode**: optional in-browser customization that saves back to server
|
|
60
60
|
- **TypeScript**: full type definitions included
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { WidgetUI } from './types.js';
|
|
2
2
|
export declare const barWidget: WidgetUI;
|
|
3
3
|
export declare const pieWidget: WidgetUI;
|
|
4
|
-
export declare const topEventsWidget: WidgetUI;
|
|
5
4
|
export declare const topTagsWidget: WidgetUI;
|
|
6
5
|
//# sourceMappingURL=categorical.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categorical.d.ts","sourceRoot":"","sources":["../../src/widgets/categorical.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAsC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"categorical.d.ts","sourceRoot":"","sources":["../../src/widgets/categorical.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAsC,MAAM,YAAY,CAAC;AA8B/E,eAAO,MAAM,SAAS,EAAE,QAKvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,QAKvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,QAU3B,CAAC"}
|
|
@@ -1,36 +1,39 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EVENT_TAG_PREFIX } from './types.js';
|
|
3
|
+
import { RankedBars, MetricField, TagPrefixField } from './common.js';
|
|
4
|
+
/** All categorical kinds resolve to a ranked [{ tag, count }] list. */
|
|
4
5
|
function CategoricalRender({ data, theme }) {
|
|
5
6
|
const d = Array.isArray(data) ? data : [];
|
|
6
|
-
const rows = d.map((x) => ({
|
|
7
|
+
const rows = d.map((x) => ({
|
|
8
|
+
label: x.tag?.startsWith(EVENT_TAG_PREFIX)
|
|
9
|
+
? x.tag.slice(EVENT_TAG_PREFIX.length)
|
|
10
|
+
: (x.tag ?? '—'),
|
|
11
|
+
count: x.count,
|
|
12
|
+
}));
|
|
7
13
|
return _jsx(RankedBars, { rows: rows, theme: theme });
|
|
8
14
|
}
|
|
9
15
|
function BreakdownEditForm({ draft, update, ctx }) {
|
|
10
|
-
return (_jsxs(_Fragment, { children: [_jsx(
|
|
16
|
+
return (_jsxs(_Fragment, { children: [_jsx(TagPrefixField, { draft: draft, update: update, ctx: ctx }), _jsx(MetricField, { draft: draft, update: update, ctx: ctx })] }));
|
|
11
17
|
}
|
|
12
|
-
const breakdownConfig = () => ({
|
|
18
|
+
const breakdownConfig = () => ({
|
|
19
|
+
tagPrefix: EVENT_TAG_PREFIX,
|
|
20
|
+
metric: 'count',
|
|
21
|
+
});
|
|
13
22
|
export const barWidget = {
|
|
14
|
-
meta: { value: 'bar', label: 'Bar', hint: 'Vertical categorical bars' },
|
|
23
|
+
meta: { value: 'bar', label: 'Bar', hint: 'Vertical categorical bars by tag prefix' },
|
|
15
24
|
defaultConfig: breakdownConfig,
|
|
16
25
|
Render: CategoricalRender,
|
|
17
26
|
EditForm: BreakdownEditForm,
|
|
18
27
|
};
|
|
19
28
|
export const pieWidget = {
|
|
20
|
-
meta: { value: 'pie', label: 'Pie', hint: 'Donut share-of-total' },
|
|
29
|
+
meta: { value: 'pie', label: 'Pie', hint: 'Donut share-of-total by tag prefix' },
|
|
21
30
|
defaultConfig: breakdownConfig,
|
|
22
31
|
Render: CategoricalRender,
|
|
23
32
|
EditForm: BreakdownEditForm,
|
|
24
33
|
};
|
|
25
|
-
export const topEventsWidget = {
|
|
26
|
-
meta: { value: 'top_events', label: 'Top events', hint: 'Ranked event-type list' },
|
|
27
|
-
defaultConfig: () => ({ metric: 'count' }),
|
|
28
|
-
Render: CategoricalRender,
|
|
29
|
-
EditForm: ({ draft, update, ctx }) => (_jsxs(_Fragment, { children: [_jsx(MetricField, { draft: draft, update: update, ctx: ctx }), _jsx(EventTypeField, { draft: draft, update: update, ctx: ctx })] })),
|
|
30
|
-
};
|
|
31
34
|
export const topTagsWidget = {
|
|
32
|
-
meta: { value: 'top_tags', label: 'Top tags', hint: 'Ranked tag
|
|
33
|
-
defaultConfig: () => ({ metric: 'count' }),
|
|
35
|
+
meta: { value: 'top_tags', label: 'Top tags', hint: 'Ranked tag values (default prefix event:)' },
|
|
36
|
+
defaultConfig: () => ({ tagPrefix: EVENT_TAG_PREFIX, metric: 'count' }),
|
|
34
37
|
Render: CategoricalRender,
|
|
35
38
|
EditForm: ({ draft, update, ctx }) => (_jsxs(_Fragment, { children: [_jsx(TagPrefixField, { draft: draft, update: update, ctx: ctx }), _jsx(MetricField, { draft: draft, update: update, ctx: ctx })] })),
|
|
36
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categorical.js","sourceRoot":"","sources":["../../src/widgets/categorical.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"categorical.js","sourceRoot":"","sources":["../../src/widgets/categorical.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE,uEAAuE;AACvE,SAAS,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAe;IACrD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAA0C,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,gBAAgB,CAAC;YACxC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;IACJ,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAiB;IAC9D,OAAO,CACL,8BACE,KAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAI,EAC1D,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAI,IACtD,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,GAAoB,EAAE,CAAC,CAAC;IAC9C,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAa;IACjC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,yCAAyC,EAAE;IACrF,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,iBAAiB;IACzB,QAAQ,EAAE,iBAAiB;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAa;IACjC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,oCAAoC,EAAE;IAChF,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,iBAAiB;IACzB,QAAQ,EAAE,iBAAiB;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,2CAA2C,EAAE;IACjG,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACvE,MAAM,EAAE,iBAAiB;IACzB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAiB,EAAE,EAAE,CAAC,CACnD,8BACE,KAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAI,EAC1D,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAI,IACtD,CACJ;CACF,CAAC"}
|
package/dist/widgets/common.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare function NoData({ theme, label }: {
|
|
|
5
5
|
theme: Theme;
|
|
6
6
|
label?: string;
|
|
7
7
|
}): React.JSX.Element;
|
|
8
|
-
/** Horizontal ranked-bar list used by bar/pie/
|
|
8
|
+
/** Horizontal ranked-bar list used by bar/pie/top_tags/funnel. */
|
|
9
9
|
export declare function RankedBars({ rows, theme, barHeight, }: {
|
|
10
10
|
rows: {
|
|
11
11
|
label: string;
|
|
@@ -27,12 +27,6 @@ export declare function MetricField({ draft, update, ctx, }: {
|
|
|
27
27
|
update: (patch: Partial<Widget>) => void;
|
|
28
28
|
ctx: EditCtx;
|
|
29
29
|
}): React.JSX.Element;
|
|
30
|
-
/** Optional event-type filter with autosuggest. */
|
|
31
|
-
export declare function EventTypeField({ draft, update, ctx, }: {
|
|
32
|
-
draft: Widget;
|
|
33
|
-
update: (patch: Partial<Widget>) => void;
|
|
34
|
-
ctx: EditCtx;
|
|
35
|
-
}): React.JSX.Element;
|
|
36
30
|
/** Tag-prefix field with autosuggest. */
|
|
37
31
|
export declare function TagPrefixField({ draft, update, ctx, }: {
|
|
38
32
|
draft: Widget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/widgets/common.tsx"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAU,MAAM,YAAY,CAAC;AAIjE,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,KAAkB,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,qBAErF;AAED,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/widgets/common.tsx"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAU,MAAM,YAAY,CAAC;AAIjE,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,KAAkB,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,qBAErF;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,SAAa,GACd,EAAE;IACD,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1D,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,qBAgCA;AAED,2CAA2C;AAC3C,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAOzG;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACzC,GAAG,EAAE,OAAO,CAAC;CACd,qBAeA;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,EACN,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACzC,GAAG,EAAE,OAAO,CAAC;CACd,qBAgBA"}
|
package/dist/widgets/common.js
CHANGED
|
@@ -4,7 +4,7 @@ import { AutosuggestInput } from './inputs.js';
|
|
|
4
4
|
export function NoData({ theme, label = 'No data.' }) {
|
|
5
5
|
return _jsx("div", { style: { fontSize: 12, color: subTextColor(theme) }, children: label });
|
|
6
6
|
}
|
|
7
|
-
/** Horizontal ranked-bar list used by bar/pie/
|
|
7
|
+
/** Horizontal ranked-bar list used by bar/pie/top_tags/funnel. */
|
|
8
8
|
export function RankedBars({ rows, theme, barHeight = 8, }) {
|
|
9
9
|
const subtext = subTextColor(theme);
|
|
10
10
|
if (rows.length === 0)
|
|
@@ -28,12 +28,8 @@ export function Field({ label, ctx, children }) {
|
|
|
28
28
|
export function MetricField({ draft, update, ctx, }) {
|
|
29
29
|
return (_jsx(Field, { label: "Metric", ctx: ctx, children: _jsxs("select", { style: ctx.inputStyle, value: draft.metric ?? 'count', onChange: (e) => update({ metric: e.target.value }), children: [_jsx("option", { value: "count", children: "Count" }), _jsx("option", { value: "unique", children: "Unique visitors" }), _jsx("option", { value: "sum", children: "Sum" }), _jsx("option", { value: "avg", children: "Average" })] }) }));
|
|
30
30
|
}
|
|
31
|
-
/** Optional event-type filter with autosuggest. */
|
|
32
|
-
export function EventTypeField({ draft, update, ctx, }) {
|
|
33
|
-
return (_jsx(Field, { label: "Event type filter (optional)", ctx: ctx, children: _jsx(AutosuggestInput, { endpoint: ctx.endpoint, authKey: ctx.authKey, uid: ctx.uid, suggestPath: "events", value: draft.eventType ?? '', onChange: (v) => update({ eventType: v || undefined }), placeholder: "e.g. page_view", theme: ctx.theme, inputStyle: ctx.inputStyle }) }));
|
|
34
|
-
}
|
|
35
31
|
/** Tag-prefix field with autosuggest. */
|
|
36
32
|
export function TagPrefixField({ draft, update, ctx, }) {
|
|
37
|
-
return (_jsx(Field, { label: "Tag prefix", ctx: ctx, children: _jsx(AutosuggestInput, { endpoint: ctx.endpoint, authKey: ctx.authKey, uid: ctx.uid, suggestPath: "prefixes", value: draft.tagPrefix ?? '', onChange: (v) => update({ tagPrefix: v || undefined }), placeholder: "e.g. variant:", theme: ctx.theme, inputStyle: ctx.inputStyle }) }));
|
|
33
|
+
return (_jsx(Field, { label: "Tag prefix", ctx: ctx, children: _jsx(AutosuggestInput, { endpoint: ctx.endpoint, authKey: ctx.authKey, uid: ctx.uid, suggestPath: "prefixes", value: draft.tagPrefix ?? '', onChange: (v) => update({ tagPrefix: v || undefined }), placeholder: "e.g. event: or variant:", theme: ctx.theme, inputStyle: ctx.inputStyle }) }));
|
|
38
34
|
}
|
|
39
35
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/widgets/common.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,EAAoC;IACpF,OAAO,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,YAAG,KAAK,GAAO,CAAC;AACjF,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/widgets/common.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnel.d.ts","sourceRoot":"","sources":["../../src/widgets/funnel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAA0C,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"funnel.d.ts","sourceRoot":"","sources":["../../src/widgets/funnel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAA0C,MAAM,YAAY,CAAC;AAkMnF,eAAO,MAAM,YAAY,EAAE,QAK1B,CAAC"}
|
package/dist/widgets/funnel.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { ACCENT, subTextColor, trackColor } from './types.js';
|
|
3
3
|
import { Field, NoData } from './common.js';
|
|
4
|
-
import {
|
|
4
|
+
import { TagsAutosuggestInput } from './inputs.js';
|
|
5
5
|
/** Compact waterfall: per-step visitors bar + overall conversion %. */
|
|
6
6
|
function FunnelRender({ widget, data, theme }) {
|
|
7
7
|
const d = data ?? {};
|
|
@@ -20,7 +20,7 @@ function FunnelRender({ widget, data, theme }) {
|
|
|
20
20
|
textOverflow: 'ellipsis',
|
|
21
21
|
whiteSpace: 'nowrap',
|
|
22
22
|
fontFamily: 'monospace',
|
|
23
|
-
}, children: [i + 1, ". ", s.
|
|
23
|
+
}, children: [i + 1, ". ", s.label] }), _jsx("div", { style: { flex: 1, height: 10, background: trackColor(theme), borderRadius: 4, overflow: 'hidden' }, children: _jsx("div", { style: { width: `${(s.visitors / max) * 100}%`, height: '100%', background: ACCENT, borderRadius: 4 } }) }), _jsxs("div", { style: { fontSize: 11, color: subtext, minWidth: 78, textAlign: 'right', fontVariantNumeric: 'tabular-nums' }, children: [s.visitors.toLocaleString(), " \u00B7 ", Math.round(s.conversionOverall * 100), "%"] })] }, i))) }));
|
|
24
24
|
}
|
|
25
25
|
function FunnelEditForm({ draft, update, ctx }) {
|
|
26
26
|
const steps = draft.steps ?? [];
|
|
@@ -46,7 +46,7 @@ function FunnelEditForm({ draft, update, ctx }) {
|
|
|
46
46
|
const next = steps.slice();
|
|
47
47
|
[next[i + 1], next[i]] = [next[i], next[i + 1]];
|
|
48
48
|
setSteps(next);
|
|
49
|
-
}, style: miniBtn(ctx.theme, i === steps.length - 1), children: "\u2193" }), _jsx("button", { type: "button", title: "Remove step", onClick: () => setSteps(steps.filter((_, idx) => idx !== i)), style: { ...miniBtn(ctx.theme, false), background: '#ef4444', color: '#fff' }, children: "\u00D7" })] })] }), _jsx(
|
|
49
|
+
}, style: miniBtn(ctx.theme, i === steps.length - 1), children: "\u2193" }), _jsx("button", { type: "button", title: "Remove step", onClick: () => setSteps(steps.filter((_, idx) => idx !== i)), style: { ...miniBtn(ctx.theme, false), background: '#ef4444', color: '#fff' }, children: "\u00D7" })] })] }), _jsx(TagsAutosuggestInput, { endpoint: ctx.endpoint, authKey: ctx.authKey, uid: ctx.uid, tags: step.tags ?? [], onChange: (t) => updateStep(i, { tags: t }), placeholder: "tags (must include event:\u2026, e.g. event:signup)", theme: ctx.theme, inputStyle: ctx.inputStyle, inputId: `funnel-step-${i}-tags` })] }, i))) }), _jsx("button", { type: "button", onClick: () => setSteps([...steps, { tags: [] }]), style: {
|
|
50
50
|
marginTop: 8,
|
|
51
51
|
width: '100%',
|
|
52
52
|
padding: '6px 10px',
|
|
@@ -75,7 +75,7 @@ function miniBtn(theme, disabled) {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
export const funnelWidget = {
|
|
78
|
-
meta: { value: 'funnel', label: 'Funnel', hint: 'Funnel waterfall (inline steps)' },
|
|
78
|
+
meta: { value: 'funnel', label: 'Funnel', hint: 'Funnel waterfall (inline tag-based steps)' },
|
|
79
79
|
defaultConfig: () => ({ steps: [], windowMinutes: 30, filterTags: [] }),
|
|
80
80
|
Render: FunnelRender,
|
|
81
81
|
EditForm: FunnelEditForm,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnel.js","sourceRoot":"","sources":["../../src/widgets/funnel.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"funnel.js","sourceRoot":"","sources":["../../src/widgets/funnel.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAUnD,uEAAuE;AACvE,SAAS,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAe;IACxD,MAAM,CAAC,GAAI,IAAsE,IAAI,EAAE,CAAC;IACxF,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC1G,OAAO,KAAC,MAAM,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAI,CAAC;IAC/C,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,YAC7D,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,eAAa,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aACnE,eACE,KAAK,EAAE;wBACL,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE,OAAO;wBACd,KAAK,EAAE,GAAG;wBACV,QAAQ,EAAE,QAAQ;wBAClB,YAAY,EAAE,UAAU;wBACxB,UAAU,EAAE,QAAQ;wBACpB,UAAU,EAAE,WAAW;qBACxB,aAEA,CAAC,GAAG,CAAC,QAAI,CAAC,CAAC,KAAK,IACb,EACN,cAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,YACrG,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,GAAI,GAC1G,EACN,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAC/G,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,GAAG,GAAG,CAAC,SAClE,KAnBE,CAAC,CAoBL,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAiB;IAC3D,MAAM,KAAK,GAAiB,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,KAA0B,EAAE,EAAE,CAC3D,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,MAAM,YAAY,GAAwB;QACxC,MAAM,EAAE,aAAa,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;QACnE,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACP,CAAC;IAEF,OAAO,CACL,8BACE,KAAC,KAAK,IAAC,KAAK,EAAC,gCAAgC,EAAC,GAAG,EAAE,GAAG,YACpD,gBACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,GAAG,CAAC,UAAU,EACrB,KAAK,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,GACxE,GACI,EAER,0BACE,cAAK,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,YACvG,sCAAc,KAAK,CAAC,MAAM,SAAS,GAC/B,EACN,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,YAC7D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,KAAK,EAAE,YAAY,aAC9B,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,EAAE,aAC5F,gBAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE,sBAAQ,CAAC,GAAG,CAAC,IAAQ,EAC7F,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,aACrC,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,SAAS,EACf,QAAQ,EAAE,CAAC,KAAK,CAAC,EACjB,OAAO,EAAE,GAAG,EAAE;wDACZ,IAAI,CAAC,KAAK,CAAC;4DAAE,OAAO;wDACpB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wDAC3B,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wDAChD,QAAQ,CAAC,IAAI,CAAC,CAAC;oDACjB,CAAC,EACD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,uBAG3B,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,WAAW,EACjB,QAAQ,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAChC,OAAO,EAAE,GAAG,EAAE;wDACZ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;4DAAE,OAAO;wDACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wDAC3B,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wDAChD,QAAQ,CAAC,IAAI,CAAC,CAAC;oDACjB,CAAC,EACD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,uBAG1C,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,aAAa,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAC5D,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,uBAGtE,IACL,IACF,EACN,KAAC,oBAAoB,IACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAC3C,WAAW,EAAC,qDAAgD,EAC5D,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,OAAO,EAAE,eAAe,CAAC,OAAO,GAChC,KApDM,CAAC,CAqDL,CACP,CAAC,GACE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EACjD,KAAK,EAAE;4BACL,SAAS,EAAE,CAAC;4BACZ,KAAK,EAAE,MAAM;4BACb,OAAO,EAAE,UAAU;4BACnB,QAAQ,EAAE,EAAE;4BACZ,UAAU,EAAE,GAAG;4BACf,YAAY,EAAE,CAAC;4BACf,MAAM,EAAE,cAAc,MAAM,EAAE;4BAC9B,UAAU,EAAE,aAAa;4BACzB,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,SAAS;yBAClB,2BAGM,IACL,EAEN,KAAC,KAAK,IAAC,KAAK,EAAC,oDAAoD,EAAC,GAAG,EAAE,GAAG,YACxE,KAAC,oBAAoB,IACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,IAAI,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,EAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAC1C,WAAW,EAAC,8BAA8B,EAC1C,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,OAAO,EAAC,oBAAoB,GAC5B,GACI,IACP,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAuB,EAAE,QAAiB;IACzD,OAAO;QACL,UAAU,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACpD,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC/C,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC5C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,2CAA2C,EAAE;IAC7F,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACvE,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;CACzB,CAAC"}
|
package/dist/widgets/inputs.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Autosuggest inputs shared by every widget EditForm.
|
|
3
3
|
*
|
|
4
4
|
* Zero deps; each fetches /e/<key>/<uid>/suggest/* with a 150ms debounce.
|
|
5
|
-
* - AutosuggestInput — single value (
|
|
5
|
+
* - AutosuggestInput — single value (tag prefix)
|
|
6
6
|
* - TagsAutosuggestInput — multi value chips (tag filters)
|
|
7
7
|
*/
|
|
8
8
|
import React from 'react';
|
|
@@ -11,7 +11,7 @@ export declare function AutosuggestInput({ endpoint, authKey, uid, suggestPath,
|
|
|
11
11
|
endpoint: string;
|
|
12
12
|
authKey: string;
|
|
13
13
|
uid: string;
|
|
14
|
-
suggestPath: '
|
|
14
|
+
suggestPath: 'prefixes';
|
|
15
15
|
value: string;
|
|
16
16
|
onChange: (v: string) => void;
|
|
17
17
|
placeholder?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/widgets/inputs.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBxC,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,OAAO,EACP,GAAG,EACH,WAAW,EACX,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/widgets/inputs.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBxC,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,OAAO,EACP,GAAG,EACH,WAAW,EACX,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;CACjC,qBAqKA;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,OAAO,EACP,GAAG,EACH,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;CACjC,qBAiGA;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,OAAO,EACP,GAAG,EACH,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,UAAU,EACV,OAA8B,GAC/B,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,qBAkPA"}
|
package/dist/widgets/inputs.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
* Autosuggest inputs shared by every widget EditForm.
|
|
4
4
|
*
|
|
5
5
|
* Zero deps; each fetches /e/<key>/<uid>/suggest/* with a 150ms debounce.
|
|
6
|
-
* - AutosuggestInput — single value (
|
|
6
|
+
* - AutosuggestInput — single value (tag prefix)
|
|
7
7
|
* - TagsAutosuggestInput — multi value chips (tag filters)
|
|
8
8
|
*/
|
|
9
9
|
import { useState, useEffect } from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/widgets/metric.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAwC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/widgets/metric.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAwC,MAAM,YAAY,CAAC;AAyEjF,eAAO,MAAM,YAAY,EAAE,QA6I1B,CAAC"}
|
package/dist/widgets/metric.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { ACCENT } from './types.js';
|
|
3
|
-
import { Field
|
|
4
|
-
import { TagsAutosuggestInput
|
|
3
|
+
import { Field } from './common.js';
|
|
4
|
+
import { TagsAutosuggestInput } from './inputs.js';
|
|
5
5
|
function formatValue(value, unit, decimals = 0) {
|
|
6
6
|
const n = value.toLocaleString(undefined, {
|
|
7
7
|
minimumFractionDigits: decimals,
|
|
@@ -15,14 +15,12 @@ function isFormulaMode(w) {
|
|
|
15
15
|
/** One row in the formula terms editor. */
|
|
16
16
|
function TermRow({ term, ctx, onChange, onRemove, }) {
|
|
17
17
|
const border = ctx.theme === 'dark' ? '#334155' : '#cbd5e1';
|
|
18
|
-
return (_jsxs("div", { style: { border: `1px solid ${border}`, borderRadius: 6, padding: 8, display: 'flex', flexDirection: 'column', gap: 6 }, children: [_jsxs("div", { style: { display: 'flex', gap: 6, alignItems: 'center' }, children: [_jsx("input", { style: { ...ctx.inputStyle, fontFamily: 'monospace', flex: 1 }, value: term.name, onChange: (e) => onChange({ ...term, name: e.target.value.replace(/[^a-zA-Z0-9_]/g, '') }), placeholder: "name (e.g. a)", spellCheck: false }), _jsxs("select", { style: { ...ctx.inputStyle, width: 120 }, value: term.agg, onChange: (e) => onChange({ ...term, agg: e.target.value }), children: [_jsx("option", { value: "count", children: "Count" }), _jsx("option", { value: "unique", children: "Unique" }), _jsx("option", { value: "sum", children: "Sum" }), _jsx("option", { value: "avg", children: "Average" })] }), _jsx("button", { type: "button", onClick: onRemove, title: "Remove term", style: { border: 'none', background: '#ef4444', color: '#fff', borderRadius: 4, width: 26, height: 26, cursor: 'pointer' }, children: "\u00D7" })] }), _jsx(TagsAutosuggestInput, { endpoint: ctx.endpoint, authKey: ctx.authKey, uid: ctx.uid, tags: term.tags ?? [], onChange: (tags) => onChange({ ...term, tags }), placeholder: "tags
|
|
18
|
+
return (_jsxs("div", { style: { border: `1px solid ${border}`, borderRadius: 6, padding: 8, display: 'flex', flexDirection: 'column', gap: 6 }, children: [_jsxs("div", { style: { display: 'flex', gap: 6, alignItems: 'center' }, children: [_jsx("input", { style: { ...ctx.inputStyle, fontFamily: 'monospace', flex: 1 }, value: term.name, onChange: (e) => onChange({ ...term, name: e.target.value.replace(/[^a-zA-Z0-9_]/g, '') }), placeholder: "name (e.g. a)", spellCheck: false }), _jsxs("select", { style: { ...ctx.inputStyle, width: 120 }, value: term.agg, onChange: (e) => onChange({ ...term, agg: e.target.value }), children: [_jsx("option", { value: "count", children: "Count" }), _jsx("option", { value: "unique", children: "Unique" }), _jsx("option", { value: "sum", children: "Sum" }), _jsx("option", { value: "avg", children: "Average" })] }), _jsx("button", { type: "button", onClick: onRemove, title: "Remove term", style: { border: 'none', background: '#ef4444', color: '#fff', borderRadius: 4, width: 26, height: 26, cursor: 'pointer' }, children: "\u00D7" })] }), _jsx(TagsAutosuggestInput, { endpoint: ctx.endpoint, authKey: ctx.authKey, uid: ctx.uid, tags: term.tags ?? [], onChange: (tags) => onChange({ ...term, tags }), placeholder: "tags (include event:\u2026 for event filter)", theme: ctx.theme, inputStyle: ctx.inputStyle })] }));
|
|
19
19
|
}
|
|
20
20
|
export const metricWidget = {
|
|
21
21
|
meta: { value: 'metric', label: 'Metric', hint: 'Single big number — live count or a custom formula/ratio' },
|
|
22
22
|
defaultConfig: () => ({ minutes: 5, terms: [], decimals: 0 }),
|
|
23
23
|
Render: ({ widget, data }) => {
|
|
24
|
-
// realtime resolver returns a bare number; formula resolver returns
|
|
25
|
-
// { count } (and { error } on a bad formula). Tolerate every shape.
|
|
26
24
|
const count = typeof data === 'number' ? data : (data?.count ?? 0);
|
|
27
25
|
const err = data?.error;
|
|
28
26
|
return (_jsxs("div", { children: [_jsx("div", { style: { fontSize: 28, fontWeight: 700, color: ACCENT }, children: formatValue(count, widget.unit, widget.decimals ?? 0) }), err && _jsxs("div", { style: { fontSize: 11, color: '#ef4444', marginTop: 2 }, children: ["formula: ", err] })] }));
|
|
@@ -54,7 +52,7 @@ export const metricWidget = {
|
|
|
54
52
|
update({ terms: [...terms, { name, tags: [], agg: 'count' }] });
|
|
55
53
|
};
|
|
56
54
|
const removeTerm = (i) => update({ terms: terms.filter((_, idx) => idx !== i) });
|
|
57
|
-
return (_jsxs(_Fragment, { children: [_jsx(Field, { label: "Metric type", ctx: ctx, children: _jsxs("select", { style: ctx.inputStyle, value: formulaMode ? 'formula' : 'count', onChange: (e) => setMode(e.target.value), children: [_jsx("option", { value: "count", children: "Live count (last N minutes)" }), _jsx("option", { value: "formula", children: "Formula / ratio (over date range)" })] }) }), !formulaMode && (
|
|
55
|
+
return (_jsxs(_Fragment, { children: [_jsx(Field, { label: "Metric type", ctx: ctx, children: _jsxs("select", { style: ctx.inputStyle, value: formulaMode ? 'formula' : 'count', onChange: (e) => setMode(e.target.value), children: [_jsx("option", { value: "count", children: "Live count (last N minutes)" }), _jsx("option", { value: "formula", children: "Formula / ratio (over date range)" })] }) }), !formulaMode && (_jsx(Field, { label: "Window (minutes)", ctx: ctx, children: _jsx("input", { type: "number", min: 1, style: ctx.inputStyle, value: draft.minutes ?? 5, onChange: (e) => update({ minutes: Number(e.target.value) || 5 }) }) })), formulaMode && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 8 }, children: [_jsx("span", { style: ctx.labelStyle, children: "Terms (each is one aggregate query)" }), terms.map((t, i) => (_jsx(TermRow, { term: t, ctx: ctx, onChange: (nt) => updateTerm(i, nt), onRemove: () => removeTerm(i) }, i))), _jsx("button", { type: "button", onClick: addTerm, style: {
|
|
58
56
|
alignSelf: 'flex-start',
|
|
59
57
|
fontSize: 12,
|
|
60
58
|
padding: '5px 10px',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/widgets/metric.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/widgets/metric.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,8 @@ export declare function defaultWidget(kind: WidgetKind, partial?: Partial<Widget
|
|
|
19
19
|
/**
|
|
20
20
|
* Upgrade a legacy stored widget so old embed dashboards keep loading:
|
|
21
21
|
* - `unique_visitors` → `timeseries` + metric 'unique'
|
|
22
|
-
* -
|
|
22
|
+
* - `top_events` → `top_tags` + tagPrefix 'event:'
|
|
23
|
+
* - drop legacy eventType/breakdown/funnelSlug/funnelId
|
|
23
24
|
* - funnel widgets missing `steps` → empty array
|
|
24
25
|
*/
|
|
25
26
|
export declare function normalizeWidget(raw: Widget): Widget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/widgets/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAO/D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/widgets/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAO/D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAQnD,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,YAAY;;;;GAA2E,CAAC;AAErG,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAajF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8BnD"}
|
package/dist/widgets/registry.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DEFAULT_W, newId } from './types.js';
|
|
1
|
+
import { DEFAULT_W, EVENT_TAG_PREFIX, newId } from './types.js';
|
|
2
2
|
import { metricWidget } from './metric.js';
|
|
3
3
|
import { timeseriesWidget, areaWidget } from './timeseries.js';
|
|
4
|
-
import { barWidget, pieWidget,
|
|
4
|
+
import { barWidget, pieWidget, topTagsWidget } from './categorical.js';
|
|
5
5
|
import { funnelWidget } from './funnel.js';
|
|
6
6
|
export const uiRegistry = {
|
|
7
7
|
metric: metricWidget,
|
|
@@ -9,7 +9,6 @@ export const uiRegistry = {
|
|
|
9
9
|
area: areaWidget,
|
|
10
10
|
bar: barWidget,
|
|
11
11
|
pie: pieWidget,
|
|
12
|
-
top_events: topEventsWidget,
|
|
13
12
|
top_tags: topTagsWidget,
|
|
14
13
|
funnel: funnelWidget,
|
|
15
14
|
};
|
|
@@ -33,19 +32,40 @@ export function defaultWidget(kind, partial) {
|
|
|
33
32
|
/**
|
|
34
33
|
* Upgrade a legacy stored widget so old embed dashboards keep loading:
|
|
35
34
|
* - `unique_visitors` → `timeseries` + metric 'unique'
|
|
36
|
-
* -
|
|
35
|
+
* - `top_events` → `top_tags` + tagPrefix 'event:'
|
|
36
|
+
* - drop legacy eventType/breakdown/funnelSlug/funnelId
|
|
37
37
|
* - funnel widgets missing `steps` → empty array
|
|
38
38
|
*/
|
|
39
39
|
export function normalizeWidget(raw) {
|
|
40
40
|
const w = { ...raw };
|
|
41
41
|
delete w.funnelSlug;
|
|
42
42
|
delete w.funnelId;
|
|
43
|
+
delete w.eventType;
|
|
44
|
+
delete w.breakdown;
|
|
43
45
|
if (w.kind === 'unique_visitors') {
|
|
44
46
|
w.kind = 'timeseries';
|
|
45
47
|
w.metric = 'unique';
|
|
46
48
|
}
|
|
49
|
+
if (w.kind === 'top_events') {
|
|
50
|
+
w.kind = 'top_tags';
|
|
51
|
+
w.tagPrefix = EVENT_TAG_PREFIX;
|
|
52
|
+
}
|
|
47
53
|
if (w.kind === 'funnel' && !Array.isArray(w.steps))
|
|
48
54
|
w.steps = [];
|
|
55
|
+
if (w.kind === 'funnel' && Array.isArray(w.steps)) {
|
|
56
|
+
w.steps = w.steps.map((s) => {
|
|
57
|
+
const step = s;
|
|
58
|
+
if (typeof step.type === 'string' && step.type.trim()) {
|
|
59
|
+
const name = step.type.trim();
|
|
60
|
+
const eventTag = name.startsWith(EVENT_TAG_PREFIX) ? name : `${EVENT_TAG_PREFIX}${name}`;
|
|
61
|
+
const tags = Array.isArray(step.tags) ? [...step.tags] : [];
|
|
62
|
+
if (!tags.some((t) => t.startsWith(EVENT_TAG_PREFIX)))
|
|
63
|
+
tags.unshift(eventTag);
|
|
64
|
+
return { tags };
|
|
65
|
+
}
|
|
66
|
+
return { tags: Array.isArray(step.tags) ? step.tags : [] };
|
|
67
|
+
});
|
|
68
|
+
}
|
|
49
69
|
if (!Array.isArray(w.tags))
|
|
50
70
|
w.tags = [];
|
|
51
71
|
return w;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/widgets/registry.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/widgets/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeseries.d.ts","sourceRoot":"","sources":["../../src/widgets/timeseries.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"timeseries.d.ts","sourceRoot":"","sources":["../../src/widgets/timeseries.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA8B,MAAM,YAAY,CAAC;AA8CvE,eAAO,MAAM,gBAAgB,EAAE,QAK9B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,QAKxB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { ACCENT } from './types.js';
|
|
3
|
-
import { Field, NoData, MetricField
|
|
3
|
+
import { Field, NoData, MetricField } from './common.js';
|
|
4
4
|
function TimechartRender({ widget, data, theme }) {
|
|
5
5
|
const d = Array.isArray(data) ? data : [];
|
|
6
6
|
if (d.length === 0)
|
|
@@ -16,7 +16,7 @@ function TimechartRender({ widget, data, theme }) {
|
|
|
16
16
|
} }, i))) }));
|
|
17
17
|
}
|
|
18
18
|
function TimechartEditForm({ draft, update, ctx }) {
|
|
19
|
-
return (_jsxs(_Fragment, { children: [_jsx(Field, { label: "Bucket interval", ctx: ctx, children: _jsxs("select", { style: ctx.inputStyle, value: draft.bucket ?? '1 day', onChange: (e) => update({ bucket: e.target.value }), children: [_jsx("option", { value: "1 hour", children: "1 hour" }), _jsx("option", { value: "6 hours", children: "6 hours" }), _jsx("option", { value: "1 day", children: "1 day" }), _jsx("option", { value: "7 days", children: "7 days" })] }) }), _jsx(MetricField, { draft: draft, update: update, ctx: ctx })
|
|
19
|
+
return (_jsxs(_Fragment, { children: [_jsx(Field, { label: "Bucket interval", ctx: ctx, children: _jsxs("select", { style: ctx.inputStyle, value: draft.bucket ?? '1 day', onChange: (e) => update({ bucket: e.target.value }), children: [_jsx("option", { value: "1 hour", children: "1 hour" }), _jsx("option", { value: "6 hours", children: "6 hours" }), _jsx("option", { value: "1 day", children: "1 day" }), _jsx("option", { value: "7 days", children: "7 days" })] }) }), _jsx(MetricField, { draft: draft, update: update, ctx: ctx })] }));
|
|
20
20
|
}
|
|
21
21
|
const timechartConfig = () => ({ bucket: '1 day', metric: 'count' });
|
|
22
22
|
export const timeseriesWidget = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeseries.js","sourceRoot":"","sources":["../../src/widgets/timeseries.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"timeseries.js","sourceRoot":"","sources":["../../src/widgets/timeseries.tsx"],"names":[],"mappings":"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"}
|
package/dist/widgets/types.d.ts
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
* funnel steps stored INLINE on the widget.
|
|
9
9
|
*/
|
|
10
10
|
import type React from 'react';
|
|
11
|
-
export type WidgetKind = 'metric' | 'timeseries' | 'area' | 'bar' | 'pie' | '
|
|
11
|
+
export type WidgetKind = 'metric' | 'timeseries' | 'area' | 'bar' | 'pie' | 'top_tags' | 'funnel';
|
|
12
12
|
export type Theme = 'light' | 'dark';
|
|
13
13
|
export type Metric = 'count' | 'unique' | 'sum' | 'avg';
|
|
14
|
+
/** Funnel step — matched via hasAll(tags, step.tags). Must include an event: tag. */
|
|
14
15
|
export interface FunnelStep {
|
|
15
|
-
|
|
16
|
-
tags?: string[];
|
|
16
|
+
tags: string[];
|
|
17
17
|
}
|
|
18
18
|
export interface WidgetLayout {
|
|
19
19
|
x: number;
|
|
@@ -31,7 +31,6 @@ export interface WidgetTabs {
|
|
|
31
31
|
export interface FormulaTerm {
|
|
32
32
|
name: string;
|
|
33
33
|
tags: string[];
|
|
34
|
-
eventType?: string;
|
|
35
34
|
agg: Metric;
|
|
36
35
|
}
|
|
37
36
|
export interface Widget {
|
|
@@ -39,12 +38,10 @@ export interface Widget {
|
|
|
39
38
|
title: string;
|
|
40
39
|
kind: WidgetKind;
|
|
41
40
|
tags: string[];
|
|
42
|
-
eventType?: string;
|
|
43
41
|
tagPrefix?: string;
|
|
44
42
|
bucket?: string;
|
|
45
43
|
metric?: Metric;
|
|
46
44
|
minutes?: number;
|
|
47
|
-
breakdown?: 'event_type' | 'tag';
|
|
48
45
|
steps?: FunnelStep[];
|
|
49
46
|
windowMinutes?: number;
|
|
50
47
|
filterTags?: string[];
|
|
@@ -75,6 +72,7 @@ export declare const MIN_W = 2;
|
|
|
75
72
|
export declare const MAX_W = 12;
|
|
76
73
|
export declare const DEFAULT_W = 6;
|
|
77
74
|
export declare const ACCENT = "#4f46e5";
|
|
75
|
+
export declare const EVENT_TAG_PREFIX = "event:";
|
|
78
76
|
export declare function clampW(n: number): number;
|
|
79
77
|
export declare function newId(): string;
|
|
80
78
|
/** Context passed to every EditForm — endpoint info + themed input styles. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/widgets/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,YAAY,GACZ,MAAM,GACN,KAAK,GACL,KAAK,GACL,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/widgets/types.ts"],"names":[],"mappings":"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"}
|
package/dist/widgets/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/widgets/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/widgets/types.ts"],"names":[],"mappings":"AAgFA,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACZ,IAA+B,CAAC,QAAQ,KAAK,IAAI,CACnD,CAAC;AACJ,CAAC;AAQD,yCAAyC;AACzC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;AACvB,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAE3B,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAEzC,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAmCD,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY;IACrC,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC"}
|