@shumoku/core 0.1.0

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 (220) hide show
  1. package/dist/icons/build-icons.d.ts +6 -0
  2. package/dist/icons/build-icons.d.ts.map +1 -0
  3. package/dist/icons/build-icons.js +163 -0
  4. package/dist/icons/build-icons.js.map +1 -0
  5. package/dist/icons/generated-icons.d.ts +32 -0
  6. package/dist/icons/generated-icons.d.ts.map +1 -0
  7. package/dist/icons/generated-icons.js +88 -0
  8. package/dist/icons/generated-icons.js.map +1 -0
  9. package/dist/icons/index.d.ts +2 -0
  10. package/dist/icons/index.d.ts.map +1 -0
  11. package/dist/icons/index.js +2 -0
  12. package/dist/icons/index.js.map +1 -0
  13. package/dist/index.d.ts +10 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +16 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/layout/hierarchical.d.ts +73 -0
  18. package/dist/layout/hierarchical.d.ts.map +1 -0
  19. package/dist/layout/hierarchical.js +1320 -0
  20. package/dist/layout/hierarchical.js.map +1 -0
  21. package/dist/layout/index.d.ts +6 -0
  22. package/dist/layout/index.d.ts.map +1 -0
  23. package/dist/layout/index.js +5 -0
  24. package/dist/layout/index.js.map +1 -0
  25. package/dist/models/index.d.ts +5 -0
  26. package/dist/models/index.d.ts.map +1 -0
  27. package/dist/models/index.js +5 -0
  28. package/dist/models/index.js.map +1 -0
  29. package/dist/models/types.d.ts +381 -0
  30. package/dist/models/types.d.ts.map +1 -0
  31. package/dist/models/types.js +61 -0
  32. package/dist/models/types.js.map +1 -0
  33. package/dist/renderer/components/index.d.ts +8 -0
  34. package/dist/renderer/components/index.d.ts.map +1 -0
  35. package/dist/renderer/components/index.js +8 -0
  36. package/dist/renderer/components/index.js.map +1 -0
  37. package/dist/renderer/components/link-renderer.d.ts +11 -0
  38. package/dist/renderer/components/link-renderer.d.ts.map +1 -0
  39. package/dist/renderer/components/link-renderer.js +340 -0
  40. package/dist/renderer/components/link-renderer.js.map +1 -0
  41. package/dist/renderer/components/node-renderer.d.ts +14 -0
  42. package/dist/renderer/components/node-renderer.d.ts.map +1 -0
  43. package/dist/renderer/components/node-renderer.js +242 -0
  44. package/dist/renderer/components/node-renderer.js.map +1 -0
  45. package/dist/renderer/components/port-renderer.d.ts +8 -0
  46. package/dist/renderer/components/port-renderer.d.ts.map +1 -0
  47. package/dist/renderer/components/port-renderer.js +85 -0
  48. package/dist/renderer/components/port-renderer.js.map +1 -0
  49. package/dist/renderer/components/subgraph-renderer.d.ts +13 -0
  50. package/dist/renderer/components/subgraph-renderer.d.ts.map +1 -0
  51. package/dist/renderer/components/subgraph-renderer.js +85 -0
  52. package/dist/renderer/components/subgraph-renderer.js.map +1 -0
  53. package/dist/renderer/icon-registry/index.d.ts +6 -0
  54. package/dist/renderer/icon-registry/index.d.ts.map +1 -0
  55. package/dist/renderer/icon-registry/index.js +5 -0
  56. package/dist/renderer/icon-registry/index.js.map +1 -0
  57. package/dist/renderer/icon-registry/registry.d.ts +25 -0
  58. package/dist/renderer/icon-registry/registry.d.ts.map +1 -0
  59. package/dist/renderer/icon-registry/registry.js +85 -0
  60. package/dist/renderer/icon-registry/registry.js.map +1 -0
  61. package/dist/renderer/icon-registry/types.d.ts +44 -0
  62. package/dist/renderer/icon-registry/types.d.ts.map +1 -0
  63. package/dist/renderer/icon-registry/types.js +5 -0
  64. package/dist/renderer/icon-registry/types.js.map +1 -0
  65. package/dist/renderer/index.d.ts +6 -0
  66. package/dist/renderer/index.d.ts.map +1 -0
  67. package/dist/renderer/index.js +5 -0
  68. package/dist/renderer/index.js.map +1 -0
  69. package/dist/renderer/render-model/builder.d.ts +43 -0
  70. package/dist/renderer/render-model/builder.d.ts.map +1 -0
  71. package/dist/renderer/render-model/builder.js +646 -0
  72. package/dist/renderer/render-model/builder.js.map +1 -0
  73. package/dist/renderer/render-model/index.d.ts +6 -0
  74. package/dist/renderer/render-model/index.d.ts.map +1 -0
  75. package/dist/renderer/render-model/index.js +5 -0
  76. package/dist/renderer/render-model/index.js.map +1 -0
  77. package/dist/renderer/render-model/types.d.ts +216 -0
  78. package/dist/renderer/render-model/types.d.ts.map +1 -0
  79. package/dist/renderer/render-model/types.js +6 -0
  80. package/dist/renderer/render-model/types.js.map +1 -0
  81. package/dist/renderer/renderer-types.d.ts +55 -0
  82. package/dist/renderer/renderer-types.d.ts.map +1 -0
  83. package/dist/renderer/renderer-types.js +5 -0
  84. package/dist/renderer/renderer-types.js.map +1 -0
  85. package/dist/renderer/svg-builder.d.ts +152 -0
  86. package/dist/renderer/svg-builder.d.ts.map +1 -0
  87. package/dist/renderer/svg-builder.js +176 -0
  88. package/dist/renderer/svg-builder.js.map +1 -0
  89. package/dist/renderer/svg-dom/builders/defs.d.ts +10 -0
  90. package/dist/renderer/svg-dom/builders/defs.d.ts.map +1 -0
  91. package/dist/renderer/svg-dom/builders/defs.js +82 -0
  92. package/dist/renderer/svg-dom/builders/defs.js.map +1 -0
  93. package/dist/renderer/svg-dom/builders/index.d.ts +9 -0
  94. package/dist/renderer/svg-dom/builders/index.d.ts.map +1 -0
  95. package/dist/renderer/svg-dom/builders/index.js +9 -0
  96. package/dist/renderer/svg-dom/builders/index.js.map +1 -0
  97. package/dist/renderer/svg-dom/builders/link.d.ts +18 -0
  98. package/dist/renderer/svg-dom/builders/link.d.ts.map +1 -0
  99. package/dist/renderer/svg-dom/builders/link.js +188 -0
  100. package/dist/renderer/svg-dom/builders/link.js.map +1 -0
  101. package/dist/renderer/svg-dom/builders/node.d.ts +15 -0
  102. package/dist/renderer/svg-dom/builders/node.d.ts.map +1 -0
  103. package/dist/renderer/svg-dom/builders/node.js +262 -0
  104. package/dist/renderer/svg-dom/builders/node.js.map +1 -0
  105. package/dist/renderer/svg-dom/builders/subgraph.d.ts +14 -0
  106. package/dist/renderer/svg-dom/builders/subgraph.d.ts.map +1 -0
  107. package/dist/renderer/svg-dom/builders/subgraph.js +63 -0
  108. package/dist/renderer/svg-dom/builders/subgraph.js.map +1 -0
  109. package/dist/renderer/svg-dom/builders/utils.d.ts +40 -0
  110. package/dist/renderer/svg-dom/builders/utils.d.ts.map +1 -0
  111. package/dist/renderer/svg-dom/builders/utils.js +79 -0
  112. package/dist/renderer/svg-dom/builders/utils.js.map +1 -0
  113. package/dist/renderer/svg-dom/index.d.ts +9 -0
  114. package/dist/renderer/svg-dom/index.d.ts.map +1 -0
  115. package/dist/renderer/svg-dom/index.js +7 -0
  116. package/dist/renderer/svg-dom/index.js.map +1 -0
  117. package/dist/renderer/svg-dom/interaction.d.ts +69 -0
  118. package/dist/renderer/svg-dom/interaction.d.ts.map +1 -0
  119. package/dist/renderer/svg-dom/interaction.js +296 -0
  120. package/dist/renderer/svg-dom/interaction.js.map +1 -0
  121. package/dist/renderer/svg-dom/renderer.d.ts +47 -0
  122. package/dist/renderer/svg-dom/renderer.d.ts.map +1 -0
  123. package/dist/renderer/svg-dom/renderer.js +188 -0
  124. package/dist/renderer/svg-dom/renderer.js.map +1 -0
  125. package/dist/renderer/svg-string/builders/defs.d.ts +10 -0
  126. package/dist/renderer/svg-string/builders/defs.d.ts.map +1 -0
  127. package/dist/renderer/svg-string/builders/defs.js +43 -0
  128. package/dist/renderer/svg-string/builders/defs.js.map +1 -0
  129. package/dist/renderer/svg-string/builders/link.d.ts +10 -0
  130. package/dist/renderer/svg-string/builders/link.d.ts.map +1 -0
  131. package/dist/renderer/svg-string/builders/link.js +149 -0
  132. package/dist/renderer/svg-string/builders/link.js.map +1 -0
  133. package/dist/renderer/svg-string/builders/node.d.ts +10 -0
  134. package/dist/renderer/svg-string/builders/node.d.ts.map +1 -0
  135. package/dist/renderer/svg-string/builders/node.js +134 -0
  136. package/dist/renderer/svg-string/builders/node.js.map +1 -0
  137. package/dist/renderer/svg-string/builders/subgraph.d.ts +10 -0
  138. package/dist/renderer/svg-string/builders/subgraph.d.ts.map +1 -0
  139. package/dist/renderer/svg-string/builders/subgraph.js +59 -0
  140. package/dist/renderer/svg-string/builders/subgraph.js.map +1 -0
  141. package/dist/renderer/svg-string/index.d.ts +5 -0
  142. package/dist/renderer/svg-string/index.d.ts.map +1 -0
  143. package/dist/renderer/svg-string/index.js +5 -0
  144. package/dist/renderer/svg-string/index.js.map +1 -0
  145. package/dist/renderer/svg-string/renderer.d.ts +17 -0
  146. package/dist/renderer/svg-string/renderer.d.ts.map +1 -0
  147. package/dist/renderer/svg-string/renderer.js +53 -0
  148. package/dist/renderer/svg-string/renderer.js.map +1 -0
  149. package/dist/renderer/svg.d.ts +105 -0
  150. package/dist/renderer/svg.d.ts.map +1 -0
  151. package/dist/renderer/svg.js +804 -0
  152. package/dist/renderer/svg.js.map +1 -0
  153. package/dist/renderer/text-measurer/browser-measurer.d.ts +25 -0
  154. package/dist/renderer/text-measurer/browser-measurer.d.ts.map +1 -0
  155. package/dist/renderer/text-measurer/browser-measurer.js +85 -0
  156. package/dist/renderer/text-measurer/browser-measurer.js.map +1 -0
  157. package/dist/renderer/text-measurer/fallback-measurer.d.ts +22 -0
  158. package/dist/renderer/text-measurer/fallback-measurer.d.ts.map +1 -0
  159. package/dist/renderer/text-measurer/fallback-measurer.js +113 -0
  160. package/dist/renderer/text-measurer/fallback-measurer.js.map +1 -0
  161. package/dist/renderer/text-measurer/index.d.ts +13 -0
  162. package/dist/renderer/text-measurer/index.d.ts.map +1 -0
  163. package/dist/renderer/text-measurer/index.js +35 -0
  164. package/dist/renderer/text-measurer/index.js.map +1 -0
  165. package/dist/renderer/text-measurer/types.d.ts +30 -0
  166. package/dist/renderer/text-measurer/types.d.ts.map +1 -0
  167. package/dist/renderer/text-measurer/types.js +5 -0
  168. package/dist/renderer/text-measurer/types.js.map +1 -0
  169. package/dist/renderer/theme.d.ts +29 -0
  170. package/dist/renderer/theme.d.ts.map +1 -0
  171. package/dist/renderer/theme.js +80 -0
  172. package/dist/renderer/theme.js.map +1 -0
  173. package/dist/themes/dark.d.ts +6 -0
  174. package/dist/themes/dark.d.ts.map +1 -0
  175. package/dist/themes/dark.js +96 -0
  176. package/dist/themes/dark.js.map +1 -0
  177. package/dist/themes/index.d.ts +13 -0
  178. package/dist/themes/index.d.ts.map +1 -0
  179. package/dist/themes/index.js +15 -0
  180. package/dist/themes/index.js.map +1 -0
  181. package/dist/themes/modern.d.ts +6 -0
  182. package/dist/themes/modern.d.ts.map +1 -0
  183. package/dist/themes/modern.js +164 -0
  184. package/dist/themes/modern.js.map +1 -0
  185. package/dist/themes/types.d.ts +234 -0
  186. package/dist/themes/types.d.ts.map +1 -0
  187. package/dist/themes/types.js +5 -0
  188. package/dist/themes/types.js.map +1 -0
  189. package/dist/themes/utils.d.ts +21 -0
  190. package/dist/themes/utils.d.ts.map +1 -0
  191. package/dist/themes/utils.js +124 -0
  192. package/dist/themes/utils.js.map +1 -0
  193. package/package.json +92 -0
  194. package/src/icons/build-icons.ts +189 -0
  195. package/src/icons/default/access-point.svg +3 -0
  196. package/src/icons/default/cloud.svg +3 -0
  197. package/src/icons/default/database.svg +3 -0
  198. package/src/icons/default/firewall.svg +4 -0
  199. package/src/icons/default/generic.svg +3 -0
  200. package/src/icons/default/internet.svg +3 -0
  201. package/src/icons/default/l2-switch.svg +3 -0
  202. package/src/icons/default/l3-switch.svg +3 -0
  203. package/src/icons/default/load-balancer.svg +3 -0
  204. package/src/icons/default/router.svg +3 -0
  205. package/src/icons/default/server.svg +3 -0
  206. package/src/icons/default/vpn.svg +3 -0
  207. package/src/icons/generated-icons.ts +111 -0
  208. package/src/icons/index.ts +1 -0
  209. package/src/index.ts +21 -0
  210. package/src/layout/hierarchical.ts +1543 -0
  211. package/src/layout/index.ts +6 -0
  212. package/src/models/index.ts +5 -0
  213. package/src/models/types.ts +528 -0
  214. package/src/renderer/index.ts +6 -0
  215. package/src/renderer/svg.ts +997 -0
  216. package/src/themes/dark.ts +110 -0
  217. package/src/themes/index.ts +24 -0
  218. package/src/themes/modern.ts +186 -0
  219. package/src/themes/types.ts +262 -0
  220. package/src/themes/utils.ts +143 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Build script to convert default SVG icons to TypeScript
