xcode-graph 0.1.1 → 0.2.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/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "xcode-graph",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "xcodegraph": "1.34.5",
5
5
  "description": "Interactive dependency graph visualization web component for Xcode projects",
6
6
  "license": "MIT",
7
7
  "homepage": "https://ajkolean.github.io/xcode-graph/",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/ajkolean/xcode-graph.git"
10
+ "url": "git+https://github.com/ajkolean/xcode-graph.git"
11
11
  },
12
12
  "bugs": {
13
13
  "url": "https://github.com/ajkolean/xcode-graph/issues"
@@ -20,14 +20,14 @@
20
20
  "lit",
21
21
  "visualization"
22
22
  ],
23
- "packageManager": "pnpm@10.30.3",
24
23
  "type": "module",
25
24
  "module": "dist/xcodegraph.js",
25
+ "types": "dist/types/src/index.d.ts",
26
26
  "exports": {
27
27
  ".": {
28
+ "types": "./dist/types/src/index.d.ts",
28
29
  "import": "./dist/xcodegraph.js"
29
- },
30
- "./dist/xcodegraph.js": "./dist/xcodegraph.js"
30
+ }
31
31
  },
32
32
  "files": [
33
33
  "dist/**/*.js",
@@ -41,50 +41,58 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "@lit-labs/observers": "^2.1.0",
45
- "@lit-labs/virtualizer": "^2.1.1",
46
- "@zag-js/core": "^1.35.2",
47
- "@zag-js/vanilla": "^1.35.2",
44
+ "@zag-js/core": "^1.35.3",
45
+ "@zag-js/vanilla": "^1.35.3",
48
46
  "colord": "^2.9.3",
49
- "comlink": "^4.4.2",
50
47
  "d3-ease": "^3.0.1",
51
48
  "d3-force": "^3.0.0",
52
- "elkjs": "^0.11.0",
49
+ "d3-quadtree": "^3.0.1",
50
+ "elkjs": "^0.11.1",
53
51
  "focus-trap": "^8.0.0",
52
+ "fuse.js": "^7.1.0",
53
+ "graphology": "^0.26.0",
54
+ "graphology-types": "^0.24.8",
54
55
  "lit": "^3.3.2",
55
56
  "lit-html": "^3.3.2",
56
57
  "zod": "^4.3.6"
57
58
  },
58
59
  "devDependencies": {
59
- "@biomejs/biome": "^2.4.4",
60
+ "@biomejs/biome": "^2.4.6",
60
61
  "@custom-elements-manifest/analyzer": "^0.11.0",
61
62
  "@lit-labs/compiler": "^1.1.2",
62
63
  "@lit-labs/signals": "^0.2.0",
63
64
  "@microsoft/api-extractor": "^7.57.6",
64
65
  "@open-wc/testing": "^4.0.0",
65
66
  "@rollup/plugin-typescript": "^12.3.0",
66
- "@size-limit/file": "^12.0.0",
67
+ "@size-limit/file": "^12.0.1",
67
68
  "@types/d3-ease": "^3.0.2",
68
69
  "@types/d3-force": "^3.0.10",
69
- "@types/node": "^25.3.3",
70
+ "@types/d3-quadtree": "^3.0.6",
71
+ "@types/node": "^25.3.5",
70
72
  "@vitest/browser-playwright": "^4.0.18",
71
73
  "@vitest/coverage-v8": "^4.0.18",
72
- "cem-plugin-expanded-types": "^1.4.0",
74
+ "@wc-toolkit/type-parser": "^1.2.0",
73
75
  "custom-element-jet-brains-integration": "^1.7.0",
74
76
  "custom-element-vs-code-integration": "^1.5.0",
75
- "depcheck": "^1.4.7",
76
77
  "jsdom": "^28.1.0",
77
- "rollup-plugin-minify-template-literals": "^1.1.7",
78
- "rollup-plugin-visualizer": "^7.0.0",
79
- "size-limit": "^12.0.0",
78
+ "knip": "^5.86.0",
79
+ "rollup-plugin-visualizer": "^7.0.1",
80
+ "size-limit": "^12.0.1",
80
81
  "ts-lit-plugin": "^2.0.2",
82
+ "tslib": "^2.8.1",
81
83
  "typedoc": "^0.28.17",
82
- "vite": "7.3.1",
84
+ "typedoc-plugin-markdown": "^4.10.0",
85
+ "typedoc-vitepress-theme": "^1.1.2",
86
+ "vite": "8.0.0-beta.16",
83
87
  "vitepress": "^1.6.4",
84
88
  "vitest": "^4.0.18",
85
89
  "vitest-axe": "^0.1.0",
86
90
  "vitest-canvas-mock": "^1.1.3"
87
91
  },
