@industry-theme/repository-composition-panels 0.7.32 → 0.7.34

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 (30) hide show
  1. package/dist/{browserAll-BdeGLg9f.js → browserAll-BB02N7at.js} +3 -3
  2. package/dist/{browserAll-BdeGLg9f.js.map → browserAll-BB02N7at.js.map} +1 -1
  3. package/dist/{index-anN0r0mT.js → index-C1lQoGkG.js} +966 -505
  4. package/dist/{index-anN0r0mT.js.map → index-C1lQoGkG.js.map} +1 -1
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/{init-DsRm8ZpT.js → init-BHU8XeD1.js} +2 -2
  8. package/dist/{init-DsRm8ZpT.js.map → init-BHU8XeD1.js.map} +1 -1
  9. package/dist/panels/CollectionMapPanel.d.ts +3 -1
  10. package/dist/panels/CollectionMapPanel.d.ts.map +1 -1
  11. package/dist/panels/components/PackageLoadingGraph.d.ts.map +1 -1
  12. package/dist/panels/file-city-3d/FileCity3D.d.ts.map +1 -1
  13. package/dist/panels/file-city-3d/buildCityData.d.ts.map +1 -1
  14. package/dist/panels/local-project-grid/LocalProjectCard.d.ts +14 -0
  15. package/dist/panels/local-project-grid/LocalProjectCard.d.ts.map +1 -0
  16. package/dist/panels/local-project-grid/LocalProjectGridPanel.d.ts +22 -0
  17. package/dist/panels/local-project-grid/LocalProjectGridPanel.d.ts.map +1 -0
  18. package/dist/panels/local-project-grid/index.d.ts +7 -0
  19. package/dist/panels/local-project-grid/index.d.ts.map +1 -0
  20. package/dist/panels/local-project-grid/types.d.ts +47 -0
  21. package/dist/panels/local-project-grid/types.d.ts.map +1 -0
  22. package/dist/panels/overworld-map/components/CardBack.d.ts.map +1 -1
  23. package/dist/panels.bundle.js +5 -1
  24. package/dist/types/composition.d.ts +1 -1
  25. package/dist/types/composition.d.ts.map +1 -1
  26. package/dist/webworkerAll-CQOqrjDQ.js +3 -0
  27. package/dist/webworkerAll-CQOqrjDQ.js.map +1 -0
  28. package/package.json +4 -4
  29. package/dist/webworkerAll-DFGI4H02.js +0 -3
  30. package/dist/webworkerAll-DFGI4H02.js.map +0 -1
@@ -1737,8 +1737,7 @@ const PackageLoadingGraph = () => {
1737
1737
  backgroundColor: color2,
1738
1738
  opacity: 0.2,
1739
1739
  transform: "translateX(-50%)",
1740
- animation: `shadowPulse ${totalCycleDuration}s ease-in-out infinite`,
1741
- animationDelay: `${box.delay}s`
1740
+ animation: `shadowPulse ${totalCycleDuration}s ease-in-out ${box.delay}s infinite`
1742
1741
  }
1743
1742
  },
1744
1743
  `shadow-${box.id}`
@@ -10691,152 +10690,135 @@ function getAugmentedNamespace(n2) {
10691
10690
  return a2;
10692
10691
  }
10693
10692
  var withSelector = { exports: {} };
10694
- var withSelector_production = {};
10693
+ var withSelector_production_min = {};
10695
10694
  var shim = { exports: {} };
10696
- var useSyncExternalStoreShim_production = {};
10695
+ var useSyncExternalStoreShim_production_min = {};
10697
10696
  /**
10698
10697
  * @license React
10699
- * use-sync-external-store-shim.production.js
10698
+ * use-sync-external-store-shim.production.min.js
10700
10699
  *
10701
- * Copyright (c) Meta Platforms, Inc. and affiliates.
10700
+ * Copyright (c) Facebook, Inc. and its affiliates.
10702
10701
  *
10703
10702
  * This source code is licensed under the MIT license found in the
10704
10703
  * LICENSE file in the root directory of this source tree.
10705
10704
  */
