@contractspec/lib.example-shared-ui 6.0.5 → 6.0.7
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/.turbo/turbo-build.log +90 -84
- package/AGENTS.md +43 -25
- package/CHANGELOG.md +11 -0
- package/README.md +63 -35
- package/dist/EvolutionDashboard.js +9 -9
- package/dist/EvolutionSidebar.js +15 -15
- package/dist/LocalDataIndicator.js +3 -3
- package/dist/MarkdownView.d.ts +0 -7
- package/dist/MarkdownView.js +76 -172
- package/dist/PersonalizationInsights.js +12 -12
- package/dist/SaveToStudioButton.js +2 -2
- package/dist/SpecDrivenTemplateShell.d.ts +1 -1
- package/dist/SpecDrivenTemplateShell.js +10 -10
- package/dist/SpecEditorPanel.js +3 -3
- package/dist/TemplateShell.js +10 -10
- package/dist/browser/EvolutionDashboard.js +9 -9
- package/dist/browser/EvolutionSidebar.js +15 -15
- package/dist/browser/LocalDataIndicator.js +3 -3
- package/dist/browser/MarkdownView.js +76 -172
- package/dist/browser/PersonalizationInsights.js +12 -12
- package/dist/browser/SaveToStudioButton.js +2 -2
- package/dist/browser/SpecDrivenTemplateShell.js +10 -10
- package/dist/browser/SpecEditorPanel.js +3 -3
- package/dist/browser/TemplateShell.js +10 -10
- package/dist/browser/hooks/index.js +29 -29
- package/dist/browser/index.js +193 -286
- package/dist/browser/lib/component-registry.js +1 -1
- package/dist/browser/markdown/formatPresentationName.js +9 -0
- package/dist/browser/markdown/useMarkdownPresentation.js +65 -0
- package/dist/hooks/index.d.ts +3 -3
- package/dist/hooks/index.js +29 -29
- package/dist/index.d.ts +12 -11
- package/dist/index.js +193 -286
- package/dist/lib/component-registry.js +1 -1
- package/dist/markdown/formatPresentationName.d.ts +1 -0
- package/dist/markdown/formatPresentationName.js +10 -0
- package/dist/markdown/useMarkdownPresentation.d.ts +21 -0
- package/dist/markdown/useMarkdownPresentation.js +66 -0
- package/dist/node/EvolutionDashboard.js +9 -9
- package/dist/node/EvolutionSidebar.js +15 -15
- package/dist/node/LocalDataIndicator.js +3 -3
- package/dist/node/MarkdownView.js +76 -172
- package/dist/node/PersonalizationInsights.js +12 -12
- package/dist/node/SaveToStudioButton.js +2 -2
- package/dist/node/SpecDrivenTemplateShell.js +10 -10
- package/dist/node/SpecEditorPanel.js +3 -3
- package/dist/node/TemplateShell.js +10 -10
- package/dist/node/hooks/index.js +29 -29
- package/dist/node/index.js +193 -286
- package/dist/node/lib/component-registry.js +1 -1
- package/dist/node/markdown/formatPresentationName.js +9 -0
- package/dist/node/markdown/useMarkdownPresentation.js +65 -0
- package/dist/utils/index.d.ts +1 -1
- package/package.json +40 -13
- package/src/EvolutionDashboard.tsx +415 -415
- package/src/EvolutionSidebar.tsx +245 -245
- package/src/LocalDataIndicator.tsx +28 -28
- package/src/MarkdownView.tsx +119 -372
- package/src/OverlayContextProvider.tsx +272 -272
- package/src/PersonalizationInsights.tsx +232 -232
- package/src/SaveToStudioButton.tsx +51 -51
- package/src/SpecDrivenTemplateShell.tsx +59 -59
- package/src/SpecEditorPanel.tsx +138 -138
- package/src/TemplateShell.tsx +50 -50
- package/src/bundles/ExampleTemplateBundle.ts +78 -78
- package/src/hooks/index.ts +3 -3
- package/src/hooks/useBehaviorTracking.ts +252 -252
- package/src/hooks/useEvolution.ts +437 -437
- package/src/hooks/useRegistryTemplates.ts +42 -42
- package/src/hooks/useSpecContent.ts +214 -214
- package/src/hooks/useWorkflowComposer.ts +567 -567
- package/src/index.ts +12 -11
- package/src/lib/component-registry.tsx +40 -40
- package/src/lib/runtime-context.tsx +31 -31
- package/src/lib/types.ts +57 -57
- package/src/markdown/formatPresentationName.ts +9 -0
- package/src/markdown/useMarkdownPresentation.ts +107 -0
- package/src/overlay-types.ts +15 -15
- package/src/utils/fetchPresentationData.ts +13 -13
- package/src/utils/generateSpecFromTemplate.ts +29 -29
- package/src/utils/index.ts +1 -1
- package/tsconfig.json +8 -8
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/markdown/formatPresentationName.ts
|
|
2
|
+
function formatPresentationName(name) {
|
|
3
|
+
const parts = name.split(".");
|
|
4
|
+
const lastPart = parts[parts.length - 1] ?? name;
|
|
5
|
+
return lastPart.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
formatPresentationName
|
|
9
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// src/markdown/useMarkdownPresentation.ts
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
"use client";
|
|
4
|
+
function useMarkdownPresentation({
|
|
5
|
+
engine,
|
|
6
|
+
fetchData,
|
|
7
|
+
presentationId,
|
|
8
|
+
presentations,
|
|
9
|
+
resolvePresentation,
|
|
10
|
+
templateId
|
|
11
|
+
}) {
|
|
12
|
+
const [selectedPresentation, setSelectedPresentation] = useState("");
|
|
13
|
+
const [markdownContent, setMarkdownContent] = useState("");
|
|
14
|
+
const [loading, setLoading] = useState(false);
|
|
15
|
+
const [error, setError] = useState(null);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (presentationId && presentations.includes(presentationId)) {
|
|
18
|
+
setSelectedPresentation(presentationId);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (presentations.length === 0) {
|
|
22
|
+
setSelectedPresentation("");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!presentations.includes(selectedPresentation)) {
|
|
26
|
+
setSelectedPresentation(presentations[0] ?? "");
|
|
27
|
+
}
|
|
28
|
+
}, [presentationId, presentations, selectedPresentation, templateId]);
|
|
29
|
+
const renderMarkdown = useCallback(async () => {
|
|
30
|
+
if (!selectedPresentation || !engine)
|
|
31
|
+
return;
|
|
32
|
+
setLoading(true);
|
|
33
|
+
setError(null);
|
|
34
|
+
try {
|
|
35
|
+
if (!resolvePresentation) {
|
|
36
|
+
throw new Error("resolvePresentation not available in runtime context");
|
|
37
|
+
}
|
|
38
|
+
const descriptor = resolvePresentation(selectedPresentation);
|
|
39
|
+
if (!descriptor) {
|
|
40
|
+
throw new Error(`Presentation descriptor not found: ${selectedPresentation}`);
|
|
41
|
+
}
|
|
42
|
+
const dataResult = await fetchData(selectedPresentation);
|
|
43
|
+
const result = await engine.render("markdown", descriptor, { data: dataResult.data });
|
|
44
|
+
setMarkdownContent(result.body);
|
|
45
|
+
} catch (err) {
|
|
46
|
+
setError(err instanceof Error ? err : new Error("Failed to render markdown"));
|
|
47
|
+
} finally {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
}
|
|
50
|
+
}, [engine, fetchData, resolvePresentation, selectedPresentation]);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
renderMarkdown();
|
|
53
|
+
}, [renderMarkdown]);
|
|
54
|
+
return {
|
|
55
|
+
error,
|
|
56
|
+
loading,
|
|
57
|
+
markdownContent,
|
|
58
|
+
renderMarkdown,
|
|
59
|
+
selectedPresentation,
|
|
60
|
+
setSelectedPresentation
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
useMarkdownPresentation
|
|
65
|
+
};
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './useSpecContent';
|
|
2
|
-
export * from './useEvolution';
|
|
3
1
|
export * from './useBehaviorTracking';
|
|
4
|
-
export * from './
|
|
2
|
+
export * from './useEvolution';
|
|
5
3
|
export * from './useRegistryTemplates';
|
|
4
|
+
export * from './useSpecContent';
|
|
5
|
+
export * from './useWorkflowComposer';
|
package/dist/hooks/index.js
CHANGED
|
@@ -989,6 +989,35 @@ function useSpecContent(templateId) {
|
|
|
989
989
|
};
|
|
990
990
|
}
|
|
991
991
|
|
|
992
|
+
// src/hooks/useRegistryTemplates.ts
|
|
993
|
+
import { useQuery } from "@tanstack/react-query";
|
|
994
|
+
function useRegistryTemplates() {
|
|
995
|
+
return useQuery({
|
|
996
|
+
queryKey: ["registryTemplates"],
|
|
997
|
+
queryFn: async () => {
|
|
998
|
+
const registryUrl = process.env.NEXT_PUBLIC_CONTRACTSPEC_REGISTRY_URL ?? "";
|
|
999
|
+
if (!registryUrl)
|
|
1000
|
+
return [];
|
|
1001
|
+
const res = await fetch(`${registryUrl.replace(/\/$/, "")}/r/contractspec.json`, {
|
|
1002
|
+
method: "GET",
|
|
1003
|
+
headers: { Accept: "application/json" }
|
|
1004
|
+
});
|
|
1005
|
+
if (!res.ok)
|
|
1006
|
+
return [];
|
|
1007
|
+
const json = await res.json();
|
|
1008
|
+
const items = json.items ?? [];
|
|
1009
|
+
return items.filter((i) => i.type === "contractspec:template").map((i) => ({
|
|
1010
|
+
id: i.name,
|
|
1011
|
+
name: i.title ?? i.name,
|
|
1012
|
+
description: i.description,
|
|
1013
|
+
tags: i.meta?.tags ?? [],
|
|
1014
|
+
source: "registry",
|
|
1015
|
+
registryUrl
|
|
1016
|
+
}));
|
|
1017
|
+
}
|
|
1018
|
+
});
|
|
1019
|
+
}
|
|
1020
|
+
|
|
992
1021
|
// src/hooks/useWorkflowComposer.ts
|
|
993
1022
|
import { useCallback as useCallback4, useEffect as useEffect4, useMemo as useMemo3, useState as useState4 } from "react";
|
|
994
1023
|
"use client";
|
|
@@ -1479,35 +1508,6 @@ function getTemplateWorkflows(templateId) {
|
|
|
1479
1508
|
};
|
|
1480
1509
|
return templateWorkflows[templateId] ?? [];
|
|
1481
1510
|
}
|
|
1482
|
-
|
|
1483
|
-
// src/hooks/useRegistryTemplates.ts
|
|
1484
|
-
import { useQuery } from "@tanstack/react-query";
|
|
1485
|
-
function useRegistryTemplates() {
|
|
1486
|
-
return useQuery({
|
|
1487
|
-
queryKey: ["registryTemplates"],
|
|
1488
|
-
queryFn: async () => {
|
|
1489
|
-
const registryUrl = process.env.NEXT_PUBLIC_CONTRACTSPEC_REGISTRY_URL ?? "";
|
|
1490
|
-
if (!registryUrl)
|
|
1491
|
-
return [];
|
|
1492
|
-
const res = await fetch(`${registryUrl.replace(/\/$/, "")}/r/contractspec.json`, {
|
|
1493
|
-
method: "GET",
|
|
1494
|
-
headers: { Accept: "application/json" }
|
|
1495
|
-
});
|
|
1496
|
-
if (!res.ok)
|
|
1497
|
-
return [];
|
|
1498
|
-
const json = await res.json();
|
|
1499
|
-
const items = json.items ?? [];
|
|
1500
|
-
return items.filter((i) => i.type === "contractspec:template").map((i) => ({
|
|
1501
|
-
id: i.name,
|
|
1502
|
-
name: i.title ?? i.name,
|
|
1503
|
-
description: i.description,
|
|
1504
|
-
tags: i.meta?.tags ?? [],
|
|
1505
|
-
source: "registry",
|
|
1506
|
-
registryUrl
|
|
1507
|
-
}));
|
|
1508
|
-
}
|
|
1509
|
-
});
|
|
1510
|
-
}
|
|
1511
1511
|
export {
|
|
1512
1512
|
useWorkflowComposer,
|
|
1513
1513
|
useSpecContent,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from './SpecDrivenTemplateShell';
|
|
3
|
-
export * from './LocalDataIndicator';
|
|
4
|
-
export * from './SaveToStudioButton';
|
|
5
|
-
export * from './overlay-types';
|
|
6
|
-
export * from './MarkdownView';
|
|
7
|
-
export * from './SpecEditorPanel';
|
|
1
|
+
export { MarkdownRenderer } from '@contractspec/lib.design-system';
|
|
8
2
|
export * from './EvolutionDashboard';
|
|
9
3
|
export * from './EvolutionSidebar';
|
|
10
|
-
export * from './OverlayContextProvider';
|
|
11
|
-
export * from './PersonalizationInsights';
|
|
12
4
|
export * from './hooks';
|
|
13
|
-
export * from './
|
|
14
|
-
export * from './lib/runtime-context';
|
|
5
|
+
export * from './LocalDataIndicator';
|
|
15
6
|
export * from './lib/component-registry';
|
|
7
|
+
export * from './lib/runtime-context';
|
|
16
8
|
export * from './lib/types';
|
|
9
|
+
export * from './MarkdownView';
|
|
10
|
+
export * from './OverlayContextProvider';
|
|
11
|
+
export * from './overlay-types';
|
|
12
|
+
export * from './PersonalizationInsights';
|
|
13
|
+
export * from './SaveToStudioButton';
|
|
14
|
+
export * from './SpecDrivenTemplateShell';
|
|
15
|
+
export * from './SpecEditorPanel';
|
|
16
|
+
export * from './TemplateShell';
|
|
17
|
+
export * from './utils';
|