92
+ "customElements": "custom-elements.json",
93
+ "engines": {
94
+ "pnpm": ">=10"
95
+ },
88
96
  "scripts": {
89
97
  "dev": "vite",
90
98
  "build": "vite build",
@@ -101,40 +109,15 @@
101
109
  "test:coverage": "vitest run --coverage",
102
110
  "analyze": "cem analyze",
103
111
  "analyze:check": "cem analyze && git diff --exit-code custom-elements.json vscode.html-custom-data.json vscode.css-custom-data.json web-types.json",
104
- "docs:dev": "pnpm typedoc --out docs/.vitepress/dist/api && vitepress dev docs --port 5174",
105
- "docs:build": "vitepress build docs",
112
+ "docs:dev": "pnpm typedoc && vitepress dev docs --port 5174",
113
+ "docs:build": "pnpm typedoc && vitepress build docs",
106
114
  "docs:preview": "vitepress preview docs --port 5174",
107
115
  "docs:api": "typedoc",
108
116
  "docs:api:extract": "pnpm build:api && api-extractor run --local --verbose",
109
117
  "docs:api:extract:ci": "pnpm build:api && api-extractor run",
110
- "depcheck": "depcheck",
118
+ "knip": "knip",
111
119
  "size": "size-limit",
112
120
  "size:why": "size-limit --why",
113
121
  "version:sync": "./scripts/version-sync.sh"
114
- },
115
- "customElements": "custom-elements.json",
116
- "pnpm": {
117
- "overrides": {
118
- "valibot": ">=1.2.0",
119
- "keygrip": "^1.1.0",
120
- "qs": ">=6.14.1",
121
- "minimatch": ">=10.2.3",
122
- "rollup@>=4.0.0 <4.59.0": ">=4.59.0",
123
- "koa": ">=2.16.4",
124
- "esbuild": ">=0.25.0",
125
- "lodash": ">=4.17.23",
126
- "markdown-it": ">=14.1.1",
127
- "diff@>=6.0.0 <8.0.3": ">=8.0.3"
128
- },
129
- "onlyBuiltDependencies": [
130
- "@swc/core",
131
- "@vaadin/vaadin-usage-statistics",
132
- "esbuild",
133
- "maplibre-gl",
134
- "unrs-resolver"
135
- ]
136
- },
137
- "engines": {
138
- "pnpm": ">=10"
139
122
  }
140
- }
123
+ }
@@ -26,11 +26,6 @@
26
26
  "name": "--badge-border-hover",
27
27
  "description": "Border color on hover (computed from color prop)",
28
28
  "values": []
29
- },
30
- {
31
- "name": "--badge-glow",
32
- "description": "Glow color on hover (computed from color prop)",
33
- "values": []
34
29
  }
35
30
  ],
36
31
  "pseudoElements": []
@@ -10,23 +10,18 @@
10
10
  },
