@industry-theme/alexandria-panels 0.1.31 → 0.1.33

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAGzE,OAAO,0BAA0B,CAAC;AAClC,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoBvD,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA+iBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAEhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EA6C7C,CAAC;AAGF,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAGzE,OAAO,0BAA0B,CAAC;AAClC,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoBvD,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAwmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAEhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EA6C7C,CAAC;AAGF,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  try {
4
4
  if (typeof document != "undefined") {
5
5
  var elementStyle = document.createElement("style");
6
- elementStyle.appendChild(document.createTextNode("/* Container query for responsive LocalProjectCard */\n.local-projects-panel {\n container-type: inline-size;\n container-name: local-projects;\n height: 100%;\n}\n\n/* Animated underline that grows from left on hover */\n.local-project-card .project-name-underline {\n position: relative;\n text-decoration: none;\n}\n\n.local-project-card .project-name-underline::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: -3px;\n width: 0;\n height: 2px;\n background-color: var(--underline-color);\n transition: width 0.2s ease-out;\n}\n\n.local-project-card:hover .project-name-underline::after {\n width: 100%;\n}\n\n/* Compact mode when container is 400px or less */\n@container local-projects (max-width: 400px) {\n .local-projects-panel {\n padding: 8px !important;\n gap: 8px !important;\n }\n\n .local-projects-list {\n gap: 8px !important;\n }\n\n .local-project-card {\n padding: 8px !important;\n }\n}\n/* Shared Panel Styles */\n\n/* Header button hover states */\n.header-button {\n transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;\n}\n\n.header-button:not(.active):hover {\n color: var(--theme-text) !important;\n}\n\n/* Search input focus state */\n.search-input:focus {\n border-color: var(--theme-primary) !important;\n}\n\n/* Clear filter button hover */\n.clear-filter-button {\n transition: color 0.2s ease;\n}\n\n.clear-filter-button:hover {\n color: var(--theme-text) !important;\n}\n\n/* Search overlay animation - grows from right to left */\n.search-overlay {\n animation: searchExpand 0.2s ease-out forwards;\n}\n\n@keyframes searchExpand {\n from {\n clip-path: inset(0 0 0 100%);\n }\n to {\n clip-path: inset(0 0 0 0);\n }\n}"));
6
+ elementStyle.appendChild(document.createTextNode("/* Spin animation for scanning button */\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Container query for responsive LocalProjectCard */\n.local-projects-panel {\n container-type: inline-size;\n container-name: local-projects;\n height: 100%;\n}\n\n/* Animated underline that grows from left on hover */\n.local-project-card .project-name-underline {\n position: relative;\n text-decoration: none;\n}\n\n.local-project-card .project-name-underline::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: -3px;\n width: 0;\n height: 2px;\n background-color: var(--underline-color);\n transition: width 0.2s ease-out;\n}\n\n.local-project-card:hover .project-name-underline::after {\n width: 100%;\n}\n\n/* Compact mode when container is 400px or less */\n@container local-projects (max-width: 400px) {\n .local-projects-panel {\n padding: 8px !important;\n gap: 8px !important;\n }\n\n .local-projects-list {\n gap: 8px !important;\n }\n\n .local-project-card {\n padding: 8px !important;\n }\n}\n/* Shared Panel Styles */\n\n/* Header button hover states */\n.header-button {\n transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;\n}\n\n.header-button:not(.active):hover {\n color: var(--theme-text) !important;\n}\n\n/* Search input focus state */\n.search-input:focus {\n border-color: var(--theme-primary) !important;\n}\n\n/* Clear filter button hover */\n.clear-filter-button {\n transition: color 0.2s ease;\n}\n\n.clear-filter-button:hover {\n color: var(--theme-text) !important;\n}\n\n/* Search overlay animation - grows from right to left */\n.search-overlay {\n animation: searchExpand 0.2s ease-out forwards;\n}\n\n@keyframes searchExpand {\n from {\n clip-path: inset(0 0 0 100%);\n }\n to {\n clip-path: inset(0 0 0 0);\n }\n}"));
7
7
  document.head.appendChild(elementStyle);
8
8
  }
9
9
  } catch (e) {
@@ -1201,6 +1201,7 @@ const LocalProjectsPanelContent = ({
1201
1201
  const [filter, setFilter] = useState("");
1202
1202
  const [showSearch, setShowSearch] = useState(defaultShowSearch);
1203
1203
  const [isAdding, setIsAdding] = useState(false);
1204
+ const [isScanning, setIsScanning] = useState(false);
1204
1205
  const [selectedEntry, setSelectedEntry] = useState(null);
1205
1206
  const [windowStates, setWindowStates] = useState(/* @__PURE__ */ new Map());
1206
1207
  const [sortByOrg, setSortByOrg] = useState(false);
@@ -1350,6 +1351,19 @@ const LocalProjectsPanelContent = ({
1350
1351
  console.error("Failed to track repository:", error);
1351
1352
  }
1352
1353
  };
1354
+ const handleScanForRepos = async () => {
1355
+ setIsScanning(true);
1356
+ try {
1357
+ await context.refresh("repository", "alexandriaRepositories");
1358
+ events.emit(createPanelEvent$7(`${PANEL_ID$f}:scan-completed`, {
1359
+ discoveredCount: discoveredRepositories.length
1360
+ }));
1361
+ } catch (error) {
1362
+ console.error("Failed to scan for repositories:", error);
1363
+ } finally {
1364
+ setIsScanning(false);
1365
+ }
1366
+ };
1353
1367
  const handleSelectRepository = (entry) => {
1354
1368
  setSelectedEntry(entry);
1355
1369
  events.emit(createPanelEvent$7(`${PANEL_ID$f}:repository-selected`, { entry }));
@@ -1375,6 +1389,13 @@ const LocalProjectsPanelContent = ({
1375
1389
  var _a2, _b2;
1376
1390
  if (!a.isDiscovered && b.isDiscovered) return -1;
1377
1391
  if (a.isDiscovered && !b.isDiscovered) return 1;
1392
+ if (a.lastOpenedAt && !b.lastOpenedAt) return -1;
1393
+ if (!a.lastOpenedAt && b.lastOpenedAt) return 1;
1394
+ if (a.lastOpenedAt && b.lastOpenedAt) {
1395
+ const aTime = new Date(a.lastOpenedAt).getTime();
1396
+ const bTime = new Date(b.lastOpenedAt).getTime();
1397
+ if (aTime !== bTime) return bTime - aTime;
1398
+ }
1378
1399
  if (sortByOrg) {
1379
1400
  const aOrg = (((_a2 = a.github) == null ? void 0 : _a2.owner) ?? "").toLowerCase();
1380
1401
  const bOrg = (((_b2 = b.github) == null ? void 0 : _b2.owner) ?? "").toLowerCase();
@@ -1513,7 +1534,7 @@ const LocalProjectsPanelContent = ({
1513
1534
  "button",
1514
1535
  {
1515
1536
  onClick: () => setSortByOrg(!sortByOrg),
1516
- title: sortByOrg ? "Sorting by organization" : "Sorting by repo name",
1537
+ title: sortByOrg ? "Sort by: Last opened, then organization" : "Sort by: Last opened, then name",
1517
1538
  style: {
1518
1539
  padding: "4px",
1519
1540
  borderRadius: "4px",
@@ -1530,6 +1551,37 @@ const LocalProjectsPanelContent = ({
1530
1551
  children: sortByOrg ? /* @__PURE__ */ jsx(Building2, { size: 16 }) : /* @__PURE__ */ jsx(FolderGit2, { size: 16 })
1531
1552
  }
1532
1553
  ),
1554
+ /* @__PURE__ */ jsx(
1555
+ "button",
1556
+ {
1557
+ onClick: handleScanForRepos,
1558
+ disabled: isScanning,
1559
+ title: "Scan for repositories",
1560
+ style: {
1561
+ padding: "4px",
1562
+ borderRadius: "4px",
1563
+ border: `1px solid ${theme.colors.border}`,
1564
+ backgroundColor: theme.colors.backgroundSecondary,
1565
+ color: theme.colors.textSecondary,
1566
+ cursor: isScanning ? "default" : "pointer",
1567
+ display: "flex",
1568
+ alignItems: "center",
1569
+ justifyContent: "center",
1570
+ opacity: isScanning ? 0.6 : 1,
1571
+ transition: "all 0.2s",
1572
+ flexShrink: 0
1573
+ },
1574
+ children: /* @__PURE__ */ jsx(
1575
+ RefreshCw,
1576
+ {
1577
+ size: 16,
1578
+ style: {
1579
+ animation: isScanning ? "spin 1s linear infinite" : "none"
1580
+ }
1581
+ }
1582
+ )
1583
+ }
1584
+ ),
1533
1585
  panelActions.selectDirectory && /* @__PURE__ */ jsx(
1534
1586
  "button",
1535
1587
  {