@sparkelf/dsh-knowledge-base 0.1.1 → 0.1.3

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
@@ -332,32 +332,32 @@ window.__ModuleLoader__.load({
332
332
  document.head.appendChild(tag);
333
333
  }
334
334
  var KnowledgeSettingsSection_module_css_default = {
335
+ "log": "c269jW_log",
336
+ "modeOption": "c269jW_modeOption",
337
+ "field": "c269jW_field",
338
+ "modeRow": "c269jW_modeRow",
335
339
  "title": "c269jW_title",
336
- "input": "c269jW_input",
337
- "saveRow": "c269jW_saveRow",
338
- "badgeWarn": "c269jW_badgeWarn",
339
- "pair": "c269jW_pair",
340
- "statusLabel": "c269jW_statusLabel",
341
340
  "statusRow": "c269jW_statusRow",
342
341
  "steps": "c269jW_steps",
343
- "log": "c269jW_log",
342
+ "logBox": "c269jW_logBox",
343
+ "error": "c269jW_error",
344
+ "saveRow": "c269jW_saveRow",
344
345
  "badgeOk": "c269jW_badgeOk",
346
+ "input": "c269jW_input",
347
+ "groupTitle": "c269jW_groupTitle",
348
+ "detail": "c269jW_detail",
345
349
  "stepLabel": "c269jW_stepLabel",
346
350
  "fieldLabel": "c269jW_fieldLabel",
351
+ "statusLabel": "c269jW_statusLabel",
347
352
  "pairs": "c269jW_pairs",
353
+ "pair": "c269jW_pair",
354
+ "step": "c269jW_step",
348
355
  "wizard": "c269jW_wizard",
349
- "error": "c269jW_error",
356
+ "notice": "c269jW_notice",
357
+ "badgeWarn": "c269jW_badgeWarn",
350
358
  "body": "c269jW_body",
351
- "select": "c269jW_select",
352
- "step": "c269jW_step",
353
- "field": "c269jW_field",
354
- "logBox": "c269jW_logBox",
355
359
  "section": "c269jW_section",
356
- "detail": "c269jW_detail",
357
- "modeOption": "c269jW_modeOption",
358
- "notice": "c269jW_notice",
359
- "groupTitle": "c269jW_groupTitle",
360
- "modeRow": "c269jW_modeRow"
360
+ "select": "c269jW_select"
361
361
  };
362
362
  //#endregion
363
363
  //#region src/client/KnowledgeSettingsSection.tsx
@@ -1119,7 +1119,7 @@ window.__ModuleLoader__.load({
1119
1119
  * who can actually upload and move documents was told they could not. Keep this list
1120
1120
  * aligned with `ResourcePermissionAction` in the backend, not with the form.
1121
1121
  */
1122
- const ACTION_ORDER$1 = [
1122
+ const ACTION_ORDER = [
1123
1123
  "read",
1124
1124
  "write",
1125
1125
  "manage"
@@ -1145,23 +1145,23 @@ window.__ModuleLoader__.load({
1145
1145
  for (const raw of actions) {
1146
1146
  const action = typeof raw === "string" ? raw.trim().toLowerCase() : "";
1147
1147
  if (action === "") continue;
1148
- if (ACTION_ORDER$1.includes(action)) {
1148
+ if (ACTION_ORDER.includes(action)) {
1149
1149
  held.add(action);
1150
1150
  continue;
1151
1151
  }
1152
1152
  if (action === "all") {
1153
- for (const actionWord of ACTION_ORDER$1) held.add(actionWord);
1153
+ for (const actionWord of ACTION_ORDER) held.add(actionWord);
1154
1154
  continue;
1155
1155
  }
1156
1156
  unknownWords.push(action);
1157
1157
  }
1158
1158
  if (unknownWords.length > 0) return {
1159
- actions: ACTION_ORDER$1.filter((action) => held.has(action)),
1159
+ actions: ACTION_ORDER.filter((action) => held.has(action)),
1160
1160
  known: false,
1161
1161
  reason: "unrecognised permission " + JSON.stringify(unknownWords[0])
1162
1162
  };
1163
1163
  return {
1164
- actions: ACTION_ORDER$1.filter((action) => held.has(action)),
1164
+ actions: ACTION_ORDER.filter((action) => held.has(action)),
1165
1165
  known: true
1166
1166
  };
1167
1167
  }
@@ -1479,84 +1479,8 @@ window.__ModuleLoader__.load({
1479
1479
  return Math.floor(firstVisibleRow / after) + 1;
1480
1480
  }
1481
1481
  //#endregion
1482
- //#region src/client/roleSummary.ts
1483
- /** Display names for the built-in roles, kept beside the ids they name. */
1484
- const BUILT_IN_LABELS = {
1485
- "knowledge-super-admin": {
1486
- zh: "超级管理员",
1487
- en: "Super administrator"
1488
- },
1489
- "knowledge-dept-admin": {
1490
- zh: "部门管理员",
1491
- en: "Department administrator"
1492
- }
1493
- };
1494
- /** Actions in product order, so two renderings of the same grants agree. */
1495
- const ACTION_ORDER = [
1496
- "read",
1497
- "create",
1498
- "update",
1499
- "delete",
1500
- "all"
1501
- ];
1502
- /**
1503
- * Collapse raw action strings into the shortest describing list.
1504
- *
1505
- * The client needs this independently of the server: the overview renders grants
1506
- * the server already wrote, so it summarizes what is there rather than what a
1507
- * request asked for.
1508
- *
1509
- * @param actions - raw action strings.
1510
- * @returns `['all']` when all four concrete actions are held, else the subset.
1511
- */
1512
- function summarizeRoleActions(actions) {
1513
- if (actions.includes("all")) return ["all"];
1514
- const held = new Set(actions);
1515
- if (ACTION_ORDER.slice(0, 4).every((action) => held.has(action))) return ["all"];
1516
- return ACTION_ORDER.filter((action) => held.has(action));
1517
- }
1518
- /**
1519
- * Read the roles out of a grant table.
1520
- *
1521
- * Only `role` grants contribute: a user grant is not a role, and inventing one
1522
- * per user would flood the list with rows that mean nothing.
1523
- *
1524
- * @param grants - the grant table.
1525
- * @param locale - `zh` or `en`, for the built-in role names.
1526
- * @returns one entry per role named by a grant, built-ins first then alphabetical.
1527
- */
1528
- function buildRoleSummaries(grants, locale = "zh") {
1529
- const byRole = /* @__PURE__ */ new Map();
1530
- for (const grant of grants) {
1531
- if (grant.principalType !== "role") continue;
1532
- let entry = byRole.get(grant.principalId);
1533
- if (entry === void 0) {
1534
- entry = {
1535
- paths: /* @__PURE__ */ new Set(),
1536
- actions: /* @__PURE__ */ new Set()
1537
- };
1538
- byRole.set(grant.principalId, entry);
1539
- }
1540
- entry.paths.add(grant.relPath);
1541
- entry.actions.add(grant.action);
1542
- }
1543
- return [...byRole.entries()].map(([id, entry]) => {
1544
- const builtIn = BUILT_IN_LABELS[id];
1545
- return {
1546
- id,
1547
- label: builtIn === void 0 ? id : builtIn[locale],
1548
- actions: summarizeRoleActions([...entry.actions]),
1549
- paths: [...entry.paths].sort(),
1550
- builtIn: builtIn !== void 0
1551
- };
1552
- }).sort((a, b) => {
1553
- if (a.builtIn !== b.builtIn) return a.builtIn ? -1 : 1;
1554
- return a.label.localeCompare(b.label);
1555
- });
1556
- }
1557
- //#endregion
1558
1482
  //#region \0dsh-css:/root/projects/dsh-plugins-plus/packages/knowledge-base/src/client/KnowledgePermissions.module.css.mjs
1559
- const css$14 = ".W1jiya_overview{flex-direction:column;gap:14px;display:flex}.W1jiya_statRow{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.W1jiya_statCard{border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.W1jiya_statValue{font:var(--dsw-font-base-strong-16);color:var(--dsw-alias-label-primary);line-height:1.2}.W1jiya_statLabel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.W1jiya_roleStrip{flex-direction:column;gap:6px;display:flex}.W1jiya_roleStripHeading{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);margin:0}.W1jiya_roleStripList{flex-wrap:wrap;gap:6px;display:flex}.W1jiya_roleChip{border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:8px;align-items:center;gap:5px;padding:3px 8px;display:inline-flex}.W1jiya_roleChipName{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary)}.W1jiya_tabs{align-self:flex-start}.W1jiya_overviewEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);margin:0;padding:20px 10px}.W1jiya_table{border-collapse:collapse;table-layout:auto;width:100%}.W1jiya_table th{text-align:left;font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);border-bottom:.5px solid var(--dsw-alias-border-l2);white-space:nowrap;padding:6px 10px}.W1jiya_table td{border-bottom:.5px solid var(--dsw-alias-border-l1);font:var(--dsw-font-xxs-12);vertical-align:top;padding:7px 10px}.W1jiya_table tr:last-child td{border-bottom:none}.W1jiya_principalName{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.W1jiya_principalMeta{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);margin-top:2px}.W1jiya_principalId{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11) var(--ds-font-family-code);overflow-wrap:anywhere;margin-top:2px}.W1jiya_chips{flex-wrap:wrap;gap:4px;display:flex}.W1jiya_paths{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:2px;margin:0;padding:0;line-height:1.65;list-style:none;display:flex}.W1jiya_path{font-family:var(--ds-font-family-code);overflow-wrap:anywhere}.W1jiya_holders{flex-direction:column;gap:3px;margin:0;padding:0;list-style:none;display:flex}.W1jiya_holder{align-items:baseline;gap:6px;display:flex}.W1jiya_holderName{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-primary)}.W1jiya_holderKind{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.W1jiya_placeholder{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11)}.W1jiya_actionCell{white-space:nowrap}.W1jiya_dialogForm{flex-direction:column;gap:12px;display:flex}.W1jiya_dialogField{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:5px;display:flex}.W1jiya_dialogSelect{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);background:var(--dsw-alias-bg-layer-2);width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:8px;padding:7px 9px}.W1jiya_dialogNotice{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary);margin:0}.W1jiya_emptyRow td{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);padding:18px}.W1jiya_emptyNote{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);margin-top:4px}.W1jiya_rowActions{white-space:nowrap;align-items:center;gap:6px;display:flex}.W1jiya_pageHead{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.W1jiya_pageTitle{font:var(--dsw-font-xs-strong-13);color:var(--dsw-alias-label-primary);margin:0}.W1jiya_pageHint{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);margin:2px 0 0}.W1jiya_pathCell{font:var(--dsw-font-xxxs-11) var(--ds-font-family-code);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}.W1jiya_countCell{text-align:right;font-variant-numeric:tabular-nums}.W1jiya_partialMark{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:help;margin-left:2px}.W1jiya_actions{flex-wrap:wrap;gap:4px;display:flex}.W1jiya_linkButton{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;padding:0}.W1jiya_linkButton:hover:not(:disabled){text-decoration:underline}.W1jiya_linkButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.W1jiya_pager{justify-content:flex-start;align-items:center;gap:8px;margin-top:8px;display:flex}.W1jiya_pagerStatus{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;white-space:nowrap}.W1jiya_pageSize{align-items:center;gap:6px;margin-left:auto;display:flex}.W1jiya_sourceCell{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.W1jiya_sourceHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex-basis:100%}";
1483
+ const css$14 = ".W1jiya_overview{flex-direction:column;gap:14px;display:flex}.W1jiya_statRow{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.W1jiya_statCard{border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.W1jiya_statValue{font:var(--dsw-font-base-strong-16);color:var(--dsw-alias-label-primary);line-height:1.2}.W1jiya_statLabel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.W1jiya_tabs{align-self:flex-start}.W1jiya_overviewEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);margin:0;padding:20px 10px}.W1jiya_table{border-collapse:collapse;table-layout:auto;width:100%}.W1jiya_table th{text-align:left;font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);border-bottom:.5px solid var(--dsw-alias-border-l2);white-space:nowrap;padding:6px 10px}.W1jiya_table td{border-bottom:.5px solid var(--dsw-alias-border-l1);font:var(--dsw-font-xxs-12);vertical-align:top;padding:7px 10px}.W1jiya_table tr:last-child td{border-bottom:none}.W1jiya_principalName{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.W1jiya_principalMeta{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);margin-top:2px}.W1jiya_principalId{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11) var(--ds-font-family-code);overflow-wrap:anywhere;margin-top:2px}.W1jiya_chips{flex-wrap:wrap;gap:4px;display:flex}.W1jiya_paths{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:2px;margin:0;padding:0;line-height:1.65;list-style:none;display:flex}.W1jiya_path{font-family:var(--ds-font-family-code);overflow-wrap:anywhere}.W1jiya_holders{flex-direction:column;gap:3px;margin:0;padding:0;list-style:none;display:flex}.W1jiya_holder{align-items:baseline;gap:6px;display:flex}.W1jiya_holderName{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-primary)}.W1jiya_holderKind{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.W1jiya_placeholder{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11)}.W1jiya_actionCell{white-space:nowrap}.W1jiya_dialogForm{flex-direction:column;gap:12px;display:flex}.W1jiya_dialogField{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:5px;display:flex}.W1jiya_dialogSelect{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);background:var(--dsw-alias-bg-layer-2);width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:8px;padding:7px 9px}.W1jiya_dialogNotice{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary);margin:0}.W1jiya_emptyRow td{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);padding:18px}.W1jiya_emptyNote{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);margin-top:4px}.W1jiya_rowActions{white-space:nowrap;align-items:center;gap:6px;display:flex}.W1jiya_pageHead{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.W1jiya_pageTitle{font:var(--dsw-font-xs-strong-13);color:var(--dsw-alias-label-primary);margin:0}.W1jiya_pageHint{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);margin:2px 0 0}.W1jiya_pathCell{font:var(--dsw-font-xxxs-11) var(--ds-font-family-code);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}.W1jiya_countCell{text-align:right;font-variant-numeric:tabular-nums}.W1jiya_partialMark{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:help;margin-left:2px}.W1jiya_actions{flex-wrap:wrap;gap:4px;display:flex}.W1jiya_linkButton{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;padding:0}.W1jiya_linkButton:hover:not(:disabled){text-decoration:underline}.W1jiya_linkButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.W1jiya_pager{justify-content:flex-start;align-items:center;gap:8px;margin-top:8px;display:flex}.W1jiya_pagerStatus{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;white-space:nowrap}.W1jiya_pageSize{align-items:center;gap:6px;margin-left:auto;display:flex}.W1jiya_sourceCell{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.W1jiya_sourceHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex-basis:100%}";
1560
1484
  const tagId$14 = "@sparkelf/dsh-knowledge-base/KnowledgePermissions.module.css";
1561
1485
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$14) + "]") === null) {
1562
1486
  const tag = document.createElement("style");
@@ -1566,51 +1490,46 @@ window.__ModuleLoader__.load({
1566
1490
  document.head.appendChild(tag);
1567
1491
  }
1568
1492
  var KnowledgePermissions_module_css_default = {
1569
- "roleStripList": "W1jiya_roleStripList",
1570
- "tabs": "W1jiya_tabs",
1571
- "pageHint": "W1jiya_pageHint",
1572
- "roleChip": "W1jiya_roleChip",
1573
- "roleStripHeading": "W1jiya_roleStripHeading",
1493
+ "dialogForm": "W1jiya_dialogForm",
1494
+ "dialogField": "W1jiya_dialogField",
1495
+ "statValue": "W1jiya_statValue",
1496
+ "pager": "W1jiya_pager",
1497
+ "principalId": "W1jiya_principalId",
1574
1498
  "overview": "W1jiya_overview",
1575
- "table": "W1jiya_table",
1576
- "rowActions": "W1jiya_rowActions",
1499
+ "holderName": "W1jiya_holderName",
1500
+ "holders": "W1jiya_holders",
1501
+ "actionCell": "W1jiya_actionCell",
1502
+ "actions": "W1jiya_actions",
1577
1503
  "linkButton": "W1jiya_linkButton",
1578
- "countCell": "W1jiya_countCell",
1579
- "roleChipName": "W1jiya_roleChipName",
1580
- "pager": "W1jiya_pager",
1581
- "principalName": "W1jiya_principalName",
1504
+ "table": "W1jiya_table",
1505
+ "pageHead": "W1jiya_pageHead",
1582
1506
  "pagerStatus": "W1jiya_pagerStatus",
1583
- "pathCell": "W1jiya_pathCell",
1584
- "statRow": "W1jiya_statRow",
1507
+ "holderKind": "W1jiya_holderKind",
1508
+ "statLabel": "W1jiya_statLabel",
1509
+ "sourceCell": "W1jiya_sourceCell",
1510
+ "holder": "W1jiya_holder",
1511
+ "dialogSelect": "W1jiya_dialogSelect",
1512
+ "emptyNote": "W1jiya_emptyNote",
1513
+ "sourceHint": "W1jiya_sourceHint",
1514
+ "tabs": "W1jiya_tabs",
1585
1515
  "principalMeta": "W1jiya_principalMeta",
1586
- "statValue": "W1jiya_statValue",
1516
+ "partialMark": "W1jiya_partialMark",
1587
1517
  "statCard": "W1jiya_statCard",
1588
- "paths": "W1jiya_paths",
1589
- "holderName": "W1jiya_holderName",
1590
- "sourceHint": "W1jiya_sourceHint",
1591
- "dialogSelect": "W1jiya_dialogSelect",
1592
- "statLabel": "W1jiya_statLabel",
1593
- "actions": "W1jiya_actions",
1594
- "dialogField": "W1jiya_dialogField",
1595
- "chips": "W1jiya_chips",
1518
+ "rowActions": "W1jiya_rowActions",
1519
+ "principalName": "W1jiya_principalName",
1596
1520
  "emptyRow": "W1jiya_emptyRow",
1597
- "pageSize": "W1jiya_pageSize",
1521
+ "placeholder": "W1jiya_placeholder",
1522
+ "pageTitle": "W1jiya_pageTitle",
1523
+ "pathCell": "W1jiya_pathCell",
1524
+ "pageHint": "W1jiya_pageHint",
1525
+ "paths": "W1jiya_paths",
1598
1526
  "path": "W1jiya_path",
1527
+ "pageSize": "W1jiya_pageSize",
1528
+ "chips": "W1jiya_chips",
1529
+ "countCell": "W1jiya_countCell",
1599
1530
  "dialogNotice": "W1jiya_dialogNotice",
1600
- "roleStrip": "W1jiya_roleStrip",
1601
- "pageHead": "W1jiya_pageHead",
1602
- "dialogForm": "W1jiya_dialogForm",
1603
- "partialMark": "W1jiya_partialMark",
1604
- "holders": "W1jiya_holders",
1605
- "holder": "W1jiya_holder",
1606
- "placeholder": "W1jiya_placeholder",
1607
- "actionCell": "W1jiya_actionCell",
1608
- "emptyNote": "W1jiya_emptyNote",
1609
1531
  "overviewEmpty": "W1jiya_overviewEmpty",
1610
- "holderKind": "W1jiya_holderKind",
1611
- "sourceCell": "W1jiya_sourceCell",
1612
- "principalId": "W1jiya_principalId",
1613
- "pageTitle": "W1jiya_pageTitle"
1532
+ "statRow": "W1jiya_statRow"
1614
1533
  };
1615
1534
  //#endregion
1616
1535
  //#region src/client/KnowledgePermissionOverview.tsx
@@ -1725,9 +1644,8 @@ window.__ModuleLoader__.load({
1725
1644
  * @param props - grants, labels, directory, role summaries, copy and the revoke hook.
1726
1645
  */
1727
1646
  function KnowledgePermissionOverview(props) {
1728
- const { grants, labels = {}, copy, onRevoke, busy = false, directory, roles: roleSummaries } = props;
1647
+ const { grants, labels = {}, copy, onRevoke, busy = false, directory } = props;
1729
1648
  const resources = (0, react.useMemo)(() => groupHoldingsByResource(grants, labels), [grants, labels]);
1730
- const roles = (0, react.useMemo)(() => roleSummaries ?? buildRoleSummaries(grants), [grants, roleSummaries]);
1731
1649
  const directoryState = (0, react.useMemo)(() => {
1732
1650
  if (directory === void 0) return {
1733
1651
  kind: "unavailable",
@@ -1786,7 +1704,7 @@ window.__ModuleLoader__.load({
1786
1704
  {
1787
1705
  key: "roles",
1788
1706
  label: copy.statRoles,
1789
- value: roles.length
1707
+ value: roleRows.length
1790
1708
  }
1791
1709
  ];
1792
1710
  const personPage = paginate(accounts, personPaging.page, personPaging.size);
@@ -1827,30 +1745,6 @@ window.__ModuleLoader__.load({
1827
1745
  })]
1828
1746
  }, stat.key))
1829
1747
  }),
1830
- roles.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
1831
- className: KnowledgePermissions_module_css_default.roleStrip,
1832
- "data-kb-overview": "roles",
1833
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
1834
- className: KnowledgePermissions_module_css_default.roleStripHeading,
1835
- children: copy.builtInRoles
1836
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1837
- className: KnowledgePermissions_module_css_default.roleStripList,
1838
- children: roles.map((role) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1839
- className: KnowledgePermissions_module_css_default.roleChip,
1840
- "data-kb-role": role.id,
1841
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1842
- className: KnowledgePermissions_module_css_default.roleChipName,
1843
- children: role.label
1844
- }), role.actions.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
1845
- tone: "quiet",
1846
- children: copy.noActions
1847
- }) : role.actions.map((action) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
1848
- tone: actionTone(action),
1849
- children: copy.actionLabel(action)
1850
- }, action))]
1851
- }, role.id))
1852
- })]
1853
- }),
1854
1748
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.SegmentedTabs, {
1855
1749
  items: [
1856
1750
  {
@@ -2168,7 +2062,7 @@ window.__ModuleLoader__.load({
2168
2062
  }
2169
2063
  //#endregion
2170
2064
  //#region \0dsh-css:/root/projects/dsh-plugins-plus/packages/knowledge-base/src/client/KnowledgePanel.module.css.mjs
2171
- const css$13 = ".uNOdFq_page{height:100%;min-height:0;font:var(--dsw-font-s-14);flex-direction:column;display:flex}.uNOdFq_body{flex:auto;grid-template-columns:280px minmax(0,1fr);min-height:0;display:grid}.uNOdFq_bodyCollapsed{grid-template-columns:56px minmax(0,1fr)}.uNOdFq_rail{border-right:.5px solid var(--dsw-alias-border-l3);flex-direction:column;min-height:0;display:flex;overflow:hidden}.uNOdFq_railTop{box-sizing:border-box;flex:none;align-items:center;gap:4px;height:36px;padding:0 6px 0 12px;display:flex}.uNOdFq_railBrand{align-items:center;gap:8px;min-width:0;display:flex}.uNOdFq_railBrandName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);overflow:hidden}.uNOdFq_railTopSpacer{margin-left:auto}.uNOdFq_sectionHeader{box-sizing:border-box;height:36px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:4px;padding:0 0 0 4px;display:flex}.uNOdFq_sectionName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-tertiary);line-height:20px;overflow:hidden}.uNOdFq_sectionActions{align-items:center;gap:4px;margin-left:auto;padding-right:8px;display:flex}.uNOdFq_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.uNOdFq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_iconButton:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_iconButton:disabled{opacity:.4;cursor:default}.uNOdFq_treeScroll{flex:auto;min-height:0;padding:0 8px 12px;overflow:auto}.uNOdFq_searchBox{flex:none;margin:0 0 8px;padding:10px 12px 0}.uNOdFq_searchBox>span{box-sizing:border-box;width:100%;margin:0 2px;display:flex}.uNOdFq_menu{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 12px;display:flex}.uNOdFq_menuFolded{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 8px;display:flex}.uNOdFq_menuFolded .uNOdFq_menuRow,.uNOdFq_menuFolded .uNOdFq_menuRowActive{justify-content:center;padding:7px 0}.uNOdFq_menuRow,.uNOdFq_menuRowActive{box-sizing:border-box;border-radius:var(--dsw-radius-md);min-height:36px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;line-height:22px;display:flex}.uNOdFq_menuRow:hover,.uNOdFq_menuRowActive:hover{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_menuRowActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_menuRow:focus-visible,.uNOdFq_menuRowActive:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_menuGlyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.uNOdFq_menuLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.uNOdFq_railBody{flex-direction:column;flex:auto;min-height:0;padding:0 8px 12px;display:flex;overflow:auto}.uNOdFq_pinnedBand{flex-direction:column;flex:none;display:flex}.uNOdFq_treeBand{flex-direction:column;flex:auto;min-height:0;display:flex}.uNOdFq_treeFilter{flex:none;padding:0 0 8px}.uNOdFq_treeFilter>span{box-sizing:border-box;width:100%;display:flex}.uNOdFq_contentColumn{flex-direction:column;min-width:0;min-height:0;display:flex}.uNOdFq_content{flex:auto;min-width:0;min-height:0;padding:16px 24px 20px;overflow:auto}.uNOdFq_header{border-bottom:.5px solid var(--dsw-alias-border-l3);flex-direction:column;flex:none;gap:8px;padding:16px 14px 8px 24px;display:flex}.uNOdFq_headerTop{justify-content:space-between;align-items:center;gap:12px;display:flex}.uNOdFq_headerActions{flex:none;align-items:center;gap:8px;display:flex}.uNOdFq_headerTitle{min-width:0;min-height:28px;font:var(--dsw-font-base-strong-16);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;align-items:flex-end;margin:0;display:flex;overflow:hidden}.uNOdFq_headerFact{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);align-items:center;gap:6px;margin:0;display:flex}.uNOdFq_headerPath{font:var(--dsw-font-xxs-12) var(--ds-font-family-code);overflow-wrap:anywhere}.uNOdFq_surface{flex-direction:column;align-items:flex-start;gap:12px;max-width:900px;display:flex}.uNOdFq_title{font:var(--dsw-font-base-strong-16);margin:0}.uNOdFq_subhead{font:var(--dsw-font-s-strong-14);margin:8px 0 0}.uNOdFq_muted{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_error{color:var(--dsw-alias-state-error-primary,#c0392b);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_notice{color:var(--dsw-alias-state-success-primary,#1a7f37);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_empty{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);flex-direction:column;align-items:center;padding:48px 20px;display:flex}.uNOdFq_emptyGlyph{color:var(--dsw-alias-label-caption);margin-bottom:12px}.uNOdFq_emptyTitle{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);margin:0;line-height:1.6}.uNOdFq_factDot{opacity:.6}.uNOdFq_hits{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.uNOdFq_hit,.uNOdFq_hitActive{box-sizing:border-box;border-radius:var(--dsw-radius-md,8px);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;grid-template-columns:minmax(0,auto) minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:8px 10px;display:grid}.uNOdFq_hit:hover,.uNOdFq_hitActive{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_hitName{font:var(--dsw-font-xs-strong-13);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitPath{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitTime{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));font:var(--dsw-font-xxs-12);grid-column:1/-1}.uNOdFq_hitLine{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;gap:8px;display:flex;overflow:hidden}.uNOdFq_hitLineNo{text-align:right;opacity:.7;flex:none;min-width:2.5em}.uNOdFq_path{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);overflow-wrap:anywhere;margin:0}.uNOdFq_preview{border:1px solid var(--dsw-alias-border-l1,#0000001f);border-radius:var(--dsw-radius-md,8px);background:var(--dsw-alias-bg-layer-2);font:var(--dsw-font-xs-13) var(--ds-font-family-code);white-space:pre-wrap;overflow-wrap:anywhere;max-height:calc(100vh - 160px);margin:0;padding:12px;line-height:1.55;overflow:auto}.uNOdFq_pairs{flex-direction:column;gap:6px;margin:0;display:flex}.uNOdFq_pair{font:var(--dsw-font-xs-13);gap:12px;display:flex}.uNOdFq_pair dt{min-width:6.5em;color:var(--dsw-alias-label-secondary);flex:none}.uNOdFq_pair dd{overflow-wrap:anywhere;margin:0}.uNOdFq_form{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-md);flex-wrap:wrap;align-items:flex-end;gap:10px;padding:12px;display:flex}.uNOdFq_field{flex-direction:column;gap:4px;min-width:0;display:flex}.uNOdFq_field>span{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);min-width:10em;height:32px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);padding:0 10px}.uNOdFq_input:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.uNOdFq_retry{border-radius:var(--dsw-radius-sm);border:1px solid var(--dsw-alias-border-l2);min-height:32px;font:var(--dsw-font-xxs-12);cursor:pointer;color:var(--dsw-alias-label-primary);background:0 0;align-self:flex-start;padding:4px 14px}.uNOdFq_retry:disabled{opacity:.55;cursor:default}.uNOdFq_table{border-collapse:collapse;width:100%;font:var(--dsw-font-xxs-12)}.uNOdFq_table th,.uNOdFq_table td{text-align:left;border-bottom:.5px solid var(--dsw-alias-border-l2);padding:6px 8px}.uNOdFq_table th{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_previewLayout{align-items:flex-start;gap:12px;width:100%;min-width:0;display:flex}.uNOdFq_previewColumn{flex-direction:column;flex:auto;align-items:flex-start;gap:12px;min-width:0;max-width:900px;display:flex}.uNOdFq_openedElsewhere{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;width:100%;min-height:240px;display:flex}.uNOdFq_bodyDocument{grid-template-columns:280px}.uNOdFq_bodyCollapsed.uNOdFq_bodyDocument{grid-template-columns:56px}.uNOdFq_surface+.uNOdFq_surface{border-top:1px solid var(--dsw-alias-border-l1);margin-top:20px;padding-top:24px}.uNOdFq_surface+.uNOdFq_surface>.uNOdFq_subhead{margin-top:0}.uNOdFq_referenceNote{z-index:20;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);max-width:420px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);box-shadow:var(--dsw-shadow-lv2);align-items:center;gap:8px;margin:0;padding:8px 10px;display:flex;position:fixed;inset-block-end:16px;inset-inline-start:16px}.uNOdFq_referenceNoteDismiss{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);cursor:pointer;background:0 0;border:0;flex:none;padding:0 2px;line-height:1}.uNOdFq_referenceNoteDismiss:hover{color:var(--dsw-alias-label-primary)}";
2065
+ const css$13 = ".uNOdFq_page{height:100%;min-height:0;font:var(--dsw-font-s-14);flex-direction:column;display:flex}.uNOdFq_body{flex:auto;grid-template-columns:280px minmax(0,1fr);min-height:0;display:grid}.uNOdFq_bodyCollapsed{grid-template-columns:56px minmax(0,1fr)}.uNOdFq_rail{border-right:.5px solid var(--dsw-alias-border-l3);flex-direction:column;min-height:0;display:flex;overflow:hidden}.uNOdFq_railTop{box-sizing:border-box;flex:none;align-items:center;gap:4px;height:36px;padding:0 6px 0 12px;display:flex}.uNOdFq_railBrand{align-items:center;gap:8px;min-width:0;display:flex}.uNOdFq_railBrandName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);overflow:hidden}.uNOdFq_railTopSpacer{margin-left:auto}.uNOdFq_sectionHeader{box-sizing:border-box;height:36px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:4px;padding:0 0 0 4px;display:flex}.uNOdFq_sectionName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-tertiary);line-height:20px;overflow:hidden}.uNOdFq_sectionActions{align-items:center;gap:4px;margin-left:auto;padding-right:8px;display:flex}.uNOdFq_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.uNOdFq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_iconButton:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_iconButton:disabled{opacity:.4;cursor:default}.uNOdFq_treeScroll{flex:auto;min-height:0;padding:0 8px 12px;overflow:auto}.uNOdFq_searchBox{flex:none;margin:0 0 8px;padding:10px 12px 0}.uNOdFq_searchBox>span{box-sizing:border-box;width:100%;margin:0 2px;display:flex}.uNOdFq_menu{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 12px;display:flex}.uNOdFq_menuFolded{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 8px;display:flex}.uNOdFq_menuFolded .uNOdFq_menuRow,.uNOdFq_menuFolded .uNOdFq_menuRowActive{justify-content:center;padding:7px 0}.uNOdFq_menuRow,.uNOdFq_menuRowActive{box-sizing:border-box;border-radius:var(--dsw-radius-md);min-height:36px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;line-height:22px;display:flex}.uNOdFq_menuRow:hover,.uNOdFq_menuRowActive:hover{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_menuRowActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_menuRow:focus-visible,.uNOdFq_menuRowActive:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_menuGlyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.uNOdFq_menuLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.uNOdFq_railBody{flex-direction:column;flex:auto;min-height:0;padding:0 8px 12px;display:flex;overflow:auto}.uNOdFq_pinnedBand{flex-direction:column;flex:none;display:flex}.uNOdFq_treeBand{flex-direction:column;flex:auto;min-height:0;display:flex}.uNOdFq_treeFilter{flex:none;padding:0 0 8px}.uNOdFq_treeFilter>span{box-sizing:border-box;width:100%;display:flex}.uNOdFq_contentColumn{flex-direction:column;min-width:0;min-height:0;display:flex}.uNOdFq_content{flex:auto;min-width:0;min-height:0;padding:16px 24px 20px;overflow:auto}.uNOdFq_header{border-bottom:.5px solid var(--dsw-alias-border-l3);flex-direction:column;flex:none;gap:8px;padding:16px 14px 8px 24px;display:flex}.uNOdFq_headerTop{justify-content:space-between;align-items:center;gap:12px;display:flex}.uNOdFq_headerActions{flex:none;align-items:center;gap:8px;display:flex}.uNOdFq_headerTitle{min-width:0;min-height:28px;font:var(--dsw-font-base-strong-16);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;align-items:flex-end;margin:0;display:flex;overflow:hidden}.uNOdFq_headerFact{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);align-items:center;gap:6px;margin:0;display:flex}.uNOdFq_headerPath{font:var(--dsw-font-xxs-12) var(--ds-font-family-code);overflow-wrap:anywhere}.uNOdFq_surface{flex-direction:column;align-items:flex-start;gap:12px;max-width:900px;display:flex}.uNOdFq_tableSurface{align-items:stretch;width:100%;min-width:0;max-width:none}.uNOdFq_tableSurface table{width:100%}.uNOdFq_tableSurface th:last-child,.uNOdFq_tableSurface td:last-child{text-align:right;white-space:nowrap}.uNOdFq_title{font:var(--dsw-font-base-strong-16);margin:0}.uNOdFq_subhead{font:var(--dsw-font-s-strong-14);margin:8px 0 0}.uNOdFq_muted{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_error{color:var(--dsw-alias-state-error-primary,#c0392b);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_notice{color:var(--dsw-alias-state-success-primary,#1a7f37);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_empty{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);flex-direction:column;align-items:center;padding:48px 20px;display:flex}.uNOdFq_emptyGlyph{color:var(--dsw-alias-label-caption);margin-bottom:12px}.uNOdFq_emptyTitle{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);margin:0;line-height:1.6}.uNOdFq_factDot{opacity:.6}.uNOdFq_hits{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.uNOdFq_hit,.uNOdFq_hitActive{box-sizing:border-box;border-radius:var(--dsw-radius-md,8px);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;grid-template-columns:minmax(0,auto) minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:8px 10px;display:grid}.uNOdFq_hit:hover,.uNOdFq_hitActive{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_hitName{font:var(--dsw-font-xs-strong-13);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitPath{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitTime{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));font:var(--dsw-font-xxs-12);grid-column:1/-1}.uNOdFq_hitLine{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;gap:8px;display:flex;overflow:hidden}.uNOdFq_hitLineNo{text-align:right;opacity:.7;flex:none;min-width:2.5em}.uNOdFq_path{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);overflow-wrap:anywhere;margin:0}.uNOdFq_preview{border:1px solid var(--dsw-alias-border-l1,#0000001f);border-radius:var(--dsw-radius-md,8px);background:var(--dsw-alias-bg-layer-2);font:var(--dsw-font-xs-13) var(--ds-font-family-code);white-space:pre-wrap;overflow-wrap:anywhere;max-height:calc(100vh - 160px);margin:0;padding:12px;line-height:1.55;overflow:auto}.uNOdFq_pairs{flex-direction:column;gap:6px;margin:0;display:flex}.uNOdFq_pair{font:var(--dsw-font-xs-13);gap:12px;display:flex}.uNOdFq_pair dt{min-width:6.5em;color:var(--dsw-alias-label-secondary);flex:none}.uNOdFq_pair dd{overflow-wrap:anywhere;margin:0}.uNOdFq_form{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-md);flex-wrap:wrap;align-items:flex-end;gap:10px;padding:12px;display:flex}.uNOdFq_field{flex-direction:column;gap:4px;min-width:0;display:flex}.uNOdFq_field>span{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);min-width:10em;height:32px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);padding:0 10px}.uNOdFq_input:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.uNOdFq_retry{border-radius:var(--dsw-radius-sm);border:1px solid var(--dsw-alias-border-l2);min-height:32px;font:var(--dsw-font-xxs-12);cursor:pointer;color:var(--dsw-alias-label-primary);background:0 0;align-self:flex-start;padding:4px 14px}.uNOdFq_retry:disabled{opacity:.55;cursor:default}.uNOdFq_table{border-collapse:collapse;width:100%;font:var(--dsw-font-xxs-12)}.uNOdFq_table th,.uNOdFq_table td{text-align:left;border-bottom:.5px solid var(--dsw-alias-border-l2);padding:6px 8px}.uNOdFq_table th{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_previewLayout{align-items:flex-start;gap:12px;width:100%;min-width:0;display:flex}.uNOdFq_previewColumn{flex-direction:column;flex:auto;align-items:flex-start;gap:12px;min-width:0;max-width:900px;display:flex}.uNOdFq_openedElsewhere{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;width:100%;min-height:240px;display:flex}.uNOdFq_bodyDocument{grid-template-columns:280px}.uNOdFq_bodyCollapsed.uNOdFq_bodyDocument{grid-template-columns:56px}.uNOdFq_surface+.uNOdFq_surface{border-top:1px solid var(--dsw-alias-border-l1);margin-top:20px;padding-top:24px}.uNOdFq_surface+.uNOdFq_surface>.uNOdFq_subhead{margin-top:0}.uNOdFq_referenceNote{z-index:20;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);max-width:420px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);box-shadow:var(--dsw-shadow-lv2);align-items:center;gap:8px;margin:0;padding:8px 10px;display:flex;position:fixed;inset-block-end:16px;inset-inline-start:16px}.uNOdFq_referenceNoteDismiss{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);cursor:pointer;background:0 0;border:0;flex:none;padding:0 2px;line-height:1}.uNOdFq_referenceNoteDismiss:hover{color:var(--dsw-alias-label-primary)}";
2172
2066
  const tagId$13 = "@sparkelf/dsh-knowledge-base/KnowledgePanel.module.css";
2173
2067
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]") === null) {
2174
2068
  const tag = document.createElement("style");
@@ -2178,71 +2072,72 @@ window.__ModuleLoader__.load({
2178
2072
  document.head.appendChild(tag);
2179
2073
  }
2180
2074
  var KnowledgePanel_module_css_default = {
2181
- "surface": "uNOdFq_surface",
2182
- "headerFact": "uNOdFq_headerFact",
2183
- "retry": "uNOdFq_retry",
2184
- "searchBox": "uNOdFq_searchBox",
2185
- "bodyDocument": "uNOdFq_bodyDocument",
2186
- "body": "uNOdFq_body",
2187
- "notice": "uNOdFq_notice",
2188
- "menu": "uNOdFq_menu",
2189
- "headerTitle": "uNOdFq_headerTitle",
2190
- "factDot": "uNOdFq_factDot",
2075
+ "content": "uNOdFq_content",
2076
+ "treeScroll": "uNOdFq_treeScroll",
2077
+ "hit": "uNOdFq_hit",
2078
+ "emptyGlyph": "uNOdFq_emptyGlyph",
2079
+ "treeBand": "uNOdFq_treeBand",
2191
2080
  "page": "uNOdFq_page",
2192
- "treeFilter": "uNOdFq_treeFilter",
2193
- "emptyTitle": "uNOdFq_emptyTitle",
2194
- "previewLayout": "uNOdFq_previewLayout",
2195
- "contentColumn": "uNOdFq_contentColumn",
2081
+ "preview": "uNOdFq_preview",
2082
+ "header": "uNOdFq_header",
2196
2083
  "railTopSpacer": "uNOdFq_railTopSpacer",
2197
- "sectionActions": "uNOdFq_sectionActions",
2198
- "iconButton": "uNOdFq_iconButton",
2199
- "headerTop": "uNOdFq_headerTop",
2200
- "hitName": "uNOdFq_hitName",
2201
- "referenceNoteDismiss": "uNOdFq_referenceNoteDismiss",
2084
+ "emptyTitle": "uNOdFq_emptyTitle",
2202
2085
  "sectionName": "uNOdFq_sectionName",
2203
- "railBrandName": "uNOdFq_railBrandName",
2204
- "hit": "uNOdFq_hit",
2086
+ "empty": "uNOdFq_empty",
2087
+ "factDot": "uNOdFq_factDot",
2205
2088
  "muted": "uNOdFq_muted",
2206
- "preview": "uNOdFq_preview",
2207
- "hitPath": "uNOdFq_hitPath",
2208
- "emptyGlyph": "uNOdFq_emptyGlyph",
2089
+ "input": "uNOdFq_input",
2090
+ "openedElsewhere": "uNOdFq_openedElsewhere",
2091
+ "headerFact": "uNOdFq_headerFact",
2092
+ "table": "uNOdFq_table",
2093
+ "surface": "uNOdFq_surface",
2094
+ "headerTop": "uNOdFq_headerTop",
2095
+ "sectionActions": "uNOdFq_sectionActions",
2096
+ "railBrand": "uNOdFq_railBrand",
2097
+ "hitName": "uNOdFq_hitName",
2209
2098
  "rail": "uNOdFq_rail",
2210
- "pairs": "uNOdFq_pairs",
2099
+ "tableSurface": "uNOdFq_tableSurface",
2211
2100
  "railBody": "uNOdFq_railBody",
2212
- "menuGlyph": "uNOdFq_menuGlyph",
2213
- "pinnedBand": "uNOdFq_pinnedBand",
2214
- "menuRow": "uNOdFq_menuRow",
2215
- "previewColumn": "uNOdFq_previewColumn",
2216
- "referenceNote": "uNOdFq_referenceNote",
2217
- "path": "uNOdFq_path",
2218
- "menuFolded": "uNOdFq_menuFolded",
2219
- "hitActive": "uNOdFq_hitActive",
2220
- "content": "uNOdFq_content",
2221
- "empty": "uNOdFq_empty",
2101
+ "hitLine": "uNOdFq_hitLine",
2102
+ "hitLineNo": "uNOdFq_hitLineNo",
2103
+ "bodyDocument": "uNOdFq_bodyDocument",
2104
+ "treeFilter": "uNOdFq_treeFilter",
2105
+ "hits": "uNOdFq_hits",
2106
+ "railTop": "uNOdFq_railTop",
2222
2107
  "hitTime": "uNOdFq_hitTime",
2223
- "pair": "uNOdFq_pair",
2224
- "form": "uNOdFq_form",
2225
- "title": "uNOdFq_title",
2226
- "sectionHeader": "uNOdFq_sectionHeader",
2227
- "input": "uNOdFq_input",
2228
- "header": "uNOdFq_header",
2108
+ "headerTitle": "uNOdFq_headerTitle",
2229
2109
  "menuRowActive": "uNOdFq_menuRowActive",
2230
- "field": "uNOdFq_field",
2231
- "railBrand": "uNOdFq_railBrand",
2232
- "headerPath": "uNOdFq_headerPath",
2233
- "railTop": "uNOdFq_railTop",
2234
2110
  "menuLabel": "uNOdFq_menuLabel",
2235
- "hits": "uNOdFq_hits",
2236
- "openedElsewhere": "uNOdFq_openedElsewhere",
2237
- "bodyCollapsed": "uNOdFq_bodyCollapsed",
2111
+ "body": "uNOdFq_body",
2112
+ "notice": "uNOdFq_notice",
2113
+ "sectionHeader": "uNOdFq_sectionHeader",
2114
+ "subhead": "uNOdFq_subhead",
2115
+ "title": "uNOdFq_title",
2238
2116
  "error": "uNOdFq_error",
2239
- "hitLineNo": "uNOdFq_hitLineNo",
2240
- "table": "uNOdFq_table",
2241
- "hitLine": "uNOdFq_hitLine",
2242
- "treeScroll": "uNOdFq_treeScroll",
2243
- "treeBand": "uNOdFq_treeBand",
2117
+ "hitActive": "uNOdFq_hitActive",
2118
+ "path": "uNOdFq_path",
2119
+ "bodyCollapsed": "uNOdFq_bodyCollapsed",
2120
+ "pair": "uNOdFq_pair",
2121
+ "previewLayout": "uNOdFq_previewLayout",
2122
+ "menuRow": "uNOdFq_menuRow",
2123
+ "referenceNoteDismiss": "uNOdFq_referenceNoteDismiss",
2124
+ "railBrandName": "uNOdFq_railBrandName",
2125
+ "iconButton": "uNOdFq_iconButton",
2126
+ "headerPath": "uNOdFq_headerPath",
2244
2127
  "headerActions": "uNOdFq_headerActions",
2245
- "subhead": "uNOdFq_subhead"
2128
+ "menuGlyph": "uNOdFq_menuGlyph",
2129
+ "form": "uNOdFq_form",
2130
+ "pinnedBand": "uNOdFq_pinnedBand",
2131
+ "field": "uNOdFq_field",
2132
+ "previewColumn": "uNOdFq_previewColumn",
2133
+ "retry": "uNOdFq_retry",
2134
+ "pairs": "uNOdFq_pairs",
2135
+ "menuFolded": "uNOdFq_menuFolded",
2136
+ "menu": "uNOdFq_menu",
2137
+ "hitPath": "uNOdFq_hitPath",
2138
+ "searchBox": "uNOdFq_searchBox",
2139
+ "contentColumn": "uNOdFq_contentColumn",
2140
+ "referenceNote": "uNOdFq_referenceNote"
2246
2141
  };
2247
2142
  //#endregion
2248
2143
  //#region src/client/KnowledgePermissions.tsx
@@ -2515,7 +2410,7 @@ window.__ModuleLoader__.load({
2515
2410
  onAction?.(void 0);
2516
2411
  }, [onAction]);
2517
2412
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2518
- className: KnowledgePanel_module_css_default.surface,
2413
+ className: `${KnowledgePanel_module_css_default.surface} ${KnowledgePanel_module_css_default.tableSurface}`,
2519
2414
  children: [
2520
2415
  notice !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2521
2416
  className: KnowledgePanel_module_css_default.notice,
@@ -2577,7 +2472,6 @@ window.__ModuleLoader__.load({
2577
2472
  pathsHeld: (count) => c("overviewHeld").replace("{count}", String(count)),
2578
2473
  rolesHeld: c("overviewRoles"),
2579
2474
  actionsHeld: c("overviewActions"),
2580
- builtInRoles: c("overviewRolesHeading"),
2581
2475
  noActions: c("overviewNoActions"),
2582
2476
  tabsLabel: c("overviewTabsLabel"),
2583
2477
  statPrincipals: c("overviewStatPrincipals"),
@@ -2854,7 +2748,7 @@ window.__ModuleLoader__.load({
2854
2748
  onAction?.(void 0);
2855
2749
  }, [onAction]);
2856
2750
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2857
- className: KnowledgePanel_module_css_default.surface,
2751
+ className: `${KnowledgePanel_module_css_default.surface} ${KnowledgePanel_module_css_default.tableSurface}`,
2858
2752
  children: [notice !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2859
2753
  className: KnowledgePanel_module_css_default.notice,
2860
2754
  children: notice
@@ -2941,15 +2835,15 @@ window.__ModuleLoader__.load({
2941
2835
  document.head.appendChild(tag);
2942
2836
  }
2943
2837
  var KnowledgeLoading_module_css_default = {
2838
+ "pagesLeft": "HyIQta_pagesLeft",
2839
+ "wrap": "HyIQta_wrap",
2840
+ "book": "HyIQta_book",
2841
+ "pagesRight": "HyIQta_pagesRight",
2842
+ "kb-page-turn": "HyIQta_kb-page-turn",
2944
2843
  "label": "HyIQta_label",
2945
- "coverBack": "HyIQta_coverBack",
2946
2844
  "srOnly": "HyIQta_srOnly",
2947
- "pagesRight": "HyIQta_pagesRight",
2948
- "book": "HyIQta_book",
2949
- "wrap": "HyIQta_wrap",
2950
2845
  "leaf": "HyIQta_leaf",
2951
- "pagesLeft": "HyIQta_pagesLeft",
2952
- "kb-page-turn": "HyIQta_kb-page-turn"
2846
+ "coverBack": "HyIQta_coverBack"
2953
2847
  };
2954
2848
  //#endregion
2955
2849
  //#region src/client/KnowledgeLoading.tsx
@@ -3450,7 +3344,7 @@ window.__ModuleLoader__.load({
3450
3344
  }
3451
3345
  //#endregion
3452
3346
  //#region \0dsh-css:/root/projects/dsh-plugins-plus/packages/knowledge-base/src/client/KnowledgeHome.module.css.mjs
3453
- const css$11 = ".oNvFBa_home{flex-direction:column;gap:16px;min-width:0;display:flex}.oNvFBa_cards{grid-template-columns:repeat(3,minmax(0,1fr));gap:13.5px;display:grid}.oNvFBa_cardSlot{min-width:0;position:relative}.oNvFBa_card{box-sizing:border-box;text-align:left;border:.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);width:100%;height:63px;color:var(--dsw-alias-label-primary);cursor:pointer;flex-direction:row;align-items:center;gap:14px;padding:0 9px 0 13px;display:flex}.oNvFBa_card:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.oNvFBa_card[data-open=true]{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3)}.oNvFBa_card:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.oNvFBa_card:disabled{opacity:.4;cursor:default}.oNvFBa_cardPlate{border-radius:var(--dsw-radius-sm);width:24px;height:24px;color:var(--dsw-alias-label-primary-foreground);flex:none;justify-content:center;align-items:center;display:inline-flex}.oNvFBa_cardPlate[data-tone=blue]{background:var(--dsw-static-blue-500)}.oNvFBa_cardPlate[data-tone=amber]{background:var(--dsw-static-amber-500)}.oNvFBa_cardPlate[data-tone=deepseek]{background:var(--dsw-static-deepseek-500)}.oNvFBa_cardText{flex-direction:column;flex:auto;gap:3px;min-width:0;display:flex}.oNvFBa_cardTitle{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.oNvFBa_cardBody{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);text-overflow:ellipsis;white-space:nowrap;line-height:1.5;overflow:hidden}.oNvFBa_cardChevron{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;display:inline-flex}.oNvFBa_cardMenu{z-index:2;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-2);margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0}.oNvFBa_cardMenuItem{box-sizing:border-box;border-radius:var(--dsw-radius-sm);width:100%;min-height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;padding:4px 8px;display:flex}.oNvFBa_cardMenuItem:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.oNvFBa_cardMenuItem:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.oNvFBa_table{border-collapse:collapse;width:100%}.oNvFBa_table th{text-align:left;font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);border-bottom:.5px solid var(--dsw-alias-border-l2);white-space:nowrap;padding:6px 10px}.oNvFBa_table td{border-bottom:.5px solid var(--dsw-alias-border-l1);font:var(--dsw-font-xxs-12);vertical-align:middle;padding:7px 10px}.oNvFBa_table tr:last-child td{border-bottom:none}.oNvFBa_rowLink{color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);text-align:left;cursor:pointer;background:0 0;border:none;padding:0}.oNvFBa_rowLink:hover{color:var(--dsw-alias-link)}.oNvFBa_rowLink:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.oNvFBa_muted{color:var(--dsw-alias-label-tertiary)}.oNvFBa_emptyRow td{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);padding:18px}.oNvFBa_hiddenInput{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.oNvFBa_favoriteMark{color:var(--dsw-static-amber-500);font:var(--dsw-font-xxs-12);margin-right:4px}.oNvFBa_dropZone{border-radius:var(--dsw-radius-md);border:1px dashed #0000;transition:border-color .12s,background-color .12s}.oNvFBa_dropZoneActive{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2)}.oNvFBa_shareWrap{flex-direction:column;gap:20px;display:flex}.oNvFBa_shareBlock{flex-direction:column;gap:8px;display:flex}.oNvFBa_shareTitle{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-sm-bold-13);margin:0}.oNvFBa_shareEmpty{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-sm-13);margin:0;padding:12px 0}.oNvFBa_shareError{color:var(--dsw-alias-label-error);font:var(--dsw-font-sm-13);margin:0;padding:8px 0}.oNvFBa_sharePager{justify-content:flex-end;align-items:center;gap:8px;display:flex}";
3347
+ const css$11 = ".oNvFBa_home{flex-direction:column;gap:16px;min-width:0;display:flex}.oNvFBa_cards{grid-template-columns:repeat(3,minmax(0,1fr));gap:13.5px;display:grid}.oNvFBa_cardSlot{min-width:0;position:relative}.oNvFBa_card{box-sizing:border-box;text-align:left;border:.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);width:100%;height:63px;color:var(--dsw-alias-label-primary);cursor:pointer;flex-direction:row;align-items:center;gap:14px;padding:0 9px 0 13px;display:flex}.oNvFBa_card:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.oNvFBa_card[data-open=true]{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3)}.oNvFBa_card:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.oNvFBa_card:disabled{opacity:.4;cursor:default}.oNvFBa_cardPlate{border-radius:var(--dsw-radius-sm);width:24px;height:24px;color:var(--dsw-alias-label-primary-foreground);flex:none;justify-content:center;align-items:center;display:inline-flex}.oNvFBa_cardPlate[data-tone=blue]{background:var(--dsw-static-blue-500)}.oNvFBa_cardPlate[data-tone=amber]{background:var(--dsw-static-amber-500)}.oNvFBa_cardPlate[data-tone=deepseek]{background:var(--dsw-static-deepseek-500)}.oNvFBa_cardText{flex-direction:column;flex:auto;gap:3px;min-width:0;display:flex}.oNvFBa_cardTitle{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.oNvFBa_cardBody{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);text-overflow:ellipsis;white-space:nowrap;line-height:1.5;overflow:hidden}.oNvFBa_cardChevron{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;display:inline-flex}.oNvFBa_cardMenu{z-index:2;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-2);margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0}.oNvFBa_cardMenuItem{box-sizing:border-box;border-radius:var(--dsw-radius-sm);width:100%;min-height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;padding:4px 8px;display:flex}.oNvFBa_cardMenuItem:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.oNvFBa_cardMenuItem:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.oNvFBa_table{border-collapse:collapse;width:100%}.oNvFBa_table th{text-align:left;font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);border-bottom:.5px solid var(--dsw-alias-border-l2);white-space:nowrap;padding:6px 10px}.oNvFBa_table td{border-bottom:.5px solid var(--dsw-alias-border-l1);font:var(--dsw-font-xxs-12);vertical-align:middle;padding:7px 10px}.oNvFBa_table tr:last-child td{border-bottom:none}.oNvFBa_rowLink{color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;min-width:0;padding:0;overflow:hidden}.oNvFBa_rowLink:hover{color:var(--dsw-alias-link)}.oNvFBa_rowLink:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.oNvFBa_muted{color:var(--dsw-alias-label-tertiary)}.oNvFBa_emptyRow td{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);padding:18px}.oNvFBa_hiddenInput{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.oNvFBa_titleCell{align-items:center;gap:4px;min-width:0;display:flex}.oNvFBa_favoriteMark{color:var(--dsw-static-amber-500);font:var(--dsw-font-xxs-12);flex:none}.oNvFBa_dropZone{border-radius:var(--dsw-radius-md);border:1px dashed #0000;transition:border-color .12s,background-color .12s}.oNvFBa_dropZoneActive{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2)}.oNvFBa_shareWrap{flex-direction:column;gap:12px;display:flex}.oNvFBa_shareBlock{flex-direction:column;gap:8px;display:flex}.oNvFBa_shareEmpty{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-sm-13);margin:0;padding:12px 0}.oNvFBa_shareError{color:var(--dsw-alias-label-error);font:var(--dsw-font-sm-13);margin:0;padding:8px 0}.oNvFBa_sharePager{justify-content:flex-end;align-items:center;gap:8px;display:flex}";
3454
3348
  const tagId$11 = "@sparkelf/dsh-knowledge-base/KnowledgeHome.module.css";
3455
3349
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$11) + "]") === null) {
3456
3350
  const tag = document.createElement("style");
@@ -3460,29 +3354,29 @@ window.__ModuleLoader__.load({
3460
3354
  document.head.appendChild(tag);
3461
3355
  }
3462
3356
  var KnowledgeHome_module_css_default = {
3463
- "favoriteMark": "oNvFBa_favoriteMark",
3464
- "cardSlot": "oNvFBa_cardSlot",
3465
- "cardText": "oNvFBa_cardText",
3466
3357
  "cardBody": "oNvFBa_cardBody",
3467
- "hiddenInput": "oNvFBa_hiddenInput",
3468
- "cardMenu": "oNvFBa_cardMenu",
3469
- "dropZoneActive": "oNvFBa_dropZoneActive",
3358
+ "titleCell": "oNvFBa_titleCell",
3359
+ "favoriteMark": "oNvFBa_favoriteMark",
3470
3360
  "cards": "oNvFBa_cards",
3471
- "rowLink": "oNvFBa_rowLink",
3472
- "cardPlate": "oNvFBa_cardPlate",
3473
- "cardChevron": "oNvFBa_cardChevron",
3474
- "home": "oNvFBa_home",
3475
- "shareTitle": "oNvFBa_shareTitle",
3476
- "cardTitle": "oNvFBa_cardTitle",
3477
- "shareError": "oNvFBa_shareError",
3478
3361
  "sharePager": "oNvFBa_sharePager",
3479
- "shareWrap": "oNvFBa_shareWrap",
3480
- "dropZone": "oNvFBa_dropZone",
3481
- "table": "oNvFBa_table",
3362
+ "cardPlate": "oNvFBa_cardPlate",
3363
+ "hiddenInput": "oNvFBa_hiddenInput",
3364
+ "cardMenu": "oNvFBa_cardMenu",
3482
3365
  "shareEmpty": "oNvFBa_shareEmpty",
3483
3366
  "card": "oNvFBa_card",
3484
3367
  "emptyRow": "oNvFBa_emptyRow",
3368
+ "dropZone": "oNvFBa_dropZone",
3369
+ "dropZoneActive": "oNvFBa_dropZoneActive",
3370
+ "shareWrap": "oNvFBa_shareWrap",
3371
+ "cardTitle": "oNvFBa_cardTitle",
3372
+ "table": "oNvFBa_table",
3373
+ "cardText": "oNvFBa_cardText",
3485
3374
  "shareBlock": "oNvFBa_shareBlock",
3375
+ "cardSlot": "oNvFBa_cardSlot",
3376
+ "shareError": "oNvFBa_shareError",
3377
+ "rowLink": "oNvFBa_rowLink",
3378
+ "home": "oNvFBa_home",
3379
+ "cardChevron": "oNvFBa_cardChevron",
3486
3380
  "muted": "oNvFBa_muted",
3487
3381
  "cardMenuItem": "oNvFBa_cardMenuItem"
3488
3382
  };
@@ -3499,27 +3393,27 @@ window.__ModuleLoader__.load({
3499
3393
  }
3500
3394
  var KnowledgeCreateDialog_module_css_default = {
3501
3395
  "picker": "HX727W_picker",
3502
- "dialog": "HX727W_dialog",
3503
- "pickerBar": "HX727W_pickerBar",
3504
- "fieldLabel": "HX727W_fieldLabel",
3505
- "fieldError": "HX727W_fieldError",
3506
- "field": "HX727W_field",
3507
- "crumbSep": "HX727W_crumbSep",
3396
+ "pickerPath": "HX727W_pickerPath",
3508
3397
  "pickerPathValue": "HX727W_pickerPathValue",
3398
+ "pickerPathLabel": "HX727W_pickerPathLabel",
3509
3399
  "pickerList": "HX727W_pickerList",
3510
- "crumbWrap": "HX727W_crumbWrap",
3511
- "fileList": "HX727W_fileList",
3400
+ "fileName": "HX727W_fileName",
3512
3401
  "summary": "HX727W_summary",
3402
+ "crumbSep": "HX727W_crumbSep",
3513
3403
  "crumb": "HX727W_crumb",
3514
- "pickerPath": "HX727W_pickerPath",
3515
- "fileName": "HX727W_fileName",
3516
- "pickerRow": "HX727W_pickerRow",
3517
- "fileTarget": "HX727W_fileTarget",
3404
+ "fieldLabel": "HX727W_fieldLabel",
3405
+ "crumbWrap": "HX727W_crumbWrap",
3406
+ "field": "HX727W_field",
3407
+ "fileInput": "HX727W_fileInput",
3408
+ "fileList": "HX727W_fileList",
3518
3409
  "fileRow": "HX727W_fileRow",
3519
- "pickerPathLabel": "HX727W_pickerPathLabel",
3410
+ "fileTarget": "HX727W_fileTarget",
3411
+ "dialog": "HX727W_dialog",
3520
3412
  "pickerMuted": "HX727W_pickerMuted",
3521
- "fileInput": "HX727W_fileInput",
3522
- "fieldHint": "HX727W_fieldHint"
3413
+ "pickerRow": "HX727W_pickerRow",
3414
+ "fieldError": "HX727W_fieldError",
3415
+ "fieldHint": "HX727W_fieldHint",
3416
+ "pickerBar": "HX727W_pickerBar"
3523
3417
  };
3524
3418
  //#endregion
3525
3419
  //#region src/client/KnowledgeCreateDialog.tsx
@@ -4035,33 +3929,33 @@ window.__ModuleLoader__.load({
4035
3929
  document.head.appendChild(tag);
4036
3930
  }
4037
3931
  var KnowledgeTemplates_module_css_default = {
4038
- "fieldLabel": "Tg9J7q_fieldLabel",
4039
- "manageList": "Tg9J7q_manageList",
4040
- "cardMeta": "Tg9J7q_cardMeta",
4041
- "toolbar": "Tg9J7q_toolbar",
3932
+ "grid": "Tg9J7q_grid",
3933
+ "manage": "Tg9J7q_manage",
4042
3934
  "manageName": "Tg9J7q_manageName",
4043
3935
  "manageActions": "Tg9J7q_manageActions",
3936
+ "cardTags": "Tg9J7q_cardTags",
3937
+ "form": "Tg9J7q_form",
3938
+ "notice": "Tg9J7q_notice",
3939
+ "manageRow": "Tg9J7q_manageRow",
3940
+ "dialog": "Tg9J7q_dialog",
3941
+ "cardFoot": "Tg9J7q_cardFoot",
3942
+ "toolbar": "Tg9J7q_toolbar",
3943
+ "destination": "Tg9J7q_destination",
3944
+ "destinationLabel": "Tg9J7q_destinationLabel",
3945
+ "cardMeta": "Tg9J7q_cardMeta",
3946
+ "manageBar": "Tg9J7q_manageBar",
3947
+ "muted": "Tg9J7q_muted",
4044
3948
  "library": "Tg9J7q_library",
3949
+ "manageList": "Tg9J7q_manageList",
3950
+ "field": "Tg9J7q_field",
4045
3951
  "fileInput": "Tg9J7q_fileInput",
4046
- "form": "Tg9J7q_form",
4047
3952
  "formActions": "Tg9J7q_formActions",
4048
- "grid": "Tg9J7q_grid",
4049
3953
  "cardBody": "Tg9J7q_cardBody",
4050
- "card": "Tg9J7q_card",
4051
- "cardTags": "Tg9J7q_cardTags",
4052
- "manageRow": "Tg9J7q_manageRow",
3954
+ "cardHead": "Tg9J7q_cardHead",
4053
3955
  "cardTitle": "Tg9J7q_cardTitle",
4054
- "field": "Tg9J7q_field",
4055
3956
  "fieldHint": "Tg9J7q_fieldHint",
4056
- "manage": "Tg9J7q_manage",
4057
- "muted": "Tg9J7q_muted",
4058
- "dialog": "Tg9J7q_dialog",
4059
- "cardHead": "Tg9J7q_cardHead",
4060
- "cardFoot": "Tg9J7q_cardFoot",
4061
- "manageBar": "Tg9J7q_manageBar",
4062
- "destinationLabel": "Tg9J7q_destinationLabel",
4063
- "notice": "Tg9J7q_notice",
4064
- "destination": "Tg9J7q_destination"
3957
+ "fieldLabel": "Tg9J7q_fieldLabel",
3958
+ "card": "Tg9J7q_card"
4065
3959
  };
4066
3960
  //#endregion
4067
3961
  //#region src/client/KnowledgeTemplates.tsx
@@ -4834,19 +4728,19 @@ window.__ModuleLoader__.load({
4834
4728
  document.head.appendChild(tag);
4835
4729
  }
4836
4730
  var KnowledgeShareDialog_module_css_default = {
4837
- "fieldLabel": "nw--rq_fieldLabel",
4838
- "list": "nw--rq_list",
4731
+ "option": "nw--rq_option",
4732
+ "chosen": "nw--rq_chosen",
4839
4733
  "optionDetail": "nw--rq_optionDetail",
4734
+ "intro": "nw--rq_intro",
4735
+ "list": "nw--rq_list",
4840
4736
  "optionLabel": "nw--rq_optionLabel",
4737
+ "field": "nw--rq_field",
4841
4738
  "state": "nw--rq_state",
4842
- "chosen": "nw--rq_chosen",
4843
- "option": "nw--rq_option",
4844
4739
  "chosenLabel": "nw--rq_chosenLabel",
4740
+ "body": "nw--rq_body",
4845
4741
  "notice": "nw--rq_notice",
4846
4742
  "hint": "nw--rq_hint",
4847
- "field": "nw--rq_field",
4848
- "intro": "nw--rq_intro",
4849
- "body": "nw--rq_body"
4743
+ "fieldLabel": "nw--rq_fieldLabel"
4850
4744
  };
4851
4745
  //#endregion
4852
4746
  //#region src/client/KnowledgeShareDialog.tsx
@@ -5830,9 +5724,10 @@ window.__ModuleLoader__.load({
5830
5724
  location: cut === -1 ? "—" : grant.relPath.slice(0, cut),
5831
5725
  principalType: grant.principalType,
5832
5726
  audience: audienceOf(grant, nameOf),
5833
- action: grant.action
5727
+ action: grant.action,
5728
+ direction: isOwnGrant(grant, callerId) ? "received" : "given"
5834
5729
  };
5835
- if (isOwnGrant(grant, callerId)) received.push(row);
5730
+ if (row.direction === "received") received.push(row);
5836
5731
  else given.push(row);
5837
5732
  }
5838
5733
  return {
@@ -5840,6 +5735,60 @@ window.__ModuleLoader__.load({
5840
5735
  given
5841
5736
  };
5842
5737
  }
5738
+ /**
5739
+ * Every share row in the order one merged table shows them.
5740
+ *
5741
+ * Inbound first: "what has been shared with me" is the question this tab answers most
5742
+ * often, and within each direction the order the grants arrived in is preserved so the
5743
+ * table does not reshuffle between reads.
5744
+ *
5745
+ * A single list rather than two is what lets the tab be one table with one pager; the
5746
+ * direction travels on each row so the relation column can state it per row.
5747
+ * @param split - the two groups produced by {@link splitShareRelations}.
5748
+ * @returns One list, inbound rows before outbound ones.
5749
+ */
5750
+ function mergeShareRows(split) {
5751
+ return [...split.received, ...split.given];
5752
+ }
5753
+ /**
5754
+ * The text one row's relation column shows.
5755
+ *
5756
+ * `receivedTemplate` is a fixed phrase: the grant data has no grantor, so naming one
5757
+ * would be a fabrication. `givenTemplate` interpolates the audience, which IS in the
5758
+ * data (it is the grant's principal).
5759
+ * @param row - the row to describe.
5760
+ * @param receivedTemplate - the fixed phrase for an inbound share.
5761
+ * @param givenTemplate - the outbound template containing `{audience}`.
5762
+ * @returns The relation text.
5763
+ */
5764
+ function shareRelationText(row, receivedTemplate, givenTemplate) {
5765
+ if (row.direction === "received") return receivedTemplate;
5766
+ return givenTemplate.replace("{audience}", row.audience);
5767
+ }
5768
+ //#endregion
5769
+ //#region src/client/mineScope.ts
5770
+ /**
5771
+ * The bucket a path sits in, by its first segment.
5772
+ * @param relPath - path relative to the knowledge root.
5773
+ * @returns The bucket name, or an empty string when the path is empty.
5774
+ */
5775
+ function bucketOfPath(relPath) {
5776
+ const cut = relPath.indexOf("/");
5777
+ return cut === -1 ? relPath : relPath.slice(0, cut);
5778
+ }
5779
+ /**
5780
+ * Whether a path sits inside the caller's own personal folder.
5781
+ *
5782
+ * `personal/<callerId>/...` and nothing else: a sibling's folder is not the caller's,
5783
+ * and the caller's bare `personal/` level is a container rather than their documents.
5784
+ * @param relPath - path relative to the knowledge root.
5785
+ * @param callerId - the caller's own id, when known.
5786
+ * @returns True when the path is under the caller's own folder.
5787
+ */
5788
+ function isInOwnPersonalFolder(relPath, callerId) {
5789
+ if (callerId === void 0 || callerId === "") return false;
5790
+ return relPath.startsWith("personal/" + callerId + "/");
5791
+ }
5843
5792
  //#endregion
5844
5793
  //#region src/client/KnowledgeHome.tsx
5845
5794
  /**
@@ -5872,34 +5821,34 @@ window.__ModuleLoader__.load({
5872
5821
  return cut === -1 ? "—" : relPath.slice(0, cut);
5873
5822
  }
5874
5823
  /**
5875
- * One direction of the Share tab: a heading, its own table, its own pager.
5876
- *
5877
- * Kept as one component for both directions so the two blocks cannot drift in layout.
5878
- * The only thing that differs is `relationOf`, which is where the honesty rule lives:
5879
- * "shared with me" says where it came from generically, because the sharer is not in
5880
- * the grant data; "I shared out" names the audience, which is a fact the data does
5881
- * support.
5882
- * @param props - the block's rows and copy.
5883
- * @returns The block.
5824
+ * The Share tab, as ONE table.
5825
+ *
5826
+ * It was two blocks while the two directions looked like two answer sets. They are not:
5827
+ * the reader asked for a single table where the direction is a column value, and that is
5828
+ * what this is. Splitting it also made the extra column pointless -- a direction column
5829
+ * only earns its place when both directions share a table.
5830
+ *
5831
+ * The direction travels on each row (`row.direction`), rendered through `relationOf`, so
5832
+ * the merged table states it per row instead of by which block drew the row.
5833
+ * @param props - the page's rows and copy.
5834
+ * @returns The Share tab's table.
5884
5835
  */
5885
- function ShareBlock(props) {
5836
+ function ShareTable(props) {
5886
5837
  const c = props.t;
5838
+ if (props.total === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5839
+ className: KnowledgeHome_module_css_default.shareEmpty,
5840
+ children: props.empty
5841
+ });
5887
5842
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5888
5843
  className: KnowledgeHome_module_css_default.shareBlock,
5889
- "aria-label": props.title,
5890
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5891
- className: KnowledgeHome_module_css_default.shareTitle,
5892
- children: props.title
5893
- }), props.rows.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5894
- className: KnowledgeHome_module_css_default.shareEmpty,
5895
- children: props.empty
5896
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
5844
+ "aria-label": c("homeTabShared"),
5845
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
5897
5846
  className: KnowledgeHome_module_css_default.table,
5898
5847
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
5899
5848
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: c("homeColTitle") }),
5900
5849
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: c("homeColLocation") }),
5901
5850
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: c("shareColRelation") }),
5902
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: props.audienceHeader }),
5851
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: c("shareColAudience") }),
5903
5852
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: c("shareColPermission") })
5904
5853
  ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: props.rows.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