11
11
  {
12
12
  "name": "xcode-graph-canvas",
13
- "description": "Canvas-based interactive graph visualization\n---\n\n\n### **Events:**\n - **zoom-change** - Dispatched when the zoom level changes (detail: number)\n- **node-select** - Dispatched when a node is selected or deselected (detail: { node })\n- **node-hover** - Dispatched when a node is hovered (detail: { nodeId })\n- **cluster-select** - Dispatched when a cluster is selected or deselected (detail: { clusterId })\n- **cluster-hover** - Dispatched when a cluster is hovered (detail: { clusterId })\n- **zoom-in** - Dispatched when zoom in is requested via keyboard\n- **zoom-out** - Dispatched when zoom out is requested via keyboard\n- **zoom-reset** - Dispatched when zoom reset is requested via keyboard",
13
+ "description": "Canvas2D interactive graph visualization\n---\n\n\n### **Events:**\n - **zoom-change** - Dispatched when the zoom level changes (detail: number)\n- **node-select** - Dispatched when a node is selected or deselected (detail: { node })\n- **node-hover** - Dispatched when a node is hovered (detail: { nodeId })\n- **cluster-select** - Dispatched when a cluster is selected or deselected (detail: { clusterId })\n- **cluster-hover** - Dispatched when a cluster is hovered (detail: { clusterId })\n- **zoom-in** - Dispatched when zoom in is requested via keyboard\n- **zoom-out** - Dispatched when zoom out is requested via keyboard\n- **zoom-reset** - Dispatched when zoom reset is requested via keyboard\n\n### **Methods:**\n - **fitToViewport(): _void_** - Adjusts zoom and pan so that all clusters fit within the visible viewport.",
14
14
  "attributes": [
15
15
  {
16
16
  "name": "search-query",
17
- "description": "Active search query for dimming non-matching nodes",
17
+ "description": "Active search query attribute-bound from parent via search-query=\"...\"",
18
18
  "values": []
19
19
  },
20
20
  {
21
21
  "name": "view-mode",
22
- "description": "Display mode affecting edge visibility",
22
+ "description": "Display mode attribute-bound from parent via view-mode=\"...\"",
23
23
  "values": [{ "name": "ViewMode" }]
24
24
  },
25
- {
26
- "name": "zoom",
27
- "description": "Current zoom level (affects color saturation and label visibility)",
28
- "values": []
29
- },
30
25
  {
31
26
  "name": "enable-animation",
32
27
  "description": "Whether physics animation is enabled for layout settling",
@@ -34,22 +29,22 @@
34
29
  },
35
30
  {
36
31
  "name": "show-direct-deps",
37
- "description": "Whether to highlight direct dependency edges",
32
+ "description": "Whether to highlight direct dependency edges — attribute-bound via ?show-direct-deps",
38
33
  "values": []
39
34
  },
40
35
  {
41
36
  "name": "show-transitive-deps",
42
- "description": "Whether to highlight transitive dependency edges",
37
+ "description": "Whether to highlight transitive dependency edges — attribute-bound via ?show-transitive-deps",
43
38
  "values": []
44
39
  },
45
40
  {
46
41
  "name": "show-direct-dependents",
47
- "description": "Whether to highlight direct dependent edges",
42
+ "description": "Whether to highlight direct dependent edges — attribute-bound via ?show-direct-dependents",
48
43
  "values": []
49
44
  },
50
45
  {
51
46
  "name": "show-transitive-dependents",
52
- "description": "Whether to highlight transitive dependent edges",
47
+ "description": "Whether to highlight transitive dependent edges — attribute-bound via ?show-transitive-dependents",
53
48
  "values": []
54
49
  }
55
50
  ],
@@ -319,7 +314,7 @@
319
314
  },
