dsh-plugin-standalone-session 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -480,6 +480,7 @@ var zh = {
480
480
  "panel.selectToolbar": "\u6279\u91CF\u9009\u62E9",
481
481
  "panel.selectAll": "\u5168\u9009",
482
482
  "panel.selectAllLabel": "\u5168\u9009\u72EC\u7ACB\u4F1A\u8BDD",
483
+ "panel.selectionHint": "\u70B9\u51FB\u4F1A\u8BDD\u884C\u9009\u62E9\uFF0C\u6216\u4F7F\u7528\u5168\u9009\u3002",
483
484
  "panel.selectedCount": "\u5DF2\u9009 {n} / {total}",
484
485
  "panel.selectRow": "\u9009\u62E9\u201C{title}\u201D",
485
486
  "panel.batchDelete": "\u5220\u9664",
@@ -555,6 +556,7 @@ var en = {
555
556
  "panel.selectToolbar": "Bulk selection",
556
557
  "panel.selectAll": "Select all",
557
558
  "panel.selectAllLabel": "Select all standalone sessions",
559
+ "panel.selectionHint": "Select rows, or use Select all.",
558
560
  "panel.selectedCount": "{n} / {total} selected",
559
561
  "panel.selectRow": 'Select "{title}"',
560
562
  "panel.batchDelete": "Delete",
@@ -939,7 +941,7 @@ function DialogFrame({ title, children, footer, onCancel, busy = false }) {
939
941
  'button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])'
940
942
  )
941
943
  );
942
- focusables()[0]?.focus();
944
+ focusables()[0]?.focus({ preventScroll: true });
943
945
  const onKey = (event) => {
944
946
  if (event.key === "Escape" && !busyRef.current) {
945
947
  event.preventDefault();
@@ -962,7 +964,7 @@ function DialogFrame({ title, children, footer, onCancel, busy = false }) {
962
964
  document.addEventListener("keydown", onKey);
963
965
  return () => {
964
966
  document.removeEventListener("keydown", onKey);
965
- previous?.focus();
967
+ previous?.focus({ preventScroll: true });
966
968
  };
967
969
  }, []);
968
970
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -1188,6 +1190,8 @@ function createStandalonePanel(ctx) {
1188
1190
  const menuButtonRef = (0, import_react3.useRef)(null);
1189
1191
  const selectAllRef = (0, import_react3.useRef)(null);
1190
1192
  const selectButtonRef = (0, import_react3.useRef)(null);
1193
+ const panelRef = (0, import_react3.useRef)(null);
1194
+ const wasSelecting = (0, import_react3.useRef)(false);
1191
1195
  const selected = (0, import_react3.useMemo)(() => selectedRows(rows, selectedIds), [rows, selectedIds]);
1192
1196
  const state = (0, import_react3.useMemo)(() => selectionState(rows, selectedIds), [rows, selectedIds]);
1193
1197
  const locked = busy !== null || batchProgress !== null;
@@ -1196,7 +1200,6 @@ function createStandalonePanel(ctx) {
1196
1200
  setSelectedIds(/* @__PURE__ */ new Set());
1197
1201
  setMenuTarget(null);
1198
1202
  setError(null);
1199
- selectButtonRef.current?.focus();
1200
1203
  };
1201
1204
  const enterSelection = () => {
1202
1205
  if (locked) return;
@@ -1233,8 +1236,14 @@ function createStandalonePanel(ctx) {
1233
1236
  }
1234
1237
  }, [rows, selectedIds, selectionMode]);
1235
1238
  (0, import_react3.useEffect)(() => {
1236
- if (selectionMode) selectAllRef.current?.focus();
1239
+ if (selectionMode) selectAllRef.current?.focus({ preventScroll: true });
1237
1240
  }, [selectionMode]);
1241
+ (0, import_react3.useEffect)(() => {
1242
+ if (wasSelecting.current && !selectionMode && rows.length > 0) {
1243
+ selectButtonRef.current?.focus({ preventScroll: true });
1244
+ }
1245
+ wasSelecting.current = selectionMode;
1246
+ }, [selectionMode, rows.length]);
1238
1247
  (0, import_react3.useEffect)(() => {
1239
1248
  if (selectAllRef.current !== null) selectAllRef.current.indeterminate = state.some;
1240
1249
  }, [state.some, selectionMode]);
@@ -1293,12 +1302,19 @@ function createStandalonePanel(ctx) {
1293
1302
  setBusy(null);
1294
1303
  }
1295
1304
  };
1305
+ const reopenIfUnmounted = () => {
1306
+ window.setTimeout(() => {
1307
+ if (panelRef.current === null || !panelRef.current.isConnected) {
1308
+ openManagementPanel(ctx, t);
1309
+ }
1310
+ }, 0);
1311
+ };
1296
1312
  const remove = async (row) => {
1297
1313
  setBusy(row.id);
1298
1314
  setError(null);
1299
1315
  try {
1300
1316
  await archiveStandalone(ctx, row.id);
1301
- openManagementPanel(ctx, t);
1317
+ reopenIfUnmounted();
1302
1318
  setDeleteTarget(null);
1303
1319
  } catch (reason) {
1304
1320
  throw new Error(messageOf(reason));
@@ -1331,24 +1347,24 @@ function createStandalonePanel(ctx) {
1331
1347
  setError(message);
1332
1348
  showNotice("error", message);
1333
1349
  }
1334
- openManagementPanel(ctx, t);
1350
+ reopenIfUnmounted();
1335
1351
  } catch (reason) {
1336
1352
  setBatchTargets(null);
1337
1353
  const message = t("panel.actionFailed", { message: messageOf(reason) });
1338
1354
  setError(message);
1339
1355
  showNotice("error", message);
1340
- openManagementPanel(ctx, t);
1356
+ reopenIfUnmounted();
1341
1357
  } finally {
1342
1358
  setBatchProgress(null);
1343
1359
  }
1344
1360
  };
1345
1361
  const count = t("panel.count", { n: rows.length });
1346
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "ss-panel", "aria-label": t("panel.title"), children: [
1362
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { ref: panelRef, className: "ss-panel", "aria-label": t("panel.title"), children: [
1347
1363
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ss-shell", children: [
1348
1364
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
1349
1365
  "header",
1350
1366
  {
1351
- className: `ss-header${selectionMode ? " ss-headerSelection" : ""}`,
1367
+ className: "ss-header",
1352
1368
  role: selectionMode ? "toolbar" : void 0,
1353
1369
  "aria-label": selectionMode ? t("panel.selectToolbar") : void 0,
1354
1370
  children: [
@@ -1357,7 +1373,15 @@ function createStandalonePanel(ctx) {
1357
1373
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "ss-title", children: t("panel.title") }),
1358
1374
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "ss-count ss-countInline", children: selectionMode ? t("panel.selectedCount", { n: state.count, total: rows.length }) : count })
1359
1375
  ] }),
