@cwygoda/service-catalog-ui 1.0.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.

Potentially problematic release.


This version of @cwygoda/service-catalog-ui might be problematic. Click here for more details.

Files changed (55) hide show
  1. package/dist/__mocks__/app-environment.d.ts +4 -0
  2. package/dist/__mocks__/app-environment.js +4 -0
  3. package/dist/__mocks__/app-state.d.ts +12 -0
  4. package/dist/__mocks__/app-state.js +10 -0
  5. package/dist/adapters/index.d.ts +1 -0
  6. package/dist/adapters/index.js +1 -0
  7. package/dist/adapters/static-json.adapter.d.ts +2 -0
  8. package/dist/adapters/static-json.adapter.js +34 -0
  9. package/dist/components/BpmnDiagram.svelte +360 -0
  10. package/dist/components/BpmnDiagram.svelte.d.ts +7 -0
  11. package/dist/components/Breadcrumbs.svelte +32 -0
  12. package/dist/components/Breadcrumbs.svelte.d.ts +11 -0
  13. package/dist/components/DomainCard.svelte +29 -0
  14. package/dist/components/DomainCard.svelte.d.ts +9 -0
  15. package/dist/components/DomainCard.test.d.ts +1 -0
  16. package/dist/components/DomainCard.test.js +45 -0
  17. package/dist/components/Header.svelte +110 -0
  18. package/dist/components/Header.svelte.d.ts +3 -0
  19. package/dist/components/NavModeToggle.svelte +28 -0
  20. package/dist/components/NavModeToggle.svelte.d.ts +18 -0
  21. package/dist/components/NavTree.svelte +182 -0
  22. package/dist/components/NavTree.svelte.d.ts +9 -0
  23. package/dist/components/ServiceCard.svelte +26 -0
  24. package/dist/components/ServiceCard.svelte.d.ts +7 -0
  25. package/dist/components/ServiceCard.test.d.ts +1 -0
  26. package/dist/components/ServiceCard.test.js +36 -0
  27. package/dist/components/ServiceGraph.svelte +348 -0
  28. package/dist/components/ServiceGraph.svelte.d.ts +10 -0
  29. package/dist/components/ThemeToggle.svelte +29 -0
  30. package/dist/components/ThemeToggle.svelte.d.ts +18 -0
  31. package/dist/components/ThemeToggle.test.d.ts +1 -0
  32. package/dist/components/ThemeToggle.test.js +52 -0
  33. package/dist/components/UseCaseCard.svelte +57 -0
  34. package/dist/components/UseCaseCard.svelte.d.ts +7 -0
  35. package/dist/components/UseCaseCard.test.d.ts +1 -0
  36. package/dist/components/UseCaseCard.test.js +87 -0
  37. package/dist/components/index.d.ts +10 -0
  38. package/dist/components/index.js +10 -0
  39. package/dist/index.d.ts +5 -0
  40. package/dist/index.js +5 -0
  41. package/dist/ports/catalog.port.d.ts +5 -0
  42. package/dist/ports/catalog.port.js +1 -0
  43. package/dist/ports/index.d.ts +1 -0
  44. package/dist/ports/index.js +1 -0
  45. package/dist/stores/index.d.ts +3 -0
  46. package/dist/stores/index.js +2 -0
  47. package/dist/stores/nav-mode.svelte.d.ts +7 -0
  48. package/dist/stores/nav-mode.svelte.js +32 -0
  49. package/dist/stores/theme.svelte.d.ts +8 -0
  50. package/dist/stores/theme.svelte.js +61 -0
  51. package/dist/utils/fetch-catalog.d.ts +6 -0
  52. package/dist/utils/fetch-catalog.js +26 -0
  53. package/dist/utils/index.d.ts +1 -0
  54. package/dist/utils/index.js +1 -0
  55. package/package.json +54 -0
