@jxgame2020/dsh-token-quota 0.1.36 → 0.1.38

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
@@ -123,7 +123,7 @@ window.__ModuleLoader__.load({
123
123
  d.musicOnlyCurrentSession = only;
124
124
  },
125
125
  setUpgrade: (d, upgrade) => {
126
- const normalized = upgrade !== null && upgrade.latestVersion !== "" && upgrade.latestVersion !== "0.1.36" ? upgrade : null;
126
+ const normalized = upgrade !== null && upgrade.latestVersion !== "" && upgrade.latestVersion !== "0.1.38" ? upgrade : null;
127
127
  if (d.upgrade === null || d.upgrade.latestVersion !== normalized?.latestVersion) d.upgradeDismissed = false;
128
128
  d.upgrade = normalized;
129
129
  },
@@ -243,7 +243,7 @@ window.__ModuleLoader__.load({
243
243
  }
244
244
  //#endregion
245
245
  //#region \0dsh-css:/Users/jxgame/Desktop/works/deepseek-harness-package/dsh-token-quota/packages/token-quota/src/client/TokenQuotaPanel.module.css.mjs
246
- const css = ".NPLLIq_panel{box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);pointer-events:auto;z-index:40;opacity:1;border-radius:12px;flex-direction:column;width:320px;max-height:min(72vh,560px);transition:opacity .18s;display:flex;position:fixed;top:56px;right:12px;overflow:hidden;box-shadow:0 8px 28px #0000002e}.NPLLIq_panelDim{opacity:.55}.NPLLIq_panelDimStrong{opacity:.3}.NPLLIq_header{border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:10px 12px;display:flex}.NPLLIq_header:active{cursor:grabbing}.NPLLIq_headerText{flex-direction:column;gap:2px;min-width:0;display:flex}.NPLLIq_title{color:var(--dsw-alias-label-primary);align-items:baseline;gap:6px;font-size:13px;font-weight:600;display:flex}.NPLLIq_version{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:10px;font-weight:500}.NPLLIq_versionNew{color:var(--dsw-alias-status-warning-foreground,#b56900);background:var(--dsw-alias-status-warning-background,#fff6d7);cursor:default;border-radius:4px;padding:1px 6px}.NPLLIq_subtitle{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_notesBar{flex-wrap:wrap;align-items:center;gap:4px;margin-top:4px;display:flex}.NPLLIq_noteChip{width:20px;height:20px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);cursor:pointer;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;font-size:11px;line-height:1;transition:color .12s,border-color .12s;display:inline-flex}.NPLLIq_noteChip:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.NPLLIq_noteChipOpen{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.NPLLIq_noteNew{width:22px;height:20px;color:var(--dsw-alias-label-secondary);border:1px dashed var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;transition:color .12s,border-color .12s;display:inline-flex;position:relative}.NPLLIq_noteNew:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.NPLLIq_noteNew:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_noteNewPlus{color:inherit;font-size:10px;font-weight:700;line-height:1;position:absolute;bottom:-2px;right:-1px}.NPLLIq_noteWin{z-index:60;pointer-events:auto;box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;flex-direction:column;display:flex;position:fixed;overflow:hidden;box-shadow:0 8px 24px #00000038}.NPLLIq_noteWinCollapsed{height:auto!important}.NPLLIq_noteWinBar{background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:4px 6px;display:flex}.NPLLIq_noteWinBar:active{cursor:grabbing}.NPLLIq_noteWinGripBar{color:var(--dsw-alias-label-secondary);opacity:.7;flex:none;font-size:10px}.NPLLIq_noteWinTitleText{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;padding:1px 2px;font-size:11px;font-weight:600;overflow:hidden}.NPLLIq_noteWinTitle{min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border:1px solid #0000;border-radius:4px;outline:none;flex:1;padding:1px 2px;font-size:11px;font-weight:600}.NPLLIq_noteWinTitle:hover{border-color:var(--dsw-alias-border-l1)}.NPLLIq_noteWinTitle:focus{background:var(--dsw-alias-bg-overlay);border-color:var(--dsw-alias-brand-primary)}.NPLLIq_noteWinBtn{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_noteWinBtn:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.NPLLIq_noteWinText{box-sizing:border-box;width:100%;min-height:0;color:var(--dsw-alias-label-primary);resize:none;background:0 0;border:none;outline:none;flex:1;padding:6px 8px;font-family:inherit;font-size:11px;line-height:1.5}.NPLLIq_noteWinResize{cursor:nwse-resize;background:linear-gradient(135deg, transparent 0 45%, var(--dsw-alias-border-l2) 45% 55%, transparent 55% 70%, var(--dsw-alias-border-l2) 70% 80%, transparent 80%);width:14px;height:14px;position:absolute;bottom:0;right:0}.NPLLIq_noteMenuBackdrop{z-index:100;pointer-events:auto;position:fixed;inset:0}.NPLLIq_noteMenu{z-index:101;pointer-events:auto;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;min-width:96px;padding:4px;display:flex;position:fixed;box-shadow:0 8px 24px #0000003d}.NPLLIq_noteMenuItem{text-align:left;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:5px;padding:5px 8px;font-size:11px}.NPLLIq_noteMenuItem:hover{background:var(--dsw-alias-bg-layer-2)}.NPLLIq_collapse{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_collapse:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_body{padding:4px 0;overflow-y:auto}.NPLLIq_row{border-bottom:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding:8px 12px;display:flex}.NPLLIq_rowHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.NPLLIq_rowDrag{cursor:grab;color:var(--dsw-alias-label-secondary);user-select:none;border-radius:4px;flex:none;margin-right:2px;padding:2px 3px;font-size:11px;line-height:1}.NPLLIq_rowDrag:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_rowDrag:active{cursor:grabbing}.NPLLIq_rowDragging{opacity:.45}.NPLLIq_rowDropTarget{box-shadow:inset 0 2px 0 var(--dsw-alias-brand-primary)}.NPLLIq_rowName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;align-items:center;gap:6px;font-size:12px;font-weight:500;display:inline-flex;overflow:hidden}.NPLLIq_currentBadge{color:var(--dsw-alias-state-success-primary);border:1px solid var(--dsw-alias-state-success-primary);border-radius:8px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_rowMeta{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.NPLLIq_bar{background:var(--dsw-alias-bg-layer-1);border-radius:3px;height:6px;overflow:hidden}.NPLLIq_fillIdle{background:var(--dsw-alias-brand-primary);height:100%;transition:width .2s}.NPLLIq_fillWarn{background:var(--dsw-alias-state-warn-primary);height:100%;transition:width .2s}.NPLLIq_fillOver{background:var(--dsw-alias-state-error-primary);height:100%;transition:width .2s}.NPLLIq_controls{align-items:center;gap:6px;display:flex}.NPLLIq_input{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-primary);border-radius:6px;flex:1;padding:4px 8px;font-size:11px}.NPLLIq_input::placeholder{color:var(--dsw-alias-label-secondary)}.NPLLIq_save,.NPLLIq_switch{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px;font-size:11px}.NPLLIq_save:hover,.NPLLIq_switch:hover:not(:disabled){background:var(--dsw-alias-bg-layer-2)}.NPLLIq_switch:disabled{opacity:.5;cursor:default}.NPLLIq_balanceToggle{margin-left:auto}.NPLLIq_balanceToggleOpen{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceWin{z-index:1199;background:var(--dsw-alias-bg-layer-2);width:280px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l1);pointer-events:auto;border-radius:12px;flex-direction:column;display:flex;position:fixed;overflow:hidden;box-shadow:0 8px 24px #00000029}.NPLLIq_balanceWinHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);user-select:none;align-items:center;gap:6px;padding:6px 8px 6px 12px;display:flex}.NPLLIq_balanceWinTitle{flex:1;font-size:12px;font-weight:600;line-height:1}.NPLLIq_balanceWinBody{font-variant-numeric:tabular-nums;padding:6px 10px 10px;font-size:11px}.NPLLIq_balanceRowHeader{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);grid-template-columns:1fr auto 20px;align-items:center;gap:6px;padding:3px 2px;font-weight:600;display:grid}.NPLLIq_balanceSortBtn{all:unset;cursor:pointer;color:inherit;border-radius:4px;padding:1px 2px;font-size:10px;font-weight:600}.NPLLIq_balanceSortBtn:hover{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceRefreshAll{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_balanceRefreshAll:hover:not(:disabled){color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceRefreshAll:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_balanceRow{grid-template-columns:1fr auto 20px;align-items:center;gap:6px;padding:3px 2px;display:grid}.NPLLIq_balanceRow+.NPLLIq_balanceRow{border-top:1px dashed var(--dsw-alias-border-l1)}.NPLLIq_balanceRowName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.NPLLIq_balanceRowValue{text-align:right;font-weight:600}.NPLLIq_balanceRowRefresh{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_balanceRowRefresh:hover:not(:disabled){color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceRowRefresh:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_balanceValueOk{color:var(--dsw-alias-label-primary)}.NPLLIq_balanceValueLow{color:var(--dsw-alias-state-warn-primary)}.NPLLIq_balanceValueError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_balanceStateHint{color:var(--dsw-alias-label-secondary);font-style:italic;font-weight:500}.NPLLIq_balanceStateError{color:var(--dsw-alias-state-error-primary);font-weight:500}.NPLLIq_balanceLastLine{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);margin-top:6px;padding-top:5px;font-size:10px}.NPLLIq_balanceBar{color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);font-variant-numeric:tabular-nums;justify-content:space-between;align-items:center;gap:6px;padding:5px 12px;font-size:11px;display:flex}.NPLLIq_balanceBarText{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;min-width:0;font-weight:600;display:inline-flex;overflow:hidden}.NPLLIq_balanceBarBadge{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border-radius:4px;flex:none;padding:0 4px;font-size:10px;font-weight:600}.NPLLIq_balanceBarDim{color:var(--dsw-alias-label-secondary);font-weight:500}.NPLLIq_balanceBarLow{color:var(--dsw-alias-state-warn-primary)}.NPLLIq_balanceBarError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_balanceBarRefresh{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_balanceBarRefresh:hover:not(:disabled){color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceBarRefresh:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_notice,.NPLLIq_noticeError{color:var(--dsw-alias-label-secondary);padding:10px 12px;font-size:12px}.NPLLIq_noticeError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_tab{background:var(--dsw-alias-brand-primary);border:1px solid var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay);pointer-events:auto;cursor:pointer;z-index:90;border-radius:10px;align-items:center;gap:6px;padding:9px 14px;font-size:12px;font-weight:600;display:inline-flex;position:fixed;top:56px;right:12px;box-shadow:0 6px 20px #00000040}.NPLLIq_tab:hover{filter:brightness(1.08)}.NPLLIq_tabIcon{font-size:12px;line-height:1}.NPLLIq_tabLabel{white-space:nowrap}.NPLLIq_headerActions{flex:none;align-items:center;gap:4px;display:flex}.NPLLIq_settingsBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_settingsBtn:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_settingsBtnActive{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2,#0000000f);box-shadow:inset 0 0 0 1px var(--dsw-alias-brand-primary);font-weight:700}.NPLLIq_selectBtn{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_selectBtn:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_gearBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;margin-left:6px;padding:0 2px;font-size:12px;line-height:1}.NPLLIq_gearBtn:hover{color:var(--dsw-alias-label-primary)}.NPLLIq_fullNotice{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-state-error-primary);border-radius:8px;margin:6px 12px;padding:8px 10px;font-size:12px}.NPLLIq_upgradeBanner{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-divider-1,#0000001a);border-radius:8px;margin:6px 12px;padding:10px 30px 10px 10px;font-size:12px;position:relative}@keyframes NPLLIq_upgradeBannerFlash{0%,to{border-color:var(--dsw-alias-divider-1,#0000001a);box-shadow:0 0 #f0a02000}50%{border-color:var(--dsw-alias-status-warning-foreground,#b56900);box-shadow:0 0 0 5px #f0a02073}}.NPLLIq_upgradeBannerFlash{border-color:var(--dsw-alias-status-warning-foreground,#b56900);animation:.6s ease-in-out 4 NPLLIq_upgradeBannerFlash}.NPLLIq_upgradeBannerText{margin-bottom:6px;font-weight:600}.NPLLIq_upgradeCommands{flex-direction:column;gap:4px;display:flex}.NPLLIq_upgradeCommandRow{align-items:center;gap:6px;display:flex}.NPLLIq_upgradeCommand{background:var(--dsw-alias-bg-layer-2,#0000000a);white-space:nowrap;border-radius:4px;flex:1;min-width:0;padding:4px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;overflow-x:auto}.NPLLIq_copyBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;flex:none;padding:3px 8px;font-size:11px;transition:transform 80ms,background .12s,color .12s}.NPLLIq_copyBtn:hover{background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_copyBtn:active{transform:scale(.92)}.NPLLIq_copyBtnDone{background:var(--dsw-alias-status-success-background,#14963c1f);border-color:var(--dsw-alias-status-success-foreground,#0a7d32);color:var(--dsw-alias-status-success-foreground,#0a7d32);font-weight:600}.NPLLIq_upgradeHint{color:var(--dsw-alias-label-secondary);margin-top:6px;font-size:11px}.NPLLIq_upgradeClose{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;font-size:16px;line-height:1;position:absolute;top:4px;right:6px}.NPLLIq_upgradeClose:hover{background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary)}.NPLLIq_checkUpdatesRow{justify-content:space-between;align-items:center;gap:12px;display:flex}.NPLLIq_checkUpdatesLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.NPLLIq_checkUpdatesLabel input{margin:0}.NPLLIq_checkUpdatesLabel input[type=range]{min-width:90px;accent-color:var(--dsw-alias-brand-primary);flex:1}.NPLLIq_checkUpdatesLabel select{background:var(--dsw-alias-bg-layer-2,#0000000a);min-width:90px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-divider-1,#00000026);border-radius:4px;flex:1;padding:2px 4px;font-size:12px}.NPLLIq_checkBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;text-align:center;border-radius:4px;flex:none;min-width:72px;padding:4px 10px;font-size:12px}.NPLLIq_checkBtn:hover:not(:disabled){background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_checkBtn:disabled{opacity:.6;cursor:default}.NPLLIq_checkErrorHint{color:var(--dsw-alias-state-error-primary,#c00);background:var(--dsw-alias-state-error-background,#ff00000f);border:1px solid var(--dsw-alias-state-error-border,#b4000040);word-break:break-all;border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px;line-height:1.4}.NPLLIq_dialog{z-index:100;pointer-events:auto;box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;gap:12px;width:430px;max-width:94vw;max-height:80vh;padding:14px;display:flex;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%);box-shadow:0 8px 28px #00000040}.NPLLIq_dialogTabs{border-bottom:1px solid var(--dsw-alias-divider-1,#00000014);gap:2px;margin:-6px -14px 0;padding:0 14px;display:flex}.NPLLIq_dialogTab{appearance:none;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 12px 8px;font-size:12px}.NPLLIq_dialogTab:hover{color:var(--dsw-alias-label-primary)}.NPLLIq_dialogTabActive{color:var(--dsw-alias-brand-primary);border-bottom-color:var(--dsw-alias-brand-primary);font-weight:600}.NPLLIq_settingsDialog{height:min(560px,80vh)}.NPLLIq_dialogTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.NPLLIq_dialogSection{flex-direction:column;gap:6px;display:flex}.NPLLIq_dialogLabel{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:500}.NPLLIq_monitorHint{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_dialogHint{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:11px;line-height:1.4}.NPLLIq_monitorList{flex-direction:column;gap:2px;max-height:180px;display:flex;overflow-y:auto}.NPLLIq_monitorRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:2px 4px;font-size:12px;display:flex}.NPLLIq_monitorRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_monitorName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.NPLLIq_radioRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:3px 4px;font-size:12px;display:flex}.NPLLIq_radioRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_dialogActions{justify-content:flex-end;gap:6px;display:flex}.NPLLIq_dialogBtn,.NPLLIq_dialogBtnPrimary{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;border-radius:6px;padding:4px 12px;font-size:11px}.NPLLIq_dialogBtn{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}.NPLLIq_dialogBtnPrimary{background:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay)}.NPLLIq_dialogHeader{z-index:2;background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:center;gap:8px;margin:-14px -14px 0;padding:14px 14px 8px;display:flex;position:sticky;top:-14px}.NPLLIq_dialogHeader:active{cursor:grabbing}.NPLLIq_dialogClose{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:18px;line-height:1;display:flex}.NPLLIq_dialogClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_resetRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.NPLLIq_resetSelect{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:6px;padding:3px 6px;font-size:12px}.NPLLIq_logTable{border-collapse:collapse;width:100%;font-size:11px}.NPLLIq_logTable th{text-align:left;color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);padding:4px 6px;font-weight:500}.NPLLIq_logTable td{color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);font-variant-numeric:tabular-nums;padding:4px 6px}.NPLLIq_logDayCol{white-space:nowrap;color:var(--dsw-alias-label-secondary)}.NPLLIq_logModelCol{text-overflow:ellipsis;white-space:nowrap;max-width:160px;overflow:hidden}.NPLLIq_logUsedCol{text-align:right}.NPLLIq_logDialog{gap:0;width:380px;max-height:min(72vh,480px);padding:0}.NPLLIq_logHeader{background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;flex:none;justify-content:space-between;align-items:center;gap:8px;padding:14px 14px 8px;display:flex}.NPLLIq_logHeader:active{cursor:grabbing}.NPLLIq_logScroll{flex:1;min-height:0;padding:0 14px 14px;overflow:auto}.NPLLIq_logToolbar{flex:1;align-items:center;gap:6px;display:flex}.NPLLIq_logSearch{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);min-width:0;color:var(--dsw-alias-label-primary);border-radius:4px;flex:1;padding:3px 6px;font-size:11px}.NPLLIq_logSearch:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}.NPLLIq_logClearBtn{border:1px solid var(--dsw-alias-state-error-border,#b400004d);color:var(--dsw-alias-state-error-primary,#c00);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;flex:none;padding:3px 8px;font-size:11px}.NPLLIq_logClearBtn:hover{background:var(--dsw-alias-state-error-background,#ff00000f)}.NPLLIq_logPager{border-top:1px solid var(--dsw-alias-divider-1,#00000014);background:var(--dsw-alias-bg-overlay);color:var(--dsw-alias-label-secondary);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 14px;font-size:11px;display:flex}.NPLLIq_logPagerInfo{white-space:nowrap}.NPLLIq_logPagerControls{align-items:center;gap:4px;display:flex}.NPLLIq_logPagerBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:24px;height:24px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;font-size:13px;line-height:1}.NPLLIq_logPagerBtn:disabled{opacity:.4;cursor:default}.NPLLIq_logPagerPages{text-align:center;min-width:50px;color:var(--dsw-alias-label-secondary)}.NPLLIq_logPageSizeSelect{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;padding:2px 4px;font-size:11px}.NPLLIq_dialogOverlay{z-index:100001;pointer-events:auto;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.NPLLIq_logClearDialog{gap:0;width:320px;padding:16px}.NPLLIq_dialogBody{color:var(--dsw-alias-label-secondary);margin:6px 0 10px;font-size:12px;line-height:1.5}.NPLLIq_logClearDate{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:100%;color:var(--dsw-alias-label-primary);border-radius:6px;margin-bottom:12px;padding:6px 8px;font-size:13px}.NPLLIq_logClearDate:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}";
246
+ const css = ".NPLLIq_panel{box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);pointer-events:auto;z-index:40;opacity:1;border-radius:12px;flex-direction:column;width:320px;max-height:min(72vh,560px);transition:opacity .18s;display:flex;position:fixed;top:56px;right:12px;overflow:hidden;box-shadow:0 8px 28px #0000002e}.NPLLIq_panelDim{opacity:.55}.NPLLIq_panelDimStrong{opacity:.3}.NPLLIq_header{border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:10px 12px;display:flex}.NPLLIq_header:active{cursor:grabbing}.NPLLIq_headerText{flex-direction:column;gap:2px;min-width:0;display:flex}.NPLLIq_title{color:var(--dsw-alias-label-primary);align-items:baseline;gap:6px;font-size:13px;font-weight:600;display:flex}.NPLLIq_version{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:10px;font-weight:500}.NPLLIq_versionNew{color:var(--dsw-alias-status-warning-foreground,#b56900);background:var(--dsw-alias-status-warning-background,#fff6d7);cursor:default;border-radius:4px;padding:1px 6px}.NPLLIq_subtitle{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_notesBar{background:var(--dsw-alias-bg-layer-2);flex-wrap:wrap;align-items:center;gap:4px;padding:4px 12px 0;display:flex}.NPLLIq_noteChip{width:20px;height:20px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);cursor:pointer;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;font-size:11px;line-height:1;transition:color .12s,border-color .12s;display:inline-flex}.NPLLIq_noteChip:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.NPLLIq_noteChipOpen{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.NPLLIq_noteNew{width:22px;height:20px;color:var(--dsw-alias-label-secondary);border:1px dashed var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;transition:color .12s,border-color .12s;display:inline-flex;position:relative}.NPLLIq_noteNew:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.NPLLIq_noteNew:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_noteNewPlus{color:inherit;font-size:10px;font-weight:700;line-height:1;position:absolute;bottom:-2px;right:-1px}.NPLLIq_noteWin{z-index:60;pointer-events:auto;box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;flex-direction:column;display:flex;position:fixed;overflow:hidden;box-shadow:0 8px 24px #00000038}.NPLLIq_noteWinCollapsed{height:auto!important}.NPLLIq_noteWinBar{background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:4px 6px;display:flex}.NPLLIq_noteWinBar:active{cursor:grabbing}.NPLLIq_noteWinGripBar{color:var(--dsw-alias-label-secondary);opacity:.7;flex:none;font-size:10px}.NPLLIq_noteWinTitleText{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;padding:1px 2px;font-size:11px;font-weight:600;overflow:hidden}.NPLLIq_noteWinTitle{min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border:1px solid #0000;border-radius:4px;outline:none;flex:1;padding:1px 2px;font-size:11px;font-weight:600}.NPLLIq_noteWinTitle:hover{border-color:var(--dsw-alias-border-l1)}.NPLLIq_noteWinTitle:focus{background:var(--dsw-alias-bg-overlay);border-color:var(--dsw-alias-brand-primary)}.NPLLIq_noteWinBtn{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_noteWinBtn:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.NPLLIq_noteWinText{box-sizing:border-box;width:100%;min-height:0;color:var(--dsw-alias-label-primary);resize:none;background:0 0;border:none;outline:none;flex:1;padding:6px 8px;font-family:inherit;font-size:11px;line-height:1.5}.NPLLIq_noteWinResize{cursor:nwse-resize;background:linear-gradient(135deg, transparent 0 45%, var(--dsw-alias-border-l2) 45% 55%, transparent 55% 70%, var(--dsw-alias-border-l2) 70% 80%, transparent 80%);width:14px;height:14px;position:absolute;bottom:0;right:0}.NPLLIq_noteMenuBackdrop{z-index:100;pointer-events:auto;position:fixed;inset:0}.NPLLIq_noteMenu{z-index:101;pointer-events:auto;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;min-width:96px;padding:4px;display:flex;position:fixed;box-shadow:0 8px 24px #0000003d}.NPLLIq_noteMenuItem{text-align:left;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:5px;padding:5px 8px;font-size:11px}.NPLLIq_noteMenuItem:hover{background:var(--dsw-alias-bg-layer-2)}.NPLLIq_collapse{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_collapse:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_body{padding:4px 0;overflow-y:auto}.NPLLIq_row{border-bottom:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding:8px 12px;display:flex}.NPLLIq_rowHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.NPLLIq_rowDrag{cursor:grab;color:var(--dsw-alias-label-secondary);user-select:none;border-radius:4px;flex:none;margin-right:2px;padding:2px 3px;font-size:11px;line-height:1}.NPLLIq_rowDrag:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_rowDrag:active{cursor:grabbing}.NPLLIq_rowDragging{opacity:.45}.NPLLIq_rowDropTarget{box-shadow:inset 0 2px 0 var(--dsw-alias-brand-primary)}.NPLLIq_rowName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;align-items:center;gap:6px;font-size:12px;font-weight:500;display:inline-flex;overflow:hidden}.NPLLIq_currentBadge{color:var(--dsw-alias-state-success-primary);border:1px solid var(--dsw-alias-state-success-primary);border-radius:8px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_rowMeta{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.NPLLIq_bar{background:var(--dsw-alias-bg-layer-1);border-radius:3px;height:6px;overflow:hidden}.NPLLIq_fillIdle{background:var(--dsw-alias-brand-primary);height:100%;transition:width .2s}.NPLLIq_fillWarn{background:var(--dsw-alias-state-warn-primary);height:100%;transition:width .2s}.NPLLIq_fillOver{background:var(--dsw-alias-state-error-primary);height:100%;transition:width .2s}.NPLLIq_controls{align-items:center;gap:6px;display:flex}.NPLLIq_input{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-primary);border-radius:6px;flex:1;padding:4px 8px;font-size:11px}.NPLLIq_input::placeholder{color:var(--dsw-alias-label-secondary)}.NPLLIq_save,.NPLLIq_switch{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px;font-size:11px}.NPLLIq_save:hover,.NPLLIq_switch:hover:not(:disabled){background:var(--dsw-alias-bg-layer-2)}.NPLLIq_switch:disabled{opacity:.5;cursor:default}.NPLLIq_balanceToggle{margin-left:auto}.NPLLIq_balanceToggleOpen{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceWin{z-index:1199;background:var(--dsw-alias-bg-layer-2);width:280px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l1);pointer-events:auto;border-radius:12px;flex-direction:column;display:flex;position:fixed;overflow:hidden;box-shadow:0 8px 24px #00000029}.NPLLIq_balanceWinHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);user-select:none;align-items:center;gap:6px;padding:6px 8px 6px 12px;display:flex}.NPLLIq_balanceWinTitle{flex:1;font-size:12px;font-weight:600;line-height:1}.NPLLIq_balanceWinBody{font-variant-numeric:tabular-nums;padding:6px 10px 10px;font-size:11px}.NPLLIq_balanceRowHeader{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);grid-template-columns:1fr auto 20px;align-items:center;gap:6px;padding:3px 2px;font-weight:600;display:grid}.NPLLIq_balanceSortBtn{all:unset;cursor:pointer;color:inherit;border-radius:4px;padding:1px 2px;font-size:10px;font-weight:600}.NPLLIq_balanceSortBtn:hover{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceRefreshAll{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_balanceRefreshAll:hover:not(:disabled){color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceRefreshAll:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_balanceRow{grid-template-columns:1fr auto 20px;align-items:center;gap:6px;padding:3px 2px;display:grid}.NPLLIq_balanceRow+.NPLLIq_balanceRow{border-top:1px dashed var(--dsw-alias-border-l1)}.NPLLIq_balanceRowName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.NPLLIq_balanceRowValue{text-align:right;font-weight:600}.NPLLIq_balanceRowRefresh{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_balanceRowRefresh:hover:not(:disabled){color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceRowRefresh:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_balanceValueOk{color:var(--dsw-alias-label-primary)}.NPLLIq_balanceValueLow{color:var(--dsw-alias-state-warn-primary)}.NPLLIq_balanceValueError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_balanceStateHint{color:var(--dsw-alias-label-secondary);font-style:italic;font-weight:500}.NPLLIq_balanceStateError{color:var(--dsw-alias-state-error-primary);font-weight:500}.NPLLIq_balanceLastLine{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);margin-top:6px;padding-top:5px;font-size:10px}.NPLLIq_balanceBar{color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);font-variant-numeric:tabular-nums;justify-content:space-between;align-items:center;gap:6px;padding:5px 12px;font-size:11px;display:flex}.NPLLIq_balanceBarText{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;min-width:0;font-weight:600;display:inline-flex;overflow:hidden}.NPLLIq_balanceBarBadge{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border-radius:4px;flex:none;padding:0 4px;font-size:10px;font-weight:600}.NPLLIq_balanceBarDim{color:var(--dsw-alias-label-secondary);font-weight:500}.NPLLIq_balanceBarLow{color:var(--dsw-alias-state-warn-primary)}.NPLLIq_balanceBarError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_balanceBarRefresh{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.NPLLIq_balanceBarRefresh:hover:not(:disabled){color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_balanceBarRefresh:disabled{opacity:.4;cursor:not-allowed}.NPLLIq_notice,.NPLLIq_noticeError{color:var(--dsw-alias-label-secondary);padding:10px 12px;font-size:12px}.NPLLIq_noticeError{color:var(--dsw-alias-state-error-primary)}.NPLLIq_tab{background:var(--dsw-alias-brand-primary);border:1px solid var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay);pointer-events:auto;cursor:pointer;z-index:90;border-radius:10px;align-items:center;gap:6px;padding:9px 14px;font-size:12px;font-weight:600;display:inline-flex;position:fixed;top:56px;right:12px;box-shadow:0 6px 20px #00000040}.NPLLIq_tab:hover{filter:brightness(1.08)}.NPLLIq_tabIcon{font-size:12px;line-height:1}.NPLLIq_tabLabel{white-space:nowrap}.NPLLIq_headerActions{flex:none;align-items:center;gap:4px;display:flex}.NPLLIq_settingsBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 6px;font-size:11px}.NPLLIq_settingsBtn:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_settingsBtnActive{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2,#0000000f);box-shadow:inset 0 0 0 1px var(--dsw-alias-brand-primary);font-weight:700}.NPLLIq_selectBtn{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:1px 6px;font-size:10px}.NPLLIq_selectBtn:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_gearBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;margin-left:6px;padding:0 2px;font-size:12px;line-height:1}.NPLLIq_gearBtn:hover{color:var(--dsw-alias-label-primary)}.NPLLIq_fullNotice{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-state-error-primary);border-radius:8px;margin:6px 12px;padding:8px 10px;font-size:12px}.NPLLIq_upgradeBanner{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-divider-1,#0000001a);border-radius:8px;margin:6px 12px;padding:10px 30px 10px 10px;font-size:12px;position:relative}@keyframes NPLLIq_upgradeBannerFlash{0%,to{border-color:var(--dsw-alias-divider-1,#0000001a);box-shadow:0 0 #f0a02000}50%{border-color:var(--dsw-alias-status-warning-foreground,#b56900);box-shadow:0 0 0 5px #f0a02073}}.NPLLIq_upgradeBannerFlash{border-color:var(--dsw-alias-status-warning-foreground,#b56900);animation:.6s ease-in-out 4 NPLLIq_upgradeBannerFlash}.NPLLIq_upgradeBannerText{margin-bottom:6px;font-weight:600}.NPLLIq_upgradeCommands{flex-direction:column;gap:4px;display:flex}.NPLLIq_upgradeCommandRow{align-items:center;gap:6px;display:flex}.NPLLIq_upgradeCommand{background:var(--dsw-alias-bg-layer-2,#0000000a);white-space:nowrap;border-radius:4px;flex:1;min-width:0;padding:4px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;overflow-x:auto}.NPLLIq_copyBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;flex:none;padding:3px 8px;font-size:11px;transition:transform 80ms,background .12s,color .12s}.NPLLIq_copyBtn:hover{background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_copyBtn:active{transform:scale(.92)}.NPLLIq_copyBtnDone{background:var(--dsw-alias-status-success-background,#14963c1f);border-color:var(--dsw-alias-status-success-foreground,#0a7d32);color:var(--dsw-alias-status-success-foreground,#0a7d32);font-weight:600}.NPLLIq_upgradeHint{color:var(--dsw-alias-label-secondary);margin-top:6px;font-size:11px}.NPLLIq_upgradeClose{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;font-size:16px;line-height:1;position:absolute;top:4px;right:6px}.NPLLIq_upgradeClose:hover{background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary)}.NPLLIq_checkUpdatesRow{justify-content:space-between;align-items:center;gap:12px;display:flex}.NPLLIq_checkUpdatesLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.NPLLIq_checkUpdatesLabel input{margin:0}.NPLLIq_checkUpdatesLabel input[type=range]{min-width:90px;accent-color:var(--dsw-alias-brand-primary);flex:1}.NPLLIq_checkUpdatesLabel select{background:var(--dsw-alias-bg-layer-2,#0000000a);min-width:90px;color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-divider-1,#00000026);border-radius:4px;flex:1;padding:2px 4px;font-size:12px}.NPLLIq_checkBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-2,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;text-align:center;border-radius:4px;flex:none;min-width:72px;padding:4px 10px;font-size:12px}.NPLLIq_checkBtn:hover:not(:disabled){background:var(--dsw-alias-bg-layer-3,#00000014)}.NPLLIq_checkBtn:disabled{opacity:.6;cursor:default}.NPLLIq_checkErrorHint{color:var(--dsw-alias-state-error-primary,#c00);background:var(--dsw-alias-state-error-background,#ff00000f);border:1px solid var(--dsw-alias-state-error-border,#b4000040);word-break:break-all;border-radius:6px;margin-top:8px;padding:6px 8px;font-size:11px;line-height:1.4}.NPLLIq_dialog{z-index:100;pointer-events:auto;box-sizing:border-box;background:var(--dsw-alias-bg-overlay);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;gap:12px;width:430px;max-width:94vw;max-height:80vh;padding:14px;display:flex;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%);box-shadow:0 8px 28px #00000040}.NPLLIq_dialogTabs{border-bottom:1px solid var(--dsw-alias-divider-1,#00000014);gap:2px;margin:-6px -14px 0;padding:0 14px;display:flex}.NPLLIq_dialogTab{appearance:none;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 12px 8px;font-size:12px}.NPLLIq_dialogTab:hover{color:var(--dsw-alias-label-primary)}.NPLLIq_dialogTabActive{color:var(--dsw-alias-brand-primary);border-bottom-color:var(--dsw-alias-brand-primary);font-weight:600}.NPLLIq_settingsDialog{height:min(560px,80vh)}.NPLLIq_dialogTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.NPLLIq_dialogSection{flex-direction:column;gap:6px;display:flex}.NPLLIq_dialogLabel{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:500}.NPLLIq_monitorHint{color:var(--dsw-alias-label-secondary);font-size:11px}.NPLLIq_dialogHint{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:11px;line-height:1.4}.NPLLIq_monitorList{flex-direction:column;gap:2px;max-height:180px;display:flex;overflow-y:auto}.NPLLIq_monitorRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:2px 4px;font-size:12px;display:flex}.NPLLIq_monitorRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_monitorName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.NPLLIq_radioRow{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:3px 4px;font-size:12px;display:flex}.NPLLIq_radioRow:hover{background:var(--dsw-alias-bg-layer-1)}.NPLLIq_dialogActions{justify-content:flex-end;gap:6px;display:flex}.NPLLIq_dialogBtn,.NPLLIq_dialogBtnPrimary{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;border-radius:6px;padding:4px 12px;font-size:11px}.NPLLIq_dialogBtn{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}.NPLLIq_dialogBtnPrimary{background:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-overlay)}.NPLLIq_dialogHeader{z-index:2;background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;justify-content:space-between;align-items:center;gap:8px;margin:-14px -14px 0;padding:14px 14px 8px;display:flex;position:sticky;top:-14px}.NPLLIq_dialogHeader:active{cursor:grabbing}.NPLLIq_dialogClose{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:18px;line-height:1;display:flex}.NPLLIq_dialogClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1)}.NPLLIq_resetRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.NPLLIq_resetSelect{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:6px;padding:3px 6px;font-size:12px}.NPLLIq_logTable{border-collapse:collapse;width:100%;font-size:11px}.NPLLIq_logTable th{text-align:left;color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);padding:4px 6px;font-weight:500}.NPLLIq_logTable td{color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);font-variant-numeric:tabular-nums;padding:4px 6px}.NPLLIq_logDayCol{white-space:nowrap;color:var(--dsw-alias-label-secondary)}.NPLLIq_logModelCol{text-overflow:ellipsis;white-space:nowrap;max-width:160px;overflow:hidden}.NPLLIq_logUsedCol{text-align:right}.NPLLIq_logDialog{gap:0;width:380px;max-height:min(72vh,480px);padding:0}.NPLLIq_logHeader{background:var(--dsw-alias-bg-overlay);cursor:grab;user-select:none;touch-action:none;flex:none;justify-content:space-between;align-items:center;gap:8px;padding:14px 14px 8px;display:flex}.NPLLIq_logHeader:active{cursor:grabbing}.NPLLIq_logScroll{flex:1;min-height:0;padding:0 14px 14px;overflow:auto}.NPLLIq_logToolbar{flex:1;align-items:center;gap:6px;display:flex}.NPLLIq_logSearch{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);min-width:0;color:var(--dsw-alias-label-primary);border-radius:4px;flex:1;padding:3px 6px;font-size:11px}.NPLLIq_logSearch:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}.NPLLIq_logClearBtn{border:1px solid var(--dsw-alias-state-error-border,#b400004d);color:var(--dsw-alias-state-error-primary,#c00);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;flex:none;padding:3px 8px;font-size:11px}.NPLLIq_logClearBtn:hover{background:var(--dsw-alias-state-error-background,#ff00000f)}.NPLLIq_logPager{border-top:1px solid var(--dsw-alias-divider-1,#00000014);background:var(--dsw-alias-bg-overlay);color:var(--dsw-alias-label-secondary);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 14px;font-size:11px;display:flex}.NPLLIq_logPagerInfo{white-space:nowrap}.NPLLIq_logPagerControls{align-items:center;gap:4px;display:flex}.NPLLIq_logPagerBtn{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:24px;height:24px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;font-size:13px;line-height:1}.NPLLIq_logPagerBtn:disabled{opacity:.4;cursor:default}.NPLLIq_logPagerPages{text-align:center;min-width:50px;color:var(--dsw-alias-label-secondary)}.NPLLIq_logPageSizeSelect{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:4px;padding:2px 4px;font-size:11px}.NPLLIq_dialogOverlay{z-index:100001;pointer-events:auto;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.NPLLIq_logClearDialog{gap:0;width:320px;padding:16px}.NPLLIq_dialogBody{color:var(--dsw-alias-label-secondary);margin:6px 0 10px;font-size:12px;line-height:1.5}.NPLLIq_logClearDate{border:1px solid var(--dsw-alias-divider-1,#00000026);background:var(--dsw-alias-bg-layer-1,#0000000a);width:100%;color:var(--dsw-alias-label-primary);border-radius:6px;margin-bottom:12px;padding:6px 8px;font-size:13px}.NPLLIq_logClearDate:focus{border-color:var(--dsw-alias-accent-1,#4a9eff);outline:none}";
247
247
  const tagId = "@jxgame2020/dsh-token-quota/TokenQuotaPanel.module.css";
248
248
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
249
249
  const tag = document.createElement("style");
@@ -253,142 +253,142 @@ window.__ModuleLoader__.load({
253
253
  document.head.appendChild(tag);
254
254
  }
255
255
  var TokenQuotaPanel_module_css_default = {
256
- "noteMenuBackdrop": "NPLLIq_noteMenuBackdrop",
257
- "rowDrag": "NPLLIq_rowDrag",
258
- "balanceStateHint": "NPLLIq_balanceStateHint",
259
- "controls": "NPLLIq_controls",
260
- "balanceWinBody": "NPLLIq_balanceWinBody",
261
- "currentBadge": "NPLLIq_currentBadge",
262
- "save": "NPLLIq_save",
263
- "balanceBarText": "NPLLIq_balanceBarText",
264
- "checkUpdatesRow": "NPLLIq_checkUpdatesRow",
265
- "logModelCol": "NPLLIq_logModelCol",
256
+ "notesBar": "NPLLIq_notesBar",
266
257
  "logDialog": "NPLLIq_logDialog",
267
- "noteWin": "NPLLIq_noteWin",
268
- "noteMenu": "NPLLIq_noteMenu",
269
- "copyBtnDone": "NPLLIq_copyBtnDone",
270
- "input": "NPLLIq_input",
258
+ "logHeader": "NPLLIq_logHeader",
259
+ "rowDropTarget": "NPLLIq_rowDropTarget",
260
+ "tab": "NPLLIq_tab",
261
+ "bar": "NPLLIq_bar",
262
+ "dialogOverlay": "NPLLIq_dialogOverlay",
263
+ "upgradeClose": "NPLLIq_upgradeClose",
264
+ "dialogHeader": "NPLLIq_dialogHeader",
265
+ "rowMeta": "NPLLIq_rowMeta",
266
+ "rowDrag": "NPLLIq_rowDrag",
271
267
  "upgradeBannerFlash": "NPLLIq_upgradeBannerFlash",
272
- "balanceBarDim": "NPLLIq_balanceBarDim",
273
- "panelDim": "NPLLIq_panelDim",
268
+ "logClearDialog": "NPLLIq_logClearDialog",
269
+ "logClearBtn": "NPLLIq_logClearBtn",
274
270
  "dialogTitle": "NPLLIq_dialogTitle",
275
- "noteNew": "NPLLIq_noteNew",
276
- "balanceBarError": "NPLLIq_balanceBarError",
277
- "upgradeCommandRow": "NPLLIq_upgradeCommandRow",
271
+ "panelDim": "NPLLIq_panelDim",
272
+ "switch": "NPLLIq_switch",
273
+ "balanceStateHint": "NPLLIq_balanceStateHint",
274
+ "balanceBarBadge": "NPLLIq_balanceBarBadge",
275
+ "logScroll": "NPLLIq_logScroll",
276
+ "balanceToggleOpen": "NPLLIq_balanceToggleOpen",
277
+ "balanceValueLow": "NPLLIq_balanceValueLow",
278
+ "settingsBtn": "NPLLIq_settingsBtn",
279
+ "logPager": "NPLLIq_logPager",
280
+ "checkUpdatesRow": "NPLLIq_checkUpdatesRow",
281
+ "dialogTab": "NPLLIq_dialogTab",
282
+ "balanceRowRefresh": "NPLLIq_balanceRowRefresh",
283
+ "logPagerControls": "NPLLIq_logPagerControls",
284
+ "panelDimStrong": "NPLLIq_panelDimStrong",
285
+ "dialogBtn": "NPLLIq_dialogBtn",
286
+ "dialogLabel": "NPLLIq_dialogLabel",
278
287
  "logSearch": "NPLLIq_logSearch",
279
- "upgradeBanner": "NPLLIq_upgradeBanner",
280
- "balanceStateError": "NPLLIq_balanceStateError",
281
- "logTable": "NPLLIq_logTable",
282
- "upgradeBannerText": "NPLLIq_upgradeBannerText",
283
- "logPagerInfo": "NPLLIq_logPagerInfo",
284
- "resetSelect": "NPLLIq_resetSelect",
285
- "monitorHint": "NPLLIq_monitorHint",
286
- "logClearDialog": "NPLLIq_logClearDialog",
287
- "fillWarn": "NPLLIq_fillWarn",
288
+ "notice": "NPLLIq_notice",
289
+ "balanceWinHeader": "NPLLIq_balanceWinHeader",
290
+ "noteMenuBackdrop": "NPLLIq_noteMenuBackdrop",
291
+ "noteWinBar": "NPLLIq_noteWinBar",
288
292
  "logPageSizeSelect": "NPLLIq_logPageSizeSelect",
293
+ "logTable": "NPLLIq_logTable",
294
+ "dialogTabActive": "NPLLIq_dialogTabActive",
289
295
  "fillOver": "NPLLIq_fillOver",
290
- "title": "NPLLIq_title",
291
- "noteWinTitleText": "NPLLIq_noteWinTitleText",
292
- "balanceWinHeader": "NPLLIq_balanceWinHeader",
293
- "fullNotice": "NPLLIq_fullNotice",
294
- "logUsedCol": "NPLLIq_logUsedCol",
295
- "body": "NPLLIq_body",
296
- "balanceToggle": "NPLLIq_balanceToggle",
297
- "gearBtn": "NPLLIq_gearBtn",
298
- "settingsBtnActive": "NPLLIq_settingsBtnActive",
299
- "dialogHint": "NPLLIq_dialogHint",
300
- "dialogBody": "NPLLIq_dialogBody",
301
- "logPager": "NPLLIq_logPager",
302
- "checkUpdatesLabel": "NPLLIq_checkUpdatesLabel",
296
+ "copyBtn": "NPLLIq_copyBtn",
303
297
  "versionNew": "NPLLIq_versionNew",
304
- "settingsBtn": "NPLLIq_settingsBtn",
305
- "rowHeader": "NPLLIq_rowHeader",
306
- "noteWinText": "NPLLIq_noteWinText",
307
- "balanceLastLine": "NPLLIq_balanceLastLine",
308
- "dialogLabel": "NPLLIq_dialogLabel",
298
+ "settingsBtnActive": "NPLLIq_settingsBtnActive",
299
+ "tabLabel": "NPLLIq_tabLabel",
309
300
  "noticeError": "NPLLIq_noticeError",
310
- "bar": "NPLLIq_bar",
301
+ "copyBtnDone": "NPLLIq_copyBtnDone",
302
+ "logModelCol": "NPLLIq_logModelCol",
303
+ "noteChipOpen": "NPLLIq_noteChipOpen",
304
+ "fillIdle": "NPLLIq_fillIdle",
305
+ "resetRow": "NPLLIq_resetRow",
306
+ "noteNew": "NPLLIq_noteNew",
307
+ "noteMenuItem": "NPLLIq_noteMenuItem",
308
+ "noteWinText": "NPLLIq_noteWinText",
309
+ "noteWinResize": "NPLLIq_noteWinResize",
310
+ "noteChip": "NPLLIq_noteChip",
311
+ "balanceToggle": "NPLLIq_balanceToggle",
312
+ "checkUpdatesLabel": "NPLLIq_checkUpdatesLabel",
313
+ "rowName": "NPLLIq_rowName",
314
+ "checkErrorHint": "NPLLIq_checkErrorHint",
315
+ "settingsDialog": "NPLLIq_settingsDialog",
316
+ "monitorHint": "NPLLIq_monitorHint",
317
+ "input": "NPLLIq_input",
318
+ "tabIcon": "NPLLIq_tabIcon",
319
+ "noteWin": "NPLLIq_noteWin",
311
320
  "balanceRowValue": "NPLLIq_balanceRowValue",
312
- "dialogTab": "NPLLIq_dialogTab",
313
- "balanceRowRefresh": "NPLLIq_balanceRowRefresh",
314
- "monitorRow": "NPLLIq_monitorRow",
315
- "balanceToggleOpen": "NPLLIq_balanceToggleOpen",
316
- "noteWinGripBar": "NPLLIq_noteWinGripBar",
317
- "header": "NPLLIq_header",
318
- "headerActions": "NPLLIq_headerActions",
319
- "dialogClose": "NPLLIq_dialogClose",
321
+ "logToolbar": "NPLLIq_logToolbar",
322
+ "upgradeCommandRow": "NPLLIq_upgradeCommandRow",
323
+ "logPagerInfo": "NPLLIq_logPagerInfo",
320
324
  "row": "NPLLIq_row",
321
- "selectBtn": "NPLLIq_selectBtn",
325
+ "checkBtn": "NPLLIq_checkBtn",
326
+ "dialogHint": "NPLLIq_dialogHint",
327
+ "save": "NPLLIq_save",
328
+ "balanceSortBtn": "NPLLIq_balanceSortBtn",
329
+ "headerActions": "NPLLIq_headerActions",
322
330
  "monitorName": "NPLLIq_monitorName",
323
- "fillIdle": "NPLLIq_fillIdle",
324
- "dialogHeader": "NPLLIq_dialogHeader",
325
- "balanceBarLow": "NPLLIq_balanceBarLow",
326
- "noteWinResize": "NPLLIq_noteWinResize",
327
- "upgradeClose": "NPLLIq_upgradeClose",
331
+ "currentBadge": "NPLLIq_currentBadge",
332
+ "upgradeBannerText": "NPLLIq_upgradeBannerText",
333
+ "monitorList": "NPLLIq_monitorList",
334
+ "balanceWinBody": "NPLLIq_balanceWinBody",
335
+ "version": "NPLLIq_version",
336
+ "monitorRow": "NPLLIq_monitorRow",
337
+ "noteWinTitle": "NPLLIq_noteWinTitle",
328
338
  "balanceRow": "NPLLIq_balanceRow",
329
- "radioRow": "NPLLIq_radioRow",
339
+ "upgradeBanner": "NPLLIq_upgradeBanner",
340
+ "rowHeader": "NPLLIq_rowHeader",
341
+ "balanceBar": "NPLLIq_balanceBar",
342
+ "balanceBarRefresh": "NPLLIq_balanceBarRefresh",
343
+ "balanceStateError": "NPLLIq_balanceStateError",
344
+ "noteWinGripBar": "NPLLIq_noteWinGripBar",
345
+ "upgradeHint": "NPLLIq_upgradeHint",
346
+ "logPagerBtn": "NPLLIq_logPagerBtn",
330
347
  "headerText": "NPLLIq_headerText",
331
- "collapse": "NPLLIq_collapse",
332
- "tabLabel": "NPLLIq_tabLabel",
333
- "logClearBtn": "NPLLIq_logClearBtn",
334
- "rowDropTarget": "NPLLIq_rowDropTarget",
335
- "panel": "NPLLIq_panel",
336
- "upgradeCommands": "NPLLIq_upgradeCommands",
337
- "switch": "NPLLIq_switch",
338
- "subtitle": "NPLLIq_subtitle",
339
- "noteWinTitle": "NPLLIq_noteWinTitle",
340
- "balanceValueError": "NPLLIq_balanceValueError",
341
- "logScroll": "NPLLIq_logScroll",
348
+ "dialogClose": "NPLLIq_dialogClose",
342
349
  "noteNewPlus": "NPLLIq_noteNewPlus",
343
- "upgradeCommand": "NPLLIq_upgradeCommand",
344
- "logPagerControls": "NPLLIq_logPagerControls",
350
+ "noteWinTitleText": "NPLLIq_noteWinTitleText",
351
+ "balanceBarDim": "NPLLIq_balanceBarDim",
345
352
  "logClearDate": "NPLLIq_logClearDate",
346
- "logPagerBtn": "NPLLIq_logPagerBtn",
347
- "balanceSortBtn": "NPLLIq_balanceSortBtn",
348
- "tabIcon": "NPLLIq_tabIcon",
353
+ "gearBtn": "NPLLIq_gearBtn",
354
+ "balanceValueError": "NPLLIq_balanceValueError",
355
+ "fullNotice": "NPLLIq_fullNotice",
356
+ "rowDragging": "NPLLIq_rowDragging",
357
+ "fillWarn": "NPLLIq_fillWarn",
358
+ "collapse": "NPLLIq_collapse",
359
+ "panel": "NPLLIq_panel",
349
360
  "balanceWinTitle": "NPLLIq_balanceWinTitle",
350
- "balanceRowName": "NPLLIq_balanceRowName",
351
- "settingsDialog": "NPLLIq_settingsDialog",
352
- "noteMenuItem": "NPLLIq_noteMenuItem",
353
- "rowName": "NPLLIq_rowName",
354
- "copyBtn": "NPLLIq_copyBtn",
361
+ "balanceRefreshAll": "NPLLIq_balanceRefreshAll",
362
+ "logUsedCol": "NPLLIq_logUsedCol",
363
+ "balanceBarError": "NPLLIq_balanceBarError",
355
364
  "dialogTabs": "NPLLIq_dialogTabs",
356
- "logToolbar": "NPLLIq_logToolbar",
357
- "logDayCol": "NPLLIq_logDayCol",
358
- "balanceBarBadge": "NPLLIq_balanceBarBadge",
359
- "rowMeta": "NPLLIq_rowMeta",
360
- "upgradeHint": "NPLLIq_upgradeHint",
361
- "noteWinBtn": "NPLLIq_noteWinBtn",
365
+ "upgradeCommands": "NPLLIq_upgradeCommands",
362
366
  "balanceWin": "NPLLIq_balanceWin",
367
+ "logPagerPages": "NPLLIq_logPagerPages",
363
368
  "balanceValueOk": "NPLLIq_balanceValueOk",
364
- "notice": "NPLLIq_notice",
365
- "dialogOverlay": "NPLLIq_dialogOverlay",
369
+ "controls": "NPLLIq_controls",
370
+ "dialogBody": "NPLLIq_dialogBody",
371
+ "subtitle": "NPLLIq_subtitle",
372
+ "dialogSection": "NPLLIq_dialogSection",
373
+ "balanceRowHeader": "NPLLIq_balanceRowHeader",
374
+ "logDayCol": "NPLLIq_logDayCol",
375
+ "balanceBarText": "NPLLIq_balanceBarText",
376
+ "balanceRowName": "NPLLIq_balanceRowName",
377
+ "resetSelect": "NPLLIq_resetSelect",
378
+ "noteWinBtn": "NPLLIq_noteWinBtn",
379
+ "selectBtn": "NPLLIq_selectBtn",
366
380
  "dialogActions": "NPLLIq_dialogActions",
367
- "balanceBar": "NPLLIq_balanceBar",
368
- "checkErrorHint": "NPLLIq_checkErrorHint",
369
- "noteChipOpen": "NPLLIq_noteChipOpen",
370
- "dialogBtnPrimary": "NPLLIq_dialogBtnPrimary",
371
- "dialogTabActive": "NPLLIq_dialogTabActive",
372
- "noteChip": "NPLLIq_noteChip",
373
- "version": "NPLLIq_version",
381
+ "body": "NPLLIq_body",
382
+ "balanceLastLine": "NPLLIq_balanceLastLine",
383
+ "header": "NPLLIq_header",
384
+ "balanceBarLow": "NPLLIq_balanceBarLow",
374
385
  "dialog": "NPLLIq_dialog",
375
- "monitorList": "NPLLIq_monitorList",
376
- "dialogBtn": "NPLLIq_dialogBtn",
377
- "rowDragging": "NPLLIq_rowDragging",
378
- "balanceRowHeader": "NPLLIq_balanceRowHeader",
379
- "balanceValueLow": "NPLLIq_balanceValueLow",
380
- "logHeader": "NPLLIq_logHeader",
381
- "logPagerPages": "NPLLIq_logPagerPages",
382
- "tab": "NPLLIq_tab",
383
- "notesBar": "NPLLIq_notesBar",
384
- "dialogSection": "NPLLIq_dialogSection",
385
- "balanceRefreshAll": "NPLLIq_balanceRefreshAll",
386
- "balanceBarRefresh": "NPLLIq_balanceBarRefresh",
387
- "checkBtn": "NPLLIq_checkBtn",
388
- "panelDimStrong": "NPLLIq_panelDimStrong",
386
+ "noteMenu": "NPLLIq_noteMenu",
387
+ "title": "NPLLIq_title",
389
388
  "noteWinCollapsed": "NPLLIq_noteWinCollapsed",
390
- "noteWinBar": "NPLLIq_noteWinBar",
391
- "resetRow": "NPLLIq_resetRow"
389
+ "upgradeCommand": "NPLLIq_upgradeCommand",
390
+ "dialogBtnPrimary": "NPLLIq_dialogBtnPrimary",
391
+ "radioRow": "NPLLIq_radioRow"
392
392
  };
393
393
  //#endregion
394
394
  //#region lib/types/client/TokenQuotaPanel.js
@@ -987,6 +987,7 @@ window.__ModuleLoader__.load({
987
987
  setMetaToggle(0);
988
988
  return;
989
989
  }
990
+ setMetaToggle(1);
990
991
  const id = window.setInterval(() => {
991
992
  setMetaToggle((v) => (v + 1) % 2);
992
993
  }, 3e3);
@@ -1042,355 +1043,359 @@ window.__ModuleLoader__.load({
1042
1043
  onPointerLeave: () => {
1043
1044
  setHovered(false);
1044
1045
  },
1045
- children: [(0, react_jsx_runtime.jsxs)("div", {
1046
- className: TokenQuotaPanel_module_css_default.header,
1047
- onPointerDown: (event) => {
1048
- beginDrag(event, panelRef.current, applyPanelPos);
1049
- },
1050
- children: [(0, react_jsx_runtime.jsxs)("div", {
1051
- className: TokenQuotaPanel_module_css_default.headerText,
1052
- children: [(0, react_jsx_runtime.jsxs)("div", {
1053
- className: TokenQuotaPanel_module_css_default.title,
1054
- children: [t("title"), upgrade !== null ? (0, react_jsx_runtime.jsxs)("span", {
1055
- className: `${TokenQuotaPanel_module_css_default.version} ${TokenQuotaPanel_module_css_default.versionNew}`,
1056
- title: t("upgradeAvailableHint"),
1057
- children: [
1058
- "v",
1059
- "0.1.36",
1060
- " → v",
1061
- upgrade.latestVersion
1062
- ]
1063
- }) : (0, react_jsx_runtime.jsxs)("span", {
1064
- className: TokenQuotaPanel_module_css_default.version,
1065
- children: ["v", "0.1.36"]
1066
- })]
1046
+ children: [
1047
+ (0, react_jsx_runtime.jsxs)("div", {
1048
+ className: TokenQuotaPanel_module_css_default.header,
1049
+ onPointerDown: (event) => {
1050
+ beginDrag(event, panelRef.current, applyPanelPos);
1051
+ },
1052
+ children: [(0, react_jsx_runtime.jsx)("div", {
1053
+ className: TokenQuotaPanel_module_css_default.headerText,
1054
+ children: (0, react_jsx_runtime.jsxs)("div", {
1055
+ className: TokenQuotaPanel_module_css_default.title,
1056
+ children: [t("title"), upgrade !== null ? (0, react_jsx_runtime.jsxs)("span", {
1057
+ className: `${TokenQuotaPanel_module_css_default.version} ${TokenQuotaPanel_module_css_default.versionNew}`,
1058
+ title: t("upgradeAvailableHint"),
1059
+ children: [
1060
+ "v",
1061
+ "0.1.38",
1062
+ " → v",
1063
+ upgrade.latestVersion
1064
+ ]
1065
+ }) : (0, react_jsx_runtime.jsxs)("span", {
1066
+ className: TokenQuotaPanel_module_css_default.version,
1067
+ children: ["v", "0.1.38"]
1068
+ })]
1069
+ })
1067
1070
  }), (0, react_jsx_runtime.jsxs)("div", {
1068
- className: TokenQuotaPanel_module_css_default.notesBar,
1071
+ className: TokenQuotaPanel_module_css_default.headerActions,
1069
1072
  onPointerDown: (event) => {
1070
1073
  event.stopPropagation();
1071
1074
  },
1072
1075
  children: [
1073
- notes.map((note) => {
1074
- const open = note.visible && !note.collapsed;
1075
- return (0, react_jsx_runtime.jsx)("button", {
1076
- type: "button",
1077
- className: `${TokenQuotaPanel_module_css_default.noteChip}${open ? ` ${TokenQuotaPanel_module_css_default.noteChipOpen}` : ""}`,
1078
- title: note.title.trim() === "" ? t("noteUntitled") : note.title,
1079
- onClick: () => {
1080
- patchNote(note.id, {
1081
- visible: true,
1082
- collapsed: false
1083
- });
1084
- },
1085
- onContextMenu: (event) => {
1086
- event.preventDefault();
1087
- setNoteMenu({
1088
- id: note.id,
1089
- x: event.clientX,
1090
- y: event.clientY
1091
- });
1092
- },
1093
- children: noteInitial(note.title)
1094
- }, note.id);
1076
+ (0, react_jsx_runtime.jsx)("button", {
1077
+ type: "button",
1078
+ "aria-pressed": musicEnabled,
1079
+ className: `${TokenQuotaPanel_module_css_default.settingsBtn}${musicEnabled ? ` ${TokenQuotaPanel_module_css_default.settingsBtnActive}` : ""}`,
1080
+ title: `${t("musicLabel")}:${musicEnabled ? t("musicOn") : t("musicOff")}`,
1081
+ onClick: () => {
1082
+ setMusicEnabled(!musicEnabled);
1083
+ },
1084
+ children: "♪"
1095
1085
  }),
1096
- (0, react_jsx_runtime.jsxs)("button", {
1086
+ (0, react_jsx_runtime.jsx)("button", {
1097
1087
  type: "button",
1098
- className: TokenQuotaPanel_module_css_default.noteNew,
1099
- disabled: notes.length >= 5,
1100
- title: notes.length >= 5 ? t("noteMaxHint") : t("noteNewHint"),
1101
- onClick: createNote,
1102
- children: [(0, react_jsx_runtime.jsxs)("svg", {
1103
- viewBox: "0 0 16 16",
1104
- width: "13",
1105
- height: "13",
1106
- "aria-hidden": "true",
1107
- children: [(0, react_jsx_runtime.jsx)("path", {
1108
- d: "M4 1.6h4.6L12.4 5.4v9H4z",
1109
- fill: "none",
1110
- stroke: "currentColor",
1111
- strokeWidth: "1.2",
1112
- strokeLinejoin: "round"
1113
- }), (0, react_jsx_runtime.jsx)("path", {
1114
- d: "M8.4 1.6v3.9h4",
1115
- fill: "none",
1116
- stroke: "currentColor",
1117
- strokeWidth: "1.2",
1118
- strokeLinejoin: "round"
1119
- })]
1120
- }), (0, react_jsx_runtime.jsx)("span", {
1121
- className: TokenQuotaPanel_module_css_default.noteNewPlus,
1122
- children: "+"
1123
- })]
1088
+ className: TokenQuotaPanel_module_css_default.settingsBtn,
1089
+ onClick: () => {
1090
+ actions.setLogOpen(true);
1091
+ },
1092
+ children: t("logs")
1124
1093
  }),
1125
- balanceEnabled && (0, react_jsx_runtime.jsx)("button", {
1094
+ (0, react_jsx_runtime.jsx)("button", {
1126
1095
  type: "button",
1127
- className: `${TokenQuotaPanel_module_css_default.noteNew} ${TokenQuotaPanel_module_css_default.balanceToggle}${balanceOpen ? ` ${TokenQuotaPanel_module_css_default.balanceToggleOpen}` : ""}`,
1128
- title: t("balanceTitle"),
1096
+ className: TokenQuotaPanel_module_css_default.settingsBtn,
1097
+ onClick: openSettings,
1098
+ children: t("settings")
1099
+ }),
1100
+ (0, react_jsx_runtime.jsx)("button", {
1101
+ type: "button",
1102
+ className: TokenQuotaPanel_module_css_default.collapse,
1129
1103
  onClick: () => {
1130
- if (balanceOpen) {
1131
- setBalanceOpen(false);
1132
- return;
1133
- }
1134
- const winW = 280;
1135
- const rect = panelRef.current?.getBoundingClientRect();
1136
- if (rect !== void 0) setBalancePos({
1137
- x: Math.max(8, rect.left - winW - 8),
1138
- y: rect.top
1139
- });
1140
- else setBalancePos({
1141
- x: Math.max(8, (typeof window !== "undefined" ? window.innerWidth : 800) - 12 - 320 - winW - 8),
1142
- y: 56
1143
- });
1144
- setBalanceOpen(true);
1104
+ setCollapsed(true);
1145
1105
  },
1146
- "aria-pressed": balanceOpen,
1147
- children: (0, react_jsx_runtime.jsxs)("svg", {
1148
- viewBox: "0 0 16 16",
1149
- width: "13",
1150
- height: "13",
1151
- "aria-hidden": "true",
1152
- children: [(0, react_jsx_runtime.jsx)("circle", {
1153
- cx: "8",
1154
- cy: "8",
1155
- r: "6.3",
1156
- fill: "none",
1157
- stroke: "currentColor",
1158
- strokeWidth: "1.3"
1159
- }), (0, react_jsx_runtime.jsx)("text", {
1160
- x: "8",
1161
- y: "11",
1162
- textAnchor: "middle",
1163
- fontSize: "9",
1164
- fontWeight: "700",
1165
- fill: "currentColor",
1166
- children: "¥"
1167
- })]
1168
- })
1106
+ children: t("collapse")
1169
1107
  })
1170
1108
  ]
1171
1109
  })]
1172
- }), (0, react_jsx_runtime.jsxs)("div", {
1173
- className: TokenQuotaPanel_module_css_default.headerActions,
1110
+ }),
1111
+ (0, react_jsx_runtime.jsxs)("div", {
1112
+ className: TokenQuotaPanel_module_css_default.notesBar,
1174
1113
  onPointerDown: (event) => {
1175
1114
  event.stopPropagation();
1176
1115
  },
1177
1116
  children: [
1178
- (0, react_jsx_runtime.jsx)("button", {
1179
- type: "button",
1180
- "aria-pressed": musicEnabled,
1181
- className: `${TokenQuotaPanel_module_css_default.settingsBtn}${musicEnabled ? ` ${TokenQuotaPanel_module_css_default.settingsBtnActive}` : ""}`,
1182
- title: `${t("musicLabel")}:${musicEnabled ? t("musicOn") : t("musicOff")}`,
1183
- onClick: () => {
1184
- setMusicEnabled(!musicEnabled);
1185
- },
1186
- children: "♪"
1187
- }),
1188
- (0, react_jsx_runtime.jsx)("button", {
1189
- type: "button",
1190
- className: TokenQuotaPanel_module_css_default.settingsBtn,
1191
- onClick: () => {
1192
- actions.setLogOpen(true);
1193
- },
1194
- children: t("logs")
1117
+ notes.map((note) => {
1118
+ const open = note.visible && !note.collapsed;
1119
+ return (0, react_jsx_runtime.jsx)("button", {
1120
+ type: "button",
1121
+ className: `${TokenQuotaPanel_module_css_default.noteChip}${open ? ` ${TokenQuotaPanel_module_css_default.noteChipOpen}` : ""}`,
1122
+ title: note.title.trim() === "" ? t("noteUntitled") : note.title,
1123
+ onClick: () => {
1124
+ patchNote(note.id, {
1125
+ visible: true,
1126
+ collapsed: false
1127
+ });
1128
+ },
1129
+ onContextMenu: (event) => {
1130
+ event.preventDefault();
1131
+ setNoteMenu({
1132
+ id: note.id,
1133
+ x: event.clientX,
1134
+ y: event.clientY
1135
+ });
1136
+ },
1137
+ children: noteInitial(note.title)
1138
+ }, note.id);
1195
1139
  }),
1196
- (0, react_jsx_runtime.jsx)("button", {
1140
+ (0, react_jsx_runtime.jsxs)("button", {
1197
1141
  type: "button",
1198
- className: TokenQuotaPanel_module_css_default.settingsBtn,
1199
- onClick: openSettings,
1200
- children: t("settings")
1142
+ className: TokenQuotaPanel_module_css_default.noteNew,
1143
+ disabled: notes.length >= 5,
1144
+ title: notes.length >= 5 ? t("noteMaxHint") : t("noteNewHint"),
1145
+ onClick: createNote,
1146
+ children: [(0, react_jsx_runtime.jsxs)("svg", {
1147
+ viewBox: "0 0 16 16",
1148
+ width: "13",
1149
+ height: "13",
1150
+ "aria-hidden": "true",
1151
+ children: [(0, react_jsx_runtime.jsx)("path", {
1152
+ d: "M4 1.6h4.6L12.4 5.4v9H4z",
1153
+ fill: "none",
1154
+ stroke: "currentColor",
1155
+ strokeWidth: "1.2",
1156
+ strokeLinejoin: "round"
1157
+ }), (0, react_jsx_runtime.jsx)("path", {
1158
+ d: "M8.4 1.6v3.9h4",
1159
+ fill: "none",
1160
+ stroke: "currentColor",
1161
+ strokeWidth: "1.2",
1162
+ strokeLinejoin: "round"
1163
+ })]
1164
+ }), (0, react_jsx_runtime.jsx)("span", {
1165
+ className: TokenQuotaPanel_module_css_default.noteNewPlus,
1166
+ children: "+"
1167
+ })]
1201
1168
  }),
1202
- (0, react_jsx_runtime.jsx)("button", {
1169
+ balanceEnabled && (0, react_jsx_runtime.jsx)("button", {
1203
1170
  type: "button",
1204
- className: TokenQuotaPanel_module_css_default.collapse,
1171
+ className: `${TokenQuotaPanel_module_css_default.noteNew} ${TokenQuotaPanel_module_css_default.balanceToggle}${balanceOpen ? ` ${TokenQuotaPanel_module_css_default.balanceToggleOpen}` : ""}`,
1172
+ title: t("balanceTitle"),
1205
1173
  onClick: () => {
1206
- setCollapsed(true);
1174
+ if (balanceOpen) {
1175
+ setBalanceOpen(false);
1176
+ return;
1177
+ }
1178
+ const winW = 280;
1179
+ const rect = panelRef.current?.getBoundingClientRect();
1180
+ if (rect !== void 0) setBalancePos({
1181
+ x: Math.max(8, rect.left - winW - 8),
1182
+ y: rect.top
1183
+ });
1184
+ else setBalancePos({
1185
+ x: Math.max(8, (typeof window !== "undefined" ? window.innerWidth : 800) - 12 - 320 - winW - 8),
1186
+ y: 56
1187
+ });
1188
+ setBalanceOpen(true);
1207
1189
  },
1208
- children: t("collapse")
1190
+ "aria-pressed": balanceOpen,
1191
+ children: (0, react_jsx_runtime.jsxs)("svg", {
1192
+ viewBox: "0 0 16 16",
1193
+ width: "13",
1194
+ height: "13",
1195
+ "aria-hidden": "true",
1196
+ children: [(0, react_jsx_runtime.jsx)("circle", {
1197
+ cx: "8",
1198
+ cy: "8",
1199
+ r: "6.3",
1200
+ fill: "none",
1201
+ stroke: "currentColor",
1202
+ strokeWidth: "1.3"
1203
+ }), (0, react_jsx_runtime.jsx)("text", {
1204
+ x: "8",
1205
+ y: "11",
1206
+ textAnchor: "middle",
1207
+ fontSize: "9",
1208
+ fontWeight: "700",
1209
+ fill: "currentColor",
1210
+ children: "¥"
1211
+ })]
1212
+ })
1209
1213
  })
1210
1214
  ]
1211
- })]
1212
- }), (0, react_jsx_runtime.jsxs)("div", {
1213
- className: TokenQuotaPanel_module_css_default.body,
1214
- children: [
1215
- loading && (0, react_jsx_runtime.jsx)("div", {
1216
- className: TokenQuotaPanel_module_css_default.notice,
1217
- children: t("loading")
1218
- }),
1219
- error !== null && (0, react_jsx_runtime.jsx)("div", {
1220
- className: TokenQuotaPanel_module_css_default.noticeError,
1221
- children: error
1222
- }),
1223
- fullNotice !== null && (0, react_jsx_runtime.jsx)("div", {
1224
- className: TokenQuotaPanel_module_css_default.fullNotice,
1225
- role: "alert",
1226
- children: fullNotice
1227
- }),
1228
- upgrade !== null && !upgradeDismissed && (0, react_jsx_runtime.jsxs)("div", {
1229
- className: `${TokenQuotaPanel_module_css_default.upgradeBanner}${upgradeFlash ? ` ${TokenQuotaPanel_module_css_default.upgradeBannerFlash}` : ""}`,
1230
- role: "alert",
1231
- children: [
1232
- (0, react_jsx_runtime.jsx)("div", {
1233
- className: TokenQuotaPanel_module_css_default.upgradeBannerText,
1234
- children: t("upgradeAvailable").replace("{version}", upgrade.latestVersion)
1235
- }),
1236
- (0, react_jsx_runtime.jsx)("div", {
1237
- className: TokenQuotaPanel_module_css_default.upgradeCommands,
1238
- children: upgrade.commands.map((cmd) => (0, react_jsx_runtime.jsxs)("div", {
1239
- className: TokenQuotaPanel_module_css_default.upgradeCommandRow,
1240
- children: [(0, react_jsx_runtime.jsx)("code", {
1241
- className: TokenQuotaPanel_module_css_default.upgradeCommand,
1242
- children: cmd
1243
- }), (0, react_jsx_runtime.jsx)("button", {
1244
- type: "button",
1245
- className: `${TokenQuotaPanel_module_css_default.copyBtn}${copiedCmd === cmd ? ` ${TokenQuotaPanel_module_css_default.copyBtnDone}` : ""}`,
1246
- onClick: () => {
1247
- copyUpgradeCommand(cmd);
1248
- },
1249
- children: copiedCmd === cmd ? t("copied") : t("copy")
1250
- })]
1251
- }, cmd))
1252
- }),
1253
- (0, react_jsx_runtime.jsx)("div", {
1254
- className: TokenQuotaPanel_module_css_default.upgradeHint,
1255
- children: t("upgradeHint")
1256
- }),
1257
- (0, react_jsx_runtime.jsx)("button", {
1258
- type: "button",
1259
- className: TokenQuotaPanel_module_css_default.upgradeClose,
1260
- onClick: () => {
1261
- actions.setUpgradeDismissed(true);
1262
- },
1263
- "aria-label": t("close"),
1264
- children: "×"
1265
- })
1266
- ]
1267
- }),
1268
- !loading && error === null && visibleRows.length === 0 && (0, react_jsx_runtime.jsx)("div", {
1269
- className: TokenQuotaPanel_module_css_default.notice,
1270
- children: monitored !== null && monitored.length === 0 ? t("noMonitored") : t("waiting")
1271
- }),
1272
- visibleRows.map((row) => {
1273
- const state = barStateOf(row);
1274
- const pct = row.limit > 0 ? Math.min(100, Math.round(row.used / row.limit * 100)) : 0;
1275
- const barClass = state === "over" ? TokenQuotaPanel_module_css_default.fillOver : state === "warn" ? TokenQuotaPanel_module_css_default.fillWarn : TokenQuotaPanel_module_css_default.fillIdle;
1276
- const editing = editingKey === row.key;
1277
- return (0, react_jsx_runtime.jsxs)("div", {
1278
- className: `${TokenQuotaPanel_module_css_default.row}${dragKey === row.key ? ` ${TokenQuotaPanel_module_css_default.rowDragging}` : ""}${dropKey === row.key && dragKey !== row.key ? ` ${TokenQuotaPanel_module_css_default.rowDropTarget}` : ""}`,
1279
- onMouseEnter: () => {
1280
- setHoveredRowKey(row.key);
1281
- triggerRowBalanceRefreshIfStale(row.provider);
1282
- },
1283
- onMouseLeave: () => {
1284
- setHoveredRowKey((prev) => prev === row.key ? null : prev);
1285
- },
1286
- onDragOver: (event) => {
1287
- if (dragKey === null || dragKey === row.key) return;
1288
- event.preventDefault();
1289
- setDropKey(row.key);
1290
- },
1291
- onDrop: (event) => {
1292
- event.preventDefault();
1293
- if (dragKey !== null && dragKey !== row.key) setModelOrder(reorderKeys(rows.map((r) => r.key), dragKey, row.key));
1294
- setDragKey(null);
1295
- setDropKey(null);
1296
- },
1297
- onDragEnd: () => {
1298
- setDragKey(null);
1299
- setDropKey(null);
1300
- },
1215
+ }),
1216
+ (0, react_jsx_runtime.jsxs)("div", {
1217
+ className: TokenQuotaPanel_module_css_default.body,
1218
+ children: [
1219
+ loading && (0, react_jsx_runtime.jsx)("div", {
1220
+ className: TokenQuotaPanel_module_css_default.notice,
1221
+ children: t("loading")
1222
+ }),
1223
+ error !== null && (0, react_jsx_runtime.jsx)("div", {
1224
+ className: TokenQuotaPanel_module_css_default.noticeError,
1225
+ children: error
1226
+ }),
1227
+ fullNotice !== null && (0, react_jsx_runtime.jsx)("div", {
1228
+ className: TokenQuotaPanel_module_css_default.fullNotice,
1229
+ role: "alert",
1230
+ children: fullNotice
1231
+ }),
1232
+ upgrade !== null && !upgradeDismissed && (0, react_jsx_runtime.jsxs)("div", {
1233
+ className: `${TokenQuotaPanel_module_css_default.upgradeBanner}${upgradeFlash ? ` ${TokenQuotaPanel_module_css_default.upgradeBannerFlash}` : ""}`,
1234
+ role: "alert",
1301
1235
  children: [
1302
- (0, react_jsx_runtime.jsxs)("div", {
1303
- className: TokenQuotaPanel_module_css_default.rowHeader,
1304
- children: [
1305
- (0, react_jsx_runtime.jsx)("span", {
1306
- className: TokenQuotaPanel_module_css_default.rowDrag,
1307
- draggable: true,
1308
- title: t("reorderHint"),
1309
- onDragStart: (event) => {
1310
- setDragKey(row.key);
1311
- event.dataTransfer.effectAllowed = "move";
1312
- event.dataTransfer.setData("text/plain", row.key);
1236
+ (0, react_jsx_runtime.jsx)("div", {
1237
+ className: TokenQuotaPanel_module_css_default.upgradeBannerText,
1238
+ children: t("upgradeAvailable").replace("{version}", upgrade.latestVersion)
1239
+ }),
1240
+ (0, react_jsx_runtime.jsx)("div", {
1241
+ className: TokenQuotaPanel_module_css_default.upgradeCommands,
1242
+ children: upgrade.commands.map((cmd) => (0, react_jsx_runtime.jsxs)("div", {
1243
+ className: TokenQuotaPanel_module_css_default.upgradeCommandRow,
1244
+ children: [(0, react_jsx_runtime.jsx)("code", {
1245
+ className: TokenQuotaPanel_module_css_default.upgradeCommand,
1246
+ children: cmd
1247
+ }), (0, react_jsx_runtime.jsx)("button", {
1248
+ type: "button",
1249
+ className: `${TokenQuotaPanel_module_css_default.copyBtn}${copiedCmd === cmd ? ` ${TokenQuotaPanel_module_css_default.copyBtnDone}` : ""}`,
1250
+ onClick: () => {
1251
+ copyUpgradeCommand(cmd);
1313
1252
  },
1314
- children: "⠿"
1315
- }),
1316
- (0, react_jsx_runtime.jsxs)("span", {
1317
- className: TokenQuotaPanel_module_css_default.rowName,
1318
- title: row.key,
1319
- children: [
1320
- row.name,
1321
- row.current && (0, react_jsx_runtime.jsx)("span", {
1322
- className: TokenQuotaPanel_module_css_default.currentBadge,
1323
- children: t("current")
1324
- }),
1325
- sessionId !== void 0 && !row.current && (0, react_jsx_runtime.jsx)("button", {
1326
- type: "button",
1327
- className: TokenQuotaPanel_module_css_default.selectBtn,
1328
- onClick: () => {
1329
- selectModel(sessionId, row.provider, row.model);
1330
- },
1331
- children: t("select")
1332
- })
1333
- ]
1334
- }),
1335
- (0, react_jsx_runtime.jsxs)("span", {
1336
- className: TokenQuotaPanel_module_css_default.rowMeta,
1337
- children: [(() => {
1338
- const bt = balanceTextForRow(row);
1339
- return hoveredRowKey === row.key && bt.text !== "" && metaToggle === 1 ? (0, react_jsx_runtime.jsx)("span", {
1340
- className: bt.cls,
1341
- children: bt.text
1342
- }) : (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: quotaText(row) });
1343
- })(), (0, react_jsx_runtime.jsx)("button", {
1344
- type: "button",
1345
- className: TokenQuotaPanel_module_css_default.gearBtn,
1346
- title: t("setLimitHint"),
1347
- onClick: () => {
1348
- setEditingKey(editing ? null : row.key);
1349
- },
1350
- children: "⚙"
1351
- })]
1352
- })
1353
- ]
1253
+ children: copiedCmd === cmd ? t("copied") : t("copy")
1254
+ })]
1255
+ }, cmd))
1354
1256
  }),
1355
1257
  (0, react_jsx_runtime.jsx)("div", {
1356
- className: TokenQuotaPanel_module_css_default.bar,
1357
- children: (0, react_jsx_runtime.jsx)("div", {
1358
- className: barClass,
1359
- style: { width: `${pct}%` }
1360
- })
1258
+ className: TokenQuotaPanel_module_css_default.upgradeHint,
1259
+ children: t("upgradeHint")
1361
1260
  }),
1362
- editing && (0, react_jsx_runtime.jsxs)("div", {
1363
- className: TokenQuotaPanel_module_css_default.controls,
1364
- children: [(0, react_jsx_runtime.jsx)("input", {
1365
- className: TokenQuotaPanel_module_css_default.input,
1366
- type: "number",
1367
- min: 0,
1368
- step: 1e4,
1369
- placeholder: t("limitPlaceholder"),
1370
- value: drafts[row.key] ?? "",
1371
- onChange: (event) => {
1372
- setDrafts((prev) => ({
1373
- ...prev,
1374
- [row.key]: event.target.value
1375
- }));
1376
- },
1377
- onKeyDown: (event) => {
1378
- if (event.key === "Enter") commitLimit(row);
1379
- }
1380
- }), (0, react_jsx_runtime.jsx)("button", {
1381
- type: "button",
1382
- className: TokenQuotaPanel_module_css_default.save,
1383
- onClick: () => {
1384
- commitLimit(row);
1385
- },
1386
- children: t("save")
1387
- })]
1261
+ (0, react_jsx_runtime.jsx)("button", {
1262
+ type: "button",
1263
+ className: TokenQuotaPanel_module_css_default.upgradeClose,
1264
+ onClick: () => {
1265
+ actions.setUpgradeDismissed(true);
1266
+ },
1267
+ "aria-label": t("close"),
1268
+ children: "×"
1388
1269
  })
1389
1270
  ]
1390
- }, row.key);
1391
- })
1392
- ]
1393
- })]
1271
+ }),
1272
+ !loading && error === null && visibleRows.length === 0 && (0, react_jsx_runtime.jsx)("div", {
1273
+ className: TokenQuotaPanel_module_css_default.notice,
1274
+ children: monitored !== null && monitored.length === 0 ? t("noMonitored") : t("waiting")
1275
+ }),
1276
+ visibleRows.map((row) => {
1277
+ const state = barStateOf(row);
1278
+ const pct = row.limit > 0 ? Math.min(100, Math.round(row.used / row.limit * 100)) : 0;
1279
+ const barClass = state === "over" ? TokenQuotaPanel_module_css_default.fillOver : state === "warn" ? TokenQuotaPanel_module_css_default.fillWarn : TokenQuotaPanel_module_css_default.fillIdle;
1280
+ const editing = editingKey === row.key;
1281
+ return (0, react_jsx_runtime.jsxs)("div", {
1282
+ className: `${TokenQuotaPanel_module_css_default.row}${dragKey === row.key ? ` ${TokenQuotaPanel_module_css_default.rowDragging}` : ""}${dropKey === row.key && dragKey !== row.key ? ` ${TokenQuotaPanel_module_css_default.rowDropTarget}` : ""}`,
1283
+ onMouseEnter: () => {
1284
+ setHoveredRowKey(row.key);
1285
+ triggerRowBalanceRefreshIfStale(row.provider);
1286
+ },
1287
+ onMouseLeave: () => {
1288
+ setHoveredRowKey((prev) => prev === row.key ? null : prev);
1289
+ },
1290
+ onDragOver: (event) => {
1291
+ if (dragKey === null || dragKey === row.key) return;
1292
+ event.preventDefault();
1293
+ setDropKey(row.key);
1294
+ },
1295
+ onDrop: (event) => {
1296
+ event.preventDefault();
1297
+ if (dragKey !== null && dragKey !== row.key) setModelOrder(reorderKeys(rows.map((r) => r.key), dragKey, row.key));
1298
+ setDragKey(null);
1299
+ setDropKey(null);
1300
+ },
1301
+ onDragEnd: () => {
1302
+ setDragKey(null);
1303
+ setDropKey(null);
1304
+ },
1305
+ children: [
1306
+ (0, react_jsx_runtime.jsxs)("div", {
1307
+ className: TokenQuotaPanel_module_css_default.rowHeader,
1308
+ children: [
1309
+ (0, react_jsx_runtime.jsx)("span", {
1310
+ className: TokenQuotaPanel_module_css_default.rowDrag,
1311
+ draggable: true,
1312
+ title: t("reorderHint"),
1313
+ onDragStart: (event) => {
1314
+ setDragKey(row.key);
1315
+ event.dataTransfer.effectAllowed = "move";
1316
+ event.dataTransfer.setData("text/plain", row.key);
1317
+ },
1318
+ children: "⠿"
1319
+ }),
1320
+ (0, react_jsx_runtime.jsxs)("span", {
1321
+ className: TokenQuotaPanel_module_css_default.rowName,
1322
+ title: row.key,
1323
+ children: [
1324
+ row.name,
1325
+ row.current && (0, react_jsx_runtime.jsx)("span", {
1326
+ className: TokenQuotaPanel_module_css_default.currentBadge,
1327
+ children: t("current")
1328
+ }),
1329
+ sessionId !== void 0 && !row.current && (0, react_jsx_runtime.jsx)("button", {
1330
+ type: "button",
1331
+ className: TokenQuotaPanel_module_css_default.selectBtn,
1332
+ onClick: () => {
1333
+ selectModel(sessionId, row.provider, row.model);
1334
+ },
1335
+ children: t("select")
1336
+ })
1337
+ ]
1338
+ }),
1339
+ (0, react_jsx_runtime.jsxs)("span", {
1340
+ className: TokenQuotaPanel_module_css_default.rowMeta,
1341
+ children: [(() => {
1342
+ const bt = balanceTextForRow(row);
1343
+ return hoveredRowKey === row.key && bt.text !== "" && metaToggle === 1 ? (0, react_jsx_runtime.jsx)("span", {
1344
+ className: bt.cls,
1345
+ children: bt.text
1346
+ }) : (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: quotaText(row) });
1347
+ })(), (0, react_jsx_runtime.jsx)("button", {
1348
+ type: "button",
1349
+ className: TokenQuotaPanel_module_css_default.gearBtn,
1350
+ title: t("setLimitHint"),
1351
+ onClick: () => {
1352
+ setEditingKey(editing ? null : row.key);
1353
+ },
1354
+ children: "⚙"
1355
+ })]
1356
+ })
1357
+ ]
1358
+ }),
1359
+ (0, react_jsx_runtime.jsx)("div", {
1360
+ className: TokenQuotaPanel_module_css_default.bar,
1361
+ children: (0, react_jsx_runtime.jsx)("div", {
1362
+ className: barClass,
1363
+ style: { width: `${pct}%` }
1364
+ })
1365
+ }),
1366
+ editing && (0, react_jsx_runtime.jsxs)("div", {
1367
+ className: TokenQuotaPanel_module_css_default.controls,
1368
+ children: [(0, react_jsx_runtime.jsx)("input", {
1369
+ className: TokenQuotaPanel_module_css_default.input,
1370
+ type: "number",
1371
+ min: 0,
1372
+ step: 1e4,
1373
+ placeholder: t("limitPlaceholder"),
1374
+ value: drafts[row.key] ?? "",
1375
+ onChange: (event) => {
1376
+ setDrafts((prev) => ({
1377
+ ...prev,
1378
+ [row.key]: event.target.value
1379
+ }));
1380
+ },
1381
+ onKeyDown: (event) => {
1382
+ if (event.key === "Enter") commitLimit(row);
1383
+ }
1384
+ }), (0, react_jsx_runtime.jsx)("button", {
1385
+ type: "button",
1386
+ className: TokenQuotaPanel_module_css_default.save,
1387
+ onClick: () => {
1388
+ commitLimit(row);
1389
+ },
1390
+ children: t("save")
1391
+ })]
1392
+ })
1393
+ ]
1394
+ }, row.key);
1395
+ })
1396
+ ]
1397
+ })
1398
+ ]
1394
1399
  }),
1395
1400
  dialogOpen && (0, react_jsx_runtime.jsxs)("div", {
1396
1401
  ref: settingsRef,
@@ -1803,14 +1808,6 @@ window.__ModuleLoader__.load({
1803
1808
  })
1804
1809
  ]
1805
1810
  }),
1806
- (0, react_jsx_runtime.jsxs)("div", {
1807
- className: TokenQuotaPanel_module_css_default.balanceRow,
1808
- children: [
1809
- (0, react_jsx_runtime.jsx)("span", { className: TokenQuotaPanel_module_css_default.balanceRowName }),
1810
- (0, react_jsx_runtime.jsx)("span", { className: TokenQuotaPanel_module_css_default.balanceRowValue }),
1811
- (0, react_jsx_runtime.jsx)("span", { className: TokenQuotaPanel_module_css_default.balanceRowRefresh })
1812
- ]
1813
- }),
1814
1811
  sortedProviders.map((provider) => {
1815
1812
  const cell = renderProviderCell(provider);
1816
1813
  const busy = refreshingProvider === provider || balanceByProvider.get(provider) === "loading";
package/lib/index.js CHANGED
@@ -619,7 +619,7 @@ var TokenQuotaService = class TokenQuotaService extends Service {
619
619
  return this.upgradeCheck;
620
620
  }
621
621
  async doRefreshUpgrade() {
622
- const current = "0.1.36";
622
+ const current = "0.1.38";
623
623
  let latest;
624
624
  try {
625
625
  const response = await fetch(REGISTRY_LATEST_URL, {
@@ -681,6 +681,8 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
681
681
  setMetaToggle(0);
682
682
  return;
683
683
  }
684
+ // Show the balance immediately on hover, then flip every 3s.
685
+ setMetaToggle(1);
684
686
  const id = window.setInterval(() => { setMetaToggle(v => (v + 1) % 2); }, 3000);
685
687
  return () => { window.clearInterval(id); };
686
688
  }, [hoveredRowKey, balances]);
@@ -723,32 +725,32 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
723
725
  const panelDimClass = dimWhenIdle
724
726
  ? (hovered || upgradeFlash ? '' : inputActive ? css.panelDimStrong : css.panelDim)
725
727
  : '';
726
- return (_jsxs(_Fragment, { children: [_jsxs("div", { ref: panelRef, className: `${css.panel}${panelDimClass !== '' ? ` ${panelDimClass}` : ''}`, style: panelPos !== null ? { left: panelPos.x, top: panelPos.y, right: 'auto' } : undefined, onPointerEnter: () => { setHovered(true); }, onPointerLeave: () => { setHovered(false); }, children: [_jsxs("div", { className: css.header, onPointerDown: (event) => { beginDrag(event, panelRef.current, applyPanelPos); }, children: [_jsxs("div", { className: css.headerText, children: [_jsxs("div", { className: css.title, children: [t('title'), __TOKEN_QUOTA_VERSION__ !== undefined && __TOKEN_QUOTA_VERSION__ !== '' && (upgrade !== null
727
- ? (_jsxs("span", { className: `${css.version} ${css.versionNew}`, title: t('upgradeAvailableHint'), children: ["v", __TOKEN_QUOTA_VERSION__, " \u2192 v", upgrade.latestVersion] }))
728
- : (_jsxs("span", { className: css.version, children: ["v", __TOKEN_QUOTA_VERSION__] })))] }), _jsxs("div", { className: css.notesBar, onPointerDown: (event) => { event.stopPropagation(); }, children: [notes.map((note) => {
729
- const open = note.visible && !note.collapsed;
730
- return (_jsx("button", { type: "button", className: `${css.noteChip}${open ? ` ${css.noteChipOpen}` : ''}`, title: note.title.trim() === '' ? t('noteUntitled') : note.title, onClick: () => { patchNote(note.id, { visible: true, collapsed: false }); }, onContextMenu: (event) => {
731
- event.preventDefault();
732
- setNoteMenu({ id: note.id, x: event.clientX, y: event.clientY });
733
- }, children: noteInitial(note.title) }, note.id));
734
- }), _jsxs("button", { type: "button", className: css.noteNew, disabled: notes.length >= TOKEN_QUOTA_MAX_NOTES, title: notes.length >= TOKEN_QUOTA_MAX_NOTES ? t('noteMaxHint') : t('noteNewHint'), onClick: createNote, children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", "aria-hidden": "true", children: [_jsx("path", { d: "M4 1.6h4.6L12.4 5.4v9H4z", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinejoin: "round" }), _jsx("path", { d: "M8.4 1.6v3.9h4", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinejoin: "round" })] }), _jsx("span", { className: css.noteNewPlus, children: "+" })] }), balanceEnabled && (_jsx("button", { type: "button", className: `${css.noteNew} ${css.balanceToggle}${balanceOpen ? ` ${css.balanceToggleOpen}` : ''}`, title: t('balanceTitle'), onClick: () => {
735
- if (balanceOpen) {
736
- setBalanceOpen(false);
737
- return;
738
- }
739
- const winW = 280;
740
- const rect = panelRef.current?.getBoundingClientRect();
741
- if (rect !== undefined) {
742
- setBalancePos({
743
- x: Math.max(8, rect.left - winW - 8),
744
- y: rect.top,
745
- });
746
- }
747
- else {
748
- setBalancePos({ x: Math.max(8, (typeof window !== 'undefined' ? window.innerWidth : 800) - 12 - 320 - winW - 8), y: 56 });
749
- }
750
- setBalanceOpen(true);
751
- }, "aria-pressed": balanceOpen, children: _jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.3", fill: "none", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("text", { x: "8", y: "11", textAnchor: "middle", fontSize: "9", fontWeight: "700", fill: "currentColor", children: "\u00A5" })] }) }))] })] }), _jsxs("div", { className: css.headerActions, onPointerDown: (event) => { event.stopPropagation(); }, children: [_jsx("button", { type: "button", "aria-pressed": musicEnabled, className: `${css.settingsBtn}${musicEnabled ? ` ${css.settingsBtnActive}` : ''}`, title: `${t('musicLabel')}:${musicEnabled ? t('musicOn') : t('musicOff')}`, onClick: () => { setMusicEnabled(!musicEnabled); }, children: "\u266A" }), _jsx("button", { type: "button", className: css.settingsBtn, onClick: () => { actions.setLogOpen(true); }, children: t('logs') }), _jsx("button", { type: "button", className: css.settingsBtn, onClick: openSettings, children: t('settings') }), _jsx("button", { type: "button", className: css.collapse, onClick: () => { setCollapsed(true); }, children: t('collapse') })] })] }), _jsxs("div", { className: css.body, children: [loading && _jsx("div", { className: css.notice, children: t('loading') }), error !== null && _jsx("div", { className: css.noticeError, children: error }), fullNotice !== null && (_jsx("div", { className: css.fullNotice, role: "alert", children: fullNotice })), upgrade !== null && !upgradeDismissed && (_jsxs("div", { className: `${css.upgradeBanner}${upgradeFlash ? ` ${css.upgradeBannerFlash}` : ''}`, role: "alert", children: [_jsx("div", { className: css.upgradeBannerText, children: t('upgradeAvailable').replace('{version}', upgrade.latestVersion) }), _jsx("div", { className: css.upgradeCommands, children: upgrade.commands.map(cmd => (_jsxs("div", { className: css.upgradeCommandRow, children: [_jsx("code", { className: css.upgradeCommand, children: cmd }), _jsx("button", { type: "button", className: `${css.copyBtn}${copiedCmd === cmd ? ` ${css.copyBtnDone}` : ''}`, onClick: () => { copyUpgradeCommand(cmd); }, children: copiedCmd === cmd ? t('copied') : t('copy') })] }, cmd))) }), _jsx("div", { className: css.upgradeHint, children: t('upgradeHint') }), _jsx("button", { type: "button", className: css.upgradeClose, onClick: () => { actions.setUpgradeDismissed(true); }, "aria-label": t('close'), children: "\u00D7" })] })), !loading && error === null && visibleRows.length === 0 && (_jsx("div", { className: css.notice, children: monitored !== null && monitored.length === 0 ? t('noMonitored') : t('waiting') })), visibleRows.map((row) => {
728
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { ref: panelRef, className: `${css.panel}${panelDimClass !== '' ? ` ${panelDimClass}` : ''}`, style: panelPos !== null ? { left: panelPos.x, top: panelPos.y, right: 'auto' } : undefined, onPointerEnter: () => { setHovered(true); }, onPointerLeave: () => { setHovered(false); }, children: [_jsxs("div", { className: css.header, onPointerDown: (event) => { beginDrag(event, panelRef.current, applyPanelPos); }, children: [_jsx("div", { className: css.headerText, children: _jsxs("div", { className: css.title, children: [t('title'), __TOKEN_QUOTA_VERSION__ !== undefined && __TOKEN_QUOTA_VERSION__ !== '' && (upgrade !== null
729
+ ? (_jsxs("span", { className: `${css.version} ${css.versionNew}`, title: t('upgradeAvailableHint'), children: ["v", __TOKEN_QUOTA_VERSION__, " \u2192 v", upgrade.latestVersion] }))
730
+ : (_jsxs("span", { className: css.version, children: ["v", __TOKEN_QUOTA_VERSION__] })))] }) }), _jsxs("div", { className: css.headerActions, onPointerDown: (event) => { event.stopPropagation(); }, children: [_jsx("button", { type: "button", "aria-pressed": musicEnabled, className: `${css.settingsBtn}${musicEnabled ? ` ${css.settingsBtnActive}` : ''}`, title: `${t('musicLabel')}:${musicEnabled ? t('musicOn') : t('musicOff')}`, onClick: () => { setMusicEnabled(!musicEnabled); }, children: "\u266A" }), _jsx("button", { type: "button", className: css.settingsBtn, onClick: () => { actions.setLogOpen(true); }, children: t('logs') }), _jsx("button", { type: "button", className: css.settingsBtn, onClick: openSettings, children: t('settings') }), _jsx("button", { type: "button", className: css.collapse, onClick: () => { setCollapsed(true); }, children: t('collapse') })] })] }), _jsxs("div", { className: css.notesBar, onPointerDown: (event) => { event.stopPropagation(); }, children: [notes.map((note) => {
731
+ const open = note.visible && !note.collapsed;
732
+ return (_jsx("button", { type: "button", className: `${css.noteChip}${open ? ` ${css.noteChipOpen}` : ''}`, title: note.title.trim() === '' ? t('noteUntitled') : note.title, onClick: () => { patchNote(note.id, { visible: true, collapsed: false }); }, onContextMenu: (event) => {
733
+ event.preventDefault();
734
+ setNoteMenu({ id: note.id, x: event.clientX, y: event.clientY });
735
+ }, children: noteInitial(note.title) }, note.id));
736
+ }), _jsxs("button", { type: "button", className: css.noteNew, disabled: notes.length >= TOKEN_QUOTA_MAX_NOTES, title: notes.length >= TOKEN_QUOTA_MAX_NOTES ? t('noteMaxHint') : t('noteNewHint'), onClick: createNote, children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", "aria-hidden": "true", children: [_jsx("path", { d: "M4 1.6h4.6L12.4 5.4v9H4z", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinejoin: "round" }), _jsx("path", { d: "M8.4 1.6v3.9h4", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinejoin: "round" })] }), _jsx("span", { className: css.noteNewPlus, children: "+" })] }), balanceEnabled && (_jsx("button", { type: "button", className: `${css.noteNew} ${css.balanceToggle}${balanceOpen ? ` ${css.balanceToggleOpen}` : ''}`, title: t('balanceTitle'), onClick: () => {
737
+ if (balanceOpen) {
738
+ setBalanceOpen(false);
739
+ return;
740
+ }
741
+ const winW = 280;
742
+ const rect = panelRef.current?.getBoundingClientRect();
743
+ if (rect !== undefined) {
744
+ setBalancePos({
745
+ x: Math.max(8, rect.left - winW - 8),
746
+ y: rect.top,
747
+ });
748
+ }
749
+ else {
750
+ setBalancePos({ x: Math.max(8, (typeof window !== 'undefined' ? window.innerWidth : 800) - 12 - 320 - winW - 8), y: 56 });
751
+ }
752
+ setBalanceOpen(true);
753
+ }, "aria-pressed": balanceOpen, children: _jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.3", fill: "none", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("text", { x: "8", y: "11", textAnchor: "middle", fontSize: "9", fontWeight: "700", fill: "currentColor", children: "\u00A5" })] }) }))] }), _jsxs("div", { className: css.body, children: [loading && _jsx("div", { className: css.notice, children: t('loading') }), error !== null && _jsx("div", { className: css.noticeError, children: error }), fullNotice !== null && (_jsx("div", { className: css.fullNotice, role: "alert", children: fullNotice })), upgrade !== null && !upgradeDismissed && (_jsxs("div", { className: `${css.upgradeBanner}${upgradeFlash ? ` ${css.upgradeBannerFlash}` : ''}`, role: "alert", children: [_jsx("div", { className: css.upgradeBannerText, children: t('upgradeAvailable').replace('{version}', upgrade.latestVersion) }), _jsx("div", { className: css.upgradeCommands, children: upgrade.commands.map(cmd => (_jsxs("div", { className: css.upgradeCommandRow, children: [_jsx("code", { className: css.upgradeCommand, children: cmd }), _jsx("button", { type: "button", className: `${css.copyBtn}${copiedCmd === cmd ? ` ${css.copyBtnDone}` : ''}`, onClick: () => { copyUpgradeCommand(cmd); }, children: copiedCmd === cmd ? t('copied') : t('copy') })] }, cmd))) }), _jsx("div", { className: css.upgradeHint, children: t('upgradeHint') }), _jsx("button", { type: "button", className: css.upgradeClose, onClick: () => { actions.setUpgradeDismissed(true); }, "aria-label": t('close'), children: "\u00D7" })] })), !loading && error === null && visibleRows.length === 0 && (_jsx("div", { className: css.notice, children: monitored !== null && monitored.length === 0 ? t('noMonitored') : t('waiting') })), visibleRows.map((row) => {
752
754
  const state = barStateOf(row);
753
755
  const pct = row.limit > 0 ? Math.min(100, Math.round((row.used / row.limit) * 100)) : 0;
754
756
  const barClass = state === 'over'
@@ -840,7 +842,7 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
840
842
  setRefreshingAll(true);
841
843
  refreshBalance();
842
844
  window.setTimeout(() => { setRefreshingAll(false); }, 1500);
843
- }, children: refreshingAll ? '…' : '↻' })] }), _jsxs("div", { className: css.balanceRow, children: [_jsx("span", { className: css.balanceRowName }), _jsx("span", { className: css.balanceRowValue }), _jsx("span", { className: css.balanceRowRefresh })] }), sortedProviders.map(provider => {
845
+ }, children: refreshingAll ? '…' : '↻' })] }), sortedProviders.map(provider => {
844
846
  const cell = renderProviderCell(provider);
845
847
  const busy = refreshingProvider === provider
846
848
  || (balanceByProvider.get(provider) === 'loading');
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jxgame2020/dsh-token-quota",
3
3
  "description": "Daily per-model token quota accounting, enforcement, and a floating quota panel for the DeepSeek Harness — a fully self-contained plugin (no core-Harness wiring, no generated RPC contract)",
4
- "version": "0.1.36",
4
+ "version": "0.1.38",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -53,7 +53,6 @@
53
53
  "lib/types/**/*.d.ts"
54
54
  ],
55
55
  "license": "MIT",
56
- "dependencies": {},
57
56
  "peerDependencies": {
58
57
  "@deepseek-ai/cordis": "*",
59
58
  "@deepseek-ai/dsh-agent": "*",