320
315
  {
321
316
  "name": "xcode-graph-badge",
322
- "description": "Color-themed badge with pill, rounded, and accent variants\n---\n\n\n### **CSS Properties:**\n - **--badge-bg** - Background color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-border** - Border color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-color** - Text color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-bg-hover** - Background color on hover (computed from color prop) _(default: undefined)_\n- **--badge-border-hover** - Border color on hover (computed from color prop) _(default: undefined)_\n- **--badge-glow** - Glow color on hover (computed from color prop) _(default: undefined)_",
317
+ "description": "Color-themed badge with pill, rounded, and accent variants\n---\n\n\n### **CSS Properties:**\n - **--badge-bg** - Background color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-border** - Border color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-color** - Text color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-bg-hover** - Background color on hover (computed from color prop) _(default: undefined)_\n- **--badge-border-hover** - Border color on hover (computed from color prop) _(default: undefined)_",
323
318
  "attributes": [
324
319
  {
325
320
  "name": "label",
@@ -345,11 +340,6 @@
345
340
  "name": "interactive",
346
341
  "description": "Whether the badge has interactive hover states",
347
342
  "values": []
348
- },
349
- {
350
- "name": "glow",
351
- "description": "Whether to show glow effect on hover",
352
- "values": []
353
343
  }
354
344
  ],
355
345
  "references": []
@@ -370,7 +360,7 @@
370
360
  },
371
361
  {
372
362
  "name": "color",
373
- "description": "Theme color for the icon box glow",
363
+ "description": "Theme color for the icon box",
374
364
  "values": []
375
365
  },
376
366
  {
@@ -909,7 +899,7 @@
909
899
  },
910
900
  {
911
901
  "name": "xcode-graph-header",
912
- "description": "Mission control themed header bar\n---\n",
902
+ "description": "Application header bar\n---\n",
913
903
  "attributes": [],
914
904
  "references": []
915
905
  },
package/web-types.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "xcode-graph",
4
- "version": "0.1.0",
4
+ "version": "0.2.1",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -35,24 +35,19 @@
35
35
  },
36
36
  {
37
37
  "name": "xcode-graph-canvas",
38
- "description": "Canvas-based interactive graph visualization\n---\n\n\n### **Events:**\n - **zoom-change** - Dispatched when the zoom level changes (detail: number)\n- **node-select** - Dispatched when a node is selected or deselected (detail: { node })\n- **node-hover** - Dispatched when a node is hovered (detail: { nodeId })\n- **cluster-select** - Dispatched when a cluster is selected or deselected (detail: { clusterId })\n- **cluster-hover** - Dispatched when a cluster is hovered (detail: { clusterId })\n- **zoom-in** - Dispatched when zoom in is requested via keyboard\n- **zoom-out** - Dispatched when zoom out is requested via keyboard\n- **zoom-reset** - Dispatched when zoom reset is requested via keyboard",
38
+ "description": "Canvas2D interactive graph visualization\n---\n\n\n### **Events:**\n - **zoom-change** - Dispatched when the zoom level changes (detail: number)\n- **node-select** - Dispatched when a node is selected or deselected (detail: { node })\n- **node-hover** - Dispatched when a node is hovered (detail: { nodeId })\n- **cluster-select** - Dispatched when a cluster is selected or deselected (detail: { clusterId })\n- **cluster-hover** - Dispatched when a cluster is hovered (detail: { clusterId })\n- **zoom-in** - Dispatched when zoom in is requested via keyboard\n- **zoom-out** - Dispatched when zoom out is requested via keyboard\n- **zoom-reset** - Dispatched when zoom reset is requested via keyboard\n\n### **Methods:**\n - **fitToViewport(): _void_** - Adjusts zoom and pan so that all clusters fit within the visible viewport.",
39
39
  "doc-url": "",
40
40
  "attributes": [
41
41
  {
42
42
  "name": "search-query",
43
- "description": "Active search query for dimming non-matching nodes",
43
+ "description": "Active search query attribute-bound from parent via search-query=\"...\"",
44
44
  "value": { "type": "string", "default": "''" }
45
45
  },
46
46
  {
47
47
  "name": "view-mode",
48
- "description": "Display mode affecting edge visibility",
48
+ "description": "Display mode attribute-bound from parent via view-mode=\"...\"",
49
49
  "value": { "type": "ViewMode" }
50
50
  },
51
- {
52
- "name": "zoom",
53
- "description": "Current zoom level (affects color saturation and label visibility)",
54
- "value": { "type": "number", "default": "1" }
55
- },
56
51
  {
57
52
  "name": "enable-animation",
58
53
  "description": "Whether physics animation is enabled for layout settling",
@@ -60,22 +55,22 @@
60
55
  },
61
56
  {
62
57
  "name": "show-direct-deps",
63
- "description": "Whether to highlight direct dependency edges",
58
+ "description": "Whether to highlight direct dependency edges — attribute-bound via ?show-direct-deps",
64
59
  "value": { "type": "boolean", "default": "false" }
65
60
  },
66
61
  {
67
62
  "name": "show-transitive-deps",
68
- "description": "Whether to highlight transitive dependency edges",
63
+ "description": "Whether to highlight transitive dependency edges — attribute-bound via ?show-transitive-deps",
69
64
  "value": { "type": "boolean", "default": "false" }
70
65
  },
71
66
  {
72
67
  "name": "show-direct-dependents",
73
- "description": "Whether to highlight direct dependent edges",
68
+ "description": "Whether to highlight direct dependent edges — attribute-bound via ?show-direct-dependents",
74
69
  "value": { "type": "boolean", "default": "false" }
75
70
  },
76
71
  {
77
72
  "name": "show-transitive-dependents",
78
- "description": "Whether to highlight transitive dependent edges",
73
+ "description": "Whether to highlight transitive dependent edges — attribute-bound via ?show-transitive-dependents",
79
74
  "value": { "type": "boolean", "default": "false" }
80
75
  }
81
76
  ],
@@ -139,24 +134,20 @@
139
134
  },
