@ankhorage/studio 0.0.15 → 0.0.17

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 (78) hide show
  1. package/README.md +1 -1
  2. package/dist/app/StudioApp.d.ts +3 -0
  3. package/dist/app/StudioApp.d.ts.map +1 -0
  4. package/dist/app/StudioApp.js +36 -0
  5. package/dist/app/StudioApp.js.map +1 -0
  6. package/dist/app/StudioDashboard.d.ts +3 -0
  7. package/dist/app/StudioDashboard.d.ts.map +1 -0
  8. package/dist/app/StudioDashboard.js +192 -0
  9. package/dist/app/StudioDashboard.js.map +1 -0
  10. package/dist/app/index.d.ts +3 -0
  11. package/dist/app/index.d.ts.map +1 -0
  12. package/dist/app/index.js +3 -0
  13. package/dist/app/index.js.map +1 -0
  14. package/dist/core/StudioContext.d.ts +6 -0
  15. package/dist/core/StudioContext.d.ts.map +1 -0
  16. package/dist/core/StudioContext.js +10 -0
  17. package/dist/core/StudioContext.js.map +1 -0
  18. package/dist/core/StudioProvider.d.ts +9 -0
  19. package/dist/core/StudioProvider.d.ts.map +1 -0
  20. package/dist/core/StudioProvider.js +92 -0
  21. package/dist/core/StudioProvider.js.map +1 -0
  22. package/dist/core/constants.d.ts +2 -0
  23. package/dist/core/constants.d.ts.map +1 -0
  24. package/dist/core/constants.js +14 -0
  25. package/dist/core/constants.js.map +1 -0
  26. package/dist/core/studioPackageBoundary.d.ts +2 -0
  27. package/dist/core/studioPackageBoundary.d.ts.map +1 -0
  28. package/dist/core/studioPackageBoundary.js +2 -0
  29. package/dist/core/studioPackageBoundary.js.map +1 -0
  30. package/dist/hooks/useProjects.d.ts +52 -0
  31. package/dist/hooks/useProjects.d.ts.map +1 -0
  32. package/dist/hooks/useProjects.js +165 -0
  33. package/dist/hooks/useProjects.js.map +1 -0
  34. package/dist/hooks/useTemplateSummaries.d.ts +8 -0
  35. package/dist/hooks/useTemplateSummaries.d.ts.map +1 -0
  36. package/dist/hooks/useTemplateSummaries.js +54 -0
  37. package/dist/hooks/useTemplateSummaries.js.map +1 -0
  38. package/dist/modules/dashboard/platform.d.ts +4 -0
  39. package/dist/modules/dashboard/platform.d.ts.map +1 -0
  40. package/dist/modules/dashboard/platform.js +24 -0
  41. package/dist/modules/dashboard/platform.js.map +1 -0
  42. package/dist/modules/dashboard/search.d.ts +4 -0
  43. package/dist/modules/dashboard/search.d.ts.map +1 -0
  44. package/dist/modules/dashboard/search.js +49 -0
  45. package/dist/modules/dashboard/search.js.map +1 -0
  46. package/dist/modules/dashboard/templates.d.ts +3 -0
  47. package/dist/modules/dashboard/templates.d.ts.map +1 -0
  48. package/dist/modules/dashboard/templates.js +4 -0
  49. package/dist/modules/dashboard/templates.js.map +1 -0
  50. package/dist/modules/dashboard/types.d.ts +15 -0
  51. package/dist/modules/dashboard/types.d.ts.map +1 -0
  52. package/dist/modules/dashboard/types.js +2 -0
  53. package/dist/modules/dashboard/types.js.map +1 -0
  54. package/dist/modules/dashboard/ui/DashboardSectionHeader.d.ts +6 -0
  55. package/dist/modules/dashboard/ui/DashboardSectionHeader.d.ts.map +1 -0
  56. package/dist/modules/dashboard/ui/DashboardSectionHeader.js +17 -0
  57. package/dist/modules/dashboard/ui/DashboardSectionHeader.js.map +1 -0
  58. package/dist/modules/dashboard/ui/ProjectCard.d.ts +16 -0
  59. package/dist/modules/dashboard/ui/ProjectCard.d.ts.map +1 -0
  60. package/dist/modules/dashboard/ui/ProjectCard.js +76 -0
  61. package/dist/modules/dashboard/ui/ProjectCard.js.map +1 -0
  62. package/dist/modules/dashboard/ui/TemplateCard.d.ts +10 -0
  63. package/dist/modules/dashboard/ui/TemplateCard.d.ts.map +1 -0
  64. package/dist/modules/dashboard/ui/TemplateCard.js +32 -0
  65. package/dist/modules/dashboard/ui/TemplateCard.js.map +1 -0
  66. package/dist/ui/AnkhStudio.d.ts +8 -0
  67. package/dist/ui/AnkhStudio.d.ts.map +1 -0
  68. package/dist/ui/AnkhStudio.js +13 -0
  69. package/dist/ui/AnkhStudio.js.map +1 -0
  70. package/dist/ui/useStudioAppBarAugmentation.d.ts +9 -0
  71. package/dist/ui/useStudioAppBarAugmentation.d.ts.map +1 -0
  72. package/dist/ui/useStudioAppBarAugmentation.js +4 -0
  73. package/dist/ui/useStudioAppBarAugmentation.js.map +1 -0
  74. package/dist/utils/treeUtils.d.ts +3 -0
  75. package/dist/utils/treeUtils.d.ts.map +1 -0
  76. package/dist/utils/treeUtils.js +3 -0
  77. package/dist/utils/treeUtils.js.map +1 -0
  78. package/package.json +48 -2
