@oneuptime/common 12.0.20 → 12.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/Models/AnalyticsModels/ChangeEvent.ts +331 -0
  2. package/Models/AnalyticsModels/Index.ts +2 -0
  3. package/Server/EnvironmentConfig.ts +1 -8
  4. package/Server/Infrastructure/Postgres/SchemaMigrations/1789000000000-AddUserSlackAndMicrosoftTeams.ts +42 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +0 -2
  6. package/Server/Services/ChangeEventService.ts +11 -0
  7. package/Server/Services/EnterpriseLicenseService.ts +3 -3
  8. package/Server/Services/Index.ts +2 -0
  9. package/Server/Utils/Attribution.ts +11 -11
  10. package/Server/Utils/Marketing/MarketingEventWebhook.ts +4 -5
  11. package/Server/Utils/Telemetry/ChangeEventRow.ts +228 -0
  12. package/Server/Views/Partials/AnalyticsConsent.ejs +3 -95
  13. package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +64 -0
  14. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +249 -0
  15. package/Tests/App/Dashboard/InvestigationArtifacts.test.tsx +315 -0
  16. package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +258 -0
  17. package/Tests/App/Dashboard/MetricChartsCompare.test.tsx +171 -0
  18. package/Tests/App/Dashboard/MetricViewCompare.test.tsx +233 -0
  19. package/Tests/Server/Infrastructure/Postgres/AddUserSlackAndMicrosoftTeamsMigration.test.ts +236 -0
  20. package/Tests/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.test.ts +224 -0
  21. package/Tests/Server/Utils/Attribution.test.ts +4 -5
  22. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +2 -2
  23. package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.test.ts +300 -0
  24. package/Tests/UI/Components/Charts/ChartGhostSeries.test.tsx +103 -0
  25. package/Tests/UI/Components/Charts/TooltipEntries.test.ts +44 -8
  26. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +13 -2
  27. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +7 -0
  28. package/Types/Marketing/Attribution.ts +9 -15
  29. package/Types/Marketing/MarketingEvent.ts +10 -46
  30. package/UI/Components/Charts/Area/AreaChart.tsx +15 -0
  31. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +16 -1
  32. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +189 -93
  33. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +6 -1
  34. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +213 -114
  35. package/UI/Components/Charts/ChartLibrary/Utils/TooltipEntries.ts +42 -27
  36. package/UI/Components/Charts/Line/LineChart.tsx +15 -0
  37. package/Utils/Metrics/MetricExplorerUrl.ts +119 -5
  38. package/Utils/Telemetry/CrossSignalScope.ts +19 -10
  39. package/build/dist/Models/AnalyticsModels/ChangeEvent.js +298 -0
  40. package/build/dist/Models/AnalyticsModels/ChangeEvent.js.map +1 -0
  41. package/build/dist/Models/AnalyticsModels/Index.js +2 -0
  42. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  43. package/build/dist/Server/EnvironmentConfig.js +1 -7
  44. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  45. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789000000000-AddUserSlackAndMicrosoftTeams.js +39 -0
  46. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789000000000-AddUserSlackAndMicrosoftTeams.js.map +1 -1
  47. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +0 -2
  48. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  49. package/build/dist/Server/Services/ChangeEventService.js +9 -0
  50. package/build/dist/Server/Services/ChangeEventService.js.map +1 -0
  51. package/build/dist/Server/Services/EnterpriseLicenseService.js +3 -3
  52. package/build/dist/Server/Services/Index.js +2 -0
  53. package/build/dist/Server/Services/Index.js.map +1 -1
  54. package/build/dist/Server/Utils/Attribution.js +6 -6
  55. package/build/dist/Server/Utils/Marketing/MarketingEventWebhook.js +4 -5
  56. package/build/dist/Server/Utils/Marketing/MarketingEventWebhook.js.map +1 -1
  57. package/build/dist/Server/Utils/Telemetry/ChangeEventRow.js +150 -0
  58. package/build/dist/Server/Utils/Telemetry/ChangeEventRow.js.map +1 -0
  59. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +7 -0
  60. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  61. package/build/dist/Types/Marketing/Attribution.js +9 -15
  62. package/build/dist/Types/Marketing/Attribution.js.map +1 -1
  63. package/build/dist/Types/Marketing/MarketingEvent.js +2 -33
  64. package/build/dist/Types/Marketing/MarketingEvent.js.map +1 -1
  65. package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
  66. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  67. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +9 -1
  68. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  69. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +92 -38
  70. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  71. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +8 -8
  72. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  73. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +95 -37
  74. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  75. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/TooltipEntries.js +39 -24
  76. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/TooltipEntries.js.map +1 -1
  77. package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
  78. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  79. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +81 -0
  80. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
  81. package/build/dist/Utils/Telemetry/CrossSignalScope.js +14 -8
  82. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  83. package/package.json +1 -1
  84. package/Server/Infrastructure/Postgres/SchemaMigrations/1788900000000-RedactStoredMonitorIngestSecrets.ts +0 -117
  85. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788900000000-RedactStoredMonitorIngestSecrets.js +0 -106
  86. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788900000000-RedactStoredMonitorIngestSecrets.js.map +0 -1