5905
5854
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: row.name }),
@@ -5920,7 +5869,7 @@ window.__ModuleLoader__.load({
5920
5869
  children: row.action
5921
5870
  })
5922
5871
  ] }, row.id)) })]
5923
- }), props.showPager && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5872
+ }), props.pageCount > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5924
5873
  className: KnowledgeHome_module_css_default.sharePager,
5925
5874
  children: [
5926
5875
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
@@ -5946,7 +5895,7 @@ window.__ModuleLoader__.load({
5946
5895
  children: c("auditPageNext")
5947
5896
  })
5948
5897
  ]
5949
- })] })]
5898
+ })]
5950
5899
  });
5951
5900
  }
5952
5901
  /**
@@ -6008,9 +5957,8 @@ window.__ModuleLoader__.load({
6008
5957
  const [shareLoading, setShareLoading] = (0, react.useState)(false);
6009
5958
  /** A failed grants read, surfaced in the block rather than silently showing nothing. */
6010
5959
  const [shareError, setShareError] = (0, react.useState)(void 0);
6011
- /** Each group pages independently: their sizes differ by orders of magnitude. */
6012
- const [receivedPage, setReceivedPage] = (0, react.useState)(1);
6013
- const [givenPage, setGivenPage] = (0, react.useState)(1);
5960
+ /** One pager: the merged table is one list, so it gets one page number. */
5961
+ const [sharePage, setSharePage] = (0, react.useState)(1);
6014
5962
  /**
6015
5963
  * Read the grants and split them into the two directions.
6016
5964
  *
@@ -6092,8 +6040,11 @@ window.__ModuleLoader__.load({
6092
6040
  * sizes differ: a reader with fifty inbound grants and three outbound would otherwise
6093
6041
  * have to page past all fifty to see their own three.
6094
6042
  */
