@manta-eu/react 0.1.7 → 0.1.9
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 +2 -0
- package/dist/components/chart/AreaChart.d.ts.map +1 -1
- package/dist/components/chart/AreaChart.js +4 -6
- package/dist/components/chart/BarChart.d.ts.map +1 -1
- package/dist/components/chart/BarChart.js +5 -6
- package/dist/components/chart/ComposedChart.d.ts.map +1 -1
- package/dist/components/chart/ComposedChart.js +15 -7
- package/dist/components/chart/LineChart.d.ts.map +1 -1
- package/dist/components/chart/LineChart.js +4 -6
- package/dist/components/chart/annotations.d.ts +4 -0
- package/dist/components/chart/annotations.d.ts.map +1 -1
- package/dist/components/chart/annotations.js +10 -2
- package/dist/components/chart/chart-schemas.d.ts +1960 -54
- package/dist/components/chart/chart-schemas.d.ts.map +1 -1
- package/dist/components/chart/chart-schemas.js +137 -15
- package/dist/components/chart/series.d.ts +28 -0
- package/dist/components/chart/series.d.ts.map +1 -0
- package/dist/components/chart/series.js +61 -0
- package/dist/components/chart/stacks.d.ts +9 -0
- package/dist/components/chart/stacks.d.ts.map +1 -0
- package/dist/components/chart/stacks.js +11 -0
- package/dist/components/chat-view/ChatHeaders.d.ts.map +1 -1
- package/dist/components/chat-view/ChatHeaders.js +2 -2
- package/dist/components/layouts/Sidebar.d.ts.map +1 -1
- package/dist/components/layouts/Sidebar.js +14 -3
- package/dist/components/planning/ActioningView.d.ts +1 -0
- package/dist/components/planning/ActioningView.d.ts.map +1 -1
- package/dist/components/planning/ActioningView.js +15 -52
- package/dist/components/planning/ExecutionSectionItem.d.ts +6 -4
- package/dist/components/planning/ExecutionSectionItem.d.ts.map +1 -1
- package/dist/components/planning/ExecutionSectionItem.js +2 -2
- package/dist/components/planning/ExecutionSections.d.ts +6 -4
- package/dist/components/planning/ExecutionSections.d.ts.map +1 -1
- package/dist/components/planning/ExecutionSections.js +2 -2
- package/dist/components/planning/ManualActionCard.d.ts +14 -8
- package/dist/components/planning/ManualActionCard.d.ts.map +1 -1
- package/dist/components/planning/ManualActionCard.js +44 -24
- package/dist/components/planning/ManualActionList.d.ts +22 -0
- package/dist/components/planning/ManualActionList.d.ts.map +1 -0
- package/dist/components/planning/ManualActionList.js +35 -0
- package/dist/components/planning/manual-action-targets.d.ts +4 -0
- package/dist/components/planning/manual-action-targets.d.ts.map +1 -0
- package/dist/components/planning/manual-action-targets.js +19 -0
- package/dist/components/select/index.d.ts.map +1 -1
- package/dist/components/select/index.js +4 -1
- package/dist/components/sidebar/index.d.ts +2 -0
- package/dist/components/sidebar/index.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +1 -0
- package/dist/components/sidebar/nav-user.d.ts +1 -1
- package/dist/components/sidebar/nav-user.d.ts.map +1 -1
- package/dist/components/sidebar/nav-user.js +3 -3
- package/dist/components/sidebar/user-avatar.d.ts +7 -0
- package/dist/components/sidebar/user-avatar.d.ts.map +1 -0
- package/dist/components/sidebar/user-avatar.js +9 -0
- package/dist/globals.css +6 -13
- package/dist/hooks/use-connection-problems.d.ts.map +1 -1
- package/dist/hooks/use-manual-actions.d.ts +13 -3
- package/dist/hooks/use-manual-actions.d.ts.map +1 -1
- package/dist/hooks/use-manual-actions.js +16 -10
- package/dist/hooks/useAuth.d.ts +1 -0
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +7 -1
- package/dist/hooks/useConversations.d.ts +1 -0
- package/dist/hooks/useConversations.d.ts.map +1 -1
- package/dist/hooks/useResolveManualAction.d.ts +14 -0
- package/dist/hooks/useResolveManualAction.d.ts.map +1 -0
- package/dist/hooks/useResolveManualAction.js +47 -0
- package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
- package/dist/ldo-ui.d.ts +2 -1
- package/dist/ldo-ui.d.ts.map +1 -1
- package/dist/ldo-ui.js +2 -1
- package/dist/lib/build-config.d.ts +2 -0
- package/dist/lib/build-config.d.ts.map +1 -1
- package/dist/lib/build-config.js +2 -0
- package/dist/lib/chat-types.d.ts +1 -0
- package/dist/lib/chat-types.d.ts.map +1 -1
- package/dist/lib/datastore-route-table.d.ts +2 -0
- package/dist/lib/datastore-route-table.d.ts.map +1 -1
- package/dist/lib/datastore-route-table.js +3 -1
- package/dist/lib/datastore-routes.d.ts +7 -1
- package/dist/lib/datastore-routes.d.ts.map +1 -1
- package/dist/lib/datastore-routes.js +7 -2
- package/dist/lib/decode-chart-entities.d.ts.map +1 -1
- package/dist/lib/decode-chart-entities.js +5 -1
- package/dist/lib/manual-actions.d.ts +1 -0
- package/dist/lib/manual-actions.d.ts.map +1 -1
- package/dist/lib/manual-actions.js +4 -1
- package/dist/lib/structured-data/types.d.ts +7 -2
- package/dist/lib/structured-data/types.d.ts.map +1 -1
- package/dist/providers/ChatManagerProvider.d.ts.map +1 -1
- package/dist/providers/ChatManagerProvider.js +18 -16
- package/dist/providers/NavExtrasProvider.d.ts +23 -0
- package/dist/providers/NavExtrasProvider.d.ts.map +1 -0
- package/dist/providers/NavExtrasProvider.js +10 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/routes/explain/ExplainEmpty.d.ts.map +1 -1
- package/dist/routes/explain/ExplainEmpty.js +2 -1
- package/dist/routes/integrations/catalog-shape.d.ts +2 -1
- package/dist/routes/integrations/catalog-shape.d.ts.map +1 -1
- package/dist/routes/integrations/components/AddIntegrationModal.d.ts.map +1 -1
- package/dist/routes/integrations/components/AddIntegrationModal.js +1 -1
- package/dist/routes/integrations/components/MantaSyncPluginDownload.d.ts +13 -0
- package/dist/routes/integrations/components/MantaSyncPluginDownload.d.ts.map +1 -0
- package/dist/routes/integrations/components/MantaSyncPluginDownload.js +23 -0
- package/dist/routes/integrations/components/connect-forms/ConnectFormHeader.d.ts +1 -1
- package/dist/routes/integrations/components/connect-forms/ConnectFormHeader.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/ConnectWizardShell.d.ts +1 -1
- package/dist/routes/integrations/components/connect-forms/ConnectWizardShell.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/ConnectionStringInput.d.ts +11 -0
- package/dist/routes/integrations/components/connect-forms/ConnectionStringInput.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/ConnectionStringInput.js +49 -0
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.d.ts +7 -0
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.js +87 -0
- package/dist/routes/integrations/components/connect-forms/DataConnectionConnectForm.d.ts +20 -0
- package/dist/routes/integrations/components/connect-forms/DataConnectionConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/DataConnectionConnectForm.js +144 -0
- package/dist/routes/integrations/components/connect-forms/DataConnectionFieldInputs.d.ts +8 -0
- package/dist/routes/integrations/components/connect-forms/DataConnectionFieldInputs.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/DataConnectionFieldInputs.js +44 -0
- package/dist/routes/integrations/components/connect-forms/FigmaConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/FigmaConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/FigmaConnectForm.js +20 -0
- package/dist/routes/integrations/components/connect-forms/GmailConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/GmailConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/GmailConnectForm.js +11 -0
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js +37 -0
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js +37 -0
- package/dist/routes/integrations/components/connect-forms/ImportStartedNotice.d.ts +21 -0
- package/dist/routes/integrations/components/connect-forms/ImportStartedNotice.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/ImportStartedNotice.js +25 -0
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts +45 -0
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js +188 -0
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.d.ts +6 -0
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js +68 -0
- package/dist/routes/integrations/components/connect-forms/LinkedinConnectForm.d.ts +10 -0
- package/dist/routes/integrations/components/connect-forms/LinkedinConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/LinkedinConnectForm.js +124 -0
- package/dist/routes/integrations/components/connect-forms/MetaAdsConnectForm.d.ts +14 -0
- package/dist/routes/integrations/components/connect-forms/MetaAdsConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/MetaAdsConnectForm.js +183 -0
- package/dist/routes/integrations/components/connect-forms/OAuthConnectLink.d.ts +10 -0
- package/dist/routes/integrations/components/connect-forms/OAuthConnectLink.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/OAuthConnectLink.js +17 -0
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts +45 -0
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js +136 -0
- package/dist/routes/integrations/components/connect-forms/OAuthSingleAccountConnectForm.d.ts +23 -0
- package/dist/routes/integrations/components/connect-forms/OAuthSingleAccountConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/OAuthSingleAccountConnectForm.js +63 -0
- package/dist/routes/integrations/components/connect-forms/ShopifyConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/ShopifyConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/ShopifyConnectForm.js +14 -0
- package/dist/routes/integrations/components/connect-forms/SlackConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/SlackConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/SlackConnectForm.js +10 -0
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.d.ts +5 -0
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js +35 -0
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.d.ts +5 -0
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js +47 -0
- package/dist/routes/integrations/components/connect-forms/connection-string-fields.d.ts +13 -0
- package/dist/routes/integrations/components/connect-forms/connection-string-fields.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/connection-string-fields.js +110 -0
- package/dist/routes/integrations/components/connect-forms/dash-folder-tree.d.ts +6 -0
- package/dist/routes/integrations/components/connect-forms/dash-folder-tree.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/dash-folder-tree.js +14 -0
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.d.ts +35 -0
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.js +88 -0
- package/dist/routes/integrations/components/connect-forms/google-ads-account-tree.d.ts +11 -0
- package/dist/routes/integrations/components/connect-forms/google-ads-account-tree.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/google-ads-account-tree.js +36 -0
- package/dist/routes/integrations/components/connect-forms/google-analytics-property-tree.d.ts +6 -0
- package/dist/routes/integrations/components/connect-forms/google-analytics-property-tree.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/google-analytics-property-tree.js +34 -0
- package/dist/routes/integrations/components/connect-forms/oauth-setup-phase.d.ts +12 -0
- package/dist/routes/integrations/components/connect-forms/oauth-setup-phase.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/oauth-setup-phase.js +33 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js +8 -0
- package/dist/routes/integrations/components/connect-forms/types.d.ts +5 -1
- package/dist/routes/integrations/components/connect-forms/types.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/useConnectWizard.d.ts +19 -0
- package/dist/routes/integrations/components/connect-forms/useConnectWizard.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/useConnectWizard.js +28 -0
- package/dist/routes/integrations/components/connect-forms/useConnectedExternalIds.d.ts +4 -0
- package/dist/routes/integrations/components/connect-forms/useConnectedExternalIds.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/useConnectedExternalIds.js +17 -0
- package/dist/routes/integrations/components/connect-forms/useWindowFocusPoll.d.ts +7 -0
- package/dist/routes/integrations/components/connect-forms/useWindowFocusPoll.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/useWindowFocusPoll.js +18 -0
- package/dist/routes/integrations/connect-forms.d.ts +16 -0
- package/dist/routes/integrations/connect-forms.d.ts.map +1 -0
- package/dist/routes/integrations/connect-forms.js +14 -0
- package/dist/routes/integrations/filter-connected-providers.d.ts +3 -0
- package/dist/routes/integrations/filter-connected-providers.d.ts.map +1 -0
- package/dist/routes/integrations/filter-connected-providers.js +15 -0
- package/dist/routes/integrations/overview.d.ts +3 -0
- package/dist/routes/integrations/overview.d.ts.map +1 -0
- package/dist/routes/integrations/overview.js +2 -0
- package/dist/routes/integrations/use-connected-account-entities.d.ts +10 -0
- package/dist/routes/integrations/use-connected-account-entities.d.ts.map +1 -0
- package/dist/routes/integrations/use-connected-account-entities.js +29 -0
- package/dist/routes/memories/components/EmptyStates.d.ts.map +1 -1
- package/dist/routes/memories/components/EmptyStates.js +2 -1
- package/dist/routes/plans/components/ActionPlanPage.d.ts +1 -0
- package/dist/routes/plans/components/ActionPlanPage.d.ts.map +1 -1
- package/dist/routes/plans/components/ActionPlanPage.js +9 -5
- package/dist/routes/plans/components/actionPlansTableConfig.d.ts +12 -12
- package/dist/rules/datalog-ast/DatalogBodyFormulaComponent.d.ts.map +1 -1
- package/dist/rules/datalog-ast/DatalogBodyFormulaComponent.js +4 -1
- package/dist/rules/rule-narrative-aggregates.d.ts +1 -0
- package/dist/rules/rule-narrative-aggregates.d.ts.map +1 -1
- package/dist/rules/rule-narrative-aggregates.js +20 -0
- package/dist/rules/rule-narrative-context.d.ts.map +1 -1
- package/dist/rules/rule-narrative-context.js +3 -9
- package/dist/rules/rule-narrative-format.d.ts +1 -1
- package/dist/rules/rule-narrative.d.ts.map +1 -1
- package/dist/rules/rule-narrative.js +22 -7
- package/package.json +47 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-schemas.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"chart-schemas.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from "zod/v4";
|
|
2
|
+
import { chartColorPalette } from "./chart-colors.js";
|
|
3
|
+
import { offsetSeriesKeys } from "./stacks.js";
|
|
2
4
|
const baseChartSchema = z.object({
|
|
3
5
|
title: z.string().optional(),
|
|
4
6
|
height: z.number().int().min(120).max(600).optional(),
|
|
@@ -7,14 +9,105 @@ const cartesianAxisFields = {
|
|
|
7
9
|
xAxisLabel: z.string().optional(),
|
|
8
10
|
yAxisLabel: z.string().optional(),
|
|
9
11
|
};
|
|
10
|
-
const
|
|
12
|
+
const seriesKeySchema = z
|
|
13
|
+
.string()
|
|
14
|
+
.regex(/^[A-Za-z_][A-Za-z0-9_]*$/, "A series key is letters, digits and underscores, starting with a letter");
|
|
15
|
+
export const chartSeriesAxes = ["left", "right"];
|
|
16
|
+
export const chartSeriesKinds = ["bar", "line"];
|
|
17
|
+
export const maxChartSeries = chartColorPalette.length;
|
|
18
|
+
export const chartSeriesSchema = z.object({
|
|
19
|
+
key: seriesKeySchema,
|
|
20
|
+
label: z.string().optional(),
|
|
21
|
+
axis: z.enum(chartSeriesAxes).optional(),
|
|
22
|
+
});
|
|
23
|
+
export const composedChartSeriesSchema = chartSeriesSchema.extend({
|
|
24
|
+
kind: z.enum(chartSeriesKinds),
|
|
25
|
+
});
|
|
26
|
+
const multiSeriesFields = {
|
|
27
|
+
series: z.array(chartSeriesSchema).min(1).max(maxChartSeries).optional(),
|
|
28
|
+
rightAxisLabel: z.string().optional(),
|
|
29
|
+
};
|
|
30
|
+
const xyDataPointSchema = z.looseObject({
|
|
11
31
|
x: z.union([z.string(), z.number()]),
|
|
12
|
-
y: z.number(),
|
|
32
|
+
y: z.number().optional(),
|
|
13
33
|
});
|
|
14
34
|
const nameValueDataPointSchema = z.object({
|
|
15
35
|
name: z.string(),
|
|
16
36
|
value: z.number(),
|
|
17
37
|
});
|
|
38
|
+
const seriesNameValueDataPointSchema = z.looseObject({
|
|
39
|
+
name: z.string(),
|
|
40
|
+
value: z.number().optional(),
|
|
41
|
+
});
|
|
42
|
+
function checkStatSeries(chart, ctx, keys = [], offset = new Set()) {
|
|
43
|
+
const known = new Set([...annotationSeriesValues, ...keys]);
|
|
44
|
+
chart.annotations?.forEach((annotation, index) => {
|
|
45
|
+
if (annotation.series === undefined) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (offset.has(annotation.series)) {
|
|
49
|
+
ctx.addIssue({
|
|
50
|
+
code: "custom",
|
|
51
|
+
message: `"${annotation.series}" is stacked on another series, so a stat line on it would not line up; leave out "series" to measure the stack total`,
|
|
52
|
+
path: ["annotations", index, "series"],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else if (!known.has(annotation.series)) {
|
|
56
|
+
ctx.addIssue({
|
|
57
|
+
code: "custom",
|
|
58
|
+
message: `"${annotation.series}" is not a series of this chart`,
|
|
59
|
+
path: ["annotations", index, "series"],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function checkSeries(valueKeys, categoryKey) {
|
|
65
|
+
return (chart, ctx) => {
|
|
66
|
+
const { data, series } = chart;
|
|
67
|
+
checkStatSeries(chart, ctx, series?.map(({ key }) => key), offsetSeriesKeys(series, chart.stacked));
|
|
68
|
+
if (series === undefined) {
|
|
69
|
+
data.forEach((point, index) => {
|
|
70
|
+
valueKeys.forEach((key) => {
|
|
71
|
+
if (typeof point[key] !== "number") {
|
|
72
|
+
ctx.addIssue({ code: "custom", message: `Expected a number for "${key}"`, path: ["data", index, key] });
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
series.forEach(({ key }, index) => {
|
|
80
|
+
if (key === categoryKey) {
|
|
81
|
+
ctx.addIssue({ code: "custom", message: `"${key}" is the category field`, path: ["series", index, "key"] });
|
|
82
|
+
}
|
|
83
|
+
if (seen.has(key)) {
|
|
84
|
+
ctx.addIssue({ code: "custom", message: `"${key}" is listed twice`, path: ["series", index, "key"] });
|
|
85
|
+
}
|
|
86
|
+
seen.add(key);
|
|
87
|
+
});
|
|
88
|
+
data.forEach((point, index) => {
|
|
89
|
+
series.forEach(({ key }) => {
|
|
90
|
+
const value = point[key];
|
|
91
|
+
if (value !== undefined && value !== null && typeof value !== "number") {
|
|
92
|
+
ctx.addIssue({ code: "custom", message: `Expected a number for "${key}"`, path: ["data", index, key] });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
series.forEach(({ key }, index) => {
|
|
97
|
+
if (!data.some((point) => typeof point[key] === "number")) {
|
|
98
|
+
ctx.addIssue({
|
|
99
|
+
code: "custom",
|
|
100
|
+
message: `"${key}" has no values: give each point a number under "${key}"`,
|
|
101
|
+
path: ["series", index, "key"],
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function asSeriesChartData() {
|
|
108
|
+
// checkSeries has proven the shape; this only tells TypeScript.
|
|
109
|
+
return (chart) => chart;
|
|
110
|
+
}
|
|
18
111
|
const scatterDataPointSchema = z.object({
|
|
19
112
|
x: z.number(),
|
|
20
113
|
y: z.number(),
|
|
@@ -23,10 +116,10 @@ const radarDataPointSchema = z.object({
|
|
|
23
116
|
subject: z.string(),
|
|
24
117
|
value: z.number(),
|
|
25
118
|
});
|
|
26
|
-
const composedDataPointSchema = z.
|
|
119
|
+
const composedDataPointSchema = z.looseObject({
|
|
27
120
|
name: z.string(),
|
|
28
|
-
barValue: z.number(),
|
|
29
|
-
lineValue: z.number(),
|
|
121
|
+
barValue: z.number().optional(),
|
|
122
|
+
lineValue: z.number().optional(),
|
|
30
123
|
});
|
|
31
124
|
const axisValueSchema = z.union([z.string(), z.number()]);
|
|
32
125
|
export const annotationTones = ["danger", "warning", "success", "info", "neutral"];
|
|
@@ -48,7 +141,7 @@ const statLineAnnotationSchema = z.object({
|
|
|
48
141
|
kind: z.literal("stat-line"),
|
|
49
142
|
stat: annotationStatSchema,
|
|
50
143
|
axis: z.enum(["x", "y"]).optional(),
|
|
51
|
-
series: annotationSeriesSchema.optional(),
|
|
144
|
+
series: z.union([annotationSeriesSchema, seriesKeySchema]).optional(),
|
|
52
145
|
label: z.string().optional(),
|
|
53
146
|
tone: annotationToneSchema.optional(),
|
|
54
147
|
color: z.string().optional(),
|
|
@@ -81,46 +174,68 @@ const cartesianAnnotationFields = {
|
|
|
81
174
|
annotations: z.array(annotationSchema).optional(),
|
|
82
175
|
showValueLabels: z.boolean().optional(),
|
|
83
176
|
};
|
|
84
|
-
export const
|
|
177
|
+
export const lineChartFieldsSchema = baseChartSchema.extend({
|
|
85
178
|
type: z.literal("line"),
|
|
86
179
|
data: z.array(xyDataPointSchema).min(1),
|
|
87
180
|
...cartesianAxisFields,
|
|
88
181
|
...cartesianAnnotationFields,
|
|
182
|
+
...multiSeriesFields,
|
|
89
183
|
});
|
|
90
|
-
export const
|
|
184
|
+
export const lineChartSchema = lineChartFieldsSchema
|
|
185
|
+
.superRefine(checkSeries(["y"], "x"))
|
|
186
|
+
.transform(asSeriesChartData());
|
|
187
|
+
export const areaChartFieldsSchema = baseChartSchema.extend({
|
|
91
188
|
type: z.literal("area"),
|
|
92
189
|
data: z.array(xyDataPointSchema).min(1),
|
|
190
|
+
stacked: z.boolean().optional(),
|
|
93
191
|
...cartesianAxisFields,
|
|
94
192
|
...cartesianAnnotationFields,
|
|
193
|
+
...multiSeriesFields,
|
|
95
194
|
});
|
|
96
|
-
export const
|
|
195
|
+
export const areaChartSchema = areaChartFieldsSchema
|
|
196
|
+
.superRefine(checkSeries(["y"], "x"))
|
|
197
|
+
.transform(asSeriesChartData());
|
|
198
|
+
export const barChartFieldsSchema = baseChartSchema.extend({
|
|
97
199
|
type: z.literal("bar"),
|
|
98
|
-
data: z.array(
|
|
200
|
+
data: z.array(seriesNameValueDataPointSchema).min(1),
|
|
201
|
+
stacked: z.boolean().optional(),
|
|
99
202
|
...cartesianAxisFields,
|
|
100
203
|
...cartesianAnnotationFields,
|
|
204
|
+
...multiSeriesFields,
|
|
101
205
|
});
|
|
206
|
+
export const barChartSchema = barChartFieldsSchema
|
|
207
|
+
.superRefine(checkSeries(["value"], "name"))
|
|
208
|
+
.transform(asSeriesChartData());
|
|
102
209
|
export const pieChartSchema = baseChartSchema.extend({
|
|
103
210
|
type: z.literal("pie"),
|
|
104
211
|
data: z.array(nameValueDataPointSchema).min(1),
|
|
105
212
|
});
|
|
106
|
-
export const scatterChartSchema = baseChartSchema
|
|
213
|
+
export const scatterChartSchema = baseChartSchema
|
|
214
|
+
.extend({
|
|
107
215
|
type: z.literal("scatter"),
|
|
108
216
|
data: z.array(scatterDataPointSchema).min(1),
|
|
109
217
|
...cartesianAxisFields,
|
|
110
218
|
...cartesianAnnotationFields,
|
|
111
|
-
})
|
|
219
|
+
})
|
|
220
|
+
.superRefine((chart, ctx) => checkStatSeries(chart, ctx));
|
|
112
221
|
export const radarChartSchema = baseChartSchema.extend({
|
|
113
222
|
type: z.literal("radar"),
|
|
114
223
|
data: z.array(radarDataPointSchema).min(1),
|
|
115
224
|
});
|
|
116
|
-
export const
|
|
225
|
+
export const composedChartFieldsSchema = baseChartSchema.extend({
|
|
117
226
|
type: z.literal("composed"),
|
|
118
227
|
data: z.array(composedDataPointSchema).min(1),
|
|
119
228
|
barLabel: z.string().optional(),
|
|
120
229
|
lineLabel: z.string().optional(),
|
|
230
|
+
stacked: z.boolean().optional(),
|
|
121
231
|
...cartesianAxisFields,
|
|
122
232
|
...cartesianAnnotationFields,
|
|
233
|
+
...multiSeriesFields,
|
|
234
|
+
series: z.array(composedChartSeriesSchema).min(1).max(maxChartSeries).optional(),
|
|
123
235
|
});
|
|
236
|
+
export const composedChartSchema = composedChartFieldsSchema
|
|
237
|
+
.superRefine(checkSeries(["barValue", "lineValue"], "name"))
|
|
238
|
+
.transform(asSeriesChartData());
|
|
124
239
|
export const chartSchema = z.discriminatedUnion("type", [
|
|
125
240
|
lineChartSchema,
|
|
126
241
|
areaChartSchema,
|
|
@@ -130,7 +245,7 @@ export const chartSchema = z.discriminatedUnion("type", [
|
|
|
130
245
|
radarChartSchema,
|
|
131
246
|
composedChartSchema,
|
|
132
247
|
]);
|
|
133
|
-
const generateChartDataPointSchema = z.
|
|
248
|
+
const generateChartDataPointSchema = z.looseObject({
|
|
134
249
|
x: z.union([z.string(), z.number()]).optional(),
|
|
135
250
|
y: z.number().optional(),
|
|
136
251
|
name: z.string().optional(),
|
|
@@ -148,7 +263,7 @@ const generateChartAnnotationSchema = z.object({
|
|
|
148
263
|
x: axisValueSchema.optional(),
|
|
149
264
|
y: z.number().optional(),
|
|
150
265
|
stat: annotationStatSchema.optional(),
|
|
151
|
-
series: annotationSeriesSchema.optional(),
|
|
266
|
+
series: z.union([annotationSeriesSchema, seriesKeySchema]).optional(),
|
|
152
267
|
label: z.string().optional(),
|
|
153
268
|
tone: annotationToneSchema.optional(),
|
|
154
269
|
color: z.string().optional(),
|
|
@@ -162,7 +277,14 @@ export const generateChartInputSchema = z.object({
|
|
|
162
277
|
yAxisLabel: z.string().optional(),
|
|
163
278
|
barLabel: z.string().optional(),
|
|
164
279
|
lineLabel: z.string().optional(),
|
|
280
|
+
rightAxisLabel: z.string().optional(),
|
|
165
281
|
data: z.array(generateChartDataPointSchema).min(1),
|
|
282
|
+
series: z
|
|
283
|
+
.array(chartSeriesSchema.extend({ kind: z.enum(chartSeriesKinds).optional() }))
|
|
284
|
+
.min(1)
|
|
285
|
+
.max(maxChartSeries)
|
|
286
|
+
.optional(),
|
|
287
|
+
stacked: z.boolean().optional(),
|
|
166
288
|
annotations: z.array(generateChartAnnotationSchema).optional(),
|
|
167
289
|
showValueLabels: z.boolean().optional(),
|
|
168
290
|
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { StatContext } from "./annotations.js";
|
|
2
|
+
import type { ChartConfig } from "./chart.js";
|
|
3
|
+
import type { ChartSeries, ComposedChartSeries } from "./chart-schemas.js";
|
|
4
|
+
export declare const rightAxisId = "right";
|
|
5
|
+
export declare function seriesConfig(series: readonly ChartSeries[]): ChartConfig;
|
|
6
|
+
export declare function seriesColor(series: readonly ChartSeries[], item: ChartSeries): string;
|
|
7
|
+
export declare function rightAxisProps(label?: string): {
|
|
8
|
+
yAxisId: string;
|
|
9
|
+
orientation: "right";
|
|
10
|
+
tickLine: false;
|
|
11
|
+
axisLine: false;
|
|
12
|
+
width: number;
|
|
13
|
+
label: {
|
|
14
|
+
value: string;
|
|
15
|
+
angle: number;
|
|
16
|
+
position: string;
|
|
17
|
+
} | undefined;
|
|
18
|
+
};
|
|
19
|
+
export declare function hasRightAxis(series: readonly ChartSeries[]): boolean;
|
|
20
|
+
export declare function seriesAxisId(item: ChartSeries): string | undefined;
|
|
21
|
+
export declare function seriesAxisProps(item: ChartSeries): {
|
|
22
|
+
yAxisId?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function barRadius(series: readonly ChartSeries[], item: ChartSeries, stacked: boolean): [number, number, number, number];
|
|
25
|
+
export declare function seriesValues(rows: readonly Record<string, unknown>[], key: string): number[];
|
|
26
|
+
export declare function stackTotals(rows: readonly Record<string, unknown>[], keys: readonly string[]): number[];
|
|
27
|
+
export declare function seriesStats(rows: readonly Record<string, unknown>[], series: readonly (ChartSeries | ComposedChartSeries)[], stacked?: boolean): StatContext;
|
|
28
|
+
//# sourceMappingURL=series.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"series.d.ts","sourceRoot":"","sources":["../../../src/components/chart/series.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,CAExE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAErF;AAED,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;EAS5C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAEpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAGvE;AAID,wBAAgB,SAAS,CACvB,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,OAAO,GACf,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAMlC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvG;AAkBD,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACxC,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,EAAE,EACtD,OAAO,UAAQ,GACd,WAAW,CAUb"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
2
|
+
import { chartColorAt } from "./chart-colors.js";
|
|
3
|
+
import { offsetSeriesKeys, stackedSeries } from "./stacks.js";
|
|
4
|
+
export const rightAxisId = "right";
|
|
5
|
+
export function seriesConfig(series) {
|
|
6
|
+
return Object.fromEntries(series.map((item) => [item.key, { label: item.label ?? item.key }]));
|
|
7
|
+
}
|
|
8
|
+
export function seriesColor(series, item) {
|
|
9
|
+
return chartColorAt(series.findIndex((other) => other.key === item.key));
|
|
10
|
+
}
|
|
11
|
+
export function rightAxisProps(label) {
|
|
12
|
+
return {
|
|
13
|
+
yAxisId: rightAxisId,
|
|
14
|
+
orientation: "right",
|
|
15
|
+
tickLine: false,
|
|
16
|
+
axisLine: false,
|
|
17
|
+
width: isPresent(label) ? 56 : 44,
|
|
18
|
+
label: isPresent(label) ? { value: label, angle: 90, position: "insideRight" } : undefined,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function hasRightAxis(series) {
|
|
22
|
+
return series.some((item) => item.axis === "right");
|
|
23
|
+
}
|
|
24
|
+
export function seriesAxisId(item) {
|
|
25
|
+
return item.axis === "right" ? rightAxisId : undefined;
|
|
26
|
+
}
|
|
27
|
+
export function seriesAxisProps(item) {
|
|
28
|
+
const yAxisId = seriesAxisId(item);
|
|
29
|
+
return yAxisId === undefined ? {} : { yAxisId };
|
|
30
|
+
}
|
|
31
|
+
const roundedTop = [4, 4, 0, 0];
|
|
32
|
+
export function barRadius(series, item, stacked) {
|
|
33
|
+
if (!stacked) {
|
|
34
|
+
return roundedTop;
|
|
35
|
+
}
|
|
36
|
+
const stack = series.filter((other) => (other.axis ?? "left") === (item.axis ?? "left"));
|
|
37
|
+
return stack[stack.length - 1]?.key === item.key ? roundedTop : [0, 0, 0, 0];
|
|
38
|
+
}
|
|
39
|
+
export function seriesValues(rows, key) {
|
|
40
|
+
return rows.map((row) => row[key]).filter((value) => typeof value === "number");
|
|
41
|
+
}
|
|
42
|
+
export function stackTotals(rows, keys) {
|
|
43
|
+
return rows.map((row) => keys.reduce((total, key) => total + (typeof row[key] === "number" ? row[key] : 0), 0));
|
|
44
|
+
}
|
|
45
|
+
function defaultStatValues(rows, series, stacked) {
|
|
46
|
+
const leftStack = stacked ? stackedSeries(series, "left") : [];
|
|
47
|
+
if (leftStack.length > 1) {
|
|
48
|
+
return stackTotals(rows, leftStack.map((item) => item.key));
|
|
49
|
+
}
|
|
50
|
+
const firstLeft = series.find((item) => item.axis !== "right");
|
|
51
|
+
return firstLeft === undefined ? [] : seriesValues(rows, firstLeft.key);
|
|
52
|
+
}
|
|
53
|
+
export function seriesStats(rows, series, stacked = false) {
|
|
54
|
+
const offset = offsetSeriesKeys(series, stacked);
|
|
55
|
+
return {
|
|
56
|
+
y: defaultStatValues(rows, series, stacked),
|
|
57
|
+
series: Object.fromEntries(series
|
|
58
|
+
.filter((item) => !offset.has(item.key))
|
|
59
|
+
.map((item) => [item.key, { values: seriesValues(rows, item.key), yAxisId: seriesAxisId(item) }])),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type StackableSeries = {
|
|
2
|
+
key: string;
|
|
3
|
+
axis?: "left" | "right";
|
|
4
|
+
kind?: "bar" | "line";
|
|
5
|
+
};
|
|
6
|
+
export declare function stackedSeries(series: readonly StackableSeries[], axis: "left" | "right"): StackableSeries[];
|
|
7
|
+
export declare function offsetSeriesKeys(series: readonly StackableSeries[] | undefined, stacked: boolean | undefined): Set<string>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=stacks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacks.d.ts","sourceRoot":"","sources":["../../../src/components/chart/stacks.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,CAAC;AAEvF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,eAAe,EAAE,CAE3G;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,eAW5G"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function stackedSeries(series, axis) {
|
|
2
|
+
return series.filter((item) => item.kind !== "line" && (item.axis ?? "left") === axis);
|
|
3
|
+
}
|
|
4
|
+
export function offsetSeriesKeys(series, stacked) {
|
|
5
|
+
if (!stacked || series === undefined) {
|
|
6
|
+
return new Set();
|
|
7
|
+
}
|
|
8
|
+
return new Set(["left", "right"].flatMap((axis) => stackedSeries(series, axis)
|
|
9
|
+
.slice(1)
|
|
10
|
+
.map((item) => item.key)));
|
|
11
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatHeaders.d.ts","sourceRoot":"","sources":["../../../src/components/chat-view/ChatHeaders.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"ChatHeaders.d.ts","sourceRoot":"","sources":["../../../src/components/chat-view/ChatHeaders.tsx"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAI9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAM3D,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA8BxD;AAED,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,SAAS,EAAE,CAAC;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CA+FtD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { withDatastorePrefix } from "@manta-eu/client/shared/datastore-path";
|
|
3
|
-
import { chatIdToPath } from "@manta-eu/client/shared/index";
|
|
3
|
+
import { chatIdToPath, newChatPath } from "@manta-eu/client/shared/index";
|
|
4
4
|
import { isPresent } from "@manta-eu/lib/present";
|
|
5
5
|
import { Bug, Ellipsis, ExternalLink, Trash2, X } from "lucide-react";
|
|
6
6
|
import { useCallback, useState } from "react";
|
|
@@ -29,7 +29,7 @@ export function CopilotHeader(props) {
|
|
|
29
29
|
const canClear = Boolean(conversationId && isPresent(messages) && onClear);
|
|
30
30
|
const showDebugMessages = isOperator || isDevBuild;
|
|
31
31
|
const handleOpenInManta = useCallback(() => {
|
|
32
|
-
const path = conversationId ? chatIdToPath(conversationId) :
|
|
32
|
+
const path = conversationId ? chatIdToPath(conversationId) : newChatPath;
|
|
33
33
|
const scopedPath = datastoreId ? withDatastorePrefix(datastoreId, path) : datastorePath(path);
|
|
34
34
|
const url = new URL(scopedPath, mantaBaseUrl.origin);
|
|
35
35
|
window.open(url.toString(), "_blank");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layouts/Sidebar.tsx"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layouts/Sidebar.tsx"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AA8BvD,KAAK,YAAY,GAAG;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CA8Z1C"}
|
|
@@ -16,7 +16,7 @@ import { Button } from "#components/button/index";
|
|
|
16
16
|
import { ChannelIcon } from "#components/channel-icon/index";
|
|
17
17
|
import { DropdownGroup, DropdownItem } from "#components/dropdown/index";
|
|
18
18
|
import { Popover, PopoverContent, PopoverTrigger } from "#components/popover/index";
|
|
19
|
-
import { Sidebar as BaseSidebar,
|
|
19
|
+
import { Sidebar as BaseSidebar, NavMenu, NavUser, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, UserAvatar, useSidebar, } from "#components/sidebar/index";
|
|
20
20
|
import { useConnectionProblems } from "#hooks/use-connection-problems";
|
|
21
21
|
import { useConversations } from "#hooks/useConversations";
|
|
22
22
|
import { useDeleteChat } from "#hooks/useDeleteChat";
|
|
@@ -28,6 +28,7 @@ import { useAbsoluteNavigate } from "#providers/ActiveDatastoreProvider";
|
|
|
28
28
|
import { AuthContext } from "#providers/AuthContext";
|
|
29
29
|
import { useChatManagerConnection } from "#providers/ChatManagerProvider";
|
|
30
30
|
import { useCommandContext } from "#providers/commands/CommandContext";
|
|
31
|
+
import { useNavExtras } from "#providers/NavExtrasProvider";
|
|
31
32
|
import { useKnowledgeGraphState } from "#providers/KnowledgeGraphStateContext";
|
|
32
33
|
import { useMantaClient } from "#providers/MantaClientProvider";
|
|
33
34
|
// Not a Keycloak Organization, so an operator without an explicit pick still resolves to this.
|
|
@@ -67,6 +68,7 @@ export function Sidebar(props) {
|
|
|
67
68
|
const { isApple } = usePlatform();
|
|
68
69
|
const ModifierIcon = isApple ? Command : ChevronUp;
|
|
69
70
|
const navItemTooltip = isKnowledgeGraphUnavailable ? "Available when Manta is ready" : undefined;
|
|
71
|
+
const navExtras = useNavExtras();
|
|
70
72
|
const navItems = useMemo(() => [
|
|
71
73
|
{
|
|
72
74
|
title: "New chat",
|
|
@@ -132,7 +134,16 @@ export function Sidebar(props) {
|
|
|
132
134
|
},
|
|
133
135
|
]
|
|
134
136
|
: []),
|
|
137
|
+
// Last, and only where the host mounts something of its own: the entries above are this app's.
|
|
138
|
+
...navExtras.map((extra) => ({
|
|
139
|
+
...(extra.id === undefined ? {} : { id: extra.id }),
|
|
140
|
+
title: extra.title,
|
|
141
|
+
icon: extra.icon,
|
|
142
|
+
isActive: extra.isCurrent?.(pathname) ?? pathname.startsWith(extra.href),
|
|
143
|
+
href: extra.href,
|
|
144
|
+
})),
|
|
135
145
|
].map((item) => ({ ...item, disabled: isKnowledgeGraphUnavailable, tooltip: navItemTooltip })), [
|
|
146
|
+
navExtras,
|
|
136
147
|
ModifierIcon,
|
|
137
148
|
startNewChat,
|
|
138
149
|
isKnowledgeGraphUnavailable,
|
|
@@ -194,8 +205,8 @@ export function Sidebar(props) {
|
|
|
194
205
|
openConversation(chat.id);
|
|
195
206
|
}), title: chat.title, className: cn("flex w-full items-center gap-2 overflow-hidden rounded-xl px-3 py-2.5 text-left typography-small whitespace-nowrap transition-colors hover:bg-muted", chat.isActive
|
|
196
207
|
? "bg-faint text-default-foreground"
|
|
197
|
-
: "text-muted-foreground hover:text-default-foreground"), children: _jsx("span", { className: "min-w-0 flex-1 truncate", children: chat.title }) }, chat.id)))] })] }) }) }))] }), _jsx(ConnectionBadge, {}), _jsx(SidebarFooter, { children: onLogout ? (_jsx(NavUser, { name: userName, currentDatastore: { name: datastoreName }, pickerSlot: showDatastorePicker &&
|
|
208
|
+
: "text-muted-foreground hover:text-default-foreground"), children: _jsx("span", { className: "min-w-0 flex-1 truncate", children: chat.title }) }, chat.id)))] })] }) }) }))] }), _jsx(ConnectionBadge, {}), _jsx(SidebarFooter, { children: onLogout ? (_jsx(NavUser, { name: userName, picture: user?.picture, currentDatastore: { name: datastoreName }, pickerSlot: showDatastorePicker &&
|
|
198
209
|
onDatastoreSelected && (_jsx(ConnectedDatastorePicker, { currentDatastoreId: datastore?.id, isOperator: isOperator, isSwitching: isSwitching, datastores: datastores, onDatastoreSelected: onDatastoreSelected })), onCloseAutoFocus: handleProfileMenuCloseAutoFocus, onNavigateToAccount: () => {
|
|
199
210
|
// TODO: Implement account navigation when account page is available
|
|
200
|
-
}, onLogout: onLogout, children: _jsxs(DropdownGroup, { className: "p-2", children: [_jsx(ThemeSelectorDropdown, {}), canManageDatastores && (_jsx(ManageDatastoresMenuItem, { onSelect: () => (pendingMenuNavigateRef.current = "/datastores") })), canManageTeam && (_jsxs(DropdownItem, { className: "flex flex-row items-center gap-1.5 typography-caption h-11", onSelect: () => (pendingMenuNavigateRef.current = "/team"), children: [_jsx(UserPlus, { className: "size-5" }), _jsx("span", { className: "typography-caption", children: "Team Members" })] }))] }) })) : (_jsxs("div", { className: "flex items-center gap-3 px-2", children: [_jsx(
|
|
211
|
+
}, onLogout: onLogout, children: _jsxs(DropdownGroup, { className: "p-2", children: [_jsx(ThemeSelectorDropdown, {}), canManageDatastores && (_jsx(ManageDatastoresMenuItem, { onSelect: () => (pendingMenuNavigateRef.current = "/datastores") })), canManageTeam && (_jsxs(DropdownItem, { className: "flex flex-row items-center gap-1.5 typography-caption h-11", onSelect: () => (pendingMenuNavigateRef.current = "/team"), children: [_jsx(UserPlus, { className: "size-5" }), _jsx("span", { className: "typography-caption", children: "Team Members" })] }))] }) })) : (_jsxs("div", { className: "flex items-center gap-3 px-2", children: [_jsx(UserAvatar, { name: userName, picture: user?.picture }), _jsxs("div", { className: "flex flex-col min-w-0 flex-1", children: [_jsx("span", { className: "truncate typography-small text-left", children: userName }), datastoreName && (_jsx("span", { className: "truncate typography-tiny text-muted-foreground text-left", children: datastoreName }))] })] })) }), conversationToDelete && (_jsx(DeleteConfirmationDialog, { title: "Delete Conversation", description: "Are you sure you want to delete this conversation? This action cannot be undone and will permanently remove the conversation and all its data.", open: true, onOpenChange: (open) => !open && handleCancelDeleteChat(), onConfirm: handleConfirmDeleteChat, onCancel: handleCancelDeleteChat }))] }));
|
|
201
212
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActioningView.d.ts","sourceRoot":"","sources":["../../../src/components/planning/ActioningView.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ActioningView.d.ts","sourceRoot":"","sources":["../../../src/components/planning/ActioningView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGtF,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAclF,OAAO,EAA0B,KAAK,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAM1G,KAAK,kBAAkB,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,SAAS,CAAC;CAClC,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CA8LtD"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { GQLActionPlanState
|
|
2
|
+
import { GQLActionPlanState } from "@manta-eu/client";
|
|
3
3
|
import { extractPlanName } from "@manta-eu/client/shared/agent-mode";
|
|
4
4
|
import { isPresent } from "@manta-eu/lib/present";
|
|
5
|
-
import { useQueryClient } from "@tanstack/react-query";
|
|
6
5
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
7
6
|
import { toast } from "sonner";
|
|
8
7
|
import { deriveExecutionStatus, deriveIsDryRun, isStalePlanCompletion } from "./actioning-view-utils.js";
|
|
@@ -11,33 +10,29 @@ import { parseTimestampMs } from "./execution-section-model.js";
|
|
|
11
10
|
import { ExecutionSections } from "./ExecutionSections.js";
|
|
12
11
|
import { ExecutionTopBar } from "./ExecutionTopBar.js";
|
|
13
12
|
import { FailedBanner } from "./FailedBanner.js";
|
|
13
|
+
import { useManualActionTargets } from "./manual-action-targets.js";
|
|
14
14
|
import { SummaryBar } from "./SummaryBar.js";
|
|
15
15
|
import { UnavailablePlanNotice } from "./UnavailablePlanNotice.js";
|
|
16
16
|
import { Loader } from "#components/loader/index";
|
|
17
17
|
import { useActionPlanDetail } from "#hooks/useActionPlanDetail";
|
|
18
18
|
import { useActionPlanExecution } from "#hooks/useActionPlanExecution";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
19
|
+
import { useResolveManualAction } from "#hooks/useResolveManualAction";
|
|
20
|
+
import { useActionPlanDiff, useActionPlanExecutionProvenance, useManualActions } from "#ldo-ui";
|
|
21
21
|
import { getPendingManualActions } from "#lib/manual-actions";
|
|
22
22
|
import { cn } from "#lib/utils";
|
|
23
|
-
import { useMantaClient } from "#providers/MantaClientProvider";
|
|
24
|
-
import { invalidateActionPlanQueries } from "#shared/query-keys";
|
|
25
|
-
const resolutionStatuses = {
|
|
26
|
-
COMPLETED: GQLManualActionResolveStatus.Completed,
|
|
27
|
-
RETRY: GQLManualActionResolveStatus.Retry,
|
|
28
|
-
REJECTED: GQLManualActionResolveStatus.Rejected,
|
|
29
|
-
};
|
|
30
23
|
export function ActioningView(props) {
|
|
31
|
-
const { planGraphIri, diff, isLoading, executionControl, executePromptNonce, datastoreId, userId, hideTopBar = false, chatIri, completedChangesSlot, } = props;
|
|
24
|
+
const { planGraphIri, diff, isLoading, executionControl, executePromptNonce, datastoreId, userId, hideTopBar = false, hideRunControls = false, chatIri, completedChangesSlot, } = props;
|
|
32
25
|
const planName = extractPlanName(planGraphIri);
|
|
33
26
|
const [isExecuteDialogOpen, setIsExecuteDialogOpen] = useState(false);
|
|
34
27
|
const internalExecutionControl = useActionPlanExecution(planGraphIri, chatIri);
|
|
35
28
|
const { execute, isTriggered, triggeredAtMs, dryRun, workflowId, triggerError } = executionControl ?? internalExecutionControl;
|
|
36
29
|
useEffect(() => {
|
|
30
|
+
if (hideRunControls)
|
|
31
|
+
return;
|
|
37
32
|
if ((executePromptNonce ?? 0) > 0) {
|
|
38
33
|
setIsExecuteDialogOpen(true);
|
|
39
34
|
}
|
|
40
|
-
}, [executePromptNonce]);
|
|
35
|
+
}, [executePromptNonce, hideRunControls]);
|
|
41
36
|
const { plan } = useActionPlanDetail(planGraphIri);
|
|
42
37
|
const hasCurrentFacts = plan?.hasCurrentFacts ?? false;
|
|
43
38
|
const { data: fetchedDiff } = useActionPlanDiff({ planGraphIri, enabled: !!planGraphIri });
|
|
@@ -73,30 +68,7 @@ export function ActioningView(props) {
|
|
|
73
68
|
const planEndedAtMs = stale ? null : parseTimestampMs(provenance?.planEndedAtTime);
|
|
74
69
|
const isExecutionActive = executionStatus === "running" || executionStatus === "needs-approval";
|
|
75
70
|
const activeStartedAtMs = isExecutionActive ? planStartedAtMs : null;
|
|
76
|
-
const
|
|
77
|
-
const { mantaClient } = useMantaClient();
|
|
78
|
-
const resolveManualAction = useResolveManualActionMutation(mantaClient);
|
|
79
|
-
const canResolveManualAction = !!datastoreId && !!userId;
|
|
80
|
-
const handleManualActionResolve = useCallback((subjectIri, resolution) => {
|
|
81
|
-
if (!userId) {
|
|
82
|
-
toast.error("Cannot resolve manual action: missing user context.");
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
resolveManualAction.mutate({
|
|
86
|
-
namedGraphIri: planGraphIri,
|
|
87
|
-
subjectIri,
|
|
88
|
-
resolvedBy: userId,
|
|
89
|
-
status: resolutionStatuses[resolution],
|
|
90
|
-
}, {
|
|
91
|
-
onSuccess: async () => {
|
|
92
|
-
await invalidateActionPlanQueries(queryClient, planGraphIri);
|
|
93
|
-
},
|
|
94
|
-
onError: (err) => {
|
|
95
|
-
console.error("Failed to resolve manual action", err);
|
|
96
|
-
toast.error(err instanceof Error ? err.message : "Failed to resolve manual action.");
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
}, [userId, planGraphIri, resolveManualAction, queryClient]);
|
|
71
|
+
const manualActionResolver = useResolveManualAction({ planGraphIri, userId, datastoreId });
|
|
100
72
|
const handleExecute = useCallback((nextDryRun) => {
|
|
101
73
|
void execute(nextDryRun);
|
|
102
74
|
}, [execute]);
|
|
@@ -109,19 +81,10 @@ export function ActioningView(props) {
|
|
|
109
81
|
toast.error(nextDryRun ? "Failed to preview plan re-run" : "Failed to re-run plan");
|
|
110
82
|
}
|
|
111
83
|
}, [execute]);
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
{
|
|
117
|
-
subjectIri: ma.subjectIri,
|
|
118
|
-
label: (ma.aboutIri && extractLabel(ma.aboutIri)) || ma.subjectLabel || ma.typeName || "Manual action",
|
|
119
|
-
properties: [],
|
|
120
|
-
},
|
|
121
|
-
]);
|
|
122
|
-
}
|
|
123
|
-
return map;
|
|
124
|
-
}, [manualActions]);
|
|
84
|
+
const canRunPlan = !hideRunControls && hasCurrentFacts;
|
|
85
|
+
const onExecute = canRunPlan ? handleExecute : undefined;
|
|
86
|
+
const onRerun = canRunPlan ? handleConfirmRerun : undefined;
|
|
87
|
+
const manualActionEntities = useManualActionTargets(manualActions);
|
|
125
88
|
const entityTypes = useMemo(() => {
|
|
126
89
|
if (!ldoDiff)
|
|
127
90
|
return [];
|
|
@@ -153,6 +116,6 @@ export function ActioningView(props) {
|
|
|
153
116
|
return Array.from(byType.values());
|
|
154
117
|
}, [entityTypes, manualActions]);
|
|
155
118
|
const completedChanges = executionStatus === "completed" ? completedChangesSlot : null;
|
|
156
|
-
return (_jsxs("div", { className: cn("flex flex-col", !hideTopBar && "h-full bg-background"), children: [!hideTopBar && (_jsx(ExecutionTopBar, { planName: planName, status: executionStatus, workflowId: workflowId, triggerError: triggerError, onExecute:
|
|
157
|
-
(isPresent(effectiveEntityTypes) && (_jsx(ExecutionSections, { entityTypes: effectiveEntityTypes, provenance: provenance ?? null, manualActions: manualActions, manualActionEntities: manualActionEntities, activeStartedAtMs: activeStartedAtMs, onManualActionResolve:
|
|
119
|
+
return (_jsxs("div", { className: cn("flex flex-col", !hideTopBar && "h-full bg-background"), children: [!hideTopBar && (_jsx(ExecutionTopBar, { planName: planName, status: executionStatus, workflowId: workflowId, triggerError: triggerError, onExecute: onExecute, onRerun: onRerun, isExecuteDialogOpen: isExecuteDialogOpen, onExecuteDialogOpenChange: setIsExecuteDialogOpen, isDryRun: isDryRun })), !hideTopBar && isDryRunCompleted && _jsx(DryRunCompleteBanner, {}), _jsx("div", { className: cn(!hideTopBar && "flex-1 overflow-y-auto"), children: _jsxs("div", { className: cn("space-y-6", hideTopBar ? "mx-auto w-full max-w-7xl px-8" : "mx-auto max-w-[960px] px-16 py-8"), children: [!hideTopBar && plan && !plan.hasCurrentFacts && (_jsx(UnavailablePlanNotice, { hasExecutionHistory: plan.hasExecutionHistory })), executionStatus === "failed" && (provenance?.planErrorMessage || triggerError) && (_jsx(FailedBanner, { message: provenance?.planErrorMessage ?? triggerError ?? "Execution failed" })), isLoading && !isPresent(effectiveEntityTypes) && (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Loader, { className: "size-6" }) })), plan && (_jsx(SummaryBar, { plan: plan, executionStatus: executionStatus, startedAtMs: planStartedAtMs, endedAtMs: planEndedAtMs })), completedChanges ??
|
|
120
|
+
(isPresent(effectiveEntityTypes) && (_jsx(ExecutionSections, { entityTypes: effectiveEntityTypes, provenance: provenance ?? null, manualActions: manualActions, manualActionEntities: manualActionEntities, activeStartedAtMs: activeStartedAtMs, onManualActionResolve: manualActionResolver.resolve, resolvingManualAction: manualActionResolver.resolving, canResolveManualAction: manualActionResolver.canResolve, manualActionDisabledReason: manualActionResolver.disabledReason })))] }) })] }));
|
|
158
121
|
}
|