@@ -0,0 +1,150 @@
1
+ import OneUptimeDate from "../../../Types/Date";
2
+ import ObjectID from "../../../Types/ObjectID";
3
+ /*
4
+ * Change-event ingest parsing + ClickHouse row building. Pure on purpose
5
+ * (no network, no request objects) so App/Tests can pin every validation
6
+ * rule without a server.
7
+ */
8
+ /*
9
+ * Events whose source timestamp is outside this window are stamped with
10
+ * the ingestion time instead (original preserved in attributes). The
11
+ * table partitions by toYYYYMMDD(time), so a forged or garbage timestamp
12
+ * must not be allowed to create arbitrary partitions.
13
+ */
14
+ export const MAX_CHANGE_EVENT_AGE_IN_DAYS = 366;
15
+ export const MAX_CHANGE_EVENT_FUTURE_SKEW_IN_MINUTES = 60;
16
+ // Caps keep a CI script's mistake from becoming a storage problem.
17
+ export const MAX_CHANGE_EVENTS_PER_REQUEST = 100;
18
+ export const MAX_CHANGE_EVENT_TITLE_LENGTH = 500;
19
+ export const MAX_CHANGE_EVENT_DESCRIPTION_LENGTH = 5000;
20
+ export const MAX_CHANGE_EVENT_TYPE_LENGTH = 50;
21
+ export const MAX_CHANGE_EVENT_ATTRIBUTES = 50;
22
+ export const DEFAULT_CHANGE_EVENT_TYPE = "deployment";
23
+ /*
24
+ * Serviceless change events (project-wide markers) have no service
25
+ * retention ladder to consult; deploy markers are tiny and valuable for
26
+ * long-baseline comparisons, so keep them a year.
27
+ */
28
+ export const DEFAULT_CHANGE_EVENT_RETENTION_IN_DAYS = 365;
29
+ function parseEntryTime(value) {
30
+ if (typeof value === "number" && Number.isFinite(value)) {
31
+ /*
32
+ * Epoch seconds vs milliseconds: anything below 1e12 read as ms would
33
+ * be before 2001 — CI clocks don't say that; treat it as seconds.
34
+ */
35
+ const ms = value < 1e12 ? value * 1000 : value;
36
+ const date = new Date(ms);
37
+ return Number.isNaN(date.getTime()) ? null : date;
38
+ }
39
+ if (typeof value === "string" && value.trim() !== "") {
40
+ const date = new Date(value);
41
+ return Number.isNaN(date.getTime()) ? null : date;
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Validate one raw ingest entry. Returns null when the entry cannot be a
47
+ * change event at all (no usable title); every other malformation is
48
+ * repaired (defaults, trims, caps) rather than rejected — CI pipelines
49
+ * should not fail a deploy over a long description.
50
+ */
51
+ export function parseChangeEventIngestEntry(entry) {
52
+ var _a, _b, _c;
53
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
54
+ return null;
55
+ }
56
+ const rawTitle = (_a = entry["title"]) !== null && _a !== void 0 ? _a : entry["name"];
57
+ const title = typeof rawTitle === "string"
58
+ ? rawTitle.trim().slice(0, MAX_CHANGE_EVENT_TITLE_LENGTH)
59
+ : "";
60
+ if (title === "") {
61
+ return null;
62
+ }
63
+ const rawEventType = (_b = entry["eventType"]) !== null && _b !== void 0 ? _b : entry["type"];
64
+ const eventType = typeof rawEventType === "string" && rawEventType.trim() !== ""
65
+ ? rawEventType.trim().toLowerCase().slice(0, MAX_CHANGE_EVENT_TYPE_LENGTH)
66
+ : DEFAULT_CHANGE_EVENT_TYPE;
67
+ const rawDescription = entry["description"];
68
+ const description = typeof rawDescription === "string"
69
+ ? rawDescription.trim().slice(0, MAX_CHANGE_EVENT_DESCRIPTION_LENGTH)
70
+ : "";
71
+ const attributes = {};
72
+ const rawAttributes = entry["attributes"];
73
+ if (rawAttributes &&
74
+ typeof rawAttributes === "object" &&
75
+ !Array.isArray(rawAttributes)) {
76
+ for (const key of Object.keys(rawAttributes)) {
77
+ if (key.trim() === "") {
78
+ continue;
79
+ }
80
+ if (Object.keys(attributes).length >= MAX_CHANGE_EVENT_ATTRIBUTES) {
81
+ break;
82
+ }
83
+ const value = rawAttributes[key];
84
+ if (typeof value === "string" ||
85
+ typeof value === "number" ||
86
+ typeof value === "boolean") {
87
+ attributes[key] = String(value);
88
+ }
89
+ }
90
+ }
91
+ return {
92
+ time: parseEntryTime((_c = entry["time"]) !== null && _c !== void 0 ? _c : entry["timestamp"]),
93
+ eventType,
94
+ title,
95
+ description,
96
+ attributes,
97
+ };
98
+ }
99
+ /**
100
+ * Accept the shapes CI scripts actually send: a bare object (one event),
101
+ * a bare array, or { events: [...] }.
102
+ */
103
+ export function extractChangeEventEntries(body) {
104
+ if (!body) {
105
+ return [];
106
+ }
107
+ if (Array.isArray(body)) {
108
+ return body.filter((item) => {
109
+ return typeof item === "object" && item !== null && !Array.isArray(item);
110
+ });
111
+ }
112
+ if (typeof body !== "object") {
113
+ return [];
114
+ }
115
+ const asObject = body;
116
+ const nested = asObject["events"];
117
+ if (Array.isArray(nested)) {
118
+ return extractChangeEventEntries(nested);
119
+ }
120
+ // A single bare event object — but not the {events: <non-array>} shape.
121
+ if (nested === undefined && Object.keys(asObject).length > 0) {
122
+ return [asObject];
123
+ }
124
+ return [];
125
+ }
126
+ /**
127
+ * ParsedChangeEventEntry -> ChangeEvent ClickHouse row.
128
+ */
129
+ export function buildChangeEventDbRow(data) {
130
+ const { parsed, projectId, serviceMetadata, retentionDays } = data;
131
+ const ingestionDate = OneUptimeDate.getCurrentDate();
132
+ let eventTime = parsed.time || ingestionDate;
133
+ let attributes = Object.assign({}, parsed.attributes);
134
+ const ageInDays = OneUptimeDate.getNumberOfDaysBetweenDates(eventTime, ingestionDate);
135
+ const futureSkewInMinutes = (eventTime.getTime() - ingestionDate.getTime()) / (60 * 1000);
136
+ if (Number.isNaN(eventTime.getTime()) ||
137
+ ageInDays > MAX_CHANGE_EVENT_AGE_IN_DAYS ||
138
+ futureSkewInMinutes > MAX_CHANGE_EVENT_FUTURE_SKEW_IN_MINUTES) {
139
+ attributes = Object.assign(Object.assign({}, attributes), { "oneuptime.original_time": String(parsed.time) });
140
+ eventTime = ingestionDate;
141
+ }
142
+ const retentionDate = OneUptimeDate.addRemoveDays(ingestionDate, retentionDays);
143
+ return Object.assign(Object.assign({ _id: ObjectID.generateTimeOrdered().toString(), createdAt: OneUptimeDate.toClickhouseDateTime(ingestionDate), projectId: projectId.toString() }, (serviceMetadata
144
+ ? {
145
+ primaryEntityId: serviceMetadata.primaryEntityId.toString(),
146
+ primaryEntityType: serviceMetadata.primaryEntityType,
147
+ }
148
+ : {})), { time: OneUptimeDate.toClickhouseDateTime64(eventTime), eventType: parsed.eventType, title: parsed.title, description: parsed.description, attributes, attributeKeys: Object.keys(attributes).sort(), retentionDate: OneUptimeDate.toClickhouseDateTime(retentionDate) });
149
+ }
150
+ //# sourceMappingURL=ChangeEventRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeEventRow.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/ChangeEventRow.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,13 @@ var AnalyticsTableName;
8
8
  * attributes with a keys sidecar for arbitrary-field filtering.
9
9
  */
10
10
  AnalyticsTableName["SecurityEvent"] = "SecurityEventItemV1";
11
+ /*
12
+ * Deploy/config-change markers posted by CI/CD, rendered as dashed
13
+ * vertical lines on metric charts. Peer of LogItemV3 in layout (tenant
14
+ * projectId, per-row retentionDate TTL, attributes Map + keys sidecar)
15
+ * but tiny in volume.
16
+ */
17
+ AnalyticsTableName["ChangeEvent"] = "ChangeEventV1";
11
18
  AnalyticsTableName["Metric"] = "MetricItemV3";
12
19
  AnalyticsTableName["ExceptionInstance"] = "ExceptionItemV3";
13
20
  AnalyticsTableName["Span"] = "SpanItemV3";
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsTableName.js","sourceRoot":"","sources":["../../../../Types/AnalyticsDatabase/AnalyticsTableName.ts"],"names":[],"mappings":"AAAA,IAAK,kBA6EJ;AA7ED,WAAK,kBAAkB;IACrB,uCAAiB,CAAA;IACjB;;;;;OAKG;IACH,2DAAqC,CAAA;IACrC,6CAAuB,CAAA;IACvB,2DAAqC,CAAA;IACrC,yCAAmB,CAAA;IACnB,iDAA2B,CAAA;IAC3B,mDAA6B,CAAA;IAC7B,+CAAyB,CAAA;IACzB,2DAAqC,CAAA;IACrC,6CAAuB,CAAA;IACvB,6EAAuD,CAAA;IACvD;;;;;OAKG;IACH,6DAAuC,CAAA;IACvC;;;;OAIG;IACH,6EAAuD,CAAA;IACvD;;;;;;OAMG;IACH,+EAAyD,CAAA;IACzD,qFAA+D,CAAA;IAC/D,mFAA6D,CAAA;IAC7D,mEAA6C,CAAA;IAC7C;;;;;;OAMG;IACH,6DAAuC,CAAA;IACvC,2DAAqC,CAAA;IACrC,yDAAmC,CAAA;IACnC;;;;;;;OAOG;IACH,+CAAyB,CAAA;IACzB;;;;;;;;;;;;;OAaG;IACH,iDAA2B,CAAA;IAC3B,2DAAqC,CAAA;AACvC,CAAC,EA7EI,kBAAkB,KAAlB,kBAAkB,QA6EtB;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"AnalyticsTableName.js","sourceRoot":"","sources":["../../../../Types/AnalyticsDatabase/AnalyticsTableName.ts"],"names":[],"mappings":"AAAA,IAAK,kBAoFJ;AApFD,WAAK,kBAAkB;IACrB,uCAAiB,CAAA;IACjB;;;;;OAKG;IACH,2DAAqC,CAAA;IACrC;;;;;OAKG;IACH,mDAA6B,CAAA;IAC7B,6CAAuB,CAAA;IACvB,2DAAqC,CAAA;IACrC,yCAAmB,CAAA;IACnB,iDAA2B,CAAA;IAC3B,mDAA6B,CAAA;IAC7B,+CAAyB,CAAA;IACzB,2DAAqC,CAAA;IACrC,6CAAuB,CAAA;IACvB,6EAAuD,CAAA;IACvD;;;;;OAKG;IACH,6DAAuC,CAAA;IACvC;;;;OAIG;IACH,6EAAuD,CAAA;IACvD;;;;;;OAMG;IACH,+EAAyD,CAAA;IACzD,qFAA+D,CAAA;IAC/D,mFAA6D,CAAA;IAC7D,mEAA6C,CAAA;IAC7C;;;;;;OAMG;IACH,6DAAuC,CAAA;IACvC,2DAAqC,CAAA;IACrC,yDAAmC,CAAA;IACnC;;;;;;;OAOG;IACH,+CAAyB,CAAA;IACzB;;;;;;;;;;;;;OAaG;IACH,iDAA2B,CAAA;IAC3B,2DAAqC,CAAA;AACvC,CAAC,EApFI,kBAAkB,KAAlB,kBAAkB,QAoFtB;AAED,eAAe,kBAAkB,CAAC"}
@@ -3,19 +3,14 @@
3
3
  * writes it.
