@jxgame2020/dsh-token-quota 0.1.37 → 0.1.39

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.39" ? 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{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}";
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;flex-wrap:wrap;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;flex:100%;align-items:center;gap:4px;padding:2px 0 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
- "tabLabel": "NPLLIq_tabLabel",
257
- "logUsedCol": "NPLLIq_logUsedCol",
258
- "logToolbar": "NPLLIq_logToolbar",
256
+ "logPagerBtn": "NPLLIq_logPagerBtn",
257
+ "selectBtn": "NPLLIq_selectBtn",
258
+ "dialogOverlay": "NPLLIq_dialogOverlay",
259
+ "fillIdle": "NPLLIq_fillIdle",
260
+ "balanceBarText": "NPLLIq_balanceBarText",
261
+ "balanceWinBody": "NPLLIq_balanceWinBody",
262
+ "monitorRow": "NPLLIq_monitorRow",
263
+ "resetSelect": "NPLLIq_resetSelect",
264
+ "upgradeCommandRow": "NPLLIq_upgradeCommandRow",
265
+ "rowDrag": "NPLLIq_rowDrag",
266
+ "logClearDate": "NPLLIq_logClearDate",
267
+ "headerText": "NPLLIq_headerText",
268
+ "noteWinBtn": "NPLLIq_noteWinBtn",
269
+ "fillOver": "NPLLIq_fillOver",
259
270
  "copyBtn": "NPLLIq_copyBtn",
260
- "checkBtn": "NPLLIq_checkBtn",
261
- "balanceRowHeader": "NPLLIq_balanceRowHeader",
262
- "dialogLabel": "NPLLIq_dialogLabel",
263
- "dialogBtnPrimary": "NPLLIq_dialogBtnPrimary",
264
- "noteWinBar": "NPLLIq_noteWinBar",
265
- "dialogBody": "NPLLIq_dialogBody",
266
- "noteWinText": "NPLLIq_noteWinText",
271
+ "balanceBarLow": "NPLLIq_balanceBarLow",
272
+ "switch": "NPLLIq_switch",
267
273
  "dialogHeader": "NPLLIq_dialogHeader",
268
- "balanceBarError": "NPLLIq_balanceBarError",
274
+ "logSearch": "NPLLIq_logSearch",
275
+ "dialogClose": "NPLLIq_dialogClose",
276
+ "logPagerInfo": "NPLLIq_logPagerInfo",
277
+ "balanceToggleOpen": "NPLLIq_balanceToggleOpen",
278
+ "logPagerControls": "NPLLIq_logPagerControls",
279
+ "versionNew": "NPLLIq_versionNew",
269
280
  "headerActions": "NPLLIq_headerActions",
270
- "panelDim": "NPLLIq_panelDim",
271
- "collapse": "NPLLIq_collapse",
272
- "dialogTab": "NPLLIq_dialogTab",
273
- "logPageSizeSelect": "NPLLIq_logPageSizeSelect",
274
- "rowMeta": "NPLLIq_rowMeta",
275
- "upgradeCommandRow": "NPLLIq_upgradeCommandRow",
276
- "notesBar": "NPLLIq_notesBar",
277
- "currentBadge": "NPLLIq_currentBadge",
278
- "balanceRow": "NPLLIq_balanceRow",
279
- "settingsBtn": "NPLLIq_settingsBtn",
280
- "upgradeCommand": "NPLLIq_upgradeCommand",
281
- "resetSelect": "NPLLIq_resetSelect",
281
+ "logPager": "NPLLIq_logPager",
282
+ "upgradeBannerFlash": "NPLLIq_upgradeBannerFlash",
283
+ "logScroll": "NPLLIq_logScroll",
282
284
  "balanceRefreshAll": "NPLLIq_balanceRefreshAll",