6095
- const pagedReceived = (0, react.useMemo)(() => paginate(share?.received ?? [], receivedPage, 20), [share, receivedPage]);
6096
- const pagedGiven = (0, react.useMemo)(() => paginate(share?.given ?? [], givenPage, 20), [share, givenPage]);
6043
+ const shareRows = (0, react.useMemo)(() => mergeShareRows(share ?? {
6044
+ received: [],
6045
+ given: []
6046
+ }), [share]);
6047
+ const pagedShare = (0, react.useMemo)(() => paginate(shareRows, sharePage, 20), [shareRows, sharePage]);
6097
6048
  const read = (0, react.useCallback)(async () => {
6098
6049
  if (props.mountPoint === "") {
6099
6050
  setState("error");
@@ -6163,11 +6114,17 @@ window.__ModuleLoader__.load({
6163
6114
  const visible = (0, react.useMemo)(() => {
6164
6115
  if (tab === "recent") return [...rows].sort((a, b) => (b.mtimeMs ?? 0) - (a.mtimeMs ?? 0));
6165
6116
  if (tab === "starred") return rows.filter((row) => props.isFavorite?.(row.relPath) === true).sort((a, b) => (b.mtimeMs ?? 0) - (a.mtimeMs ?? 0));
6117
+ if (tab === "mine") {
6118
+ const mayManageShared = props.canManageGrants === true;
6119
+ return rows.filter((row) => isInOwnPersonalFolder(row.relPath, props.callerId) || mayManageShared && bucketOfPath(row.relPath) !== "personal").sort((a, b) => (b.mtimeMs ?? 0) - (a.mtimeMs ?? 0));
6120
+ }
6166
6121
  return [];
6167
6122
  }, [
6168
6123
  tab,
6169
6124
  rows,
6170
- props.isFavorite
6125
+ props.isFavorite,
6126
+ props.callerId,
6127
+ props.canManageGrants
6171
6128
  ]);
6172
6129
  const cards = [
6173
6130
  {
@@ -6384,13 +6341,21 @@ window.__ModuleLoader__.load({
6384
6341
  });
6385
6342
  },
6386
6343
  children: [
6387
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6388
- type: "button",
6389
- className: KnowledgeHome_module_css_default.rowLink,
6390
- onClick: () => {
6391
- props.onOpen(row.relPath);
6392
- },
6393
- children: row.name
6344
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6345
+ className: KnowledgeHome_module_css_default.titleCell,
6346
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6347
+ type: "button",
6348
+ className: KnowledgeHome_module_css_default.rowLink,
6349
+ onClick: () => {
6350
+ props.onOpen(row.relPath);
6351
+ },
6352
+ children: row.name
6353
+ }), props.isFavorite?.(row.relPath) === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6354
+ className: KnowledgeHome_module_css_default.favoriteMark,
6355
+ "aria-label": c("favoriteMark"),
6356
+ title: c("favoriteMark"),
6357
+ children: "★"
6358
+ })]
6394
6359
  }) }),