10706
- var hasRequiredUseSyncExternalStoreShim_production;
10707
- function requireUseSyncExternalStoreShim_production() {
10708
- if (hasRequiredUseSyncExternalStoreShim_production) return useSyncExternalStoreShim_production;
10709
- hasRequiredUseSyncExternalStoreShim_production = 1;
10710
- var React = React2__default;
10711
- function is(x2, y2) {
10712
- return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
10713
- }
10714
- var objectIs = "function" === typeof Object.is ? Object.is : is, useState2 = React.useState, useEffect2 = React.useEffect, useLayoutEffect2 = React.useLayoutEffect, useDebugValue2 = React.useDebugValue;
10715
- function useSyncExternalStore$2(subscribe, getSnapshot) {
10716
- var value = getSnapshot(), _useState = useState2({ inst: { value, getSnapshot } }), inst = _useState[0].inst, forceUpdate = _useState[1];
10717
- useLayoutEffect2(
10718
- function() {
10719
- inst.value = value;
10720
- inst.getSnapshot = getSnapshot;
10721
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
10722
- },
10723
- [subscribe, value, getSnapshot]
10724
- );
10725
- useEffect2(
10726
- function() {
10727
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
10728
- return subscribe(function() {
10729
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
10730
- });
10731
- },
10732
- [subscribe]
10733
- );
10734
- useDebugValue2(value);
10735
- return value;
10705
+ var hasRequiredUseSyncExternalStoreShim_production_min;
10706
+ function requireUseSyncExternalStoreShim_production_min() {
10707
+ if (hasRequiredUseSyncExternalStoreShim_production_min) return useSyncExternalStoreShim_production_min;
10708
+ hasRequiredUseSyncExternalStoreShim_production_min = 1;
10709
+ var e2 = React2__default;
10710
+ function h2(a2, b2) {
10711
+ return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2;
10712
+ }
10713
+ var k2 = "function" === typeof Object.is ? Object.is : h2, l2 = e2.useState, m2 = e2.useEffect, n2 = e2.useLayoutEffect, p2 = e2.useDebugValue;
10714
+ function q2(a2, b2) {
10715
+ var d2 = b2(), f2 = l2({ inst: { value: d2, getSnapshot: b2 } }), c2 = f2[0].inst, g2 = f2[1];
10716
+ n2(function() {
10717
+ c2.value = d2;
10718
+ c2.getSnapshot = b2;
10719
+ r2(c2) && g2({ inst: c2 });
10720
+ }, [a2, d2, b2]);
10721
+ m2(function() {
10722
+ r2(c2) && g2({ inst: c2 });
10723
+ return a2(function() {
10724
+ r2(c2) && g2({ inst: c2 });
10725
+ });
10726
+ }, [a2]);
10727
+ p2(d2);
10728
+ return d2;
10736
10729
  }
10737
- function checkIfSnapshotChanged(inst) {
10738
- var latestGetSnapshot = inst.getSnapshot;
10739
- inst = inst.value;
10730
+ function r2(a2) {
10731
+ var b2 = a2.getSnapshot;
10732
+ a2 = a2.value;
10740
10733
  try {
10741
- var nextValue = latestGetSnapshot();
10742
- return !objectIs(inst, nextValue);
10743
- } catch (error) {
10734
+ var d2 = b2();
10735
+ return !k2(a2, d2);
10736
+ } catch (f2) {
10744
10737
  return true;
10745
10738
  }
10746
10739
  }
10747
- function useSyncExternalStore$1(subscribe, getSnapshot) {
10748
- return getSnapshot();
10740
+ function t2(a2, b2) {
10741
+ return b2();
10749
10742
  }
10750
- var shim2 = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
10751
- useSyncExternalStoreShim_production.useSyncExternalStore = void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim2;
10752
- return useSyncExternalStoreShim_production;
10743
+ var u2 = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? t2 : q2;
10744
+ useSyncExternalStoreShim_production_min.useSyncExternalStore = void 0 !== e2.useSyncExternalStore ? e2.useSyncExternalStore : u2;
10745
+ return useSyncExternalStoreShim_production_min;
10753
10746
  }
10754
10747
  var hasRequiredShim;
10755
10748
  function requireShim() {
10756
10749
  if (hasRequiredShim) return shim.exports;
10757
10750
  hasRequiredShim = 1;
10758
10751
  {
10759
- shim.exports = requireUseSyncExternalStoreShim_production();
10752
+ shim.exports = requireUseSyncExternalStoreShim_production_min();
10760
10753
  }
10761
10754
  return shim.exports;
10762
10755
  }
10763
10756
  /**
10764
10757
  * @license React
10765
- * use-sync-external-store-shim/with-selector.production.js
10758
+ * use-sync-external-store-shim/with-selector.production.min.js
10766
10759
  *
10767
- * Copyright (c) Meta Platforms, Inc. and affiliates.
10760
+ * Copyright (c) Facebook, Inc. and its affiliates.
10768
10761
  *
10769
10762
  * This source code is licensed under the MIT license found in the
10770
10763
  * LICENSE file in the root directory of this source tree.
10771
10764
  */
10772
- var hasRequiredWithSelector_production;
10773
- function requireWithSelector_production() {
10774
- if (hasRequiredWithSelector_production) return withSelector_production;
10775
- hasRequiredWithSelector_production = 1;
10776
- var React = React2__default, shim2 = requireShim();
10777
- function is(x2, y2) {
10778
- return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
10779
- }
10780
- var objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore = shim2.useSyncExternalStore, useRef2 = React.useRef, useEffect2 = React.useEffect, useMemo2 = React.useMemo, useDebugValue2 = React.useDebugValue;
10781
- withSelector_production.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector2, isEqual) {
10782
- var instRef = useRef2(null);
10783
- if (null === instRef.current) {
10784
- var inst = { hasValue: false, value: null };
10785
- instRef.current = inst;
10786
- } else inst = instRef.current;
10787
- instRef = useMemo2(
10788
- function() {
10789
- function memoizedSelector(nextSnapshot) {
10790
- if (!hasMemo) {
10791
- hasMemo = true;
10792
- memoizedSnapshot = nextSnapshot;
10793
- nextSnapshot = selector2(nextSnapshot);
10794
- if (void 0 !== isEqual && inst.hasValue) {
10795
- var currentSelection = inst.value;
10796
- if (isEqual(currentSelection, nextSnapshot))
10797
- return memoizedSelection = currentSelection;
10798
- }
10799
- return memoizedSelection = nextSnapshot;
10800
- }
10801
- currentSelection = memoizedSelection;
10802
- if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;
10803
- var nextSelection = selector2(nextSnapshot);
10804
- if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
10805
- return memoizedSnapshot = nextSnapshot, currentSelection;
10806
- memoizedSnapshot = nextSnapshot;
10807
- return memoizedSelection = nextSelection;
10808
- }
10809
- var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
10810
- return [
10811
- function() {
10812
- return memoizedSelector(getSnapshot());
10813
- },
10814
- null === maybeGetServerSnapshot ? void 0 : function() {
10815
- return memoizedSelector(maybeGetServerSnapshot());
10765
+ var hasRequiredWithSelector_production_min;
10766
+ function requireWithSelector_production_min() {
10767
+ if (hasRequiredWithSelector_production_min) return withSelector_production_min;
10768
+ hasRequiredWithSelector_production_min = 1;
10769
+ var h2 = React2__default, n2 = requireShim();
10770
+ function p2(a2, b2) {
10771
+ return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2;
10772
+ }
10773
+ var q2 = "function" === typeof Object.is ? Object.is : p2, r2 = n2.useSyncExternalStore, t2 = h2.useRef, u2 = h2.useEffect, v2 = h2.useMemo, w2 = h2.useDebugValue;
10774
+ withSelector_production_min.useSyncExternalStoreWithSelector = function(a2, b2, e2, l2, g2) {
10775
+ var c2 = t2(null);
10776
+ if (null === c2.current) {
10777
+ var f2 = { hasValue: false, value: null };
10778
+ c2.current = f2;
10779
+ } else f2 = c2.current;
10780
+ c2 = v2(function() {
10781
+ function a3(a4) {
10782
+ if (!c3) {
10783
+ c3 = true;
10784
+ d3 = a4;
10785
+ a4 = l2(a4);
10786
+ if (void 0 !== g2 && f2.hasValue) {
10787
+ var b3 = f2.value;
10788
+ if (g2(b3, a4)) return k2 = b3;
10816
10789
  }
10817
- ];
10818
- },
10819
- [getSnapshot, getServerSnapshot, selector2, isEqual]
10820
- );
10821
- var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
10822
- useEffect2(
10823
- function() {
10824
- inst.hasValue = true;
10825
- inst.value = value;
10826
- },
10827
- [value]
10828
- );
10829
- useDebugValue2(value);
10830
- return value;
10831
- };
10832
- return withSelector_production;
10790
+ return k2 = a4;
10791
+ }
10792
+ b3 = k2;
10793
+ if (q2(d3, a4)) return b3;
10794
+ var e3 = l2(a4);
10795
+ if (void 0 !== g2 && g2(b3, e3)) return b3;
10796
+ d3 = a4;
10797
+ return k2 = e3;
10798
+ }
10799
+ var c3 = false, d3, k2, m2 = void 0 === e2 ? null : e2;
10800
+ return [function() {
10801
+ return a3(b2());
10802
+ }, null === m2 ? void 0 : function() {
10803
+ return a3(m2());
10804
+ }];
10805
+ }, [b2, e2, l2, g2]);
10806
+ var d2 = r2(a2, c2[0], c2[1]);
10807
+ u2(function() {
10808
+ f2.hasValue = true;
10809
+ f2.value = d2;
10810
+ }, [d2]);
10811
+ w2(d2);
10812
+ return d2;
10813
+ };
10814
+ return withSelector_production_min;
10833
10815
  }
10834
10816
  var hasRequiredWithSelector;
10835
10817
  function requireWithSelector() {
10836
10818
  if (hasRequiredWithSelector) return withSelector.exports;
10837
10819
  hasRequiredWithSelector = 1;
10838
10820
  {
10839
- withSelector.exports = requireWithSelector_production();
10821
+ withSelector.exports = requireWithSelector_production_min();
10840
10822
  }
10841
10823
  return withSelector.exports;
10842
10824
  }
@@ -10902,7 +10884,8 @@ function shallow$1(objA, objB) {
10902
10884
  return false;
10903
10885
  }
10904
10886
  if (objA instanceof Map && objB instanceof Map) {
10905
- if (objA.size !== objB.size) return false;
10887
+ if (objA.size !== objB.size)
10888
+ return false;
10906
10889
  for (const [key, value] of objA) {
10907
10890
  if (!Object.is(value, objB.get(key))) {
10908
10891
  return false;
@@ -10911,7 +10894,8 @@ function shallow$1(objA, objB) {
10911
10894
  return true;
10912
10895
  }
10913
10896
  if (objA instanceof Set && objB instanceof Set) {
10914
- if (objA.size !== objB.size) return false;
10897
+ if (objA.size !== objB.size)
10898
+ return false;
10915
10899
  for (const value of objA) {
10916
10900
  if (!objB.has(value)) {
10917
10901
  return false;
@@ -10923,8 +10907,8 @@ function shallow$1(objA, objB) {
10923
10907
  if (keysA.length !== Object.keys(objB).length) {
10924
10908
  return false;
10925
10909
  }
10926
- for (const keyA of keysA) {
10927
- if (!Object.prototype.hasOwnProperty.call(objB, keyA) || !Object.is(objA[keyA], objB[keyA])) {
10910
+ for (let i2 = 0; i2 < keysA.length; i2++) {
10911
+ if (!Object.prototype.hasOwnProperty.call(objB, keysA[i2]) || !Object.is(objA[keysA[i2]], objB[keysA[i2]])) {
10928
10912
  return false;
10929
10913
  }
10930
10914
  }
@@ -106230,7 +106214,7 @@ const browserExt = {
106230
106214
  },
106231
106215
  test: () => true,
106232
106216
  load: async () => {
106233
- await import("./browserAll-BdeGLg9f.js");
106217
+ await import("./browserAll-BB02N7at.js");
106234
106218
  }
106235
106219
  };
106236
106220
  const webworkerExt = {
@@ -106241,7 +106225,7 @@ const webworkerExt = {
106241
106225
  },
106242
106226
  test: () => typeof self !== "undefined" && self.WorkerGlobalScope !== void 0,
106243
106227
  load: async () => {
106244
- await import("./webworkerAll-DFGI4H02.js");
106228
+ await import("./webworkerAll-CQOqrjDQ.js");
106245
106229
  }
106246
106230
  };
106247
106231
  class ObservablePoint {
@@ -154423,346 +154407,6 @@ const CardLayout = ({
154423
154407
  };
154424
154408
  const ISO_TILE_WIDTH$1 = 64;
154425
154409
  const ISO_TILE_HEIGHT$1 = 32;
154426
- function getPackagePositions$1(count2, footprintWidth, footprintHeight) {
154427
- const positions = [];
154428
- const spacing = 0.18;
154429
- const yOffset = -footprintHeight * 0.15;
154430
- if (count2 === 2) {
154431
- positions.push(
154432
- { x: -footprintWidth * spacing, y: yOffset },
154433
- { x: footprintWidth * spacing, y: yOffset }
154434
- );
154435
- } else if (count2 === 3) {
154436
- positions.push(
154437
- {
154438
- x: -footprintWidth * spacing * 0.8,
154439
- y: -footprintHeight * spacing * 0.8 + yOffset
154440
- },
154441
- {
154442
- x: footprintWidth * spacing * 0.8,
154443
- y: -footprintHeight * spacing * 0.8 + yOffset
154444
- },
154445
- { x: 0, y: footprintHeight * spacing * 1 + yOffset }
154446
- );
154447
- } else if (count2 === 4) {
154448
- positions.push(
154449
- { x: 0, y: -footprintHeight * spacing + yOffset },
154450
- { x: -footprintWidth * spacing, y: yOffset },
154451
- { x: footprintWidth * spacing, y: yOffset },
154452
- { x: 0, y: footprintHeight * spacing + yOffset }
154453
- );
154454
- } else {
154455
- const cols = Math.ceil(Math.sqrt(count2));
154456
- const rows = Math.ceil(count2 / cols);
154457
- const cellWidth = footprintWidth * 0.7 / cols;
154458
- const cellHeight = footprintHeight * 0.7 / rows;
154459
- for (let i2 = 0; i2 < count2; i2++) {
154460
- const row2 = Math.floor(i2 / cols);
154461
- const col = i2 % cols;
154462
- const x2 = (col - (cols - 1) / 2) * cellWidth;
154463
- const y2 = (row2 - (rows - 1) / 2) * cellHeight;
154464
- positions.push({ x: x2, y: y2 });
154465
- }
154466
- }
154467
- return positions;
154468
- }
154469
- const RepoSprite = ({
154470
- size = 2,
154471
- color: color2 = 13789470,
154472
- packages,
154473
- files,
154474
- stars,
154475
- collaborators,
154476
- license,
154477
- label,
154478
- owner,
154479
- language: language2,
154480
- variant = "default",
154481
- cardTheme = "blue",
154482
- width = 200,
154483
- height = 200,
154484
- backgroundColor,
154485
- showBoundary = true,
154486
- boundaryColor = 16776960,
154487
- debug = false,
154488
- onPackageHover,
154489
- onPackageHoverEnd
154490
- }) => {
154491
- const { theme: theme2 } = useTheme();
154492
- const containerRef = useRef(null);
154493
- const appRef = useRef(null);
154494
- useEffect(() => {
154495
- if (!containerRef.current) return;
154496
- const init2 = async () => {
154497
- var _a;
154498
- const app = new Application();
154499
- await app.init({
154500
- width,
154501
- height,
154502
- backgroundAlpha: backgroundColor !== void 0 ? 1 : 0,
154503
- backgroundColor: backgroundColor ?? 0,
154504
- antialias: true,
154505
- resolution: 2,
154506
- autoDensity: true
154507
- });
154508
- (_a = containerRef.current) == null ? void 0 : _a.appendChild(app.canvas);
154509
- appRef.current = app;
154510
- const boundarySize = 4 * size;
154511
- const boundaryWidth = boundarySize * ISO_TILE_WIDTH$1;
154512
- const boundaryHeight = boundarySize * ISO_TILE_HEIGHT$1;
154513
- const padding = 0.9;
154514
- const scaleX = width * padding / boundaryWidth;
154515
- const scaleY = height * padding / boundaryHeight;
154516
- const scale = Math.min(scaleX, scaleY);
154517
- const mainContainer = new Container();
154518
- mainContainer.x = width / 2;
154519
- mainContainer.y = height / 2;
154520
- mainContainer.scale.set(scale);
154521
- app.stage.addChild(mainContainer);
154522
- if (showBoundary) {
154523
- const boundary = new Graphics();
154524
- boundary.strokeStyle = { width: 2, color: boundaryColor };
154525
- boundary.fillStyle = { color: boundaryColor, alpha: 0.1 };
154526
- boundary.beginPath();
154527
- boundary.moveTo(0, -boundaryHeight / 2);
154528
- boundary.lineTo(boundaryWidth / 2, 0);
154529
- boundary.lineTo(0, boundaryHeight / 2);
154530
- boundary.lineTo(-boundaryWidth / 2, 0);
154531
- boundary.closePath();
154532
- boundary.fill();
154533
- boundary.stroke();
154534
- mainContainer.addChild(boundary);
154535
- }
154536
- const ground = license ? generateLicenseGround(license, size) : generateNeutralGround(size);
154537
- mainContainer.addChild(ground);
154538
- if (packages && packages.length > 1) {
154539
- const positions = getPackagePositions$1(
154540
- packages.length,
154541
- boundaryWidth / 2,
154542
- boundaryHeight / 2
154543
- );
154544
- for (let i2 = 0; i2 < packages.length; i2++) {
154545
- const pkg = packages[i2];
154546
- const pos = positions[i2] || { x: 0, y: 0 };
154547
- const pkgColor = pkg.color ? parseColor$1(pkg.color) : parseColor$1(color2);
154548
- const pkgSize = (pkg.size || 1) * size * 0.4;
154549
- const buildingGraphics = generateBuildingSprite({
154550
- size: pkgSize,
154551
- color: pkgColor
154552
- });
154553
- buildingGraphics.x = pos.x;
154554
- buildingGraphics.y = pos.y;
154555
- buildingGraphics.eventMode = "static";
154556
- buildingGraphics.cursor = "pointer";
154557
- const originalTint = buildingGraphics.tint;
154558
- const packageName = pkg.name;
154559
- buildingGraphics.on("pointerover", () => {
154560
- buildingGraphics.tint = 8965375;
154561
- onPackageHover == null ? void 0 : onPackageHover(packageName);
154562
- });
154563
- buildingGraphics.on("pointerout", () => {
154564
- buildingGraphics.tint = originalTint;
154565
- onPackageHoverEnd == null ? void 0 : onPackageHoverEnd(packageName);
154566
- });
154567
- mainContainer.addChild(buildingGraphics);
154568
- }
154569
- } else {
154570
- const parsedColor = parseColor$1(color2);
154571
- const buildingGraphics = generateBuildingSprite({
154572
- size,
154573
- color: parsedColor
154574
- });
154575
- mainContainer.addChild(buildingGraphics);
154576
- }
154577
- if (license) {
154578
- const licenseSign = generateLicenseSign(license, {
154579
- name: label || "",
154580
- sizeMultiplier: size
154581
- });
154582
- const footprintHeight = boundaryHeight / 2;
154583
- licenseSign.y = footprintHeight * 0.75;
154584
- mainContainer.addChild(licenseSign);
154585
- }
154586
- if (stars && stars > 0) {
154587
- const tier = getStarTier(stars);
154588
- const scaleFactor = getStarScaleFactor(stars);
154589
- let starDecoration = null;
154590
- if (tier) {
154591
- const decorationColor = tier.color;
154592
- if (tier.decorationType === "flag") {
154593
- starDecoration = generateFlagSprite(decorationColor);
154594
- } else if (tier.decorationType === "trophy") {
154595
- starDecoration = generateTrophySprite(decorationColor);
154596
- } else if (tier.decorationType === "statue") {
154597
- starDecoration = generateStatueSprite(decorationColor);
154598
- }
154599
- }
154600
- if (starDecoration) {
154601
- const dim = { w: 8, h: 12 };
154602
- starDecoration.pivot.set(dim.w, dim.h);
154603
- starDecoration.scale.set(1.5 * scaleFactor);
154604
- starDecoration.x = -boundaryWidth / 4;
154605
- starDecoration.y = 0;
154606
- mainContainer.addChild(starDecoration);
154607
- }
154608
- }
154609
- if (collaborators && collaborators > 0) {
154610
- const tier = getCollaboratorTier(collaborators);
154611
- const scaleFactor = getCollaboratorScaleFactor(collaborators);
154612
- let collabDecoration = null;
154613
- if (tier) {
154614
- const decorationColor = tier.color;
154615
- if (tier.decorationType === "bench") {
154616
- collabDecoration = generateBenchSprite(decorationColor);
154617
- } else if (tier.decorationType === "pavilion") {
154618
- collabDecoration = generatePavilionSprite(decorationColor);
154619
- } else if (tier.decorationType === "gazebo") {
154620
- collabDecoration = generateGazeboSprite(decorationColor);
154621
- } else if (tier.decorationType === "bandstand") {
154622
- collabDecoration = generateBandstandSprite(decorationColor);
154623
- }
154624
- }
154625
- if (collabDecoration) {
154626
- const dim = { h: 12 };
154627
- collabDecoration.pivot.set(0, dim.h);
154628
- collabDecoration.scale.set(1.5 * scaleFactor);
154629
- collabDecoration.x = boundaryWidth / 4;
154630
- collabDecoration.y = 0;
154631
- mainContainer.addChild(collabDecoration);
154632
- }
154633
- }
154634
- if (debug) {
154635
- const { Graphics: Graphics2 } = await Promise.resolve().then(() => index);
154636
- const debugRect = new Graphics2();
154637
- debugRect.rect(-width / 2, -height / 2, width, height);
154638
- debugRect.stroke({ width: 1, color: 16711680 });
154639
- mainContainer.addChild(debugRect);
154640
- }
154641
- };
154642
- init2();
154643
- return () => {
154644
- if (appRef.current) {
154645
- appRef.current.destroy(true, { children: true });
154646
- appRef.current = null;
154647
- }
154648
- };
154649
- }, [
154650
- size,
154651
- color2,
154652
- packages,
154653
- files,
154654
- stars,
154655
- collaborators,
154656
- license,
154657
- label,
154658
- variant,
154659
- width,
154660
- height,
154661
- backgroundColor,
154662
- showBoundary,
154663
- boundaryColor,
154664
- debug,
154665
- onPackageHover,
154666
- onPackageHoverEnd
154667
- ]);
154668
- if (variant === "card") {
154669
- return /* @__PURE__ */ jsx(
154670
- CardLayout,
154671
- {
154672
- color: color2,
154673
- owner,
154674
- stars,
154675
- label,
154676
- files,
154677
- language: language2,
154678
- license,
154679
- packages,
154680
- children: /* @__PURE__ */ jsx(
154681
- "div",
154682
- {
154683
- ref: containerRef,
154684
- style: {
154685
- width: "100%",
154686
- height: "100%",
154687
- display: "flex",
154688
- alignItems: "center",
154689
- justifyContent: "center"
154690
- }
154691
- }
154692
- )
154693
- }
154694
- );
154695
- }
154696
- return /* @__PURE__ */ jsx(
154697
- "div",
154698
- {
154699
- ref: containerRef,
154700
- style: {
154701
- width,
154702
- height,
154703
- display: "inline-block"
154704
- }
154705
- }
154706
- );
154707
- };
154708
- function transformPackages(packages) {
154709
- if (!packages || packages.length === 0) {
154710
- return void 0;
154711
- }
154712
- return packages.map((pkg) => {
154713
- var _a;
154714
- return {
154715
- name: ((_a = pkg.packageData) == null ? void 0 : _a.name) || pkg.name,
154716
- size: pkg.size
154717
- // Could derive color from package type or name in the future
154718
- };
154719
- });
154720
- }
154721
- const RepoCard = ({
154722
- repository,
154723
- variant = "card",
154724
- cardTheme = "blue",
154725
- width = 200,
154726
- height = 280,
154727
- backgroundColor,
154728
- showBoundary = false,
154729
- boundaryColor,
154730
- debug = false,
154731
- sizeOverride,
154732
- colorOverride,
154733
- onPackageHover,
154734
- onPackageHoverEnd
154735
- }) => {
154736
- var _a, _b, _c, _d, _e2, _f;
154737
- const size = sizeOverride ?? calculateRepositorySize(repository.metrics);
154738
- const color2 = colorOverride ?? getRepositoryColor(repository);
154739
- const packages = transformPackages(repository.packages);
154740
- const spriteProps = {
154741
- size,
154742
- color: color2,
154743
- packages,
154744
- files: (_a = repository.metrics) == null ? void 0 : _a.fileCount,
154745
- stars: (_b = repository.github) == null ? void 0 : _b.stars,
154746
- collaborators: (_c = repository.metrics) == null ? void 0 : _c.contributors,
154747
- license: (_d = repository.github) == null ? void 0 : _d.license,
154748
- label: repository.name,
154749
- owner: (_e2 = repository.github) == null ? void 0 : _e2.owner,
154750
- language: (_f = repository.github) == null ? void 0 : _f.primaryLanguage,
154751
- variant,
154752
- cardTheme,
154753
- width,
154754
- height,
154755
- backgroundColor,
154756
- showBoundary,
154757
- boundaryColor,
154758
- debug,
154759
- onPackageHover,
154760
- onPackageHoverEnd
154761
- };
154762
- return /* @__PURE__ */ jsx(RepoSprite, { ...spriteProps });
154763
- };
154764
- const ISO_TILE_WIDTH = 64;
154765
- const ISO_TILE_HEIGHT = 32;
154766
154410
  let sharedApp = null;
154767
154411
  let sharedAppPromise = null;
154768
154412
  let isAppDestroyed = false;
@@ -154772,7 +154416,7 @@ function parseColor(color2) {
154772
154416
  if (typeof color2 === "number") return color2;
154773
154417
  return parseInt(color2.replace("#", ""), 16);
154774
154418
  }
154775
- function getPackagePositions(count2, footprintWidth, footprintHeight) {
154419
+ function getPackagePositions$1(count2, footprintWidth, footprintHeight) {
154776
154420
  const positions = [];
154777
154421
  const spacing = 0.18;
154778
154422
  const yOffset = -footprintHeight * 0.15;
@@ -154863,8 +154507,8 @@ async function renderSpriteInternal(options) {
154863
154507
  const app = await getSharedApp(width, height);
154864
154508
  app.stage.removeChildren();
154865
154509
  const boundarySize = 4 * size;
154866
- const boundaryWidth = boundarySize * ISO_TILE_WIDTH;
154867
- const boundaryHeight = boundarySize * ISO_TILE_HEIGHT;
154510
+ const boundaryWidth = boundarySize * ISO_TILE_WIDTH$1;
154511
+ const boundaryHeight = boundarySize * ISO_TILE_HEIGHT$1;
154868
154512
  const padding = 0.9;
154869
154513
  const scaleX = width * padding / boundaryWidth;
154870
154514
  const scaleY = height * padding / boundaryHeight;
@@ -154891,7 +154535,7 @@ async function renderSpriteInternal(options) {
154891
154535
  const ground = license ? generateLicenseGround(license, size) : generateNeutralGround(size);
154892
154536
  mainContainer.addChild(ground);
154893
154537
  if (packages && packages.length > 1) {
154894
- const positions = getPackagePositions(
154538
+ const positions = getPackagePositions$1(
154895
154539
  packages.length,
154896
154540
  boundaryWidth / 2,
154897
154541
  boundaryHeight / 2
@@ -155041,35 +154685,52 @@ function destroySharedApp() {
155041
154685
  isAppDestroyed = true;
155042
154686
  }
155043
154687
  }
155044
- const RepoCardStatic = ({
155045
- repository,
155046
- packages,
155047
- cardTheme = "blue",
155048
- width = 200,
155049
- height = 280,
155050
- spriteSize = 160
154688
+ function formatRelativeTime(dateString) {
154689
+ if (!dateString) return "Never opened";
154690
+ const date = new Date(dateString);
154691
+ const now2 = /* @__PURE__ */ new Date();
154692
+ const diffMs = now2.getTime() - date.getTime();
154693
+ const diffMins = Math.floor(diffMs / 6e4);
154694
+ const diffHours = Math.floor(diffMs / 36e5);
154695
+ const diffDays = Math.floor(diffMs / 864e5);
154696
+ if (diffMins < 1) return "Just now";
154697
+ if (diffMins < 60) return `${diffMins}m ago`;
154698
+ if (diffHours < 24) return `${diffHours}h ago`;
154699
+ if (diffDays < 7) return `${diffDays}d ago`;
154700
+ if (diffDays < 30) return `${Math.floor(diffDays / 7)}w ago`;
154701
+ return date.toLocaleDateString();
154702
+ }
154703
+ const LocalProjectCard = ({
154704
+ entry,
154705
+ width = 220,
154706
+ height = 300,
154707
+ isSelected = false,
154708
+ onClick,
154709
+ onOpen,
154710
+ onRemove: onRemove2
155051
154711
  }) => {
155052
- var _a, _b, _c, _d, _e2, _f;
154712
+ var _a, _b, _c, _d, _e2;
154713
+ const { theme: theme2 } = useTheme();
155053
154714
  const [spriteDataUrl, setSpriteDataUrl] = useState(null);
155054
154715
  const [isLoading, setIsLoading] = useState(true);
155055
- const size = calculateRepositorySize(repository.metrics);
155056
- const color2 = getRepositoryColor(repository);
154716
+ const [isHovered, setIsHovered] = useState(false);
154717
+ const color2 = getRepositoryColor(entry);
155057
154718
  const colors = generateCardColors(color2);
154719
+ const size = entry.viewCount ? Math.min(entry.viewCount + 1, 5) : 2;
155058
154720
  useEffect(() => {
155059
154721
  let mounted = true;
155060
154722
  async function renderSprite() {
155061
- var _a2, _b2, _c2;
154723
+ var _a2, _b2;
155062
154724
  try {
155063
154725
  const dataUrl = await renderSpriteToDataUrlCached({
155064
154726
  size,
155065
154727
  color: color2,
155066
- packages,
155067
- stars: (_a2 = repository.github) == null ? void 0 : _a2.stars,
155068
- collaborators: (_b2 = repository.metrics) == null ? void 0 : _b2.contributors,
155069
- license: (_c2 = repository.github) == null ? void 0 : _c2.license,
155070
- label: repository.name,
155071
- width: spriteSize,
155072
- height: spriteSize
154728
+ stars: (_a2 = entry.github) == null ? void 0 : _a2.stars,
154729
+ collaborators: void 0,
154730
+ license: (_b2 = entry.github) == null ? void 0 : _b2.license,
154731
+ label: entry.name,
154732
+ width: 140,
154733
+ height: 140
155073
154734
  });
155074
154735
  if (mounted) {
155075
154736
  setSpriteDataUrl(dataUrl);
@@ -155086,23 +154747,22 @@ const RepoCardStatic = ({
155086
154747
  return () => {
155087
154748
  mounted = false;
155088
154749
  };
155089
- }, [size, color2, packages, repository, spriteSize]);
154750
+ }, [size, color2, entry]);
155090
154751
  const spriteContent = isLoading ? /* @__PURE__ */ jsx(
155091
154752
  "div",
155092
154753
  {
155093
154754
  style: {
155094
- width: spriteSize * 0.5,
155095
- height: spriteSize * 0.5,
154755
+ width: 70,
154756
+ height: 70,
155096
154757
  backgroundColor: `${colors.cardHighlight}40`,
155097
- borderRadius: "8px",
155098
- animation: "pulse 1.5s ease-in-out infinite"
154758
+ borderRadius: "8px"
155099
154759
  }
155100
154760
  }
155101
154761
  ) : spriteDataUrl ? /* @__PURE__ */ jsx(
155102
154762
  "img",
155103
154763
  {
155104
154764
  src: spriteDataUrl,
155105
- alt: repository.name,
154765
+ alt: entry.name,
155106
154766
  style: {
155107
154767
  maxWidth: "100%",
155108
154768
  maxHeight: "100%",
@@ -155113,29 +154773,121 @@ const RepoCardStatic = ({
155113
154773
  "div",
155114
154774
  {
155115
154775
  style: {
155116
- width: spriteSize * 0.5,
155117
- height: spriteSize * 0.5,
154776
+ width: 70,
154777
+ height: 70,
155118
154778
  backgroundColor: `#${color2.toString(16).padStart(6, "0")}`,
155119
154779
  borderRadius: "8px",
155120
154780
  opacity: 0.5
155121
154781
  }
155122
154782
  }
155123
154783
  );
155124
- return /* @__PURE__ */ jsx("div", { style: { width, height }, children: /* @__PURE__ */ jsx(
155125
- CardLayout,
154784
+ const description = ((_a = entry.github) == null ? void 0 : _a.description) || formatRelativeTime(entry.lastOpenedAt);
154785
+ return /* @__PURE__ */ jsxs(
154786
+ "div",
155126
154787
  {
155127
- color: color2,
155128
- owner: (_a = repository.github) == null ? void 0 : _a.owner,
155129
- stars: (_b = repository.github) == null ? void 0 : _b.stars,
155130
- label: repository.name,
155131
- description: (_c = repository.github) == null ? void 0 : _c.description,
155132
- files: (_d = repository.metrics) == null ? void 0 : _d.fileCount,
155133
- language: (_e2 = repository.github) == null ? void 0 : _e2.primaryLanguage,
155134
- license: (_f = repository.github) == null ? void 0 : _f.license,
155135
- packages,
155136
- children: spriteContent
154788
+ style: {
154789
+ width,
154790
+ height,
154791
+ cursor: "pointer",
154792
+ transition: "transform 0.15s ease, box-shadow 0.15s ease",
154793
+ transform: isHovered ? "translateY(-4px)" : "none",
154794
+ boxShadow: isSelected ? `0 0 0 3px ${theme2.colors.primary}` : isHovered ? "0 8px 24px rgba(0,0,0,0.3)" : "0 4px 12px rgba(0,0,0,0.2)",
154795
+ borderRadius: "4px",
154796
+ overflow: "hidden"
154797
+ },
154798
+ onClick: () => onClick == null ? void 0 : onClick(entry),
154799
+ onMouseEnter: () => setIsHovered(true),
154800
+ onMouseLeave: () => setIsHovered(false),
154801
+ children: [
154802
+ /* @__PURE__ */ jsx(
154803
+ CardLayout,
154804
+ {
154805
+ color: color2,
154806
+ owner: (_b = entry.github) == null ? void 0 : _b.owner,
154807
+ stars: (_c = entry.github) == null ? void 0 : _c.stars,
154808
+ label: entry.name,
154809
+ description,
154810
+ files: entry.viewCount || void 0,
154811
+ language: (_d = entry.github) == null ? void 0 : _d.primaryLanguage,
154812
+ license: (_e2 = entry.github) == null ? void 0 : _e2.license,
154813
+ children: spriteContent
154814
+ }
154815
+ ),
154816
+ isHovered && (onOpen || onRemove2) && /* @__PURE__ */ jsxs(
154817
+ "div",
154818
+ {
154819
+ style: {
154820
+ position: "absolute",
154821
+ bottom: "32px",
154822
+ left: "50%",
154823
+ transform: "translateX(-50%)",
154824
+ display: "flex",
154825
+ gap: "8px",
154826
+ zIndex: 10
154827
+ },
154828
+ children: [
154829
+ onOpen && /* @__PURE__ */ jsx(
154830
+ "button",
154831
+ {
154832
+ onClick: (e2) => {
154833
+ e2.stopPropagation();
154834
+ onOpen(entry);
154835
+ },
154836
+ style: {
154837
+ padding: "6px 12px",
154838
+ backgroundColor: theme2.colors.primary,
154839
+ color: "#ffffff",
154840
+ border: "none",
154841
+ borderRadius: "4px",
154842
+ fontSize: theme2.fontSizes[1],
154843
+ fontFamily: theme2.fonts.body,
154844
+ fontWeight: theme2.fontWeights.medium,
154845
+ cursor: "pointer",
154846
+ transition: "background-color 0.15s ease"
154847
+ },
154848
+ onMouseEnter: (e2) => {
154849
+ e2.currentTarget.style.backgroundColor = theme2.colors.accent;
154850
+ },
154851
+ onMouseLeave: (e2) => {
154852
+ e2.currentTarget.style.backgroundColor = theme2.colors.primary;
154853
+ },
154854
+ children: "Open"
154855
+ }
154856
+ ),
154857
+ onRemove2 && /* @__PURE__ */ jsx(
154858
+ "button",
154859
+ {
154860
+ onClick: (e2) => {
154861
+ e2.stopPropagation();
154862
+ onRemove2(entry);
154863
+ },
154864
+ style: {
154865
+ padding: "6px 12px",
154866
+ backgroundColor: "rgba(0,0,0,0.5)",
154867
+ color: "#ffffff",
154868
+ border: `1px solid ${theme2.colors.border}`,
154869
+ borderRadius: "4px",
154870
+ fontSize: theme2.fontSizes[1],
154871
+ fontFamily: theme2.fonts.body,
154872
+ fontWeight: theme2.fontWeights.medium,
154873
+ cursor: "pointer",
154874
+ transition: "background-color 0.15s ease"
154875
+ },
154876
+ onMouseEnter: (e2) => {
154877
+ e2.currentTarget.style.backgroundColor = theme2.colors.error;
154878
+ },
154879
+ onMouseLeave: (e2) => {
154880
+ e2.currentTarget.style.backgroundColor = "rgba(0,0,0,0.5)";
154881
+ },
154882
+ children: "Remove"
154883
+ }
154884
+ )
154885
+ ]
154886
+ }
154887
+ )
154888
+ ]
155137
154889
  }
155138
- ) });
154890
+ );
155139
154891
  };
155140
154892
  const GitLogo = ({
155141
154893
  size = 80,
@@ -155171,7 +154923,7 @@ const injectKeyframes = () => {
155171
154923
  `;
155172
154924
  document.head.appendChild(style2);
155173
154925
  };
155174
- const Speck = ({ x: x2, y: y2, size, delay }) => /* @__PURE__ */ jsx(
154926
+ const Speck = ({ x: x2, y: y2, size, delay, duration }) => /* @__PURE__ */ jsx(
155175
154927
  "div",
155176
154928
  {
155177
154929
  style: {
@@ -155182,8 +154934,7 @@ const Speck = ({ x: x2, y: y2, size, delay }) => /* @__PURE__ */ jsx(
155182
154934
  height: size,
155183
154935
  borderRadius: "50%",
155184
154936
  backgroundColor: "rgba(255,255,255,0.5)",
155185
- animation: `twinkle ${2 + Math.random() * 2}s ease-in-out infinite`,
155186
- animationDelay: `${delay}s`
154937
+ animation: `twinkle ${duration}s ease-in-out ${delay}s infinite`
155187
154938
  }
155188
154939
  }
155189
154940
  );
@@ -155201,7 +154952,8 @@ const generateSpecks = (cols, rows) => {
155201
154952
  x: baseX + jitterX,
155202
154953
  y: baseY + jitterY,
155203
154954
  size: 1 + Math.random() * 1.5,
155204
- delay: Math.random() * 3
154955
+ delay: Math.random() * 3,
154956
+ duration: 2 + Math.random() * 2
155205
154957
  });
155206
154958
  }
155207
154959
  }
@@ -155337,6 +155089,693 @@ const CardBack = ({
155337
155089
  }
155338
155090
  );
155339
155091
  };
155092
+ const BOUNCE_KEYFRAMES_ID = "card-back-bounce";
155093
+ const injectBounceKeyframes = () => {
155094
+ if (typeof document === "undefined") return;
155095
+ if (document.getElementById(BOUNCE_KEYFRAMES_ID)) return;
155096
+ const style2 = document.createElement("style");
155097
+ style2.id = BOUNCE_KEYFRAMES_ID;
155098
+ style2.textContent = `
155099
+ @keyframes cardBounce {
155100
+ 0%, 100% { transform: translateY(0); }
155101
+ 50% { transform: translateY(-8px); }
155102
+ }
155103
+ `;
155104
+ document.head.appendChild(style2);
155105
+ };
155106
+ const LoadingCard = ({ index: index2 }) => {
155107
+ const delay = useMemo(() => index2 * 0.15 + Math.random() * 0.3, [index2]);
155108
+ const duration = useMemo(() => 1.2 + Math.random() * 0.6, []);
155109
+ return /* @__PURE__ */ jsx(
155110
+ "div",
155111
+ {
155112
+ style: {
155113
+ animation: `cardBounce ${duration}s ease-in-out ${delay}s infinite`
155114
+ },
155115
+ children: /* @__PURE__ */ jsx(CardBack, { width: 220, height: 300 })
155116
+ }
155117
+ );
155118
+ };
155119
+ const LoadingGrid = () => {
155120
+ useEffect(() => {
155121
+ injectBounceKeyframes();
155122
+ }, []);
155123
+ const cardCount = 6;
155124
+ return /* @__PURE__ */ jsx(
155125
+ "div",
155126
+ {
155127
+ style: {
155128
+ display: "grid",
155129
+ gridTemplateColumns: "repeat(auto-fill, minmax(220px, 1fr))",
155130
+ gap: "20px",
155131
+ justifyItems: "center"
155132
+ },
155133
+ children: Array.from({ length: cardCount }, (_2, i2) => /* @__PURE__ */ jsx(LoadingCard, { index: i2 }, i2))
155134
+ }
155135
+ );
155136
+ };
155137
+ function sortByLastOpened(projects) {
155138
+ return [...projects].sort((a2, b2) => {
155139
+ const aDate = a2.lastOpenedAt || a2.registeredAt || "";
155140
+ const bDate = b2.lastOpenedAt || b2.registeredAt || "";
155141
+ return bDate.localeCompare(aDate);
155142
+ });
155143
+ }
155144
+ function filterProjects(projects, query) {
155145
+ if (!query.trim()) return projects;
155146
+ const lowerQuery = query.toLowerCase();
155147
+ return projects.filter((project) => {
155148
+ var _a, _b, _c, _d, _e2, _f;
155149
+ return project.name.toLowerCase().includes(lowerQuery) || project.path.toLowerCase().includes(lowerQuery) || ((_b = (_a = project.github) == null ? void 0 : _a.owner) == null ? void 0 : _b.toLowerCase().includes(lowerQuery)) || ((_d = (_c = project.github) == null ? void 0 : _c.primaryLanguage) == null ? void 0 : _d.toLowerCase().includes(lowerQuery)) || ((_f = (_e2 = project.github) == null ? void 0 : _e2.description) == null ? void 0 : _f.toLowerCase().includes(lowerQuery));
155150
+ });
155151
+ }
155152
+ const LocalProjectGridPanelContent = ({ context: context2, actions }) => {
155153
+ const { theme: theme2 } = useTheme();
155154
+ const [searchQuery, setSearchQuery] = useState("");
155155
+ const [selectedProject, setSelectedProject] = useState(null);
155156
+ const projectsSlice = context2.localProjects;
155157
+ const projects = (projectsSlice == null ? void 0 : projectsSlice.data) ?? [];
155158
+ const isLoading = (projectsSlice == null ? void 0 : projectsSlice.loading) ?? false;
155159
+ const displayProjects = useMemo(() => {
155160
+ const filtered = filterProjects(projects, searchQuery);
155161
+ return sortByLastOpened(filtered);
155162
+ }, [projects, searchQuery]);
155163
+ const handleCardClick = (entry) => {
155164
+ var _a;
155165
+ setSelectedProject(entry);
155166
+ (_a = actions.selectProject) == null ? void 0 : _a.call(actions, entry);
155167
+ };
155168
+ const handleOpen = (entry) => {
155169
+ var _a;
155170
+ (_a = actions.openProject) == null ? void 0 : _a.call(actions, entry);
155171
+ };
155172
+ const handleRemove = (entry) => {
155173
+ var _a;
155174
+ (_a = actions.removeProject) == null ? void 0 : _a.call(actions, entry);
155175
+ };
155176
+ return /* @__PURE__ */ jsxs(
155177
+ "div",
155178
+ {
155179
+ style: {
155180
+ display: "flex",
155181
+ flexDirection: "column",
155182
+ height: "100%",
155183
+ backgroundColor: theme2.colors.background,
155184
+ overflow: "hidden"
155185
+ },
155186
+ children: [
155187
+ /* @__PURE__ */ jsxs(
155188
+ "div",
155189
+ {
155190
+ style: {
155191
+ padding: "12px 16px",
155192
+ borderBottom: `1px solid ${theme2.colors.border}`,
155193
+ flexShrink: 0
155194
+ },
155195
+ children: [
155196
+ /* @__PURE__ */ jsxs(
155197
+ "div",
155198
+ {
155199
+ style: {
155200
+ display: "flex",
155201
+ alignItems: "center",
155202
+ gap: "8px",
155203
+ backgroundColor: theme2.colors.backgroundSecondary,
155204
+ borderRadius: "6px",
155205
+ padding: "8px 12px",
155206
+ border: `1px solid ${theme2.colors.border}`
155207
+ },
155208
+ children: [
155209
+ /* @__PURE__ */ jsx(Search$1, { size: 16, color: theme2.colors.textSecondary }),
155210
+ /* @__PURE__ */ jsx(
155211
+ "input",
155212
+ {
155213
+ type: "text",
155214
+ placeholder: "Search projects...",
155215
+ value: searchQuery,
155216
+ onChange: (e2) => setSearchQuery(e2.target.value),
155217
+ style: {
155218
+ flex: 1,
155219
+ backgroundColor: "transparent",
155220
+ border: "none",
155221
+ outline: "none",
155222
+ color: theme2.colors.text,
155223
+ fontSize: theme2.fontSizes[1],
155224
+ fontFamily: theme2.fonts.body
155225
+ }
155226
+ }
155227
+ ),
155228
+ searchQuery && /* @__PURE__ */ jsx(
155229
+ "button",
155230
+ {
155231
+ onClick: () => setSearchQuery(""),
155232
+ style: {
155233
+ background: "none",
155234
+ border: "none",
155235
+ color: theme2.colors.textSecondary,
155236
+ cursor: "pointer",
155237
+ padding: "0 4px",
155238
+ fontSize: theme2.fontSizes[1]
155239
+ },
155240
+ children: "✕"
155241
+ }
155242
+ )
155243
+ ]
155244
+ }
155245
+ ),
155246
+ /* @__PURE__ */ jsx(
155247
+ "div",
155248
+ {
155249
+ style: {
155250
+ marginTop: "8px",
155251
+ fontSize: theme2.fontSizes[0],
155252
+ color: theme2.colors.textSecondary,
155253
+ fontFamily: theme2.fonts.body
155254
+ },
155255
+ children: isLoading ? "Loading projects..." : `${displayProjects.length} project${displayProjects.length !== 1 ? "s" : ""}`
155256
+ }
155257
+ )
155258
+ ]
155259
+ }
155260
+ ),
155261
+ /* @__PURE__ */ jsx(
155262
+ "div",
155263
+ {
155264
+ style: {
155265
+ flex: 1,
155266
+ overflow: "auto",
155267
+ padding: "16px"
155268
+ },
155269
+ children: isLoading ? /* @__PURE__ */ jsx(LoadingGrid, {}) : displayProjects.length === 0 ? /* @__PURE__ */ jsxs(
155270
+ "div",
155271
+ {
155272
+ style: {
155273
+ display: "flex",
155274
+ flexDirection: "column",
155275
+ alignItems: "center",
155276
+ justifyContent: "center",
155277
+ height: "200px",
155278
+ color: theme2.colors.textSecondary,
155279
+ fontFamily: theme2.fonts.body,
155280
+ textAlign: "center",
155281
+ gap: "8px"
155282
+ },
155283
+ children: [
155284
+ /* @__PURE__ */ jsx("div", { style: { fontSize: theme2.fontSizes[2] }, children: searchQuery ? "No matching projects" : "No projects yet" }),
155285
+ /* @__PURE__ */ jsx("div", { style: { fontSize: theme2.fontSizes[1] }, children: searchQuery ? "Try a different search term" : "Add a project to get started" })
155286
+ ]
155287
+ }
155288
+ ) : /* @__PURE__ */ jsx(
155289
+ "div",
155290
+ {
155291
+ style: {
155292
+ display: "grid",
155293
+ gridTemplateColumns: "repeat(auto-fill, minmax(220px, 1fr))",
155294
+ gap: "20px",
155295
+ justifyItems: "center"
155296
+ },
155297
+ children: displayProjects.map((project) => /* @__PURE__ */ jsx(
155298
+ LocalProjectCard,
155299
+ {
155300
+ entry: project,
155301
+ isSelected: (selectedProject == null ? void 0 : selectedProject.path) === project.path,
155302
+ onClick: handleCardClick,
155303
+ onOpen: actions.openProject ? handleOpen : void 0,
155304
+ onRemove: actions.removeProject ? handleRemove : void 0
155305
+ },
155306
+ project.path
155307
+ ))
155308
+ }
155309
+ )
155310
+ }
155311
+ )
155312
+ ]
155313
+ }
155314
+ );
155315
+ };
155316
+ const LocalProjectGridPanelPreview = ({ context: context2 }) => {
155317
+ var _a;
155318
+ const { theme: theme2 } = useTheme();
155319
+ const projects = ((_a = context2.localProjects) == null ? void 0 : _a.data) ?? [];
155320
+ return /* @__PURE__ */ jsxs(
155321
+ "div",
155322
+ {
155323
+ style: {
155324
+ display: "flex",
155325
+ flexDirection: "column",
155326
+ alignItems: "center",
155327
+ justifyContent: "center",
155328
+ height: "100%",
155329
+ gap: "4px",
155330
+ color: theme2.colors.text,
155331
+ fontFamily: theme2.fonts.body
155332
+ },
155333
+ children: [
155334
+ /* @__PURE__ */ jsx("div", { style: { fontSize: theme2.fontSizes[2], fontWeight: theme2.fontWeights.medium }, children: projects.length }),
155335
+ /* @__PURE__ */ jsx("div", { style: { fontSize: theme2.fontSizes[0], color: theme2.colors.textSecondary }, children: "Projects" })
155336
+ ]
155337
+ }
155338
+ );
155339
+ };
155340
+ const LocalProjectGridPanel = (props) => {
155341
+ return /* @__PURE__ */ jsx(LocalProjectGridPanelContent, { ...props });
155342
+ };
155343
+ const ISO_TILE_WIDTH = 64;
155344
+ const ISO_TILE_HEIGHT = 32;
155345
+ function getPackagePositions(count2, footprintWidth, footprintHeight) {
155346
+ const positions = [];
155347
+ const spacing = 0.18;
155348
+ const yOffset = -footprintHeight * 0.15;
155349
+ if (count2 === 2) {
155350
+ positions.push(
155351
+ { x: -footprintWidth * spacing, y: yOffset },
155352
+ { x: footprintWidth * spacing, y: yOffset }
155353
+ );
155354
+ } else if (count2 === 3) {
155355
+ positions.push(
155356
+ {
155357
+ x: -footprintWidth * spacing * 0.8,
155358
+ y: -footprintHeight * spacing * 0.8 + yOffset
155359
+ },
155360
+ {
155361
+ x: footprintWidth * spacing * 0.8,
155362
+ y: -footprintHeight * spacing * 0.8 + yOffset
155363
+ },
155364
+ { x: 0, y: footprintHeight * spacing * 1 + yOffset }
155365
+ );
155366
+ } else if (count2 === 4) {
155367
+ positions.push(
155368
+ { x: 0, y: -footprintHeight * spacing + yOffset },
155369
+ { x: -footprintWidth * spacing, y: yOffset },
155370
+ { x: footprintWidth * spacing, y: yOffset },
155371
+ { x: 0, y: footprintHeight * spacing + yOffset }
155372
+ );
155373
+ } else {
155374
+ const cols = Math.ceil(Math.sqrt(count2));
155375
+ const rows = Math.ceil(count2 / cols);
155376
+ const cellWidth = footprintWidth * 0.7 / cols;
155377
+ const cellHeight = footprintHeight * 0.7 / rows;
155378
+ for (let i2 = 0; i2 < count2; i2++) {
155379
+ const row2 = Math.floor(i2 / cols);
155380
+ const col = i2 % cols;
155381
+ const x2 = (col - (cols - 1) / 2) * cellWidth;
155382
+ const y2 = (row2 - (rows - 1) / 2) * cellHeight;
155383
+ positions.push({ x: x2, y: y2 });
155384
+ }
155385
+ }
155386
+ return positions;
155387
+ }
155388
+ const RepoSprite = ({
155389
+ size = 2,
155390
+ color: color2 = 13789470,
155391
+ packages,
155392
+ files,
155393
+ stars,
155394
+ collaborators,
155395
+ license,
155396
+ label,
155397
+ owner,
155398
+ language: language2,
155399
+ variant = "default",
155400
+ cardTheme = "blue",
155401
+ width = 200,
155402
+ height = 200,
155403
+ backgroundColor,
155404
+ showBoundary = true,
155405
+ boundaryColor = 16776960,
155406
+ debug = false,
155407
+ onPackageHover,
155408
+ onPackageHoverEnd
155409
+ }) => {
155410
+ const { theme: theme2 } = useTheme();
155411
+ const containerRef = useRef(null);
155412
+ const appRef = useRef(null);
155413
+ useEffect(() => {
155414
+ if (!containerRef.current) return;
155415
+ const init2 = async () => {
155416
+ var _a;
155417
+ const app = new Application();
155418
+ await app.init({
155419
+ width,
155420
+ height,
155421
+ backgroundAlpha: backgroundColor !== void 0 ? 1 : 0,
155422
+ backgroundColor: backgroundColor ?? 0,
155423
+ antialias: true,
155424
+ resolution: 2,
155425
+ autoDensity: true
155426
+ });
155427
+ (_a = containerRef.current) == null ? void 0 : _a.appendChild(app.canvas);
155428
+ appRef.current = app;
155429
+ const boundarySize = 4 * size;
155430
+ const boundaryWidth = boundarySize * ISO_TILE_WIDTH;
155431
+ const boundaryHeight = boundarySize * ISO_TILE_HEIGHT;
155432
+ const padding = 0.9;
155433
+ const scaleX = width * padding / boundaryWidth;
155434
+ const scaleY = height * padding / boundaryHeight;
155435
+ const scale = Math.min(scaleX, scaleY);
155436
+ const mainContainer = new Container();
155437
+ mainContainer.x = width / 2;
155438
+ mainContainer.y = height / 2;
155439
+ mainContainer.scale.set(scale);
155440
+ app.stage.addChild(mainContainer);
155441
+ if (showBoundary) {
155442
+ const boundary = new Graphics();
155443
+ boundary.strokeStyle = { width: 2, color: boundaryColor };
155444
+ boundary.fillStyle = { color: boundaryColor, alpha: 0.1 };
155445
+ boundary.beginPath();
155446
+ boundary.moveTo(0, -boundaryHeight / 2);
155447
+ boundary.lineTo(boundaryWidth / 2, 0);
155448
+ boundary.lineTo(0, boundaryHeight / 2);
155449
+ boundary.lineTo(-boundaryWidth / 2, 0);
155450
+ boundary.closePath();
155451
+ boundary.fill();
155452
+ boundary.stroke();
155453
+ mainContainer.addChild(boundary);
155454
+ }
155455
+ const ground = license ? generateLicenseGround(license, size) : generateNeutralGround(size);
155456
+ mainContainer.addChild(ground);
155457
+ if (packages && packages.length > 1) {
155458
+ const positions = getPackagePositions(
155459
+ packages.length,
155460
+ boundaryWidth / 2,
155461
+ boundaryHeight / 2
155462
+ );
155463
+ for (let i2 = 0; i2 < packages.length; i2++) {
155464
+ const pkg = packages[i2];
155465
+ const pos = positions[i2] || { x: 0, y: 0 };
155466
+ const pkgColor = pkg.color ? parseColor$1(pkg.color) : parseColor$1(color2);
155467
+ const pkgSize = (pkg.size || 1) * size * 0.4;
155468
+ const buildingGraphics = generateBuildingSprite({
155469
+ size: pkgSize,
155470
+ color: pkgColor
155471
+ });
155472
+ buildingGraphics.x = pos.x;
155473
+ buildingGraphics.y = pos.y;
155474
+ buildingGraphics.eventMode = "static";
155475
+ buildingGraphics.cursor = "pointer";
155476
+ const originalTint = buildingGraphics.tint;
155477
+ const packageName = pkg.name;
155478
+ buildingGraphics.on("pointerover", () => {
155479
+ buildingGraphics.tint = 8965375;
155480
+ onPackageHover == null ? void 0 : onPackageHover(packageName);
155481
+ });
155482
+ buildingGraphics.on("pointerout", () => {
155483
+ buildingGraphics.tint = originalTint;
155484
+ onPackageHoverEnd == null ? void 0 : onPackageHoverEnd(packageName);
155485
+ });
155486
+ mainContainer.addChild(buildingGraphics);
155487
+ }
155488
+ } else {
155489
+ const parsedColor = parseColor$1(color2);
155490
+ const buildingGraphics = generateBuildingSprite({
155491
+ size,
155492
+ color: parsedColor
155493
+ });
155494
+ mainContainer.addChild(buildingGraphics);
155495
+ }
155496
+ if (license) {
155497
+ const licenseSign = generateLicenseSign(license, {
155498
+ name: label || "",
155499
+ sizeMultiplier: size
155500
+ });
155501
+ const footprintHeight = boundaryHeight / 2;
155502
+ licenseSign.y = footprintHeight * 0.75;
155503
+ mainContainer.addChild(licenseSign);
155504
+ }
155505
+ if (stars && stars > 0) {
155506
+ const tier = getStarTier(stars);
155507
+ const scaleFactor = getStarScaleFactor(stars);
155508
+ let starDecoration = null;
155509
+ if (tier) {
155510
+ const decorationColor = tier.color;
155511
+ if (tier.decorationType === "flag") {
155512
+ starDecoration = generateFlagSprite(decorationColor);
155513
+ } else if (tier.decorationType === "trophy") {
155514
+ starDecoration = generateTrophySprite(decorationColor);
155515
+ } else if (tier.decorationType === "statue") {
155516
+ starDecoration = generateStatueSprite(decorationColor);
155517
+ }
155518
+ }
155519
+ if (starDecoration) {
155520
+ const dim = { w: 8, h: 12 };
155521
+ starDecoration.pivot.set(dim.w, dim.h);
155522
+ starDecoration.scale.set(1.5 * scaleFactor);
155523
+ starDecoration.x = -boundaryWidth / 4;
155524
+ starDecoration.y = 0;
155525
+ mainContainer.addChild(starDecoration);
155526
+ }
155527
+ }
155528
+ if (collaborators && collaborators > 0) {
155529
+ const tier = getCollaboratorTier(collaborators);
155530
+ const scaleFactor = getCollaboratorScaleFactor(collaborators);
155531
+ let collabDecoration = null;
155532
+ if (tier) {
155533
+ const decorationColor = tier.color;
155534
+ if (tier.decorationType === "bench") {
155535
+ collabDecoration = generateBenchSprite(decorationColor);
155536
+ } else if (tier.decorationType === "pavilion") {
155537
+ collabDecoration = generatePavilionSprite(decorationColor);
155538
+ } else if (tier.decorationType === "gazebo") {
155539
+ collabDecoration = generateGazeboSprite(decorationColor);
155540
+ } else if (tier.decorationType === "bandstand") {
155541
+ collabDecoration = generateBandstandSprite(decorationColor);
155542
+ }
155543
+ }
155544
+ if (collabDecoration) {
155545
+ const dim = { h: 12 };
155546
+ collabDecoration.pivot.set(0, dim.h);
155547
+ collabDecoration.scale.set(1.5 * scaleFactor);
155548
+ collabDecoration.x = boundaryWidth / 4;
155549
+ collabDecoration.y = 0;
155550
+ mainContainer.addChild(collabDecoration);
155551
+ }
155552
+ }
155553
+ if (debug) {
155554
+ const { Graphics: Graphics2 } = await Promise.resolve().then(() => index);
155555
+ const debugRect = new Graphics2();
155556
+ debugRect.rect(-width / 2, -height / 2, width, height);
155557
+ debugRect.stroke({ width: 1, color: 16711680 });
155558
+ mainContainer.addChild(debugRect);
155559
+ }
155560
+ };
155561
+ init2();
155562
+ return () => {
155563
+ if (appRef.current) {
155564
+ appRef.current.destroy(true, { children: true });
155565
+ appRef.current = null;
155566
+ }
155567
+ };
155568
+ }, [
155569
+ size,
155570
+ color2,
155571
+ packages,
155572
+ files,
155573
+ stars,
155574
+ collaborators,
155575
+ license,
155576
+ label,
155577
+ variant,
155578
+ width,
155579
+ height,
155580
+ backgroundColor,
155581
+ showBoundary,
155582
+ boundaryColor,
155583
+ debug,
155584
+ onPackageHover,
155585
+ onPackageHoverEnd
155586
+ ]);
155587
+ if (variant === "card") {
155588
+ return /* @__PURE__ */ jsx(
155589
+ CardLayout,
155590
+ {
155591
+ color: color2,
155592
+ owner,
155593
+ stars,
155594
+ label,
155595
+ files,
155596
+ language: language2,
155597
+ license,
155598
+ packages,
155599
+ children: /* @__PURE__ */ jsx(
155600
+ "div",
155601
+ {
155602
+ ref: containerRef,
155603
+ style: {
155604
+ width: "100%",
155605
+ height: "100%",
155606
+ display: "flex",
155607
+ alignItems: "center",
155608
+ justifyContent: "center"
155609
+ }
155610
+ }
155611
+ )
155612
+ }
155613
+ );
155614
+ }
155615
+ return /* @__PURE__ */ jsx(
155616
+ "div",
155617
+ {
155618
+ ref: containerRef,
155619
+ style: {
155620
+ width,
155621
+ height,
155622
+ display: "inline-block"
155623
+ }
155624
+ }
155625
+ );
155626
+ };
155627
+ function transformPackages(packages) {
155628
+ if (!packages || packages.length === 0) {
155629
+ return void 0;
155630
+ }
155631
+ return packages.map((pkg) => {
155632
+ var _a;
155633
+ return {
155634
+ name: ((_a = pkg.packageData) == null ? void 0 : _a.name) || pkg.name,
155635
+ size: pkg.size
155636
+ // Could derive color from package type or name in the future
155637
+ };
155638
+ });
155639
+ }
155640
+ const RepoCard = ({
155641
+ repository,
155642
+ variant = "card",
155643
+ cardTheme = "blue",
155644
+ width = 200,
155645
+ height = 280,
155646
+ backgroundColor,
155647
+ showBoundary = false,
155648
+ boundaryColor,
155649
+ debug = false,
155650
+ sizeOverride,
155651
+ colorOverride,
155652
+ onPackageHover,
155653
+ onPackageHoverEnd
155654
+ }) => {
155655
+ var _a, _b, _c, _d, _e2, _f;
155656
+ const size = sizeOverride ?? calculateRepositorySize(repository.metrics);
155657
+ const color2 = colorOverride ?? getRepositoryColor(repository);
155658
+ const packages = transformPackages(repository.packages);
155659
+ const spriteProps = {
155660
+ size,
155661
+ color: color2,
155662
+ packages,
155663
+ files: (_a = repository.metrics) == null ? void 0 : _a.fileCount,
155664
+ stars: (_b = repository.github) == null ? void 0 : _b.stars,
155665
+ collaborators: (_c = repository.metrics) == null ? void 0 : _c.contributors,
155666
+ license: (_d = repository.github) == null ? void 0 : _d.license,
155667
+ label: repository.name,
155668
+ owner: (_e2 = repository.github) == null ? void 0 : _e2.owner,
155669
+ language: (_f = repository.github) == null ? void 0 : _f.primaryLanguage,
155670
+ variant,
155671
+ cardTheme,
155672
+ width,
155673
+ height,
155674
+ backgroundColor,
155675
+ showBoundary,
155676
+ boundaryColor,
155677
+ debug,
155678
+ onPackageHover,
155679
+ onPackageHoverEnd
155680
+ };
155681
+ return /* @__PURE__ */ jsx(RepoSprite, { ...spriteProps });
155682
+ };
155683
+ const RepoCardStatic = ({
155684
+ repository,
155685
+ packages,
155686
+ cardTheme = "blue",
155687
+ width = 200,
155688
+ height = 280,
155689
+ spriteSize = 160
155690
+ }) => {
155691
+ var _a, _b, _c, _d, _e2, _f;
155692
+ const [spriteDataUrl, setSpriteDataUrl] = useState(null);
155693
+ const [isLoading, setIsLoading] = useState(true);
155694
+ const size = calculateRepositorySize(repository.metrics);
155695
+ const color2 = getRepositoryColor(repository);
155696
+ const colors = generateCardColors(color2);
155697
+ useEffect(() => {
155698
+ let mounted = true;
155699
+ async function renderSprite() {
155700
+ var _a2, _b2, _c2;
155701
+ try {
155702
+ const dataUrl = await renderSpriteToDataUrlCached({
155703
+ size,
155704
+ color: color2,
155705
+ packages,
155706
+ stars: (_a2 = repository.github) == null ? void 0 : _a2.stars,
155707
+ collaborators: (_b2 = repository.metrics) == null ? void 0 : _b2.contributors,
155708
+ license: (_c2 = repository.github) == null ? void 0 : _c2.license,
155709
+ label: repository.name,
155710
+ width: spriteSize,
155711
+ height: spriteSize
155712
+ });
155713
+ if (mounted) {
155714
+ setSpriteDataUrl(dataUrl);
155715
+ setIsLoading(false);
155716
+ }
155717
+ } catch (error) {
155718
+ console.error("Failed to render sprite:", error);
155719
+ if (mounted) {
155720
+ setIsLoading(false);
155721
+ }
155722
+ }
155723
+ }
155724
+ renderSprite();
155725
+ return () => {
155726
+ mounted = false;
155727
+ };
155728
+ }, [size, color2, packages, repository, spriteSize]);
155729
+ const spriteContent = isLoading ? /* @__PURE__ */ jsx(
155730
+ "div",
155731
+ {
155732
+ style: {
155733
+ width: spriteSize * 0.5,
155734
+ height: spriteSize * 0.5,
155735
+ backgroundColor: `${colors.cardHighlight}40`,
155736
+ borderRadius: "8px",
155737
+ animation: "pulse 1.5s ease-in-out infinite"
155738
+ }
155739
+ }
155740
+ ) : spriteDataUrl ? /* @__PURE__ */ jsx(
155741
+ "img",
155742
+ {
155743
+ src: spriteDataUrl,
155744
+ alt: repository.name,
155745
+ style: {
155746
+ maxWidth: "100%",
155747
+ maxHeight: "100%",
155748
+ objectFit: "contain"
155749
+ }
155750
+ }
155751
+ ) : /* @__PURE__ */ jsx(
155752
+ "div",
155753
+ {
155754
+ style: {
155755
+ width: spriteSize * 0.5,
155756
+ height: spriteSize * 0.5,
155757
+ backgroundColor: `#${color2.toString(16).padStart(6, "0")}`,
155758
+ borderRadius: "8px",
155759
+ opacity: 0.5
155760
+ }
155761
+ }
155762
+ );
155763
+ return /* @__PURE__ */ jsx("div", { style: { width, height }, children: /* @__PURE__ */ jsx(
155764
+ CardLayout,
155765
+ {
155766
+ color: color2,
155767
+ owner: (_a = repository.github) == null ? void 0 : _a.owner,
155768
+ stars: (_b = repository.github) == null ? void 0 : _b.stars,
155769
+ label: repository.name,
155770
+ description: (_c = repository.github) == null ? void 0 : _c.description,
155771
+ files: (_d = repository.metrics) == null ? void 0 : _d.fileCount,
155772
+ language: (_e2 = repository.github) == null ? void 0 : _e2.primaryLanguage,
155773
+ license: (_f = repository.github) == null ? void 0 : _f.license,
155774
+ packages,
155775
+ children: spriteContent
155776
+ }
155777
+ ) });
155778
+ };
155340
155779
  const panels = [
155341
155780
  {
155342
155781
  metadata: {
@@ -155451,6 +155890,24 @@ const panels = [
155451
155890
  onUnmount: async (_context) => {
155452
155891
  console.log("Telemetry Coverage Panel unmounting");
155453
155892
  }
155893
+ },
155894
+ {
155895
+ metadata: {
155896
+ id: "industry-theme.local-project-grid",
155897
+ name: "Local Projects Grid",
155898
+ icon: "Grid3X3",
155899
+ version: "0.1.0",
155900
+ author: "Industry Theme",
155901
+ description: "Display local Alexandria projects in a card grid",
155902
+ slices: ["localProjects"]
155903
+ },
155904
+ component: LocalProjectGridPanel,
155905
+ onMount: async (_context) => {
155906
+ console.log("Local Projects Grid Panel mounted");
155907
+ },
155908
+ onUnmount: async (_context) => {
155909
+ console.log("Local Projects Grid Panel unmounting");
155910
+ }
155454
155911
  }
155455
155912
  ];
155456
155913
  const onPackageLoad = async () => {
@@ -155481,6 +155938,10 @@ export {
155481
155938
  SearchPanel as S,
155482
155939
  TelemetryCoveragePanel as T,
155483
155940
  CollectionMapPanelContent as U,
155941
+ LocalProjectGridPanel as V,
155942
+ LocalProjectGridPanelContent as W,
155943
+ LocalProjectGridPanelPreview as X,
155944
+ LocalProjectCard as Y,
155484
155945
  FilterPipe as a,
155485
155946
  accessibilityTarget as b,
155486
155947
  FederatedContainer as c,
@@ -155508,4 +155969,4 @@ export {
155508
155969
  RepoCardStatic as y,
155509
155970
  CardBack as z
155510
155971
  };
155511
- //# sourceMappingURL=index-anN0r0mT.js.map
155972
+ //# sourceMappingURL=index-C1lQoGkG.js.map