@mastra/playground-ui 40.0.0 → 40.0.1-alpha.1
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/CHANGELOG.md +20 -0
- package/dist/components/ScatterPlotChart.cjs.js +163 -6
- package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
- package/dist/components/ScatterPlotChart.es.js +162 -1
- package/dist/components/ScatterPlotChart.es.js.map +1 -1
- package/dist/ee/signals/components/signal-details-page.cjs.js +66 -157
- package/dist/ee/signals/components/signal-details-page.cjs.js.map +1 -1
- package/dist/ee/signals/components/signal-details-page.es.js +68 -158
- package/dist/ee/signals/components/signal-details-page.es.js.map +1 -1
- package/dist/ee/signals/components.cjs.js +1 -2
- package/dist/ee/signals/components.cjs.js.map +1 -1
- package/dist/ee/signals/components.es.js +1 -1
- package/dist/ee/signals/hooks/use-entity-learning.cjs.js +0 -17
- package/dist/ee/signals/hooks/use-entity-learning.cjs.js.map +1 -1
- package/dist/ee/signals/hooks/use-entity-learning.es.js +1 -17
- package/dist/ee/signals/hooks/use-entity-learning.es.js.map +1 -1
- package/dist/ee/signals/hooks.cjs.js +0 -1
- package/dist/ee/signals/hooks.cjs.js.map +1 -1
- package/dist/ee/signals/hooks.es.js +1 -1
- package/dist/ee/signals/services/entity-learning-service.cjs.js +0 -10
- package/dist/ee/signals/services/entity-learning-service.cjs.js.map +1 -1
- package/dist/ee/signals/services/entity-learning-service.es.js +0 -10
- package/dist/ee/signals/services/entity-learning-service.es.js.map +1 -1
- package/dist/ee/signals.cjs.js +1 -3
- package/dist/ee/signals.cjs.js.map +1 -1
- package/dist/ee/signals.es.js +2 -2
- package/dist/src/ee/signals/components/signal-details-page.d.ts +3 -16
- package/dist/src/ee/signals/hooks/use-entity-learning.d.ts +1 -3
- package/dist/src/ee/signals/services/entity-learning-service.d.ts +1 -8
- package/dist/src/ee/signals/services/entity-learning-types.d.ts +0 -13
- package/package.json +6 -6
- package/dist/scatter-plot-chart-B3hfFMKS.js +0 -163
- package/dist/scatter-plot-chart-B3hfFMKS.js.map +0 -1
- package/dist/scatter-plot-chart-CFZO31md.cjs +0 -169
- package/dist/scatter-plot-chart-CFZO31md.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-entity-learning.es.js","sources":["../../../../src/ee/signals/hooks/use-entity-learning.ts"],"sourcesContent":["import { skipToken, useQuery } from '@tanstack/react-query';\nimport type {\n EntityLearningPointsParams,\n EntityLearningTopicExamplesParams,\n EntityLearningOutlierExamplesParams,\n} from '../services';\nimport { useEntityLearningConfig } from './use-entity-learning-config';\n\nconst KEY = 'entity-learning';\n\n/** GET /entity-learning/entities */\nexport function useEntities() {\n const { service, isConfigured } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'entities'],\n queryFn: isConfigured && service ? () => service.getEntities() : skipToken,\n select: data => data.entities,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/runs?signalName= */\nexport function useEntityRuns(entityId: string | undefined, signalName: string | undefined) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'runs', entityId, signalName],\n queryFn: service && entityId && signalName ? () => service.getEntityRuns(entityId, signalName) : skipToken,\n select: data => data.runs,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/runs/:runId?signalName= */\nexport function useEntityRun(entityId: string | undefined, runId: string | undefined, signalName: string | undefined) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'run', entityId, runId, signalName],\n queryFn:\n service && entityId && runId && signalName ? () => service.getEntityRun(entityId, runId, signalName) : skipToken,\n select: data => data.run,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/learning?signalName=&runId? */\nexport function useEntityLearning(entityId: string | undefined, signalName: string | undefined, runId?: string) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'learning', entityId, signalName, runId ?? null],\n queryFn:\n service && entityId && signalName ? () => service.getEntityLearning(entityId, signalName, runId) : skipToken,\n select: data => data.learning,\n retry: false,\n });\n}\n\n/**\n * GET /entity-learning/entities/:entityId/topics?signalName=&runId? — the clusters.\n * Omit `runId` to let the API resolve the latest run for that signal — an\n * entity-level `latestRunId` belongs to a single signal and must not be\n * reused across signals.\n */\nexport function useEntityTopics(entityId: string | undefined, signalName: string | undefined, runId?: string) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'topics', entityId, signalName, runId ?? 'latest'],\n queryFn: service && entityId && signalName ? () => service.getEntityTopics(entityId, signalName, runId) : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/topics/:topicId?signalName=&runId= */\nexport function useEntityTopic(\n entityId: string | undefined,\n topicId: string | undefined,\n signalName: string | undefined,\n runId: string | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'topic', entityId, topicId, signalName, runId],\n queryFn:\n service && entityId && topicId && signalName && runId\n ? () => service.getEntityTopic(entityId, topicId, signalName, runId)\n : skipToken,\n select: data => data.topic,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/topics/:topicId/examples?signalName=&runId=&limit= */\nexport function useEntityTopicExamples(\n entityId: string | undefined,\n topicId: string | undefined,\n params: EntityLearningTopicExamplesParams | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'topic-examples', entityId, topicId, params?.signalName, params?.runId, params?.limit ?? null],\n queryFn:\n service && entityId && topicId && params?.signalName && params?.runId\n ? () => service.getEntityTopicExamples(entityId, topicId, params)\n : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/points?signalName=&runId=&includeOutliers=&limit= */\nexport function useEntityPoints(entityId: string | undefined, params: EntityLearningPointsParams | undefined) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [\n KEY,\n 'points',\n entityId,\n params?.signalName,\n params?.runId,\n params?.includeOutliers ?? null,\n params?.limit ?? null,\n ],\n queryFn:\n service && entityId && params?.signalName && params?.runId\n ? () => service.getEntityPoints(entityId, params)\n : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/outliers?signalName=&runId= */\nexport function useEntityOutliers(\n entityId: string | undefined,\n signalName: string | undefined,\n runId: string | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'outliers', entityId, signalName, runId],\n queryFn:\n service && entityId && signalName && runId\n ? () => service.getEntityOutliers(entityId, signalName, runId)\n : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/outliers/examples?signalName=&runId=&limit= */\nexport function useEntityOutlierExamples(\n entityId: string | undefined,\n params: EntityLearningOutlierExamplesParams | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'outlier-examples', entityId, params?.signalName, params?.runId, params?.limit ?? null],\n queryFn:\n service && entityId && params?.signalName && params?.runId\n ? () => service.getEntityOutlierExamples(entityId, params)\n : skipToken,\n retry: false,\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-entity-learning.es.js","sources":["../../../../src/ee/signals/hooks/use-entity-learning.ts"],"sourcesContent":["import { skipToken, useQuery } from '@tanstack/react-query';\nimport type { EntityLearningTopicExamplesParams, EntityLearningOutlierExamplesParams } from '../services';\nimport { useEntityLearningConfig } from './use-entity-learning-config';\n\nconst KEY = 'entity-learning';\n\n/** GET /entity-learning/entities */\nexport function useEntities() {\n const { service, isConfigured } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'entities'],\n queryFn: isConfigured && service ? () => service.getEntities() : skipToken,\n select: data => data.entities,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/runs?signalName= */\nexport function useEntityRuns(entityId: string | undefined, signalName: string | undefined) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'runs', entityId, signalName],\n queryFn: service && entityId && signalName ? () => service.getEntityRuns(entityId, signalName) : skipToken,\n select: data => data.runs,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/runs/:runId?signalName= */\nexport function useEntityRun(entityId: string | undefined, runId: string | undefined, signalName: string | undefined) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'run', entityId, runId, signalName],\n queryFn:\n service && entityId && runId && signalName ? () => service.getEntityRun(entityId, runId, signalName) : skipToken,\n select: data => data.run,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/learning?signalName=&runId? */\nexport function useEntityLearning(entityId: string | undefined, signalName: string | undefined, runId?: string) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'learning', entityId, signalName, runId ?? null],\n queryFn:\n service && entityId && signalName ? () => service.getEntityLearning(entityId, signalName, runId) : skipToken,\n select: data => data.learning,\n retry: false,\n });\n}\n\n/**\n * GET /entity-learning/entities/:entityId/topics?signalName=&runId? — the clusters.\n * Omit `runId` to let the API resolve the latest run for that signal — an\n * entity-level `latestRunId` belongs to a single signal and must not be\n * reused across signals.\n */\nexport function useEntityTopics(entityId: string | undefined, signalName: string | undefined, runId?: string) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'topics', entityId, signalName, runId ?? 'latest'],\n queryFn: service && entityId && signalName ? () => service.getEntityTopics(entityId, signalName, runId) : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/topics/:topicId?signalName=&runId= */\nexport function useEntityTopic(\n entityId: string | undefined,\n topicId: string | undefined,\n signalName: string | undefined,\n runId: string | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'topic', entityId, topicId, signalName, runId],\n queryFn:\n service && entityId && topicId && signalName && runId\n ? () => service.getEntityTopic(entityId, topicId, signalName, runId)\n : skipToken,\n select: data => data.topic,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/topics/:topicId/examples?signalName=&runId=&limit= */\nexport function useEntityTopicExamples(\n entityId: string | undefined,\n topicId: string | undefined,\n params: EntityLearningTopicExamplesParams | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'topic-examples', entityId, topicId, params?.signalName, params?.runId, params?.limit ?? null],\n queryFn:\n service && entityId && topicId && params?.signalName && params?.runId\n ? () => service.getEntityTopicExamples(entityId, topicId, params)\n : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/outliers?signalName=&runId= */\nexport function useEntityOutliers(\n entityId: string | undefined,\n signalName: string | undefined,\n runId: string | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'outliers', entityId, signalName, runId],\n queryFn:\n service && entityId && signalName && runId\n ? () => service.getEntityOutliers(entityId, signalName, runId)\n : skipToken,\n retry: false,\n });\n}\n\n/** GET /entity-learning/entities/:entityId/outliers/examples?signalName=&runId=&limit= */\nexport function useEntityOutlierExamples(\n entityId: string | undefined,\n params: EntityLearningOutlierExamplesParams | undefined,\n) {\n const { service } = useEntityLearningConfig();\n\n return useQuery({\n queryKey: [KEY, 'outlier-examples', entityId, params?.signalName, params?.runId, params?.limit ?? null],\n queryFn:\n service && entityId && params?.signalName && params?.runId\n ? () => service.getEntityOutlierExamples(entityId, params)\n : skipToken,\n retry: false,\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,6 @@ exports.useEntities = ee_signals_hooks_useEntityLearning.useEntities;
|
|
|
12
12
|
exports.useEntityLearning = ee_signals_hooks_useEntityLearning.useEntityLearning;
|
|
13
13
|
exports.useEntityOutlierExamples = ee_signals_hooks_useEntityLearning.useEntityOutlierExamples;
|
|
14
14
|
exports.useEntityOutliers = ee_signals_hooks_useEntityLearning.useEntityOutliers;
|
|
15
|
-
exports.useEntityPoints = ee_signals_hooks_useEntityLearning.useEntityPoints;
|
|
16
15
|
exports.useEntityRun = ee_signals_hooks_useEntityLearning.useEntityRun;
|
|
17
16
|
exports.useEntityRuns = ee_signals_hooks_useEntityLearning.useEntityRuns;
|
|
18
17
|
exports.useEntityTopic = ee_signals_hooks_useEntityLearning.useEntityTopic;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { useEntityLearningConfig } from './hooks/use-entity-learning-config.es.js';
|
|
2
|
-
export { useEntities, useEntityLearning, useEntityOutlierExamples, useEntityOutliers,
|
|
2
|
+
export { useEntities, useEntityLearning, useEntityOutlierExamples, useEntityOutliers, useEntityRun, useEntityRuns, useEntityTopic, useEntityTopicExamples, useEntityTopics } from './hooks/use-entity-learning.es.js';
|
|
3
3
|
//# sourceMappingURL=hooks.es.js.map
|
|
@@ -67,16 +67,6 @@ function createEntityLearningService(config) {
|
|
|
67
67
|
})
|
|
68
68
|
);
|
|
69
69
|
},
|
|
70
|
-
getEntityPoints(entityId, params) {
|
|
71
|
-
return getJson(
|
|
72
|
-
buildUrl(`/entities/${encode(entityId)}/points`, {
|
|
73
|
-
signalName: params.signalName,
|
|
74
|
-
runId: params.runId,
|
|
75
|
-
includeOutliers: params.includeOutliers,
|
|
76
|
-
limit: params.limit
|
|
77
|
-
})
|
|
78
|
-
);
|
|
79
|
-
},
|
|
80
70
|
getEntityOutliers(entityId, signalName, runId) {
|
|
81
71
|
return getJson(
|
|
82
72
|
buildUrl(`/entities/${encode(entityId)}/outliers`, { signalName, runId })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-learning-service.cjs.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n
|
|
1
|
+
{"version":3,"file":"entity-learning-service.cjs.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n EntityLearningOutliersResponse,\n} from './entity-learning-types';\n\nexport type EntityLearningServiceConfig = {\n /**\n * Platform observability query-service origin (mobs-query), e.g.\n * `https://observability.mastra.ai`. Agent Learning routes are served\n * session-authenticated under `/api/learning` on this origin — the same\n * origin and auth model as the `/api/observability/*` routes.\n */\n baseUrl: string;\n projectId?: string;\n};\n\nexport type EntityLearningTopicExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningOutlierExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningService = ReturnType<typeof createEntityLearningService>;\n\n// Index scan instead of regex to avoid backtracking (CodeQL js/polynomial-redos)\nconst trimTrailingSlash = (value: string) => {\n let end = value.length;\n while (end > 0 && value[end - 1] === '/') end--;\n return value.slice(0, end);\n};\n\n/**\n * Network layer for the platform Agent Learning API served by the\n * observability query service (mobs-query) under `/api/learning`.\n *\n * Auth follows the observability pattern: the WorkOS session cookie is sent\n * via `credentials: 'include'`, and the org/project scope is resolved\n * server-side from the session. `projectId` is passed as the\n * `X-Mastra-Project-Id` header so the server scopes reads to that project;\n * caller-supplied scope can never widen access beyond the session.\n */\nexport function createEntityLearningService(config: EntityLearningServiceConfig) {\n const root = `${trimTrailingSlash(config.baseUrl)}/api/learning`;\n\n const buildUrl = (path: string, params?: Record<string, string | number | boolean | undefined>) => {\n const url = new URL(`${root}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n };\n\n async function getJson<T>(url: string): Promise<T> {\n const res = await fetch(url, {\n credentials: 'include',\n headers: config.projectId ? { 'X-Mastra-Project-Id': config.projectId } : undefined,\n });\n if (!res.ok) {\n throw new Error(`Entity-Learning request failed (${res.status}): ${url}`);\n }\n return (await res.json()) as T;\n }\n\n const encode = (segment: string) => encodeURIComponent(segment);\n\n return {\n getEntities() {\n return getJson<EntityLearningEntitiesResponse>(buildUrl('/entities'));\n },\n\n getEntityRuns(entityId: string, signalName: string) {\n return getJson<EntityLearningRunsResponse>(buildUrl(`/entities/${encode(entityId)}/runs`, { signalName }));\n },\n\n getEntityRun(entityId: string, runId: string, signalName: string) {\n return getJson<EntityLearningRunResponse>(\n buildUrl(`/entities/${encode(entityId)}/runs/${encode(runId)}`, { signalName }),\n );\n },\n\n getEntityLearning(entityId: string, signalName: string, runId?: string) {\n return getJson<EntityLearningLearningResponse>(\n buildUrl(`/entities/${encode(entityId)}/learning`, { signalName, runId }),\n );\n },\n\n getEntityTopics(entityId: string, signalName: string, runId?: string) {\n // runId omitted → the API resolves the latest run for that signal.\n return getJson<EntityLearningTopicsResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics`, { signalName, runId }),\n );\n },\n\n getEntityTopic(entityId: string, topicId: string, signalName: string, runId: string) {\n return getJson<EntityLearningTopicResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}`, { signalName, runId }),\n );\n },\n\n getEntityTopicExamples(entityId: string, topicId: string, params: EntityLearningTopicExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n\n getEntityOutliers(entityId: string, signalName: string, runId: string) {\n return getJson<EntityLearningOutliersResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers`, { signalName, runId }),\n );\n },\n\n getEntityOutlierExamples(entityId: string, params: EntityLearningOutlierExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -63,16 +63,6 @@ function createEntityLearningService(config) {
|
|
|
63
63
|
})
|
|
64
64
|
);
|
|
65
65
|
},
|
|
66
|
-
getEntityPoints(entityId, params) {
|
|
67
|
-
return getJson(
|
|
68
|
-
buildUrl(`/entities/${encode(entityId)}/points`, {
|
|
69
|
-
signalName: params.signalName,
|
|
70
|
-
runId: params.runId,
|
|
71
|
-
includeOutliers: params.includeOutliers,
|
|
72
|
-
limit: params.limit
|
|
73
|
-
})
|
|
74
|
-
);
|
|
75
|
-
},
|
|
76
66
|
getEntityOutliers(entityId, signalName, runId) {
|
|
77
67
|
return getJson(
|
|
78
68
|
buildUrl(`/entities/${encode(entityId)}/outliers`, { signalName, runId })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-learning-service.es.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n
|
|
1
|
+
{"version":3,"file":"entity-learning-service.es.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n EntityLearningOutliersResponse,\n} from './entity-learning-types';\n\nexport type EntityLearningServiceConfig = {\n /**\n * Platform observability query-service origin (mobs-query), e.g.\n * `https://observability.mastra.ai`. Agent Learning routes are served\n * session-authenticated under `/api/learning` on this origin — the same\n * origin and auth model as the `/api/observability/*` routes.\n */\n baseUrl: string;\n projectId?: string;\n};\n\nexport type EntityLearningTopicExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningOutlierExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningService = ReturnType<typeof createEntityLearningService>;\n\n// Index scan instead of regex to avoid backtracking (CodeQL js/polynomial-redos)\nconst trimTrailingSlash = (value: string) => {\n let end = value.length;\n while (end > 0 && value[end - 1] === '/') end--;\n return value.slice(0, end);\n};\n\n/**\n * Network layer for the platform Agent Learning API served by the\n * observability query service (mobs-query) under `/api/learning`.\n *\n * Auth follows the observability pattern: the WorkOS session cookie is sent\n * via `credentials: 'include'`, and the org/project scope is resolved\n * server-side from the session. `projectId` is passed as the\n * `X-Mastra-Project-Id` header so the server scopes reads to that project;\n * caller-supplied scope can never widen access beyond the session.\n */\nexport function createEntityLearningService(config: EntityLearningServiceConfig) {\n const root = `${trimTrailingSlash(config.baseUrl)}/api/learning`;\n\n const buildUrl = (path: string, params?: Record<string, string | number | boolean | undefined>) => {\n const url = new URL(`${root}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n };\n\n async function getJson<T>(url: string): Promise<T> {\n const res = await fetch(url, {\n credentials: 'include',\n headers: config.projectId ? { 'X-Mastra-Project-Id': config.projectId } : undefined,\n });\n if (!res.ok) {\n throw new Error(`Entity-Learning request failed (${res.status}): ${url}`);\n }\n return (await res.json()) as T;\n }\n\n const encode = (segment: string) => encodeURIComponent(segment);\n\n return {\n getEntities() {\n return getJson<EntityLearningEntitiesResponse>(buildUrl('/entities'));\n },\n\n getEntityRuns(entityId: string, signalName: string) {\n return getJson<EntityLearningRunsResponse>(buildUrl(`/entities/${encode(entityId)}/runs`, { signalName }));\n },\n\n getEntityRun(entityId: string, runId: string, signalName: string) {\n return getJson<EntityLearningRunResponse>(\n buildUrl(`/entities/${encode(entityId)}/runs/${encode(runId)}`, { signalName }),\n );\n },\n\n getEntityLearning(entityId: string, signalName: string, runId?: string) {\n return getJson<EntityLearningLearningResponse>(\n buildUrl(`/entities/${encode(entityId)}/learning`, { signalName, runId }),\n );\n },\n\n getEntityTopics(entityId: string, signalName: string, runId?: string) {\n // runId omitted → the API resolves the latest run for that signal.\n return getJson<EntityLearningTopicsResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics`, { signalName, runId }),\n );\n },\n\n getEntityTopic(entityId: string, topicId: string, signalName: string, runId: string) {\n return getJson<EntityLearningTopicResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}`, { signalName, runId }),\n );\n },\n\n getEntityTopicExamples(entityId: string, topicId: string, params: EntityLearningTopicExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n\n getEntityOutliers(entityId: string, signalName: string, runId: string) {\n return getJson<EntityLearningOutliersResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers`, { signalName, runId }),\n );\n },\n\n getEntityOutlierExamples(entityId: string, params: EntityLearningOutlierExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
package/dist/ee/signals.cjs.js
CHANGED
|
@@ -12,9 +12,8 @@ const ee_signals_signalsData = require('./signals/signals-data.cjs.js');
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
exports.SignalChartTab = ee_signals_components_signalDetailsPage.SignalChartTab;
|
|
16
15
|
exports.SignalClusterSidebar = ee_signals_components_signalDetailsPage.SignalClusterSidebar;
|
|
17
|
-
exports.
|
|
16
|
+
exports.SignalClusterTraceList = ee_signals_components_signalDetailsPage.SignalClusterTraceList;
|
|
18
17
|
exports.SignalDetailsPage = ee_signals_components_signalDetailsPage.SignalDetailsPage;
|
|
19
18
|
exports.SignalTraceDetailsPanel = ee_signals_components_signalDetailsPage.SignalTraceDetailsPanel;
|
|
20
19
|
exports.SignalTraceListTab = ee_signals_components_signalDetailsPage.SignalTraceListTab;
|
|
@@ -27,7 +26,6 @@ exports.useEntities = ee_signals_hooks_useEntityLearning.useEntities;
|
|
|
27
26
|
exports.useEntityLearning = ee_signals_hooks_useEntityLearning.useEntityLearning;
|
|
28
27
|
exports.useEntityOutlierExamples = ee_signals_hooks_useEntityLearning.useEntityOutlierExamples;
|
|
29
28
|
exports.useEntityOutliers = ee_signals_hooks_useEntityLearning.useEntityOutliers;
|
|
30
|
-
exports.useEntityPoints = ee_signals_hooks_useEntityLearning.useEntityPoints;
|
|
31
29
|
exports.useEntityRun = ee_signals_hooks_useEntityLearning.useEntityRun;
|
|
32
30
|
exports.useEntityRuns = ee_signals_hooks_useEntityLearning.useEntityRuns;
|
|
33
31
|
exports.useEntityTopic = ee_signals_hooks_useEntityLearning.useEntityTopic;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signals.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/ee/signals.es.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { SignalClusterSidebar, SignalClusterTraceList, SignalDetailsPage, SignalTraceDetailsPanel, SignalTraceListTab } from './signals/components/signal-details-page.es.js';
|
|
2
2
|
export { SignalsEntityFilter } from './signals/components/signals-entity-filter.es.js';
|
|
3
3
|
export { SignalClusterCard, SignalSection, SignalsOverviewPage } from './signals/components/signals-overview-page.es.js';
|
|
4
4
|
export { useEntityLearningConfig } from './signals/hooks/use-entity-learning-config.es.js';
|
|
5
|
-
export { useEntities, useEntityLearning, useEntityOutlierExamples, useEntityOutliers,
|
|
5
|
+
export { useEntities, useEntityLearning, useEntityOutlierExamples, useEntityOutliers, useEntityRun, useEntityRuns, useEntityTopic, useEntityTopicExamples, useEntityTopics } from './signals/hooks/use-entity-learning.es.js';
|
|
6
6
|
export { createEntityLearningService } from './signals/services/entity-learning-service.es.js';
|
|
7
7
|
export { getSignalCatalogEntry, signalCatalog } from './signals/signals-data.es.js';
|
|
8
8
|
//# sourceMappingURL=signals.es.js.map
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { TopicTraceDetailsPanel } from '../../topics';
|
|
3
|
-
import {
|
|
3
|
+
import { EntityLearningTopic, EntityLearningTopicExample } from '../services';
|
|
4
4
|
import { SelectedEntity } from '../types';
|
|
5
5
|
export declare const SignalTraceDetailsPanel: typeof TopicTraceDetailsPanel;
|
|
6
|
-
type SignalTab = 'trace-list' | 'chart';
|
|
7
6
|
interface SignalClusterSidebarProps {
|
|
8
7
|
topics: EntityLearningTopic[];
|
|
9
8
|
selectedTopicIds: string[];
|
|
@@ -19,28 +18,16 @@ export declare function SignalTraceListTab({ examples, selectedTraceId, onTraceS
|
|
|
19
18
|
loading?: boolean;
|
|
20
19
|
pageSize?: number;
|
|
21
20
|
}): import("react/jsx-runtime").JSX.Element;
|
|
22
|
-
interface
|
|
23
|
-
topics: EntityLearningTopic[];
|
|
24
|
-
points: EntityLearningPoint[];
|
|
25
|
-
selectedTopicIds: string[];
|
|
26
|
-
onTopicToggle: (topicId: string) => void;
|
|
27
|
-
}
|
|
28
|
-
export declare function SignalChartTab({ topics, points, selectedTopicIds, onTopicToggle }: SignalChartTabProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
-
interface SignalClusterTabsProps {
|
|
21
|
+
interface SignalClusterTraceListProps {
|
|
30
22
|
topics: EntityLearningTopic[];
|
|
31
23
|
examples: EntityLearningTopicExample[];
|
|
32
24
|
examplesLoading: boolean;
|
|
33
|
-
points: EntityLearningPoint[];
|
|
34
25
|
selectedTopicId: string;
|
|
35
26
|
selectedTraceId: string | null;
|
|
36
|
-
selectedChartTopicIds: string[];
|
|
37
|
-
activeTab: SignalTab;
|
|
38
|
-
onActiveTabChange: (tab: SignalTab) => void;
|
|
39
27
|
onTopicSelect: (topicId: string) => void;
|
|
40
|
-
onChartTopicToggle: (topicId: string) => void;
|
|
41
28
|
onTraceSelect: (traceId: string) => void;
|
|
42
29
|
}
|
|
43
|
-
export declare function
|
|
30
|
+
export declare function SignalClusterTraceList({ topics, examples, examplesLoading, selectedTopicId, selectedTraceId, onTopicSelect, onTraceSelect, }: SignalClusterTraceListProps): import("react/jsx-runtime").JSX.Element;
|
|
44
31
|
export interface SignalDetailsPageProps {
|
|
45
32
|
signalId?: string;
|
|
46
33
|
entity: SelectedEntity | null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EntityLearningTopicExamplesParams, EntityLearningOutlierExamplesParams } from '../services';
|
|
2
2
|
/** GET /entity-learning/entities */
|
|
3
3
|
export declare function useEntities(): import('@tanstack/react-query').UseQueryResult<import('..').EntityLearningEntitySummary[], Error>;
|
|
4
4
|
/** GET /entity-learning/entities/:entityId/runs?signalName= */
|
|
@@ -18,8 +18,6 @@ export declare function useEntityTopics(entityId: string | undefined, signalName
|
|
|
18
18
|
export declare function useEntityTopic(entityId: string | undefined, topicId: string | undefined, signalName: string | undefined, runId: string | undefined): import('@tanstack/react-query').UseQueryResult<import('..').EntityLearningTopic, Error>;
|
|
19
19
|
/** GET /entity-learning/entities/:entityId/topics/:topicId/examples?signalName=&runId=&limit= */
|
|
20
20
|
export declare function useEntityTopicExamples(entityId: string | undefined, topicId: string | undefined, params: EntityLearningTopicExamplesParams | undefined): import('@tanstack/react-query').UseQueryResult<import('..').EntityLearningTopicExamplesResponse, Error>;
|
|
21
|
-
/** GET /entity-learning/entities/:entityId/points?signalName=&runId=&includeOutliers=&limit= */
|
|
22
|
-
export declare function useEntityPoints(entityId: string | undefined, params: EntityLearningPointsParams | undefined): import('@tanstack/react-query').UseQueryResult<import('..').EntityLearningPointsResponse, Error>;
|
|
23
21
|
/** GET /entity-learning/entities/:entityId/outliers?signalName=&runId= */
|
|
24
22
|
export declare function useEntityOutliers(entityId: string | undefined, signalName: string | undefined, runId: string | undefined): import('@tanstack/react-query').UseQueryResult<import('..').EntityLearningOutliersResponse, Error>;
|
|
25
23
|
/** GET /entity-learning/entities/:entityId/outliers/examples?signalName=&runId=&limit= */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityLearningEntitiesResponse, EntityLearningRunsResponse, EntityLearningRunResponse, EntityLearningLearningResponse, EntityLearningTopicsResponse, EntityLearningTopicResponse, EntityLearningTopicExamplesResponse,
|
|
1
|
+
import { EntityLearningEntitiesResponse, EntityLearningRunsResponse, EntityLearningRunResponse, EntityLearningLearningResponse, EntityLearningTopicsResponse, EntityLearningTopicResponse, EntityLearningTopicExamplesResponse, EntityLearningOutliersResponse } from './entity-learning-types';
|
|
2
2
|
export type EntityLearningServiceConfig = {
|
|
3
3
|
/**
|
|
4
4
|
* Platform observability query-service origin (mobs-query), e.g.
|
|
@@ -14,12 +14,6 @@ export type EntityLearningTopicExamplesParams = {
|
|
|
14
14
|
runId: string;
|
|
15
15
|
limit?: number;
|
|
16
16
|
};
|
|
17
|
-
export type EntityLearningPointsParams = {
|
|
18
|
-
signalName: string;
|
|
19
|
-
runId: string;
|
|
20
|
-
includeOutliers?: boolean;
|
|
21
|
-
limit?: number;
|
|
22
|
-
};
|
|
23
17
|
export type EntityLearningOutlierExamplesParams = {
|
|
24
18
|
signalName: string;
|
|
25
19
|
runId: string;
|
|
@@ -44,7 +38,6 @@ export declare function createEntityLearningService(config: EntityLearningServic
|
|
|
44
38
|
getEntityTopics(entityId: string, signalName: string, runId?: string): Promise<EntityLearningTopicsResponse>;
|
|
45
39
|
getEntityTopic(entityId: string, topicId: string, signalName: string, runId: string): Promise<EntityLearningTopicResponse>;
|
|
46
40
|
getEntityTopicExamples(entityId: string, topicId: string, params: EntityLearningTopicExamplesParams): Promise<EntityLearningTopicExamplesResponse>;
|
|
47
|
-
getEntityPoints(entityId: string, params: EntityLearningPointsParams): Promise<EntityLearningPointsResponse>;
|
|
48
41
|
getEntityOutliers(entityId: string, signalName: string, runId: string): Promise<EntityLearningOutliersResponse>;
|
|
49
42
|
getEntityOutlierExamples(entityId: string, params: EntityLearningOutlierExamplesParams): Promise<EntityLearningTopicExamplesResponse>;
|
|
50
43
|
};
|
|
@@ -86,15 +86,6 @@ export type EntityLearningTopicExample = {
|
|
|
86
86
|
x: number;
|
|
87
87
|
y: number;
|
|
88
88
|
};
|
|
89
|
-
export type EntityLearningPoint = {
|
|
90
|
-
exampleId: string;
|
|
91
|
-
runId: string;
|
|
92
|
-
signalName: string;
|
|
93
|
-
topicId?: string;
|
|
94
|
-
isOutlier: boolean;
|
|
95
|
-
x: number;
|
|
96
|
-
y: number;
|
|
97
|
-
};
|
|
98
89
|
export type EntityLearningOutliers = {
|
|
99
90
|
runId: string;
|
|
100
91
|
itemCount: number;
|
|
@@ -126,10 +117,6 @@ export type EntityLearningTopicExamplesResponse = {
|
|
|
126
117
|
examples: EntityLearningTopicExample[];
|
|
127
118
|
nextOffset: number | null;
|
|
128
119
|
};
|
|
129
|
-
export type EntityLearningPointsResponse = {
|
|
130
|
-
runId: string;
|
|
131
|
-
points: EntityLearningPoint[];
|
|
132
|
-
};
|
|
133
120
|
export type EntityLearningOutliersResponse = {
|
|
134
121
|
run: EntityLearningRunSummary;
|
|
135
122
|
outliers: EntityLearningOutliers;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/playground-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "40.0.
|
|
4
|
+
"version": "40.0.1-alpha.1",
|
|
5
5
|
"description": "Mastra Playground components",
|
|
6
6
|
"sideEffects": [
|
|
7
7
|
"**/*.css"
|
|
@@ -150,8 +150,8 @@
|
|
|
150
150
|
"react": ">=19.0.0",
|
|
151
151
|
"react-dom": ">=19.0.0",
|
|
152
152
|
"tailwindcss": "^4.0.0",
|
|
153
|
-
"@mastra/client-js": "^1.31.
|
|
154
|
-
"@mastra/react": "1.2.
|
|
153
|
+
"@mastra/client-js": "^1.31.1-alpha.1",
|
|
154
|
+
"@mastra/react": "1.2.4-alpha.1"
|
|
155
155
|
},
|
|
156
156
|
"devDependencies": {
|
|
157
157
|
"@storybook/addon-a11y": "^10.4.1",
|
|
@@ -189,10 +189,10 @@
|
|
|
189
189
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
190
190
|
"vitest": "4.1.8",
|
|
191
191
|
"@internal/lint": "0.0.112",
|
|
192
|
-
"@mastra/client-js": "^1.31.
|
|
193
|
-
"@mastra/core": "1.50.0",
|
|
192
|
+
"@mastra/client-js": "^1.31.1-alpha.1",
|
|
194
193
|
"@mastra/memory": "1.22.1",
|
|
195
|
-
"@mastra/
|
|
194
|
+
"@mastra/core": "1.50.1-alpha.1",
|
|
195
|
+
"@mastra/react": "1.2.4-alpha.1"
|
|
196
196
|
},
|
|
197
197
|
"homepage": "https://mastra.ai",
|
|
198
198
|
"repository": {
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { ResponsiveContainer, ScatterChart, CartesianGrid, XAxis, YAxis, ZAxis, Tooltip, Scatter } from 'recharts';
|
|
3
|
-
import { C as Colors } from './spacings-C87dXiT-.js';
|
|
4
|
-
import { c as cn } from './cn-BakJzhuv.js';
|
|
5
|
-
|
|
6
|
-
function ScatterPlotChartTooltip({
|
|
7
|
-
active,
|
|
8
|
-
payload,
|
|
9
|
-
xKey,
|
|
10
|
-
yKey,
|
|
11
|
-
nameKey,
|
|
12
|
-
formatX,
|
|
13
|
-
formatY,
|
|
14
|
-
formatTooltipLabel
|
|
15
|
-
}) {
|
|
16
|
-
const point = payload?.[0]?.payload;
|
|
17
|
-
if (!active || !point) return null;
|
|
18
|
-
const label = formatTooltipLabel?.(point) ?? (nameKey ? point[nameKey] : void 0);
|
|
19
|
-
const xValue = point[xKey];
|
|
20
|
-
const yValue = point[yKey];
|
|
21
|
-
return /* @__PURE__ */ jsxs("div", { className: "rounded-md border border-border1 bg-surface2 px-3 py-2 text-xs shadow-lg", children: [
|
|
22
|
-
label !== void 0 && /* @__PURE__ */ jsx("p", { className: "mb-1 font-medium text-icon6", children: String(label) }),
|
|
23
|
-
/* @__PURE__ */ jsxs("div", { className: "grid gap-1 text-icon2", children: [
|
|
24
|
-
/* @__PURE__ */ jsxs("p", { children: [
|
|
25
|
-
/* @__PURE__ */ jsx("span", { className: "text-neutral3", children: "X:" }),
|
|
26
|
-
" ",
|
|
27
|
-
/* @__PURE__ */ jsx("span", { className: "font-mono", children: formatX ? formatX(xValue, point) : String(xValue) })
|
|
28
|
-
] }),
|
|
29
|
-
/* @__PURE__ */ jsxs("p", { children: [
|
|
30
|
-
/* @__PURE__ */ jsx("span", { className: "text-neutral3", children: "Y:" }),
|
|
31
|
-
" ",
|
|
32
|
-
/* @__PURE__ */ jsx("span", { className: "font-mono", children: formatY ? formatY(yValue, point) : String(yValue) })
|
|
33
|
-
] })
|
|
34
|
-
] })
|
|
35
|
-
] });
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function getScatterPlotPointColor(point, colorKey) {
|
|
39
|
-
const color = colorKey ? point[colorKey] : void 0;
|
|
40
|
-
return typeof color === "string" && color.length > 0 ? color : Colors.accent3;
|
|
41
|
-
}
|
|
42
|
-
function getScatterPlotClickedPoint(payload) {
|
|
43
|
-
return payload?.payload;
|
|
44
|
-
}
|
|
45
|
-
function formatScatterPlotAxisTick(value, formatter) {
|
|
46
|
-
return (formatter?.(value, {}) ?? String(value)).replace(/\s+/g, " ");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const LABEL_COLOR = "#a1a1aa";
|
|
50
|
-
const DEFAULT_POINT_SIZE = 48;
|
|
51
|
-
const CHART_MARGIN = { top: 16, right: 16, bottom: 16, left: 16 };
|
|
52
|
-
function ScatterPlotChart({
|
|
53
|
-
data,
|
|
54
|
-
xKey,
|
|
55
|
-
yKey,
|
|
56
|
-
nameKey,
|
|
57
|
-
colorKey,
|
|
58
|
-
height = 210,
|
|
59
|
-
xLabel,
|
|
60
|
-
yLabel,
|
|
61
|
-
xDomain,
|
|
62
|
-
yDomain,
|
|
63
|
-
formatX,
|
|
64
|
-
formatY,
|
|
65
|
-
formatTooltipLabel,
|
|
66
|
-
onPointClick,
|
|
67
|
-
className
|
|
68
|
-
}) {
|
|
69
|
-
const isClickable = typeof onPointClick === "function";
|
|
70
|
-
const fillsContainer = height === "100%";
|
|
71
|
-
if (data.length === 0) {
|
|
72
|
-
return /* @__PURE__ */ jsx(
|
|
73
|
-
"div",
|
|
74
|
-
{
|
|
75
|
-
className: cn(
|
|
76
|
-
"flex items-center justify-center rounded-md border border-border1 text-ui-sm text-neutral3",
|
|
77
|
-
className
|
|
78
|
-
),
|
|
79
|
-
style: { height },
|
|
80
|
-
children: "No data to display"
|
|
81
|
-
}
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
return /* @__PURE__ */ jsx("div", { className: cn(fillsContainer && "flex h-full min-h-0 flex-col", className), children: /* @__PURE__ */ jsx("div", { className: cn(fillsContainer && "min-h-0 flex-1"), style: { height: fillsContainer ? void 0 : height }, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxs(ScatterChart, { data, margin: CHART_MARGIN, children: [
|
|
85
|
-
/* @__PURE__ */ jsx(CartesianGrid, { stroke: Colors.neutral3, strokeDasharray: "4 4", strokeOpacity: 0.18, vertical: false }),
|
|
86
|
-
/* @__PURE__ */ jsx(
|
|
87
|
-
XAxis,
|
|
88
|
-
{
|
|
89
|
-
dataKey: xKey,
|
|
90
|
-
name: xLabel,
|
|
91
|
-
type: "number",
|
|
92
|
-
tick: { fontSize: 10, fill: LABEL_COLOR, fontFamily: "var(--font-mono)" },
|
|
93
|
-
tickLine: false,
|
|
94
|
-
axisLine: false,
|
|
95
|
-
domain: xDomain,
|
|
96
|
-
tickFormatter: (value) => formatScatterPlotAxisTick(value, formatX)
|
|
97
|
-
}
|
|
98
|
-
),
|
|
99
|
-
/* @__PURE__ */ jsx(
|
|
100
|
-
YAxis,
|
|
101
|
-
{
|
|
102
|
-
dataKey: yKey,
|
|
103
|
-
name: yLabel,
|
|
104
|
-
type: "number",
|
|
105
|
-
tick: { fontSize: 10, fill: LABEL_COLOR, fontFamily: "var(--font-mono)" },
|
|
106
|
-
tickLine: false,
|
|
107
|
-
axisLine: false,
|
|
108
|
-
width: 44,
|
|
109
|
-
domain: yDomain,
|
|
110
|
-
tickFormatter: (value) => formatScatterPlotAxisTick(value, formatY)
|
|
111
|
-
}
|
|
112
|
-
),
|
|
113
|
-
/* @__PURE__ */ jsx(ZAxis, { range: [DEFAULT_POINT_SIZE, DEFAULT_POINT_SIZE] }),
|
|
114
|
-
/* @__PURE__ */ jsx(
|
|
115
|
-
Tooltip,
|
|
116
|
-
{
|
|
117
|
-
cursor: { stroke: Colors.neutral3, strokeOpacity: 0.16 },
|
|
118
|
-
content: /* @__PURE__ */ jsx(
|
|
119
|
-
ScatterPlotChartTooltip,
|
|
120
|
-
{
|
|
121
|
-
xKey,
|
|
122
|
-
yKey,
|
|
123
|
-
nameKey,
|
|
124
|
-
formatX,
|
|
125
|
-
formatY,
|
|
126
|
-
formatTooltipLabel
|
|
127
|
-
}
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
),
|
|
131
|
-
/* @__PURE__ */ jsx(
|
|
132
|
-
Scatter,
|
|
133
|
-
{
|
|
134
|
-
data,
|
|
135
|
-
fill: Colors.accent3,
|
|
136
|
-
shape: (props) => {
|
|
137
|
-
const point = props.payload ?? {};
|
|
138
|
-
const cx = props.cx;
|
|
139
|
-
const cy = props.cy;
|
|
140
|
-
if (typeof cx !== "number" || typeof cy !== "number") return /* @__PURE__ */ jsx("g", {});
|
|
141
|
-
return /* @__PURE__ */ jsx(
|
|
142
|
-
"circle",
|
|
143
|
-
{
|
|
144
|
-
cx,
|
|
145
|
-
cy,
|
|
146
|
-
r: 4,
|
|
147
|
-
fill: getScatterPlotPointColor(point, colorKey),
|
|
148
|
-
opacity: 0.9,
|
|
149
|
-
style: { cursor: isClickable ? "pointer" : void 0 }
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
},
|
|
153
|
-
onClick: (_, payload) => {
|
|
154
|
-
const point = getScatterPlotClickedPoint(payload);
|
|
155
|
-
if (point) onPointClick?.(point);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
)
|
|
159
|
-
] }) }) }) });
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
export { ScatterPlotChart as S, ScatterPlotChartTooltip as a, getScatterPlotPointColor as b, formatScatterPlotAxisTick as f, getScatterPlotClickedPoint as g };
|
|
163
|
-
//# sourceMappingURL=scatter-plot-chart-B3hfFMKS.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scatter-plot-chart-B3hfFMKS.js","sources":["../src/ds/components/ScatterPlotChart/scatter-plot-chart-tooltip.tsx","../src/ds/components/ScatterPlotChart/scatter-plot-chart-utils.ts","../src/ds/components/ScatterPlotChart/scatter-plot-chart.tsx"],"sourcesContent":["import type { ScatterPlotChartFormatter } from './scatter-plot-chart';\n\ntype ScatterTooltipPayload = Array<{\n color?: string;\n payload?: Record<string, unknown>;\n}>;\n\nexport function ScatterPlotChartTooltip({\n active,\n payload,\n xKey,\n yKey,\n nameKey,\n formatX,\n formatY,\n formatTooltipLabel,\n}: {\n active?: boolean;\n payload?: ScatterTooltipPayload;\n xKey: string;\n yKey: string;\n nameKey?: string;\n formatX?: ScatterPlotChartFormatter;\n formatY?: ScatterPlotChartFormatter;\n formatTooltipLabel?: (point: Record<string, unknown>) => string;\n}) {\n const point = payload?.[0]?.payload;\n if (!active || !point) return null;\n\n const label = formatTooltipLabel?.(point) ?? (nameKey ? point[nameKey] : undefined);\n const xValue = point[xKey];\n const yValue = point[yKey];\n\n return (\n <div className=\"rounded-md border border-border1 bg-surface2 px-3 py-2 text-xs shadow-lg\">\n {label !== undefined && <p className=\"mb-1 font-medium text-icon6\">{String(label)}</p>}\n <div className=\"grid gap-1 text-icon2\">\n <p>\n <span className=\"text-neutral3\">X:</span>{' '}\n <span className=\"font-mono\">{formatX ? formatX(xValue, point) : String(xValue)}</span>\n </p>\n <p>\n <span className=\"text-neutral3\">Y:</span>{' '}\n <span className=\"font-mono\">{formatY ? formatY(yValue, point) : String(yValue)}</span>\n </p>\n </div>\n </div>\n );\n}\n","import type { ScatterPlotChartFormatter } from './scatter-plot-chart';\nimport { Colors } from '@/ds/tokens';\n\nexport function getScatterPlotPointColor(point: Record<string, unknown>, colorKey?: string) {\n const color = colorKey ? point[colorKey] : undefined;\n return typeof color === 'string' && color.length > 0 ? color : Colors.accent3;\n}\n\nexport function getScatterPlotClickedPoint(payload: unknown) {\n return (payload as { payload?: Record<string, unknown> } | undefined)?.payload;\n}\n\nexport function formatScatterPlotAxisTick(value: unknown, formatter?: ScatterPlotChartFormatter) {\n return (formatter?.(value, {}) ?? String(value)).replace(/\\s+/g, '\\u00A0');\n}\n","import { CartesianGrid, ResponsiveContainer, Scatter, ScatterChart, Tooltip, XAxis, YAxis, ZAxis } from 'recharts';\nimport { ScatterPlotChartTooltip } from './scatter-plot-chart-tooltip';\nimport {\n formatScatterPlotAxisTick,\n getScatterPlotClickedPoint,\n getScatterPlotPointColor,\n} from './scatter-plot-chart-utils';\nimport { Colors } from '@/ds/tokens';\nimport { cn } from '@/lib/utils';\n\nconst LABEL_COLOR = '#a1a1aa';\nconst DEFAULT_POINT_SIZE = 48;\nconst CHART_MARGIN = { top: 16, right: 16, bottom: 16, left: 16 };\n\nexport type ScatterPlotChartDomain = [number | 'auto', number | 'auto'];\nexport type ScatterPlotChartFormatter = (value: unknown, point: Record<string, unknown>) => string;\nexport type ScatterPlotChartPointClickHandler = (point: Record<string, unknown>) => void;\n\nexport type ScatterPlotChartProps = {\n data: Array<Record<string, unknown>>;\n xKey: string;\n yKey: string;\n nameKey?: string;\n colorKey?: string;\n height?: React.CSSProperties['height'];\n xLabel?: string;\n yLabel?: string;\n xDomain?: ScatterPlotChartDomain;\n yDomain?: ScatterPlotChartDomain;\n formatX?: ScatterPlotChartFormatter;\n formatY?: ScatterPlotChartFormatter;\n formatTooltipLabel?: (point: Record<string, unknown>) => string;\n onPointClick?: ScatterPlotChartPointClickHandler;\n className?: string;\n};\n\nexport function ScatterPlotChart({\n data,\n xKey,\n yKey,\n nameKey,\n colorKey,\n height = 210,\n xLabel,\n yLabel,\n xDomain,\n yDomain,\n formatX,\n formatY,\n formatTooltipLabel,\n onPointClick,\n className,\n}: ScatterPlotChartProps) {\n const isClickable = typeof onPointClick === 'function';\n const fillsContainer = height === '100%';\n\n if (data.length === 0) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center rounded-md border border-border1 text-ui-sm text-neutral3',\n className,\n )}\n style={{ height }}\n >\n No data to display\n </div>\n );\n }\n\n return (\n <div className={cn(fillsContainer && 'flex h-full min-h-0 flex-col', className)}>\n <div className={cn(fillsContainer && 'min-h-0 flex-1')} style={{ height: fillsContainer ? undefined : height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <ScatterChart data={data} margin={CHART_MARGIN}>\n <CartesianGrid stroke={Colors.neutral3} strokeDasharray=\"4 4\" strokeOpacity={0.18} vertical={false} />\n <XAxis\n dataKey={xKey}\n name={xLabel}\n type=\"number\"\n tick={{ fontSize: 10, fill: LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n domain={xDomain}\n tickFormatter={value => formatScatterPlotAxisTick(value, formatX)}\n />\n <YAxis\n dataKey={yKey}\n name={yLabel}\n type=\"number\"\n tick={{ fontSize: 10, fill: LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n width={44}\n domain={yDomain}\n tickFormatter={value => formatScatterPlotAxisTick(value, formatY)}\n />\n <ZAxis range={[DEFAULT_POINT_SIZE, DEFAULT_POINT_SIZE]} />\n <Tooltip\n cursor={{ stroke: Colors.neutral3, strokeOpacity: 0.16 }}\n content={\n <ScatterPlotChartTooltip\n xKey={xKey}\n yKey={yKey}\n nameKey={nameKey}\n formatX={formatX}\n formatY={formatY}\n formatTooltipLabel={formatTooltipLabel}\n />\n }\n />\n <Scatter\n data={data}\n fill={Colors.accent3}\n shape={(props: unknown) => {\n const point = (props as { payload?: Record<string, unknown> }).payload ?? {};\n const cx = (props as { cx?: number }).cx;\n const cy = (props as { cy?: number }).cy;\n if (typeof cx !== 'number' || typeof cy !== 'number') return <g />;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={4}\n fill={getScatterPlotPointColor(point, colorKey)}\n opacity={0.9}\n style={{ cursor: isClickable ? 'pointer' : undefined }}\n />\n );\n }}\n onClick={(_: unknown, payload: unknown) => {\n const point = getScatterPlotClickedPoint(payload);\n if (point) onPointClick?.(point);\n }}\n />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|