283
- "logClearDate": "NPLLIq_logClearDate",
284
- "noteChip": "NPLLIq_noteChip",
285
- "subtitle": "NPLLIq_subtitle",
286
- "monitorRow": "NPLLIq_monitorRow",
287
- "balanceValueOk": "NPLLIq_balanceValueOk",
288
- "logPagerBtn": "NPLLIq_logPagerBtn",
289
- "logModelCol": "NPLLIq_logModelCol",
290
- "monitorHint": "NPLLIq_monitorHint",
291
- "dialogOverlay": "NPLLIq_dialogOverlay",
292
- "noteWinTitleText": "NPLLIq_noteWinTitleText",
293
- "notice": "NPLLIq_notice",
294
- "rowDropTarget": "NPLLIq_rowDropTarget",
295
- "balanceSortBtn": "NPLLIq_balanceSortBtn",
296
- "balanceRowValue": "NPLLIq_balanceRowValue",
297
- "balanceWin": "NPLLIq_balanceWin",
298
- "save": "NPLLIq_save",
299
- "balanceBarRefresh": "NPLLIq_balanceBarRefresh",
300
- "upgradeBannerText": "NPLLIq_upgradeBannerText",
301
- "dialogTabActive": "NPLLIq_dialogTabActive",
302
- "settingsDialog": "NPLLIq_settingsDialog",
285
+ "noteWinTitle": "NPLLIq_noteWinTitle",
286
+ "logDialog": "NPLLIq_logDialog",
303
287
  "upgradeCommands": "NPLLIq_upgradeCommands",
304
- "tabIcon": "NPLLIq_tabIcon",
305
- "logClearDialog": "NPLLIq_logClearDialog",
306
- "noteWinResize": "NPLLIq_noteWinResize",
307
- "panelDimStrong": "NPLLIq_panelDimStrong",
308
- "versionNew": "NPLLIq_versionNew",
309
- "noteWinCollapsed": "NPLLIq_noteWinCollapsed",
310
- "logPagerPages": "NPLLIq_logPagerPages",
311
- "noteWin": "NPLLIq_noteWin",
312
- "switch": "NPLLIq_switch",
313
- "upgradeHint": "NPLLIq_upgradeHint",
314
- "body": "NPLLIq_body",
315
- "copyBtnDone": "NPLLIq_copyBtnDone",
316
- "dialogClose": "NPLLIq_dialogClose",
317
- "rowDrag": "NPLLIq_rowDrag",
318
- "fillOver": "NPLLIq_fillOver",
319
- "noteWinGripBar": "NPLLIq_noteWinGripBar",
320
288
  "resetRow": "NPLLIq_resetRow",
321
- "logSearch": "NPLLIq_logSearch",
289
+ "noteWinText": "NPLLIq_noteWinText",
290
+ "save": "NPLLIq_save",
291
+ "balanceBarError": "NPLLIq_balanceBarError",
292
+ "row": "NPLLIq_row",
293
+ "checkBtn": "NPLLIq_checkBtn",
294
+ "balanceValueLow": "NPLLIq_balanceValueLow",
295
+ "notesBar": "NPLLIq_notesBar",
296
+ "dialogActions": "NPLLIq_dialogActions",
297
+ "logDayCol": "NPLLIq_logDayCol",
298
+ "bar": "NPLLIq_bar",
299
+ "upgradeBannerText": "NPLLIq_upgradeBannerText",
300
+ "noteNew": "NPLLIq_noteNew",
301
+ "logModelCol": "NPLLIq_logModelCol",
322
302
  "logTable": "NPLLIq_logTable",
323
- "dialogTabs": "NPLLIq_dialogTabs",
324
- "headerText": "NPLLIq_headerText",
325
- "logPagerControls": "NPLLIq_logPagerControls",
326
- "noteNewPlus": "NPLLIq_noteNewPlus",
327
- "noteWinBtn": "NPLLIq_noteWinBtn",
303
+ "noteMenuBackdrop": "NPLLIq_noteMenuBackdrop",
304
+ "noteChip": "NPLLIq_noteChip",
305
+ "noteWinCollapsed": "NPLLIq_noteWinCollapsed",
306
+ "currentBadge": "NPLLIq_currentBadge",
328
307
  "input": "NPLLIq_input",
329
- "logClearBtn": "NPLLIq_logClearBtn",
330
- "balanceLastLine": "NPLLIq_balanceLastLine",
331
- "noticeError": "NPLLIq_noticeError",
308
+ "balanceSortBtn": "NPLLIq_balanceSortBtn",
309
+ "fillWarn": "NPLLIq_fillWarn",
332
310
  "gearBtn": "NPLLIq_gearBtn",
