@industry-theme/repository-composition-panels 0.6.28 → 0.6.30

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 (40) hide show
  1. package/dist/{BufferResource-BJY-eIgx.js → BufferResource-BBok61RS.js} +2 -2
  2. package/dist/{BufferResource-BJY-eIgx.js.map → BufferResource-BBok61RS.js.map} +1 -1
  3. package/dist/{CanvasRenderer-CGAV4ORs.js → CanvasRenderer-ChUHHBzp.js} +3 -3
  4. package/dist/{CanvasRenderer-CGAV4ORs.js.map → CanvasRenderer-ChUHHBzp.js.map} +1 -1
  5. package/dist/{Filter-CdK3OzeQ.js → Filter-CIW5VDE6.js} +2 -2
  6. package/dist/{Filter-CdK3OzeQ.js.map → Filter-CIW5VDE6.js.map} +1 -1
  7. package/dist/{RenderTargetSystem-ll-Ig4tx.js → RenderTargetSystem-DHo9fiqa.js} +3 -3
  8. package/dist/{RenderTargetSystem-ll-Ig4tx.js.map → RenderTargetSystem-DHo9fiqa.js.map} +1 -1
  9. package/dist/{WebGLRenderer-CuaFmyj0.js → WebGLRenderer-9uzpEisE.js} +4 -4
  10. package/dist/{WebGLRenderer-CuaFmyj0.js.map → WebGLRenderer-9uzpEisE.js.map} +1 -1
  11. package/dist/{WebGPURenderer-kV50nNAY.js → WebGPURenderer-Bjpg8hkG.js} +4 -4
  12. package/dist/{WebGPURenderer-kV50nNAY.js.map → WebGPURenderer-Bjpg8hkG.js.map} +1 -1
  13. package/dist/{browserAll-Cr8EGZ6x.js → browserAll-B0PE4Ly2.js} +3 -3
  14. package/dist/{browserAll-Cr8EGZ6x.js.map → browserAll-B0PE4Ly2.js.map} +1 -1
  15. package/dist/{index-g-V2DE-H.js → index-B5obJmUS.js} +453 -200
  16. package/dist/{index-g-V2DE-H.js.map → index-B5obJmUS.js.map} +1 -1
  17. package/dist/{init-DNm4hBfO.js → init-BE3Rk_Ji.js} +3 -3
  18. package/dist/{init-DNm4hBfO.js.map → init-BE3Rk_Ji.js.map} +1 -1
  19. package/dist/panels/CollectionMapPanel.d.ts +4 -4
  20. package/dist/panels/CollectionMapPanel.d.ts.map +1 -1
  21. package/dist/panels/PackageCompositionPanel.d.ts +2 -2
  22. package/dist/panels/PackageCompositionPanel.d.ts.map +1 -1
  23. package/dist/panels/components/DependencyRow.d.ts.map +1 -1
  24. package/dist/panels/components/EmptyDependencies.d.ts +7 -0
  25. package/dist/panels/components/EmptyDependencies.d.ts.map +1 -0
  26. package/dist/panels/components/FilterBar.d.ts +2 -0
  27. package/dist/panels/components/FilterBar.d.ts.map +1 -1
  28. package/dist/panels/components/PackageDetailCard.d.ts.map +1 -1
  29. package/dist/panels/overworld-map/OverworldMapPanel.d.ts +2 -2
  30. package/dist/panels/overworld-map/OverworldMapPanel.d.ts.map +1 -1
  31. package/dist/panels/overworld-map/components/IsometricInteractionManager.d.ts +6 -1
  32. package/dist/panels/overworld-map/components/IsometricInteractionManager.d.ts.map +1 -1
  33. package/dist/panels.bundle.js +1 -1
  34. package/dist/types/dependencies.d.ts +13 -1
  35. package/dist/types/dependencies.d.ts.map +1 -1
  36. package/dist/webworkerAll-BBVbOe1V.js +3 -0
  37. package/dist/webworkerAll-BBVbOe1V.js.map +1 -0
  38. package/package.json +2 -2
  39. package/dist/webworkerAll-DmkQ4StC.js +0 -3
  40. package/dist/webworkerAll-DmkQ4StC.js.map +0 -1