3
+ * Run with: bun src/icons/build-icons.ts
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=build-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-icons.d.ts","sourceRoot":"","sources":["../../src/icons/build-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Build script to convert default SVG icons to TypeScript
3
+ * Run with: bun src/icons/build-icons.ts
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { fileURLToPath } from 'url';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+ const ICONS_DIR = path.join(__dirname);
11
+ const OUTPUT_FILE = path.join(__dirname, 'generated-icons.ts');
12
+ function extractSvgContent(svgContent) {
13
+ const contentMatch = svgContent.match(/<svg[^>]*>([\s\S]*?)<\/svg>/i);
14
+ if (!contentMatch)
15
+ return '';
16
+ return contentMatch[1].trim().replace(/\s+/g, ' ');
17
+ }
18
+ function scanDefaultIconFolder(folderPath) {
19
+ const icons = {};
20
+ if (!fs.existsSync(folderPath)) {
21
+ return icons;
22
+ }
23
+ const files = fs.readdirSync(folderPath);
24
+ for (const file of files) {
25
+ if (!file.endsWith('.svg'))
26
+ continue;
27
+ const filePath = path.join(folderPath, file);
28
+ const content = fs.readFileSync(filePath, 'utf-8');
29
+ const iconName = file.replace('.svg', '');
30
+ const svgContent = extractSvgContent(content);
31
+ if (svgContent) {
32
+ icons[iconName] = svgContent;
33
+ }
34
+ }
35
+ return icons;
36
+ }
37
+ function generateTypeScript(icons) {
38
+ const lines = [
39
+ '/**',
40
+ ' * Auto-generated default icon definitions',
41
+ ' * DO NOT EDIT - Run build-icons.ts to regenerate',
42
+ ' */',
43
+ '',
44
+ "import { DeviceType } from '../models/index.js'",
45
+ '',
46
+ "export type IconThemeVariant = 'light' | 'dark' | 'default'",
47
+ '',
48
+ 'export interface IconEntry {',
49
+ ' default: string',
50
+ ' light?: string',
51
+ ' dark?: string',
52
+ ' viewBox?: string',
53
+ '}',
54
+ '',
55
+ '// Default network device icons',
56
+ 'const defaultIcons: Record<string, string> = {',
57
+ ];
58
+ for (const [name, content] of Object.entries(icons)) {
59
+ lines.push(` '${name}': \`${content}\`,`);
60
+ }
61
+ lines.push('}');
62
+ lines.push('');
63
+ // DeviceType mapping
64
+ lines.push('// Map DeviceType to icon key');
65
+ lines.push('const deviceTypeToIcon: Record<DeviceType, string> = {');
66
+ lines.push(" [DeviceType.Router]: 'router',");
67
+ lines.push(" [DeviceType.L3Switch]: 'l3-switch',");
68
+ lines.push(" [DeviceType.L2Switch]: 'l2-switch',");
69
+ lines.push(" [DeviceType.Firewall]: 'firewall',");
70
+ lines.push(" [DeviceType.LoadBalancer]: 'load-balancer',");
71
+ lines.push(" [DeviceType.Server]: 'server',");
72
+ lines.push(" [DeviceType.AccessPoint]: 'access-point',");
73
+ lines.push(" [DeviceType.Cloud]: 'cloud',");
74
+ lines.push(" [DeviceType.Internet]: 'internet',");
75
+ lines.push(" [DeviceType.VPN]: 'vpn',");
76
+ lines.push(" [DeviceType.Database]: 'database',");
77
+ lines.push(" [DeviceType.Generic]: 'generic',");
78
+ lines.push('}');
79
+ lines.push('');
80
+ // Getter function
81
+ lines.push('/**');
82
+ lines.push(' * Get SVG icon content for a device type');
83
+ lines.push(' */');
84
+ lines.push('export function getDeviceIcon(type?: DeviceType): string | undefined {');
85
+ lines.push(' if (!type) return undefined');
86
+ lines.push(' const iconKey = deviceTypeToIcon[type]');
87
+ lines.push(' if (!iconKey) return undefined');
88
+ lines.push(' return defaultIcons[iconKey]');
89
+ lines.push('}');
90
+ lines.push('');
91
+ // Vendor icon stubs (for compatibility, actual implementation in @shumoku/icons)
92
+ lines.push('// Vendor icon registry (populated by @shumoku/icons if installed)');
93
+ lines.push('let vendorIconRegistry: Record<string, Record<string, IconEntry>> = {}');
94
+ lines.push('');
95
+ lines.push('/**');
96
+ lines.push(' * Register vendor icons (called by @shumoku/icons)');
97
+ lines.push(' */');
98
+ lines.push('export function registerVendorIcons(vendor: string, icons: Record<string, IconEntry>): void {');
99
+ lines.push(' vendorIconRegistry[vendor] = icons');
100
+ lines.push('}');
101
+ lines.push('');
102
+ lines.push('/**');
103
+ lines.push(' * Get vendor icon entry');
104
+ lines.push(' */');
105
+ lines.push('export function getVendorIconEntry(');
106
+ lines.push(' vendor: string,');
107
+ lines.push(' service: string,');
108
+ lines.push(' resource?: string');
109
+ lines.push('): IconEntry | undefined {');
110
+ lines.push(" if (vendor === 'default' || !vendor) {");
111
+ lines.push(' const content = defaultIcons[service] || (resource ? defaultIcons[resource] : undefined)');
112
+ lines.push(' return content ? { default: content } : undefined');
113
+ lines.push(' }');
114
+ lines.push('');
115
+ lines.push(' const vendorIcons = vendorIconRegistry[vendor]');
116
+ lines.push(' if (!vendorIcons) return undefined');
117
+ lines.push('');
118
+ lines.push(' const key = resource ? `${service}/${resource}` : service');
119
+ lines.push(' const entry = vendorIcons[key]');
120
+ lines.push(' if (!entry) {');
121
+ lines.push(" const serviceKey = Object.keys(vendorIcons).find(k => k.startsWith(service + '/'))");
122
+ lines.push(' if (serviceKey) return vendorIcons[serviceKey]');
123
+ lines.push(' return undefined');
124
+ lines.push(' }');
125
+ lines.push(' return entry');
126
+ lines.push('}');
127
+ lines.push('');
128
+ lines.push('/**');
129
+ lines.push(' * Get vendor icon with theme support');
130
+ lines.push(' */');
131
+ lines.push('export function getVendorIcon(');
132
+ lines.push(' vendor: string,');
133
+ lines.push(' service: string,');
134
+ lines.push(' resource?: string,');
135
+ lines.push(" theme: IconThemeVariant = 'default'");
136
+ lines.push('): string | undefined {');
137
+ lines.push(' const entry = getVendorIconEntry(vendor, service, resource)');
138
+ lines.push(' if (!entry) return undefined');
139
+ lines.push(' return entry[theme] || entry.default');
140
+ lines.push('}');
141
+ lines.push('');
142
+ // Export
143
+ lines.push('export const iconSets = {');
144
+ lines.push(' default: defaultIcons,');
145
+ lines.push('}');
146
+ lines.push('');
147
+ return lines.join('\n');
148
+ }
149
+ function main() {
150
+ console.log('Building default icons...');
151
+ const defaultFolder = path.join(ICONS_DIR, 'default');
152
+ const icons = scanDefaultIconFolder(defaultFolder);
153
+ if (Object.keys(icons).length === 0) {
154
+ console.log('No default icons found!');
155
+ return;
156
+ }
157
+ console.log(` Found ${Object.keys(icons).length} default icons`);
158
+ const output = generateTypeScript(icons);
159
+ fs.writeFileSync(OUTPUT_FILE, output, 'utf-8');
160
+ console.log(`Generated ${OUTPUT_FILE}`);
161
+ }
162
+ main();
163
+ //# sourceMappingURL=build-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-icons.js","sourceRoot":"","sources":["../../src/icons/build-icons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Auto-generated default icon definitions
3
+ * DO NOT EDIT - Run build-icons.ts to regenerate
4
+ */
5
+ import { DeviceType } from '../models/index.js';
6
+ export type IconThemeVariant = 'light' | 'dark' | 'default';
7
+ export interface IconEntry {
8
+ default: string;
9
+ light?: string;
10
+ dark?: string;
11
+ viewBox?: string;
12
+ }
13
+ /**
14
+ * Get SVG icon content for a device type
15
+ */
16
+ export declare function getDeviceIcon(type?: DeviceType): string | undefined;
17
+ /**
18
+ * Register vendor icons (called by @shumoku/icons)
19
+ */
20
+ export declare function registerVendorIcons(vendor: string, icons: Record<string, IconEntry>): void;
21
+ /**
22
+ * Get vendor icon entry
23
+ */
24
+ export declare function getVendorIconEntry(vendor: string, service: string, resource?: string): IconEntry | undefined;
25
+ /**
26
+ * Get vendor icon with theme support
27
+ */
28
+ export declare function getVendorIcon(vendor: string, service: string, resource?: string, theme?: IconThemeVariant): string | undefined;
29
+ export declare const iconSets: {
30
+ default: Record<string, string>;
31
+ };
32
+ //# sourceMappingURL=generated-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-icons.d.ts","sourceRoot":"","sources":["../../src/icons/generated-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;AAE3D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAkCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAKnE;AAKD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAE1F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,SAAS,GAAG,SAAS,CAiBvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,GAAE,gBAA4B,GAClC,MAAM,GAAG,SAAS,CAIpB;AAED,eAAO,MAAM,QAAQ;;CAEpB,CAAA"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Auto-generated default icon definitions
3
+ * DO NOT EDIT - Run build-icons.ts to regenerate
4
+ */
5
+ import { DeviceType } from '../models/index.js';
6
+ // Default network device icons
7
+ const defaultIcons = {
8
+ 'access-point': `<path d="M12 10a2 2 0 100 4 2 2 0 000-4zm-4.5-2.5a6.5 6.5 0 019 0l-1.4 1.4a4.5 4.5 0 00-6.2 0l-1.4-1.4zm-2.8-2.8a10 10 0 0114.6 0l-1.4 1.4a8 8 0 00-11.8 0L4.7 4.7z"/>`,
9
+ 'cloud': `<path d="M19.4 10.6A7 7 0 006 12a5 5 0 00.7 9.9h11.8a4.5 4.5 0 00.9-8.9z"/>`,
10
+ 'database': `<path d="M12 4c-4.4 0-8 1.3-8 3v10c0 1.7 3.6 3 8 3s8-1.3 8-3V7c0-1.7-3.6-3-8-3zm0 2c3.3 0 6 .9 6 2s-2.7 2-6 2-6-.9-6-2 2.7-2 6-2zM6 10.5c1.4.7 3.5 1 6 1s4.6-.3 6-1V12c0 1.1-2.7 2-6 2s-6-.9-6-2v-1.5zm0 4c1.4.7 3.5 1 6 1s4.6-.3 6-1V16c0 1.1-2.7 2-6 2s-6-.9-6-2v-1.5z"/>`,
11
+ 'firewall': `<path d="M12 2L4 6v6c0 5.5 3.4 10.3 8 12 4.6-1.7 8-6.5 8-12V6l-8-4zm0 2.2l6 3v5.3c0 4.3-2.6 8.1-6 9.5-3.4-1.4-6-5.2-6-9.5V7.2l6-3z"/> <path d="M11 8h2v5h-2V8zm0 6h2v2h-2v-2z"/>`,
12
+ 'generic': `<path d="M4 4h16v16H4V4zm2 2v12h12V6H6zm2 2h8v2H8V8zm0 4h8v2H8v-2z"/>`,
13
+ 'internet': `<path d="M12 2a10 10 0 100 20 10 10 0 000-20zm0 2c.6 0 1.3.8 1.8 2H10.2c.5-1.2 1.2-2 1.8-2zm-3.2.7A8 8 0 005 10h2.5c.1-2 .5-3.7 1.3-5.3zm6.4 0c.8 1.6 1.2 3.3 1.3 5.3H19a8 8 0 00-3.8-5.3zM5 12h2.5c.1 2 .5 3.7 1.3 5.3A8 8 0 015 12zm4.5 0h5c0 1.5-.3 3-1 4h-3c-.7-1-1-2.5-1-4zm7 0H19a8 8 0 01-3.8 5.3c.8-1.6 1.2-3.3 1.3-5.3zM10.2 18h3.6c-.5 1.2-1.2 2-1.8 2s-1.3-.8-1.8-2z"/>`,
14
+ 'l2-switch': `<path d="M3 8h18v8H3V8zm2 2v4h14v-4H5zm2 1h2v2H7v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2z"/>`,
15
+ 'l3-switch': `<path d="M3 6h18v12H3V6zm2 2v8h14V8H5zm2 2h4v1H7v-1zm6 0h4v1h-4v-1zm-6 3h4v1H7v-1zm6 0h4v1h-4v-1z"/>`,
16
+ 'load-balancer': `<path d="M12 4L4 8l8 4 8-4-8-4zm0 2.5L16 8l-4 2-4-2 4-1.5zM4 12l8 4 8-4v2l-8 4-8-4v-2zm0 4l8 4 8-4v2l-8 4-8-4v-2z"/>`,
17
+ 'router': `<path d="M4 8h16v8H4V8zm2 2v4h12v-4H6zm1 1h2v2H7v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2z"/>`,
18
+ 'server': `<path d="M4 4h16v4H4V4zm0 6h16v4H4v-4zm0 6h16v4H4v-4zm2-10v2h2V6H6zm0 6v2h2v-2H6zm0 6v2h2v-2H6zm10-12v2h2V6h-2zm0 6v2h2v-2h-2zm0 6v2h2v-2h-2z"/>`,
19
+ 'vpn': `<path d="M12 2L4 5v6.5c0 5.3 3.4 10 8 11.5 4.6-1.5 8-6.2 8-11.5V5l-8-3zm0 4a3 3 0 110 6 3 3 0 010-6zm-4 8h8v1c0 2-1.8 3-4 3s-4-1-4-3v-1z"/>`,
20
+ };
21
+ // Map DeviceType to icon key
22
+ const deviceTypeToIcon = {
23
+ [DeviceType.Router]: 'router',
24
+ [DeviceType.L3Switch]: 'l3-switch',
25
+ [DeviceType.L2Switch]: 'l2-switch',
26
+ [DeviceType.Firewall]: 'firewall',
27
+ [DeviceType.LoadBalancer]: 'load-balancer',
28
+ [DeviceType.Server]: 'server',
29
+ [DeviceType.AccessPoint]: 'access-point',
30
+ [DeviceType.Cloud]: 'cloud',
31
+ [DeviceType.Internet]: 'internet',
32
+ [DeviceType.VPN]: 'vpn',
33
+ [DeviceType.Database]: 'database',
34
+ [DeviceType.Generic]: 'generic',
35
+ };
36
+ /**
37
+ * Get SVG icon content for a device type
38
+ */
39
+ export function getDeviceIcon(type) {
40
+ if (!type)
41
+ return undefined;
42
+ const iconKey = deviceTypeToIcon[type];
43
+ if (!iconKey)
44
+ return undefined;
45
+ return defaultIcons[iconKey];
46
+ }
47
+ // Vendor icon registry (populated by @shumoku/icons if installed)
48
+ let vendorIconRegistry = {};
49
+ /**
50
+ * Register vendor icons (called by @shumoku/icons)
51
+ */
52
+ export function registerVendorIcons(vendor, icons) {
53
+ vendorIconRegistry[vendor] = icons;
54
+ }
55
+ /**
56
+ * Get vendor icon entry
57
+ */
58
+ export function getVendorIconEntry(vendor, service, resource) {
59
+ if (vendor === 'default' || !vendor) {
60
+ const content = defaultIcons[service] || (resource ? defaultIcons[resource] : undefined);
61
+ return content ? { default: content } : undefined;
62
+ }
63
+ const vendorIcons = vendorIconRegistry[vendor];
64
+ if (!vendorIcons)
65
+ return undefined;
66
+ const key = resource ? `${service}/${resource}` : service;
67
+ const entry = vendorIcons[key];
68
+ if (!entry) {
69
+ const serviceKey = Object.keys(vendorIcons).find(k => k.startsWith(service + '/'));
70
+ if (serviceKey)
71
+ return vendorIcons[serviceKey];
72
+ return undefined;
73
+ }
74
+ return entry;
75
+ }
76
+ /**
77
+ * Get vendor icon with theme support
78
+ */
79
+ export function getVendorIcon(vendor, service, resource, theme = 'default') {
80
+ const entry = getVendorIconEntry(vendor, service, resource);
81
+ if (!entry)
82
+ return undefined;
83
+ return entry[theme] || entry.default;
84
+ }
85
+ export const iconSets = {
86
+ default: defaultIcons,
87
+ };
88
+ //# sourceMappingURL=generated-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-icons.js","sourceRoot":"","sources":["../../src/icons/generated-icons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './generated-icons.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './generated-icons.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @shumoku/core - Network topology visualization core library
3
+ */
4
+ export * from './models/index.js';
5
+ export * from './layout/index.js';
6
+ export * from './themes/index.js';
7
+ export * from './icons/index.js';
8
+ export * from './renderer/index.js';
9
+ export declare const version = "0.0.0";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,mBAAmB,CAAA;AAGjC,cAAc,mBAAmB,CAAA;AAGjC,cAAc,mBAAmB,CAAA;AAGjC,cAAc,kBAAkB,CAAA;AAGhC,cAAc,qBAAqB,CAAA;AAGnC,eAAO,MAAM,OAAO,UAAU,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @shumoku/core - Network topology visualization core library
3
+ */
4
+ // Models
5
+ export * from './models/index.js';
6
+ // Layout
7
+ export * from './layout/index.js';
8
+ // Themes
9
+ export * from './themes/index.js';
10
+ // Icons
11
+ export * from './icons/index.js';
12
+ // Renderer
13
+ export * from './renderer/index.js';
14
+ // Version
15
+ export const version = '0.0.0';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,cAAc,mBAAmB,CAAA;AAEjC,SAAS;AACT,cAAc,mBAAmB,CAAA;AAEjC,SAAS;AACT,cAAc,mBAAmB,CAAA;AAEjC,QAAQ;AACR,cAAc,kBAAkB,CAAA;AAEhC,WAAW;AACX,cAAc,qBAAqB,CAAA;AAEnC,UAAU;AACV,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Hierarchical Layout Engine
3
+ * Uses ELK.js for advanced graph layout with proper edge routing
4
+ */
5
+ import { type NetworkGraph, type LayoutResult, type LayoutDirection } from '../models/index.js';
6
+ export interface HierarchicalLayoutOptions {
7
+ direction?: LayoutDirection;
8
+ nodeWidth?: number;
9
+ nodeHeight?: number;
10
+ nodeSpacing?: number;
11
+ rankSpacing?: number;
12
+ subgraphPadding?: number;
13
+ subgraphLabelHeight?: number;
14
+ }
15
+ export declare class HierarchicalLayout {
16
+ private options;
17
+ private elk;
18
+ constructor(options?: HierarchicalLayoutOptions);
19
+ /**
20
+ * Get effective options by merging graph settings with defaults
21
+ */
22
+ private getEffectiveOptions;
23
+ layoutAsync(graph: NetworkGraph): Promise<LayoutResult>;
24
+ /**
25
+ * Build ELK graph with HA pairs merged into single virtual nodes
26
+ */
27
+ private buildElkGraphWithHAMerge;
28
+ /**
29
+ * Extract layout result and expand HA virtual nodes back to original pairs
30
+ */
31
+ private extractLayoutResultWithHAExpand;
32
+ /**
33
+ * Reorder ports on each node based on connected node positions to minimize edge crossings
34
+ */
35
+ private reorderPortsByConnectedNodePositions;
36
+ layout(graph: NetworkGraph): LayoutResult;
37
+ private toElkDirection;
38
+ private calculateNodeHeight;
39
+ /**
40
+ * Calculate edge path using port positions when available
41
+ * Port positions are from ELK - lines connect FROM the ports
42
+ */
43
+ private calculateEdgePathWithPorts;
44
+ /**
45
+ * Get control point position based on port side
46
+ */
47
+ private getControlPointForSide;
48
+ private calculateFallbackLayout;
49
+ private calculateTotalBounds;
50
+ /**
51
+ * Detect redundancy pairs based on link.redundancy property
52
+ * Returns array of [nodeA, nodeB] pairs that should be placed on the same layer
53
+ */
54
+ private detectHAPairs;
55
+ /**
56
+ * Adjust node distances based on link minLength property
57
+ */
58
+ private adjustLinkDistances;
59
+ /**
60
+ * Calculate edge path with offset for multiple connections
61
+ */
62
+ private calculateEdgePathWithOffset;
63
+ /**
64
+ * Recalculate all edge paths with port offset distribution
65
+ */
66
+ private recalculateAllEdges;
67
+ /**
68
+ * Recalculate subgraph bounds to contain all child nodes after adjustments
69
+ */
70
+ private recalculateSubgraphBounds;
71
+ }
72
+ export declare const hierarchicalLayout: HierarchicalLayout;
73
+ //# sourceMappingURL=hierarchical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical.d.ts","sourceRoot":"","sources":["../../src/layout/hierarchical.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,YAAY,EAMjB,KAAK,eAAe,EAGrB,MAAM,oBAAoB,CAAA;AA+D3B,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAgBD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,GAAG,CAA0B;gBAEzB,OAAO,CAAC,EAAE,yBAAyB;IAK/C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAYrB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAqC7D;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8UhC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAoTvC;;OAEG;IACH,OAAO,CAAC,oCAAoC;IA4F5C,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY;IA+BzC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,mBAAmB;IA0D3B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAmFlC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,uBAAuB;IA+D/B,OAAO,CAAC,oBAAoB;IAmC5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoD3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAsEnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiF3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAoFlC;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAA"}