333
- "monitorName": "NPLLIq_monitorName",
334
- "logPager": "NPLLIq_logPager",
311
+ "monitorList": "NPLLIq_monitorList",
312
+ "checkUpdatesRow": "NPLLIq_checkUpdatesRow",
313
+ "dialogTab": "NPLLIq_dialogTab",
314
+ "subtitle": "NPLLIq_subtitle",
315
+ "dialog": "NPLLIq_dialog",
316
+ "controls": "NPLLIq_controls",
317
+ "noticeError": "NPLLIq_noticeError",
318
+ "tabLabel": "NPLLIq_tabLabel",
319
+ "checkErrorHint": "NPLLIq_checkErrorHint",
320
+ "balanceStateError": "NPLLIq_balanceStateError",
321
+ "logHeader": "NPLLIq_logHeader",
322
+ "logClearDialog": "NPLLIq_logClearDialog",
323
+ "logClearBtn": "NPLLIq_logClearBtn",
324
+ "noteWinGripBar": "NPLLIq_noteWinGripBar",
325
+ "noteWinResize": "NPLLIq_noteWinResize",
326
+ "collapse": "NPLLIq_collapse",
327
+ "monitorHint": "NPLLIq_monitorHint",
335
328
  "title": "NPLLIq_title",
336
- "noteWinTitle": "NPLLIq_noteWinTitle",
337
- "rowDragging": "NPLLIq_rowDragging",
338
- "rowHeader": "NPLLIq_rowHeader",
329
+ "noteChipOpen": "NPLLIq_noteChipOpen",
330
+ "copyBtnDone": "NPLLIq_copyBtnDone",
331
+ "noteWinTitleText": "NPLLIq_noteWinTitleText",
332
+ "balanceLastLine": "NPLLIq_balanceLastLine",
333
+ "noteNewPlus": "NPLLIq_noteNewPlus",
334
+ "rowDropTarget": "NPLLIq_rowDropTarget",
335
+ "balanceValueError": "NPLLIq_balanceValueError",
339
336
  "upgradeBanner": "NPLLIq_upgradeBanner",
340
- "noteMenuBackdrop": "NPLLIq_noteMenuBackdrop",
341
- "dialogHint": "NPLLIq_dialogHint",
337
+ "logToolbar": "NPLLIq_logToolbar",
342
338
  "version": "NPLLIq_version",
339
+ "balanceRowRefresh": "NPLLIq_balanceRowRefresh",
343
340
  "balanceStateHint": "NPLLIq_balanceStateHint",
344
- "dialogTitle": "NPLLIq_dialogTitle",
345
- "logDialog": "NPLLIq_logDialog",
341
+ "noteWinBar": "NPLLIq_noteWinBar",
342
+ "rowHeader": "NPLLIq_rowHeader",
343
+ "balanceWin": "NPLLIq_balanceWin",
346
344
  "balanceWinTitle": "NPLLIq_balanceWinTitle",
347
- "balanceWinHeader": "NPLLIq_balanceWinHeader",
348
- "settingsBtnActive": "NPLLIq_settingsBtnActive",
349
- "header": "NPLLIq_header",
350
- "logScroll": "NPLLIq_logScroll",
351
- "controls": "NPLLIq_controls",
352
- "balanceBarBadge": "NPLLIq_balanceBarBadge",
353
- "row": "NPLLIq_row",
354
- "balanceValueError": "NPLLIq_balanceValueError",
355
- "dialogSection": "NPLLIq_dialogSection",
356
- "balanceRowRefresh": "NPLLIq_balanceRowRefresh",
357
- "logDayCol": "NPLLIq_logDayCol",
358
- "noteMenu": "NPLLIq_noteMenu",
345
+ "balanceBar": "NPLLIq_balanceBar",
359
346
  "balanceRowName": "NPLLIq_balanceRowName",