140
135
  {
141
136
  "name": "hoveredNode",
142
- "description": "Currently hovered node ID (shows tooltip)",
137
+ "description": "Currently hovered node ID plain field, only used for canvas rendering.",
143
138
  "type": "string | null"
144
139
  },
145
140
  {
146
141
  "name": "searchQuery",
147
- "description": "Active search query for dimming non-matching nodes",
142
+ "description": "Active search query attribute-bound from parent via search-query=\"...\"",
148
143
  "type": "string"
149
144
  },
150
145
  {
151
146
  "name": "viewMode",
152
- "description": "Display mode affecting edge visibility",
147
+ "description": "Display mode attribute-bound from parent via view-mode=\"...\"",
153
148
  "type": "ViewMode"
154
149
  },
155
- {
156
- "name": "zoom",
157
- "description": "Current zoom level (affects color saturation and label visibility)",
158
- "type": "number"
159
- },
150
+ { "name": "zoom", "type": "number" },
160
151
  {
161
152
  "name": "enableAnimation",
162
153
  "description": "Whether physics animation is enabled for layout settling",
@@ -164,37 +155,37 @@
164
155
  },
165
156
  {
166
157
  "name": "transitiveDeps",
167
- "description": "Transitive dependency chain for the selected node",
158
+ "description": "Transitive dependency chain — plain field, only used for canvas rendering.",
168
159
  "type": "TransitiveResult | undefined"
169
160
  },
170
161
  {
171
162
  "name": "transitiveDependents",
172
- "description": "Transitive dependent chain for the selected node",
163
+ "description": "Transitive dependent chain — plain field, only used for canvas rendering.",
173
164
  "type": "TransitiveResult | undefined"
174
165
  },
175
166
  {
176
167
  "name": "previewFilter",
177
- "description": "Active filter preview (dims non-matching nodes on hover)",
168
+ "description": "Active filter preview plain field, only used for canvas rendering.",
178
169
  "type": "PreviewFilter | undefined"
179
170
  },
180
171
  {
181
172
  "name": "showDirectDeps",
182
- "description": "Whether to highlight direct dependency edges",
173
+ "description": "Whether to highlight direct dependency edges — attribute-bound via ?show-direct-deps",
183
174
  "type": "boolean"
184
175
  },
185
176
  {
186
177
  "name": "showTransitiveDeps",
187
- "description": "Whether to highlight transitive dependency edges",
178
+ "description": "Whether to highlight transitive dependency edges — attribute-bound via ?show-transitive-deps",
188
179
  "type": "boolean"
189
180
  },