6395
6360
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6396
6361
  className: KnowledgeHome_module_css_default.muted,
@@ -6408,14 +6373,9 @@ window.__ModuleLoader__.load({
6408
6373
  unknown: row.relPath.startsWith("department/") ? c("bucketDepartment") : c("bucketPersonal")
6409
6374
  }).label
6410
6375
  }) }),
6411
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("td", {
6376
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6412
6377
  className: KnowledgeHome_module_css_default.muted,
6413
- children: [props.isFavorite?.(row.relPath) === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6414
- className: KnowledgeHome_module_css_default.favoriteMark,
6415
- "aria-label": c("favoriteMark"),
6416
- title: c("favoriteMark"),
6417
- children: "★"
6418
- }), formatStamp(row.mtimeMs, locale)]
6378
+ children: formatStamp(row.mtimeMs, locale)
6419
6379
  }),
6420
6380
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6421
6381
  className: KnowledgeHome_module_css_default.muted,
@@ -6436,33 +6396,17 @@ window.__ModuleLoader__.load({
6436
6396
  className: KnowledgeHome_module_css_default.muted,
6437
6397
  children: c("loading")
6438
6398
  }),
6439
- share !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareBlock, {
6440
- t: c,
6441
- title: c("shareGroupReceived"),
6442
- empty: c("shareReceivedEmpty"),
6443
- rows: pagedReceived.rows,
6444
- page: pagedReceived.page,
6445
- pageCount: pagedReceived.pageCount,
6446
- showPager: needsPager(pagedReceived.total, 20),
6447
- onPage: setReceivedPage,
6448
- relationOf: () => c("shareReceivedRelation"),
6449
- audienceHeader: c("shareColPermission"),
6450
- unknownAudience: c("shareUnknownAudience"),
6451
- locale
6452
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareBlock, {
6399
+ share !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareTable, {
6453
6400
  t: c,
6454
- title: c("shareGroupGiven"),
6455
- empty: c("shareGivenEmpty"),
6456
- rows: pagedGiven.rows,
6457
- page: pagedGiven.page,
6458
- pageCount: pagedGiven.pageCount,
6459
- showPager: needsPager(pagedGiven.total, 20),
6460
- onPage: setGivenPage,
6461
- relationOf: (row) => c("shareGivenRelation").replace("{audience}", row.audience),
6462
- audienceHeader: c("shareColAudience"),
6401
+ rows: pagedShare.rows,
6402
+ page: pagedShare.page,
6403
+ pageCount: pagedShare.pageCount,
6404
+ total: pagedShare.total,
6405
+ onPage: setSharePage,
6406
+ empty: c("shareEmpty"),
6463
6407
  unknownAudience: c("shareUnknownAudience"),
6464
- locale
6465
- })] })
6408
+ relationOf: (row) => shareRelationText(row, c("shareReceivedRelation"), c("shareGivenRelation"))
6409
+ })
6466
6410
  ]