360
- "balanceValueLow": "NPLLIq_balanceValueLow",
361
- "balanceStateError": "NPLLIq_balanceStateError",
362
- "dialogBtn": "NPLLIq_dialogBtn",
363
- "noteChipOpen": "NPLLIq_noteChipOpen",
364
- "logPagerInfo": "NPLLIq_logPagerInfo",
365
- "rowName": "NPLLIq_rowName",
366
- "selectBtn": "NPLLIq_selectBtn",
367
- "balanceBarLow": "NPLLIq_balanceBarLow",
368
- "balanceToggle": "NPLLIq_balanceToggle",
347
+ "dialogTabs": "NPLLIq_dialogTabs",
348
+ "noteMenu": "NPLLIq_noteMenu",
349
+ "rowDragging": "NPLLIq_rowDragging",
350
+ "panelDimStrong": "NPLLIq_panelDimStrong",
351
+ "dialogSection": "NPLLIq_dialogSection",
352
+ "dialogLabel": "NPLLIq_dialogLabel",
353
+ "monitorName": "NPLLIq_monitorName",
354
+ "logPagerPages": "NPLLIq_logPagerPages",
355
+ "balanceValueOk": "NPLLIq_balanceValueOk",
356
+ "body": "NPLLIq_body",
357
+ "settingsBtnActive": "NPLLIq_settingsBtnActive",
358
+ "logPageSizeSelect": "NPLLIq_logPageSizeSelect",
359
+ "panel": "NPLLIq_panel",
360
+ "balanceRowHeader": "NPLLIq_balanceRowHeader",
369
361
  "balanceBarDim": "NPLLIq_balanceBarDim",
362
+ "dialogBtn": "NPLLIq_dialogBtn",
363
+ "panelDim": "NPLLIq_panelDim",
364
+ "balanceWinHeader": "NPLLIq_balanceWinHeader",
365
+ "radioRow": "NPLLIq_radioRow",
366
+ "dialogBtnPrimary": "NPLLIq_dialogBtnPrimary",
367
+ "header": "NPLLIq_header",
370
368
  "fullNotice": "NPLLIq_fullNotice",
371
- "tab": "NPLLIq_tab",
372
- "logHeader": "NPLLIq_logHeader",
369
+ "upgradeCommand": "NPLLIq_upgradeCommand",
370
+ "dialogTabActive": "NPLLIq_dialogTabActive",
371
+ "balanceRowValue": "NPLLIq_balanceRowValue",
372
+ "balanceToggle": "NPLLIq_balanceToggle",
373
+ "rowMeta": "NPLLIq_rowMeta",
374
+ "balanceBarRefresh": "NPLLIq_balanceBarRefresh",
375
+ "checkUpdatesLabel": "NPLLIq_checkUpdatesLabel",
376
+ "rowName": "NPLLIq_rowName",
377
+ "logUsedCol": "NPLLIq_logUsedCol",
378
+ "noteWin": "NPLLIq_noteWin",
379
+ "notice": "NPLLIq_notice",
380
+ "settingsDialog": "NPLLIq_settingsDialog",
381
+ "dialogHint": "NPLLIq_dialogHint",
382
+ "balanceBarBadge": "NPLLIq_balanceBarBadge",
373
383
  "noteMenuItem": "NPLLIq_noteMenuItem",
374
- "panel": "NPLLIq_panel",
375
- "bar": "NPLLIq_bar",
376
- "balanceToggleOpen": "NPLLIq_balanceToggleOpen",
377
- "checkErrorHint": "NPLLIq_checkErrorHint",
378
- "radioRow": "NPLLIq_radioRow",
379
- "fillIdle": "NPLLIq_fillIdle",
380
- "upgradeBannerFlash": "NPLLIq_upgradeBannerFlash",
381
- "noteNew": "NPLLIq_noteNew",
382
- "fillWarn": "NPLLIq_fillWarn",
383
- "balanceWinBody": "NPLLIq_balanceWinBody",
384
- "balanceBar": "NPLLIq_balanceBar",
385
- "checkUpdatesRow": "NPLLIq_checkUpdatesRow",
386
- "dialogActions": "NPLLIq_dialogActions",
387
384
  "upgradeClose": "NPLLIq_upgradeClose",