@@ -0,0 +1,165 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import { API_BASE } from '../core/constants';
3
+ function isRecord(value) {
4
+ return typeof value === 'object' && value !== null;
5
+ }
6
+ function isProject(value) {
7
+ return (isRecord(value) &&
8
+ typeof value.id === 'string' &&
9
+ typeof value.name === 'string' &&
10
+ typeof value.path === 'string' &&
11
+ typeof value.version === 'string' &&
12
+ typeof value.isAnkhApp === 'boolean');
13
+ }
14
+ async function readJson(response) {
15
+ return await response.json();
16
+ }
17
+ function parseProjectList(value) {
18
+ if (!Array.isArray(value) || !value.every(isProject)) {
19
+ throw new Error('Projects response was not a valid project list');
20
+ }
21
+ return value;
22
+ }
23
+ function parseCreateProjectResponse(value) {
24
+ if (!isRecord(value) ||
25
+ typeof value.success !== 'boolean' ||
26
+ typeof value.id !== 'string' ||
27
+ typeof value.path !== 'string') {
28
+ throw new Error('Create project response was invalid');
29
+ }
30
+ return {
31
+ success: value.success,
32
+ id: value.id,
33
+ path: value.path,
34
+ };
35
+ }
36
+ function parseSyncProjectResponse(value) {
37
+ if (!isRecord(value) || typeof value.success !== 'boolean') {
38
+ throw new Error('Sync response was invalid');
39
+ }
40
+ return { success: value.success };
41
+ }
42
+ function parseInstallWorkspacePackagesResponse(value) {
43
+ if (!isRecord(value) || typeof value.success !== 'boolean' || value.scope !== 'workspace') {
44
+ throw new Error('Install packages response was invalid');
45
+ }
46
+ return {
47
+ success: value.success,
48
+ scope: 'workspace',
49
+ projectId: typeof value.projectId === 'string' ? value.projectId : undefined,
50
+ deprecated: typeof value.deprecated === 'boolean' ? value.deprecated : undefined,
51
+ };
52
+ }
53
+ function parseUpProjectInfrastructureResponse(value) {
54
+ if (!isRecord(value) || typeof value.success !== 'boolean') {
55
+ throw new Error('Infrastructure response was invalid');
56
+ }
57
+ return {
58
+ success: value.success,
59
+ skipped: typeof value.skipped === 'string' ? value.skipped : undefined,
60
+ target: typeof value.target === 'string' ? value.target : undefined,
61
+ regenerated: value.regenerated,
62
+ };
63
+ }
64
+ function parseLaunchProjectResponse(value) {
65
+ if (!isRecord(value) || typeof value.success !== 'boolean') {
66
+ throw new Error('Launch response was invalid');
67
+ }
68
+ return {
69
+ success: value.success,
70
+ skipped: typeof value.skipped === 'string' ? value.skipped : undefined,
71
+ target: typeof value.target === 'string' ? value.target : undefined,
72
+ url: typeof value.url === 'string' ? value.url : undefined,
73
+ started: typeof value.started === 'boolean' ? value.started : undefined,
74
+ };
75
+ }
76
+ export const useProjects = () => {
77
+ const [projects, setProjects] = useState([]);
78
+ const [isLoading, setIsLoading] = useState(true);
79
+ const [error, setError] = useState(null);
80
+ const fetchProjects = useCallback(async () => {
81
+ try {
82
+ setIsLoading(true);
83
+ const res = await fetch(`${API_BASE}/projects`);
84
+ if (!res.ok)
85
+ throw new Error('Failed to fetch projects');
86
+ const data = parseProjectList(await readJson(res));
87
+ setProjects(data);
88
+ setError(null);
89
+ }
90
+ catch (err) {
91
+ console.error(err);
92
+ setError('Could not connect to CLI. Is the bridge server running?');
93
+ }
94
+ finally {
95
+ setIsLoading(false);
96
+ }
97
+ }, []);
98
+ const createProject = async (input) => {
99
+ const res = await fetch(`${API_BASE}/projects`, {
100
+ method: 'POST',
101
+ headers: { 'Content-Type': 'application/json' },
102
+ body: JSON.stringify(input),
103
+ });
104
+ if (!res.ok)
105
+ throw new Error('Failed to create project');
106
+ await fetchProjects();
107
+ return parseCreateProjectResponse(await readJson(res));
108
+ };
109
+ const deleteProject = async (projectId) => {
110
+ const res = await fetch(`${API_BASE}/projects/${projectId}`, {
111
+ method: 'DELETE',
112
+ });
113
+ if (!res.ok)
114
+ throw new Error('Failed to delete project');
115
+ await fetchProjects();
116
+ };
117
+ const syncProject = async (projectId) => {
118
+ const res = await fetch(`${API_BASE}/projects/${projectId}/sync`, {
119
+ method: 'POST',
120
+ });
121
+ if (!res.ok)
122
+ throw new Error('Failed to sync project');
123
+ return parseSyncProjectResponse(await readJson(res));
124
+ };
125
+ const installWorkspacePackages = async () => {
126
+ const res = await fetch(`${API_BASE}/workspace/packages/install`, {
127
+ method: 'POST',
128
+ });
129
+ if (!res.ok)
130
+ throw new Error('Failed to install workspace packages');
131
+ return parseInstallWorkspacePackagesResponse(await readJson(res));
132
+ };
133
+ const upProjectInfrastructure = async (projectId) => {
134
+ const res = await fetch(`${API_BASE}/projects/${projectId}/infra/up`, {
135
+ method: 'POST',
136
+ });
137
+ if (!res.ok)
138
+ throw new Error('Failed to reload project infrastructure');
139
+ return parseUpProjectInfrastructureResponse(await readJson(res));
140
+ };
141
+ const launchProject = async (projectId) => {
142
+ const res = await fetch(`${API_BASE}/projects/${projectId}/launch`, {
143
+ method: 'POST',
144
+ });
145
+ if (!res.ok)
146
+ throw new Error('Failed to launch project');
147
+ return parseLaunchProjectResponse(await readJson(res));
148
+ };
149
+ useEffect(() => {
150
+ void fetchProjects();
151
+ }, [fetchProjects]);
152
+ return {
153
+ projects,
154
+ isLoading,
155
+ error,
156
+ refresh: fetchProjects,
157
+ createProject,
158
+ deleteProject,
159
+ syncProject,
160
+ installWorkspacePackages,
161
+ upProjectInfrastructure,
162
+ launchProject,
163
+ };
164
+ };
165
+ //# sourceMappingURL=useProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProjects.js","sourceRoot":"","sources":["../../src/hooks/useProjects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { TemplateSummary } from '../modules/dashboard/types';
2
+ export declare function useTemplateSummaries(): {
3
+ templates: TemplateSummary[];
4
+ isLoading: boolean;
5
+ error: string | null;
6
+ refresh: () => Promise<void>;
7
+ };
8
+ //# sourceMappingURL=useTemplateSummaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTemplateSummaries.d.ts","sourceRoot":"","sources":["../../src/hooks/useTemplateSummaries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AA0BlE,wBAAgB,oBAAoB;;;;;EAkCnC"}
@@ -0,0 +1,54 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import { API_BASE } from '../core/constants';
3
+ function isRecord(value) {
4
+ return typeof value === 'object' && value !== null;
5
+ }
6
+ function isTemplateSummary(value) {
7
+ return (isRecord(value) &&
8
+ typeof value.id === 'string' &&
9
+ typeof value.category === 'string' &&
10
+ typeof value.templateId === 'string' &&
11
+ typeof value.name === 'string' &&
12
+ typeof value.description === 'string' &&
13
+ typeof value.version === 'string');
14
+ }
15
+ function parseTemplateSummaries(value) {
16
+ if (!Array.isArray(value) || !value.every(isTemplateSummary)) {
17
+ throw new Error('Templates response was not a valid template summary list');
18
+ }
19
+ return value;
20
+ }
21
+ export function useTemplateSummaries() {
22
+ const [templates, setTemplates] = useState([]);
23
+ const [isLoading, setIsLoading] = useState(true);
24
+ const [error, setError] = useState(null);
25
+ const fetchTemplates = useCallback(async () => {
26
+ try {
27
+ setIsLoading(true);
28
+ const response = await fetch(`${API_BASE}/templates`);
29
+ if (!response.ok) {
30
+ throw new Error('Failed to fetch templates');
31
+ }
32
+ const data = parseTemplateSummaries(await response.json());
33
+ setTemplates(data);
34
+ setError(null);
35
+ }
36
+ catch (caught) {
37
+ console.error(caught);
38
+ setError('Could not load templates from the CLI bridge.');
39
+ }
40
+ finally {
41
+ setIsLoading(false);
42
+ }
43
+ }, []);
44
+ useEffect(() => {
45
+ void fetchTemplates();
46
+ }, [fetchTemplates]);
47
+ return {
48
+ templates,
49
+ isLoading,
50
+ error,
51
+ refresh: fetchTemplates,
52
+ };
53
+ }
54
+ //# sourceMappingURL=useTemplateSummaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTemplateSummaries.js","sourceRoot":"","sources":["../../src/hooks/useTemplateSummaries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,YAAY,CAAC,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtB,QAAQ,CAAC,+CAA+C,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,cAAc,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO;QACL,SAAS;QACT,SAAS;QACT,KAAK;QACL,OAAO,EAAE,cAAc;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function promptProjectName(defaultName: string): string | null;
2
+ export declare function confirmDelete(name: string): boolean;
3
+ export declare function openProjectUrl(url: string): boolean;
4
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/modules/dashboard/platform.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMnD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD"}
@@ -0,0 +1,24 @@
1
+ function isWeb() {
2
+ return typeof window !== 'undefined';
3
+ }
4
+ export function promptProjectName(defaultName) {
5
+ if (isWeb() && typeof window.prompt === 'function') {
6
+ const input = window.prompt('Name your new project:', defaultName);
7
+ return input ?? null;
8
+ }
9
+ return defaultName;
10
+ }
11
+ export function confirmDelete(name) {
12
+ if (isWeb() && typeof window.confirm === 'function') {
13
+ return window.confirm(`Delete ${name}?`);
14
+ }
15
+ return false;
16
+ }
17
+ export function openProjectUrl(url) {
18
+ if (isWeb() && typeof window.open === 'function') {
19
+ window.open(url, '_blank', 'noopener,noreferrer');
20
+ return true;
21
+ }
22
+ return false;
23
+ }
24
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/modules/dashboard/platform.ts"],"names":[],"mappings":"AAAA,SAAS,KAAK;IACZ,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,KAAK,EAAE,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QACnE,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,KAAK,EAAE,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,KAAK,EAAE,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProjectItem, TemplateEntry } from './types';
2
+ export declare function filterAndSortProjects(projects: ProjectItem[], queryRaw: string): ProjectItem[];
3
+ export declare function filterAndSortTemplates(entries: TemplateEntry[], queryRaw: string): TemplateEntry[];
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/modules/dashboard/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAc1D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAgB9F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CA2BjB"}
@@ -0,0 +1,49 @@
1
+ function normalize(s) {
2
+ return s.trim().toLowerCase();
3
+ }
4
+ function scoreText(target, query) {
5
+ if (!query)
6
+ return 0;
7
+ if (target === query)
8
+ return 100;
9
+ if (target.startsWith(query))
10
+ return 50;
11
+ if (target.includes(query))
12
+ return 25;
13
+ return 0;
14
+ }
15
+ export function filterAndSortProjects(projects, queryRaw) {
16
+ const query = normalize(queryRaw);
17
+ if (!query)
18
+ return projects;
19
+ return projects
20
+ .map((proj) => {
21
+ const name = normalize(proj.name);
22
+ const version = normalize(proj.version);
23
+ const score = scoreText(name, query) + (version.includes(query) ? 10 : 0);
24
+ return { proj, score };
25
+ })
26
+ .filter((x) => x.score > 0)
27
+ .sort((a, b) => b.score - a.score)
28
+ .map((x) => x.proj);
29
+ }
30
+ export function filterAndSortTemplates(entries, queryRaw) {
31
+ const query = normalize(queryRaw);
32
+ if (!query)
33
+ return entries;
34
+ return entries
35
+ .map((template) => {
36
+ const name = normalize(template.name);
37
+ const version = normalize(template.version);
38
+ const keyLower = normalize(template.id);
39
+ const category = normalize(template.category);
40
+ const templateId = normalize(template.templateId);
41
+ const description = normalize(template.description);
42
+ const score = Math.max(scoreText(name, query), scoreText(keyLower, query), scoreText(category, query), scoreText(templateId, query), scoreText(description, query)) + (version.includes(query) ? 10 : 0);
43
+ return { entry: template, score };
44
+ })
45
+ .filter((x) => x.score > 0)
46
+ .sort((a, b) => b.score - a.score)
47
+ .map((x) => x.entry);
48
+ }
49
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/modules/dashboard/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateEntry, TemplateSummary } from './types';
2
+ export declare function getTemplateEntries(templates: TemplateSummary[]): TemplateEntry[];
3
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/modules/dashboard/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAEhF"}
@@ -0,0 +1,4 @@
1
+ export function getTemplateEntries(templates) {
2
+ return templates;
3
+ }
4
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/modules/dashboard/templates.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,SAA4B;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface TemplateSummary {
2
+ id: string;
3
+ category: string;
4
+ templateId: string;
5
+ name: string;
6
+ description: string;
7
+ version: string;
8
+ }
9
+ export type TemplateEntry = TemplateSummary;
10
+ export interface ProjectItem {
11
+ id: string;
12
+ name: string;
13
+ version: string;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/dashboard/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/dashboard/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare function DashboardSectionHeader(props: {
3
+ icon: string;
4
+ title: string;
5
+ }): React.JSX.Element;
6
+ //# sourceMappingURL=DashboardSectionHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardSectionHeader.d.ts","sourceRoot":"","sources":["../../../../src/modules/dashboard/ui/DashboardSectionHeader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,qBAS5E"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Icon, Text } from '@ankhorage/zora';
3
+ import React from 'react';
4
+ import { StyleSheet, View } from 'react-native';
5
+ export function DashboardSectionHeader(props) {
6
+ return (_jsxs(View, { style: styles.row, children: [_jsx(Icon, { name: props.icon, size: 16, color: "textSecondary" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "eyebrow", children: props.title })] }));
7
+ }
8
+ const styles = StyleSheet.create({
9
+ row: {
10
+ flexDirection: 'row',
11
+ alignItems: 'center',
12
+ gap: 8,
13
+ marginBottom: 12,
14
+ marginLeft: 8,
15
+ },
16
+ });
17
+ //# sourceMappingURL=DashboardSectionHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardSectionHeader.js","sourceRoot":"","sources":["../../../../src/modules/dashboard/ui/DashboardSectionHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,sBAAsB,CAAC,KAAsC;IAC3E,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,GAAG,aACrB,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,eAAe,GAAG,EAC1D,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,YACrD,KAAK,CAAC,KAAK,GACP,IACF,CACR,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE;QACH,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,CAAC;KACd;CACF,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { ProjectItem } from '../types';
3
+ export declare function ProjectCard(props: {
4
+ project: ProjectItem;
5
+ borderColor: string;
6
+ isSyncing: boolean;
7
+ isLaunching: boolean;
8
+ isInstallingPackages: boolean;
9
+ isReloadingInfra: boolean;
10
+ onLaunch: () => void;
11
+ onSync: () => void;
12
+ onInstallPackages: () => void;
13
+ onReloadInfra: () => void;
14
+ onDelete: () => void;
15
+ }): React.JSX.Element;
16
+ //# sourceMappingURL=ProjectCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectCard.d.ts","sourceRoot":"","sources":["../../../../src/modules/dashboard/ui/ProjectCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,qBA2FA"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Icon, Text } from '@ankhorage/zora';
3
+ import React from 'react';
4
+ import { ActivityIndicator, Pressable, StyleSheet, View } from 'react-native';
5
+ export function ProjectCard(props) {
6
+ const { project, borderColor, isSyncing, isLaunching, isInstallingPackages, isReloadingInfra, onLaunch, onSync, onInstallPackages, onReloadInfra, onDelete, } = props;
7
+ return (_jsxs(View, { style: {
8
+ width: 250,
9
+ overflow: 'hidden',
10
+ borderWidth: 1,
11
+ borderColor,
12
+ borderRadius: 12,
13
+ }, children: [_jsxs(View, { style: styles.cardBody, children: [_jsx(View, { style: [
14
+ styles.iconBadge,
15
+ {
16
+ backgroundColor: '#2563eb',
17
+ },
18
+ ], children: _jsx(Icon, { name: "cube-outline", size: 32, color: "#fff" }) }), _jsxs(View, { style: styles.projectMeta, children: [_jsx(Text, { align: "center", numberOfLines: 1, variant: "bodySmall", weight: "semiBold", children: project.name }), _jsxs(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: ["v", project.version] })] })] }), _jsxs(View, { style: [styles.actionsRow, { borderTopWidth: 1, borderTopColor: borderColor }], children: [_jsx(ActionButton, { label: "Run", iconName: "play-outline", loading: isLaunching, onPress: onLaunch, accessibilityLabel: "Launch project app", borderColor: borderColor }), _jsx(ActionButton, { label: "Sync", iconName: "refresh-outline", loading: isSyncing, onPress: onSync, accessibilityLabel: "Synchronize project", borderColor: borderColor }), _jsx(ActionButton, { label: "Install Packages", iconName: "download-outline", loading: isInstallingPackages, onPress: onInstallPackages, accessibilityLabel: "Install workspace packages", borderColor: borderColor }), _jsx(ActionButton, { label: "Init/Reload Infra", iconName: "cloud-upload-outline", loading: isReloadingInfra, onPress: onReloadInfra, accessibilityLabel: "Initialize or reload project infrastructure", borderColor: borderColor }), _jsx(ActionButton, { label: "Delete Project", iconName: "trash-outline", loading: false, onPress: onDelete, accessibilityLabel: "Delete project", borderColor: borderColor, destructive: true })] })] }));
19
+ }
20
+ function ActionButton(props) {
21
+ const { label, iconName, loading, onPress, accessibilityLabel, borderColor, destructive = false, } = props;
22
+ const [showTooltip, setShowTooltip] = React.useState(false);
23
+ return (_jsxs(Pressable, { style: {
24
+ width: 34,
25
+ height: 34,
26
+ borderRadius: 8,
27
+ borderWidth: 1,
28
+ borderColor,
29
+ alignItems: 'center',
30
+ justifyContent: 'center',
31
+ position: 'relative',
32
+ }, onPress: onPress, disabled: loading, accessibilityLabel: accessibilityLabel, onHoverIn: () => setShowTooltip(true), onHoverOut: () => setShowTooltip(false), onFocus: () => setShowTooltip(true), onBlur: () => setShowTooltip(false), children: [showTooltip ? (_jsx(View, { pointerEvents: "none", style: {
33
+ position: 'absolute',
34
+ bottom: '100%',
35
+ marginBottom: 6,
36
+ left: '50%',
37
+ transform: [{ translateX: -44 }],
38
+ backgroundColor: 'rgba(17,17,17,0.92)',
39
+ paddingHorizontal: 8,
40
+ paddingVertical: 4,
41
+ borderRadius: 6,
42
+ maxWidth: 140,
43
+ }, children: _jsx(Text, { numberOfLines: 1, color: "neutral", emphasis: "inverse", variant: "caption", children: label }) })) : null, loading ? (_jsx(ActivityIndicator, { size: "small" })) : (_jsx(Icon, { name: iconName, size: 14, color: destructive ? 'error' : 'primary' }))] }));
44
+ }
45
+ const styles = StyleSheet.create({
46
+ cardBody: {
47
+ padding: 16,
48
+ alignItems: 'center',
49
+ justifyContent: 'center',
50
+ minHeight: 130,
51
+ },
52
+ projectMeta: {
53
+ alignItems: 'center',
54
+ gap: 4,
55
+ width: '100%',
56
+ },
57
+ iconBadge: {
58
+ width: 48,
59
+ height: 48,
60
+ borderRadius: 24,
61
+ alignItems: 'center',
62
+ justifyContent: 'center',
63
+ marginBottom: 16,
64
+ },
65
+ actionsRow: {
66
+ flexDirection: 'row',
67
+ flexWrap: 'wrap',
68
+ gap: 8,
69
+ paddingHorizontal: 8,
70
+ paddingTop: 6,
71
+ paddingBottom: 8,
72
+ justifyContent: 'center',
73
+ alignItems: 'center',
74
+ },
75
+ });
76
+ //# sourceMappingURL=ProjectCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectCard.js","sourceRoot":"","sources":["../../../../src/modules/dashboard/ui/ProjectCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { TemplateEntry } from '../types';
3
+ export declare function TemplateCard(props: {
4
+ template: TemplateEntry;
5
+ disabled: boolean;
6
+ mode: 'light' | 'dark';
7
+ borderColor: string;
8
+ onPress: () => void;
9
+ }): React.JSX.Element;
10
+ //# sourceMappingURL=TemplateCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateCard.d.ts","sourceRoot":"","sources":["../../../../src/modules/dashboard/ui/TemplateCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAS9C,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,qBA+CA"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Icon, Text } from '@ankhorage/zora';
3
+ import React from 'react';
4
+ import { StyleSheet, TouchableOpacity, View } from 'react-native';
5
+ function formatCategory(category) {
6
+ return category
7
+ .split('_')
8
+ .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
9
+ .join(' ');
10
+ }
11
+ export function TemplateCard(props) {
12
+ const { template } = props;
13
+ return (_jsx(TouchableOpacity, { onPress: props.onPress, disabled: props.disabled, style: { opacity: props.disabled ? 0.5 : 1 }, children: _jsxs(View, { style: {
14
+ width: 180,
15
+ overflow: 'hidden',
16
+ borderWidth: 1,
17
+ borderColor: props.borderColor,
18
+ borderRadius: 12,
19
+ }, children: [_jsx(View, { style: {
20
+ height: 100,
21
+ alignItems: 'center',
22
+ justifyContent: 'center',
23
+ backgroundColor: props.mode === 'dark' ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.05)',
24
+ }, children: _jsx(Icon, { name: "add", size: 48, color: "text" }) }), _jsxs(View, { style: styles.body, children: [_jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: formatCategory(template.category) }), _jsx(Text, { variant: "bodySmall", weight: "semiBold", children: template.name }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: template.description }), _jsxs(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: ["Template v", template.version] })] })] }) }, template.id));
25
+ }
26
+ const styles = StyleSheet.create({
27
+ body: {
28
+ padding: 16,
29
+ gap: 4,
30
+ },
31
+ });
32
+ //# sourceMappingURL=TemplateCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateCard.js","sourceRoot":"","sources":["../../../../src/modules/dashboard/ui/TemplateCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIlE,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,QAAQ;SACZ,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAM5B;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE3B,OAAO,CACL,KAAC,gBAAgB,IAEf,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAE5C,MAAC,IAAI,IACH,KAAK,EAAE;gBACL,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,EAAE;aACjB,aAED,KAAC,IAAI,IACH,KAAK,EAAE;wBACL,MAAM,EAAE,GAAG;wBACX,UAAU,EAAE,QAAQ;wBACpB,cAAc,EAAE,QAAQ;wBACxB,eAAe,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB;qBACvF,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,MAAM,GAAG,GACrC,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,YACrD,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAC7B,EACP,KAAC,IAAI,IAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,UAAU,YACxC,QAAQ,CAAC,IAAI,GACT,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,YACrD,QAAQ,CAAC,WAAW,GAChB,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,2BAC3C,QAAQ,CAAC,OAAO,IACtB,IACF,IACF,IAvCF,QAAQ,CAAC,EAAE,CAwCC,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;KACP;CACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface AnkhStudioProps {
3
+ children: React.ReactNode;
4
+ runtimeRegistry?: unknown;
5
+ runtimeConfig?: unknown;
6
+ }
7
+ export declare const AnkhStudio: ({ children }: AnkhStudioProps) => React.FunctionComponentElement<React.FragmentProps> | null;
8
+ //# sourceMappingURL=AnkhStudio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnkhStudio.d.ts","sourceRoot":"","sources":["../../src/ui/AnkhStudio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,UAAU,GAAI,cAAc,eAAe,+DAYvD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { useStudio } from '../core/StudioContext';
3
+ export const AnkhStudio = ({ children }) => {
4
+ const studio = useStudio();
5
+ if (studio.error) {
6
+ return React.createElement(React.Fragment, null, studio.error);
7
+ }
8
+ if (studio.isLoading || !studio.manifest) {
9
+ return null;
10
+ }
11
+ return React.createElement(React.Fragment, null, children);
12
+ };
13
+ //# sourceMappingURL=AnkhStudio.js.map