4
4
  *
5
5
  * Attribution starts in the browser (Home/Views/head-basic.ejs stores it in
6
- * localStorage) and reaches the server through two unrelated doors:
6
+ * localStorage) and reaches the server through the signup form
7
+ * (App/FeatureSet/Accounts/src/Pages/Register.tsx), which posts it onto the
8
+ * User record.
7
9
  *
8
- * - the signup form (App/FeatureSet/Accounts/src/Pages/Register.tsx), which
9
- * posts it onto the User record;
10
- * - the Cal.com booking webhook (App/API/CalWebhook.ts), which reads it back
11
- * out of the booking metadata the embed carried. Every page that books —
12
- * /enterprise/demo, /support, /enterprise/self-hosted — goes through it.
13
- *
14
- * Both doors are reachable by an unauthenticated caller, so both must whitelist
15
- * and length-bound what they accept. Keeping the key lists here rather than in
16
- * each door means a key added for the browser cannot be silently dropped by one
17
- * of the readers — which is exactly what happened to UTM parameters on the Cal
18
- * path, where the webhook parsed click IDs the embed never sent.
10
+ * That door is reachable by an unauthenticated caller, so it must whitelist and
11
+ * length-bound what it accepts. Keeping the key lists here rather than in the
12
+ * door itself means a key added for the browser cannot be silently dropped on
13
+ * arrival.
19
14
  */