1360
- !selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "ss-description", children: t("panel.description") }) : null
1376
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1377
+ "p",
1378
+ {
1379
+ className: `ss-statusLine${error !== null ? " ss-statusLineError" : ""}`,
1380
+ role: error !== null ? "alert" : void 0,
1381
+ title: error ?? void 0,
1382
+ children: error ?? (selectionMode ? t("panel.selectionHint") : t("panel.description"))
1383
+ }
1384
+ )
1361
1385
  ] }),
1362
1386
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ss-headerActions", children: selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
1363
1387
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "ss-selectAll", children: [
@@ -1375,7 +1399,7 @@ function createStandalonePanel(ctx) {
1375
1399
  ),
1376
1400
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: t("panel.selectAll") })
1377
1401
  ] }),
1378
- state.count > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1402
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "ss-deleteSlot", children: state.count > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1379
1403
  "button",
1380
1404
  {
1381
1405
  type: "button",
@@ -1384,7 +1408,7 @@ function createStandalonePanel(ctx) {
1384
1408
  onClick: beginBatch,
1385
1409
  children: t("panel.batchDelete")
1386
1410
  }
1387
- ) : null,
1411
+ ) : null }),
1388
1412
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1389
1413
  "button",
1390
1414
  {
@@ -1409,7 +1433,6 @@ function createStandalonePanel(ctx) {
1409
1433
  ]
1410
1434
  }
1411
1435
  ),
1412
- error !== null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ss-error", role: "alert", children: error }) : null,
1413
1436
  loading && rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ss-empty", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "ss-emptyHint", children: t("panel.loading") }) }) : rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ss-empty", children: [
1414
1437
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "ss-emptyTitle", children: t("panel.empty") }),
1415
1438
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "ss-emptyHint", children: t("panel.emptyHint") }),
@@ -1453,7 +1476,7 @@ function createStandalonePanel(ctx) {
1453
1476
  {
1454
1477
  className: `ss-row${openMenu ? " ss-rowMenuOpen" : ""}${selectionMode && checked ? " ss-rowSelected" : ""}`,
1455
1478
  children: [
1456
- selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1479
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "ss-rowLead", children: selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1457
1480
  "input",
1458
1481
  {
1459
1482
  type: "checkbox",
@@ -1463,7 +1486,7 @@ function createStandalonePanel(ctx) {
1463
1486
  "aria-label": t("panel.selectRow", { title }),
1464
1487
  onChange: () => toggleRow(row.id)
1465
1488
  }
1466
- ) : null,
1489
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StandaloneIcon, { size: 14 }) }),
1467
1490
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
1468
1491
  "button",
1469
1492
  {
@@ -1490,7 +1513,7 @@ function createStandalonePanel(ctx) {
1490
1513
  ]
1491
1514
  }
1492
1515
  ),
1493
- !selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ss-rowActions", children: [
1516
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ss-rowActions", children: !selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
1494
1517
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1495
1518
  "button",
1496
1519
  {
@@ -1547,13 +1570,13 @@ function createStandalonePanel(ctx) {
1547
1570
  ]
1548
1571
  }
1549
1572
  ) : null
1550
- ] }) : null
1573
+ ] }) : null })
1551
1574
  ]
1552
1575
  },
1553
1576
  row.id
1554
1577
  );
1555
1578
  }) }),
1556
- !selectionMode ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "ss-panelHint", children: t("panel.archivedHint") }) : null
1579
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "ss-panelHint", children: t("panel.archivedHint") })
1557
1580
  ] }),
1558
1581
  batchTargets !== null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1559
1582
  BatchDeleteDialog,
@@ -1610,9 +1633,14 @@ var CSS = `
1610
1633
  align-items: flex-start;
1611
1634
  gap: 16px;
1612
1635
  justify-content: space-between;
1613
- flex-wrap: wrap;
1636
+ flex-wrap: nowrap;
1637
+ min-height: 58px;
1614
1638
  margin-bottom: 8px;
1615
1639
  }
1640
+ .ss-headerMain {
1641
+ min-width: 0;
1642
+ flex: 1;
1643
+ }
1616
1644
  .ss-titleRow {
1617
1645
  display: flex;
1618
1646
  align-items: center;
@@ -1625,12 +1653,17 @@ var CSS = `
1625
1653
  font-weight: 600;
1626
1654
  margin: 0;
1627
1655
  }