388
- "balanceBarText": "NPLLIq_balanceBarText",
389
- "dialog": "NPLLIq_dialog",
390
- "monitorList": "NPLLIq_monitorList",
391
- "checkUpdatesLabel": "NPLLIq_checkUpdatesLabel"
385
+ "tab": "NPLLIq_tab",
386
+ "dialogTitle": "NPLLIq_dialogTitle",
387
+ "balanceRow": "NPLLIq_balanceRow",
388
+ "dialogBody": "NPLLIq_dialogBody",
389
+ "settingsBtn": "NPLLIq_settingsBtn",
390
+ "upgradeHint": "NPLLIq_upgradeHint",
391
+ "tabIcon": "NPLLIq_tabIcon"
392
392
  };
393
393
  //#endregion
394
394
  //#region lib/types/client/TokenQuotaPanel.js
@@ -1043,13 +1043,13 @@ window.__ModuleLoader__.load({
1043
1043
  onPointerLeave: () => {
1044
1044
  setHovered(false);
1045
1045
  },
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", {
1046
+ children: [(0, react_jsx_runtime.jsxs)("div", {
1047
+ className: TokenQuotaPanel_module_css_default.header,
1048
+ onPointerDown: (event) => {
1049
+ beginDrag(event, panelRef.current, applyPanelPos);
1050
+ },
1051
+ children: [
1052
+ (0, react_jsx_runtime.jsx)("div", {
1053
1053
  className: TokenQuotaPanel_module_css_default.headerText,
1054
1054
  children: (0, react_jsx_runtime.jsxs)("div", {
1055
1055
  className: TokenQuotaPanel_module_css_default.title,
@@ -1058,16 +1058,17 @@ window.__ModuleLoader__.load({
1058
1058
  title: t("upgradeAvailableHint"),
1059
1059
  children: [
1060
1060
  "v",
1061
- "0.1.36",
1061
+ "0.1.39",
1062
1062
  " → v",
1063
1063
  upgrade.latestVersion
1064
1064
  ]
1065
1065
  }) : (0, react_jsx_runtime.jsxs)("span", {
1066
1066
  className: TokenQuotaPanel_module_css_default.version,
1067
- children: ["v", "0.1.36"]
1067
+ children: ["v", "0.1.39"]
1068
1068
  })]
1069
1069
  })
1070
- }), (0, react_jsx_runtime.jsxs)("div", {
1070
+ }),
1071
+ (0, react_jsx_runtime.jsxs)("div", {
1071
1072
  className: TokenQuotaPanel_module_css_default.headerActions,
1072
1073
  onPointerDown: (event) => {
1073
1074
  event.stopPropagation();
@@ -1106,296 +1107,295 @@ window.__ModuleLoader__.load({
1106
1107
  children: t("collapse")
1107
1108
  })
1108
1109
  ]
1109
- })]
1110
- }),
1111
- (0, react_jsx_runtime.jsxs)("div", {
1112
- className: TokenQuotaPanel_module_css_default.notesBar,
1113
- onPointerDown: (event) => {
1114
- event.stopPropagation();
1115
- },
1116
- children: [
1117
- notes.map((note) => {
1118
- const open = note.visible && !note.collapsed;
1119
- return (0, react_jsx_runtime.jsx)("button", {
1110
+ }),
1111
+ (0, react_jsx_runtime.jsxs)("div", {
1112
+ className: TokenQuotaPanel_module_css_default.notesBar,
1113
+ onPointerDown: (event) => {
1114
+ event.stopPropagation();
1115
+ },
1116
+ children: [
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);
1139
+ }),
1140
+ (0, react_jsx_runtime.jsxs)("button", {
1141
+ type: "button",
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
+ })]
1168
+ }),
1169
+ balanceEnabled && (0, react_jsx_runtime.jsx)("button", {
1120
1170
  type: "button",
1121
- className: `${TokenQuotaPanel_module_css_default.noteChip}${open ? ` ${TokenQuotaPanel_module_css_default.noteChipOpen}` : ""}`,
1122
- title: note.title.trim() === "" ? t("noteUntitled") : note.title,
1171
+ className: `${TokenQuotaPanel_module_css_default.noteNew} ${TokenQuotaPanel_module_css_default.balanceToggle}${balanceOpen ? ` ${TokenQuotaPanel_module_css_default.balanceToggleOpen}` : ""}`,
1172
+ title: t("balanceTitle"),
1123
1173
  onClick: () => {
1124
- patchNote(note.id, {
1125
- visible: true,
1126
- collapsed: false
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
1127
1183
  });
1128
- },
1129
- onContextMenu: (event) => {
1130
- event.preventDefault();
1131
- setNoteMenu({
1132
- id: note.id,
1133
- x: event.clientX,
1134
- y: event.clientY
1184
+ else setBalancePos({
1185
+ x: Math.max(8, (typeof window !== "undefined" ? window.innerWidth : 800) - 12 - 320 - winW - 8),
1186
+ y: 56
1135
1187
  });
1188
+ setBalanceOpen(true);
1136
1189
  },
1137
- children: noteInitial(note.title)
1138
- }, note.id);
1139
- }),
1140
- (0, react_jsx_runtime.jsxs)("button", {
1141
- type: "button",
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
- })]
1168
- }),
1169
- balanceEnabled && (0, react_jsx_runtime.jsx)("button", {
1170
- type: "button",
1171
- className: `${TokenQuotaPanel_module_css_default.noteNew} ${TokenQuotaPanel_module_css_default.balanceToggle}${balanceOpen ? ` ${TokenQuotaPanel_module_css_default.balanceToggleOpen}` : ""}`,
1172
- title: t("balanceTitle"),
1173
- onClick: () => {
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);
1189
- },
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
- })]
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
+ })
1212
1213
  })