20
15
  // Ad-platform click identifiers, in the spelling each platform uses on the URL.
21
16
  export const AdClickIdKeys = [
@@ -29,9 +24,8 @@ export const AdClickIdKeys = [
29
24
  "rdt_cid",
30
25
  ];
31
26
  /*
32
- * UTM parameters travel as snake_case on a URL and in Cal booking metadata,
33
- * and as camelCase once they are columns on User/Project/MarketingConversion.
34
- * Both spellings are accepted on the way in — Cal booking questions and hand
27
+ * UTM parameters travel as snake_case on a URL and as camelCase once they are
28
+ * columns on User/Project. Both spellings are accepted on the way in — hand
35
29
  * written links produce either — and only the camelCase form is stored.
36
30
  */
37
31
  export const UtmWireKeyToPropertyKey = {
@@ -1 +1 @@
1
- {"version":3,"file":"Attribution.js","sourceRoot":"","sources":["../../../../Types/Marketing/Attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,WAAW;IACX,QAAQ;IACR,SAAS;CACV,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;IACvB,YAAY,EAAE,aAAa;IAC3B,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,YAAY;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAkB,MAAM,CAAC,MAAM,CACzD,uBAAuB,CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAW,QAAQ,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,GAAG,eAAe;IAClB,YAAY;IACZ,UAAU;IACV,WAAW;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAW,GAAG,CAAC"}
1
+ {"version":3,"file":"Attribution.js","sourceRoot":"","sources":["../../../../Types/Marketing/Attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,WAAW;IACX,QAAQ;IACR,SAAS;CACV,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;IACvB,YAAY,EAAE,aAAa;IAC3B,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,YAAY;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAkB,MAAM,CAAC,MAAM,CACzD,uBAAuB,CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAW,QAAQ,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,GAAG,eAAe;IAClB,YAAY;IACZ,UAAU;IACV,WAAW;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAW,GAAG,CAAC"}
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * - DEDUPLICATION. `eventId` is stable for a given real-world occurrence, so
13
13
  * a redelivery carries the id the first attempt did. Retries are expected
14
- * (the queue retries, and Cal retries into us), so a receiver that keys on
14
+ * (the delivery queue retries), so a receiver that keys on
15
15
  * anything else will double-count.
16
16
  * - ORDERING. Events are delivered per-occurrence with no sequence number.
17
17
  * A signup and a plan change seconds apart may arrive either way round;
@@ -25,7 +25,6 @@
25
25
  export var MarketingEventType;
26
26
  (function (MarketingEventType) {
27
27
  MarketingEventType["SignUp"] = "sign_up";
28
- MarketingEventType["MeetingBooked"] = "meeting_booked";
29
28
  /*
30
29
  * A project's first paid subscription, created together with the project.
31
30
  *
@@ -44,39 +43,9 @@ export var MarketingEventType;
44
43
  * whose email is typed in by a human rather than captured from a session —
45
44
  * which is exactly what makes it joinable: set EnterpriseLicense.email to
46
45
  * the address the customer booked with and this event shares an identity
47
- * with the meeting_booked that preceded it, months earlier.
46
+ * with whatever else that address has done, months earlier.
48
47
  */
49
48
  MarketingEventType["EnterpriseLicenseIssued"] = "enterprise_license_issued";
50
49
  })(MarketingEventType || (MarketingEventType = {}));
51
- /*
52
- * Which conversation a booked meeting actually is.
53
- *
54
- * All three Cal embeds book the same event type (oneuptimehq/demo), so without
55
- * this the webhook cannot tell a free user's support call from a net-new
56
- * enterprise demo — they arrive as one undifferentiated `meeting_booked`, and
57
- * anything bidding on or reporting against that count values them identically.
58
- *
59
- * The browser event has carried this since the embeds were instrumented; the
60
- * webhook did not, which meant the authoritative record was the one that could
61
- * not make the distinction.
62
- *
63
- * `Unknown` is a real state, not a failure: a booking made through a Cal link
64
- * that was not one of the instrumented embeds genuinely has no kind, and is
65
- * still a booking worth emitting.
66
- */
67
- export var MeetingBookingKind;
68
- (function (MeetingBookingKind) {
69
- MeetingBookingKind["EnterpriseDemo"] = "enterprise_demo";
70
- MeetingBookingKind["SupportCall"] = "support_call";
71
- MeetingBookingKind["ArchitectureAssessment"] = "architecture_assessment";
72
- MeetingBookingKind["Unknown"] = "unknown";
73
- })(MeetingBookingKind || (MeetingBookingKind = {}));
74
- /*
75
- * The Cal booking-metadata key the embeds write and the webhook reads. Shared
76
- * so a rename cannot land on one side only - the failure mode there is silent,
77
- * because a booking with no recognised kind still succeeds.
78
- */
79
- export const BOOKING_KIND_METADATA_KEY = "ou_booking_kind";
80
- export const MeetingBookingKinds = Object.values(MeetingBookingKind);
81
50
  export const MARKETING_EVENT_SCHEMA_VERSION = 1;
82
51
  //# sourceMappingURL=MarketingEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingEvent.js","sourceRoot":"","sources":["../../../../Types/Marketing/MarketingEvent.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAN,IAAY,kBAwBX;AAxBD,WAAY,kBAAkB;IAC5B,wCAAkB,CAAA;IAClB,sDAAgC,CAAA;IAChC;;;;;;;OAOG;IACH,kEAA4C,CAAA;IAC5C,oEAA8C,CAAA;IAC9C,wEAAkD,CAAA;IAClD;;;;;;;;OAQG;IACH,2EAAqD,CAAA;AACvD,CAAC,EAxBW,kBAAkB,KAAlB,kBAAkB,QAwB7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,wDAAkC,CAAA;IAClC,kDAA4B,CAAA;IAC5B,wEAAkD,CAAA;IAClD,yCAAmB,CAAA;AACrB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAW,iBAAiB,CAAC;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAC9B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,8BAA8B,GAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"MarketingEvent.js","sourceRoot":"","sources":["../../../../Types/Marketing/MarketingEvent.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAN,IAAY,kBAuBX;AAvBD,WAAY,kBAAkB;IAC5B,wCAAkB,CAAA;IAClB;;;;;;;OAOG;IACH,kEAA4C,CAAA;IAC5C,oEAA8C,CAAA;IAC9C,wEAAkD,CAAA;IAClD;;;;;;;;OAQG;IACH,2EAAqD,CAAA;AACvD,CAAC,EAvBW,kBAAkB,KAAlB,kBAAkB,QAuB7B;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAW,CAAC,CAAC"}
@@ -108,7 +108,7 @@ const AreaChartElement = (props) => {
108
108
  ? formattedTimeReferenceLines
109
109
  : undefined, formattedReferenceRegions: formattedReferenceRegions.length > 0
110
110
  ? formattedReferenceRegions
111
- : undefined, formattedExemplarPoints: formattedExemplars.length > 0 ? formattedExemplars : undefined, onExemplarClick: props.onExemplarClick, onTimeRangeSelect: props.onTimeRangeSelect, anomalyBandLowerKey: bandLower, anomalyBandUpperKey: bandUpper })),
111
+ : undefined, formattedExemplarPoints: formattedExemplars.length > 0 ? formattedExemplars : undefined, onExemplarClick: props.onExemplarClick, onTimeRangeSelect: props.onTimeRangeSelect, onBucketClick: props.onBucketClick, ghostCategories: props.ghostSeriesNames, anomalyBandLowerKey: bandLower, anomalyBandUpperKey: bandUpper })),
112
112
  hasNoData && React.createElement(NoDataMessage, null)));