@@ -1544,43 +1544,41 @@ const InfoItem = ({ badge, title, description, theme: theme2 }) => /* @__PURE__
1544
1544
  ]
1545
1545
  }
1546
1546
  );
1547
+ const typeLabels = {
1548
+ production: "prod",
1549
+ development: "dev",
1550
+ peer: "peer"
1551
+ };
1547
1552
  const DependencyRow = ({ dependency }) => {
1548
1553
  const { theme: theme2 } = useTheme();
1549
1554
  const [isHovered, setIsHovered] = useState(false);
1550
1555
  const [copied, setCopied] = useState(false);
1551
1556
  const getDependencyTypeBadgeStyle = (type2) => {
1552
1557
  const baseStyle = {
1553
- padding: `${theme2.space[1]}px ${theme2.space[2]}px`,
1554
- borderRadius: `${theme2.radii[1]}px`,
1555
- fontSize: `${theme2.fontSizes[0]}px`,
1558
+ fontSize: "9px",
1556
1559
  fontWeight: theme2.fontWeights.medium,
1557
1560
  fontFamily: theme2.fonts.body,
1558
- minWidth: "36px",
1559
- textAlign: "center"
1561
+ lineHeight: 1.2
1560
1562
  };
1561
1563
  switch (type2) {
1562
1564
  case "production":
1563
1565
  return {
1564
1566
  ...baseStyle,
1565
- backgroundColor: `${theme2.colors.primary}20`,
1566
1567
  color: theme2.colors.primary
1567
1568
  };
1568
1569
  case "development":
1569
1570
  return {
1570
1571
  ...baseStyle,
1571
- backgroundColor: `${theme2.colors.secondary}20`,
1572
1572
  color: theme2.colors.secondary
1573
1573
  };
1574
1574
  case "peer":
1575
1575
  return {
1576
1576
  ...baseStyle,
1577
- backgroundColor: `${theme2.colors.accent}20`,
1578
1577
  color: theme2.colors.accent
1579
1578
  };
1580
1579
  default:
1581
1580
  return {
1582
1581
  ...baseStyle,
1583
- backgroundColor: theme2.colors.backgroundLight,
1584
1582
  color: theme2.colors.textSecondary
1585
1583
  };
1586
1584
  }
@@ -1617,13 +1615,14 @@ const DependencyRow = ({ dependency }) => {
1617
1615
  display: "flex",
1618
1616
  alignItems: "center",
1619
1617
  justifyContent: "space-between",
1620
- padding: `${theme2.space[3]}px ${theme2.space[2]}px`,
1618
+ padding: `${theme2.space[2]}px ${theme2.space[3]}px`,
1621
1619
  backgroundColor: theme2.colors.background,
1622
1620
  borderRadius: 0,
1623
1621
  fontSize: `${theme2.fontSizes[1]}px`,
1624
1622
  fontFamily: theme2.fonts.body,
1625
1623
  borderBottom: `1px solid ${theme2.colors.border}`,
1626
- transition: "all 0.2s"
1624
+ transition: "all 0.2s",
1625
+ minHeight: "44px"
1627
1626
  },
1628
1627
  onMouseEnter: () => setIsHovered(true),
1629
1628
  onMouseLeave: () => setIsHovered(false),
@@ -1633,40 +1632,75 @@ const DependencyRow = ({ dependency }) => {
1633
1632
  {
1634
1633
  style: {
1635
1634
  display: "flex",
1636
- alignItems: "center",
1637
- gap: `${theme2.space[2]}px`,
1635
+ flexDirection: "column",
1636
+ gap: "2px",
1638
1637
  flex: 1,
1639
1638
  minWidth: 0
1640
1639
  },
1641
1640
  children: [
1642
- /* @__PURE__ */ jsx("span", { style: getDependencyTypeBadgeStyle(dependency.dependencyType), children: dependency.dependencyType === "production" ? "prod" : dependency.dependencyType === "development" ? "dev" : "peer" }),
1643
- /* @__PURE__ */ jsx(
1644
- "span",
1641
+ /* @__PURE__ */ jsxs(
1642
+ "div",
1645
1643
  {
1646
1644
  style: {
1647
- fontWeight: theme2.fontWeights.medium,
1648
- color: theme2.colors.text,
1649
- overflow: "hidden",
1650
- textOverflow: "ellipsis",
1651
- whiteSpace: "nowrap"
1645
+ display: "flex",
1646
+ alignItems: "center",
1647
+ gap: "4px"
1652
1648
  },
1653
- children: dependency.name
1649
+ children: [
1650
+ dependency.namespace && /* @__PURE__ */ jsx(
1651
+ "span",
1652
+ {
1653
+ style: {
1654
+ fontSize: "10px",
1655
+ color: theme2.colors.textSecondary,
1656
+ fontFamily: theme2.fonts.body
1657
+ },
1658
+ children: dependency.namespace
1659
+ }
1660
+ ),
1661
+ dependency.dependencyTypes.map((type2) => /* @__PURE__ */ jsx("span", { style: getDependencyTypeBadgeStyle(type2), children: typeLabels[type2] }, type2))
1662
+ ]
1654
1663
  }
1655
1664
  ),
1656
- /* @__PURE__ */ jsx(
1657
- "a",
1665
+ /* @__PURE__ */ jsxs(
1666
+ "div",
1658
1667
  {
1659
- href: `https://www.npmjs.com/package/${dependency.name}`,
1660
- target: "_blank",
1661
- rel: "noopener noreferrer",
1662
1668
  style: {
1663
- ...actionButtonStyle,
1664
- color: theme2.colors.textSecondary,
1665
- textDecoration: "none",
1666
- flexShrink: 0
1669
+ display: "flex",
1670
+ alignItems: "center",
1671
+ gap: `${theme2.space[2]}px`
1667
1672
  },
1668
- title: "View on npm",
1669
- children: /* @__PURE__ */ jsx(ExternalLink$1, { size: 12 })
1673
+ children: [
1674
+ /* @__PURE__ */ jsx(
1675
+ "span",
1676
+ {
1677
+ style: {
1678
+ fontWeight: theme2.fontWeights.medium,
1679
+ color: theme2.colors.text,
1680
+ overflow: "hidden",
1681
+ textOverflow: "ellipsis",
1682
+ whiteSpace: "nowrap"
1683
+ },
1684
+ children: dependency.packageName
1685
+ }
1686
+ ),
1687
+ /* @__PURE__ */ jsx(
1688
+ "a",
1689
+ {
1690
+ href: `https://www.npmjs.com/package/${dependency.name}`,
1691
+ target: "_blank",
1692
+ rel: "noopener noreferrer",
1693
+ style: {
1694
+ ...actionButtonStyle,
1695
+ color: theme2.colors.textSecondary,
1696
+ textDecoration: "none",
1697
+ flexShrink: 0
1698
+ },
1699
+ title: "View on npm",
1700
+ children: /* @__PURE__ */ jsx(ExternalLink$1, { size: 12 })
1701
+ }
1702
+ )
1703
+ ]
1670
1704
  }
1671
1705
  )
1672
1706
  ]
@@ -1716,7 +1750,8 @@ const FilterBar = ({
1716
1750
  onToggleFilter,
1717
1751
  searchQuery,
1718
1752
  onSearchChange,
1719
- counts
1753
+ counts,
1754
+ showSearch = true
1720
1755
  }) => {
1721
1756
  const { theme: theme2 } = useTheme();
1722
1757
  const availableFilters = [
@@ -1733,7 +1768,7 @@ const FilterBar = ({
1733
1768
  flexDirection: "column"
1734
1769
  },
1735
1770
  children: [
1736
- /* @__PURE__ */ jsxs(
1771
+ showSearch && /* @__PURE__ */ jsxs(
1737
1772
  "div",
1738
1773
  {
1739
1774
  style: {
@@ -2141,7 +2176,7 @@ const LensRow = ({ lens }) => {
2141
2176
  const RequirementRow = ({ check }) => {
2142
2177
  const { theme: theme2 } = useTheme();
2143
2178
  const { requirement, satisfied, foundValue, isInherited, inheritedFrom } = check;
2144
- const typeLabels = {
2179
+ const typeLabels2 = {
2145
2180
  devDependency: "dep",
2146
2181
  script: "script",
2147
2182
  config: "config"
@@ -2170,7 +2205,7 @@ const RequirementRow = ({ check }) => {
2170
2205
  fontWeight: 500,
2171
2206
  textTransform: "uppercase"
2172
2207
  },
2173
- children: typeLabels[requirement.type] || requirement.type
2208
+ children: typeLabels2[requirement.type] || requirement.type
2174
2209
  }
2175
2210
  ),
2176
2211
  /* @__PURE__ */ jsx(
@@ -2577,6 +2612,206 @@ const OtherScriptsSection = ({
2577
2612
  )
2578
2613
  ] });
2579
2614
  };
2615
+ const SUPPORTED_MANIFESTS = [
2616
+ { file: "package.json", ecosystem: "Node.js" },
2617
+ { file: "pyproject.toml", ecosystem: "Python" },
2618
+ { file: "setup.py", ecosystem: "Python" },
2619
+ { file: "requirements.txt", ecosystem: "Python" },
2620
+ { file: "Cargo.toml", ecosystem: "Rust" }
2621
+ ];
2622
+ const EmptyDependencies = ({
2623
+ foundManifests = []
2624
+ }) => {
2625
+ const { theme: theme2 } = useTheme();
2626
+ const supportedFound = SUPPORTED_MANIFESTS.filter(
2627
+ (m2) => foundManifests.some((f2) => f2.endsWith(m2.file))
2628
+ );
2629
+ const unsupportedFound = foundManifests.filter(
2630
+ (f2) => !SUPPORTED_MANIFESTS.some((m2) => f2.endsWith(m2.file))
2631
+ );
2632
+ const hasFoundFiles = foundManifests.length > 0;
2633
+ return /* @__PURE__ */ jsxs(
2634
+ "div",
2635
+ {
2636
+ style: {
2637
+ padding: "32px 24px",
2638
+ color: theme2.colors.textSecondary,
2639
+ fontSize: theme2.fontSizes[1],
2640
+ fontFamily: theme2.fonts.body,
2641
+ display: "flex",
2642
+ flexDirection: "column",
2643
+ alignItems: "center",
2644
+ justifyContent: "center",
2645
+ gap: "24px",
2646
+ height: "100%",
2647
+ minHeight: "200px"
2648
+ },
2649
+ children: [
2650
+ /* @__PURE__ */ jsxs(
2651
+ "div",
2652
+ {
2653
+ style: {
2654
+ display: "flex",
2655
+ alignItems: "center",
2656
+ gap: "8px",
2657
+ color: theme2.colors.text,
2658
+ fontSize: theme2.fontSizes[2]
2659
+ },
2660
+ children: [
2661
+ /* @__PURE__ */ jsx(Package$1, { size: 20 }),
2662
+ "No packages detected"
2663
+ ]
2664
+ }
2665
+ ),
2666
+ /* @__PURE__ */ jsxs(
2667
+ "div",
2668
+ {
2669
+ style: {
2670
+ display: "flex",
2671
+ gap: "24px",
2672
+ flexWrap: "wrap",
2673
+ justifyContent: "center"
2674
+ },
2675
+ children: [
2676
+ /* @__PURE__ */ jsxs(
2677
+ "div",
2678
+ {
2679
+ style: {
2680
+ display: "flex",
2681
+ flexDirection: "column",
2682
+ gap: "8px",
2683
+ padding: "16px",
2684
+ backgroundColor: theme2.colors.backgroundSecondary,
2685
+ borderRadius: "8px",
2686
+ border: `1px solid ${theme2.colors.border}`,
2687
+ minWidth: "180px"
2688
+ },
2689
+ children: [
2690
+ /* @__PURE__ */ jsx(
2691
+ "div",
2692
+ {
2693
+ style: {
2694
+ fontSize: theme2.fontSizes[0],
2695
+ fontWeight: theme2.fontWeights.semibold,
2696
+ color: theme2.colors.textSecondary,
2697
+ textTransform: "uppercase",
2698
+ letterSpacing: "0.5px"
2699
+ },
2700
+ children: "Found in project"
2701
+ }
2702
+ ),
2703
+ hasFoundFiles ? /* @__PURE__ */ jsxs(
2704
+ "div",
2705
+ {
2706
+ style: { display: "flex", flexDirection: "column", gap: "4px" },
2707
+ children: [
2708
+ supportedFound.map((m2) => /* @__PURE__ */ jsxs(
2709
+ "div",
2710
+ {
2711
+ style: {
2712
+ display: "flex",
2713
+ alignItems: "center",
2714
+ gap: "6px",
2715
+ fontSize: theme2.fontSizes[1]
2716
+ },
2717
+ children: [
2718
+ /* @__PURE__ */ jsx(FileCode$1, { size: 12, style: { color: theme2.colors.success } }),
2719
+ /* @__PURE__ */ jsx("span", { style: { color: theme2.colors.text }, children: m2.file }),
2720
+ /* @__PURE__ */ jsxs("span", { style: { opacity: 0.5 }, children: [
2721
+ "(",
2722
+ m2.ecosystem,
2723
+ ")"
2724
+ ] })
2725
+ ]
2726
+ },
2727
+ m2.file
2728
+ )),
2729
+ unsupportedFound.map((file) => /* @__PURE__ */ jsxs(
2730
+ "div",
2731
+ {
2732
+ style: {
2733
+ display: "flex",
2734
+ alignItems: "center",
2735
+ gap: "6px",
2736
+ fontSize: theme2.fontSizes[1]
2737
+ },
2738
+ children: [
2739
+ /* @__PURE__ */ jsx(X$3, { size: 12, style: { color: theme2.colors.warning } }),
2740
+ /* @__PURE__ */ jsx("span", { style: { color: theme2.colors.text }, children: file.split("/").pop() }),
2741
+ /* @__PURE__ */ jsx("span", { style: { opacity: 0.5 }, children: "(not supported)" })
2742
+ ]
2743
+ },
2744
+ file
2745
+ ))
2746
+ ]
2747
+ }
2748
+ ) : /* @__PURE__ */ jsx(
2749
+ "div",
2750
+ {
2751
+ style: {
2752
+ fontSize: theme2.fontSizes[1],
2753
+ fontStyle: "italic",
2754
+ opacity: 0.6
2755
+ },
2756
+ children: "No manifest files found"
2757
+ }
2758
+ )
2759
+ ]
2760
+ }
2761
+ ),
2762
+ /* @__PURE__ */ jsxs(
2763
+ "div",
2764
+ {
2765
+ style: {
2766
+ display: "flex",
2767
+ flexDirection: "column",
2768
+ gap: "8px",
2769
+ padding: "16px",
2770
+ backgroundColor: theme2.colors.backgroundSecondary,
2771
+ borderRadius: "8px",
2772
+ border: `1px solid ${theme2.colors.border}`,
2773
+ minWidth: "180px"
2774
+ },
2775
+ children: [
2776
+ /* @__PURE__ */ jsx(
2777
+ "div",
2778
+ {
2779
+ style: {
2780
+ fontSize: theme2.fontSizes[0],
2781
+ fontWeight: theme2.fontWeights.semibold,
2782
+ color: theme2.colors.textSecondary,
2783
+ textTransform: "uppercase",
2784
+ letterSpacing: "0.5px"
2785
+ },
2786
+ children: "Supported"
2787
+ }
2788
+ ),
2789
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: SUPPORTED_MANIFESTS.map((m2) => /* @__PURE__ */ jsxs(
2790
+ "div",
2791
+ {
2792
+ style: {
2793
+ display: "flex",
2794
+ alignItems: "center",
2795
+ gap: "6px",
2796
+ fontSize: theme2.fontSizes[1]
2797
+ },
2798
+ children: [
2799
+ /* @__PURE__ */ jsx(Check$1, { size: 12, style: { opacity: 0.4 } }),
2800
+ /* @__PURE__ */ jsx("span", { children: m2.file })
2801
+ ]
2802
+ },
2803
+ m2.file
2804
+ )) })
2805
+ ]
2806
+ }
2807
+ )
2808
+ ]
2809
+ }
2810
+ )
2811
+ ]
2812
+ }
2813
+ );
2814
+ };
2580
2815
  function parseEnvJson(content2) {
2581
2816
  const parsed = JSON.parse(content2);
2582
2817
  if (!parsed.variables || !Array.isArray(parsed.variables)) {
@@ -2686,28 +2921,72 @@ const dependencyTypeOrder = {
2686
2921
  production: 1,
2687
2922
  development: 2
2688
2923
  };
2924
+ function parsePackageName(name2) {
2925
+ if (name2.startsWith("@")) {
2926
+ const slashIndex = name2.indexOf("/");
2927
+ if (slashIndex > 0) {
2928
+ return {
2929
+ namespace: name2.substring(0, slashIndex),
2930
+ packageName: name2.substring(slashIndex + 1)
2931
+ };
2932
+ }
2933
+ }
2934
+ return { packageName: name2 };
2935
+ }
2689
2936
  function extractDependencies(packageLayer) {
2690
2937
  const { dependencies, devDependencies, peerDependencies } = packageLayer.packageData;
2691
- const items = [];
2938
+ const depMap = /* @__PURE__ */ new Map();
2939
+ if (peerDependencies) {
2940
+ Object.entries(peerDependencies).forEach(([name2, version]) => {
2941
+ const existing = depMap.get(name2);
2942
+ if (existing) {
2943
+ existing.types.add("peer");
2944
+ } else {
2945
+ depMap.set(name2, { version, types: /* @__PURE__ */ new Set(["peer"]) });
2946
+ }
2947
+ });
2948
+ }
2692
2949
  if (dependencies) {
2693
2950
  Object.entries(dependencies).forEach(([name2, version]) => {
2694
- items.push({ name: name2, version, dependencyType: "production" });
2951
+ const existing = depMap.get(name2);
2952
+ if (existing) {
2953
+ existing.types.add("production");
2954
+ } else {
2955
+ depMap.set(name2, { version, types: /* @__PURE__ */ new Set(["production"]) });
2956
+ }
2695
2957
  });
2696
2958
  }
2697
2959
  if (devDependencies) {
2698
2960
  Object.entries(devDependencies).forEach(([name2, version]) => {
2699
- items.push({ name: name2, version, dependencyType: "development" });
2700
- });
2701
- }
2702
- if (peerDependencies) {
2703
- Object.entries(peerDependencies).forEach(([name2, version]) => {
2704
- items.push({ name: name2, version, dependencyType: "peer" });
2961
+ const existing = depMap.get(name2);
2962
+ if (existing) {
2963
+ existing.types.add("development");
2964
+ } else {
2965
+ depMap.set(name2, { version, types: /* @__PURE__ */ new Set(["development"]) });
2966
+ }
2705
2967
  });
2706
2968
  }
2969
+ const items = Array.from(depMap.entries()).map(
2970
+ ([name2, { version, types: types2 }]) => {
2971
+ const typesArray = Array.from(types2).sort(
2972
+ (a2, b2) => dependencyTypeOrder[a2] - dependencyTypeOrder[b2]
2973
+ );
2974
+ const { namespace: namespace2, packageName } = parsePackageName(name2);
2975
+ return {
2976
+ name: name2,
2977
+ version,
2978
+ dependencyType: typesArray[0],
2979
+ // Primary type for sorting
2980
+ dependencyTypes: typesArray,
2981
+ namespace: namespace2,
2982
+ packageName
2983
+ };
2984
+ }
2985
+ );
2707
2986
  return items.sort((a2, b2) => {
2708
2987
  const typeCompare = dependencyTypeOrder[a2.dependencyType] - dependencyTypeOrder[b2.dependencyType];
2709
2988
  if (typeCompare !== 0) return typeCompare;
2710
- return a2.name.localeCompare(b2.name);
2989
+ return a2.packageName.localeCompare(b2.packageName);
2711
2990
  });
2712
2991
  }
2713
2992
  const PackageDetailCard = ({
@@ -3349,25 +3628,7 @@ const PackageDetailCard = ({
3349
3628
  height: "100%"
3350
3629
  },
3351
3630
  children: [
3352
- dependencyItems.length === 0 ? /* @__PURE__ */ jsxs(
3353
- "div",
3354
- {
3355
- style: {
3356
- padding: "12px",
3357
- color: theme2.colors.textSecondary,
3358
- fontSize: theme2.fontSizes[1],
3359
- fontFamily: theme2.fonts.body,
3360
- display: "flex",
3361
- alignItems: "center",
3362
- justifyContent: "center",
3363
- gap: "8px"
3364
- },
3365
- children: [
3366
- /* @__PURE__ */ jsx(Package$1, { size: 16 }),
3367
- "No dependencies"
3368
- ]
3369
- }
3370
- ) : /* @__PURE__ */ jsxs(Fragment, { children: [
3631
+ dependencyItems.length === 0 ? /* @__PURE__ */ jsx(EmptyDependencies, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
3371
3632
  /* @__PURE__ */ jsx(
3372
3633
  "div",
3373
3634
  {
@@ -3381,7 +3642,8 @@ const PackageDetailCard = ({
3381
3642
  onToggleFilter: handleToggleFilter,
3382
3643
  searchQuery,
3383
3644
  onSearchChange: setSearchQuery,
3384
- counts: depCounts
3645
+ counts: depCounts,
3646
+ showSearch: dependencyItems.length > 10
3385
3647
  }
3386
3648
  )
3387
3649
  }
@@ -3906,25 +4168,7 @@ const PackageDetailCard = ({
3906
4168
  height: "100%"
3907
4169
  },
3908
4170
  children: [
3909
- dependencyItems.length === 0 ? /* @__PURE__ */ jsxs(
3910
- "div",
3911
- {
3912
- style: {
3913
- padding: "12px",
3914
- color: theme2.colors.textSecondary,
3915
- fontSize: theme2.fontSizes[1],
3916
- fontFamily: theme2.fonts.body,
3917
- display: "flex",
3918
- alignItems: "center",
3919
- justifyContent: "center",
3920
- gap: "8px"
3921
- },
3922
- children: [
3923
- /* @__PURE__ */ jsx(Package$1, { size: 16 }),
3924
- "No dependencies"
3925
- ]
3926
- }
3927
- ) : /* @__PURE__ */ jsxs(Fragment, { children: [
4171
+ dependencyItems.length === 0 ? /* @__PURE__ */ jsx(EmptyDependencies, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
3928
4172
  /* @__PURE__ */ jsx(
3929
4173
  "div",
3930
4174
  {
@@ -3938,7 +4182,8 @@ const PackageDetailCard = ({
3938
4182
  onToggleFilter: handleToggleFilter,
3939
4183
  searchQuery,
3940
4184
  onSearchChange: setSearchQuery,
3941
- counts: depCounts
4185
+ counts: depCounts,
4186
+ showSearch: dependencyItems.length > 10
3942
4187
  }
3943
4188
  )
3944
4189
  }
@@ -4256,7 +4501,6 @@ const PackageSummaryCard = ({
4256
4501
  const PackageCompositionPanelContent = ({
4257
4502
  packages,
4258
4503
  isLoading = false,
4259
- emptyMessage = "No packages detected",
4260
4504
  onCommandClick,
4261
4505
  onConfigClick,
4262
4506
  onPackageClick,
@@ -4297,18 +4541,7 @@ const PackageCompositionPanelContent = ({
4297
4541
  );
4298
4542
  }
4299
4543
  if (packages.length === 0) {
4300
- return /* @__PURE__ */ jsx(
4301
- "div",
4302
- {
4303
- style: {
4304
- padding: "20px",
4305
- textAlign: "center",
4306
- color: theme2.colors.textSecondary,
4307
- fontFamily: theme2.fonts.body
4308
- },
4309
- children: emptyMessage
4310
- }
4311
- );
4544
+ return /* @__PURE__ */ jsx(EmptyDependencies, {});
4312
4545
  }
4313
4546
  if (packages.length === 1) {
4314
4547
  return /* @__PURE__ */ jsx(
@@ -105576,18 +105809,18 @@ var ProxyTracer = (
105576
105809
  return this._getTracer().startSpan(name2, options, context2);
105577
105810
  };
105578
105811
  ProxyTracer2.prototype.startActiveSpan = function(_name, _options, _context, _fn) {
105579
- var tracer2 = this._getTracer();
105580
- return Reflect.apply(tracer2.startActiveSpan, tracer2, arguments);
105812
+ var tracer = this._getTracer();
105813
+ return Reflect.apply(tracer.startActiveSpan, tracer, arguments);
105581
105814
  };
105582
105815
  ProxyTracer2.prototype._getTracer = function() {
105583
105816
  if (this._delegate) {
105584
105817
  return this._delegate;
105585
105818
  }
105586
- var tracer2 = this._provider.getDelegateTracer(this.name, this.version, this.options);
105587
- if (!tracer2) {
105819
+ var tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);
105820
+ if (!tracer) {
105588
105821
  return NOOP_TRACER;
105589
105822
  }
105590
- this._delegate = tracer2;
105823
+ this._delegate = tracer;
105591
105824
  return this._delegate;
105592
105825
  };
105593
105826
  return ProxyTracer2;
@@ -105943,7 +106176,7 @@ const browserExt = {
105943
106176
  },
105944
106177
  test: () => true,
105945
106178
  load: async () => {
105946
- await import("./browserAll-Cr8EGZ6x.js");
106179
+ await import("./browserAll-B0PE4Ly2.js");
105947
106180
  }
105948
106181
  };
105949
106182
  const webworkerExt = {
@@ -105954,7 +106187,7 @@ const webworkerExt = {
105954
106187
  },
105955
106188
  test: () => typeof self !== "undefined" && self.WorkerGlobalScope !== void 0,
105956
106189
  load: async () => {
105957
- await import("./webworkerAll-DmkQ4StC.js");
106190
+ await import("./webworkerAll-BBVbOe1V.js");
105958
106191
  }
105959
106192
  };
105960
106193
  class ObservablePoint {
@@ -118197,19 +118430,19 @@ async function autoDetectRenderer(options) {
118197
118430
  for (let i2 = 0; i2 < preferredOrder.length; i2++) {
118198
118431
  const rendererType = preferredOrder[i2];
118199
118432
  if (rendererType === "webgpu" && await isWebGPUSupported()) {
118200
- const { WebGPURenderer } = await import("./WebGPURenderer-kV50nNAY.js");
118433
+ const { WebGPURenderer } = await import("./WebGPURenderer-Bjpg8hkG.js");
118201
118434
  RendererClass = WebGPURenderer;
118202
118435
  finalOptions = { ...options, ...options.webgpu };
118203
118436
  break;
118204
118437
  } else if (rendererType === "webgl" && isWebGLSupported(
118205
118438
  options.failIfMajorPerformanceCaveat ?? AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat
118206
118439
  )) {
118207
- const { WebGLRenderer } = await import("./WebGLRenderer-CuaFmyj0.js");
118440
+ const { WebGLRenderer } = await import("./WebGLRenderer-9uzpEisE.js");
118208
118441
  RendererClass = WebGLRenderer;
118209
118442
  finalOptions = { ...options, ...options.webgl };
118210
118443
  break;
118211
118444
  } else if (rendererType === "canvas") {
118212
- const { CanvasRenderer } = await import("./CanvasRenderer-CGAV4ORs.js");
118445
+ const { CanvasRenderer } = await import("./CanvasRenderer-ChUHHBzp.js");
118213
118446
  RendererClass = CanvasRenderer;
118214
118447
  finalOptions = { ...options, ...options.canvasOptions };
118215
118448
  break;
@@ -133383,6 +133616,7 @@ class IsometricInteractionManager {
133383
133616
  this.selectedNodeId = null;
133384
133617
  this.draggingEnabled = true;
133385
133618
  this.mapBounds = null;
133619
+ this.clickConsumedBySprite = false;
133386
133620
  this.hoverColor = 16776960;
133387
133621
  this.onGlobalPointerMove = (event) => {
133388
133622
  var _a, _b;
@@ -133443,6 +133677,25 @@ class IsometricInteractionManager {
133443
133677
  this.events = events;
133444
133678
  this.mapBounds = config.mapBounds || null;
133445
133679
  this.selectedColor = config.selectedColor ?? 3900150;
133680
+ this.setupBackgroundDeselect();
133681
+ }
133682
+ /**
133683
+ * Set up background click handler to deselect when clicking on empty space
133684
+ */
133685
+ setupBackgroundDeselect() {
133686
+ const eventTarget = this.viewport || this.worldContainer;
133687
+ if (!eventTarget) return;
133688
+ eventTarget.eventMode = "static";
133689
+ eventTarget.on("pointerdown", () => {
133690
+ this.clickConsumedBySprite = false;
133691
+ });
133692
+ eventTarget.on("pointerup", () => {
133693
+ var _a, _b;
133694
+ if (!this.clickConsumedBySprite && this.selectedNodeId) {
133695
+ this.setSelected(null);
133696
+ (_b = (_a = this.events).onClick) == null ? void 0 : _b.call(_a, null);
133697
+ }
133698
+ });
133446
133699
  }
133447
133700
  /**
133448
133701
  * Register a sprite for interaction
@@ -133499,6 +133752,7 @@ class IsometricInteractionManager {
133499
133752
  var _a, _b;
133500
133753
  if (!this.draggingEnabled) return;
133501
133754
  event.stopPropagation();
133755
+ this.clickConsumedBySprite = true;
133502
133756
  this.dragState = {
133503
133757
  nodeId,
133504
133758
  instance,
@@ -135528,7 +135782,7 @@ function calculateAgingMetrics(lastEditedAt) {
135528
135782
  // Store for region grouping
135529
135783
  };
135530
135784
  }
135531
- const tracer = trace.getTracer("collection-map-panel", "0.6.9");
135785
+ const getTracer = () => trace.getTracer("collection-map-panel", "0.6.9");
135532
135786
  const CollectionMapPanelContent = ({
135533
135787
  collection,
135534
135788
  repositories,
@@ -135755,83 +136009,70 @@ This indicates a sprite was rendered without valid backing data.`
135755
136009
  showVisualFeedback: true
135756
136010
  });
135757
136011
  const nodes = useMemo(() => {
135758
- return tracer.startActiveSpan("collection-map.convert-nodes", (span) => {
135759
- try {
135760
- span.setAttribute("collection.id", collection.id);
135761
- span.setAttribute("memberships.count", collection.members.length);
135762
- span.setAttribute("repositories.count", repositories.length);
135763
- const memberNodes = collection.members.map((membership) => {
135764
- var _a2, _b, _c, _d, _e2, _f, _g;
135765
- const repo = repositories.find((r2) => {
135766
- var _a3;
135767
- const repoId = ((_a3 = r2.github) == null ? void 0 : _a3.id) || r2.name;
135768
- return repoId === membership.repositoryId;
135769
- });
135770
- if (!repo) {
135771
- console.warn(
135772
- "[nodes memo] No repository found for membership:",
135773
- membership.repositoryId
135774
- );
135775
- return null;
135776
- }
135777
- let category;
135778
- if (repo.github) {
135779
- category = "git-repo";
135780
- } else {
135781
- category = repo.theme || "git-repo";
135782
- }
135783
- let language2;
135784
- if (repo.github) {
135785
- language2 = repo.github.primaryLanguage;
135786
- }
135787
- const importance = ((_a2 = membership.metadata) == null ? void 0 : _a2.pinned) ? 95 : 75;
135788
- let size = calculateRepositorySize(repo.metrics);
135789
- const aging = calculateAgingMetrics((_b = repo.metrics) == null ? void 0 : _b.lastEditedAt);
135790
- const packages = extractPackageInfo(repo);
135791
- const stars = (_c = repo.github) == null ? void 0 : _c.stars;
135792
- if (stars && stars > 0) {
135793
- const decorationBonus = getDecorationSizeBonus(stars);
135794
- size = size + decorationBonus;
135795
- }
135796
- const collaborators = (_d = repo.metrics) == null ? void 0 : _d.contributors;
135797
- if (collaborators && collaborators > 0) {
135798
- const decorationBonus = getCollaboratorDecorationSizeBonus(collaborators);
135799
- size = size + decorationBonus;
135800
- }
135801
- const node2 = {
135802
- id: membership.repositoryId,
135803
- name: repo.name,
135804
- category,
135805
- language: language2,
135806
- // Pass language for color-based visualization
135807
- importance,
135808
- size,
135809
- aging,
135810
- // Pass aging metrics for visual weathering
135811
- packages,
135812
- // Package subdivision data
135813
- stars,
135814
- // GitHub star count for decorations
135815
- collaborators,
135816
- // Contributor count for community space decorations
135817
- dependencies: dependencies[membership.repositoryId] || [],
135818
- isRoot: ((_e2 = membership.metadata) == null ? void 0 : _e2.pinned) || false,
135819
- regionId: (_f = membership.metadata) == null ? void 0 : _f.regionId,
135820
- // Preserve region assignment
135821
- layout: (_g = membership.metadata) == null ? void 0 : _g.layout
135822
- // Pass saved position data
135823
- };
135824
- return node2;
135825
- }).filter((n2) => n2 !== null);
135826
- span.setAttribute("nodes.created", memberNodes.length);
135827
- span.end();
135828
- return memberNodes;
135829
- } catch (error) {
135830
- span.recordException(error);
135831
- span.end();
135832
- throw error;
136012
+ const memberNodes = collection.members.map((membership) => {
136013
+ var _a2, _b, _c, _d, _e2, _f, _g;
136014
+ const repo = repositories.find((r2) => {
136015
+ var _a3;
136016
+ const repoId = ((_a3 = r2.github) == null ? void 0 : _a3.id) || r2.name;
136017
+ return repoId === membership.repositoryId;
136018
+ });
136019
+ if (!repo) {
136020
+ console.warn(
136021
+ "[nodes memo] No repository found for membership:",
136022
+ membership.repositoryId
136023
+ );
136024
+ return null;
135833
136025
  }
135834
- });
136026
+ let category;
136027
+ if (repo.github) {
136028
+ category = "git-repo";
136029
+ } else {
136030
+ category = repo.theme || "git-repo";
136031
+ }
136032
+ let language2;
136033
+ if (repo.github) {
136034
+ language2 = repo.github.primaryLanguage;
136035
+ }
136036
+ const importance = ((_a2 = membership.metadata) == null ? void 0 : _a2.pinned) ? 95 : 75;
136037
+ let size = calculateRepositorySize(repo.metrics);
136038
+ const aging = calculateAgingMetrics((_b = repo.metrics) == null ? void 0 : _b.lastEditedAt);
136039
+ const packages = extractPackageInfo(repo);
136040
+ const stars = (_c = repo.github) == null ? void 0 : _c.stars;
136041
+ if (stars && stars > 0) {
136042
+ const decorationBonus = getDecorationSizeBonus(stars);
136043
+ size = size + decorationBonus;
136044
+ }
136045
+ const collaborators = (_d = repo.metrics) == null ? void 0 : _d.contributors;
136046
+ if (collaborators && collaborators > 0) {
136047
+ const decorationBonus = getCollaboratorDecorationSizeBonus(collaborators);
136048
+ size = size + decorationBonus;
136049
+ }
136050
+ const node2 = {
136051
+ id: membership.repositoryId,
136052
+ name: repo.name,
136053
+ category,
136054
+ language: language2,
136055
+ // Pass language for color-based visualization
136056
+ importance,
136057
+ size,
136058
+ aging,
136059
+ // Pass aging metrics for visual weathering
136060
+ packages,
136061
+ // Package subdivision data
136062
+ stars,
136063
+ // GitHub star count for decorations
136064
+ collaborators,
136065
+ // Contributor count for community space decorations
136066
+ dependencies: dependencies[membership.repositoryId] || [],
136067
+ isRoot: ((_e2 = membership.metadata) == null ? void 0 : _e2.pinned) || false,
136068
+ regionId: (_f = membership.metadata) == null ? void 0 : _f.regionId,
136069
+ // Preserve region assignment
136070
+ layout: (_g = membership.metadata) == null ? void 0 : _g.layout
136071
+ // Pass saved position data
136072
+ };
136073
+ return node2;
136074
+ }).filter((n2) => n2 !== null);
136075
+ return memberNodes;
135835
136076
  }, [collection.id, collection.members, repositories, dependencies]);
135836
136077
  const { validNodes, unplacedNodes } = useMemo(() => {
135837
136078
  const nodesWithPositions = nodes.filter(
@@ -135889,19 +136130,28 @@ This indicates a sprite was rendered without valid backing data.`
135889
136130
  return;
135890
136131
  }
135891
136132
  hasComputedLayout.current = true;
135892
- const span = tracer.startSpan("collection-map.initialize-layout");
136133
+ const span = getTracer().startSpan("collection-map.load");
135893
136134
  span.setAttribute("collection.id", collection.id);
135894
- span.setAttribute("nodes.count", nodes.length);
135895
- span.setAttribute("needs.regions", needsRegions);
135896
- span.setAttribute("needs.layout", needsLayout);
136135
+ span.addEvent("collection-map.convert-nodes", {
136136
+ "collection.id": collection.id,
136137
+ "memberships.count": collection.members.length,
136138
+ "repositories.count": repositories.length,
136139
+ "nodes.created": nodes.length
136140
+ });
135897
136141
  const map2 = nodesToUnifiedOverworldMap(nodes, {
135898
136142
  regionLayout,
135899
136143
  customRegions
135900
136144
  });
135901
- span.setAttribute("regions.computed", map2.regions.length);
135902
- span.setAttribute("nodes.positioned", map2.nodes.length);
136145
+ span.addEvent("collection-map.initialize-layout", {
136146
+ "collection.id": collection.id,
136147
+ "nodes.count": nodes.length,
136148
+ "needs.regions": needsRegions,
136149
+ "needs.layout": needsLayout,
136150
+ "regions.computed": map2.regions.length,
136151
+ "nodes.positioned": map2.nodes.length
136152
+ });
135903
136153
  (async () => {
135904
- var _a2, _b, _c, _d;
136154
+ var _a2;
135905
136155
  try {
135906
136156
  const updates = {};
135907
136157
  if (needsRegions && map2.regions.length > 0) {
@@ -135940,11 +136190,6 @@ This indicates a sprite was rendered without valid backing data.`
135940
136190
  }
135941
136191
  }
135942
136192
  }
135943
- span.addEvent("batch-layout-update", {
135944
- "regions.count": ((_b = updates.regions) == null ? void 0 : _b.length) || 0,
135945
- "assignments.count": ((_c = updates.assignments) == null ? void 0 : _c.length) || 0,
135946
- "positions.count": ((_d = updates.positions) == null ? void 0 : _d.length) || 0
135947
- });
135948
136193
  await regionCallbacks.onBatchLayoutInitialized(collection.id, updates);
135949
136194
  span.setStatus({ code: 1 });
135950
136195
  span.end();
@@ -135955,7 +136200,15 @@ This indicates a sprite was rendered without valid backing data.`
135955
136200
  throw error;
135956
136201
  }
135957
136202
  })();
135958
- }, [collection.id, nodes, regionLayout, customRegions, regionCallbacks]);
136203
+ }, [
136204
+ collection.id,
136205
+ collection.members.length,
136206
+ repositories.length,
136207
+ nodes,
136208
+ regionLayout,
136209
+ customRegions,
136210
+ regionCallbacks
136211
+ ]);
135959
136212
  const handleViewportReady = useCallback((viewport) => {
135960
136213
  viewportRef.current = viewport;
135961
136214
  }, []);
@@ -137302,4 +137555,4 @@ export {
137302
137555
  UPDATE_PRIORITY as y,
137303
137556
  removeItems as z
137304
137557
  };
137305
- //# sourceMappingURL=index-g-V2DE-H.js.map
137558
+ //# sourceMappingURL=index-B5obJmUS.js.map