6467
6411
  })]
6468
6412
  })
@@ -6637,7 +6581,7 @@ window.__ModuleLoader__.load({
6637
6581
  }
6638
6582
  const rows = state.kind === "ready" ? state.entries : [];
6639
6583
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6640
- className: KnowledgePanel_module_css_default.surface,
6584
+ className: `${KnowledgePanel_module_css_default.surface} ${KnowledgePanel_module_css_default.tableSurface}`,
6641
6585
  children: [
6642
6586
  notice !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6643
6587
  className: KnowledgePanel_module_css_default.notice,
@@ -6798,14 +6742,14 @@ window.__ModuleLoader__.load({
6798
6742
  document.head.appendChild(tag);
6799
6743
  }
6800
6744
  var KnowledgeAudit_module_css_default = {
6801
- "pathCell": "_0xqcPG_pathCell",
6802
- "pagerSize": "_0xqcPG_pagerSize",
6803
- "tabs": "_0xqcPG_tabs",
6804
6745
  "pager": "_0xqcPG_pager",
6805
- "audit": "_0xqcPG_audit",
6806
- "pagerTotal": "_0xqcPG_pagerTotal",
6746
+ "pagerSize": "_0xqcPG_pagerSize",
6807
6747
  "pagerPosition": "_0xqcPG_pagerPosition",
6808
- "pagerSizeLabel": "_0xqcPG_pagerSizeLabel"
6748
+ "pagerTotal": "_0xqcPG_pagerTotal",
6749
+ "tabs": "_0xqcPG_tabs",
6750
+ "pagerSizeLabel": "_0xqcPG_pagerSizeLabel",
6751
+ "pathCell": "_0xqcPG_pathCell",
6752
+ "audit": "_0xqcPG_audit"
6809
6753
  };
6810
6754
  //#endregion
6811
6755
  //#region src/client/KnowledgeAudit.tsx
@@ -7552,31 +7496,31 @@ window.__ModuleLoader__.load({
7552
7496
  document.head.appendChild(tag);
7553
7497
  }
7554
7498
  var KnowledgeListing_module_css_default = {
7555
- "emptyTitle": "_95AMVa_emptyTitle",
7556
- "empty": "_95AMVa_empty",
7557
- "entryPin": "_95AMVa_entryPin",
7499
+ "entryFavorite": "_95AMVa_entryFavorite",
7558
7500
  "kb-row-in": "_95AMVa_kb-row-in",
7559
- "emptyGlyph": "_95AMVa_emptyGlyph",
7560
- "entryGlyph": "_95AMVa_entryGlyph",
7561
- "entries": "_95AMVa_entries",
7501
+ "entryPin": "_95AMVa_entryPin",
7562
7502
  "cardItem": "_95AMVa_cardItem",
7563
- "entryTime": "_95AMVa_entryTime",
7564
7503
  "cardDir": "_95AMVa_cardDir",
7565
- "cardName": "_95AMVa_cardName",
7566
- "card": "_95AMVa_card",
7504
+ "entryName": "_95AMVa_entryName",
7567
7505
  "cards": "_95AMVa_cards",
7568
7506
  "cardGlyph": "_95AMVa_cardGlyph",
7569
- "entryChildren": "_95AMVa_entryChildren",
7507
+ "entryDir": "_95AMVa_entryDir",
7570
7508
  "cardMeta": "_95AMVa_cardMeta",
7571
- "cardTime": "_95AMVa_cardTime",
7572
- "entryName": "_95AMVa_entryName",
7573
- "entryRef": "_95AMVa_entryRef",
7509
+ "card": "_95AMVa_card",
7510
+ "entryTime": "_95AMVa_entryTime",
7574
7511
  "entryCheck": "_95AMVa_entryCheck",
7512
+ "entryChildren": "_95AMVa_entryChildren",
7575
7513
  "pinDropZone": "_95AMVa_pinDropZone",
7576
- "entry": "_95AMVa_entry",
7514
+ "entryRef": "_95AMVa_entryRef",
7577
7515
  "emptyAction": "_95AMVa_emptyAction",
7578
- "entryDir": "_95AMVa_entryDir",
7579
- "entryFavorite": "_95AMVa_entryFavorite"
7516
+ "empty": "_95AMVa_empty",
7517
+ "cardName": "_95AMVa_cardName",
7518
+ "entry": "_95AMVa_entry",
7519
+ "emptyTitle": "_95AMVa_emptyTitle",
7520
+ "entries": "_95AMVa_entries",
7521
+ "entryGlyph": "_95AMVa_entryGlyph",
7522
+ "emptyGlyph": "_95AMVa_emptyGlyph",
7523
+ "cardTime": "_95AMVa_cardTime"
7580
7524
  };
7581
7525
  //#endregion
7582
7526
  //#region src/client/KnowledgeListing.tsx
@@ -8236,19 +8180,19 @@ window.__ModuleLoader__.load({
8236
8180
  document.head.appendChild(tag);
8237
8181
  }
8238
8182
  var KnowledgeProgressPanel_module_css_default = {
8239
- "row": "c3asiG_row",
8240
- "head": "c3asiG_head",
8183
+ "list": "c3asiG_list",
8184
+ "state": "c3asiG_state",
8185
+ "groupTitle": "c3asiG_groupTitle",
8241
8186
  "group": "c3asiG_group",
8242
- "bar": "c3asiG_bar",
8243
- "name": "c3asiG_name",
8244
- "strip": "c3asiG_strip",
8245
- "barFill": "c3asiG_barFill",
8246
- "dir": "c3asiG_dir",
8247
8187
  "body": "c3asiG_body",
8248
- "groupTitle": "c3asiG_groupTitle",
8249
- "state": "c3asiG_state",
8188
+ "strip": "c3asiG_strip",
8189
+ "name": "c3asiG_name",
8190
+ "barFill": "c3asiG_barFill",
8250
8191
  "summary": "c3asiG_summary",
8251
- "list": "c3asiG_list"
8192
+ "dir": "c3asiG_dir",
8193
+ "row": "c3asiG_row",
8194
+ "head": "c3asiG_head",
8195
+ "bar": "c3asiG_bar"
8252
8196
  };
8253
8197
  //#endregion
8254
8198
  //#region src/client/KnowledgeProgressPanel.tsx
@@ -11511,28 +11455,28 @@ window.__ModuleLoader__.load({
11511
11455
  document.head.appendChild(tag);
11512
11456
  }
11513
11457
  var kit_module_css_default = {
11514
- "chipActive": "_4dMUnq_chipActive",
11515
- "iconButtonSm": "_4dMUnq_iconButtonSm",
11516
- "iconButtonActive": "_4dMUnq_iconButtonActive",
11517
- "noticePage": "_4dMUnq_noticePage",
11518
- "notice": "_4dMUnq_notice",
11519
- "confirmDesc": "_4dMUnq_confirmDesc",
11520
- "chipLabel": "_4dMUnq_chipLabel",
11521
- "noticeError": "_4dMUnq_noticeError",
11522
- "iconButton": "_4dMUnq_iconButton",
11523
- "chipCount": "_4dMUnq_chipCount",
11524
- "sectionAction": "_4dMUnq_sectionAction",
11525
- "iconButtonMd": "_4dMUnq_iconButtonMd",
11458
+ "statusBadge": "_4dMUnq_statusBadge",
11526
11459
  "sectionLabel": "_4dMUnq_sectionLabel",
11527
- "noticeHint": "_4dMUnq_noticeHint",
11528
- "sectionCount": "_4dMUnq_sectionCount",
11529
- "noticeWell": "_4dMUnq_noticeWell",
11530
11460
  "noticeInline": "_4dMUnq_noticeInline",
11461
+ "noticeError": "_4dMUnq_noticeError",
11462
+ "iconButtonMd": "_4dMUnq_iconButtonMd",
11531
11463
  "noticeWarn": "_4dMUnq_noticeWarn",
11464
+ "chipLabel": "_4dMUnq_chipLabel",
11465
+ "noticeWell": "_4dMUnq_noticeWell",
11466
+ "iconButtonSm": "_4dMUnq_iconButtonSm",
11467
+ "chip": "_4dMUnq_chip",
11468
+ "chipActive": "_4dMUnq_chipActive",
11469
+ "chipCount": "_4dMUnq_chipCount",
11470
+ "noticeHint": "_4dMUnq_noticeHint",
11471
+ "iconButtonActive": "_4dMUnq_iconButtonActive",
11472
+ "iconButton": "_4dMUnq_iconButton",
11532
11473
  "iconButtonDanger": "_4dMUnq_iconButtonDanger",
11533
- "statusBadge": "_4dMUnq_statusBadge",
11474
+ "sectionAction": "_4dMUnq_sectionAction",
11534
11475
  "sectionHeader": "_4dMUnq_sectionHeader",
11535
- "chip": "_4dMUnq_chip"
11476
+ "sectionCount": "_4dMUnq_sectionCount",
11477
+ "notice": "_4dMUnq_notice",
11478
+ "noticePage": "_4dMUnq_noticePage",
11479
+ "confirmDesc": "_4dMUnq_confirmDesc"
11536
11480
  };
11537
11481
  //#endregion
11538
11482
  //#region ../../node_modules/.pnpm/@sparkelf+dsh-better-sidebar@0.26.0-sparkelf.3_0ed7e9606150ec7c68ce124e175ba749/node_modules/@sparkelf/dsh-better-sidebar/src/client/ui/kit.tsx
@@ -12261,230 +12205,230 @@ window.__ModuleLoader__.load({
12261
12205
  document.head.appendChild(tag);
12262
12206
  }
12263
12207
  var sidebar_module_css_default = {
12264
- "tabActive": "gbHnRq_tabActive",
12265
- "uploadOverlayProgress": "gbHnRq_uploadOverlayProgress",
12266
- "explorerRoot": "gbHnRq_explorerRoot",
12267
- "editorGitBarSpacer": "gbHnRq_editorGitBarSpacer",
12268
- "sandboxDot": "gbHnRq_sandboxDot",
12269
- "browserBar": "gbHnRq_browserBar",
12270
- "editorPdf": "gbHnRq_editorPdf",
12271
- "uploadDropChatHint": "gbHnRq_uploadDropChatHint",
12272
- "toggleButton": "gbHnRq_toggleButton",
12273
- "explorerHiddenPane": "gbHnRq_explorerHiddenPane",
12274
- "openWithChevron": "gbHnRq_openWithChevron",
12275
- "dockFallback": "gbHnRq_dockFallback",
12276
- "mermaidModalToolbar": "gbHnRq_mermaidModalToolbar",
12277
- "tabUnreadDot": "gbHnRq_tabUnreadDot",
12278
- "uploadDropZone": "gbHnRq_uploadDropZone",
12279
- "editorPathInput": "gbHnRq_editorPathInput",
12280
- "tocButton": "gbHnRq_tocButton",
12281
- "tocFlash": "gbHnRq_tocFlash",
12282
- "largeFileList": "gbHnRq_largeFileList",
12283
- "uploadDropChatCard": "gbHnRq_uploadDropChatCard",
12284
- "largeFileRecord": "gbHnRq_largeFileRecord",
12285
- "editorStatus": "gbHnRq_editorStatus",
12286
- "editorDocxZoomRange": "gbHnRq_editorDocxZoomRange",
12208
+ "editorBinary": "gbHnRq_editorBinary",
12287
12209
  "largeFileRecordSummary": "gbHnRq_largeFileRecordSummary",
12288
- "largeFileRecordExpanded": "gbHnRq_largeFileRecordExpanded",
12289
- "browserMessage": "gbHnRq_browserMessage",
12290
- "browserFrame": "gbHnRq_browserFrame",
12291
- "largeFileLine": "gbHnRq_largeFileLine",
12292
- "largeFileLineNo": "gbHnRq_largeFileLineNo",
12293
- "largeFileBody": "gbHnRq_largeFileBody",
12294
- "editorTreePanelFull": "gbHnRq_editorTreePanelFull",
12295
- "editorCmHidden": "gbHnRq_editorCmHidden",
12296
- "browser": "gbHnRq_browser",
12297
- "paneTabHidden": "gbHnRq_paneTabHidden",
12298
- "uploadOverlayStatus": "gbHnRq_uploadOverlayStatus",
12299
- "uploadDropMask": "gbHnRq_uploadDropMask",
12300
- "dropOverlay": "gbHnRq_dropOverlay",
12301
- "uploadDropZonePill": "gbHnRq_uploadDropZonePill",
12302
- "editorTreeToggleActive": "gbHnRq_editorTreeToggleActive",
12303
12210
  "bottomClose": "gbHnRq_bottomClose",
12304
- "uploadDropZoneText": "gbHnRq_uploadDropZoneText",
12211
+ "paneCard": "gbHnRq_paneCard",
12212
+ "explorerRowDropTarget": "gbHnRq_explorerRowDropTarget",
12213
+ "paneTab": "gbHnRq_paneTab",
12305
12214
  "editorDownloadLink": "gbHnRq_editorDownloadLink",
12306
- "mermaidModal": "gbHnRq_mermaidModal",
12307
- "editorPptxButton": "gbHnRq_editorPptxButton",
12308
- "editorBody": "gbHnRq_editorBody",
12309
- "largeFileRecordNo": "gbHnRq_largeFileRecordNo",
12310
- "largeFileLines": "gbHnRq_largeFileLines",
12311
- "openWithName": "gbHnRq_openWithName",
12312
- "browserBlocked": "gbHnRq_browserBlocked",
12313
12215
  "tocPanel": "gbHnRq_tocPanel",
12314
- "uploadOverlayTitle": "gbHnRq_uploadOverlayTitle",
12315
- "editorBlameSummary": "gbHnRq_editorBlameSummary",
12216
+ "split": "gbHnRq_split",
12217
+ "explorerSelectionText": "gbHnRq_explorerSelectionText",
12218
+ "mermaidMarkdown": "gbHnRq_mermaidMarkdown",
12219
+ "bottomResize": "gbHnRq_bottomResize",
12220
+ "dividerRow": "gbHnRq_dividerRow",
12221
+ "tabClose": "gbHnRq_tabClose",
12222
+ "mermaidCode": "gbHnRq_mermaidCode",
12223
+ "dropUp": "gbHnRq_dropUp",
12224
+ "editorPdfDragShield": "gbHnRq_editorPdfDragShield",
12225
+ "largeFileRecordBody": "gbHnRq_largeFileRecordBody",
12226
+ "splitRow": "gbHnRq_splitRow",
12227
+ "explorerBroken": "gbHnRq_explorerBroken",
12228
+ "tab": "gbHnRq_tab",
12229
+ "workbench": "gbHnRq_workbench",
12230
+ "explorerName": "gbHnRq_explorerName",
12231
+ "explorerHiddenPane": "gbHnRq_explorerHiddenPane",
12232
+ "uploadOverlayCard": "gbHnRq_uploadOverlayCard",
12233
+ "editorCmHidden": "gbHnRq_editorCmHidden",
12234
+ "editorTreeDock": "gbHnRq_editorTreeDock",
12235
+ "explorerCopied": "gbHnRq_explorerCopied",
12236
+ "sandboxStatusText": "gbHnRq_sandboxStatusText",
12237
+ "editorPdfToolbar": "gbHnRq_editorPdfToolbar",
12316
12238
  "browserBlockedDesc": "gbHnRq_browserBlockedDesc",
12317
- "editorHeader": "gbHnRq_editorHeader",
12318
- "mermaidInfo": "gbHnRq_mermaidInfo",
12319
- "editorMd": "gbHnRq_editorMd",
12320
- "editorBlameHead": "gbHnRq_editorBlameHead",
12321
- "dropRight": "gbHnRq_dropRight",
12322
- "uploadDropArtCut": "gbHnRq_uploadDropArtCut",
12323
- "browserInput": "gbHnRq_browserInput",
12239
+ "explorerRow": "gbHnRq_explorerRow",
12240
+ "editorError": "gbHnRq_editorError",
12241
+ "sandboxDot": "gbHnRq_sandboxDot",
12242
+ "editorTreePanelFull": "gbHnRq_editorTreePanelFull",
12243
+ "browserMessage": "gbHnRq_browserMessage",
12324
12244
  "mermaidWrap": "gbHnRq_mermaidWrap",
12325
- "dividerActive": "gbHnRq_dividerActive",
12326
- "mermaidCopy": "gbHnRq_mermaidCopy",
12327
- "paneDrop": "gbHnRq_paneDrop",
12328
- "explorerAppIcon": "gbHnRq_explorerAppIcon",
12329
- "explorerActionErrorText": "gbHnRq_explorerActionErrorText",
12330
- "dropDown": "gbHnRq_dropDown",
12331
- "bottomPanelHidden": "gbHnRq_bottomPanelHidden",
12332
- "explorerEmpty": "gbHnRq_explorerEmpty",
12333
- "paneEmptyCards": "gbHnRq_paneEmptyCards",
12245
+ "editorPdfDragShieldActive": "gbHnRq_editorPdfDragShieldActive",
12246
+ "tabBarRightActions": "gbHnRq_tabBarRightActions",
12247
+ "uploadDropZoneText": "gbHnRq_uploadDropZoneText",
12248
+ "openWithName": "gbHnRq_openWithName",
12249
+ "tocItem": "gbHnRq_tocItem",
12250
+ "tocItemLevel": "gbHnRq_tocItemLevel",
12251
+ "editorGitBarAdd": "gbHnRq_editorGitBarAdd",
12252
+ "tocItemText": "gbHnRq_tocItemText",
12253
+ "uploadOverlayStatus": "gbHnRq_uploadOverlayStatus",
12254
+ "explorerRenaming": "gbHnRq_explorerRenaming",
12255
+ "paneTabHidden": "gbHnRq_paneTabHidden",
12256
+ "dsh-toc-flash": "gbHnRq_dsh-toc-flash",
12257
+ "largeFile": "gbHnRq_largeFile",
12258
+ "largeFileNotice": "gbHnRq_largeFileNotice",
12259
+ "uploadDropArtAccent": "gbHnRq_uploadDropArtAccent",
12260
+ "largeFileBody": "gbHnRq_largeFileBody",
12261
+ "editorModeToggle": "gbHnRq_editorModeToggle",
12262
+ "largeFileRecords": "gbHnRq_largeFileRecords",
12263
+ "largeFileLine": "gbHnRq_largeFileLine",
12264
+ "largeFileLineText": "gbHnRq_largeFileLineText",
12265
+ "gitDiffTabHeader": "gbHnRq_gitDiffTabHeader",
12334
12266
  "largeFileRecordRaw": "gbHnRq_largeFileRecordRaw",
12267
+ "gitPlaceholder": "gbHnRq_gitPlaceholder",
12268
+ "browserFrame": "gbHnRq_browserFrame",
12269
+ "dividerCol": "gbHnRq_dividerCol",
12270
+ "explorerError": "gbHnRq_explorerError",
12335
12271
  "pane": "gbHnRq_pane",
12272
+ "explorerSelectionBar": "gbHnRq_explorerSelectionBar",
12273
+ "dockFallback": "gbHnRq_dockFallback",
12274
+ "explorerRowSelected": "gbHnRq_explorerRowSelected",
12275
+ "editorBannerAction": "gbHnRq_editorBannerAction",
12276
+ "editorPdfFrame": "gbHnRq_editorPdfFrame",
12277
+ "tabBarPlus": "gbHnRq_tabBarPlus",
12278
+ "openWithLabel": "gbHnRq_openWithLabel",
12279
+ "explorer": "gbHnRq_explorer",
12280
+ "uploadDropChatCard": "gbHnRq_uploadDropChatCard",
12281
+ "tabBar": "gbHnRq_tabBar",
12282
+ "bottomResizeActive": "gbHnRq_bottomResizeActive",
12283
+ "uploadDropZone": "gbHnRq_uploadDropZone",
12284
+ "uploadDropChatHint": "gbHnRq_uploadDropChatHint",
12285
+ "dirtyDot": "gbHnRq_dirtyDot",
12286
+ "editorGitBarGutter": "gbHnRq_editorGitBarGutter",
12287
+ "editorBlameHead": "gbHnRq_editorBlameHead",
12288
+ "mermaidModalButton": "gbHnRq_mermaidModalButton",
12289
+ "editorPdfStage": "gbHnRq_editorPdfStage",
12290
+ "gitDiffTabTitle": "gbHnRq_gitDiffTabTitle",
12291
+ "largeFileRecordInvalid": "gbHnRq_largeFileRecordInvalid",
12292
+ "dropRight": "gbHnRq_dropRight",
12293
+ "explorerRoot": "gbHnRq_explorerRoot",
12336
12294
  "editorSearchResult": "gbHnRq_editorSearchResult",
12295
+ "editorBlame": "gbHnRq_editorBlame",
12296
+ "gitDiffTab": "gbHnRq_gitDiffTab",
12297
+ "largeFileDownload": "gbHnRq_largeFileDownload",
12298
+ "largeFileRecordExpanded": "gbHnRq_largeFileRecordExpanded",
12299
+ "editorPlaceholder": "gbHnRq_editorPlaceholder",
12300
+ "uploadDropZonePill": "gbHnRq_uploadDropZonePill",
12301
+ "editorPptxButton": "gbHnRq_editorPptxButton",
12302
+ "explorerRowRevealed": "gbHnRq_explorerRowRevealed",
12303
+ "largeFileRecordNo": "gbHnRq_largeFileRecordNo",
12304
+ "dropOverlay": "gbHnRq_dropOverlay",
12305
+ "editorStatus": "gbHnRq_editorStatus",
12306
+ "tabList": "gbHnRq_tabList",
12307
+ "uploadOverlayProgressFill": "gbHnRq_uploadOverlayProgressFill",
12308
+ "editorBlameSummary": "gbHnRq_editorBlameSummary",
12309
+ "mermaidInfo": "gbHnRq_mermaidInfo",
12310
+ "mermaidModalHint": "gbHnRq_mermaidModalHint",
12311
+ "gitEmpty": "gbHnRq_gitEmpty",
12337
12312
  "panel": "gbHnRq_panel",
12338
- "sandboxStatusOff": "gbHnRq_sandboxStatusOff",
12339
- "browserBlockedButton": "gbHnRq_browserBlockedButton",
12340
- "editorPdfDragShield": "gbHnRq_editorPdfDragShield",
12341
- "explorerRowDropTarget": "gbHnRq_explorerRowDropTarget",
12342
- "editorTreeDock": "gbHnRq_editorTreeDock",
12343
- "uploadOverlay": "gbHnRq_uploadOverlay",
12344
- "paneTab": "gbHnRq_paneTab",
12345
- "sandboxAction": "gbHnRq_sandboxAction",
12346
- "uploadOverlayCard": "gbHnRq_uploadOverlayCard",
12347
- "selectionPopup": "gbHnRq_selectionPopup",
12348
- "editorGitDel": "gbHnRq_editorGitDel",
12313
+ "iconButton": "gbHnRq_iconButton",
12314
+ "editorModeActive": "gbHnRq_editorModeActive",
12315
+ "mermaidHeader": "gbHnRq_mermaidHeader",
12316
+ "editorGitBarDel": "gbHnRq_editorGitBarDel",
12349
12317
  "openWithPinActive": "gbHnRq_openWithPinActive",
12350
- "gitError": "gbHnRq_gitError",
12351
- "largeFileRecordInvalid": "gbHnRq_largeFileRecordInvalid",
12352
- "chipUnread": "gbHnRq_chipUnread",
12353
- "dsh-row-in": "gbHnRq_dsh-row-in",
12354
- "sandboxStatusOn": "gbHnRq_sandboxStatusOn",
12318
+ "browser": "gbHnRq_browser",
12319
+ "splitChild": "gbHnRq_splitChild",
12320
+ "editorGitBarMod": "gbHnRq_editorGitBarMod",
12321
+ "tabTitle": "gbHnRq_tabTitle",
12322
+ "nativeTabHost": "gbHnRq_nativeTabHost",
12323
+ "editorGitBar": "gbHnRq_editorGitBar",
12324
+ "largeFileRecord": "gbHnRq_largeFileRecord",
12325
+ "toggleButton": "gbHnRq_toggleButton",
12326
+ "mermaidCopy": "gbHnRq_mermaidCopy",
12327
+ "tabActive": "gbHnRq_tabActive",
12328
+ "uploadDropArtPrimary": "gbHnRq_uploadDropArtPrimary",
12329
+ "bottomPanelHidden": "gbHnRq_bottomPanelHidden",
12330
+ "paneContent": "gbHnRq_paneContent",
12331
+ "explorerSelectionActions": "gbHnRq_explorerSelectionActions",
12332
+ "uploadDropArtCut": "gbHnRq_uploadDropArtCut",
12333
+ "uploadDropMask": "gbHnRq_uploadDropMask",
12334
+ "dropCenter": "gbHnRq_dropCenter",
12335
+ "explorerGitName": "gbHnRq_explorerGitName",
12355
12336
  "editorTreePanel": "gbHnRq_editorTreePanel",
12356
- "editorModeToggle": "gbHnRq_editorModeToggle",
12357
- "editorPlaceholder": "gbHnRq_editorPlaceholder",
12358
12337
  "editorBinaryNotice": "gbHnRq_editorBinaryNotice",
12359
- "divider": "gbHnRq_divider",
12360
- "iconButton": "gbHnRq_iconButton",
12361
- "bottomResizeActive": "gbHnRq_bottomResizeActive",
12338
+ "explorerHidden": "gbHnRq_explorerHidden",
12339
+ "uploadOverlayProgress": "gbHnRq_uploadOverlayProgress",
12362
12340
  "editorStatusError": "gbHnRq_editorStatusError",
12341
+ "editorGitDel": "gbHnRq_editorGitDel",
12342
+ "sandboxStatusOff": "gbHnRq_sandboxStatusOff",
12343
+ "editorHtml": "gbHnRq_editorHtml",
12344
+ "uploadOverlay": "gbHnRq_uploadOverlay",
12345
+ "mermaidError": "gbHnRq_mermaidError",
12346
+ "mermaidModalToolbar": "gbHnRq_mermaidModalToolbar",
12347
+ "tabBadge": "gbHnRq_tabBadge",
12348
+ "boundaryError": "gbHnRq_boundaryError",
12349
+ "terminalRetry": "gbHnRq_terminalRetry",
12350
+ "splitCol": "gbHnRq_splitCol",
12351
+ "editorTreeToggleActive": "gbHnRq_editorTreeToggleActive",
12352
+ "tabUnreadDot": "gbHnRq_tabUnreadDot",
12353
+ "gitError": "gbHnRq_gitError",
12354
+ "editorDocxZoomRange": "gbHnRq_editorDocxZoomRange",
12355
+ "editorHeader": "gbHnRq_editorHeader",
12356
+ "tabBarDrop": "gbHnRq_tabBarDrop",
12357
+ "panelBody": "gbHnRq_panelBody",
12358
+ "editorGitBarSpacer": "gbHnRq_editorGitBarSpacer",
12359
+ "editorCm": "gbHnRq_editorCm",
12360
+ "mermaidBody": "gbHnRq_mermaidBody",
12361
+ "mermaidModalStage": "gbHnRq_mermaidModalStage",
12362
+ "paneDrop": "gbHnRq_paneDrop",
12363
+ "editorGitAdd": "gbHnRq_editorGitAdd",
12364
+ "tocButton": "gbHnRq_tocButton",
12365
+ "editorHtmlBlock": "gbHnRq_editorHtmlBlock",
12366
+ "tocFlash": "gbHnRq_tocFlash",
12363
12367
  "editorSearchResultDir": "gbHnRq_editorSearchResultDir",
12364
- "explorerBroken": "gbHnRq_explorerBroken",
12365
- "splitRow": "gbHnRq_splitRow",
12366
- "explorerBody": "gbHnRq_explorerBody",
12367
- "explorerDir": "gbHnRq_explorerDir",
12368
- "browserBlockedActions": "gbHnRq_browserBlockedActions",
12369
- "explorerRowRevealed": "gbHnRq_explorerRowRevealed",
12370
- "splitCol": "gbHnRq_splitCol",
12368
+ "editorTreeResize": "gbHnRq_editorTreeResize",
12369
+ "editorTitle": "gbHnRq_editorTitle",
12370
+ "editorBody": "gbHnRq_editorBody",
12371
+ "editorGitMod": "gbHnRq_editorGitMod",
12372
+ "sandboxStatus": "gbHnRq_sandboxStatus",
12373
+ "editorMd": "gbHnRq_editorMd",
12374
+ "explorerRenameInput": "gbHnRq_explorerRenameInput",
12375
+ "explorerEmpty": "gbHnRq_explorerEmpty",
12376
+ "editorBanner": "gbHnRq_editorBanner",
12377
+ "browserStart": "gbHnRq_browserStart",
12378
+ "largeFileList": "gbHnRq_largeFileList",
12379
+ "bottomPanel": "gbHnRq_bottomPanel",
12380
+ "browserBlocked": "gbHnRq_browserBlocked",
12381
+ "openWithPin": "gbHnRq_openWithPin",
12371
12382
  "editorMain": "gbHnRq_editorMain",
12372
- "mermaidBody": "gbHnRq_mermaidBody",
12373
- "dropCenter": "gbHnRq_dropCenter",
12374
12383
  "chipIcon": "gbHnRq_chipIcon",
12375
- "editorSearchHint": "gbHnRq_editorSearchHint",
12376
- "dirtyDot": "gbHnRq_dirtyDot",
12384
+ "largeFileLineNo": "gbHnRq_largeFileLineNo",
12385
+ "dividerActive": "gbHnRq_dividerActive",
12386
+ "explorerBody": "gbHnRq_explorerBody",
12387
+ "dropDown": "gbHnRq_dropDown",
12388
+ "explorerRef": "gbHnRq_explorerRef",
12389
+ "explorerTime": "gbHnRq_explorerTime",
12390
+ "browserBlockedActions": "gbHnRq_browserBlockedActions",
12391
+ "browserBlockedButton": "gbHnRq_browserBlockedButton",
12392
+ "tabBoundaryError": "gbHnRq_tabBoundaryError",
12393
+ "explorerDir": "gbHnRq_explorerDir",
12377
12394
  "largeFileRecordTree": "gbHnRq_largeFileRecordTree",
12378
12395
  "largeFilePager": "gbHnRq_largeFilePager",
12379
- "editorTreeResize": "gbHnRq_editorTreeResize",
12380
- "explorerError": "gbHnRq_explorerError",
12381
- "paneContent": "gbHnRq_paneContent",
12382
- "explorerSelectionBar": "gbHnRq_explorerSelectionBar",
12383
- "editorModeActive": "gbHnRq_editorModeActive",
12384
- "sandboxStatus": "gbHnRq_sandboxStatus",
12396
+ "explorerSymlink": "gbHnRq_explorerSymlink",
12397
+ "tocBar": "gbHnRq_tocBar",
12398
+ "largeFileNoticeAction": "gbHnRq_largeFileNoticeAction",
12399
+ "editorSearchHint": "gbHnRq_editorSearchHint",
12400
+ "openWithChevron": "gbHnRq_openWithChevron",
12401
+ "largeFileLines": "gbHnRq_largeFileLines",
12385
12402
  "explorerDirChanged": "gbHnRq_explorerDirChanged",
12386
- "nativeTabHost": "gbHnRq_nativeTabHost",
12387
- "dropLeft": "gbHnRq_dropLeft",
12403
+ "editorModeButton": "gbHnRq_editorModeButton",
12404
+ "uploadOverlayCancel": "gbHnRq_uploadOverlayCancel",
12405
+ "largeFilePageLabel": "gbHnRq_largeFilePageLabel",
12388
12406
  "explorerHeader": "gbHnRq_explorerHeader",
12389
- "editorPdfFrame": "gbHnRq_editorPdfFrame",
12390
- "gitEmpty": "gbHnRq_gitEmpty",
12391
- "tabTitle": "gbHnRq_tabTitle",
12392
- "editorError": "gbHnRq_editorError",
12393
- "mermaidHeader": "gbHnRq_mermaidHeader",
12394
- "largeFile": "gbHnRq_largeFile",
12395
- "largeFileLineText": "gbHnRq_largeFileLineText",
12396
- "explorerRenaming": "gbHnRq_explorerRenaming",
12397
- "editorGitBarMod": "gbHnRq_editorGitBarMod",
12398
- "editorPdfDragShieldActive": "gbHnRq_editorPdfDragShieldActive",
12399
- "uploadDropArtPrimary": "gbHnRq_uploadDropArtPrimary",
12400
- "boundaryError": "gbHnRq_boundaryError",
12407
+ "chipUnread": "gbHnRq_chipUnread",
12408
+ "explorerActionError": "gbHnRq_explorerActionError",
12409
+ "selectionPopup": "gbHnRq_selectionPopup",
12410
+ "sandboxAction": "gbHnRq_sandboxAction",
12411
+ "editorPdf": "gbHnRq_editorPdf",
12401
12412
  "editorSearchResultLabel": "gbHnRq_editorSearchResultLabel",
12402
- "explorerSelectionActions": "gbHnRq_explorerSelectionActions",
12403
- "largeFilePageLabel": "gbHnRq_largeFilePageLabel",
12404
- "tabBarDrop": "gbHnRq_tabBarDrop",
12405
- "editorModeButton": "gbHnRq_editorModeButton",
12406
- "tocItemText": "gbHnRq_tocItemText",
12407
12413
  "orphanedType": "gbHnRq_orphanedType",
12408
- "mermaidModalStage": "gbHnRq_mermaidModalStage",
12409
- "editorGitBarDel": "gbHnRq_editorGitBarDel",
12410
- "explorerTime": "gbHnRq_explorerTime",
12411
- "dropUp": "gbHnRq_dropUp",
12412
- "editorPdfStage": "gbHnRq_editorPdfStage",
12413
- "panelBody": "gbHnRq_panelBody",
12414
- "explorerSelectionText": "gbHnRq_explorerSelectionText",
12415
- "mermaidModalButton": "gbHnRq_mermaidModalButton",
12416
- "uploadDropArtAccent": "gbHnRq_uploadDropArtAccent",
12417
- "editorGitBarGutter": "gbHnRq_editorGitBarGutter",
12418
- "editorPdfFrameBlocked": "gbHnRq_editorPdfFrameBlocked",
12419
- "tabBarPlus": "gbHnRq_tabBarPlus",
12420
- "explorerCopied": "gbHnRq_explorerCopied",
12421
- "editorGitBarAdd": "gbHnRq_editorGitBarAdd",
12422
- "gitPlaceholder": "gbHnRq_gitPlaceholder",
12423
- "terminalRetry": "gbHnRq_terminalRetry",
12424
- "bottomPanel": "gbHnRq_bottomPanel",
12425
- "browserBlockedTitle": "gbHnRq_browserBlockedTitle",
12426
- "editorGitBar": "gbHnRq_editorGitBar",
12427
- "split": "gbHnRq_split",
12428
- "bottomResize": "gbHnRq_bottomResize",
12429
- "explorerRowSelected": "gbHnRq_explorerRowSelected",
12430
- "gitDiffTabTitle": "gbHnRq_gitDiffTabTitle",
12431
- "editorGitAdd": "gbHnRq_editorGitAdd",
12432
- "mermaidModalHint": "gbHnRq_mermaidModalHint",
12433
- "tocBar": "gbHnRq_tocBar",
12434
- "workbench": "gbHnRq_workbench",
12435
- "editorPdfToolbar": "gbHnRq_editorPdfToolbar",
12436
- "tabList": "gbHnRq_tabList",
12437
- "browserStart": "gbHnRq_browserStart",
12438
- "tabBarRightActions": "gbHnRq_tabBarRightActions",
12439
- "explorerRow": "gbHnRq_explorerRow",
12414
+ "divider": "gbHnRq_divider",
12415
+ "explorerActionErrorText": "gbHnRq_explorerActionErrorText",
12416
+ "editorTreeSearch": "gbHnRq_editorTreeSearch",
12417
+ "browserBar": "gbHnRq_browserBar",
12440
12418
  "editorSearchInput": "gbHnRq_editorSearchInput",
12441
- "editorBanner": "gbHnRq_editorBanner",
12442
- "sandboxStatusText": "gbHnRq_sandboxStatusText",
12443
- "editorCm": "gbHnRq_editorCm",
12444
- "editorBlame": "gbHnRq_editorBlame",
12445
- "gitDiffTab": "gbHnRq_gitDiffTab",
12446
- "explorerGitName": "gbHnRq_explorerGitName",
12447
- "tabClose": "gbHnRq_tabClose",
12448
- "tabBadge": "gbHnRq_tabBadge",
12449
- "explorerActionError": "gbHnRq_explorerActionError",
12450
- "tabBoundaryError": "gbHnRq_tabBoundaryError",
12451
- "openWithPin": "gbHnRq_openWithPin",
12452
- "explorerHidden": "gbHnRq_explorerHidden",
12453
- "explorerRenameInput": "gbHnRq_explorerRenameInput",
12454
- "uploadOverlayProgressFill": "gbHnRq_uploadOverlayProgressFill",
12455
- "editorBannerAction": "gbHnRq_editorBannerAction",
12456
- "dividerRow": "gbHnRq_dividerRow",
12457
- "editorHtmlBlock": "gbHnRq_editorHtmlBlock",
12458
12419
  "uploadDropHero": "gbHnRq_uploadDropHero",
12459
- "paneCard": "gbHnRq_paneCard",
12460
- "mermaidError": "gbHnRq_mermaidError",
12461
- "splitChild": "gbHnRq_splitChild",
12462
- "mermaidCode": "gbHnRq_mermaidCode",
12463
- "gitDiffTabHeader": "gbHnRq_gitDiffTabHeader",
12464
- "editorGitMod": "gbHnRq_editorGitMod",
12465
- "tocItemLevel": "gbHnRq_tocItemLevel",
12466
- "dsh-toc-flash": "gbHnRq_dsh-toc-flash",
12467
- "explorerName": "gbHnRq_explorerName",
12468
- "explorer": "gbHnRq_explorer",
12469
- "editorHtml": "gbHnRq_editorHtml",
12470
- "tocItem": "gbHnRq_tocItem",
12471
- "largeFileRecords": "gbHnRq_largeFileRecords",
12472
- "dividerCol": "gbHnRq_dividerCol",
12473
- "editorBinary": "gbHnRq_editorBinary",
12474
- "mermaidMarkdown": "gbHnRq_mermaidMarkdown",
12475
- "largeFileRecordBody": "gbHnRq_largeFileRecordBody",
12476
- "tabBar": "gbHnRq_tabBar",
12477
- "uploadOverlayCancel": "gbHnRq_uploadOverlayCancel",
12478
- "tab": "gbHnRq_tab",
12479
- "explorerRef": "gbHnRq_explorerRef",
12480
- "editorTitle": "gbHnRq_editorTitle",
12481
- "largeFileNotice": "gbHnRq_largeFileNotice",
12482
- "largeFileDownload": "gbHnRq_largeFileDownload",
12483
- "largeFileNoticeAction": "gbHnRq_largeFileNoticeAction",
12484
- "openWithLabel": "gbHnRq_openWithLabel",
12420
+ "sandboxStatusOn": "gbHnRq_sandboxStatusOn",
12485
12421
  "editor": "gbHnRq_editor",
12486
- "editorTreeSearch": "gbHnRq_editorTreeSearch",
12487
- "explorerSymlink": "gbHnRq_explorerSymlink"
12422
+ "dropLeft": "gbHnRq_dropLeft",
12423
+ "dsh-row-in": "gbHnRq_dsh-row-in",
12424
+ "browserInput": "gbHnRq_browserInput",
12425
+ "browserBlockedTitle": "gbHnRq_browserBlockedTitle",
12426
+ "editorPathInput": "gbHnRq_editorPathInput",
12427
+ "uploadOverlayTitle": "gbHnRq_uploadOverlayTitle",
12428
+ "paneEmptyCards": "gbHnRq_paneEmptyCards",
12429
+ "mermaidModal": "gbHnRq_mermaidModal",
12430
+ "explorerAppIcon": "gbHnRq_explorerAppIcon",
12431
+ "editorPdfFrameBlocked": "gbHnRq_editorPdfFrameBlocked"
12488
12432
  };
12489
12433
  //#endregion
12490
12434
  //#region ../../node_modules/.pnpm/@sparkelf+dsh-better-sidebar@0.26.0-sparkelf.3_0ed7e9606150ec7c68ce124e175ba749/node_modules/@sparkelf/dsh-better-sidebar/src/client/FileTree.tsx
@@ -14806,18 +14750,6 @@ window.__ModuleLoader__.load({
14806
14750
  return title.split(" — ")[0];
14807
14751
  }
14808
14752
  /**
14809
- * The row element containing one node.
14810
- *
14811
- * The explorer marks rows with a class from its CSS module, whose generated name is not
14812
- * importable here; the role and the row shape are. Walking up to the nearest element with
14813
- * `role="button"` reaches the row without depending on the module's hash.
14814
- * @param node - any node inside a row.
14815
- * @returns The row element, or null when the node is not inside one.
14816
- */
14817
- function rowOf(node) {
14818
- return node.closest("[role=\"button\"]");
14819
- }
14820
- /**
14821
14753
  * Keep the borrowed explorer's rows in step with the caller's favourites.
14822
14754
  *
14823
14755
  * The explorer has no row-decoration hook and builds its context menu internally, so
@@ -14827,22 +14759,21 @@ window.__ModuleLoader__.load({
14827
14759
  * - The star is an element this code inserts before the row's timestamp, which is the
14828
14760
  * placement the reader asked for ("left of the date"). It is inserted once and then
14829
14761
  * toggled, so a re-render does not stack a second star on the same row.
14830
- * - The menu is intercepted in the CAPTURE phase. The explorer's own handler runs on the
14831
- * row itself and calls `stopPropagation`, which stops the synthetic bubble but not a
14832
- * native capture listener on an ancestor — capture runs first, so this can suppress the
14833
- * explorer's menu and open the caller's instead. That is the only interception point
14834
- * the component exposes.
14762
+ * - The context menu is NOT touched. The explorer builds its own menu and offers no way
14763
+ * to append to it, so the only possible interference was replacement -- and replacing
14764
+ * it removed the six actions a reader already relies on. The star is all this hook
14765
+ * does; the plugin's own actions live in the selection bar, which appears on selection
14766
+ * and competes with nothing.
14835
14767
  *
14836
- * A MutationObserver drives both, because every expansion re-renders rows and a one-shot
14768
+ * A MutationObserver drives it, because every expansion re-renders rows and a one-shot
14837
14769
  * pass on mount would decorate only the top level.
14838
14770
  * @param container - the element wrapping the explorer.
14839
14771
  * @param root - absolute knowledge root, stripped to build the relative paths favourites use.
14840
14772
  * @param isFavorite - the caller's favourites lookup.
14841
14773
  * @param label - the star's accessible name.
14842
- * @param onContextMenu - the caller's menu opener, or undefined to leave the explorer's menu.
14843
14774
  */
14844
14775
  function useRowDecoration(options) {
14845
- const { container, root, isFavorite, label, onContextMenu } = options;
14776
+ const { container, root, isFavorite, label } = options;
14846
14777
  /**
14847
14778
  * Turn an absolute row path into the key favourites are stored under.
14848
14779
  *
@@ -14874,8 +14805,8 @@ window.__ModuleLoader__.load({
14874
14805
  star.setAttribute("title", label);
14875
14806
  star.style.cssText = "flex:none;color:var(--dsw-static-amber-500);font:var(--dsw-font-xxs-12);margin-left:4px";
14876
14807
  star.textContent = "★";
14877
- const time = row.querySelector("[class*=\"explorerTime\"]");
14878
- if (time !== null) time.before(star);
14808
+ const name = row.querySelector("[class*=\"explorerName\"]");
14809
+ if (name !== null) name.after(star);
14879
14810
  else row.appendChild(star);
14880
14811
  };
14881
14812
  /** Decorate every row currently rendered. */
@@ -14904,81 +14835,6 @@ window.__ModuleLoader__.load({
14904
14835
  label,
14905
14836
  relPathOf
14906
14837
  ]);
14907
- (0, react.useEffect)(() => {
14908
- const host = container.current;
14909
- if (host === null || onContextMenu === void 0) return void 0;
14910
- /**
14911
- * Whether a row is a folder.
14912
- *
14913
- * The explorer marks directory rows with `css.explorerDir`, whose generated class name
14914
- * is not importable here (it is that package's CSS module). The stable trace is the
14915
- * class fragment: CSS modules always keep the original name inside the generated one,
14916
- * so matching the substring finds the marker without depending on the hash.
14917
- *
14918
- * A row whose class cannot be classified is treated as a file. That is the harmless
14919
- * direction: every action except "paste into" behaves identically, and a paste aimed
14920
- * at a file row lands in its parent, which is what a reader dropping beside a
14921
- * document expects anyway.
14922
- */
14923
- const isDirRow = (row) => /(^|\s)[A-Za-z0-9_-]*explorerDir(\s|$)/u.test(row.getAttribute("class") ?? "");
14924
- /**
14925
- * Every row the explorer currently marks selected, as relative paths.
14926
- *
14927
- * The explorer owns the selection and does not publish it, but it writes
14928
- * `data-dsh-selected` onto each selected row, which is the one place the state is
14929
- * legible from outside. Read BEFORE the explorer's own handler runs (this listener
14930
- * is capture phase), so the set is the one the reader saw when they right-clicked:
14931
- * the explorer collapses a right-click outside the selection onto the single row,
14932
- * and doing that first would erase the batch the reader meant to act on.
14933
- */
14934
- const selectedRelPaths = () => {
14935
- const picked = [];
14936
- for (const candidate of host.querySelectorAll("[data-dsh-selected=\"true\"]")) {
14937
- const absolute = rowPathOf(candidate);
14938
- if (absolute === void 0) continue;
14939
- const rel = relPathOf(absolute);
14940
- if (rel === void 0) continue;
14941
- picked.push({
14942
- relPath: rel,
14943
- isDir: isDirRow(candidate),
14944
- name: rel.split("/").pop() ?? rel
14945
- });
14946
- }
14947
- return picked;
14948
- };
14949
- const onContextCapture = (event) => {
14950
- if (!(event instanceof MouseEvent)) return;
14951
- const target = event.target;
14952
- if (!(target instanceof Element)) return;
14953
- const row = rowOf(target);
14954
- if (row === null) return;
14955
- const absolute = rowPathOf(row);
14956
- if (absolute === void 0) return;
14957
- const relPath = relPathOf(absolute);
14958
- if (relPath === void 0) return;
14959
- event.preventDefault();
14960
- event.stopPropagation();
14961
- const picked = selectedRelPaths();
14962
- const covered = batchRowsFor({
14963
- relPath,
14964
- name: relPath.split("/").pop() ?? relPath,
14965
- isDir: isDirRow(row)
14966
- }, picked);
14967
- const selection = covered.length > 0 ? covered : void 0;
14968
- onContextMenu(relPath, isDirRow(row), {
14969
- x: event.clientX,
14970
- y: event.clientY
14971
- }, selection);
14972
- };
14973
- host.addEventListener("contextmenu", onContextCapture, { capture: true });
14974
- return () => {
14975
- host.removeEventListener("contextmenu", onContextCapture, { capture: true });
14976
- };
14977
- }, [
14978
- container,
14979
- onContextMenu,
14980
- relPathOf
14981
- ]);
14982
14838
  }
14983
14839
  /**
14984
14840
  * The knowledge tree, rendered by the product's file explorer.
@@ -14994,15 +14850,14 @@ window.__ModuleLoader__.load({
14994
14850
  *
14995
14851
  * The explorer renders its own rows, so neither a star nor a context menu can be
14996
14852
  * handed to it; both are applied from outside through this element. See
14997
- * `useRowDecoration` for why capture phase is the only workable interception point.
14853
+ * `useRowDecoration` for what it decorates and why.
14998
14854
  */
14999
14855
  const container = (0, react.useRef)(null);
15000
14856
  useRowDecoration({
15001
14857
  container,
15002
14858
  root,
15003
14859
  isFavorite: props.isFavorite,
15004
- label: props.favoriteMarkLabel,
15005
- onContextMenu: props.onRowContextMenu
14860
+ label: props.favoriteMarkLabel
15006
14861
  });
15007
14862
  /** Every exclusion pattern at once, in the one array identity the explorer keys on. */
15008
14863
  const exclude = (0, react.useMemo)(() => METADATA_NAMES.map((name) => `**/${name}`), []);
@@ -15317,14 +15172,14 @@ window.__ModuleLoader__.load({
15317
15172
  document.head.appendChild(tag);
15318
15173
  }
15319
15174
  var KnowledgeReferencePicker_module_css_default = {
15320
- "footer": "uUHBaG_footer",
15321
- "error": "uUHBaG_error",
15175
+ "rowWhen": "uUHBaG_rowWhen",
15322
15176
  "list": "uUHBaG_list",
15323
- "body": "uUHBaG_body",
15324
15177
  "empty": "uUHBaG_empty",
15178
+ "error": "uUHBaG_error",
15325
15179
  "rowName": "uUHBaG_rowName",
15180
+ "body": "uUHBaG_body",
15326
15181
  "content": "uUHBaG_content",
15327
- "rowWhen": "uUHBaG_rowWhen"
15182
+ "footer": "uUHBaG_footer"
15328
15183
  };
15329
15184
  //#endregion
15330
15185
  //#region src/client/insertReadiness.ts
@@ -15795,10 +15650,10 @@ window.__ModuleLoader__.load({
15795
15650
  document.head.appendChild(tag);
15796
15651
  }
15797
15652
  var KnowledgeSelectionBar_module_css_default = {
15653
+ "bar": "y8212a_bar",
15798
15654
  "actions": "y8212a_actions",
15799
15655
  "text": "y8212a_text",
15800
- "action": "y8212a_action",
15801
- "bar": "y8212a_bar"
15656
+ "action": "y8212a_action"
15802
15657
  };
15803
15658
  //#endregion
15804
15659
  //#region src/client/KnowledgeSelectionBar.tsx
@@ -15849,7 +15704,49 @@ window.__ModuleLoader__.load({
15849
15704
  className: KnowledgeSelectionBar_module_css_default.action,
15850
15705
  disabled: props.busy === true,
15851
15706
  onClick: props.onPin,
15852
- children: props.t("pinSelected")
15707
+ children: props.allPinned === true ? props.t("actionUnpin") : props.t("pinSelected")
15708
+ }),
15709
+ props.onShare !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15710
+ type: "button",
15711
+ className: KnowledgeSelectionBar_module_css_default.action,
15712
+ disabled: props.busy === true,
15713
+ onClick: props.onShare,
15714
+ children: props.t("actionShare")
15715
+ }),
15716
+ props.onFavorite !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15717
+ type: "button",
15718
+ className: KnowledgeSelectionBar_module_css_default.action,
15719
+ disabled: props.busy === true,
15720
+ onClick: props.onFavorite,
15721
+ children: props.allFavorite === true ? props.t("actionUnfavorite") : props.t("actionFavorite")
15722
+ }),
15723
+ props.onReference !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15724
+ type: "button",
15725
+ className: KnowledgeSelectionBar_module_css_default.action,
15726
+ disabled: props.busy === true,
15727
+ onClick: props.onReference,
15728
+ children: props.t("actionReference")
15729
+ }),
15730
+ props.onPermissions !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15731
+ type: "button",
15732
+ className: KnowledgeSelectionBar_module_css_default.action,
15733
+ disabled: props.busy === true,
15734
+ onClick: props.onPermissions,
15735
+ children: props.t("actionPermissions")
15736
+ }),
15737
+ props.onCut !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15738
+ type: "button",
15739
+ className: KnowledgeSelectionBar_module_css_default.action,
15740
+ disabled: props.busy === true,
15741
+ onClick: props.onCut,
15742
+ children: props.t("actionCut")
15743
+ }),
15744
+ props.onPaste !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15745
+ type: "button",
15746
+ className: KnowledgeSelectionBar_module_css_default.action,
15747
+ disabled: props.busy === true || props.canPaste === false,
15748
+ onClick: props.onPaste,
15749
+ children: props.t("actionPaste")
15853
15750
  }),