113
113
  };
114
114
  export default AreaChartElement;
@@ -1 +1 @@
1
- {"version":3,"file":"AreaChart.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/Area/AreaChart.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AreaChart.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/Area/AreaChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAKhE,OAAO,KAAK,EAAE,EAGZ,SAAS,EACT,OAAO,GACR,MAAM,OAAO,CAAC;AAIf,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAuB,EACrB,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAI9C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAKzD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,aAAa,MAAM,6BAA6B,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAoC;IAC/D,MAAM;IACN,SAAS;IACT,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;CACP,CAAC;AA2DF,MAAM,gBAAgB,GAAyC,CAC7D,KAAwB,EACV,EAAE;IAChB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAExE,MAAM,SAAS,GAAuB,KAAK,CAAC,0BAA0B,CAAC;IACvE,MAAM,SAAS,GAAuB,KAAK,CAAC,0BAA0B,CAAC;IAEvE;;;;OAIG;IACH,MAAM,UAAU,GAAkB,KAAK,CAAC,IAAI;SACzC,GAAG,CAAC,CAAC,IAAiB,EAAE,EAAE;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAA0B,aAAa,CAAC,kBAAkB,CAAC;YACtE,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjB,8DAA8D;IAC9D,MAAM,kBAAkB,GAAkC,OAAO,CAAC,GAAG,EAAE;QACrE,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAA4B,SAAS,CAAC,YAAY,CAAC;YAChE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;YACjC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;SAClC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,QAAuB,EAAE,EAAE;YAC1D,OAAO;gBACL,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACb,QAAQ,EAAE,QAAQ;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,kEAAkE;IAClE,MAAM,2BAA2B,GAC/B,OAAO,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,kBAAkB,CAAC,wBAAwB,CAAC;YACjD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9C,MAAM,yBAAyB,GAC7B,OAAO,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,kBAAkB,CAAC,sBAAsB,CAAC;YAC/C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5C,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,IAAI;QACX,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAmB,EAAE,EAAE;YACvC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IAEL;;;;OAIG;IACH,MAAM,cAAc,GAAoB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAChE,MAAM,cAAc,GAAoB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAChE,MAAM,YAAY,GAAY,cAAc,KAAK,MAAM,CAAC;IACxD,MAAM,YAAY,GAChB,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,YAAY,GAChB,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzE,OAAO,CACL;QACE;;;;;;WAMG;QACH,SAAS,EAAC,8BAA8B,EACxC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QAEzE,oBAAC,SAAS,kBACR,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,EAAE,EACX,KAAK,EAAE,2BAA2B,EAClC,UAAU,EAAE,UAAU,EACtB,MAAM,EACJ,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACrC,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,gBAAgB,EAEtB,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,EAC1D,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,KAAK,CAAC,UAAU,KAAK,KAAK,EACtC,YAAY,EAAE,IAAI,EAClB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,EACzC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC7C,UAAU,EAAE,EAAE,EACd,YAAY,EAAE,YAAY,IACtB,YAAY,EACZ,YAAY,IAChB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC,EACvB,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,2BAA2B,EACzB,2BAA2B,CAAC,MAAM,GAAG,CAAC;gBACpC,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,SAAS,EAEf,yBAAyB,EACvB,yBAAyB,CAAC,MAAM,GAAG,CAAC;gBAClC,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,SAAS,EAEf,uBAAuB,EACrB,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAEhE,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,eAAe,EAAE,KAAK,CAAC,gBAAgB,EACvC,mBAAmB,EAAE,SAAS,EAC9B,mBAAmB,EAAE,SAAS,IAC9B;QACD,SAAS,IAAI,oBAAC,aAAa,OAAG,CAC3B,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -14,7 +14,15 @@ export var ChartType;
14
14
  ChartType["AREA"] = "area";
15
15
  })(ChartType || (ChartType = {}));