190
181
  {
191
182
  "name": "showDirectDependents",
192
- "description": "Whether to highlight direct dependent edges",
183
+ "description": "Whether to highlight direct dependent edges — attribute-bound via ?show-direct-dependents",
193
184
  "type": "boolean"
194
185
  },
195
186
  {
196
187
  "name": "showTransitiveDependents",
197
- "description": "Whether to highlight transitive dependent edges",
188
+ "description": "Whether to highlight transitive dependent edges — attribute-bound via ?show-transitive-dependents",
198
189
  "type": "boolean"
199
190
  },
200
191
  {
@@ -895,7 +886,7 @@
895
886
  },
896
887
  {
897
888
  "name": "xcode-graph-badge",
898
- "description": "Color-themed badge with pill, rounded, and accent variants\n---\n\n\n### **CSS Properties:**\n - **--badge-bg** - Background color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-border** - Border color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-color** - Text color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-bg-hover** - Background color on hover (computed from color prop) _(default: undefined)_\n- **--badge-border-hover** - Border color on hover (computed from color prop) _(default: undefined)_\n- **--badge-glow** - Glow color on hover (computed from color prop) _(default: undefined)_",
889
+ "description": "Color-themed badge with pill, rounded, and accent variants\n---\n\n\n### **CSS Properties:**\n - **--badge-bg** - Background color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-border** - Border color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-color** - Text color of the badge (computed from color prop) _(default: undefined)_\n- **--badge-bg-hover** - Background color on hover (computed from color prop) _(default: undefined)_\n- **--badge-border-hover** - Border color on hover (computed from color prop) _(default: undefined)_",
899
890
  "doc-url": "",
900
891
  "attributes": [
901
892
  {
@@ -922,11 +913,6 @@
922
913
  "name": "interactive",
923
914
  "description": "Whether the badge has interactive hover states",
924
915
  "value": { "type": "boolean", "default": "false" }
925
- },
926
- {
927
- "name": "glow",
928
- "description": "Whether to show glow effect on hover",
929
- "value": { "type": "boolean", "default": "false" }
930
916
  }
931
917
  ],
932
918
  "events": [],
@@ -956,11 +942,6 @@
956
942
  "name": "interactive",
957
943
  "description": "Whether the badge has interactive hover states",
958
944
  "type": "boolean"
959
- },
960
- {
961
- "name": "glow",
962
- "description": "Whether to show glow effect on hover",
963
- "type": "boolean"
964
945
  }
965
946
  ],
966
947
  "events": []
@@ -983,7 +964,7 @@
983
964
  },
984
965
  {
985
966
  "name": "color",
986
- "description": "Theme color for the icon box glow",
967
+ "description": "Theme color for the icon box",
987
968
  "value": { "type": "string" }
988
969
  },
989
970
  {
@@ -1023,7 +1004,7 @@
1023
1004
  },
1024
1005
  {
1025
1006
  "name": "color",
1026
- "description": "Theme color for the icon box glow",
1007
+ "description": "Theme color for the icon box",
1027
1008
  "type": "string"
1028
1009
  },
1029
1010
  {
@@ -2704,7 +2685,7 @@
2704
2685
  },
2705
2686
  {
2706
2687
  "name": "xcode-graph-header",
2707
- "description": "Mission control themed header bar\n---\n",
2688
+ "description": "Application header bar\n---\n",
2708
2689
  "doc-url": "",
2709
2690
  "attributes": [],
2710
2691
  "events": [],
@@ -2811,10 +2792,6 @@
2811
2792
  {
2812
2793
  "name": "--badge-border-hover",
2813
2794
  "description": "Border color on hover (computed from color prop)"
2814
- },
2815
- {
2816
- "name": "--badge-glow",
2817
- "description": "Glow color on hover (computed from color prop)"
2818
2795
  }
2819
2796
  ],
2820
2797
  "pseudo-elements": []