@@ -0,0 +1,3 @@
1
+ export { theme } from './theme.svelte.js';
2
+ export type { Theme } from './theme.svelte.js';
3
+ export { navModeStore } from './nav-mode.svelte.js';
@@ -0,0 +1,2 @@
1
+ export { theme } from './theme.svelte.js';
2
+ export { navModeStore } from './nav-mode.svelte.js';
@@ -0,0 +1,7 @@
1
+ type NavMode = 'flat' | 'tree';
2
+ export declare const navModeStore: {
3
+ readonly mode: NavMode;
4
+ toggle(): void;
5
+ setMode(newMode: NavMode): void;
6
+ };
7
+ export {};
@@ -0,0 +1,32 @@
1
+ import { browser } from '$app/environment';
2
+ const STORAGE_KEY = 'nav-mode';
3
+ function getInitialMode() {
4
+ if (browser) {
5
+ const stored = localStorage.getItem(STORAGE_KEY);
6
+ if (stored === 'tree' || stored === 'flat') {
7
+ return stored;
8
+ }
9
+ }
10
+ return 'flat';
11
+ }
12
+ function createNavModeStore() {
13
+ let mode = $state(getInitialMode());
14
+ return {
15
+ get mode() {
16
+ return mode;
17
+ },
18
+ toggle() {
19
+ mode = mode === 'flat' ? 'tree' : 'flat';
20
+ if (browser) {
21
+ localStorage.setItem(STORAGE_KEY, mode);
22
+ }
23
+ },
24
+ setMode(newMode) {
25
+ mode = newMode;
26
+ if (browser) {
27
+ localStorage.setItem(STORAGE_KEY, mode);
28
+ }
29
+ },
30
+ };
31
+ }
32
+ export const navModeStore = createNavModeStore();
@@ -0,0 +1,8 @@
1
+ export type Theme = 'light' | 'dark' | 'system';
2
+ export declare const theme: {
3
+ readonly current: Theme;
4
+ readonly resolved: "light" | "dark";
5
+ init(): void;
6
+ set(newTheme: Theme): void;
7
+ toggle(): void;
8
+ };
@@ -0,0 +1,61 @@
1
+ const STORAGE_KEY = 'theme';
2
+ function getStoredTheme() {
3
+ if (typeof localStorage === 'undefined')
4
+ return 'system';
5
+ const stored = localStorage.getItem(STORAGE_KEY);
6
+ if (stored === 'light' || stored === 'dark' || stored === 'system') {
7
+ return stored;
8
+ }
9
+ return 'system';
10
+ }
11
+ function getSystemTheme() {
12
+ if (typeof window === 'undefined')
13
+ return 'light';
14
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
15
+ }
16
+ function applyTheme(theme) {
17
+ if (typeof document === 'undefined')
18
+ return;
19
+ const resolved = theme === 'system' ? getSystemTheme() : theme;
20
+ const root = document.documentElement;
21
+ if (resolved === 'dark') {
22
+ root.classList.add('dark');
23
+ }
24
+ else {
25
+ root.classList.remove('dark');
26
+ }
27
+ }
28
+ // Simple reactive state using $state rune at module level
29
+ let currentTheme = $state('system');
30
+ export const theme = {
31
+ get current() {
32
+ return currentTheme;
33
+ },
34
+ get resolved() {
35
+ return currentTheme === 'system' ? getSystemTheme() : currentTheme;
36
+ },
37
+ init() {
38
+ if (typeof window === 'undefined')
39
+ return;
40
+ // Load stored theme
41
+ currentTheme = getStoredTheme();
42
+ // Listen for system theme changes
43
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
44
+ mediaQuery.addEventListener('change', () => {
45
+ if (currentTheme === 'system') {
46
+ applyTheme('system');
47
+ }
48
+ });
49
+ },
50
+ set(newTheme) {
51
+ currentTheme = newTheme;
52
+ if (typeof localStorage !== 'undefined') {
53
+ localStorage.setItem(STORAGE_KEY, newTheme);
54
+ }
55
+ applyTheme(newTheme);
56
+ },
57
+ toggle() {
58
+ const next = this.resolved === 'dark' ? 'light' : 'dark';
59
+ this.set(next);
60
+ },
61
+ };
@@ -0,0 +1,6 @@
1
+ import type { Catalog } from '@cwygoda/service-catalog-core/domain';
2
+ /**
3
+ * Fetches and validates catalog.json with proper error handling.
4
+ * Use in SvelteKit load functions.
5
+ */
6
+ export declare function fetchCatalog(fetch: typeof globalThis.fetch, path?: string): Promise<Catalog>;
@@ -0,0 +1,26 @@
1
+ import { error } from '@sveltejs/kit';
2
+ import { Value } from '@sinclair/typebox/value';
3
+ import { CatalogSchema } from '@cwygoda/service-catalog-core/schemas';
4
+ /**
5
+ * Fetches and validates catalog.json with proper error handling.
6
+ * Use in SvelteKit load functions.
7
+ */
8
+ export async function fetchCatalog(fetch, path = '/catalog.json') {
9
+ const response = await fetch(path);
10
+ if (!response.ok) {
11
+ error(response.status, `Failed to load catalog: ${response.statusText}`);
12
+ }
13
+ let data;
14
+ try {
15
+ data = await response.json();
16
+ }
17
+ catch {
18
+ error(500, 'Invalid JSON in catalog');
19
+ }
20
+ if (!Value.Check(CatalogSchema, data)) {
21
+ const errors = [...Value.Errors(CatalogSchema, data)];
22
+ const message = errors.map((e) => `${e.path}: ${e.message}`).join('; ');
23
+ error(500, `Invalid catalog data: ${message}`);
24
+ }
25
+ return data;
26
+ }
@@ -0,0 +1 @@
1
+ export { fetchCatalog } from './fetch-catalog.js';
@@ -0,0 +1 @@
1
+ export { fetchCatalog } from './fetch-catalog.js';
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@cwygoda/service-catalog-ui",
3
+ "version": "1.0.1",
4
+ "type": "module",
5
+ "svelte": "./dist/index.js",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "svelte": "./dist/index.js"
10
+ },
11
+ "./components": {
12
+ "types": "./dist/components/index.d.ts",
13
+ "svelte": "./dist/components/index.js"
14
+ },
15
+ "./stores": {
16
+ "types": "./dist/stores/index.d.ts",
17
+ "svelte": "./dist/stores/index.js"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "dependencies": {
24
+ "@sinclair/typebox": "^0.34.0",
25
+ "@cwygoda/service-catalog-core": "1.0.1"
26
+ },
27
+ "peerDependencies": {
28
+ "@sveltejs/kit": "^2.0.0",
29
+ "bpmn-js": "^18.0.0",
30
+ "d3": "^7.0.0",
31
+ "svelte": "^5.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@sveltejs/kit": "^2.50.2",
35
+ "@sveltejs/package": "^2.0.0",
36
+ "@sveltejs/vite-plugin-svelte": "^6.2.4",
37
+ "@testing-library/jest-dom": "^6.9.1",
38
+ "@testing-library/svelte": "^5.2.0",
39
+ "@testing-library/user-event": "^14.6.1",
40
+ "@types/d3": "^7.4.3",
41
+ "jsdom": "^26.0.0",
42
+ "svelte": "^5.49.2",
43
+ "svelte-check": "^4.3.6",
44
+ "typescript": "^5.7.0",
45
+ "vite": "^7.3.1",
46
+ "vitest": "^3.0.0"
47
+ },
48
+ "scripts": {
49
+ "build": "svelte-kit sync && svelte-package",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "typecheck": "svelte-kit sync && svelte-check"
53
+ }
54
+ }