16
16
  const ChartGroup = (props) => {
17
- const syncId = Text.generateRandomText(10);
17
+ /*
18
+ * Stable per-mount fallback: a plain const regenerated the id on every
19
+ * render, which forced recharts to tear down and re-subscribe its sync
20
+ * listeners on each parent re-render (auto-refresh ticks included).
21
+ */
22
+ const [fallbackSyncId] = useState(() => {
23
+ return Text.generateRandomText(10);
24
+ });
25
+ const syncId = props.syncId || fallbackSyncId;
18
26
  const [metricInfoModalChart, setMetricInfoModalChart] = useState(null);
19
27
  const getChartContent = (chart, index) => {
20
28
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"ChartGroup.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/ChartGroup/ChartGroup.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChartGroup.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/ChartGroup/ChartGroup.tsx"],"names":[],"mappings":"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"}
@@ -30,6 +30,21 @@ import ChartCurve from "../../Types/ChartCurve";
30
30
  * entirely (the dashed lines and their click-through remain).
31
31
  */
32
32
  const MAX_LABELED_TIME_REFERENCE_LINES = 6;
33
+ /*
34
+ * recharts invokes child event handlers with varying shapes ((event) for
35
+ * plain SVG passthrough, (data, event) for adapted children) — find the
36
+ * DOM event wherever it is so propagation can be stopped reliably.
37
+ */
38
+ function stopChartEventPropagation(...args) {
39
+ for (const candidate of args) {
40
+ if (candidate &&
41
+ typeof candidate.stopPropagation ===
42
+ "function") {
43
+ candidate.stopPropagation();
44
+ return;
45
+ }
46
+ }
47
+ }
33
48
  const LegendItem = ({ name, color, onClick, activeLegend, }) => {
34
49
  const hasOnValueChange = Boolean(onClick);
35
50
  return (React.createElement("li", { className: cx("group inline-flex flex-nowrap items-center gap-1.5 whitespace-nowrap rounded px-2 py-1 transition", hasOnValueChange
@@ -236,10 +251,10 @@ const ChartTooltip = ({ active, payload, label, valueFormatter, }) => {
236
251
  return null;
237
252
  };
238
253
  const AreaChart = React.forwardRef((props, ref) => {
239
- var _a, _b, _c;
254
+ var _a, _b;
240
255
  const { data = [], categories = [], index, colors = AvailableChartColors, valueFormatter = (value) => {
241
256
  return value.toString();
242
- }, startEndOnly = false, showXAxis = true, showYAxis = true, showGridLines = true, yAxisWidth = 56, intervalType = "equidistantPreserveStart", showTooltip = true, showLegend = true, autoMinValue = false, minValue, maxValue, allowDecimals = true, connectNulls = false, className, onValueChange, enableLegendSlider = false, tickGap = 5, xAxisLabel, yAxisLabel, legendPosition = "right", tooltipCallback, customTooltip, formattedTimeReferenceLines, formattedReferenceRegions, onTimeRangeSelect } = props, other = __rest(props, ["data", "categories", "index", "colors", "valueFormatter", "startEndOnly", "showXAxis", "showYAxis", "showGridLines", "yAxisWidth", "intervalType", "showTooltip", "showLegend", "autoMinValue", "minValue", "maxValue", "allowDecimals", "connectNulls", "className", "onValueChange", "enableLegendSlider", "tickGap", "xAxisLabel", "yAxisLabel", "legendPosition", "tooltipCallback", "customTooltip", "formattedTimeReferenceLines", "formattedReferenceRegions", "onTimeRangeSelect"]);
257
+ }, startEndOnly = false, showXAxis = true, showYAxis = true, showGridLines = true, yAxisWidth = 56, intervalType = "equidistantPreserveStart", showTooltip = true, showLegend = true, autoMinValue = false, minValue, maxValue, allowDecimals = true, connectNulls = false, className, onValueChange, enableLegendSlider = false, tickGap = 5, xAxisLabel, yAxisLabel, legendPosition = "right", tooltipCallback, customTooltip, formattedTimeReferenceLines, formattedReferenceRegions, onTimeRangeSelect, onBucketClick, ghostCategories } = props, other = __rest(props, ["data", "categories", "index", "colors", "valueFormatter", "startEndOnly", "showXAxis", "showYAxis", "showGridLines", "yAxisWidth", "intervalType", "showTooltip", "showLegend", "autoMinValue", "minValue", "maxValue", "allowDecimals", "connectNulls", "className", "onValueChange", "enableLegendSlider", "tickGap", "xAxisLabel", "yAxisLabel", "legendPosition", "tooltipCallback", "customTooltip", "formattedTimeReferenceLines", "formattedReferenceRegions", "onTimeRangeSelect", "onBucketClick", "ghostCategories"]);
243
258
  const CustomTooltip = customTooltip;
244
259
  const paddingValue = (!showXAxis && !showYAxis) || (startEndOnly && !showYAxis) ? 0 : 20;
245
260
  const [legendHeight, setLegendHeight] = React.useState(60);
@@ -434,23 +449,51 @@ const AreaChart = React.forwardRef((props, ref) => {
434
449
  }
435
450
  return (React.createElement("div", Object.assign({ ref: ref, className: cx("flex-1 w-full", hasOnTimeRangeSelect && "cursor-crosshair", className) }, other),
436
451
  React.createElement(ResponsiveContainer, null,
437
- React.createElement(RechartsAreaChart, Object.assign({ data: data, syncId: ((_a = props.syncid) === null || _a === void 0 ? void 0 : _a.toString()) || "" }, (hasOnTimeRangeSelect
452
+ React.createElement(RechartsAreaChart, Object.assign({ data: data }, (props.syncid ? { syncId: props.syncid.toString() } : {}), (hasOnTimeRangeSelect
438
453
  ? {
439
454
  onMouseDown: handleRangeSelectMouseDown,
440
455
  onMouseMove: handleRangeSelectMouseMove,
441
456
  onMouseUp: handleRangeSelectMouseUp,
442
457
  }
443
- : {}), { onClick: hasOnValueChange && (activeLegend || activeDot)
444
- ? () => {
445
- // Ignore the click that follows a drag-to-select.
446
- if (suppressNextClickRef.current) {
447
- return;
448
- }
458
+ : {}), { onClick: (chartState) => {
459
+ // Ignore the click that follows a drag-to-select.
460
+ if (suppressNextClickRef.current) {
461
+ return;
462
+ }
463
+ /*
464
+ * A click while a legend/dot selection is active keeps its
465
+ * long-standing meaning — clear the selection — and never
466
+ * also pins a bucket.
467
+ */
468
+ if (hasOnValueChange && (activeLegend || activeDot)) {
449
469
  setActiveDot(undefined);
450
470
  setActiveLegend(undefined);
451
471
  onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(null);
472
+ return;
473
+ }
474
+ if (!onBucketClick) {
475
+ return;
476
+ }
477
+ const rowIndex = getRowIndexFromChartState(chartState);
478
+ if (rowIndex === null) {
479
+ return;
452
480
  }
453
- : () => { }, margin: {
481
+ const bucketStart = getBucketDateAtIndex(rowIndex);
482
+ if (!bucketStart) {
483
+ return;
484
+ }
485
+ /*
486
+ * Cover the full bucket: width from adjacent row dates, the
487
+ * same derivation drag-to-select uses.
488
+ */
489
+ const adjacentDate = rowIndex > 0
490
+ ? getBucketDateAtIndex(rowIndex - 1)
491
+ : getBucketDateAtIndex(rowIndex + 1);
492
+ const bucketWidthInMs = adjacentDate
493
+ ? Math.abs(bucketStart.getTime() - adjacentDate.getTime())
494
+ : 0;
495
+ onBucketClick(bucketStart, new Date(bucketStart.getTime() + bucketWidthInMs), (data[rowIndex] || {}));
496
+ }, margin: {
454
497
  bottom: (xAxisLabel
455
498
  ? 40
456
499
  : showXAxis
@@ -541,32 +584,37 @@ const AreaChart = React.forwardRef((props, ref) => {
541
584
  const colorKey = categoryColors.get(category);
542
585
  const hex = getColorHex(colorKey);
543
586
  const isCustomColor = isHexColorValue(colorKey);
544
- return (React.createElement(Area, { key: category, name: category, type: props.curve || ChartCurve.MONOTONE, dataKey: category, stroke: hex, strokeWidth: 2, strokeLinejoin: "round", strokeLinecap: "round", fill: `url(#${gradientId})`, fillOpacity: 1, strokeOpacity: activeDot || (activeLegend && activeLegend !== category)
587
+ const isGhost = (ghostCategories === null || ghostCategories === void 0 ? void 0 : ghostCategories.includes(category)) || false;
588
+ return (React.createElement(Area, Object.assign({ key: category, name: category, type: props.curve || ChartCurve.MONOTONE, dataKey: category, stroke: hex, strokeWidth: isGhost ? 1.5 : 2, strokeLinejoin: "round", strokeLinecap: "round", fill: `url(#${gradientId})`, fillOpacity: isGhost ? 0 : 1, strokeOpacity: (activeDot || (activeLegend && activeLegend !== category)
545
589
  ? 0.3
546
- : 1, isAnimationActive: false, connectNulls: connectNulls,
590
+ : 1) * (isGhost ? 0.45 : 1), isAnimationActive: false, connectNulls: connectNulls,
547
591
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
548
- activeDot: (dotProps) => {
549
- const { cx: cxCoord, cy: cyCoord, stroke, strokeLinecap: slc, strokeLinejoin: slj, strokeWidth, } = dotProps;
550
- return (React.createElement(Dot, { className: cx("stroke-white", onValueChange ? "cursor-pointer" : "", getColorClassName(colorKey, "fill")), cx: cxCoord, cy: cyCoord, r: 5, fill: isCustomColor ? hex : "", stroke: stroke, strokeLinecap: slc, strokeLinejoin: slj, strokeWidth: strokeWidth,
551
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
552
- onClick: (_, event) => {
553
- return onDotClick(dotProps, event);
554
- } }));
555
- },
592
+ activeDot: isGhost
593
+ ? false
594
+ : (dotProps) => {
595
+ const { cx: cxCoord, cy: cyCoord, stroke, strokeLinecap: slc, strokeLinejoin: slj, strokeWidth, } = dotProps;
596
+ return (React.createElement(Dot, { className: cx("stroke-white", onValueChange ? "cursor-pointer" : "", getColorClassName(colorKey, "fill")), cx: cxCoord, cy: cyCoord, r: 5, fill: isCustomColor ? hex : "", stroke: stroke, strokeLinecap: slc, strokeLinejoin: slj, strokeWidth: strokeWidth,
597
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
598
+ onClick: (_, event) => {
599
+ return onDotClick(dotProps, event);
600
+ } }));
601
+ },
556
602
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
557
- dot: (dotProps) => {
558
- const { stroke, strokeLinecap: slc, strokeLinejoin: slj, strokeWidth, cx: cxCoord, cy: cyCoord, index: dotIndex, } = dotProps;
559
- if ((hasOnlyOneValueForKey(data, category) &&
560
- !(activeDot ||
561
- (activeLegend && activeLegend !== category))) ||
562
- ((activeDot === null || activeDot === void 0 ? void 0 : activeDot.index) === dotIndex &&
563
- (activeDot === null || activeDot === void 0 ? void 0 : activeDot.dataKey) === category)) {
564
- return (React.createElement(Dot, { key: dotIndex, cx: cxCoord, cy: cyCoord, r: 5, stroke: stroke, fill: isCustomColor ? hex : "", strokeLinecap: slc, strokeLinejoin: slj, strokeWidth: strokeWidth, className: cx("stroke-white", onValueChange ? "cursor-pointer" : "", getColorClassName(colorKey, "fill")) }));
565
- }
566
- return React.createElement(React.Fragment, { key: dotIndex });
567
- } }));
568
- }), (_b = props.referenceLines) === null || _b === void 0 ? void 0 :
569
- _b.map((refLine, refIndex) => {
603
+ dot: isGhost
604
+ ? false
605
+ : (dotProps) => {
606
+ const { stroke, strokeLinecap: slc, strokeLinejoin: slj, strokeWidth, cx: cxCoord, cy: cyCoord, index: dotIndex, } = dotProps;
607
+ if ((hasOnlyOneValueForKey(data, category) &&
608
+ !(activeDot ||
609
+ (activeLegend && activeLegend !== category))) ||
610
+ ((activeDot === null || activeDot === void 0 ? void 0 : activeDot.index) === dotIndex &&
611
+ (activeDot === null || activeDot === void 0 ? void 0 : activeDot.dataKey) === category)) {
612
+ return (React.createElement(Dot, { key: dotIndex, cx: cxCoord, cy: cyCoord, r: 5, stroke: stroke, fill: isCustomColor ? hex : "", strokeLinecap: slc, strokeLinejoin: slj, strokeWidth: strokeWidth, className: cx("stroke-white", onValueChange ? "cursor-pointer" : "", getColorClassName(colorKey, "fill")) }));
613
+ }
614
+ return (React.createElement(React.Fragment, { key: dotIndex }));
615
+ } }, (isGhost ? { strokeDasharray: "6 4" } : {}))));
616
+ }), (_a = props.referenceLines) === null || _a === void 0 ? void 0 :
617
+ _a.map((refLine, refIndex) => {
570
618
  return (React.createElement(ReferenceLine, { key: `ref-${refIndex}`, y: refLine.value, stroke: refLine.color, strokeDasharray: refLine.strokeDasharray || "4 4", strokeWidth: 1.5 }, refLine.label && (React.createElement(Label, { value: refLine.label, position: "insideTopRight", fill: refLine.color, fontSize: 11, fontWeight: 500 }))));
571
619
  }), formattedReferenceRegions === null || formattedReferenceRegions === void 0 ? void 0 :
572
620
  formattedReferenceRegions.map((region, regionIndex) => {
@@ -574,8 +622,10 @@ const AreaChart = React.forwardRef((props, ref) => {
574
622
  return (React.createElement(ReferenceArea, Object.assign({ key: `ref-region-${regionIndex}`, x1: region.formattedX1, x2: region.formattedX2, fill: regionColor, fillOpacity: 0.12, stroke: regionColor, strokeOpacity: 0.35, strokeWidth: 1 }, (region.original.onClick
575
623
  ? {
576
624
  style: { cursor: "pointer" },
577
- onClick: () => {
625
+ onClick: (...args) => {
578
626
  var _a, _b;
627
+ // Never let an annotation click also pin a bucket.
628
+ stopChartEventPropagation(...args);
579
629
  if (suppressNextClickRef.current) {
580
630
  return;
581
631
  }
@@ -589,8 +639,10 @@ const AreaChart = React.forwardRef((props, ref) => {
589
639
  return (React.createElement(ReferenceLine, Object.assign({ key: `time-ref-${timeRefIndex}`, x: timeRefLine.formattedX, stroke: lineColor, strokeDasharray: timeRefLine.original.strokeDasharray || "4 4", strokeWidth: 1.5 }, (timeRefLine.original.onClick
590
640
  ? {
591
641
  style: { cursor: "pointer" },
592
- onClick: () => {
642
+ onClick: (...args) => {
593
643
  var _a, _b;
644
+ // Never let an annotation click also pin a bucket.
645
+ stopChartEventPropagation(...args);
594
646
  if (suppressNextClickRef.current) {
595
647
  return;
596
648
  }
@@ -609,10 +661,12 @@ const AreaChart = React.forwardRef((props, ref) => {
609
661
  angle: 90,
610
662
  }
611
663
  : { position: "insideTop" }), { fill: lineColor, fontSize: 10, fontWeight: 500 })))));
612
- }), (_c = props.formattedExemplarPoints) === null || _c === void 0 ? void 0 :
613
- _c.map((exemplar, exemplarIndex) => {
614
- return (React.createElement(ReferenceDot, { key: `exemplar-${exemplarIndex}`, x: exemplar.formattedX, y: exemplar.y, r: 5, fill: "#7c3aed", stroke: "var(--ou-chart-marker-ring, #ffffff)", strokeWidth: 2, style: { cursor: "pointer" }, onClick: () => {
664
+ }), (_b = props.formattedExemplarPoints) === null || _b === void 0 ? void 0 :
665
+ _b.map((exemplar, exemplarIndex) => {
666
+ return (React.createElement(ReferenceDot, { key: `exemplar-${exemplarIndex}`, x: exemplar.formattedX, y: exemplar.y, r: 5, fill: "#7c3aed", stroke: "var(--ou-chart-marker-ring, #ffffff)", strokeWidth: 2, style: { cursor: "pointer" }, onClick: (...args) => {
615
667
  var _a;
668
+ // Never let an exemplar click also pin a bucket.
669
+ stopChartEventPropagation(...args);
616
670
  // Ignore the click that follows a drag-to-select.
617
671
  if (suppressNextClickRef.current) {
618
672
  return;