@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;
|
|
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"}
|
package/dist/panels.bundle.js
CHANGED
|
@@ -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 ? "
|
|
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
|
{
|