15854
15751
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15855
15752
  type: "button",
@@ -16336,25 +16233,15 @@ window.__ModuleLoader__.load({
16336
16233
  *
16337
16234
  * One instance for the whole page rather than one per surface: the home table and the
16338
16235
  * tree must offer the same actions, and two instances would be two places to keep in
16339
- * step. Each surface reports the row the reader right-clicked and where, and this
16340
- * renders the menu.
16341
16236
  */
16342
- const [treeMenu, setTreeMenu] = (0, react.useState)(null);
16343
16237
  /** The cut/copied entry, shared by both surfaces so a copy on one pastes on the other. */
16344
16238
  const [clipboard, setClipboard] = (0, react.useState)(null);
16345
- /** Copy for the share dialog. */
16346
- const shareCopy = (0, react.useMemo)(() => shareCopyFor(props.locale), [props.locale]);
16347
16239
  /**
16348
16240
  * The directory a paste would land in for one row.
16349
16241
  *
16350
16242
  * A folder pastes into itself; a file pastes beside itself. `''` is the tree root,
16351
16243
  * which is a real destination rather than "unknown".
16352
16244
  */
16353
- const pasteTargetFor = (0, react.useCallback)((relPath, isDir) => {
16354
- if (isDir) return relPath;
16355
- const cut = relPath.lastIndexOf("/");
16356
- return cut === -1 ? "" : relPath.slice(0, cut);
16357
- }, []);
16358
16245
  /**
16359
16246
  * The rows the batch bar acts on.
16360
16247
  *
@@ -16892,18 +16779,7 @@ window.__ModuleLoader__.load({
16892
16779
  setRefreshTick((t) => t + 1);
16893
16780
  },
16894
16781
  isFavorite: favorites.has,
16895
- favoriteMarkLabel: t("favoriteMark"),
16896
- onRowContextMenu: (relPath, isDir, at, selection) => {
16897
- setTreeMenu({
16898
- target: {
16899
- relPath,
16900
- name: relPath.split("/").pop() ?? relPath,
16901
- isDir
16902
- },
16903
- at,
16904
- selection
16905
- });
16906
- }
16782
+ favoriteMarkLabel: t("favoriteMark")
16907
16783
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KnowledgeListing, {
16908
16784
  t,
16909
16785
  locale: props.locale,
@@ -16943,44 +16819,6 @@ window.__ModuleLoader__.load({
16943
16819
  children: t("actionNew")
16944
16820
  })
16945
16821
  }),
16946
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KnowledgeContextMenu, {
16947
- target: treeMenu?.target ?? null,
16948
- at: treeMenu?.at ?? null,
16949
- t,
16950
- shareCopy,
16951
- pinned: treeMenu === null ? false : pins.has(treeMenu.target.relPath),
16952
- favorite: treeMenu === null ? false : favorites.has(treeMenu.target.relPath),
16953
- clipboard,
16954
- pasteInto: treeMenu === null ? null : pasteTargetFor(treeMenu.target.relPath, treeMenu.target.isDir),
16955
- onClose: () => {
16956
- setTreeMenu(null);
16957
- },
16958
- onGrant: (path) => {
16959
- openPermissions(path);
16960
- },
16961
- onPin: (path, pinned) => {
16962
- pins.setPinned(path, pinned);
16963
- },
16964
- onFavorite: (path, favorite) => {
16965
- favorites.setFavorite(path, favorite);
16966
- },
16967
- onReference: (path, isDir) => {
16968
- askReferenceTarget(path, isDir);
16969
- },
16970
- onClipboard: (entry) => {
16971
- setClipboard(entry);
16972
- },
16973
- onRenamed: () => {
16974
- setRefreshTick((t) => t + 1);
16975
- },
16976
- onDeleted: () => {
16977
- setRefreshTick((t) => t + 1);
16978
- },
16979
- onMoved: () => {
16980
- setClipboard((current) => current?.cut === true ? null : current);
16981
- setRefreshTick((t) => t + 1);
16982
- }
16983
- }),
16984
16822
  selectedPaths.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KnowledgeSelectionBar, {
16985
16823
  t,
16986
16824
  count: selectedPaths.length,
@@ -16993,6 +16831,76 @@ window.__ModuleLoader__.load({
16993
16831
  for (const path of selectedPaths) pins.setPinned(path, true);
16994
16832
  setSelectedPaths([]);
16995
16833
  },
16834
+ allPinned: selectedPaths.length > 0 && selectedPaths.every((path) => pins.has(path)),
16835
+ onShare: () => {
16836
+ const first = selectedPaths[0];
16837
+ if (first !== void 0) openPermissions(first);
16838
+ },
16839
+ allFavorite: selectedPaths.length > 0 && selectedPaths.every((path) => favorites.has(path)),
16840
+ onFavorite: () => {
16841
+ const all = selectedPaths.every((path) => favorites.has(path));
16842
+ for (const path of selectedPaths) favorites.setFavorite(path, !all);
16843
+ setSelectedPaths([]);
16844
+ },
16845
+ onReference: () => {
16846
+ const first = selectedPaths[0];
16847
+ if (first === void 0) return;
16848
+ askReferenceTarget(first, false, selectedPaths.map((path) => ({
16849
+ relPath: path,
16850
+ isDir: false
16851
+ })));
16852
+ },
16853
+ onPermissions: () => {
16854
+ const first = selectedPaths[0];
16855
+ if (first !== void 0) openPermissions(first);
16856
+ },
16857
+ onCut: () => {
16858
+ setClipboard({
16859
+ entries: selectedPaths.map((path) => ({
16860
+ relPath: path,
16861
+ name: path.split("/").pop() ?? path
16862
+ })),
16863
+ cut: true
16864
+ });
16865
+ setSelectedPaths([]);
16866
+ },
16867
+ onPaste: () => {
16868
+ const first = selectedPaths[0];
16869
+ if (first === void 0) return;
16870
+ const cut = first.lastIndexOf("/");
16871
+ const into = cut === -1 ? "" : first.slice(0, cut);
16872
+ const clip = clipboard;
16873
+ if (clip === null) return;
16874
+ (async () => {
16875
+ setBatchBusy(true);
16876
+ try {
16877
+ for (const entry of clip.entries) {
16878
+ const response = await fetch(kbApiPath(clip.cut ? KB_API.move : KB_API.copy), {
16879
+ method: "POST",
16880
+ headers: { "content-type": "application/json" },
16881
+ body: JSON.stringify({
16882
+ from: entry.relPath,
16883
+ to: into
16884
+ }),
16885
+ cache: "no-store"
16886
+ });
16887
+ if (!response.ok) {
16888
+ const body = await response.json().catch(() => ({}));
16889
+ throw new Error(body.error ?? "HTTP " + String(response.status));
16890
+ }
16891
+ }
16892
+ if (clip.cut) setClipboard(null);
16893
+ setSelectedPaths([]);
16894
+ setRefreshTick((t) => t + 1);
16895
+ } catch (failure) {
16896
+ setBatchError(t("moveFailed").replace("{reason}", failure instanceof Error ? failure.message : String(failure)));
16897
+ setRefreshTick((t) => t + 1);
16898
+ } finally {
16899
+ setBatchBusy(false);
16900
+ }
16901
+ })();
16902
+ },
16903
+ canPaste: clipboard !== null && selectedPaths.length > 0,
16996
16904
  onClear: () => {
16997
16905
  setSelectedPaths([]);
16998
16906
  }
@@ -17093,7 +17001,8 @@ window.__ModuleLoader__.load({
17093
17001
  },
17094
17002
  callerId: state.kind === "ready" ? state.status.caller?.userId : void 0,
17095
17003
  departmentCode: state.kind === "ready" ? state.status.caller?.departmentCode : void 0,
17096
- departmentName: state.kind === "ready" ? state.status.caller?.departmentName : void 0
17004
+ departmentName: state.kind === "ready" ? state.status.caller?.departmentName : void 0,
17005
+ canManageGrants: state.kind === "ready" ? state.status.canManageGrants === true : false
17097
17006
  }),
17098
17007
  rendered.kind === "trash" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KnowledgeTrash, { t }),
17099
17008
  rendered.kind === "audit" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KnowledgeAudit, { t }),
@@ -17570,6 +17479,7 @@ window.__ModuleLoader__.load({
17570
17479
  "step.sshfs-mount": "Mount the share over SSHFS",
17571
17480
  "step.sshfs-verify": "Verify the SSHFS mount",
17572
17481
  deployLocalOnly: "Deployment steps run on a remote host. This workspace stores documents locally, so there is nothing to deploy.",
17482
+ shareEmpty: "Nothing has been shared yet.",
17573
17483
  shareGroupReceived: "Inbound",
17574
17484
  shareGroupGiven: "Outbound",
17575
17485
  shareColRelation: "Sharing",
@@ -18064,6 +17974,7 @@ window.__ModuleLoader__.load({
18064
17974
  "step.sshfs-mount": "通过 SSHFS 挂载共享目录",
18065
17975
  "step.sshfs-verify": "验证 SSHFS 挂载",
18066
17976
  deployLocalOnly: "部署步骤在远程主机上执行。本工作区把文档保存在本地,没有需要部署的内容。",
17977
+ shareEmpty: "还没有任何共享内容。",
18067
17978
  shareGroupReceived: "共享给我的",
18068
17979
  shareGroupGiven: "我分享出去的",
18069
17980
  shareColRelation: "共享关系",