@linxin666/dsh-client-ui-task-board 0.1.12 → 0.1.14

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
@@ -290,6 +290,11 @@ window.__ModuleLoader__.load({
290
290
  start() {
291
291
  this.tasks = this.deps.store.load();
292
292
  this.reconcileRunningTasks();
293
+ const unsubscribeExternal = this.deps.store.subscribeExternal?.(() => {
294
+ this.tasks = this.deps.store.load();
295
+ this.notify();
296
+ });
297
+ if (unsubscribeExternal !== void 0) this.disposers.push(unsubscribeExternal);
293
298
  this.disposers.push(this.deps.sessions.list.subscribe(() => {
294
299
  this.onSessionsChanged();
295
300
  }));
@@ -487,16 +492,18 @@ window.__ModuleLoader__.load({
487
492
  if (execution !== void 0 && this.activeExecutionIds.has(execution.id)) continue;
488
493
  const event = await this.deps.exec.reconcile(task);
489
494
  if (event !== void 0 && event.kind === "settled") events.push({
490
- task,
495
+ taskId: task.id,
491
496
  event
492
497
  });
493
498
  }
494
499
  if (events.length === 0) return;
495
500
  let changed = false;
496
- for (const { task, event } of events) {
501
+ for (const { taskId, event } of events) {
502
+ const task = this.tasks.find((candidate) => candidate.id === taskId);
503
+ if (task === void 0) continue;
497
504
  const next = settleExecution(task, event.executionId, event.outcome, this.now(), event.error);
498
505
  if (next === task) continue;
499
- this.tasks = this.tasks.map((candidate) => candidate.id === task.id ? next : candidate);
506
+ this.tasks = this.tasks.map((candidate) => candidate.id === taskId ? next : candidate);
500
507
  changed = true;
501
508
  }
502
509
  if (changed) this.persistAndNotify();
@@ -889,13 +896,18 @@ window.__ModuleLoader__.load({
889
896
  var LocalStorageTaskStore = class {
890
897
  key;
891
898
  storage;
899
+ events;
892
900
  /**
893
901
  * @param key - storage key for the ledger document.
894
902
  * @param storage - storage backend (defaults to the global localStorage; tests inject fakes).
903
+ * @param events - storage-event target for cross-tab notifications (defaults
904
+ * to the browser global; undefined in non-browser runtimes, where the
905
+ * subscription becomes a no-op).
895
906
  */
896
- constructor(key = DEFAULT_STORAGE_KEY, storage = globalThis.localStorage) {
907
+ constructor(key = DEFAULT_STORAGE_KEY, storage = globalThis.localStorage, events = typeof globalThis.addEventListener === "function" ? globalThis : void 0) {
897
908
  this.key = key;
898
909
  this.storage = storage;
910
+ this.events = events;
899
911
  }
900
912
  load() {
901
913
  if (this.storage === void 0) return [];
@@ -922,8 +934,42 @@ window.__ModuleLoader__.load({
922
934
  console.error("[dsh-task-board] task ledger clear failed", error);
923
935
  }
924
936
  }
937
+ /**
938
+ * Cross-tab change subscription (see {@link TaskStore.subscribeExternal}).
939
+ * The browser fires the storage event in every OTHER tab of the same origin
940
+ * when one tab writes; a null key means the whole storage was cleared. Both
941
+ * cases reload the ledger here; unrelated keys are ignored.
942
+ */
943
+ subscribeExternal(listener) {
944
+ if (this.events === void 0) return () => {};
945
+ const onStorage = (event) => {
946
+ if (event.key !== null && event.key !== this.key) return;
947
+ listener();
948
+ };
949
+ this.events.addEventListener("storage", onStorage);
950
+ return () => {
951
+ this.events?.removeEventListener("storage", onStorage);
952
+ };
953
+ }
925
954
  };
926
955
  //#endregion
956
+ //#region src/client/apply-guard.ts
957
+ /** Claims the plugin apply slot. Returns true when this call won the slot. */
958
+ function claimTaskboardApply() {
959
+ if (globalThis.__dshTaskboardApplied === true) return false;
960
+ globalThis.__dshTaskboardApplied = true;
961
+ return true;
962
+ }
963
+ /**
964
+ * Releases the claim. Called from the client fiber cleanup so that a
965
+ * hot-reloaded bundle (the loader unloads the old plugin fiber and invokes
966
+ * the rebuilt one in the same page) can claim again instead of being
967
+ * silently dropped.
968
+ */
969
+ function releaseTaskboardApply() {
970
+ globalThis.__dshTaskboardApplied = void 0;
971
+ }
972
+ //#endregion
927
973
  //#region src/client/locales.ts
928
974
  /**
929
975
  * Task-board copy: zh-first dictionaries with an English fallback, selected
@@ -1122,8 +1168,8 @@ window.__ModuleLoader__.load({
1122
1168
  return text;
1123
1169
  }
1124
1170
  //#endregion
1125
- //#region \0dsh-css:/home/runner/work/dsh-web-ui/dsh-web-ui/packages/dsh-task-board/src/client/board.module.css.mjs
1126
- const css$1 = "[data-pane=conversation]{position:relative}[data-dsh-taskboard-view]{z-index:60;background:var(--dsw-alias-bg-base);display:none;position:absolute;inset:0}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-dsh-taskboard-view]{display:block}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-taskboard-view]),html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-taskboard-view]){display:none!important}.tHOVBW_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.tHOVBW_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}.tHOVBW_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}.tHOVBW_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.tHOVBW_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] .tHOVBW_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .tHOVBW_entryLabel{display:none}.tHOVBW_board{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:12px;padding:14px 16px 16px;display:flex}.tHOVBW_boardHeader{flex:none;align-items:center;gap:10px;display:flex}.tHOVBW_boardTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}.tHOVBW_search{min-width:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:0 260px;padding:6px 10px;font-size:13px}.tHOVBW_search::placeholder{color:var(--dsw-alias-label-tertiary)}.tHOVBW_columns{flex:1;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;min-height:0;display:grid}.tHOVBW_column{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}.tHOVBW_columnHeader{flex:none;align-items:center;gap:6px;padding:10px 12px;display:flex}.tHOVBW_columnTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;margin:0;font-size:13px;font-weight:700;overflow:hidden}.tHOVBW_columnCount{min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:1px 8px;font-size:12px}.tHOVBW_statusDot{border-radius:50%;flex:none;width:8px;height:8px}.tHOVBW_statusDot[data-status=backlog]{background:var(--dsw-alias-label-tertiary)}.tHOVBW_statusDot[data-status=todo]{background:var(--dsw-alias-state-business-primary)}.tHOVBW_statusDot[data-status=running]{background:var(--dsw-alias-state-warn-primary)}.tHOVBW_statusDot[data-status=done]{background:var(--dsw-alias-state-success-primary)}.tHOVBW_statusDot[data-status=failed]{background:var(--dsw-alias-state-error-primary)}.tHOVBW_cards{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px 8px 10px;display:flex;overflow-y:auto}.tHOVBW_columnEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:24px 8px;font-size:12px}.tHOVBW_card{text-align:left;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;color:var(--dsw-alias-label-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;font-family:inherit;transition:box-shadow .12s,border-color .12s,transform .12s;display:flex}.tHOVBW_card:hover{box-shadow:var(--dsw-shadow-lv2);border-color:var(--dsw-alias-border-l3);transform:translateY(-1px)}.tHOVBW_card[data-status=running]{border-color:var(--dsw-alias-state-warn-primary)}.tHOVBW_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.tHOVBW_cardExcerpt{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.tHOVBW_cardMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;font-size:11px;display:flex}.tHOVBW_cardTime{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tHOVBW_cardSchedule{white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:1}.tHOVBW_cardRun{flex:none}.tHOVBW_cardRun[data-result=failed]{color:var(--dsw-alias-state-error-primary)}.tHOVBW_cardRun[data-result=succeeded]{color:var(--dsw-alias-state-success-primary)}.tHOVBW_cardSession{color:var(--dsw-alias-state-business-primary);flex:none}.tHOVBW_cardRunningLabel{color:var(--dsw-alias-state-warn-primary);font-size:11px}.tHOVBW_cardSpinner{border:2px solid var(--dsw-alias-state-warn-primary);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite tHOVBW_dshTbSpin}@keyframes tHOVBW_dshTbSpin{to{transform:rotate(360deg)}}.tHOVBW_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}.tHOVBW_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.tHOVBW_primaryButton:disabled{opacity:.5;cursor:default}.tHOVBW_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}.tHOVBW_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.tHOVBW_ghostButton:disabled{opacity:.45;cursor:default}.tHOVBW_dangerButton{color:#fff;background:var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}.tHOVBW_dangerButton:hover:not(:disabled){filter:brightness(1.08)}.tHOVBW_dangerButton:active:not(:disabled){filter:brightness(.94)}.tHOVBW_dangerButton:disabled{opacity:.5;cursor:default}.tHOVBW_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}.tHOVBW_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.tHOVBW_linkButton{color:var(--dsw-alias-state-business-primary);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:12px}.tHOVBW_linkButton:hover{text-decoration:underline}.tHOVBW_modalBackdrop{z-index:1300;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.tHOVBW_modal{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(520px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;gap:12px;padding:18px;display:flex;overflow-y:auto}.tHOVBW_modalTitle{margin:0;font-size:15px;font-weight:700}.tHOVBW_confirmMessage{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}.tHOVBW_modalFooter{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}.tHOVBW_field{flex-direction:column;gap:5px;display:flex}.tHOVBW_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.tHOVBW_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}.tHOVBW_input:focus{border-color:var(--dsw-alias-state-business-primary)}.tHOVBW_input::placeholder{color:var(--dsw-alias-label-tertiary)}.tHOVBW_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}.tHOVBW_detail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(640px,100vw - 48px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.tHOVBW_detailHeader{border-bottom:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:14px 18px;display:flex}.tHOVBW_detailTitle{overflow-wrap:anywhere;flex:1;margin:0;font-size:15px;font-weight:700}.tHOVBW_statusBadge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:2px 10px;font-size:12px}.tHOVBW_statusBadge[data-status=running]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}.tHOVBW_statusBadge[data-status=done]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.tHOVBW_statusBadge[data-status=failed]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}.tHOVBW_detailBody{flex-direction:column;flex:1;gap:16px;padding:14px 18px;display:flex;overflow-y:auto}.tHOVBW_detailSection{flex-direction:column;gap:6px;display:flex}.tHOVBW_detailSection h4{color:var(--dsw-alias-label-tertiary);text-transform:none;margin:0;font-size:12px;font-weight:700}.tHOVBW_detailText{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.55}.tHOVBW_scheduleToggle{color:var(--dsw-alias-label-primary);cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}.tHOVBW_scheduleToggle input{accent-color:var(--dsw-alias-state-business-primary)}.tHOVBW_scheduleRow{align-items:center;gap:8px;display:flex}.tHOVBW_scheduleInput{min-width:0;font-family:var(--dsw-font-markdown-code-block-small);flex:1;font-size:12.5px}.tHOVBW_scheduleInputInvalid,.tHOVBW_scheduleInputInvalid:focus{border-color:var(--dsw-alias-state-error-primary)}.tHOVBW_schedulePreset{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:none;padding:7px 8px;font-size:12.5px}.tHOVBW_scheduleMeta{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px}.tHOVBW_promptBlock{font-size:12.5px;line-height:1.5;font-family:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border:1px solid var(--dsw-alias-border-l1);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;max-height:240px;margin:0;padding:10px 12px;overflow-y:auto}.tHOVBW_executionList{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.tHOVBW_executionRow{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}.tHOVBW_executionBadge{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:600}.tHOVBW_executionBadge[data-result=succeeded]{color:var(--dsw-alias-state-success-primary);background:0 0}.tHOVBW_executionBadge[data-result=failed]{color:var(--dsw-alias-state-error-primary);background:0 0}.tHOVBW_executionBadge[data-result=cancelled]{color:var(--dsw-alias-label-tertiary);background:0 0}.tHOVBW_executionTimes{color:var(--dsw-alias-label-secondary);font-size:12px}.tHOVBW_executionError{width:100%;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;font-size:12px}.tHOVBW_moveRow{flex-wrap:wrap;gap:8px;display:flex}.tHOVBW_detailFooter{border-top:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex}.tHOVBW_detailMeta{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}.tHOVBW_entry:focus-visible,.tHOVBW_card:focus-visible,.tHOVBW_primaryButton:focus-visible,.tHOVBW_ghostButton:focus-visible,.tHOVBW_dangerButton:focus-visible,.tHOVBW_iconButton:focus-visible,.tHOVBW_linkButton:focus-visible,.tHOVBW_search:focus-visible,.tHOVBW_input:focus-visible,.tHOVBW_schedulePreset:focus-visible,.tHOVBW_scheduleToggle input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.tHOVBW_entry,.tHOVBW_primaryButton,.tHOVBW_ghostButton,.tHOVBW_dangerButton,.tHOVBW_iconButton,.tHOVBW_linkButton,.tHOVBW_search,.tHOVBW_input,.tHOVBW_schedulePreset,.tHOVBW_scheduleToggle input{transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}.tHOVBW_card:active{box-shadow:var(--dsw-shadow-lv1);transform:translateY(0)}.tHOVBW_entry:active,.tHOVBW_primaryButton:active:not(:disabled),.tHOVBW_ghostButton:active:not(:disabled),.tHOVBW_dangerButton:active:not(:disabled),.tHOVBW_iconButton:active:not(:disabled),.tHOVBW_linkButton:active:not(:disabled){transform:translateY(1px)}.tHOVBW_entry[data-active]:hover{background:var(--dsw-specific-sidebar-nav-item-active)}.tHOVBW_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.tHOVBW_linkButton:hover:not(:disabled){text-decoration:underline}.tHOVBW_iconButton:disabled,.tHOVBW_linkButton:disabled{opacity:.45;cursor:default}.tHOVBW_search:focus,.tHOVBW_schedulePreset:focus{border-color:var(--dsw-alias-state-business-primary)}.tHOVBW_scheduleToggle input{margin:0}@media (prefers-reduced-motion:reduce){.tHOVBW_entry,.tHOVBW_card,.tHOVBW_primaryButton,.tHOVBW_ghostButton,.tHOVBW_dangerButton,.tHOVBW_iconButton,.tHOVBW_linkButton,.tHOVBW_search,.tHOVBW_input,.tHOVBW_schedulePreset,.tHOVBW_scheduleToggle input{transition:none}.tHOVBW_cardSpinner{animation:none}}";
1171
+ //#region \0dsh-css:packages/dsh-task-board/src/client/board.module.css.mjs
1172
+ const css$1 = "[data-pane=conversation],[class*=centerCol]{position:relative}[data-dsh-taskboard-view]{z-index:60;background:var(--dsw-alias-bg-base);display:none;position:absolute;inset:0}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-dsh-taskboard-view]{display:block}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-taskboard-view]),html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-taskboard-view]){display:none!important}._7D6uKa_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}._7D6uKa_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}._7D6uKa_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}._7D6uKa_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryLabel{display:none}._7D6uKa_board{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:12px;padding:14px 16px 16px;display:flex}._7D6uKa_boardHeader{flex:none;align-items:center;gap:10px;display:flex}._7D6uKa_boardTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}._7D6uKa_search{min-width:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:0 260px;padding:6px 10px;font-size:13px}._7D6uKa_search::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_columns{flex:1;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;min-height:0;display:grid}._7D6uKa_column{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}._7D6uKa_columnHeader{flex:none;align-items:center;gap:6px;padding:10px 12px;display:flex}._7D6uKa_columnTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;margin:0;font-size:13px;font-weight:700;overflow:hidden}._7D6uKa_columnCount{min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:1px 8px;font-size:12px}._7D6uKa_statusDot{border-radius:50%;flex:none;width:8px;height:8px}._7D6uKa_statusDot[data-status=backlog]{background:var(--dsw-alias-label-tertiary)}._7D6uKa_statusDot[data-status=todo]{background:var(--dsw-alias-state-business-primary)}._7D6uKa_statusDot[data-status=running]{background:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusDot[data-status=done]{background:var(--dsw-alias-state-success-primary)}._7D6uKa_statusDot[data-status=failed]{background:var(--dsw-alias-state-error-primary)}._7D6uKa_cards{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px 8px 10px;display:flex;overflow-y:auto}._7D6uKa_columnEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:24px 8px;font-size:12px}._7D6uKa_card{text-align:left;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;color:var(--dsw-alias-label-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;font-family:inherit;transition:box-shadow .12s,border-color .12s,transform .12s;display:flex}._7D6uKa_card:hover{box-shadow:var(--dsw-shadow-lv2);border-color:var(--dsw-alias-border-l3);transform:translateY(-1px)}._7D6uKa_card[data-status=running]{border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}._7D6uKa_cardExcerpt{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}._7D6uKa_cardMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;font-size:11px;display:flex}._7D6uKa_cardTime{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._7D6uKa_cardSchedule{white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:1}._7D6uKa_cardRun{flex:none}._7D6uKa_cardRun[data-result=failed]{color:var(--dsw-alias-state-error-primary)}._7D6uKa_cardRun[data-result=succeeded]{color:var(--dsw-alias-state-success-primary)}._7D6uKa_cardSession{color:var(--dsw-alias-state-business-primary);flex:none}._7D6uKa_cardRunningLabel{color:var(--dsw-alias-state-warn-primary);font-size:11px}._7D6uKa_cardSpinner{border:2px solid var(--dsw-alias-state-warn-primary);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite _7D6uKa_dshTbSpin}@keyframes _7D6uKa_dshTbSpin{to{transform:rotate(360deg)}}._7D6uKa_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7D6uKa_primaryButton:disabled{opacity:.5;cursor:default}._7D6uKa_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._7D6uKa_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7D6uKa_ghostButton:disabled{opacity:.45;cursor:default}._7D6uKa_dangerButton{color:#fff;background:var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_dangerButton:hover:not(:disabled){filter:brightness(1.08)}._7D6uKa_dangerButton:active:not(:disabled){filter:brightness(.94)}._7D6uKa_dangerButton:disabled{opacity:.5;cursor:default}._7D6uKa_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._7D6uKa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton{color:var(--dsw-alias-state-business-primary);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:12px}._7D6uKa_linkButton:hover{text-decoration:underline}._7D6uKa_modalBackdrop{z-index:1300;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._7D6uKa_modal{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(520px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;gap:12px;padding:18px;display:flex;overflow-y:auto}._7D6uKa_modalTitle{margin:0;font-size:15px;font-weight:700}._7D6uKa_confirmMessage{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}._7D6uKa_modalFooter{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}._7D6uKa_field{flex-direction:column;gap:5px;display:flex}._7D6uKa_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._7D6uKa_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_input::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._7D6uKa_detail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(640px,100vw - 48px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}._7D6uKa_detailHeader{border-bottom:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:14px 18px;display:flex}._7D6uKa_detailTitle{overflow-wrap:anywhere;flex:1;margin:0;font-size:15px;font-weight:700}._7D6uKa_statusBadge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:2px 10px;font-size:12px}._7D6uKa_statusBadge[data-status=running]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusBadge[data-status=done]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._7D6uKa_statusBadge[data-status=failed]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_detailBody{flex-direction:column;flex:1;gap:16px;padding:14px 18px;display:flex;overflow-y:auto}._7D6uKa_detailSection{flex-direction:column;gap:6px;display:flex}._7D6uKa_detailSection h4{color:var(--dsw-alias-label-tertiary);text-transform:none;margin:0;font-size:12px;font-weight:700}._7D6uKa_detailText{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.55}._7D6uKa_scheduleToggle{color:var(--dsw-alias-label-primary);cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}._7D6uKa_scheduleToggle input{accent-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleRow{align-items:center;gap:8px;display:flex}._7D6uKa_scheduleInput{min-width:0;font-family:var(--dsw-font-markdown-code-block-small);flex:1;font-size:12.5px}._7D6uKa_scheduleInputInvalid,._7D6uKa_scheduleInputInvalid:focus{border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_schedulePreset{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:none;padding:7px 8px;font-size:12.5px}._7D6uKa_scheduleMeta{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px}._7D6uKa_promptBlock{font-size:12.5px;line-height:1.5;font-family:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border:1px solid var(--dsw-alias-border-l1);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;max-height:240px;margin:0;padding:10px 12px;overflow-y:auto}._7D6uKa_executionList{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}._7D6uKa_executionRow{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}._7D6uKa_executionBadge{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:600}._7D6uKa_executionBadge[data-result=succeeded]{color:var(--dsw-alias-state-success-primary);background:0 0}._7D6uKa_executionBadge[data-result=failed]{color:var(--dsw-alias-state-error-primary);background:0 0}._7D6uKa_executionBadge[data-result=cancelled]{color:var(--dsw-alias-label-tertiary);background:0 0}._7D6uKa_executionTimes{color:var(--dsw-alias-label-secondary);font-size:12px}._7D6uKa_executionError{width:100%;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;font-size:12px}._7D6uKa_moveRow{flex-wrap:wrap;gap:8px;display:flex}._7D6uKa_detailFooter{border-top:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex}._7D6uKa_detailMeta{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}._7D6uKa_entry:focus-visible,._7D6uKa_card:focus-visible,._7D6uKa_primaryButton:focus-visible,._7D6uKa_ghostButton:focus-visible,._7D6uKa_dangerButton:focus-visible,._7D6uKa_iconButton:focus-visible,._7D6uKa_linkButton:focus-visible,._7D6uKa_search:focus-visible,._7D6uKa_input:focus-visible,._7D6uKa_schedulePreset:focus-visible,._7D6uKa_scheduleToggle input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._7D6uKa_entry,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._7D6uKa_card:active{box-shadow:var(--dsw-shadow-lv1);transform:translateY(0)}._7D6uKa_entry:active,._7D6uKa_primaryButton:active:not(:disabled),._7D6uKa_ghostButton:active:not(:disabled),._7D6uKa_dangerButton:active:not(:disabled),._7D6uKa_iconButton:active:not(:disabled),._7D6uKa_linkButton:active:not(:disabled){transform:translateY(1px)}._7D6uKa_entry[data-active]:hover{background:var(--dsw-specific-sidebar-nav-item-active)}._7D6uKa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton:hover:not(:disabled){text-decoration:underline}._7D6uKa_iconButton:disabled,._7D6uKa_linkButton:disabled{opacity:.45;cursor:default}._7D6uKa_search:focus,._7D6uKa_schedulePreset:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleToggle input{margin:0}@media (prefers-reduced-motion:reduce){._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:none}._7D6uKa_cardSpinner{animation:none}}";
1127
1173
  const tagId$1 = "@linxin666/dsh-client-ui-task-board/board.module.css";
1128
1174
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
1129
1175
  const tag = document.createElement("style");
@@ -1133,68 +1179,68 @@ window.__ModuleLoader__.load({
1133
1179
  document.head.appendChild(tag);
1134
1180
  }
1135
1181
  var board_module_css_default = {
1136
- "board": "tHOVBW_board",
1137
- "boardHeader": "tHOVBW_boardHeader",
1138
- "boardTitle": "tHOVBW_boardTitle",
1139
- "card": "tHOVBW_card",
1140
- "cardExcerpt": "tHOVBW_cardExcerpt",
1141
- "cardMeta": "tHOVBW_cardMeta",
1142
- "cardRun": "tHOVBW_cardRun",
1143
- "cardRunningLabel": "tHOVBW_cardRunningLabel",
1144
- "cardSchedule": "tHOVBW_cardSchedule",
1145
- "cardSession": "tHOVBW_cardSession",
1146
- "cardSpinner": "tHOVBW_cardSpinner",
1147
- "cardTime": "tHOVBW_cardTime",
1148
- "cardTitle": "tHOVBW_cardTitle",
1149
- "cards": "tHOVBW_cards",
1150
- "column": "tHOVBW_column",
1151
- "columnCount": "tHOVBW_columnCount",
1152
- "columnEmpty": "tHOVBW_columnEmpty",
1153
- "columnHeader": "tHOVBW_columnHeader",
1154
- "columnTitle": "tHOVBW_columnTitle",
1155
- "columns": "tHOVBW_columns",
1156
- "confirmMessage": "tHOVBW_confirmMessage",
1157
- "dangerButton": "tHOVBW_dangerButton",
1158
- "detail": "tHOVBW_detail",
1159
- "detailBody": "tHOVBW_detailBody",
1160
- "detailFooter": "tHOVBW_detailFooter",
1161
- "detailHeader": "tHOVBW_detailHeader",
1162
- "detailMeta": "tHOVBW_detailMeta",
1163
- "detailSection": "tHOVBW_detailSection",
1164
- "detailText": "tHOVBW_detailText",
1165
- "detailTitle": "tHOVBW_detailTitle",
1166
- "dshTbSpin": "tHOVBW_dshTbSpin",
1167
- "entry": "tHOVBW_entry",
1168
- "entryIcon": "tHOVBW_entryIcon",
1169
- "entryLabel": "tHOVBW_entryLabel",
1170
- "executionBadge": "tHOVBW_executionBadge",
1171
- "executionError": "tHOVBW_executionError",
1172
- "executionList": "tHOVBW_executionList",
1173
- "executionRow": "tHOVBW_executionRow",
1174
- "executionTimes": "tHOVBW_executionTimes",
1175
- "field": "tHOVBW_field",
1176
- "fieldLabel": "tHOVBW_fieldLabel",
1177
- "formError": "tHOVBW_formError",
1178
- "ghostButton": "tHOVBW_ghostButton",
1179
- "iconButton": "tHOVBW_iconButton",
1180
- "input": "tHOVBW_input",
1181
- "linkButton": "tHOVBW_linkButton",
1182
- "modal": "tHOVBW_modal",
1183
- "modalBackdrop": "tHOVBW_modalBackdrop",
1184
- "modalFooter": "tHOVBW_modalFooter",
1185
- "modalTitle": "tHOVBW_modalTitle",
1186
- "moveRow": "tHOVBW_moveRow",
1187
- "primaryButton": "tHOVBW_primaryButton",
1188
- "promptBlock": "tHOVBW_promptBlock",
1189
- "scheduleInput": "tHOVBW_scheduleInput",
1190
- "scheduleInputInvalid": "tHOVBW_scheduleInputInvalid",
1191
- "scheduleMeta": "tHOVBW_scheduleMeta",
1192
- "schedulePreset": "tHOVBW_schedulePreset",
1193
- "scheduleRow": "tHOVBW_scheduleRow",
1194
- "scheduleToggle": "tHOVBW_scheduleToggle",
1195
- "search": "tHOVBW_search",
1196
- "statusBadge": "tHOVBW_statusBadge",
1197
- "statusDot": "tHOVBW_statusDot"
1182
+ "board": "_7D6uKa_board",
1183
+ "boardHeader": "_7D6uKa_boardHeader",
1184
+ "boardTitle": "_7D6uKa_boardTitle",
1185
+ "card": "_7D6uKa_card",
1186
+ "cardExcerpt": "_7D6uKa_cardExcerpt",
1187
+ "cardMeta": "_7D6uKa_cardMeta",
1188
+ "cardRun": "_7D6uKa_cardRun",
1189
+ "cardRunningLabel": "_7D6uKa_cardRunningLabel",
1190
+ "cardSchedule": "_7D6uKa_cardSchedule",
1191
+ "cardSession": "_7D6uKa_cardSession",
1192
+ "cardSpinner": "_7D6uKa_cardSpinner",
1193
+ "cardTime": "_7D6uKa_cardTime",
1194
+ "cardTitle": "_7D6uKa_cardTitle",
1195
+ "cards": "_7D6uKa_cards",
1196
+ "column": "_7D6uKa_column",
1197
+ "columnCount": "_7D6uKa_columnCount",
1198
+ "columnEmpty": "_7D6uKa_columnEmpty",
1199
+ "columnHeader": "_7D6uKa_columnHeader",
1200
+ "columnTitle": "_7D6uKa_columnTitle",
1201
+ "columns": "_7D6uKa_columns",
1202
+ "confirmMessage": "_7D6uKa_confirmMessage",
1203
+ "dangerButton": "_7D6uKa_dangerButton",
1204
+ "detail": "_7D6uKa_detail",
1205
+ "detailBody": "_7D6uKa_detailBody",
1206
+ "detailFooter": "_7D6uKa_detailFooter",
1207
+ "detailHeader": "_7D6uKa_detailHeader",
1208
+ "detailMeta": "_7D6uKa_detailMeta",
1209
+ "detailSection": "_7D6uKa_detailSection",
1210
+ "detailText": "_7D6uKa_detailText",
1211
+ "detailTitle": "_7D6uKa_detailTitle",
1212
+ "dshTbSpin": "_7D6uKa_dshTbSpin",
1213
+ "entry": "_7D6uKa_entry",
1214
+ "entryIcon": "_7D6uKa_entryIcon",
1215
+ "entryLabel": "_7D6uKa_entryLabel",
1216
+ "executionBadge": "_7D6uKa_executionBadge",
1217
+ "executionError": "_7D6uKa_executionError",
1218
+ "executionList": "_7D6uKa_executionList",
1219
+ "executionRow": "_7D6uKa_executionRow",
1220
+ "executionTimes": "_7D6uKa_executionTimes",
1221
+ "field": "_7D6uKa_field",
1222
+ "fieldLabel": "_7D6uKa_fieldLabel",
1223
+ "formError": "_7D6uKa_formError",
1224
+ "ghostButton": "_7D6uKa_ghostButton",
1225
+ "iconButton": "_7D6uKa_iconButton",
1226
+ "input": "_7D6uKa_input",
1227
+ "linkButton": "_7D6uKa_linkButton",
1228
+ "modal": "_7D6uKa_modal",
1229
+ "modalBackdrop": "_7D6uKa_modalBackdrop",
1230
+ "modalFooter": "_7D6uKa_modalFooter",
1231
+ "modalTitle": "_7D6uKa_modalTitle",
1232
+ "moveRow": "_7D6uKa_moveRow",
1233
+ "primaryButton": "_7D6uKa_primaryButton",
1234
+ "promptBlock": "_7D6uKa_promptBlock",
1235
+ "scheduleInput": "_7D6uKa_scheduleInput",
1236
+ "scheduleInputInvalid": "_7D6uKa_scheduleInputInvalid",
1237
+ "scheduleMeta": "_7D6uKa_scheduleMeta",
1238
+ "schedulePreset": "_7D6uKa_schedulePreset",
1239
+ "scheduleRow": "_7D6uKa_scheduleRow",
1240
+ "scheduleToggle": "_7D6uKa_scheduleToggle",
1241
+ "search": "_7D6uKa_search",
1242
+ "statusBadge": "_7D6uKa_statusBadge",
1243
+ "statusDot": "_7D6uKa_statusDot"
1198
1244
  };
1199
1245
  //#endregion
1200
1246
  //#region src/client/board/NewTaskModal.tsx
@@ -1886,13 +1932,16 @@ window.__ModuleLoader__.load({
1886
1932
  *
1887
1933
  * The `conversation` slot is single-occupant (ui-conversation) and external
1888
1934
  * plugins cannot declare slots, so the board takes over the center column at
1889
- * the DOM level: a container is appended inside the `[data-pane="conversation"]`
1890
- * grid item (an extra trailing child React never manages), and a stylesheet
1935
+ * the DOM level: a container is appended inside the center column
1936
+ * (`[class*="centerCol"]`, the dsh 0.1.0-rc.6 AppFrame layout; previously
1937
+ * `[data-pane="conversation"]` on older shells — the mount selector keeps both)
1938
+ * as an extra trailing child
1939
+ * React never manages, and a stylesheet
1891
1940
  * rule hides the conversation content while the board is active. Toggling is
1892
1941
  * a data attribute on <html> — no React involvement, so the conversation
1893
1942
  * subtree underneath stays mounted and stateful.
1894
1943
  */
1895
- const CONVERSATION_COLUMN_SELECTOR = "[data-pane=\"conversation\"]";
1944
+ const CONVERSATION_COLUMN_SELECTOR = "[data-pane=\"conversation\"], [class*=\"centerCol\"]";
1896
1945
  const ACTIVE_ATTR = "data-dsh-taskboard-active";
1897
1946
  /** The sibling panel's activation attribute (ssh), removed when this panel opens. */
1898
1947
  const OTHER_ACTIVE_ATTR = "data-dsh-ssh-active";
@@ -2013,6 +2062,7 @@ window.__ModuleLoader__.load({
2013
2062
  * @returns disposer removing the entry and its observers.
2014
2063
  */
2015
2064
  function mountSidebarEntry(controller) {
2065
+ if (typeof document !== "undefined" && document.querySelector("[data-dsh-taskboard-entry]") !== null) return () => {};
2016
2066
  const entry = createEntry(controller);
2017
2067
  let root;
2018
2068
  let placed = false;
@@ -2066,8 +2116,8 @@ window.__ModuleLoader__.load({
2066
2116
  };
2067
2117
  }
2068
2118
  //#endregion
2069
- //#region \0dsh-css:/home/runner/work/dsh-web-ui/dsh-web-ui/packages/dsh-task-board/src/client/settings-card.module.css.mjs
2070
- const css = ".aWNI2q_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;list-style:none;transition:border-color .16s,background .16s;overflow:hidden}.aWNI2q_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.aWNI2q_header{cursor:pointer;text-align:left;width:100%;font:inherit;background:0 0;border:0;align-items:center;gap:8px;padding:10px 14px;display:flex}.aWNI2q_header:hover{background:var(--dsw-alias-interactive-bg-hover)}.aWNI2q_headText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.aWNI2q_name{color:var(--dsw-alias-label-primary);font-weight:600}.aWNI2q_description{color:var(--dsw-alias-label-tertiary);font-size:12px}.aWNI2q_pending{color:var(--dsw-alias-state-warn-primary);font-size:12px}.aWNI2q_chevron{color:var(--dsw-alias-label-tertiary);transition:transform .12s}.aWNI2q_chevronOpen{transform:rotate(180deg)}.aWNI2q_body{flex-direction:column;gap:14px;padding:0 14px 14px;display:flex}.aWNI2q_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.aWNI2q_notExposed{color:var(--dsw-alias-state-warn-primary);margin:0;font-size:12px;line-height:1.5}.aWNI2q_footer{justify-content:flex-end;align-items:center;gap:8px;display:flex}.aWNI2q_failed{color:var(--dsw-alias-state-error-primary);margin:0 auto 0 0;font-size:12px}.aWNI2q_discard,.aWNI2q_save{font:inherit;cursor:pointer;border-radius:6px;padding:5px 12px;font-size:13px}.aWNI2q_discard{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.aWNI2q_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.aWNI2q_save{border:1px solid var(--dsw-alias-button-info-fill);background:var(--dsw-alias-button-info-fill);color:var(--dsw-alias-label-primary-foreground)}.aWNI2q_save:hover:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover)}.aWNI2q_discard:active:not(:disabled),.aWNI2q_save:active:not(:disabled){transform:translateY(1px)}.aWNI2q_discard:focus-visible:not(:disabled),.aWNI2q_save:focus-visible:not(:disabled){outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}.aWNI2q_discard:disabled,.aWNI2q_save:disabled{opacity:.5;cursor:default}.aWNI2q_field{flex-direction:column;gap:4px;display:flex}.aWNI2q_head{align-items:center;gap:8px;display:flex}.aWNI2q_label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500}.aWNI2q_badges{align-items:center;gap:6px;display:flex}.aWNI2q_badge{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-state-business-primary);border-radius:999px;padding:1px 6px;font-size:11px}.aWNI2q_reset{color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;padding:0;font-size:11px}.aWNI2q_reset:hover:not(:disabled){text-decoration:underline}.aWNI2q_reset:active:not(:disabled){opacity:.8;text-decoration:underline}.aWNI2q_reset:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}.aWNI2q_reset:disabled{opacity:.5;cursor:default}.aWNI2q_input,.aWNI2q_select{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:6px;padding:6px 8px;font-size:13px}.aWNI2q_inputInvalid{border:1px solid var(--dsw-alias-state-error-primary);font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;padding:6px 8px;font-size:13px}.aWNI2q_input:disabled,.aWNI2q_select:disabled{opacity:.6}.aWNI2q_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}.aWNI2q_invalid{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}.aWNI2q_header:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}.aWNI2q_header:active{background:var(--dsw-alias-interactive-bg-hover)}.aWNI2q_header,.aWNI2q_discard,.aWNI2q_save,.aWNI2q_reset{transition:background-color .12s,color .12s,border-color .12s,transform .12s}@media (prefers-reduced-motion:reduce){.aWNI2q_card,.aWNI2q_header,.aWNI2q_chevron,.aWNI2q_discard,.aWNI2q_save,.aWNI2q_reset{transition:none}}";
2119
+ //#region \0dsh-css:packages/dsh-task-board/src/client/settings-card.module.css.mjs
2120
+ const css = ".Jh0q7G_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.Jh0q7G_card:hover{border-color:var(--dsw-alias-label-dimmed)}.Jh0q7G_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.Jh0q7G_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.Jh0q7G_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.Jh0q7G_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.Jh0q7G_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.Jh0q7G_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.Jh0q7G_pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.Jh0q7G_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.Jh0q7G_chevronOpen{transform:rotate(180deg)}.Jh0q7G_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.Jh0q7G_readOnly{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}.Jh0q7G_notExposed{color:var(--dsw-alias-state-warn-primary);margin:12px 0 0;font-size:12px;line-height:1.5}.Jh0q7G_footer{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}.Jh0q7G_failed{min-width:0;color:var(--dsw-alias-label-error);flex:1;margin:0;font-size:12px;line-height:1.5}.Jh0q7G_discard,.Jh0q7G_save{appearance:none;font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.Jh0q7G_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.Jh0q7G_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.Jh0q7G_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.Jh0q7G_discard:disabled,.Jh0q7G_save:disabled{opacity:.4;cursor:default}.Jh0q7G_discard:focus-visible,.Jh0q7G_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Jh0q7G_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.Jh0q7G_field+.Jh0q7G_field{border-top:1px solid var(--dsw-alias-border-l2)}.Jh0q7G_head{align-items:center;gap:8px;display:flex}.Jh0q7G_label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.Jh0q7G_badges{align-items:center;gap:8px;display:inline-flex}.Jh0q7G_badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.Jh0q7G_reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.Jh0q7G_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.Jh0q7G_reset:disabled{cursor:default}.Jh0q7G_reset:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.Jh0q7G_input,.Jh0q7G_select{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}.Jh0q7G_input:focus-visible,.Jh0q7G_select:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.Jh0q7G_input:disabled,.Jh0q7G_select:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.Jh0q7G_inputInvalid{border:1px solid var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}.Jh0q7G_inputInvalid:focus-visible{outline:2px solid var(--dsw-alias-label-error);outline-offset:1px;border-color:var(--dsw-alias-label-error)}.Jh0q7G_invalid{color:var(--dsw-alias-label-error);margin:0;font-size:12px;line-height:1.5}.Jh0q7G_hint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:1.5}@media (prefers-reduced-motion:reduce){.Jh0q7G_card,.Jh0q7G_header,.Jh0q7G_chevron,.Jh0q7G_chevronOpen,.Jh0q7G_discard,.Jh0q7G_save{transition:none}}";
2071
2121
  const tagId = "@linxin666/dsh-client-ui-task-board/settings-card.module.css";
2072
2122
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
2073
2123
  const tag = document.createElement("style");
@@ -2077,33 +2127,33 @@ window.__ModuleLoader__.load({
2077
2127
  document.head.appendChild(tag);
2078
2128
  }
2079
2129
  var settings_card_module_css_default = {
2080
- "badge": "aWNI2q_badge",
2081
- "badges": "aWNI2q_badges",
2082
- "body": "aWNI2q_body",
2083
- "card": "aWNI2q_card",
2084
- "cardOpen": "aWNI2q_cardOpen",
2085
- "chevron": "aWNI2q_chevron",
2086
- "chevronOpen": "aWNI2q_chevronOpen",
2087
- "description": "aWNI2q_description",
2088
- "discard": "aWNI2q_discard",
2089
- "failed": "aWNI2q_failed",
2090
- "field": "aWNI2q_field",
2091
- "footer": "aWNI2q_footer",
2092
- "head": "aWNI2q_head",
2093
- "headText": "aWNI2q_headText",
2094
- "header": "aWNI2q_header",
2095
- "hint": "aWNI2q_hint",
2096
- "input": "aWNI2q_input",
2097
- "inputInvalid": "aWNI2q_inputInvalid",
2098
- "invalid": "aWNI2q_invalid",
2099
- "label": "aWNI2q_label",
2100
- "name": "aWNI2q_name",
2101
- "notExposed": "aWNI2q_notExposed",
2102
- "pending": "aWNI2q_pending",
2103
- "readOnly": "aWNI2q_readOnly",
2104
- "reset": "aWNI2q_reset",
2105
- "save": "aWNI2q_save",
2106
- "select": "aWNI2q_select"
2130
+ "badge": "Jh0q7G_badge",
2131
+ "badges": "Jh0q7G_badges",
2132
+ "body": "Jh0q7G_body",
2133
+ "card": "Jh0q7G_card",
2134
+ "cardOpen": "Jh0q7G_cardOpen",
2135
+ "chevron": "Jh0q7G_chevron",
2136
+ "chevronOpen": "Jh0q7G_chevronOpen",
2137
+ "description": "Jh0q7G_description",
2138
+ "discard": "Jh0q7G_discard",
2139
+ "failed": "Jh0q7G_failed",
2140
+ "field": "Jh0q7G_field",
2141
+ "footer": "Jh0q7G_footer",
2142
+ "head": "Jh0q7G_head",
2143
+ "headText": "Jh0q7G_headText",
2144
+ "header": "Jh0q7G_header",
2145
+ "hint": "Jh0q7G_hint",
2146
+ "input": "Jh0q7G_input",
2147
+ "inputInvalid": "Jh0q7G_inputInvalid",
2148
+ "invalid": "Jh0q7G_invalid",
2149
+ "label": "Jh0q7G_label",
2150
+ "name": "Jh0q7G_name",
2151
+ "notExposed": "Jh0q7G_notExposed",
2152
+ "pending": "Jh0q7G_pending",
2153
+ "readOnly": "Jh0q7G_readOnly",
2154
+ "reset": "Jh0q7G_reset",
2155
+ "save": "Jh0q7G_save",
2156
+ "select": "Jh0q7G_select"
2107
2157
  };
2108
2158
  //#endregion
2109
2159
  //#region src/client/PluginSettingsCard.tsx
@@ -2126,8 +2176,9 @@ window.__ModuleLoader__.load({
2126
2176
  if (!state.available) return null;
2127
2177
  const title = props.t(props.titleKey);
2128
2178
  const blocked = !state.dirty || state.invalid || state.saving;
2179
+ const cardClass = open ? `${settings_card_module_css_default.cardOpen} ${settings_card_module_css_default.card}` : settings_card_module_css_default.card;
2129
2180
  if (!state.exposed) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
2130
- className: settings_card_module_css_default.card,
2181
+ className: cardClass,
2131
2182
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
2132
2183
  type: "button",
2133
2184
  className: settings_card_module_css_default.header,
@@ -2145,9 +2196,17 @@ window.__ModuleLoader__.load({
2145
2196
  className: settings_card_module_css_default.description,
2146
2197
  children: props.t(props.descriptionKey)
2147
2198
  })]
2148
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2149
- className: open ? settings_card_module_css_default.chevronOpen : settings_card_module_css_default.chevron,
2150
- children: "▾"
2199
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
2200
+ width: "14",
2201
+ height: "14",
2202
+ viewBox: "0 0 14 14",
2203
+ fill: "none",
2204
+ xmlns: "http://www.w3.org/2000/svg",
2205
+ className: open ? `${settings_card_module_css_default.chevron} ${settings_card_module_css_default.chevronOpen}` : settings_card_module_css_default.chevron,
2206
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
2207
+ d: "M11.8486 5.5L11.4238 5.92383L8.69727 8.65137C8.44157 8.90706 8.21562 9.13382 8.01172 9.29785C7.79912 9.46883 7.55595 9.61756 7.25 9.66602C7.08435 9.69222 6.91565 9.69222 6.75 9.66602C6.44405 9.61756 6.20088 9.46883 5.98828 9.29785C5.78438 9.13382 5.55843 8.90706 5.30273 8.65137L2.57617 5.92383L2.15137 5.5L3 4.65137L3.42383 5.07617L6.15137 7.80273C6.42595 8.07732 6.59876 8.24849 6.74023 8.3623C6.87291 8.46904 6.92272 8.47813 6.9375 8.48047C6.97895 8.48703 7.02105 8.48703 7.0625 8.48047C7.07728 8.47813 7.12709 8.46904 7.25977 8.3623C7.40124 8.24849 7.57405 8.07732 7.84863 7.80273L10.5762 5.07617L11 4.65137L11.8486 5.5Z",
2208
+ fill: "currentColor"
2209
+ })
2151
2210
  })]
2152
2211
  }), open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2153
2212
  className: settings_card_module_css_default.body,
@@ -2159,7 +2218,7 @@ window.__ModuleLoader__.load({
2159
2218
  }) : null]
2160
2219
  });
2161
2220
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
2162
- className: settings_card_module_css_default.card,
2221
+ className: cardClass,
2163
2222
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
2164
2223
  type: "button",
2165
2224
  className: settings_card_module_css_default.header,
@@ -2183,9 +2242,17 @@ window.__ModuleLoader__.load({
2183
2242
  className: settings_card_module_css_default.pending,
2184
2243
  children: props.t("settings.unsaved")
2185
2244
  }) : null,
2186
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2187
- className: open ? settings_card_module_css_default.chevronOpen : settings_card_module_css_default.chevron,
2188
- children: "▾"
2245
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
2246
+ width: "14",
2247
+ height: "14",
2248
+ viewBox: "0 0 14 14",
2249
+ fill: "none",
2250
+ xmlns: "http://www.w3.org/2000/svg",
2251
+ className: open ? `${settings_card_module_css_default.chevron} ${settings_card_module_css_default.chevronOpen}` : settings_card_module_css_default.chevron,
2252
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
2253
+ d: "M11.8486 5.5L11.4238 5.92383L8.69727 8.65137C8.44157 8.90706 8.21562 9.13382 8.01172 9.29785C7.79912 9.46883 7.55595 9.61756 7.25 9.66602C7.08435 9.69222 6.91565 9.69222 6.75 9.66602C6.44405 9.61756 6.20088 9.46883 5.98828 9.29785C5.78438 9.13382 5.55843 8.90706 5.30273 8.65137L2.57617 5.92383L2.15137 5.5L3 4.65137L3.42383 5.07617L6.15137 7.80273C6.42595 8.07732 6.59876 8.24849 6.74023 8.3623C6.87291 8.46904 6.92272 8.47813 6.9375 8.48047C6.97895 8.48703 7.02105 8.48703 7.0625 8.48047C7.07728 8.47813 7.12709 8.46904 7.25977 8.3623C7.40124 8.24849 7.57405 8.07732 7.84863 7.80273L10.5762 5.07617L11 4.65137L11.8486 5.5Z",
2254
+ fill: "currentColor"
2255
+ })
2189
2256
  })
2190
2257
  ]
2191
2258
  }), open ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -2582,6 +2649,8 @@ window.__ModuleLoader__.load({
2582
2649
  * @param ctx - client root context (services: sessions, workspaces).
2583
2650
  */
2584
2651
  function apply(ctx) {
2652
+ if (!claimTaskboardApply()) return;
2653
+ ctx.effect(() => releaseTaskboardApply, "task-board: apply claim");
2585
2654
  ctx.effect(() => ctx.locale.register(NS, {
2586
2655
  zh,
2587
2656
  en