1213
- })
1214
- ]
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",
1214
+ ]
1215
+ })
1216
+ ]
1217
+ }), (0, react_jsx_runtime.jsxs)("div", {
1218
+ className: TokenQuotaPanel_module_css_default.body,
1219
+ children: [
1220
+ loading && (0, react_jsx_runtime.jsx)("div", {
1221
+ className: TokenQuotaPanel_module_css_default.notice,
1222
+ children: t("loading")
1223
+ }),
1224
+ error !== null && (0, react_jsx_runtime.jsx)("div", {
1225
+ className: TokenQuotaPanel_module_css_default.noticeError,
1226
+ children: error
1227
+ }),
1228
+ fullNotice !== null && (0, react_jsx_runtime.jsx)("div", {
1229
+ className: TokenQuotaPanel_module_css_default.fullNotice,
1230
+ role: "alert",
1231
+ children: fullNotice
1232
+ }),
1233
+ upgrade !== null && !upgradeDismissed && (0, react_jsx_runtime.jsxs)("div", {
1234
+ className: `${TokenQuotaPanel_module_css_default.upgradeBanner}${upgradeFlash ? ` ${TokenQuotaPanel_module_css_default.upgradeBannerFlash}` : ""}`,
1235
+ role: "alert",
1236
+ children: [
1237
+ (0, react_jsx_runtime.jsx)("div", {
1238
+ className: TokenQuotaPanel_module_css_default.upgradeBannerText,
1239
+ children: t("upgradeAvailable").replace("{version}", upgrade.latestVersion)
1240
+ }),
1241
+ (0, react_jsx_runtime.jsx)("div", {
1242
+ className: TokenQuotaPanel_module_css_default.upgradeCommands,
1243
+ children: upgrade.commands.map((cmd) => (0, react_jsx_runtime.jsxs)("div", {
1244
+ className: TokenQuotaPanel_module_css_default.upgradeCommandRow,
1245
+ children: [(0, react_jsx_runtime.jsx)("code", {
1246
+ className: TokenQuotaPanel_module_css_default.upgradeCommand,
1247
+ children: cmd
1248
+ }), (0, react_jsx_runtime.jsx)("button", {
1249
+ type: "button",
1250
+ className: `${TokenQuotaPanel_module_css_default.copyBtn}${copiedCmd === cmd ? ` ${TokenQuotaPanel_module_css_default.copyBtnDone}` : ""}`,
1251
+ onClick: () => {
1252
+ copyUpgradeCommand(cmd);
1253
+ },
1254
+ children: copiedCmd === cmd ? t("copied") : t("copy")
1255
+ })]
1256
+ }, cmd))
1257
+ }),
1258
+ (0, react_jsx_runtime.jsx)("div", {
1259
+ className: TokenQuotaPanel_module_css_default.upgradeHint,
1260
+ children: t("upgradeHint")
1261
+ }),
1262
+ (0, react_jsx_runtime.jsx)("button", {
1263
+ type: "button",
1264
+ className: TokenQuotaPanel_module_css_default.upgradeClose,
1265
+ onClick: () => {
1266
+ actions.setUpgradeDismissed(true);
1267
+ },
1268
+ "aria-label": t("close"),
1269
+ children: "×"
1270
+ })
1271
+ ]
1272
+ }),
1273
+ !loading && error === null && visibleRows.length === 0 && (0, react_jsx_runtime.jsx)("div", {
1274
+ className: TokenQuotaPanel_module_css_default.notice,
1275
+ children: monitored !== null && monitored.length === 0 ? t("noMonitored") : t("waiting")
1276
+ }),
1277
+ visibleRows.map((row) => {
1278
+ const state = barStateOf(row);
1279
+ const pct = row.limit > 0 ? Math.min(100, Math.round(row.used / row.limit * 100)) : 0;
1280
+ const barClass = state === "over" ? TokenQuotaPanel_module_css_default.fillOver : state === "warn" ? TokenQuotaPanel_module_css_default.fillWarn : TokenQuotaPanel_module_css_default.fillIdle;
1281
+ const editing = editingKey === row.key;
1282
+ return (0, react_jsx_runtime.jsxs)("div", {
1283
+ 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}` : ""}`,
1284
+ onMouseEnter: () => {
1285
+ setHoveredRowKey(row.key);
1286
+ triggerRowBalanceRefreshIfStale(row.provider);
1287
+ },
1288
+ onMouseLeave: () => {
1289
+ setHoveredRowKey((prev) => prev === row.key ? null : prev);
1290
+ },
1291
+ onDragOver: (event) => {
1292
+ if (dragKey === null || dragKey === row.key) return;
1293
+ event.preventDefault();
1294
+ setDropKey(row.key);
1295
+ },
1296
+ onDrop: (event) => {
1297
+ event.preventDefault();
1298
+ if (dragKey !== null && dragKey !== row.key) setModelOrder(reorderKeys(rows.map((r) => r.key), dragKey, row.key));
1299
+ setDragKey(null);
1300
+ setDropKey(null);
1301
+ },
1302
+ onDragEnd: () => {
1303
+ setDragKey(null);
1304
+ setDropKey(null);
1305
+ },
1235
1306
  children: [
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);
1307
+ (0, react_jsx_runtime.jsxs)("div", {
1308
+ className: TokenQuotaPanel_module_css_default.rowHeader,
1309
+ children: [
1310
+ (0, react_jsx_runtime.jsx)("span", {
1311
+ className: TokenQuotaPanel_module_css_default.rowDrag,
1312
+ draggable: true,
1313
+ title: t("reorderHint"),
1314
+ onDragStart: (event) => {
1315
+ setDragKey(row.key);
1316
+ event.dataTransfer.effectAllowed = "move";
1317
+ event.dataTransfer.setData("text/plain", row.key);
1252
1318
  },
1253
- children: copiedCmd === cmd ? t("copied") : t("copy")
1254
- })]
1255
- }, cmd))
1256
- }),
1257
- (0, react_jsx_runtime.jsx)("div", {
1258
- className: TokenQuotaPanel_module_css_default.upgradeHint,
1259
- children: t("upgradeHint")
1260
- }),
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: "×"
1269
- })
1270
- ]
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", {
1319
+ children: "⠿"
1320
+ }),
1321
+ (0, react_jsx_runtime.jsxs)("span", {
1322
+ className: TokenQuotaPanel_module_css_default.rowName,
1323
+ title: row.key,
1324
+ children: [
1325
+ row.name,
1326
+ row.current && (0, react_jsx_runtime.jsx)("span", {
1327
+ className: TokenQuotaPanel_module_css_default.currentBadge,
1328
+ children: t("current")
1329
+ }),
1330
+ sessionId !== void 0 && !row.current && (0, react_jsx_runtime.jsx)("button", {
1348
1331
  type: "button",
1349
- className: TokenQuotaPanel_module_css_default.gearBtn,
1350
- title: t("setLimitHint"),
1332
+ className: TokenQuotaPanel_module_css_default.selectBtn,
1351
1333
  onClick: () => {
1352
- setEditingKey(editing ? null : row.key);
1334
+ selectModel(sessionId, row.provider, row.model);
1353
1335
  },
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}%` }
1336
+ children: t("select")
1337
+ })
1338
+ ]
1339
+ }),
1340
+ (0, react_jsx_runtime.jsxs)("span", {
1341
+ className: TokenQuotaPanel_module_css_default.rowMeta,
1342
+ children: [(() => {
1343
+ const bt = balanceTextForRow(row);
1344
+ return hoveredRowKey === row.key && bt.text !== "" && metaToggle === 1 ? (0, react_jsx_runtime.jsx)("span", {
1345
+ className: bt.cls,
1346
+ children: bt.text
1347
+ }) : (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: quotaText(row) });
1348
+ })(), (0, react_jsx_runtime.jsx)("button", {
1349
+ type: "button",
1350
+ className: TokenQuotaPanel_module_css_default.gearBtn,
1351
+ title: t("setLimitHint"),
1352
+ onClick: () => {
1353
+ setEditingKey(editing ? null : row.key);
1354
+ },
1355
+ children: "⚙"
1356
+ })]
1364
1357
  })
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
- })]
1358
+ ]
1359
+ }),
1360
+ (0, react_jsx_runtime.jsx)("div", {
1361
+ className: TokenQuotaPanel_module_css_default.bar,
1362
+ children: (0, react_jsx_runtime.jsx)("div", {
1363
+ className: barClass,
1364
+ style: { width: `${pct}%` }
1392
1365
  })
1393
- ]
1394
- }, row.key);
1395
- })
1396
- ]
1397
- })
1398
- ]
1366
+ }),
1367
+ editing && (0, react_jsx_runtime.jsxs)("div", {
1368
+ className: TokenQuotaPanel_module_css_default.controls,
1369
+ children: [(0, react_jsx_runtime.jsx)("input", {
1370
+ className: TokenQuotaPanel_module_css_default.input,
1371
+ type: "number",
1372
+ min: 0,
1373
+ step: 1e4,
1374
+ placeholder: t("limitPlaceholder"),
1375
+ value: drafts[row.key] ?? "",
1376
+ onChange: (event) => {
1377
+ setDrafts((prev) => ({
1378
+ ...prev,
1379
+ [row.key]: event.target.value
1380
+ }));
1381
+ },
1382
+ onKeyDown: (event) => {
1383
+ if (event.key === "Enter") commitLimit(row);
1384
+ }
1385
+ }), (0, react_jsx_runtime.jsx)("button", {
1386
+ type: "button",
1387
+ className: TokenQuotaPanel_module_css_default.save,
1388
+ onClick: () => {
1389
+ commitLimit(row);
1390
+ },
1391
+ children: t("save")
1392
+ })]
1393
+ })
1394
+ ]
1395
+ }, row.key);
1396
+ })
1397
+ ]
1398
+ })]
1399
1399
  }),
1400
1400
  dialogOpen && (0, react_jsx_runtime.jsxs)("div", {
1401
1401
  ref: settingsRef,
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.39";
623
623
  let latest;
624
624
  try {
625
625
  const response = await fetch(REGISTRY_LATEST_URL, {
@@ -727,30 +727,30 @@ export function TokenQuotaPanel({ t, load, setLimit, selectModel, setMonitored,
727
727
  : '';
728
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
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) => {
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) => {
754
754
  const state = barStateOf(row);
755
755
  const pct = row.limit > 0 ? Math.min(100, Math.round((row.used / row.limit) * 100)) : 0;
756
756
  const barClass = state === 'over'
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.37",
4
+ "version": "0.1.39",
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": "*",
@@ -169,4 +168,4 @@
169
168
  "optional": true
170
169
  }
171
170
  }
172
- }
171
+ }