1628
- .ss-description {
1656
+ .ss-statusLine {
1657
+ margin: 6px 0 0;
1629
1658
  color: var(--dsw-alias-label-secondary, #59636e);
1630
1659
  font-size: 13px;
1631
1660
  line-height: 20px;
1632
- margin: 6px 0 0;
1633
- max-width: 560px;
1661
+ overflow: hidden;
1662
+ text-overflow: ellipsis;
1663
+ white-space: nowrap;
1664
+ }
1665
+ .ss-statusLineError {
1666
+ color: var(--dsw-alias-state-error-primary, #d1242f);
1634
1667
  }
1635
1668
  .ss-count {
1636
1669
  color: var(--dsw-alias-label-tertiary, #818b98);
@@ -1644,21 +1677,27 @@ var CSS = `
1644
1677
  }
1645
1678
  .ss-headerActions {
1646
1679
  display: flex;
1680
+ flex: 0 0 176px;
1681
+ width: 176px;
1682
+ height: 32px;
1647
1683
  align-items: center;
1648
1684
  justify-content: flex-end;
1649
- flex-wrap: wrap;
1685
+ flex-wrap: nowrap;
1650
1686
  gap: 8px;
1651
1687
  }
1652
- .ss-headerSelection {
1653
- position: sticky;
1654
- top: 0;
1655
- z-index: 6;
1656
- align-items: center;
1657
- padding: 8px 0;
1658
- background: var(--dsw-specific-main-fill, var(--dsw-alias-bg-elevated, #fff));
1688
+ .ss-deleteSlot {
1689
+ width: 56px;
1690
+ height: 32px;
1691
+ flex: none;
1692
+ display: flex;
1693
+ justify-content: flex-end;
1694
+ }
1695
+ .ss-deleteSlot .ss-button {
1696
+ min-width: 52px;
1697
+ flex: none;
1659
1698
  }
1660
1699
  .ss-selectButton {
1661
- min-height: 30px;
1700
+ min-height: 32px;
1662
1701
  padding: 3px 8px;
1663
1702
  border: 0;
1664
1703
  border-radius: var(--dsw-radius-md, 10px);
@@ -1685,6 +1724,8 @@ var CSS = `
1685
1724
  .ss-button {
1686
1725
  font: inherit;
1687
1726
  display: inline-flex;
1727
+ flex: none;
1728
+ white-space: nowrap;
1688
1729
  align-items: center;
1689
1730
  justify-content: center;
1690
1731
  gap: 6px;
@@ -1775,10 +1816,12 @@ var CSS = `
1775
1816
  }
1776
1817
  .ss-row {
1777
1818
  position: relative;
1778
- display: flex;
1819
+ display: grid;
1820
+ grid-template-columns: 18px minmax(0, 1fr) 28px;
1821
+ column-gap: 14px;
1779
1822
  align-items: center;
1780
- gap: 14px;
1781
1823
  box-sizing: border-box;
1824
+ height: 66px;
1782
1825
  padding: 12px 14px;
1783
1826
  border-radius: var(--dsw-radius-lg, 14px);
1784
1827
  border: 0.5px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.2));
@@ -1800,9 +1843,19 @@ var CSS = `
1800
1843
  cursor: default;
1801
1844
  opacity: 0.7;
1802
1845
  }
1846
+ .ss-rowLead {
1847
+ width: 18px;
1848
+ height: 20px;
1849
+ flex: none;
1850
+ display: inline-flex;
1851
+ align-items: center;
1852
+ justify-content: center;
1853
+ color: var(--dsw-alias-label-tertiary, #818b98);
1854
+ }
1803
1855
  .ss-rowMain {
1804
1856
  min-width: 0;
1805
- flex: 1;
1857
+ width: 100%;
1858
+ grid-column: 2;
1806
1859
  display: flex;
1807
1860
  flex-direction: column;
1808
1861
  gap: 3px;
@@ -1847,16 +1900,21 @@ var CSS = `
1847
1900
  align-items: center;
1848
1901
  gap: 8px;
1849
1902
  min-width: 0;
1850
- flex-wrap: wrap;
1903
+ flex-wrap: nowrap;
1904
+ overflow: hidden;
1905
+ white-space: nowrap;
1851
1906
  }
1852
1907
  .ss-dotSep {
1853
1908
  opacity: 0.5;
1854
1909
  }
1855
1910
  .ss-rowActions {
1856
1911
  position: relative;
1912
+ grid-column: 3;
1913
+ width: 28px;
1857
1914
  display: flex;
1858
1915
  align-items: center;
1859
- gap: 6px;
1916
+ justify-content: center;
1917
+ gap: 0;
1860
1918
  flex: none;
1861
1919
  }
1862
1920
  .ss-rowMenuButton {
@@ -2218,11 +2276,7 @@ var CSS = `
2218
2276
  @media (max-width: 640px) {
2219
2277
  .ss-panel { padding: 20px 14px 40px; }
2220
2278
  .ss-row { flex-wrap: nowrap; gap: 10px; }
2221
- .ss-headerSelection { align-items: flex-start; }
2222
- .ss-headerSelection .ss-headerActions {
2223
- width: 100%;
2224
- justify-content: flex-end;
2225
- }
2279
+ .ss-headerActions { flex-basis: 176px; width: 176px; }
2226
2280
  }
2227
2281
  `;
2228
2282
  function insertStyles() {
@@ -3,7 +3,7 @@
3
3
  * keeps `en` complete, and both shipped languages are registered together.
4
4
  */
5
5
  export declare const NS = "standaloneSession";
6
- export type StandaloneKey = 'panel.label' | 'panel.title' | 'panel.description' | 'panel.new' | 'panel.empty' | 'panel.emptyHint' | 'panel.badge' | 'panel.open' | 'panel.rename' | 'panel.delete' | 'panel.untitled' | 'panel.blank' | 'panel.running' | 'panel.cwd' | 'panel.count' | 'panel.deleteTitle' | 'panel.deleteBody' | 'panel.deleteConfirm' | 'panel.select' | 'panel.selectToolbar' | 'panel.selectAll' | 'panel.selectAllLabel' | 'panel.selectedCount' | 'panel.selectRow' | 'panel.batchDelete' | 'panel.batchDeleteTitle' | 'panel.batchDeleteBody' | 'panel.batchDeleteRunning' | 'panel.batchDeleteDirs' | 'panel.batchDeleting' | 'panel.batchPartial' | 'panel.deleteKeepDir' | 'panel.cancel' | 'panel.renameTitle' | 'panel.renameLabel' | 'panel.more' | 'panel.save' | 'panel.titleRequired' | 'panel.actionFailed' | 'panel.retry' | 'panel.archivedHint' | 'panel.loading' | 'entry.label' | 'launcher.creating' | 'launcher.failedTitle' | 'launcher.retry' | 'launcher.manage' | 'launcher.hint' | 'command.label' | 'command.description' | 'command.manageLabel' | 'command.manageDescription' | 'footer.manage' | 'footer.manageCount' | 'footer.manageTooltip' | 'time.now' | 'time.minutes' | 'time.hours' | 'time.days' | 'toast.manageFailed' | 'hero.badge' | 'hero.hint' | 'row.mark' | 'row.hover' | 'composer.placeholder' | 'toast.created' | 'toast.createFailed' | 'toast.deleteFailed' | 'toast.deleted' | 'toast.renamed' | 'toast.renameFailed' | 'error.noHome' | 'error.noSession';
6
+ export type StandaloneKey = 'panel.label' | 'panel.title' | 'panel.description' | 'panel.new' | 'panel.empty' | 'panel.emptyHint' | 'panel.badge' | 'panel.open' | 'panel.rename' | 'panel.delete' | 'panel.untitled' | 'panel.blank' | 'panel.running' | 'panel.cwd' | 'panel.count' | 'panel.deleteTitle' | 'panel.deleteBody' | 'panel.deleteConfirm' | 'panel.select' | 'panel.selectToolbar' | 'panel.selectAll' | 'panel.selectAllLabel' | 'panel.selectionHint' | 'panel.selectedCount' | 'panel.selectRow' | 'panel.batchDelete' | 'panel.batchDeleteTitle' | 'panel.batchDeleteBody' | 'panel.batchDeleteRunning' | 'panel.batchDeleteDirs' | 'panel.batchDeleting' | 'panel.batchPartial' | 'panel.deleteKeepDir' | 'panel.cancel' | 'panel.renameTitle' | 'panel.renameLabel' | 'panel.more' | 'panel.save' | 'panel.titleRequired' | 'panel.actionFailed' | 'panel.retry' | 'panel.archivedHint' | 'panel.loading' | 'entry.label' | 'launcher.creating' | 'launcher.failedTitle' | 'launcher.retry' | 'launcher.manage' | 'launcher.hint' | 'command.label' | 'command.description' | 'command.manageLabel' | 'command.manageDescription' | 'footer.manage' | 'footer.manageCount' | 'footer.manageTooltip' | 'time.now' | 'time.minutes' | 'time.hours' | 'time.days' | 'toast.manageFailed' | 'hero.badge' | 'hero.hint' | 'row.mark' | 'row.hover' | 'composer.placeholder' | 'toast.created' | 'toast.createFailed' | 'toast.deleteFailed' | 'toast.deleted' | 'toast.renamed' | 'toast.renameFailed' | 'error.noHome' | 'error.noSession';
7
7
  export type StandaloneDict = Readonly<Record<StandaloneKey, string>>;
8
8
  export declare const zh: StandaloneDict;
9
9
  export declare const en: StandaloneDict;
@@ -2,7 +2,7 @@
2
2
  * One namespaced stylesheet. DSH theme variables carry the palette, so the
3
3
  * plugin follows light/dark themes without owning color tokens.
4
4
  */
5
- export declare const CSS = "\n.ss-panel {\n box-sizing: border-box;\n height: 100%;\n min-height: 0;\n overflow: auto;\n padding: 32px clamp(20px, 5vw, 56px) 56px;\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-specific-main-fill, transparent);\n}\n.ss-shell {\n width: 100%;\n max-width: 880px;\n margin: 0 auto;\n}\n.ss-header {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n justify-content: space-between;\n flex-wrap: wrap;\n margin-bottom: 8px;\n}\n.ss-titleRow {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.ss-title {\n font-size: 24px;\n line-height: 32px;\n font-weight: 600;\n margin: 0;\n}\n.ss-description {\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n margin: 6px 0 0;\n max-width: 560px;\n}\n.ss-count {\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 20px;\n margin-top: 6px;\n}\n.ss-countInline {\n margin-top: 0;\n align-self: center;\n}\n.ss-headerActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: wrap;\n gap: 8px;\n}\n.ss-headerSelection {\n position: sticky;\n top: 0;\n z-index: 6;\n align-items: center;\n padding: 8px 0;\n background: var(--dsw-specific-main-fill, var(--dsw-alias-bg-elevated, #fff));\n}\n.ss-selectButton {\n min-height: 30px;\n padding: 3px 8px;\n border: 0;\n border-radius: var(--dsw-radius-md, 10px);\n background: transparent;\n color: var(--dsw-alias-label-secondary, #59636e);\n font: inherit;\n font-size: 13px;\n line-height: 20px;\n cursor: pointer;\n}\n.ss-selectButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-selectButton:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 1px;\n}\n.ss-selectButton:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-button {\n font: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n box-sizing: border-box;\n min-height: 32px;\n padding: 5px 12px;\n border-radius: var(--dsw-radius-md, 10px);\n border: 0.5px solid transparent;\n cursor: pointer;\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-button-elevated-fill, #f3f4f6);\n transition: background 120ms ease, border-color 120ms ease;\n}\n.ss-button:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-button:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 1px;\n}\n.ss-button:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-buttonPrimary {\n color: #fff;\n background: var(--dsw-alias-state-business-primary, #2563eb);\n border-color: var(--dsw-alias-state-business-primary, #2563eb);\n}\n.ss-buttonPrimary:hover:not(:disabled) {\n background: var(--dsw-alias-state-business-primary, #2563eb);\n filter: brightness(1.05);\n}\n.ss-buttonQuiet {\n background: transparent;\n border-color: var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.22));\n}\n.ss-buttonDanger {\n color: var(--dsw-alias-state-error-primary, #d1242f);\n background: transparent;\n border-color: var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.22));\n}\n.ss-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: none;\n border-radius: 999px;\n padding: 1px 8px 2px;\n font-size: 11px;\n line-height: 16px;\n font-weight: 600;\n letter-spacing: 0.01em;\n color: var(--dsw-alias-label-primary-bluish, #1f4f8f);\n background: var(--dsw-alias-state-business-tertiary, rgba(59, 130, 246, 0.12));\n border: 0.5px solid var(--dsw-alias-interactive-bg-hover, rgba(59, 130, 246, 0.18));\n}\n.ss-selectAll {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n cursor: pointer;\n user-select: none;\n}\n.ss-checkbox {\n width: 18px;\n height: 18px;\n margin: 0;\n flex: none;\n accent-color: var(--dsw-alias-state-business-primary, #2563eb);\n cursor: pointer;\n}\n.ss-checkbox:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 20px 0 0;\n padding: 0;\n list-style: none;\n}\n.ss-row {\n position: relative;\n display: flex;\n align-items: center;\n gap: 14px;\n box-sizing: border-box;\n padding: 12px 14px;\n border-radius: var(--dsw-radius-lg, 14px);\n border: 0.5px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.2));\n background: var(--dsw-alias-bg-elevated, rgba(255, 255, 255, 0.02));\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n.ss-row:hover,\n.ss-row:focus-within {\n border-color: var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-rowSelected,\n.ss-rowSelected:hover,\n.ss-rowSelected:focus-within {\n border-color: var(--dsw-alias-state-business-primary, #3b82f6);\n}\n.ss-row[aria-disabled=\"true\"] {\n cursor: default;\n opacity: 0.7;\n}\n.ss-rowMain {\n min-width: 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 3px;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.ss-rowMain:disabled {\n cursor: default;\n opacity: 0.7;\n}\n.ss-rowMain:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 2px;\n border-radius: 6px;\n}\n.ss-rowTitleRow {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.ss-rowTitle {\n font-size: 14px;\n line-height: 20px;\n font-weight: 600;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ss-rowMeta {\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 18px;\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n.ss-dotSep {\n opacity: 0.5;\n}\n.ss-rowActions {\n position: relative;\n display: flex;\n align-items: center;\n gap: 6px;\n flex: none;\n}\n.ss-rowMenuButton {\n width: 28px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-md, 10px);\n background: transparent;\n color: var(--dsw-alias-label-tertiary, #818b98);\n font: inherit;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n opacity: 0;\n transition: background 120ms ease, color 120ms ease, opacity 120ms ease;\n}\n.ss-row:hover .ss-rowMenuButton,\n.ss-row:focus-within .ss-rowMenuButton,\n.ss-rowMenuOpen .ss-rowMenuButton {\n opacity: 1;\n}\n.ss-rowMenuButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-rowMenuButton:focus-visible {\n opacity: 1;\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 1px;\n}\n.ss-rowMenuButton:disabled {\n cursor: default;\n opacity: 0.35;\n}\n.ss-rowMenu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 20;\n min-width: 136px;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n border-radius: var(--dsw-radius-md, 10px);\n background: var(--dsw-alias-bg-elevated, #fff);\n box-shadow: 0 10px 28px rgba(0, 0, 0, 0.16);\n}\n.ss-rowMenu button {\n box-sizing: border-box;\n width: 100%;\n padding: 6px 9px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-primary, #1f2328);\n font: inherit;\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n cursor: pointer;\n}\n.ss-rowMenu button:hover:not(:disabled),\n.ss-rowMenu button:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n outline: none;\n}\n.ss-rowMenu button:disabled {\n cursor: default;\n opacity: 0.5;\n}\n.ss-rowMenuDanger {\n color: var(--dsw-alias-state-error-primary, #d1242f) !important;\n}\n.ss-status {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n.ss-statusDot {\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background: currentColor;\n opacity: 0.55;\n}\n.ss-stateRunning {\n color: var(--dsw-alias-state-business-primary, #2563eb);\n font-weight: 600;\n}\n.ss-empty {\n margin-top: 28px;\n padding: 44px 24px;\n text-align: center;\n border: 0.5px dashed var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.3));\n border-radius: var(--dsw-radius-lg, 14px);\n}\n.ss-emptyTitle {\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n margin: 0 0 6px;\n}\n.ss-emptyHint {\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n margin: 0 auto;\n max-width: 460px;\n}\n.ss-emptyAction {\n margin-top: 18px;\n}\n.ss-panelHint {\n margin: 18px 0 0;\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 20px;\n}\n.ss-fieldLabel {\n display: block;\n margin: 12px 0 6px;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 12px;\n line-height: 18px;\n}\n.ss-error {\n margin-top: 16px;\n padding: 8px 10px;\n border-radius: var(--dsw-radius-sm, 8px);\n color: var(--dsw-alias-state-error-primary, #d1242f);\n background: var(--dsw-alias-state-error-tertiary, rgba(209, 36, 47, 0.08));\n font-size: 12px;\n line-height: 18px;\n}\n.ss-dialogBackdrop {\n position: fixed;\n inset: 0;\n z-index: 80;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.28);\n padding: 24px;\n}\n.ss-dialog {\n width: 100%;\n max-width: 440px;\n max-height: calc(100vh - 48px);\n overflow: auto;\n box-sizing: border-box;\n border-radius: var(--dsw-radius-lg, 14px);\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: var(--dsw-alias-bg-elevated, #fff);\n padding: 20px;\n box-shadow: 0 18px 48px rgba(0, 0, 0, 0.22);\n}\n.ss-dialogTitle {\n margin: 0 0 6px;\n font-size: 16px;\n line-height: 24px;\n font-weight: 600;\n}\n.ss-dialogBody {\n margin: 0 0 14px;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n}\n.ss-input {\n box-sizing: border-box;\n width: 100%;\n height: 36px;\n border-radius: var(--dsw-radius-sm, 8px);\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: transparent;\n color: inherit;\n font: inherit;\n padding: 0 10px;\n}\n.ss-dialogFooter {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 18px;\n}\n.ss-batchWarning {\n margin: 0 0 10px;\n color: var(--dsw-alias-label-primary, #1f2328);\n font-size: 12px;\n line-height: 18px;\n font-weight: 600;\n}\n.ss-batchDirs {\n margin: 0 0 10px;\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 18px;\n}\n.ss-footerAction {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 30px;\n padding: 4px 8px;\n border: 0;\n border-radius: var(--dsw-radius-md, 10px);\n background: transparent;\n color: var(--dsw-alias-label-secondary, #59636e);\n font: inherit;\n cursor: pointer;\n text-align: left;\n}\n.ss-footerAction:hover {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-footerAction:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-footerLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 13px;\n}\n.ss-footerRail {\n width: 36px;\n height: 36px;\n justify-content: center;\n padding: 0;\n}\n.ss-panelIcon {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.ss-launcher {\n box-sizing: border-box;\n min-height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n.ss-launcherCard {\n box-sizing: border-box;\n width: 100%;\n max-width: 430px;\n padding: 30px 28px;\n text-align: center;\n border: 0.5px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.22));\n border-radius: var(--dsw-radius-lg, 14px);\n background: var(--dsw-alias-bg-elevated, rgba(255, 255, 255, 0.02));\n}\n.ss-launcherSpinner {\n width: 22px;\n height: 22px;\n margin: 0 auto 14px;\n border-radius: 50%;\n border: 2px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.25));\n border-top-color: var(--dsw-alias-state-business-primary, #2563eb);\n animation: ss-spin 900ms linear infinite;\n}\n@keyframes ss-spin {\n to { transform: rotate(360deg); }\n}\n.ss-launcherTitle {\n margin: 0;\n font-size: 15px;\n line-height: 22px;\n font-weight: 600;\n}\n.ss-launcherHint {\n margin: 6px 0 0;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n}\n.ss-launcherActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 8px;\n margin-top: 18px;\n}\n.ss-heroBadge {\n margin-right: 4px;\n}\n.ss-rowMark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n border-radius: 4px;\n font-size: 10px;\n line-height: 1;\n font-weight: 700;\n color: var(--dsw-alias-label-primary-bluish, #1f4f8f);\n background: var(--dsw-alias-state-business-tertiary, rgba(59, 130, 246, 0.14));\n flex: none;\n}\n.ss-rowHover {\n display: flex;\n align-items: center;\n gap: 6px;\n color: #cfd3d6;\n font-size: 12px;\n line-height: 16px;\n}\n.ss-toast {\n position: fixed;\n left: 50%;\n bottom: 28px;\n transform: translateX(-50%);\n z-index: 90;\n max-width: min(520px, calc(100vw - 40px));\n box-sizing: border-box;\n padding: 9px 14px;\n border-radius: var(--dsw-radius-md, 10px);\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: var(--dsw-alias-bg-elevated, #fff);\n color: var(--dsw-alias-label-primary, #1f2328);\n box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);\n font-size: 13px;\n line-height: 19px;\n pointer-events: auto;\n}\n.ss-toastError {\n color: var(--dsw-alias-state-error-primary, #d1242f);\n}\n.ss-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n@media (hover: none) {\n .ss-rowMenuButton { opacity: 1; }\n}\n@media (max-width: 640px) {\n .ss-panel { padding: 20px 14px 40px; }\n .ss-row { flex-wrap: nowrap; gap: 10px; }\n .ss-headerSelection { align-items: flex-start; }\n .ss-headerSelection .ss-headerActions {\n width: 100%;\n justify-content: flex-end;\n }\n}\n";
5
+ export declare const CSS = "\n.ss-panel {\n box-sizing: border-box;\n height: 100%;\n min-height: 0;\n overflow: auto;\n padding: 32px clamp(20px, 5vw, 56px) 56px;\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-specific-main-fill, transparent);\n}\n.ss-shell {\n width: 100%;\n max-width: 880px;\n margin: 0 auto;\n}\n.ss-header {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n justify-content: space-between;\n flex-wrap: nowrap;\n min-height: 58px;\n margin-bottom: 8px;\n}\n.ss-headerMain {\n min-width: 0;\n flex: 1;\n}\n.ss-titleRow {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.ss-title {\n font-size: 24px;\n line-height: 32px;\n font-weight: 600;\n margin: 0;\n}\n.ss-statusLine {\n margin: 6px 0 0;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ss-statusLineError {\n color: var(--dsw-alias-state-error-primary, #d1242f);\n}\n.ss-count {\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 20px;\n margin-top: 6px;\n}\n.ss-countInline {\n margin-top: 0;\n align-self: center;\n}\n.ss-headerActions {\n display: flex;\n flex: 0 0 176px;\n width: 176px;\n height: 32px;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n gap: 8px;\n}\n.ss-deleteSlot {\n width: 56px;\n height: 32px;\n flex: none;\n display: flex;\n justify-content: flex-end;\n}\n.ss-deleteSlot .ss-button {\n min-width: 52px;\n flex: none;\n}\n.ss-selectButton {\n min-height: 32px;\n padding: 3px 8px;\n border: 0;\n border-radius: var(--dsw-radius-md, 10px);\n background: transparent;\n color: var(--dsw-alias-label-secondary, #59636e);\n font: inherit;\n font-size: 13px;\n line-height: 20px;\n cursor: pointer;\n}\n.ss-selectButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-selectButton:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 1px;\n}\n.ss-selectButton:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-button {\n font: inherit;\n display: inline-flex;\n flex: none;\n white-space: nowrap;\n align-items: center;\n justify-content: center;\n gap: 6px;\n box-sizing: border-box;\n min-height: 32px;\n padding: 5px 12px;\n border-radius: var(--dsw-radius-md, 10px);\n border: 0.5px solid transparent;\n cursor: pointer;\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-button-elevated-fill, #f3f4f6);\n transition: background 120ms ease, border-color 120ms ease;\n}\n.ss-button:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-button:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 1px;\n}\n.ss-button:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-buttonPrimary {\n color: #fff;\n background: var(--dsw-alias-state-business-primary, #2563eb);\n border-color: var(--dsw-alias-state-business-primary, #2563eb);\n}\n.ss-buttonPrimary:hover:not(:disabled) {\n background: var(--dsw-alias-state-business-primary, #2563eb);\n filter: brightness(1.05);\n}\n.ss-buttonQuiet {\n background: transparent;\n border-color: var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.22));\n}\n.ss-buttonDanger {\n color: var(--dsw-alias-state-error-primary, #d1242f);\n background: transparent;\n border-color: var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.22));\n}\n.ss-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: none;\n border-radius: 999px;\n padding: 1px 8px 2px;\n font-size: 11px;\n line-height: 16px;\n font-weight: 600;\n letter-spacing: 0.01em;\n color: var(--dsw-alias-label-primary-bluish, #1f4f8f);\n background: var(--dsw-alias-state-business-tertiary, rgba(59, 130, 246, 0.12));\n border: 0.5px solid var(--dsw-alias-interactive-bg-hover, rgba(59, 130, 246, 0.18));\n}\n.ss-selectAll {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n cursor: pointer;\n user-select: none;\n}\n.ss-checkbox {\n width: 18px;\n height: 18px;\n margin: 0;\n flex: none;\n accent-color: var(--dsw-alias-state-business-primary, #2563eb);\n cursor: pointer;\n}\n.ss-checkbox:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 20px 0 0;\n padding: 0;\n list-style: none;\n}\n.ss-row {\n position: relative;\n display: grid;\n grid-template-columns: 18px minmax(0, 1fr) 28px;\n column-gap: 14px;\n align-items: center;\n box-sizing: border-box;\n height: 66px;\n padding: 12px 14px;\n border-radius: var(--dsw-radius-lg, 14px);\n border: 0.5px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.2));\n background: var(--dsw-alias-bg-elevated, rgba(255, 255, 255, 0.02));\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n.ss-row:hover,\n.ss-row:focus-within {\n border-color: var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-rowSelected,\n.ss-rowSelected:hover,\n.ss-rowSelected:focus-within {\n border-color: var(--dsw-alias-state-business-primary, #3b82f6);\n}\n.ss-row[aria-disabled=\"true\"] {\n cursor: default;\n opacity: 0.7;\n}\n.ss-rowLead {\n width: 18px;\n height: 20px;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--dsw-alias-label-tertiary, #818b98);\n}\n.ss-rowMain {\n min-width: 0;\n width: 100%;\n grid-column: 2;\n display: flex;\n flex-direction: column;\n gap: 3px;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.ss-rowMain:disabled {\n cursor: default;\n opacity: 0.7;\n}\n.ss-rowMain:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 2px;\n border-radius: 6px;\n}\n.ss-rowTitleRow {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.ss-rowTitle {\n font-size: 14px;\n line-height: 20px;\n font-weight: 600;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ss-rowMeta {\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 18px;\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: nowrap;\n overflow: hidden;\n white-space: nowrap;\n}\n.ss-dotSep {\n opacity: 0.5;\n}\n.ss-rowActions {\n position: relative;\n grid-column: 3;\n width: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0;\n flex: none;\n}\n.ss-rowMenuButton {\n width: 28px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-md, 10px);\n background: transparent;\n color: var(--dsw-alias-label-tertiary, #818b98);\n font: inherit;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n opacity: 0;\n transition: background 120ms ease, color 120ms ease, opacity 120ms ease;\n}\n.ss-row:hover .ss-rowMenuButton,\n.ss-row:focus-within .ss-rowMenuButton,\n.ss-rowMenuOpen .ss-rowMenuButton {\n opacity: 1;\n}\n.ss-rowMenuButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-rowMenuButton:focus-visible {\n opacity: 1;\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary, #3b82f6));\n outline-offset: 1px;\n}\n.ss-rowMenuButton:disabled {\n cursor: default;\n opacity: 0.35;\n}\n.ss-rowMenu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 20;\n min-width: 136px;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n border-radius: var(--dsw-radius-md, 10px);\n background: var(--dsw-alias-bg-elevated, #fff);\n box-shadow: 0 10px 28px rgba(0, 0, 0, 0.16);\n}\n.ss-rowMenu button {\n box-sizing: border-box;\n width: 100%;\n padding: 6px 9px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-primary, #1f2328);\n font: inherit;\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n cursor: pointer;\n}\n.ss-rowMenu button:hover:not(:disabled),\n.ss-rowMenu button:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n outline: none;\n}\n.ss-rowMenu button:disabled {\n cursor: default;\n opacity: 0.5;\n}\n.ss-rowMenuDanger {\n color: var(--dsw-alias-state-error-primary, #d1242f) !important;\n}\n.ss-status {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n.ss-statusDot {\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background: currentColor;\n opacity: 0.55;\n}\n.ss-stateRunning {\n color: var(--dsw-alias-state-business-primary, #2563eb);\n font-weight: 600;\n}\n.ss-empty {\n margin-top: 28px;\n padding: 44px 24px;\n text-align: center;\n border: 0.5px dashed var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.3));\n border-radius: var(--dsw-radius-lg, 14px);\n}\n.ss-emptyTitle {\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n margin: 0 0 6px;\n}\n.ss-emptyHint {\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n margin: 0 auto;\n max-width: 460px;\n}\n.ss-emptyAction {\n margin-top: 18px;\n}\n.ss-panelHint {\n margin: 18px 0 0;\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 20px;\n}\n.ss-fieldLabel {\n display: block;\n margin: 12px 0 6px;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 12px;\n line-height: 18px;\n}\n.ss-error {\n margin-top: 16px;\n padding: 8px 10px;\n border-radius: var(--dsw-radius-sm, 8px);\n color: var(--dsw-alias-state-error-primary, #d1242f);\n background: var(--dsw-alias-state-error-tertiary, rgba(209, 36, 47, 0.08));\n font-size: 12px;\n line-height: 18px;\n}\n.ss-dialogBackdrop {\n position: fixed;\n inset: 0;\n z-index: 80;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.28);\n padding: 24px;\n}\n.ss-dialog {\n width: 100%;\n max-width: 440px;\n max-height: calc(100vh - 48px);\n overflow: auto;\n box-sizing: border-box;\n border-radius: var(--dsw-radius-lg, 14px);\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: var(--dsw-alias-bg-elevated, #fff);\n padding: 20px;\n box-shadow: 0 18px 48px rgba(0, 0, 0, 0.22);\n}\n.ss-dialogTitle {\n margin: 0 0 6px;\n font-size: 16px;\n line-height: 24px;\n font-weight: 600;\n}\n.ss-dialogBody {\n margin: 0 0 14px;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n}\n.ss-input {\n box-sizing: border-box;\n width: 100%;\n height: 36px;\n border-radius: var(--dsw-radius-sm, 8px);\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: transparent;\n color: inherit;\n font: inherit;\n padding: 0 10px;\n}\n.ss-dialogFooter {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 18px;\n}\n.ss-batchWarning {\n margin: 0 0 10px;\n color: var(--dsw-alias-label-primary, #1f2328);\n font-size: 12px;\n line-height: 18px;\n font-weight: 600;\n}\n.ss-batchDirs {\n margin: 0 0 10px;\n color: var(--dsw-alias-label-tertiary, #818b98);\n font-size: 12px;\n line-height: 18px;\n}\n.ss-footerAction {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 30px;\n padding: 4px 8px;\n border: 0;\n border-radius: var(--dsw-radius-md, 10px);\n background: transparent;\n color: var(--dsw-alias-label-secondary, #59636e);\n font: inherit;\n cursor: pointer;\n text-align: left;\n}\n.ss-footerAction:hover {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, #e9ebee);\n}\n.ss-footerAction:disabled {\n cursor: default;\n opacity: 0.55;\n}\n.ss-footerLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 13px;\n}\n.ss-footerRail {\n width: 36px;\n height: 36px;\n justify-content: center;\n padding: 0;\n}\n.ss-panelIcon {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.ss-launcher {\n box-sizing: border-box;\n min-height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n.ss-launcherCard {\n box-sizing: border-box;\n width: 100%;\n max-width: 430px;\n padding: 30px 28px;\n text-align: center;\n border: 0.5px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.22));\n border-radius: var(--dsw-radius-lg, 14px);\n background: var(--dsw-alias-bg-elevated, rgba(255, 255, 255, 0.02));\n}\n.ss-launcherSpinner {\n width: 22px;\n height: 22px;\n margin: 0 auto 14px;\n border-radius: 50%;\n border: 2px solid var(--dsw-alias-border-l2, rgba(128, 128, 128, 0.25));\n border-top-color: var(--dsw-alias-state-business-primary, #2563eb);\n animation: ss-spin 900ms linear infinite;\n}\n@keyframes ss-spin {\n to { transform: rotate(360deg); }\n}\n.ss-launcherTitle {\n margin: 0;\n font-size: 15px;\n line-height: 22px;\n font-weight: 600;\n}\n.ss-launcherHint {\n margin: 6px 0 0;\n color: var(--dsw-alias-label-secondary, #59636e);\n font-size: 13px;\n line-height: 20px;\n}\n.ss-launcherActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 8px;\n margin-top: 18px;\n}\n.ss-heroBadge {\n margin-right: 4px;\n}\n.ss-rowMark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n border-radius: 4px;\n font-size: 10px;\n line-height: 1;\n font-weight: 700;\n color: var(--dsw-alias-label-primary-bluish, #1f4f8f);\n background: var(--dsw-alias-state-business-tertiary, rgba(59, 130, 246, 0.14));\n flex: none;\n}\n.ss-rowHover {\n display: flex;\n align-items: center;\n gap: 6px;\n color: #cfd3d6;\n font-size: 12px;\n line-height: 16px;\n}\n.ss-toast {\n position: fixed;\n left: 50%;\n bottom: 28px;\n transform: translateX(-50%);\n z-index: 90;\n max-width: min(520px, calc(100vw - 40px));\n box-sizing: border-box;\n padding: 9px 14px;\n border-radius: var(--dsw-radius-md, 10px);\n border: 0.5px solid var(--dsw-alias-border-l4, rgba(128, 128, 128, 0.35));\n background: var(--dsw-alias-bg-elevated, #fff);\n color: var(--dsw-alias-label-primary, #1f2328);\n box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);\n font-size: 13px;\n line-height: 19px;\n pointer-events: auto;\n}\n.ss-toastError {\n color: var(--dsw-alias-state-error-primary, #d1242f);\n}\n.ss-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n@media (hover: none) {\n .ss-rowMenuButton { opacity: 1; }\n}\n@media (max-width: 640px) {\n .ss-panel { padding: 20px 14px 40px; }\n .ss-row { flex-wrap: nowrap; gap: 10px; }\n .ss-headerActions { flex-basis: 176px; width: 176px; }\n}\n";
6
6
  /**
7
7
  * Insert (or replace) the plugin's one style element.
8
8
  * @returns a disposer that removes the element.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-standalone-session",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "displayName": "Standalone Session",
5
5
  "description": "Create and manage standalone DSH sessions that are not attached to any workspace.",
6
6
  "type": "module",