dsh-diff-approval 0.25.0 → 0.26.0

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
@@ -21,7 +21,7 @@ window.__ModuleLoader__.load({
21
21
  let react_dom = require("react-dom");
22
22
  let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
23
23
  //#region \0dsh-css:/home/runner/work/dsh-diff-approval/dsh-diff-approval/src/client/PendingPanel.module.css.mjs
24
- const css = ".F1KBNa_panelFailure{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:16px;display:flex}.F1KBNa_panelFailureText{min-width:0}.F1KBNa_panelFailureRetry{border:1px solid var(--dsw-alias-border-l2);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;margin-left:auto;padding:2px 8px}.F1KBNa_panelFailureRetry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_layer{box-sizing:border-box;flex:none;align-items:center;width:calc(100% + 4px);height:42px;margin:4px -2px;display:flex;position:relative}.F1KBNa_headerEntry{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:6px;display:inline-flex;position:relative}.F1KBNa_headerEntry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_headerEntry[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}.F1KBNa_headerEntry:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_headerEntryCount{box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);min-width:14px;height:14px;color:var(--dsw-alias-label-primary-foreground);text-align:center;font-variant-numeric:tabular-nums;pointer-events:none;border-radius:7px;padding:0 3px;font-size:10px;line-height:14px;position:absolute;top:-1px;right:-1px}.F1KBNa_headerEntry svg{display:block}.F1KBNa_footerButtons{align-items:center;width:100%;display:flex}.F1KBNa_badge{box-sizing:border-box;width:100%;height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}.F1KBNa_badge:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_badge:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.F1KBNa_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.F1KBNa_layer.F1KBNa_rail{width:36px;height:36px;margin:8px 0 10px}.F1KBNa_rail .F1KBNa_badge{border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.F1KBNa_rail .F1KBNa_badgeLabel{display:none}.F1KBNa_rail .F1KBNa_badgeCount{box-sizing:border-box;background:var(--dsw-alias-state-business-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-foreground);font-variant-numeric:tabular-nums;border-radius:9px;justify-content:center;align-items:center;padding:0 4px;font-size:11px;line-height:18px;display:flex;position:absolute;top:-3px;right:-7px}.F1KBNa_coverBackdrop{z-index:29;background:var(--dsw-specific-sidebar-fill);position:fixed;inset:0}.F1KBNa_panel{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:none;box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);-webkit-user-select:none;user-select:none;border-radius:12px;flex-direction:column;display:flex;position:fixed;inset:8px 8px 128px;overflow:hidden}.F1KBNa_panel .F1KBNa_code,.F1KBNa_panel .F1KBNa_mdPreviewBody,.F1KBNa_panel .F1KBNa_discussionUser,.F1KBNa_panel .F1KBNa_discussionAnswer,.F1KBNa_panel .F1KBNa_quoteText,.F1KBNa_panel .F1KBNa_diffPath,.F1KBNa_panel .F1KBNa_rowPath,.F1KBNa_panel input,.F1KBNa_panel textarea,.F1KBNa_panel [contenteditable]{-webkit-user-select:text;user-select:text}.F1KBNa_panelDocked{width:100%;max-width:none;height:100%;box-shadow:none;border:none;border-radius:0;position:static;inset:auto}.F1KBNa_dockHost{flex-direction:column;min-height:0;display:flex;position:absolute;inset:0}.F1KBNa_header{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.F1KBNa_headerActions{align-items:center;gap:2px;display:flex}.F1KBNa_settingsPage{padding:8px 12px}.F1KBNa_settingsGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupHeader{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsGroupText{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.F1KBNa_settingsGroupTitle{font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsGroupDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsGroupChevron{margin-left:auto;transition:transform .15s}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupChevron{transform:rotate(180deg)}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupHeader{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupBody{flex-direction:column;display:flex}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow{padding-left:16px}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow:last-child,.F1KBNa_settingsPage>.F1KBNa_settingsRow:last-child{border-bottom:none}.F1KBNa_settingsRow{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsRowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.F1KBNa_settingsRowTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsRowDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsSelector{background:var(--dsw-alias-bg-module-platform);min-width:72px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.F1KBNa_settingsSelector:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_settingsSelector[data-recording]{box-shadow:inset 0 0 0 1px var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-secondary)}.F1KBNa_settingsReset{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;margin-left:6px;padding:0;display:inline-flex}.F1KBNa_settingsReset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_settingsReset:disabled{opacity:.4;cursor:default}.F1KBNa_colorPicker{position:relative}.F1KBNa_colorPickerTrigger{background:var(--dsw-alias-bg-module-platform);width:120px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_colorPickerTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_colorSwatch{border:1px solid var(--dsw-alias-border-l2);border-radius:50%;flex:none;width:24px;height:24px}.F1KBNa_colorValue{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.F1KBNa_colorPickerChevron{flex:none}.F1KBNa_colorBackdrop{z-index:40;position:fixed;inset:0}.F1KBNa_colorPickerPopover{z-index:41;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:10px;padding:10px;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_colorPickerPanel{flex-direction:column;gap:8px;display:flex}.F1KBNa_colorPickerInputRow{align-items:center;gap:8px;display:flex}.F1KBNa_colorPickerPreview{border:1px solid var(--dsw-alias-border-l2);border-radius:6px;flex:none;width:22px;height:22px}.F1KBNa_colorPickerInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-module-platform);min-width:0;height:30px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 8px;font-size:12px;line-height:28px}.F1KBNa_colorPickerInput:focus{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.F1KBNa_colorSv{border:1px solid var(--dsw-alias-border-l1);cursor:crosshair;touch-action:none;border-radius:8px;height:140px;position:relative}.F1KBNa_colorSvCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_colorHue{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;touch-action:none;border-radius:7px;height:14px;position:relative}.F1KBNa_colorHueCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:16px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_diffPreview{z-index:2;border:1px solid var(--dsw-alias-border-l1);font:var(--dsw-font-markdown-code-block);background:var(--dsw-alias-markdown-code-block);border-radius:8px;margin:16px 0 8px;padding:8px;position:sticky;top:0;overflow:hidden}.F1KBNa_diffPreviewTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:6px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_diffPreviewScroll{overscroll-behavior:none;height:132px;overflow-y:auto}.F1KBNa_mdPreviewWrap{isolation:isolate;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_mdPreviewBody{overscroll-behavior:none;min-width:0;min-height:0;color:var(--dsw-alias-label-primary);flex:1;padding:12px 16px;position:relative;overflow:auto}.F1KBNa_mdPreviewContent{width:100%;min-width:0;margin:0 auto}.F1KBNa_mdPreviewSingle{display:block}.F1KBNa_mdPreviewDouble{display:flex}.F1KBNa_mdPreviewBody .mdBlock{border-radius:4px;margin-bottom:12px;padding:2px 6px}.F1KBNa_mdPreviewBody .mdAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_mdPreviewBody .mdDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_mdPreviewBody .mdWordDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdWordAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdDouble{flex-direction:column;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleRow{align-items:flex-start;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleCol{flex:1;min-width:0}.F1KBNa_mdPreviewBody .mdDoubleRule{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:0 12px}.F1KBNa_mdPreviewFallback{font-family:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 16px;font-size:12px;line-height:18px}.F1KBNa_mdPreviewBody{word-break:break-word;font-size:13px;line-height:20px}.F1KBNa_mdPreviewBody>:first-child{margin-top:0}.F1KBNa_mdPreviewBody>:last-child{margin-bottom:0}.F1KBNa_mdPreviewBody h1,.F1KBNa_mdPreviewBody h2,.F1KBNa_mdPreviewBody h3,.F1KBNa_mdPreviewBody h4,.F1KBNa_mdPreviewBody h5,.F1KBNa_mdPreviewBody h6{margin:16px 0 8px;font-weight:600;line-height:1.3}.F1KBNa_mdPreviewBody h1{font-size:22px}.F1KBNa_mdPreviewBody h2{font-size:19px}.F1KBNa_mdPreviewBody h3{font-size:16px}.F1KBNa_mdPreviewBody h4{font-size:15px}.F1KBNa_mdPreviewBody h5{font-size:14px}.F1KBNa_mdPreviewBody h6{font-size:13px}.F1KBNa_mdPreviewBody p{margin:8px 0}.F1KBNa_mdPreviewBody ul,.F1KBNa_mdPreviewBody ol{margin:8px 0;padding-left:22px}.F1KBNa_mdPreviewBody li{margin:2px 0}.F1KBNa_mdPreviewBody a{color:var(--dsw-alias-state-business-primary);text-decoration:none}.F1KBNa_mdPreviewBody a:hover{text-decoration:underline}.F1KBNa_mdPreviewBody code{font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:4px;padding:1px 5px;font-size:12.5px}.F1KBNa_mdPreviewBody pre{overscroll-behavior:none;border:1px solid var(--dsw-alias-border-l1);font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:8px;margin:8px 0;padding:10px 12px;font-size:12.5px;line-height:18px;overflow:auto}.F1KBNa_mdPreviewBody pre code{background:0 0;padding:0}.F1KBNa_mdPreviewBody blockquote{border-left:3px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);margin:8px 0;padding:0 12px}.F1KBNa_mdPreviewBody hr{background:var(--dsw-alias-border-l1);border:none;height:1px;margin:16px 0}.F1KBNa_mdPreviewBody table{border-collapse:collapse;margin:8px 0}.F1KBNa_mdPreviewBody th,.F1KBNa_mdPreviewBody td{border:1px solid var(--dsw-alias-border-l1);padding:4px 10px}.F1KBNa_mdPreviewBody img{max-width:100%}.F1KBNa_mdPreviewBody .mdImageFallback{border:1px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-markdown-code-block) 45%, transparent);width:100%;min-height:120px;color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-markdown-code-block);text-align:center;white-space:pre-wrap;word-break:break-all;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:8px 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_toggle{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:18px;flex:none;width:60px;height:36px;padding:0;position:relative}.F1KBNa_toggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_toggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.F1KBNa_toggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleOn:hover{background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleThumb{background:var(--dsw-alias-label-primary);border-radius:50%;width:28px;height:28px;transition:left .12s;position:absolute;top:3px;left:3px}.F1KBNa_toggleOn .F1KBNa_toggleThumb{background:#fff;left:27px}.F1KBNa_stepper{align-items:center;gap:6px;display:inline-flex}.F1KBNa_stepperButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);width:32px;height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;padding:0;position:relative}.F1KBNa_stepperButton:before,.F1KBNa_stepperButton:after{content:\"\";background:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_stepperButton:before{width:10px;height:1px}.F1KBNa_stepperButton:after{width:1px;height:10px;display:none}.F1KBNa_stepperButtonUp:after{display:block}.F1KBNa_stepperButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_stepperButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_stepperValue{text-align:center;min-width:2ch;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:14px;line-height:22px}.F1KBNa_states{flex-direction:column;flex:1;min-height:0;padding:4px 12px 12px;display:flex;overflow-y:auto}.F1KBNa_split{flex:1;align-items:stretch;min-height:0;display:flex;position:relative}.F1KBNa_fileListKnob{z-index:39;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;box-shadow:var(--dsw-elevation-prominent);border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.F1KBNa_fileListKnob[data-open]{box-shadow:none;opacity:0}.F1KBNa_fileListKnob:not([data-open]){animation:.32s ease-in-out .5s both F1KBNa_fileListKnobIn}@keyframes F1KBNa_fileListKnobIn{0%{opacity:0}to{opacity:1}}.F1KBNa_fileListKnob:hover,.F1KBNa_fileListKnob:focus-visible{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-interactive-bg-hover), var(--dsw-alias-interactive-bg-hover))}.F1KBNa_fileListFloat{z-index:40;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);box-shadow:none;transform-origin:0 0;border-radius:12px;flex-direction:column;padding:6px 0 10px 8px;display:flex;position:absolute;overflow:hidden}.F1KBNa_fileListFloatClosing{pointer-events:none;animation:.14s ease-in forwards F1KBNa_fileListShrink}@keyframes F1KBNa_fileListShrink{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.F1KBNa_fileList{box-sizing:border-box;border-right:1px solid var(--dsw-alias-border-l2);flex-direction:column;flex:none;width:240px;min-height:0;padding:4px 8px 12px;display:flex}.F1KBNa_listScroll{flex:1;min-height:0;overflow-y:scroll}.F1KBNa_bulkActions{flex:none;gap:6px;padding:8px 8px 0 0;display:flex}.F1KBNa_bulkActions .F1KBNa_action{text-align:center;flex:1}.F1KBNa_resizeHandle{cursor:col-resize;touch-action:none;background:0 0;flex:none;width:5px;margin:0 -2px}.F1KBNa_resizeHandle:hover{background:var(--dsw-alias-border-l2)}.F1KBNa_floatResizeHandle{z-index:41;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border-radius:4px;position:absolute}.F1KBNa_floatResizeHandle:hover{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-border-l2), var(--dsw-alias-border-l2))}.F1KBNa_detail{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.F1KBNa_detailEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;margin:0;padding:24px;font-size:12px;line-height:18px;display:flex}.F1KBNa_confirmBackdrop{z-index:55;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.F1KBNa_confirmCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:340px;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}.F1KBNa_confirmText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;line-height:1.5}.F1KBNa_confirmActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;display:flex}.F1KBNa_pickerCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:420px;max-width:100%;height:70%;max-height:100%;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:8px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.F1KBNa_pickerTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}.F1KBNa_pickerClose{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:10px;right:10px}.F1KBNa_pickerClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_pickerForm{flex:none;gap:8px;display:flex}.F1KBNa_pickerInput{border:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;flex:auto;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_pickerInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_tree{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex:auto;min-height:0;padding:4px 2px 4px 4px;overflow:auto scroll}.F1KBNa_treeRow{border-radius:6px;align-items:center;gap:2px;padding-right:4px;display:flex}.F1KBNa_treeRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_treeRow[data-selected]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.F1KBNa_treeCaret{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_treeCaret:hover{color:var(--dsw-alias-label-primary)}.F1KBNa_treeName{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:auto;align-items:center;gap:6px;padding:2px 4px;font-family:inherit;font-size:12px;line-height:18px;display:flex}.F1KBNa_treeName:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_treeNote{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.F1KBNa_pickerIcon{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_pickerName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_pickerNote{color:var(--dsw-alias-label-tertiary);flex:none;margin:0;font-size:12px;line-height:18px}.F1KBNa_pickerCheck{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-right:auto;font-size:12px;line-height:18px;display:flex}.F1KBNa_title{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}.F1KBNa_note,.F1KBNa_readError,.F1KBNa_hint{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.F1KBNa_noteCentered{text-align:center;margin:auto}.F1KBNa_emptyState{flex-direction:column;align-items:center;gap:10px;margin:auto;display:flex}.F1KBNa_importButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:5px 14px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_importButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_importButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_importNote{color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:12px;line-height:18px}.F1KBNa_readError{color:var(--dsw-alias-state-error-primary)}.F1KBNa_group{color:var(--dsw-alias-label-tertiary);margin:8px 0 4px;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_groupHead{align-items:center;gap:4px;margin:8px 0 4px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton{box-sizing:border-box;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;min-height:0;padding:0;display:inline-flex}.F1KBNa_groupHead>.F1KBNa_group{margin:0}.F1KBNa_emptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.F1KBNa_rows{margin:0;padding:0;list-style:none}.F1KBNa_row{border:1px solid #0000;border-radius:10px;margin:2px 0}.F1KBNa_rowMenuAnchor{display:none}.F1KBNa_rowHead{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_rowHead:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_rowHead[data-selected]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_rowPath{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-left:4px;font-size:12px;line-height:18px;overflow:hidden}.F1KBNa_kindTag{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_kindHint{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:16px}.F1KBNa_divergedHint,.F1KBNa_missingHint{border-bottom:1px solid var(--dsw-alias-border-l2);margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missing{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary));white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_rowFailed{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_actionError{border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missingHint{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary))}.F1KBNa_rowMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;gap:6px;margin-left:auto;font-size:12px;line-height:16px;display:inline-flex}.F1KBNa_addCount{color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_delCount{color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_diff{background:var(--dsw-alias-markdown-code-block);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffHeader{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_panelDocked .F1KBNa_diffHeader{background:var(--dsw-alias-bg-base)}.F1KBNa_diffPath{appearance:none;min-width:0;font:inherit;text-overflow:ellipsis;color:var(--dsw-alias-label-primary);background:0 0;border:0;flex:1;margin-left:4px;padding:0;font-size:12px;line-height:18px;position:relative;top:1px}.F1KBNa_diffPath:focus{outline:none}.F1KBNa_diffActions{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_diffStats{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:16px}.F1KBNa_flexSpacer{flex:1}.F1KBNa_divider{background:var(--dsw-alias-border-l1);align-self:stretch;width:1px;margin:2px 0}.F1KBNa_action{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_action:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_actionChord{color:var(--dsw-alias-label-tertiary);margin-left:6px;font-size:11px}.F1KBNa_actionPrimary{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_actionPrimary:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_actionPrimary:disabled{background:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:.55}.F1KBNa_actionQuietDisabled:disabled{cursor:pointer;color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l1);background:0 0}.F1KBNa_actionPrimary.F1KBNa_actionQuietDisabled:disabled{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:1}.F1KBNa_iconAction{justify-content:center;align-items:center;min-height:25px;padding:4px 6px;display:inline-flex}.F1KBNa_close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expand{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expandExpanded svg{transform:rotate(180deg)}.F1KBNa_diffBodyWrap{isolation:isolate;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBody{overscroll-behavior:none;min-width:0;font:var(--dsw-font-markdown-code-block);-webkit-text-size-adjust:100%;text-size-adjust:100%;cursor:text;outline:none;flex:1;padding:0;position:relative;overflow:auto}.F1KBNa_diffBody::-webkit-scrollbar,.F1KBNa_diffBody::-webkit-scrollbar-track,.F1KBNa_diffBody::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_blockActions{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);z-index:2;border-radius:10px;align-items:center;gap:9px;padding:5px;display:flex;position:absolute;right:8px}.F1KBNa_blockActionsDivider{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:2px 0}.F1KBNa_blockPosition{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;margin-left:7px;font-size:12px;line-height:16px}.F1KBNa_searchBar{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);border-radius:10px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:8px;right:8px}.F1KBNa_searchInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:150px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_searchInput:focus{border-color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchCount{text-align:center;min-width:34px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:16px}.F1KBNa_searchToggle{border:1px solid var(--dsw-alias-border-l1);min-height:25px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:4px 6px;display:inline-flex}.F1KBNa_searchToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_searchToggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchMatch{color:inherit;background-color:#facc1542;border-radius:2px}.F1KBNa_searchMatchCurrent{color:inherit;background-color:#facc1599;border-radius:2px}.F1KBNa_blockFlash{z-index:1;box-sizing:border-box;border:2px solid var(--dsw-alias-state-business-primary);pointer-events:none;border-radius:4px;animation:1s ease-out forwards F1KBNa_diffFlashFade;position:absolute;left:0;right:0}.F1KBNa_blockFlashShake{animation:.7s ease-out forwards F1KBNa_diffFlashShake}.F1KBNa_discussionRow{background:var(--dsw-alias-bg-base);display:table-row}.F1KBNa_discussionCell{display:table-cell}.F1KBNa_discussionPin{width:0;height:0;position:sticky;left:0}.F1KBNa_discussion{z-index:2;box-sizing:border-box;border-left:3px solid var(--dsw-alias-label-secondary);cursor:default;background:0 0;flex-direction:column;display:flex;position:absolute;top:0;left:0;overflow:hidden}.F1KBNa_discussionHead,.F1KBNa_discussionBody{font:var(--dsw-font-markdown-code-block)}.F1KBNa_discussionBody{flex-direction:column;flex:auto;min-height:0;padding:0 12px;display:flex;overflow:hidden}.F1KBNa_discussion[data-lost]{border-left-color:var(--dsw-alias-state-warn-primary,#f59e0b);background:repeating-linear-gradient(135deg, var(--dsw-alias-interactive-bg-hover) 0 4px, transparent 4px 8px);background-origin:border-box}.F1KBNa_discussionAnswer{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;margin:0;padding:0;font-family:inherit;line-height:22px}.F1KBNa_discussionUser{box-sizing:border-box;background:color-mix(in srgb, var(--dsw-specific-bubble,var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover))) 80%, transparent);width:fit-content;max-width:82%;color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;border-radius:8px 0 8px 8px;margin:6.6px 0 6.6px auto;padding:4.4px 11px;font-family:inherit;line-height:22px}.F1KBNa_discussionCode{background:var(--dsw-alias-markdown-inline-code,var(--dsw-alias-interactive-bg-hover-solid));box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l1);border-radius:4px;padding:0 2px}.F1KBNa_discussionBody strong{-webkit-text-stroke:.3px currentColor;font-weight:700}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0;font-family:inherit;line-height:22px}.F1KBNa_discussionNote[data-diff-discussion-hidden]{color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionDots{margin-left:1px}.F1KBNa_discussionDots>span{animation:1.2s ease-in-out infinite F1KBNa_discussionDot}.F1KBNa_discussionDots>span:nth-child(2){animation-delay:.15s}.F1KBNa_discussionDots>span:nth-child(3){animation-delay:.3s}@keyframes F1KBNa_discussionDot{0%,60%,to{opacity:.25}30%{opacity:1}}.F1KBNa_quoteLines{table-layout:fixed;border-spacing:0;width:calc(100% + 27px);min-width:0;color:var(--dsw-alias-label-primary);font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover) 55%, transparent);margin:0 -12px 0 -15px;display:table}.F1KBNa_quoteAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 12%, transparent)}.F1KBNa_quoteDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 13%, transparent)}.F1KBNa_quoteLine{height:var(--dsh-diff-line-height,22px);display:table-row}.F1KBNa_quoteCode{display:table-cell}.F1KBNa_quoteText{white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;display:block}.F1KBNa_quoteNoWrap .F1KBNa_quoteText{white-space:pre;overflow-wrap:normal;overflow:hidden}.F1KBNa_quoteNoWrap .F1KBNa_quoteText:after{content:\"\";width:calc(var(--dsh-diff-quote-width,0px) + 100%);display:inline-block}.F1KBNa_discussionOutdated{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:16px}.F1KBNa_discussionHead{box-sizing:border-box;flex:none;align-items:center;gap:8px;height:22px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;flex:none;align-items:flex-end;gap:8px;height:44px;margin:auto -6px 0;padding:0 0 6.6px;display:flex}.F1KBNa_discussionInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;color:var(--dsw-alias-label-primary);cursor:text;border-radius:6px;flex:auto;padding:3px 8px;font-family:inherit;line-height:18px}.F1KBNa_discussionToggle{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;display:inline-flex}.F1KBNa_discussionToggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_discussionRangeWrap{font:var(--dsw-font-markdown-code-block);flex:none}.F1KBNa_discussionRange{color:var(--dsw-alias-label-tertiary);font-family:inherit}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput::placeholder{font-family:inherit;font-size:inherit;color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionSend{box-sizing:border-box;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;padding-left:9px;padding-right:9px;display:inline-flex}.F1KBNa_rowDiscussed{--diff-row-wash:color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent);background-image:linear-gradient(var(--diff-row-wash), var(--diff-row-wash))}@keyframes F1KBNa_diffFlashFade{0%{opacity:1}to{opacity:0}}@keyframes F1KBNa_diffFlashShake{0%{opacity:1;transform:translateY(0)}10%{transform:translateY(1px)}20%{transform:translateY(-1px)}30%{transform:translateY(1px)}40%{transform:translateY(-1px)}50%{transform:translateY(1px)}60%{transform:translateY(-1px)}70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(0)}}.F1KBNa_overviewRuler{pointer-events:none;opacity:.5;width:4px;position:absolute;top:0;bottom:0;right:0}.F1KBNa_overviewMarker{border-radius:2px;width:100%;min-height:2px;position:absolute;right:0}.F1KBNa_markerDel{background-color:var(--dsw-alias-state-error-primary)}.F1KBNa_markerAdd{background-color:var(--dsw-alias-state-success-primary)}.F1KBNa_lines{border-spacing:0;width:max-content;min-width:100%;font-size:calc(1em * var(--dsh-diff-font-scale,1));display:table}.F1KBNa_line{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);-webkit-user-select:none;user-select:none;display:table-row}.F1KBNa_vSpacer{display:table-row}.F1KBNa_gutter{box-sizing:border-box;text-align:right;width:44px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;cursor:default;padding-right:10px;display:table-cell}.F1KBNa_line>.F1KBNa_gutter{z-index:1;background-color:var(--dsw-alias-markdown-code-block);background-image:linear-gradient(var(--diff-row-tint,transparent), var(--diff-row-tint,transparent)), linear-gradient(var(--diff-row-wash,transparent), var(--diff-row-wash,transparent));position:sticky;left:0}.F1KBNa_line>.F1KBNa_gutter+.F1KBNa_gutter{left:44px}.F1KBNa_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{--diff-row-tint:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 20%, transparent);background-color:var(--diff-row-tint)}.F1KBNa_add{--diff-row-tint:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 18%, transparent);background-color:var(--diff-row-tint)}.F1KBNa_statusBar{box-sizing:border-box;border-top:1px solid var(--dsw-alias-border-l2);height:34px;color:var(--dsw-alias-label-tertiary);font-family:var(--dsw-font-markdown-code-block);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.F1KBNa_statusAction{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_statusAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langSelect{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:4px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_langSelect:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langLabel{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.F1KBNa_presentationSelect{cursor:pointer;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_presentationSelect:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_chip{justify-content:flex-end;align-items:center;gap:5px;min-width:0;padding-right:14px;display:inline-flex}.F1KBNa_chipLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_coverHost{align-items:center;display:inline-flex;position:relative}.F1KBNa_coverCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:12px;align-items:center;gap:4px;padding:6px;display:flex}.F1KBNa_coverPopover{z-index:50;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_coverNotice{z-index:80;pointer-events:none;animation:1.25s ease-out forwards F1KBNa_coverNoticeFade;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_coverNoticeCard{gap:4px;padding:6px 8px}@keyframes F1KBNa_coverNoticeFade{0%,78%{opacity:1}to{opacity:0}}.F1KBNa_coverNoticeGlyph{width:44px;height:44px;color:var(--dsw-alias-label-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_coverNoticeGlyph[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_coverNoticeGlyph[data-changed]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_coverNoticeText{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.F1KBNa_coverButton{width:32px;height:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_coverButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_coverButton[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_presentationHost{align-items:center;display:inline-flex}.F1KBNa_chipPresentation{min-width:36px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:20px;flex:none;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_chipPresentation:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_mirrored{transform:scaleX(-1)}.F1KBNa_notice{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:360px;box-shadow:var(--dsw-shadow-lv3);border-radius:10px;align-items:flex-start;gap:12px;padding:12px 14px;display:flex;position:fixed;bottom:24px;right:24px}.F1KBNa_noticeText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);flex:1;margin:0;line-height:1.45}.F1KBNa_noticeButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font:var(--dsw-font-caption);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px}.F1KBNa_noticeButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_wrap .F1KBNa_line{height:auto;min-height:var(--dsh-diff-line-height,22px)}.F1KBNa_subline{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);white-space:pre;display:block;overflow:hidden}.F1KBNa_wrapActive{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_wrapActive:hover{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_splitRoot{isolation:isolate;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBodySplit{flex:1;min-height:0;overflow-x:hidden}.F1KBNa_splitCols{width:100%;min-width:0;display:flex}.F1KBNa_splitCol{box-sizing:border-box;flex:1 1 0;min-width:0;overflow:hidden}.F1KBNa_splitDivider{background:var(--dsw-alias-border-l2);flex:0 0 1px}.F1KBNa_splitCol .F1KBNa_gutter,.F1KBNa_splitCol .F1KBNa_code{vertical-align:top}.F1KBNa_splitHScrollRow{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;width:100%;min-width:0;display:flex}.F1KBNa_splitHScroll{overscroll-behavior:none;min-width:0;height:var(--dsh-scrollbar-width,8px);flex:1 1 0;overflow:auto hidden}.F1KBNa_splitHScroll::-webkit-scrollbar{height:var(--dsh-scrollbar-width,8px)}.F1KBNa_splitHScroll::-webkit-scrollbar-track{cursor:default}.F1KBNa_splitHScroll::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_splitHScrollFill{height:1px}.F1KBNa_splitLdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 20%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 18%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 20%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 18%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 32%, transparent)}";
24
+ const css = ".F1KBNa_panelFailure{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:16px;display:flex}.F1KBNa_panelFailureText{min-width:0}.F1KBNa_panelFailureRetry{border:1px solid var(--dsw-alias-border-l2);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;margin-left:auto;padding:2px 8px}.F1KBNa_panelFailureRetry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_layer{box-sizing:border-box;flex:none;align-items:center;width:calc(100% + 4px);height:42px;margin:4px -2px;display:flex;position:relative}.F1KBNa_headerEntry{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:6px;display:inline-flex;position:relative}.F1KBNa_headerEntry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_headerEntry[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}.F1KBNa_headerEntry:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_headerEntryCount{box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);min-width:14px;height:14px;color:var(--dsw-alias-label-primary-foreground);text-align:center;font-variant-numeric:tabular-nums;pointer-events:none;border-radius:7px;padding:0 3px;font-size:10px;line-height:14px;position:absolute;top:-1px;right:-1px}.F1KBNa_headerEntry svg{display:block}.F1KBNa_footerButtons{align-items:center;width:100%;display:flex}.F1KBNa_badge{box-sizing:border-box;width:100%;height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}.F1KBNa_badge:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_badge:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.F1KBNa_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.F1KBNa_layer.F1KBNa_rail{width:36px;height:36px;margin:8px 0 10px}.F1KBNa_rail .F1KBNa_badge{border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.F1KBNa_rail .F1KBNa_badgeLabel{display:none}.F1KBNa_rail .F1KBNa_badgeCount{box-sizing:border-box;background:var(--dsw-alias-state-business-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-foreground);font-variant-numeric:tabular-nums;border-radius:9px;justify-content:center;align-items:center;padding:0 4px;font-size:11px;line-height:18px;display:flex;position:absolute;top:-3px;right:-7px}.F1KBNa_coverBackdrop{z-index:29;background:var(--dsw-specific-sidebar-fill);position:fixed;inset:0}.F1KBNa_panel{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:none;box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);-webkit-user-select:none;user-select:none;border-radius:12px;flex-direction:column;display:flex;position:fixed;inset:8px 8px 128px;overflow:hidden}.F1KBNa_panel .F1KBNa_code,.F1KBNa_panel .F1KBNa_mdPreviewBody,.F1KBNa_panel .F1KBNa_discussionUser,.F1KBNa_panel .F1KBNa_discussionAnswer,.F1KBNa_panel .F1KBNa_quoteText,.F1KBNa_panel .F1KBNa_diffPath,.F1KBNa_panel .F1KBNa_rowPath,.F1KBNa_panel input,.F1KBNa_panel textarea,.F1KBNa_panel [contenteditable]{-webkit-user-select:text;user-select:text}.F1KBNa_panelDocked{width:100%;max-width:none;height:100%;box-shadow:none;border:none;border-radius:0;position:static;inset:auto}.F1KBNa_dockHost{flex-direction:column;min-height:0;display:flex;position:absolute;inset:0}.F1KBNa_header{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.F1KBNa_headerActions{align-items:center;gap:2px;display:flex}.F1KBNa_settingsPage{padding:8px 12px}.F1KBNa_settingsGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupHeader{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsGroupText{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.F1KBNa_settingsGroupTitle{font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsGroupDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsGroupChevron{margin-left:auto;transition:transform .15s}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupChevron{transform:rotate(180deg)}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupHeader{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupBody{flex-direction:column;display:flex}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow{padding-left:16px}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow:last-child,.F1KBNa_settingsPage>.F1KBNa_settingsRow:last-child{border-bottom:none}.F1KBNa_settingsRow{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsRowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.F1KBNa_settingsRowTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsRowDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsSelector{background:var(--dsw-alias-bg-module-platform);min-width:72px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.F1KBNa_settingsSelector:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_settingsSelector[data-recording]{box-shadow:inset 0 0 0 1px var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-secondary)}.F1KBNa_settingsReset{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;margin-left:6px;padding:0;display:inline-flex}.F1KBNa_settingsReset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_settingsReset:disabled{opacity:.4;cursor:default}.F1KBNa_colorPicker{position:relative}.F1KBNa_colorPickerTrigger{background:var(--dsw-alias-bg-module-platform);width:120px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_colorPickerTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_colorSwatch{border:1px solid var(--dsw-alias-border-l2);border-radius:50%;flex:none;width:24px;height:24px}.F1KBNa_colorValue{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.F1KBNa_colorPickerChevron{flex:none}.F1KBNa_colorBackdrop{z-index:40;position:fixed;inset:0}.F1KBNa_colorPickerPopover{z-index:41;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:10px;padding:10px;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_colorPickerPanel{flex-direction:column;gap:8px;display:flex}.F1KBNa_colorPickerInputRow{align-items:center;gap:8px;display:flex}.F1KBNa_colorPickerPreview{border:1px solid var(--dsw-alias-border-l2);border-radius:6px;flex:none;width:22px;height:22px}.F1KBNa_colorPickerInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-module-platform);min-width:0;height:30px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 8px;font-size:12px;line-height:28px}.F1KBNa_colorPickerInput:focus{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.F1KBNa_colorSv{border:1px solid var(--dsw-alias-border-l1);cursor:crosshair;touch-action:none;border-radius:8px;height:140px;position:relative}.F1KBNa_colorSvCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_colorHue{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;touch-action:none;border-radius:7px;height:14px;position:relative}.F1KBNa_colorHueCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:16px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_diffPreview{z-index:2;border:1px solid var(--dsw-alias-border-l1);font:var(--dsw-font-markdown-code-block);background:var(--dsw-alias-markdown-code-block);border-radius:8px;margin:16px 0 8px;padding:8px;position:sticky;top:0;overflow:hidden}.F1KBNa_diffPreviewTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:6px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_diffPreviewScroll{height:132px;overflow-y:auto}.F1KBNa_mdPreviewWrap{isolation:isolate;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_mdPreviewBody{overscroll-behavior:none;min-width:0;min-height:0;color:var(--dsw-alias-label-primary);flex:1;padding:12px 16px;position:relative;overflow:auto}.F1KBNa_mdPreviewContent{width:100%;min-width:0;margin:0 auto}.F1KBNa_mdPreviewSingle{display:block}.F1KBNa_mdPreviewDouble{display:flex}.F1KBNa_mdPreviewBody .mdBlock{border-radius:4px;margin-bottom:12px;padding:2px 6px}.F1KBNa_mdPreviewBody .mdAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_mdPreviewBody .mdDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_mdPreviewBody .mdWordDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdWordAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdDouble{flex-direction:column;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleRow{align-items:flex-start;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleCol{flex:1;min-width:0}.F1KBNa_mdPreviewBody .mdDoubleRule{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:0 12px}.F1KBNa_mdPreviewFallback{font-family:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 16px;font-size:12px;line-height:18px}.F1KBNa_mdPreviewBody{word-break:break-word;font-size:13px;line-height:20px}.F1KBNa_mdPreviewBody>:first-child{margin-top:0}.F1KBNa_mdPreviewBody>:last-child{margin-bottom:0}.F1KBNa_mdPreviewBody h1,.F1KBNa_mdPreviewBody h2,.F1KBNa_mdPreviewBody h3,.F1KBNa_mdPreviewBody h4,.F1KBNa_mdPreviewBody h5,.F1KBNa_mdPreviewBody h6{margin:16px 0 8px;font-weight:600;line-height:1.3}.F1KBNa_mdPreviewBody h1{font-size:22px}.F1KBNa_mdPreviewBody h2{font-size:19px}.F1KBNa_mdPreviewBody h3{font-size:16px}.F1KBNa_mdPreviewBody h4{font-size:15px}.F1KBNa_mdPreviewBody h5{font-size:14px}.F1KBNa_mdPreviewBody h6{font-size:13px}.F1KBNa_mdPreviewBody p{margin:8px 0}.F1KBNa_mdPreviewBody ul,.F1KBNa_mdPreviewBody ol{margin:8px 0;padding-left:22px}.F1KBNa_mdPreviewBody li{margin:2px 0}.F1KBNa_mdPreviewBody a{color:var(--dsw-alias-state-business-primary);text-decoration:none}.F1KBNa_mdPreviewBody a:hover{text-decoration:underline}.F1KBNa_mdPreviewBody code{font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:4px;padding:1px 5px;font-size:12.5px}.F1KBNa_mdPreviewBody pre{overscroll-behavior-x:none;border:1px solid var(--dsw-alias-border-l1);font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:8px;margin:8px 0;padding:10px 12px;font-size:12.5px;line-height:18px;overflow:auto}.F1KBNa_mdPreviewBody pre code{background:0 0;padding:0}.F1KBNa_mdPreviewBody blockquote{border-left:3px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);margin:8px 0;padding:0 12px}.F1KBNa_mdPreviewBody hr{background:var(--dsw-alias-border-l1);border:none;height:1px;margin:16px 0}.F1KBNa_mdPreviewBody table{border-collapse:collapse;margin:8px 0}.F1KBNa_mdPreviewBody th,.F1KBNa_mdPreviewBody td{border:1px solid var(--dsw-alias-border-l1);padding:4px 10px}.F1KBNa_mdPreviewBody img{max-width:100%}.F1KBNa_mdPreviewBody .mdImageFallback{border:1px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-markdown-code-block) 45%, transparent);width:100%;min-height:120px;color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-markdown-code-block);text-align:center;white-space:pre-wrap;word-break:break-all;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:8px 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_toggle{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:18px;flex:none;width:60px;height:36px;padding:0;position:relative}.F1KBNa_toggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_toggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.F1KBNa_toggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleOn:hover{background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleThumb{background:var(--dsw-alias-label-primary);border-radius:50%;width:28px;height:28px;transition:left .12s;position:absolute;top:3px;left:3px}.F1KBNa_toggleOn .F1KBNa_toggleThumb{background:#fff;left:27px}.F1KBNa_stepper{align-items:center;gap:6px;display:inline-flex}.F1KBNa_stepperButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);width:32px;height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;padding:0;position:relative}.F1KBNa_stepperButton:before,.F1KBNa_stepperButton:after{content:\"\";background:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_stepperButton:before{width:10px;height:1px}.F1KBNa_stepperButton:after{width:1px;height:10px;display:none}.F1KBNa_stepperButtonUp:after{display:block}.F1KBNa_stepperButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_stepperButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_stepperValue{text-align:center;min-width:2ch;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:14px;line-height:22px}.F1KBNa_states{flex-direction:column;flex:1;min-height:0;padding:4px 12px 12px;display:flex;overflow-y:auto}.F1KBNa_split{flex:1;align-items:stretch;min-height:0;display:flex;position:relative}.F1KBNa_fileListKnob{z-index:39;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;box-shadow:var(--dsw-elevation-prominent);border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.F1KBNa_fileListKnob[data-open]{box-shadow:none;opacity:0}.F1KBNa_fileListKnob:not([data-open]){animation:.32s ease-in-out .5s both F1KBNa_fileListKnobIn}@keyframes F1KBNa_fileListKnobIn{0%{opacity:0}to{opacity:1}}.F1KBNa_fileListKnob:hover,.F1KBNa_fileListKnob:focus-visible{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-interactive-bg-hover), var(--dsw-alias-interactive-bg-hover))}.F1KBNa_fileListFloat{z-index:40;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);box-shadow:none;transform-origin:0 0;border-radius:12px;flex-direction:column;padding:6px 0 10px 8px;display:flex;position:absolute;overflow:hidden}.F1KBNa_fileListFloatClosing{pointer-events:none;animation:.14s ease-in forwards F1KBNa_fileListShrink}@keyframes F1KBNa_fileListShrink{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.F1KBNa_fileList{box-sizing:border-box;border-right:1px solid var(--dsw-alias-border-l2);flex-direction:column;flex:none;width:240px;min-height:0;padding:4px 8px 12px;display:flex}.F1KBNa_listScroll{flex:1;min-height:0;overflow-y:scroll}.F1KBNa_bulkActions{flex:none;gap:6px;padding:8px 8px 0 0;display:flex}.F1KBNa_bulkActions .F1KBNa_action{text-align:center;flex:auto}.F1KBNa_addPath{justify-content:center;align-items:center;gap:4px;display:inline-flex}.F1KBNa_resizeHandle{cursor:col-resize;touch-action:none;background:0 0;flex:none;width:5px;margin:0 -2px}.F1KBNa_resizeHandle:hover{background:var(--dsw-alias-border-l2)}.F1KBNa_floatResizeHandle{z-index:41;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border-radius:4px;position:absolute}.F1KBNa_floatResizeHandle:hover{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-border-l2), var(--dsw-alias-border-l2))}.F1KBNa_detail{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.F1KBNa_detailEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;margin:0;padding:24px;font-size:12px;line-height:18px;display:flex}.F1KBNa_confirmBackdrop{z-index:55;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.F1KBNa_confirmCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:340px;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}.F1KBNa_confirmText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;line-height:1.5}.F1KBNa_confirmActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;display:flex}.F1KBNa_pickerCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:420px;max-width:100%;height:70%;max-height:100%;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:8px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.F1KBNa_pickerTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}.F1KBNa_pickerClose{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:10px;right:10px}.F1KBNa_pickerClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_pickerForm{flex:none;gap:8px;display:flex}.F1KBNa_pickerInput{border:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;flex:auto;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_pickerInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_tree{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex:auto;min-height:0;padding:4px 2px 4px 4px;overflow:auto scroll}.F1KBNa_treeRow{border-radius:6px;align-items:center;gap:2px;padding-right:4px;display:flex}.F1KBNa_treeRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_treeRow[data-selected]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.F1KBNa_treeCaret{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_treeCaret:hover{color:var(--dsw-alias-label-primary)}.F1KBNa_treeName{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:auto;align-items:center;gap:6px;padding:2px 4px;font-family:inherit;font-size:12px;line-height:18px;display:flex}.F1KBNa_treeName:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_treeNote{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.F1KBNa_pickerIcon{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_pickerName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_pickerNote{color:var(--dsw-alias-label-tertiary);flex:none;margin:0;font-size:12px;line-height:18px}.F1KBNa_pickerCheck{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-right:auto;font-size:12px;line-height:18px;display:flex}.F1KBNa_title{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}.F1KBNa_note,.F1KBNa_readError,.F1KBNa_hint{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.F1KBNa_noteCentered{text-align:center;margin:auto}.F1KBNa_emptyState{flex-direction:column;align-items:center;gap:10px;margin:auto;display:flex}.F1KBNa_importButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:5px 14px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_importButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_importButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_importNote{color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:12px;line-height:18px}.F1KBNa_readError{color:var(--dsw-alias-state-error-primary)}.F1KBNa_group{color:var(--dsw-alias-label-tertiary);margin:8px 0 4px;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_groupHead{align-items:center;gap:4px;margin:8px 0 4px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton{box-sizing:border-box;border-radius:6px;flex:none;justify-content:center;align-items:center;width:20px;height:20px;min-height:0;padding:0;display:inline-flex}.F1KBNa_groupHead>.F1KBNa_group{margin:0}.F1KBNa_listHead{flex:none;align-items:center;gap:4px;margin:8px 1px 2px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton.F1KBNa_listFold{width:26px;height:26px}.F1KBNa_listTitle{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_listTabs{background:var(--dsw-alias-interactive-bg-hover);border-radius:8px;flex:auto;gap:2px;min-width:0;padding:2px;display:flex}.F1KBNa_listTab{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;flex:1;padding:3px 8px;font-size:12px;line-height:16px}.F1KBNa_listTab[aria-selected=true]{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.F1KBNa_commentRow{box-sizing:border-box;width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;padding:6px 8px;display:block}.F1KBNa_commentRow:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_commentHead{align-items:baseline;gap:6px;min-width:0;display:flex}.F1KBNa_commentLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-markdown-code-block);font-size:11px;line-height:16px;overflow:hidden}.F1KBNa_commentLost{color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px;line-height:16px}.F1KBNa_commentTitle{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px;display:block;overflow:hidden}.F1KBNa_listEmpty{color:var(--dsw-alias-label-tertiary);margin:8px 12px;font-size:12px;line-height:18px}.F1KBNa_emptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.F1KBNa_rows{margin:0;padding:0;list-style:none}.F1KBNa_row{border:1px solid #0000;border-radius:10px;margin:2px 0}.F1KBNa_rowMenuAnchor{display:none}.F1KBNa_rowHead{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_rowHead:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_rowHead[data-selected]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_rowPath{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-left:4px;font-size:12px;line-height:18px;overflow:hidden}.F1KBNa_kindTag{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_kindHint{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:16px}.F1KBNa_divergedHint,.F1KBNa_missingHint{border-bottom:1px solid var(--dsw-alias-border-l2);margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missing{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary));white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_rowFailed{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_actionError{border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missingHint{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary))}.F1KBNa_rowMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;gap:6px;margin-left:auto;font-size:12px;line-height:16px;display:inline-flex}.F1KBNa_addCount{color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_delCount{color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_diff{background:var(--dsw-alias-markdown-code-block);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffHeader{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_panelDocked .F1KBNa_diffHeader{background:var(--dsw-alias-bg-base)}.F1KBNa_diffPath{appearance:none;min-width:0;font:inherit;text-overflow:ellipsis;color:var(--dsw-alias-label-primary);background:0 0;border:0;flex:1;margin-left:4px;padding:0;font-size:12px;line-height:18px;position:relative;top:1px}.F1KBNa_diffPath:focus{outline:none}.F1KBNa_diffActions{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_diffStats{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:16px}.F1KBNa_flexSpacer{flex:1}.F1KBNa_divider{background:var(--dsw-alias-border-l1);align-self:stretch;width:1px;margin:2px 0}.F1KBNa_action{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_action:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_actionChord{color:var(--dsw-alias-label-tertiary);margin-left:6px;font-size:11px}.F1KBNa_actionPrimary{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_actionPrimary:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_actionPrimary:disabled{background:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:.55}.F1KBNa_actionQuietDisabled:disabled{cursor:pointer;color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l1);background:0 0}.F1KBNa_actionPrimary.F1KBNa_actionQuietDisabled:disabled{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:1}.F1KBNa_iconAction{justify-content:center;align-items:center;min-height:25px;padding:4px 6px;display:inline-flex}.F1KBNa_close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expand{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expandExpanded svg{transform:rotate(180deg)}.F1KBNa_diffBodyWrap{isolation:isolate;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBody{overscroll-behavior:none;min-width:0;font:var(--dsw-font-markdown-code-block);-webkit-text-size-adjust:100%;text-size-adjust:100%;cursor:text;outline:none;flex:1;padding:0;position:relative;overflow:auto}.F1KBNa_diffBody::-webkit-scrollbar,.F1KBNa_diffBody::-webkit-scrollbar-track,.F1KBNa_diffBody::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_blockActions{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);z-index:2;border-radius:10px;align-items:center;gap:9px;padding:5px;display:flex;position:absolute;right:8px}.F1KBNa_blockActionsDivider{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:2px 0}.F1KBNa_blockPosition{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;margin-left:7px;font-size:12px;line-height:16px}.F1KBNa_searchBar{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);border-radius:10px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:8px;right:8px}.F1KBNa_searchInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:150px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_searchInput:focus{border-color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchCount{text-align:center;min-width:34px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:16px}.F1KBNa_searchToggle{border:1px solid var(--dsw-alias-border-l1);min-height:25px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:4px 6px;display:inline-flex}.F1KBNa_searchToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_searchToggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchMatch{color:inherit;background-color:#facc1542;border-radius:2px}.F1KBNa_searchMatchCurrent{color:inherit;background-color:#facc1599;border-radius:2px}.F1KBNa_blockFlash{z-index:3;box-sizing:border-box;border:2px solid var(--dsw-alias-state-business-primary);pointer-events:none;border-radius:4px;animation:1s ease-out forwards F1KBNa_diffFlashFade;position:absolute;left:0;right:0}.F1KBNa_blockFlashShake{animation:.7s ease-out forwards F1KBNa_diffFlashShake}.F1KBNa_discussionRow{background:var(--dsw-alias-bg-base);display:table-row}.F1KBNa_discussionCell{display:table-cell}.F1KBNa_discussionPin{z-index:2;width:0;height:0;position:sticky;left:0}.F1KBNa_discussion{z-index:2;box-sizing:border-box;border-left:3px solid var(--dsw-alias-state-business-primary);box-shadow:inset 0 1px 0 0 color-mix(in srgb, var(--dsw-alias-label-secondary) 55%, transparent), inset 0 -1px 0 0 color-mix(in srgb, var(--dsw-alias-label-secondary) 55%, transparent), inset -1px 0 0 0 color-mix(in srgb, var(--dsw-alias-label-secondary) 55%, transparent);cursor:default;background:0 0;flex-direction:column;display:flex;position:absolute;top:0;left:0;overflow:hidden}.F1KBNa_discussionHead{font:var(--dsw-font-markdown-code-block)}.F1KBNa_discussionBody,.F1KBNa_threadFontProbe{font:var(--dsw-font-markdown-base);font-size:calc(var(--dsh-content-font-size,14px) - 2px)}.F1KBNa_threadFontProbe{visibility:hidden;pointer-events:none;width:0;height:0;position:absolute;overflow:hidden}.F1KBNa_discussionBody{flex-direction:column;flex:auto;min-height:0;padding:0 12px;display:flex;overflow:hidden}.F1KBNa_discussion[data-lost]{border-left-color:var(--dsw-alias-label-secondary);background:repeating-linear-gradient(135deg, var(--dsw-alias-interactive-bg-hover) 0 4px, transparent 4px 8px);background-origin:border-box}.F1KBNa_discussion[data-lost] .F1KBNa_discussionSend,.F1KBNa_discussion[data-lost] .F1KBNa_discussionSend:hover:not(:disabled),.F1KBNa_discussion[data-lost] .F1KBNa_discussionSend:disabled{background:var(--dsw-alias-label-secondary);border-color:var(--dsw-alias-label-secondary);color:var(--dsw-alias-label-primary-foreground)}.F1KBNa_discussion[data-lost] .F1KBNa_discussionUser{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 30%, transparent)}.F1KBNa_discussionAnswer{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;margin:0;padding:0;font-family:inherit;line-height:22px}.F1KBNa_discussionUser{box-sizing:border-box;background:var(--dsw-specific-bubble,var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover)));width:fit-content;max-width:82%;color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;border-radius:8px 0 8px 8px;margin:6.6px 0 6.6px auto;padding:4.4px 11px;font-family:inherit;line-height:22px}.F1KBNa_discussionCode{box-sizing:border-box;font:var(--dsw-font-markdown-code);font-family:var(--ds-font-family-code);background:color-mix(in srgb, var(--dsw-alias-markdown-inline-code,var(--dsw-alias-interactive-bg-hover-solid)) 90%, var(--dsw-alias-label-secondary));border:.5px solid var(--dsw-alias-border-l1);border-radius:6px;align-items:center;padding:0 5px;font-size:.875em;line-height:16px;display:inline-flex}.F1KBNa_discussionBody strong{font-weight:700}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0;font-family:inherit;line-height:22px}.F1KBNa_discussionNote[data-diff-discussion-hidden]{color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionDots{margin-left:1px}.F1KBNa_discussionDots>span{animation:1.2s ease-in-out infinite F1KBNa_discussionDot}.F1KBNa_discussionDots>span:nth-child(2){animation-delay:.15s}.F1KBNa_discussionDots>span:nth-child(3){animation-delay:.3s}@keyframes F1KBNa_discussionDot{0%,60%,to{opacity:.25}30%{opacity:1}}.F1KBNa_quoteLines{table-layout:fixed;border-spacing:0;width:calc(100% + 27px);min-width:0;color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-code-block);line-height:var(--dsh-diff-line-height,22px);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover) 55%, transparent);margin:0 -12px 0 -15px;display:table}.F1KBNa_quoteAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 12%, transparent)}.F1KBNa_quoteDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 13%, transparent)}.F1KBNa_quoteLine{font-size:calc(1em * var(--dsh-diff-font-scale,1));height:var(--dsh-diff-line-height,22px);display:table-row}.F1KBNa_quoteCode{display:table-cell}.F1KBNa_quoteText{white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;display:block}.F1KBNa_quoteNoWrap .F1KBNa_quoteText{white-space:pre;overflow-wrap:normal;overflow:hidden}.F1KBNa_quoteNoWrap .F1KBNa_quoteText:after{content:\"\";width:calc(var(--dsh-diff-quote-width,0px) + 100%);display:inline-block}.F1KBNa_discussionHead{box-sizing:border-box;flex:none;align-items:center;gap:8px;height:22px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;flex:none;align-items:flex-end;gap:8px;height:44px;margin:auto -6px 0;padding:0 0 6.6px;display:flex}.F1KBNa_discussionInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);cursor:text;border-radius:6px;flex:auto;padding:3px 8px;font-family:inherit;line-height:18px}.F1KBNa_discussionToggle{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;display:inline-flex}.F1KBNa_discussionToggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_discussionRangeWrap{font:var(--dsw-font-markdown-code-block);flex:none}.F1KBNa_discussionRange{color:var(--dsw-alias-label-tertiary);font-family:inherit}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput::placeholder{font-family:inherit;font-size:inherit;color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionSend{box-sizing:border-box;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;height:26px;padding-left:9px;padding-right:9px;display:inline-flex}.F1KBNa_rowDiscussed{--diff-row-wash:color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent);background-image:linear-gradient(var(--diff-row-wash), var(--diff-row-wash))}@keyframes F1KBNa_diffFlashFade{0%{opacity:1}to{opacity:0}}@keyframes F1KBNa_diffFlashShake{0%{opacity:1;transform:translateY(0)}10%{transform:translateY(1px)}20%{transform:translateY(-1px)}30%{transform:translateY(1px)}40%{transform:translateY(-1px)}50%{transform:translateY(1px)}60%{transform:translateY(-1px)}70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(0)}}.F1KBNa_overviewRuler{pointer-events:none;opacity:.5;width:4px;position:absolute;top:0;bottom:0;right:0}.F1KBNa_overviewMarker{border-radius:2px;width:100%;min-height:2px;position:absolute;right:0}.F1KBNa_markerDel{background-color:var(--dsw-alias-state-error-primary)}.F1KBNa_markerAdd{background-color:var(--dsw-alias-state-success-primary)}.F1KBNa_lines{border-spacing:0;width:max-content;min-width:100%;font-size:calc(1em * var(--dsh-diff-font-scale,1));display:table}.F1KBNa_line{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);-webkit-user-select:none;user-select:none;display:table-row}.F1KBNa_vSpacer{display:table-row}.F1KBNa_gutter{box-sizing:border-box;text-align:right;width:44px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;cursor:default;padding-right:10px;display:table-cell}.F1KBNa_line>.F1KBNa_gutter{z-index:1;background-color:var(--dsw-alias-markdown-code-block);background-image:linear-gradient(var(--diff-row-tint,transparent), var(--diff-row-tint,transparent)), linear-gradient(var(--diff-row-wash,transparent), var(--diff-row-wash,transparent));position:sticky;left:0}.F1KBNa_line>.F1KBNa_gutter+.F1KBNa_gutter{left:44px}.F1KBNa_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{--diff-row-tint:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 20%, transparent);background-color:var(--diff-row-tint)}.F1KBNa_add{--diff-row-tint:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 18%, transparent);background-color:var(--diff-row-tint)}.F1KBNa_statusBar{box-sizing:border-box;border-top:1px solid var(--dsw-alias-border-l2);height:34px;color:var(--dsw-alias-label-tertiary);font-family:var(--dsw-font-markdown-code-block);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.F1KBNa_statusAction{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_statusAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langSelect{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:4px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_langSelect:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langLabel{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.F1KBNa_presentationSelect{cursor:pointer;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_presentationSelect:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_chip{justify-content:flex-end;align-items:center;gap:5px;min-width:0;padding-right:14px;display:inline-flex}.F1KBNa_chipLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_coverHost{align-items:center;display:inline-flex;position:relative}.F1KBNa_coverCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:12px;align-items:center;gap:4px;padding:6px;display:flex}.F1KBNa_coverPopover{z-index:50;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_coverNotice{z-index:80;pointer-events:none;animation:1.25s ease-out forwards F1KBNa_coverNoticeFade;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_coverNoticeCard{gap:4px;padding:6px 8px}@keyframes F1KBNa_coverNoticeFade{0%,78%{opacity:1}to{opacity:0}}.F1KBNa_coverNoticeGlyph{width:44px;height:44px;color:var(--dsw-alias-label-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_coverNoticeGlyph[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_coverNoticeGlyph[data-changed]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_coverNoticeText{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.F1KBNa_coverButton{width:32px;height:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_coverButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_coverButton[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_presentationHost{align-items:center;display:inline-flex}.F1KBNa_chipPresentation{min-width:36px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:20px;flex:none;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_chipPresentation:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_mirrored{transform:scaleX(-1)}.F1KBNa_notice{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:360px;box-shadow:var(--dsw-shadow-lv3);border-radius:10px;align-items:flex-start;gap:12px;padding:12px 14px;display:flex;position:fixed;bottom:24px;right:24px}.F1KBNa_noticeText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);flex:1;margin:0;line-height:1.45}.F1KBNa_noticeButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font:var(--dsw-font-caption);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px}.F1KBNa_noticeButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_wrap .F1KBNa_line{height:auto;min-height:var(--dsh-diff-line-height,22px)}.F1KBNa_subline{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);white-space:pre;display:block;overflow:hidden}.F1KBNa_wrapActive{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_wrapActive:hover{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_splitRoot{isolation:isolate;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBodySplit{flex:1;min-height:0;overflow-x:hidden}.F1KBNa_splitCols{width:100%;min-width:0;display:flex}.F1KBNa_splitCol{box-sizing:border-box;flex:1 1 0;min-width:0;overflow:hidden}.F1KBNa_splitDivider{background:var(--dsw-alias-border-l2);flex:0 0 1px}.F1KBNa_splitCol .F1KBNa_gutter,.F1KBNa_splitCol .F1KBNa_code{vertical-align:top}.F1KBNa_splitHScrollRow{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;width:100%;min-width:0;display:flex}.F1KBNa_splitHScroll{overscroll-behavior-x:none;min-width:0;height:var(--dsh-scrollbar-width,8px);flex:1 1 0;overflow:auto hidden}.F1KBNa_splitHScroll::-webkit-scrollbar{height:var(--dsh-scrollbar-width,8px)}.F1KBNa_splitHScroll::-webkit-scrollbar-track{cursor:default}.F1KBNa_splitHScroll::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_splitHScrollFill{height:1px}.F1KBNa_splitLdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 20%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 18%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 20%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 18%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 32%, transparent)}";
25
25
  const tagId = "dsh-diff-approval/PendingPanel.module.css";
26
26
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
27
27
  const tag = document.createElement("style");
@@ -31,236 +31,248 @@ window.__ModuleLoader__.load({
31
31
  document.head.appendChild(tag);
32
32
  }
33
33
  var PendingPanel_module_css_default = {
34
- "settingsSelector": "F1KBNa_settingsSelector",
35
- "headerActions": "F1KBNa_headerActions",
36
- "colorSwatch": "F1KBNa_colorSwatch",
37
- "diffBody": "F1KBNa_diffBody",
38
- "readError": "F1KBNa_readError",
39
- "rowDiscussed": "F1KBNa_rowDiscussed",
40
- "lines": "F1KBNa_lines",
41
- "discussionToggle": "F1KBNa_discussionToggle",
34
+ "colorHue": "F1KBNa_colorHue",
42
35
  "splitHScrollFill": "F1KBNa_splitHScrollFill",
43
- "blockActions": "F1KBNa_blockActions",
44
- "fileListShrink": "F1KBNa_fileListShrink",
36
+ "detailEmpty": "F1KBNa_detailEmpty",
37
+ "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
38
+ "discussionDots": "F1KBNa_discussionDots",
39
+ "searchInput": "F1KBNa_searchInput",
40
+ "gutter": "F1KBNa_gutter",
41
+ "overviewRuler": "F1KBNa_overviewRuler",
42
+ "diffFlashFade": "F1KBNa_diffFlashFade",
43
+ "stepper": "F1KBNa_stepper",
44
+ "delCount": "F1KBNa_delCount",
45
+ "blockFlashShake": "F1KBNa_blockFlashShake",
46
+ "rowHead": "F1KBNa_rowHead",
45
47
  "stepperValue": "F1KBNa_stepperValue",
46
- "colorPickerPopover": "F1KBNa_colorPickerPopover",
47
- "diffPath": "F1KBNa_diffPath",
48
- "splitHScroll": "F1KBNa_splitHScroll",
49
- "group": "F1KBNa_group",
50
- "diffBodyWrap": "F1KBNa_diffBodyWrap",
51
- "row": "F1KBNa_row",
52
- "settingsGroupText": "F1KBNa_settingsGroupText",
53
- "discussion": "F1KBNa_discussion",
54
- "rows": "F1KBNa_rows",
55
- "discussionDot": "F1KBNa_discussionDot",
56
- "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
57
- "vSpacer": "F1KBNa_vSpacer",
58
- "subline": "F1KBNa_subline",
59
- "chipLabel": "F1KBNa_chipLabel",
60
48
  "discussionRow": "F1KBNa_discussionRow",
61
- "diff": "F1KBNa_diff",
62
- "pickerInput": "F1KBNa_pickerInput",
63
- "stepperButtonUp": "F1KBNa_stepperButtonUp",
64
- "quoteDel": "F1KBNa_quoteDel",
49
+ "confirmText": "F1KBNa_confirmText",
50
+ "statusBar": "F1KBNa_statusBar",
51
+ "chip": "F1KBNa_chip",
52
+ "subline": "F1KBNa_subline",
53
+ "threadFontProbe": "F1KBNa_threadFontProbe",
54
+ "discussionDot": "F1KBNa_discussionDot",
55
+ "split": "F1KBNa_split",
56
+ "settingsGroupText": "F1KBNa_settingsGroupText",
57
+ "coverButton": "F1KBNa_coverButton",
58
+ "quoteNoWrap": "F1KBNa_quoteNoWrap",
59
+ "listTabs": "F1KBNa_listTabs",
65
60
  "colorBackdrop": "F1KBNa_colorBackdrop",
66
- "intraAdd": "F1KBNa_intraAdd",
67
- "mirrored": "F1KBNa_mirrored",
68
- "searchToggle": "F1KBNa_searchToggle",
69
- "searchMatch": "F1KBNa_searchMatch",
70
- "coverNotice": "F1KBNa_coverNotice",
71
- "listScroll": "F1KBNa_listScroll",
72
- "close": "F1KBNa_close",
73
- "diffFlashFade": "F1KBNa_diffFlashFade",
74
- "actionError": "F1KBNa_actionError",
75
- "del": "F1KBNa_del",
61
+ "iconAction": "F1KBNa_iconAction",
62
+ "coverBackdrop": "F1KBNa_coverBackdrop",
63
+ "treeCaret": "F1KBNa_treeCaret",
64
+ "missing": "F1KBNa_missing",
65
+ "importButton": "F1KBNa_importButton",
66
+ "splitRoot": "F1KBNa_splitRoot",
76
67
  "layer": "F1KBNa_layer",
77
- "markerAdd": "F1KBNa_markerAdd",
78
- "coverCard": "F1KBNa_coverCard",
79
- "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
80
- "pickerTitle": "F1KBNa_pickerTitle",
81
- "splitCol": "F1KBNa_splitCol",
82
- "searchCount": "F1KBNa_searchCount",
83
- "confirmCard": "F1KBNa_confirmCard",
84
- "treeNote": "F1KBNa_treeNote",
68
+ "settingsRow": "F1KBNa_settingsRow",
69
+ "colorPicker": "F1KBNa_colorPicker",
70
+ "rowMenuAnchor": "F1KBNa_rowMenuAnchor",
71
+ "pickerCheck": "F1KBNa_pickerCheck",
72
+ "chipLabel": "F1KBNa_chipLabel",
73
+ "listScroll": "F1KBNa_listScroll",
74
+ "discussionHead": "F1KBNa_discussionHead",
75
+ "colorPickerChevron": "F1KBNa_colorPickerChevron",
76
+ "pickerName": "F1KBNa_pickerName",
77
+ "listTitle": "F1KBNa_listTitle",
78
+ "diffBody": "F1KBNa_diffBody",
85
79
  "note": "F1KBNa_note",
86
- "splitRoot": "F1KBNa_splitRoot",
87
- "colorSvCursor": "F1KBNa_colorSvCursor",
88
- "colorHueCursor": "F1KBNa_colorHueCursor",
89
- "settingsRowDesc": "F1KBNa_settingsRowDesc",
80
+ "settingsPage": "F1KBNa_settingsPage",
81
+ "fileListKnob": "F1KBNa_fileListKnob",
90
82
  "fileList": "F1KBNa_fileList",
91
- "rowMenuAnchor": "F1KBNa_rowMenuAnchor",
92
- "pickerNote": "F1KBNa_pickerNote",
93
- "quoteLines": "F1KBNa_quoteLines",
94
- "mdPreviewContent": "F1KBNa_mdPreviewContent",
83
+ "addCount": "F1KBNa_addCount",
84
+ "coverNoticeCard": "F1KBNa_coverNoticeCard",
85
+ "wrap": "F1KBNa_wrap",
86
+ "listEmpty": "F1KBNa_listEmpty",
87
+ "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
88
+ "kindHint": "F1KBNa_kindHint",
89
+ "toggleThumb": "F1KBNa_toggleThumb",
90
+ "discussionPin": "F1KBNa_discussionPin",
91
+ "commentHead": "F1KBNa_commentHead",
92
+ "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
93
+ "diffFlashShake": "F1KBNa_diffFlashShake",
94
+ "noticeButton": "F1KBNa_noticeButton",
95
+ "splitRadd": "F1KBNa_splitRadd",
95
96
  "coverNoticeFade": "F1KBNa_coverNoticeFade",
96
- "badgeLabel": "F1KBNa_badgeLabel",
97
- "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
98
- "split": "F1KBNa_split",
99
- "langLabel": "F1KBNa_langLabel",
100
- "fileListFloat": "F1KBNa_fileListFloat",
101
- "addButton": "F1KBNa_addButton",
102
- "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
103
- "importNote": "F1KBNa_importNote",
97
+ "pickerClose": "F1KBNa_pickerClose",
98
+ "colorSwatch": "F1KBNa_colorSwatch",
99
+ "colorHueCursor": "F1KBNa_colorHueCursor",
100
+ "coverNoticeText": "F1KBNa_coverNoticeText",
101
+ "close": "F1KBNa_close",
102
+ "lines": "F1KBNa_lines",
103
+ "discussionSend": "F1KBNa_discussionSend",
104
+ "searchBar": "F1KBNa_searchBar",
105
+ "noticeText": "F1KBNa_noticeText",
106
+ "badge": "F1KBNa_badge",
107
+ "rows": "F1KBNa_rows",
104
108
  "discussionNote": "F1KBNa_discussionNote",
105
- "states": "F1KBNa_states",
106
- "settingsRowText": "F1KBNa_settingsRowText",
107
- "noteCentered": "F1KBNa_noteCentered",
108
- "discussionBody": "F1KBNa_discussionBody",
109
- "diffHeader": "F1KBNa_diffHeader",
110
- "colorValue": "F1KBNa_colorValue",
111
- "diffPreview": "F1KBNa_diffPreview",
112
- "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
109
+ "coverPopover": "F1KBNa_coverPopover",
110
+ "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
111
+ "diffPath": "F1KBNa_diffPath",
112
+ "markerDel": "F1KBNa_markerDel",
113
+ "colorPickerInput": "F1KBNa_colorPickerInput",
114
+ "treeRow": "F1KBNa_treeRow",
115
+ "blockPosition": "F1KBNa_blockPosition",
116
+ "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
117
+ "coverNotice": "F1KBNa_coverNotice",
118
+ "splitLadd": "F1KBNa_splitLadd",
119
+ "overviewMarker": "F1KBNa_overviewMarker",
120
+ "commentLost": "F1KBNa_commentLost",
121
+ "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
122
+ "quoteLines": "F1KBNa_quoteLines",
123
+ "row": "F1KBNa_row",
113
124
  "discussionCompose": "F1KBNa_discussionCompose",
114
- "intraDel": "F1KBNa_intraDel",
115
- "iconAction": "F1KBNa_iconAction",
116
- "searchInput": "F1KBNa_searchInput",
117
- "confirmActions": "F1KBNa_confirmActions",
118
- "splitDivider": "F1KBNa_splitDivider",
119
- "kindTag": "F1KBNa_kindTag",
120
- "pickerCard": "F1KBNa_pickerCard",
121
- "add": "F1KBNa_add",
125
+ "chipPresentation": "F1KBNa_chipPresentation",
122
126
  "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
123
- "panelFailure": "F1KBNa_panelFailure",
124
- "line": "F1KBNa_line",
127
+ "divider": "F1KBNa_divider",
128
+ "blockFlash": "F1KBNa_blockFlash",
125
129
  "badgeCount": "F1KBNa_badgeCount",
126
- "overviewMarker": "F1KBNa_overviewMarker",
130
+ "expandExpanded": "F1KBNa_expandExpanded",
131
+ "splitRdel": "F1KBNa_splitRdel",
132
+ "mirrored": "F1KBNa_mirrored",
127
133
  "searchToggleOn": "F1KBNa_searchToggleOn",
128
- "colorPickerPanel": "F1KBNa_colorPickerPanel",
129
- "confirmBackdrop": "F1KBNa_confirmBackdrop",
130
- "headerEntryCount": "F1KBNa_headerEntryCount",
131
- "code": "F1KBNa_code",
132
- "settingsGroup": "F1KBNa_settingsGroup",
133
- "statusAction": "F1KBNa_statusAction",
134
- "splitLdel": "F1KBNa_splitLdel",
135
- "diffFlashShake": "F1KBNa_diffFlashShake",
136
- "rowFailed": "F1KBNa_rowFailed",
137
- "settingsPage": "F1KBNa_settingsPage",
138
- "discussionUser": "F1KBNa_discussionUser",
139
- "header": "F1KBNa_header",
140
- "detail": "F1KBNa_detail",
141
- "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
142
- "blockFlashShake": "F1KBNa_blockFlashShake",
143
- "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
144
- "coverNoticeCard": "F1KBNa_coverNoticeCard",
145
- "fileListKnobIn": "F1KBNa_fileListKnobIn",
134
+ "quoteAdd": "F1KBNa_quoteAdd",
146
135
  "emptyActions": "F1KBNa_emptyActions",
147
- "badge": "F1KBNa_badge",
148
- "hint": "F1KBNa_hint",
149
- "pickerCheck": "F1KBNa_pickerCheck",
150
- "expand": "F1KBNa_expand",
151
- "splitHScrollRow": "F1KBNa_splitHScrollRow",
152
- "footerButtons": "F1KBNa_footerButtons",
153
- "pickerForm": "F1KBNa_pickerForm",
154
- "panel": "F1KBNa_panel",
155
- "panelDocked": "F1KBNa_panelDocked",
156
- "noticeButton": "F1KBNa_noticeButton",
157
- "gutter": "F1KBNa_gutter",
158
- "mdPreviewBody": "F1KBNa_mdPreviewBody",
159
- "title": "F1KBNa_title",
160
- "coverPopover": "F1KBNa_coverPopover",
161
- "presentationSelect": "F1KBNa_presentationSelect",
162
- "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
163
- "action": "F1KBNa_action",
164
- "floatResizeHandle": "F1KBNa_floatResizeHandle",
165
- "actionPrimary": "F1KBNa_actionPrimary",
166
- "colorHue": "F1KBNa_colorHue",
167
- "context": "F1KBNa_context",
168
- "bulkActions": "F1KBNa_bulkActions",
169
- "pickerClose": "F1KBNa_pickerClose",
170
- "discussionDots": "F1KBNa_discussionDots",
171
- "splitCols": "F1KBNa_splitCols",
172
- "detailEmpty": "F1KBNa_detailEmpty",
173
- "pickerName": "F1KBNa_pickerName",
174
- "rowMeta": "F1KBNa_rowMeta",
175
- "settingsReset": "F1KBNa_settingsReset",
176
- "noticeText": "F1KBNa_noticeText",
177
- "searchBar": "F1KBNa_searchBar",
178
- "treeCaret": "F1KBNa_treeCaret",
179
- "splitRdel": "F1KBNa_splitRdel",
180
- "fileListKnob": "F1KBNa_fileListKnob",
181
136
  "quoteCode": "F1KBNa_quoteCode",
182
- "delCount": "F1KBNa_delCount",
183
- "diffBodySplit": "F1KBNa_diffBodySplit",
184
- "settingsRow": "F1KBNa_settingsRow",
185
- "discussionCell": "F1KBNa_discussionCell",
186
- "splitLadd": "F1KBNa_splitLadd",
187
- "dockHost": "F1KBNa_dockHost",
188
- "colorPicker": "F1KBNa_colorPicker",
189
- "emptyState": "F1KBNa_emptyState",
190
- "rail": "F1KBNa_rail",
191
- "importButton": "F1KBNa_importButton",
192
- "quoteLine": "F1KBNa_quoteLine",
193
- "coverButton": "F1KBNa_coverButton",
194
- "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
195
- "divergedHint": "F1KBNa_divergedHint",
196
- "quoteNoWrap": "F1KBNa_quoteNoWrap",
197
- "statusBar": "F1KBNa_statusBar",
198
- "kindHint": "F1KBNa_kindHint",
199
- "wrap": "F1KBNa_wrap",
200
- "stepper": "F1KBNa_stepper",
201
- "discussionHead": "F1KBNa_discussionHead",
202
- "wrapActive": "F1KBNa_wrapActive",
203
- "diffActions": "F1KBNa_diffActions",
204
- "resizeHandle": "F1KBNa_resizeHandle",
205
- "toggle": "F1KBNa_toggle",
206
- "chipPresentation": "F1KBNa_chipPresentation",
207
- "quoteAdd": "F1KBNa_quoteAdd",
208
- "panelFailureText": "F1KBNa_panelFailureText",
209
- "notice": "F1KBNa_notice",
210
- "blockActionsDivider": "F1KBNa_blockActionsDivider",
211
- "chip": "F1KBNa_chip",
212
- "panelFailureRetry": "F1KBNa_panelFailureRetry",
137
+ "quoteText": "F1KBNa_quoteText",
138
+ "stepperButton": "F1KBNa_stepperButton",
139
+ "fileListKnobIn": "F1KBNa_fileListKnobIn",
140
+ "splitLdel": "F1KBNa_splitLdel",
141
+ "presentationHost": "F1KBNa_presentationHost",
142
+ "readError": "F1KBNa_readError",
143
+ "settingsRowTitle": "F1KBNa_settingsRowTitle",
144
+ "splitHScroll": "F1KBNa_splitHScroll",
213
145
  "settingsGroupBody": "F1KBNa_settingsGroupBody",
146
+ "diffStats": "F1KBNa_diffStats",
147
+ "coverHost": "F1KBNa_coverHost",
148
+ "settingsReset": "F1KBNa_settingsReset",
214
149
  "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
215
- "toggleOn": "F1KBNa_toggleOn",
216
- "rowPath": "F1KBNa_rowPath",
217
- "blockPosition": "F1KBNa_blockPosition",
218
- "langSelect": "F1KBNa_langSelect",
150
+ "confirmCard": "F1KBNa_confirmCard",
151
+ "discussionToggle": "F1KBNa_discussionToggle",
152
+ "rowDiscussed": "F1KBNa_rowDiscussed",
153
+ "coverCard": "F1KBNa_coverCard",
154
+ "settingsSelector": "F1KBNa_settingsSelector",
155
+ "pickerTitle": "F1KBNa_pickerTitle",
156
+ "colorPickerPreview": "F1KBNa_colorPickerPreview",
219
157
  "headerEntry": "F1KBNa_headerEntry",
220
- "presentationHost": "F1KBNa_presentationHost",
221
- "rowHead": "F1KBNa_rowHead",
222
- "discussionCode": "F1KBNa_discussionCode",
223
- "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
158
+ "panelDocked": "F1KBNa_panelDocked",
159
+ "listFold": "F1KBNa_listFold",
160
+ "rowPath": "F1KBNa_rowPath",
161
+ "toggleOn": "F1KBNa_toggleOn",
162
+ "missingHint": "F1KBNa_missingHint",
163
+ "rowFailed": "F1KBNa_rowFailed",
164
+ "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
165
+ "discussionBody": "F1KBNa_discussionBody",
166
+ "detail": "F1KBNa_detail",
167
+ "splitCol": "F1KBNa_splitCol",
168
+ "code": "F1KBNa_code",
169
+ "mdPreviewContent": "F1KBNa_mdPreviewContent",
170
+ "diffPreview": "F1KBNa_diffPreview",
171
+ "quoteLine": "F1KBNa_quoteLine",
224
172
  "colorSv": "F1KBNa_colorSv",
225
- "treeRow": "F1KBNa_treeRow",
173
+ "mdPreviewBody": "F1KBNa_mdPreviewBody",
174
+ "discussionUser": "F1KBNa_discussionUser",
175
+ "addButton": "F1KBNa_addButton",
176
+ "discussionCode": "F1KBNa_discussionCode",
177
+ "headerEntryCount": "F1KBNa_headerEntryCount",
178
+ "settingsRowText": "F1KBNa_settingsRowText",
179
+ "panelFailure": "F1KBNa_panelFailure",
226
180
  "pickerIcon": "F1KBNa_pickerIcon",
227
- "coverBackdrop": "F1KBNa_coverBackdrop",
228
- "diffStats": "F1KBNa_diffStats",
229
- "coverHost": "F1KBNa_coverHost",
230
- "expandExpanded": "F1KBNa_expandExpanded",
181
+ "rail": "F1KBNa_rail",
182
+ "pickerForm": "F1KBNa_pickerForm",
183
+ "langSelect": "F1KBNa_langSelect",
184
+ "discussionAnswer": "F1KBNa_discussionAnswer",
185
+ "fileListFloat": "F1KBNa_fileListFloat",
186
+ "diff": "F1KBNa_diff",
187
+ "panelFailureText": "F1KBNa_panelFailureText",
188
+ "splitCols": "F1KBNa_splitCols",
189
+ "intraAdd": "F1KBNa_intraAdd",
190
+ "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
191
+ "divergedHint": "F1KBNa_divergedHint",
192
+ "intraDel": "F1KBNa_intraDel",
193
+ "panelFailureRetry": "F1KBNa_panelFailureRetry",
194
+ "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
195
+ "kindTag": "F1KBNa_kindTag",
196
+ "context": "F1KBNa_context",
231
197
  "groupHead": "F1KBNa_groupHead",
232
- "discussionPin": "F1KBNa_discussionPin",
233
- "discussionOutdated": "F1KBNa_discussionOutdated",
234
- "discussionRange": "F1KBNa_discussionRange",
235
- "markerDel": "F1KBNa_markerDel",
236
- "splitRadd": "F1KBNa_splitRadd",
237
- "colorPickerChevron": "F1KBNa_colorPickerChevron",
238
- "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
198
+ "panel": "F1KBNa_panel",
199
+ "bulkActions": "F1KBNa_bulkActions",
200
+ "group": "F1KBNa_group",
201
+ "resizeHandle": "F1KBNa_resizeHandle",
202
+ "actionError": "F1KBNa_actionError",
203
+ "searchMatch": "F1KBNa_searchMatch",
204
+ "colorPickerPanel": "F1KBNa_colorPickerPanel",
205
+ "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
206
+ "markerAdd": "F1KBNa_markerAdd",
207
+ "states": "F1KBNa_states",
208
+ "actionPrimary": "F1KBNa_actionPrimary",
209
+ "discussionCell": "F1KBNa_discussionCell",
210
+ "dockHost": "F1KBNa_dockHost",
211
+ "del": "F1KBNa_del",
212
+ "quoteDel": "F1KBNa_quoteDel",
213
+ "searchCount": "F1KBNa_searchCount",
214
+ "add": "F1KBNa_add",
215
+ "blockActions": "F1KBNa_blockActions",
216
+ "hint": "F1KBNa_hint",
217
+ "splitDivider": "F1KBNa_splitDivider",
218
+ "commentLabel": "F1KBNa_commentLabel",
219
+ "emptyState": "F1KBNa_emptyState",
239
220
  "tree": "F1KBNa_tree",
240
- "flexSpacer": "F1KBNa_flexSpacer",
241
- "actionChord": "F1KBNa_actionChord",
242
- "blockFlash": "F1KBNa_blockFlash",
243
- "treeName": "F1KBNa_treeName",
244
- "colorPickerPreview": "F1KBNa_colorPickerPreview",
245
- "quoteText": "F1KBNa_quoteText",
246
- "settingsRowTitle": "F1KBNa_settingsRowTitle",
247
- "toggleThumb": "F1KBNa_toggleThumb",
248
- "missing": "F1KBNa_missing",
249
- "discussionSend": "F1KBNa_discussionSend",
250
- "stepperButton": "F1KBNa_stepperButton",
251
- "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
221
+ "pickerNote": "F1KBNa_pickerNote",
222
+ "title": "F1KBNa_title",
223
+ "line": "F1KBNa_line",
252
224
  "discussionInput": "F1KBNa_discussionInput",
253
- "addCount": "F1KBNa_addCount",
254
- "overviewRuler": "F1KBNa_overviewRuler",
255
- "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
256
- "divider": "F1KBNa_divider",
257
- "coverNoticeText": "F1KBNa_coverNoticeText",
258
- "colorPickerInput": "F1KBNa_colorPickerInput",
225
+ "colorSvCursor": "F1KBNa_colorSvCursor",
226
+ "confirmBackdrop": "F1KBNa_confirmBackdrop",
227
+ "blockActionsDivider": "F1KBNa_blockActionsDivider",
228
+ "colorValue": "F1KBNa_colorValue",
229
+ "badgeLabel": "F1KBNa_badgeLabel",
230
+ "diffHeader": "F1KBNa_diffHeader",
231
+ "diffActions": "F1KBNa_diffActions",
232
+ "noteCentered": "F1KBNa_noteCentered",
233
+ "diffBodySplit": "F1KBNa_diffBodySplit",
234
+ "pickerCard": "F1KBNa_pickerCard",
235
+ "settingsRowDesc": "F1KBNa_settingsRowDesc",
236
+ "treeName": "F1KBNa_treeName",
237
+ "langLabel": "F1KBNa_langLabel",
238
+ "action": "F1KBNa_action",
239
+ "rowMeta": "F1KBNa_rowMeta",
240
+ "stepperButtonUp": "F1KBNa_stepperButtonUp",
241
+ "pickerInput": "F1KBNa_pickerInput",
242
+ "listHead": "F1KBNa_listHead",
243
+ "addPath": "F1KBNa_addPath",
259
244
  "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
260
- "discussionAnswer": "F1KBNa_discussionAnswer",
261
- "confirmText": "F1KBNa_confirmText",
262
- "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
263
- "missingHint": "F1KBNa_missingHint"
245
+ "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
246
+ "wrapActive": "F1KBNa_wrapActive",
247
+ "settingsGroup": "F1KBNa_settingsGroup",
248
+ "listTab": "F1KBNa_listTab",
249
+ "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
250
+ "presentationSelect": "F1KBNa_presentationSelect",
251
+ "flexSpacer": "F1KBNa_flexSpacer",
252
+ "discussionRange": "F1KBNa_discussionRange",
253
+ "diffBodyWrap": "F1KBNa_diffBodyWrap",
254
+ "floatResizeHandle": "F1KBNa_floatResizeHandle",
255
+ "splitHScrollRow": "F1KBNa_splitHScrollRow",
256
+ "searchToggle": "F1KBNa_searchToggle",
257
+ "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
258
+ "actionChord": "F1KBNa_actionChord",
259
+ "fileListShrink": "F1KBNa_fileListShrink",
260
+ "commentTitle": "F1KBNa_commentTitle",
261
+ "importNote": "F1KBNa_importNote",
262
+ "confirmActions": "F1KBNa_confirmActions",
263
+ "footerButtons": "F1KBNa_footerButtons",
264
+ "header": "F1KBNa_header",
265
+ "expand": "F1KBNa_expand",
266
+ "toggle": "F1KBNa_toggle",
267
+ "discussion": "F1KBNa_discussion",
268
+ "headerActions": "F1KBNa_headerActions",
269
+ "statusAction": "F1KBNa_statusAction",
270
+ "treeNote": "F1KBNa_treeNote",
271
+ "commentRow": "F1KBNa_commentRow",
272
+ "vSpacer": "F1KBNa_vSpacer",
273
+ "colorPickerPopover": "F1KBNa_colorPickerPopover",
274
+ "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
275
+ "notice": "F1KBNa_notice"
264
276
  };
265
277
  //#endregion
266
278
  //#region lib/types/client/PathPicker.js
@@ -2834,19 +2846,6 @@ window.__ModuleLoader__.load({
2834
2846
  return runs;
2835
2847
  }
2836
2848
  /**
2837
- * A turn's text with its inline markers gone: what the runs draw, character for character.
2838
- *
2839
- * The row measurement uses this, so the rows a block reserves and the text it draws agree. The
2840
- * markers are not drawn, and counting them would reserve room for characters nobody sees — which
2841
- * is exactly the kind of whole-row slack that leaves a blank row in the block.
2842
- *
2843
- * @param text - the turn's text.
2844
- * @returns the same text without its `code` and **strong** markers.
2845
- */
2846
- function discussionPlainText(text) {
2847
- return discussionRuns(text).map((run) => run.text).join("");
2848
- }
2849
- /**
2850
2849
  * An answer with its blank lines dropped.
2851
2850
  *
2852
2851
  * The thread is plain text laid out in code rows, so a blank line between two
@@ -2946,26 +2945,51 @@ window.__ModuleLoader__.load({
2946
2945
  return next;
2947
2946
  }
2948
2947
  /**
2949
- * Re-anchor one discussion against the current rows.
2948
+ * Re-anchor a whole file's blocks in one pass.
2950
2949
  *
2951
- * The anchor's new-file line numbers are what a rebuild moves; the quote the thread carries
2952
- * is what says whether they still hold the code the comment was written about. When they do
2953
- * not — the lines were edited under it, or the hunk moved — the quote is looked for elsewhere
2954
- * in the model and the thread follows it, nearest occurrence first when the same code shows up
2955
- * more than once. When nothing matches, the block keeps the rows it last matched and is marked
2956
- * outdated: it says so and keeps its quote for the reader, rather than being silently moved
2957
- * onto whatever took those lines. Only when the whole range is gone from the model does the
2958
- * block move, and then by line number, back to where the range used to be (see `gone`). The mark
2959
- * is derived, not sticky — the lines coming back with their quote clears it (GitHub recomputes
2960
- * `isOutdated` the same way).
2950
+ * Each block is re-anchored exactly as `remapDiscussion` does it — same rules, same identities,
2951
+ * same "nothing moved, same object back" contract — but the row windows every quote is looked up
2952
+ * in are joined ONCE for the whole list. A rebuild (a keep, an edit, a switched file) runs this
2953
+ * over every block a file has, and joining the rows per block is what made the pass cost grow with
2954
+ * the number of comments on a long file.
2961
2955
  *
2962
- * @param discussion - the block to re-anchor.
2956
+ * @param discussions - the blocks to re-anchor.
2963
2957
  * @param lineOf - the new-file line number of a row, or `undefined` for a row that has none.
2964
2958
  * @param textOf - the text of a row, for the quote comparison.
2965
2959
  * @param rowCount - how many rows the current model has.
2966
- * @returns the re-anchored discussion (the same object when nothing moved).
2960
+ * @returns the re-anchored blocks, in the order they came in.
2967
2961
  */
2968
- function remapDiscussion(discussion, lineOf, textOf, rowCount) {
2962
+ function remapDiscussions(discussions, lineOf, textOf, rowCount) {
2963
+ const windows = windowCache(textOf, rowCount);
2964
+ return discussions.map((discussion) => remapOne(discussion, lineOf, textOf, rowCount, windows));
2965
+ }
2966
+ /** Every row window of one span, indexed by its text, in one pass over the rows. */
2967
+ function windowIndex(textOf, rowCount, span) {
2968
+ const byText = /* @__PURE__ */ new Map();
2969
+ for (let row = 0; row + span < rowCount; row++) {
2970
+ const parts = [];
2971
+ for (let index = row; index <= row + span; index++) parts.push(index < rowCount ? textOf(index) : "");
2972
+ const text = parts.join("\n");
2973
+ const rows = byText.get(text);
2974
+ if (rows === void 0) byText.set(text, [row]);
2975
+ else rows.push(row);
2976
+ }
2977
+ return byText;
2978
+ }
2979
+ /** One window index per span, built the first time a span is asked for. */
2980
+ function windowCache(textOf, rowCount) {
2981
+ const cache = /* @__PURE__ */ new Map();
2982
+ return (span) => {
2983
+ let index = cache.get(span);
2984
+ if (index === void 0) {
2985
+ index = windowIndex(textOf, rowCount, span);
2986
+ cache.set(span, index);
2987
+ }
2988
+ return index;
2989
+ };
2990
+ }
2991
+ /** The body both entry points share: one block, with the row windows read through `windows`. */
2992
+ function remapOne(discussion, lineOf, textOf, rowCount, windows) {
2969
2993
  const { startLine, endLine } = discussion.anchor;
2970
2994
  let start = -1;
2971
2995
  let end = -1;
@@ -2982,7 +3006,7 @@ window.__ModuleLoader__.load({
2982
3006
  end = row;
2983
3007
  }
2984
3008
  const quote = discussion.quote;
2985
- const span = Math.max(0, endLine - startLine);
3009
+ const span = Math.max(0, (quote ?? "").split("\n").length - 1);
2986
3010
  const textAt = (row) => {
2987
3011
  const parts = [];
2988
3012
  for (let index = row; index <= row + span; index++) parts.push(index < rowCount ? textOf(index) : "");
@@ -3025,10 +3049,7 @@ window.__ModuleLoader__.load({
3025
3049
  });
3026
3050
  }
3027
3051
  let found = -1;
3028
- for (let row = 0; row + span < rowCount; row++) {
3029
- if (textAt(row) !== quote) continue;
3030
- if (found === -1 || Math.abs(row - start) < Math.abs(found - start)) found = row;
3031
- }
3052
+ for (const row of windows(span).get(quote) ?? []) if (found === -1 || Math.abs(row - start) < Math.abs(found - start)) found = row;
3032
3053
  if (found === -1) return start === -1 ? gone() : markOutdated(discussion);
3033
3054
  return clearOutdated({
3034
3055
  ...discussion,
@@ -19400,6 +19421,13 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19400
19421
  */
19401
19422
  const threads = /* @__PURE__ */ new Map();
19402
19423
  /**
19424
+ * Fired on `window` whenever a session's threads change. The threads are written by the file
19425
+ * detail (which owns them) and read by the list pane (whose comments tab shows them all), so the
19426
+ * event is what keeps the two in step: a reader who posts a comment sees it in the list at once
19427
+ * instead of on the next poll.
19428
+ */
19429
+ const COMMENTS_CHANGED_EVENT = "dsh-diff-approval:comments-changed";
19430
+ /**
19403
19431
  * The comment threads a session's panel is holding.
19404
19432
  * @param sessionId - the session, if any.
19405
19433
  * @returns the threads by pending entry id; empty when there are none.
@@ -19415,7 +19443,11 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19415
19443
  */
19416
19444
  function rememberDiscussions(sessionId, byFile) {
19417
19445
  if (sessionId === void 0) return;
19446
+ const before = threads.get(sessionId);
19418
19447
  threads.set(sessionId, byFile);
19448
+ if (before === byFile) return;
19449
+ if (typeof window === "undefined") return;
19450
+ window.dispatchEvent(new CustomEvent(COMMENTS_CHANGED_EVENT, { detail: { sessionId } }));
19419
19451
  }
19420
19452
  /** This session's record, created on first use. */
19421
19453
  function viewOf(sessionId) {
@@ -19794,6 +19826,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19794
19826
  /** A shared canvas for measuring wrapped line heights (CPU-only, no DOM reflow). */
19795
19827
  let measureCanvas;
19796
19828
  /**
19829
+ * The font `measureCanvas` is currently set to, so a measurer can put its own back before it asks
19830
+ * for a width (see `makeMeasurer`). Every measurer shares the one context, and two of them are
19831
+ * alive at once — the thread's prose and its inline-code chips.
19832
+ */
19833
+ let measureCanvasFont;
19834
+ /**
19797
19835
  * Compute a diff line's visual sub-lines for soft wrap the way VSCode does it:
19798
19836
  * a Unicode line-break model — break at whitespace and between any two CJK
19799
19837
  * characters (Chinese han, Japanese kana, fullwidth forms), keep Latin and
@@ -19903,21 +19941,86 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19903
19941
  return out;
19904
19942
  }
19905
19943
  /**
19906
- * Resolve the thread's own prose font for canvas measurement: the code font at the size the
19907
- * thread draws it, which is the token's own size — the code cell's computed size is that times
19908
- * the reader's font scale (see `codeFontOf`), and the thread does not follow the scale. The
19909
- * string is rebuilt from the individual properties because canvas accepts no line height.
19944
+ * Wrap one line of a turn the way the browser lays it out: the prose by character, each inline-code
19945
+ * chip as one box that cannot be broken.
19910
19946
  *
19911
- * @returns a canvas `font` string, or undefined when there is no code cell to read.
19947
+ * `wrapInto` walks characters and nothing else, which is right for the code view and wrong here:
19948
+ * a turn's chip is an inline-flex box (the chat's own inline code, see `.discussionCode`), so half
19949
+ * of a chip never lands on the next line — it moves over whole, and the text after it starts after
19950
+ * the box rather than inside it. Measuring the chip as ordinary text therefore reserves the wrong
19951
+ * number of rows on exactly the lines that carry one, and a row too few is a clipped last line.
19952
+ *
19953
+ * The prose segments are wrapped by `wrapInto` itself, so a line with a chip in it breaks its words
19954
+ * and its spaces exactly where a line without one does; only the chips are placed as boxes.
19955
+ *
19956
+ * @param line - the line's text, markers and all: the runs are read the way the render reads them.
19957
+ * @param room - the width the line wraps in.
19958
+ * @param measure - the prose measurer.
19959
+ * @param chipWidth - the width of one chip's BOX (its text in the chip's own font, plus its padding
19960
+ * and its hairline).
19961
+ * @param tabPx - one tab stop, in px.
19962
+ * @returns the row count for the line.
19963
+ */
19964
+ function wrapChipRows(line, room, measure, chipWidth, tabPx) {
19965
+ let rows = 1;
19966
+ let used = 0;
19967
+ for (const run of discussionRuns(line)) {
19968
+ if (run.kind === "code") {
19969
+ const width = chipWidth(run.text);
19970
+ if (used > 0 && used + width > room) {
19971
+ rows += 1;
19972
+ used = 0;
19973
+ }
19974
+ used += width;
19975
+ continue;
19976
+ }
19977
+ if (run.text === "") continue;
19978
+ if (used > room) {
19979
+ rows += 1;
19980
+ used = 0;
19981
+ }
19982
+ const parts = wrapInto(run.text, room - used, measure, tabPx);
19983
+ rows += parts.length - 1;
19984
+ const last = parts[parts.length - 1] ?? "";
19985
+ used = parts.length === 1 ? used + charsWidth(Array.from(run.text), measure, tabPx) : charsWidth(Array.from(last), measure, tabPx);
19986
+ }
19987
+ return rows;
19988
+ }
19989
+ /**
19990
+ * Resolve the thread's own prose font for canvas measurement: the font the turns are drawn in.
19991
+ *
19992
+ * That is the app's message text (see `.discussionBody`), and the probe span is what carries it:
19993
+ * the turns themselves may not be in the DOM yet when a block is measured — the first render of a
19994
+ * new annotation happens before its bubble exists — while the probe is there as long as the panel
19995
+ * is. Reading the code cell was what this used to do, back when the thread was set in the code's
19996
+ * own face; the code cell still answers `codeFontOf`, and the chip its own (see `chipFontOf`).
19997
+ *
19998
+ * The string is rebuilt from the individual properties because canvas accepts no line height.
19999
+ *
20000
+ * @returns a canvas `font` string, or undefined when the panel is not mounted.
19912
20001
  */
19913
20002
  function threadFontOf() {
20003
+ const probe = document.querySelector("[data-diff-thread-font]");
20004
+ if (probe === null) return void 0;
20005
+ const computed = getComputedStyle(probe);
20006
+ return `${computed.fontStyle} ${computed.fontWeight} ${computed.fontSize} ${computed.fontFamily}`;
20007
+ }
20008
+ /**
20009
+ * Resolve the inline-code chip's font for canvas measurement: the code face at
20010
+ * `DISCUSSION_CODE_FONT_SCALE` of the thread's prose size, which is what `.discussionCode` asks
20011
+ * for with `font-size: 0.875em`. The family comes off a code cell, which wears the same code token
20012
+ * the chip does.
20013
+ *
20014
+ * @returns a canvas `font` string, or undefined when there is no code cell to read.
20015
+ */
20016
+ function chipFontOf() {
20017
+ const prose = document.querySelector("[data-diff-thread-font]");
19914
20018
  const code = document.querySelector("[data-diff-code]");
19915
- if (code === null) return void 0;
20019
+ if (prose === null || code === null) return void 0;
20020
+ const size = Number.parseFloat(getComputedStyle(prose).fontSize);
20021
+ if (!Number.isFinite(size)) return void 0;
19916
20022
  const computed = getComputedStyle(code);
19917
- const size = Number.parseFloat(computed.fontSize);
19918
- const scale = diffFontScale() / 100;
19919
- const unscaled = Number.isFinite(size) && scale > 0 ? size / scale : size;
19920
- return `${computed.fontStyle} ${computed.fontWeight} ${unscaled}px ${computed.fontFamily}`;
20023
+ return `${computed.fontStyle} ${computed.fontWeight} ${size * DISCUSSION_CODE_FONT_SCALE}px ${computed.fontFamily}`;
19921
20024
  }
19922
20025
  /** Resolve the code cell's computed font for canvas measurement. */
19923
20026
  function codeFontOf() {
@@ -19936,8 +20039,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19936
20039
  }
19937
20040
  const ctx = measureCanvas;
19938
20041
  if (ctx === void 0) return void 0;
19939
- if (font !== void 0) ctx.font = font;
19940
- return (text) => ctx.measureText(text).width;
20042
+ const current = () => {
20043
+ if (font !== void 0 && measureCanvasFont !== font) {
20044
+ ctx.font = font;
20045
+ measureCanvasFont = font;
20046
+ }
20047
+ return ctx;
20048
+ };
20049
+ const widths = /* @__PURE__ */ new Map();
20050
+ return (text) => {
20051
+ if (text.length !== 1) return current().measureText(text).width;
20052
+ const cached = widths.get(text);
20053
+ if (cached !== void 0) return cached;
20054
+ const width = current().measureText(text).width;
20055
+ widths.set(text, width);
20056
+ return width;
20057
+ };
19941
20058
  }
19942
20059
  /** How long a question the session has let go stays "queued" before the block hands
19943
20060
  * its writing row back. The local submission echo and the host's queue row are a
@@ -19966,12 +20083,13 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19966
20083
  */
19967
20084
  const THREAD_ROW_PX = 22;
19968
20085
  /**
19969
- * The inline-code chip's own side padding, in px (mirrors `.discussionCode`'s `padding`): the
19970
- * chip is wider than its text, so the row measurement takes that width off the line it sits in.
19971
- * Without it a line whose chip ends near the wrap point would wrap in the DOM where the count
19972
- * said it did not — which is a row too few, and a clipped last line.
20086
+ * The share of the thread's prose size an inline-code chip is drawn at (mirrors
20087
+ * `.discussionCode`'s `font-size: 0.875em`, which is the chat's own inline code against its own
20088
+ * message text). The chip is measured in its own font, not in the prose one — a code face at
20089
+ * twelve and a bit pixels is not the UI face at fourteen — so the row count follows the run the
20090
+ * reader actually sees.
19973
20091
  */
19974
- const DISCUSSION_CODE_PADDING_PX = 2;
20092
+ const DISCUSSION_CODE_FONT_SCALE = .875;
19975
20093
  /** Rows rendered beyond the visible window in each direction. */
19976
20094
  const OVERSCAN_ROWS = 8;
19977
20095
  /** The identity a file with no discussions shares, so memos stay stable. */
@@ -20131,6 +20249,25 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20131
20249
  right
20132
20250
  };
20133
20251
  }
20252
+ /**
20253
+ * The one-line title a comment is listed under in the comments tab: the first sentence of the first
20254
+ * thing the reader said in it. The thread's first turn IS the annotation (later turns are follow-ups
20255
+ * on the same rows), so that is the comment's own voice; the sentence is cut at its own full stop,
20256
+ * and the list ellipsises whatever is still too long for the column (see `.commentTitle`).
20257
+ *
20258
+ * A thread that has not been sent yet has no turn at all: what the reader has typed so far is its
20259
+ * draft, and that is what the item shows, so a comment being written is not listed as a blank line.
20260
+ * A thread with neither has nothing to quote — an empty comment box the reader placed and left — and
20261
+ * the caller passes in the word for that (see the list).
20262
+ *
20263
+ * @param discussion - the thread to name.
20264
+ * @returns the title, or an empty string when there is nothing to say yet.
20265
+ */
20266
+ function commentTitle(discussion) {
20267
+ const line = (discussion.messages.find((message) => message.role === "user")?.text ?? discussion.draft ?? "").split("\n").find((text) => text.trim() !== "") ?? "";
20268
+ const stop = /[。!?!?]/.exec(line);
20269
+ return (stop === null ? line : line.slice(0, stop.index + 1)).trim();
20270
+ }
20134
20271
  /** The diff body's row class per line kind. */
20135
20272
  const ROW_CLASS = {
20136
20273
  context: PendingPanel_module_css_default.context,
@@ -20357,6 +20494,29 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20357
20494
  return target instanceof Element && target.closest("[data-diff-approval-panel]") !== null;
20358
20495
  }
20359
20496
  /**
20497
+ * What a press inside the panel must NOT drop the text selection for: the content itself, and the
20498
+ * frame that acts on the selection.
20499
+ *
20500
+ * The content mirrors the `user-select` whitelist in `.panel`: the code, the rendered Markdown
20501
+ * preview, a thread's own turns, the code a comment quotes, and any field. Everything else is
20502
+ * chrome (see `.panel`), and a press on chrome ends the selection rather than leaving it standing
20503
+ * — see `onPanelMouseDown`. The frame is the exception that is not content: its 评论 / 保留 / 回退
20504
+ * buttons are about exactly that selection, so dropping it on the way to them would leave them
20505
+ * acting on nothing.
20506
+ */
20507
+ const KEEPS_SELECTION = [
20508
+ "input",
20509
+ "textarea",
20510
+ "[contenteditable]",
20511
+ "[data-diff-code]",
20512
+ "[data-diff-md-preview-body]",
20513
+ "[data-diff-discussion-user]",
20514
+ "[data-diff-discussion-reply]",
20515
+ "[data-diff-quote-text]",
20516
+ "[data-diff-selection-actions]",
20517
+ "[data-diff-copy]"
20518
+ ].join(", ");
20519
+ /**
20360
20520
  * Whether a key event came from a text field that owns its own keys (`Esc`,
20361
20521
  * cursor moves). The chat composer is the one that matters: the panel leaves it
20362
20522
  * alone even while its own search bar is open.
@@ -21566,7 +21726,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21566
21726
  });
21567
21727
  }
21568
21728
  /** The selected file's diff, actions, jump controls, and copy toolbar. */
21569
- function PendingDiff({ file, busy, workspacePath, jumpSignal, undoFlash, landingTop, landingTick, failedMessage, commentSkill, onPasteReference, onAskAgent, watchChat, onToast, t, onAddTypedPath, onKeep, onRevert, onRefreshVcs, onBlockKeep, onBlockRevert, onOpen, onPreviewImage }) {
21729
+ function PendingDiff({ file, busy, workspacePath, jumpSignal, undoFlash, landingTop, landingTick, landingRow, failedMessage, commentSkill, onPasteReference, onAskAgent, watchChat, onToast, t, onAddTypedPath, onKeep, onRevert, onRefreshVcs, onBlockKeep, onBlockRevert, onOpen, onPreviewImage }) {
21570
21730
  /** The path being typed into the header field; null shows the open file's own path. */
21571
21731
  const [pathDraft, setPathDraft] = (0, react.useState)(null);
21572
21732
  const [langOverride, setLangOverride] = (0, react.useState)(void 0);
@@ -21726,6 +21886,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21726
21886
  const [commentMode, setCommentMode] = (0, react.useState)(commentModeEnabled);
21727
21887
  const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)(() => rememberedDiscussions(file.sessionId));
21728
21888
  const discussions = discussionsByFile[file.id] ?? EMPTY_DISCUSSIONS;
21889
+ const askingId = (0, react.useMemo)(() => {
21890
+ for (const list of Object.values(discussionsByFile)) {
21891
+ const waiting = list.find((entry) => entry.asking === true);
21892
+ if (waiting !== void 0) return waiting.id;
21893
+ }
21894
+ }, [discussionsByFile]);
21729
21895
  const setDiscussions = (update) => {
21730
21896
  setDiscussionsByFile((all) => ({
21731
21897
  ...all,
@@ -21779,6 +21945,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21779
21945
  /** The offset the file now showing was asked to open at, held until the landing
21780
21946
  * effect below spends it (that effect runs a render later than the switch). */
21781
21947
  const landingTopRef = (0, react.useRef)(void 0);
21948
+ /** The model row a jump to a comment asked for, spent the same way and by the same effect. */
21949
+ const landingRowRef = (0, react.useRef)(void 0);
21782
21950
  const selectionTextRef = (0, react.useRef)("");
21783
21951
  const [copied, setCopied] = (0, react.useState)(false);
21784
21952
  const [searchOpen, setSearchOpen] = (0, react.useState)(false);
@@ -21795,7 +21963,11 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21795
21963
  };
21796
21964
  (0, react.useEffect)(() => {
21797
21965
  landingTopRef.current = landingTop;
21798
- if (landingTop === void 0) {
21966
+ landingRowRef.current = landingRow;
21967
+ if (landingRow !== void 0) {
21968
+ setFocus(blockIndexAtOffset(offsetOf(landingRow)));
21969
+ bumpFlash(false);
21970
+ } else if (landingTop === void 0) {
21799
21971
  setFocus(0);
21800
21972
  bumpFlash(false);
21801
21973
  } else setFocus(blockIndexAtOffset(landingTop));
@@ -21812,7 +21984,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21812
21984
  }, [
21813
21985
  file.id,
21814
21986
  landingTop,
21815
- landingTick
21987
+ landingTick,
21988
+ landingRow
21816
21989
  ]);
21817
21990
  (0, react.useEffect)(() => {
21818
21991
  if (undoFlash === 0) return;
@@ -22331,11 +22504,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22331
22504
  const wrapping = (widthPx ?? (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * THREAD_ROW_PX : body)) - measure("0");
22332
22505
  if (wrapping <= 0) return lines.length + chrome;
22333
22506
  const tabPx = tabWidthSpaces * measure(" ");
22334
- return chrome + lines.reduce((rows, line) => {
22335
- const chips = discussionRuns(line).filter((run) => run.kind === "code").length;
22336
- const room = wrapping - chips * 2 * DISCUSSION_CODE_PADDING_PX;
22337
- return rows + Math.max(1, wrapInto(line, room, measure, tabPx).length);
22338
- }, 0);
22507
+ const chipMeasure = makeMeasurer(chipFontOf());
22508
+ const chipWidth = (text) => (chipMeasure === void 0 ? measure(text) : chipMeasure(text)) + 12;
22509
+ return chrome + lines.reduce((rows, line) => rows + Math.max(1, wrapChipRows(line, wrapping, measure, chipWidth, tabPx)), 0);
22339
22510
  }, [
22340
22511
  bodyWidth,
22341
22512
  tabWidthSpaces,
@@ -22377,7 +22548,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22377
22548
  * @returns its size in code rows.
22378
22549
  */
22379
22550
  const messageSizeOf = (0, react.useCallback)((message) => {
22380
- return messageRowsOf(discussionPlainText(discussionText(message)), message.role);
22551
+ return messageRowsOf(discussionText(message), message.role);
22381
22552
  }, [messageRowsOf]);
22382
22553
  /**
22383
22554
  * The thread as the block will render it, plus the body height that follows from
@@ -22699,10 +22870,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22699
22870
  (0, react.useEffect)(() => {
22700
22871
  setDiscussionsByFile((all) => {
22701
22872
  const list = all[file.id] ?? EMPTY_DISCUSSIONS;
22702
- const next = list.map((discussion) => remapDiscussion(discussion, (row) => {
22873
+ const next = remapDiscussions(list, (row) => {
22703
22874
  const entry = model.diff.rows[row];
22704
22875
  return entry?.newLine ?? entry?.oldLine;
22705
- }, (row) => model.diff.rows[row]?.text ?? "", model.diff.rows.length));
22876
+ }, (row) => model.diff.rows[row]?.text ?? "", model.diff.rows.length);
22706
22877
  return next.some((discussion, index) => discussion !== list[index]) ? {
22707
22878
  ...all,
22708
22879
  [file.id]: next
@@ -22832,6 +23003,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22832
23003
  const sendDiscussion = (id) => {
22833
23004
  const discussion = discussions.find((entry) => entry.id === id);
22834
23005
  if (discussion === void 0) return;
23006
+ if (askingId !== void 0 && askingId !== id) return;
23007
+ if (pendingAskRef.current !== void 0 && pendingAskRef.current.id !== id) return;
22835
23008
  const text = discussion.draft.trim();
22836
23009
  if (text === "") return;
22837
23010
  const reference = `(${discussionLineRange(discussion.anchor)})`;
@@ -22996,6 +23169,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22996
23169
  }
22997
23170
  return;
22998
23171
  }
23172
+ const row = landingRowRef.current;
23173
+ if (row !== void 0 && !previewActive) {
23174
+ landingRowRef.current = void 0;
23175
+ const rowBody = bodyRef.current;
23176
+ if (rowBody !== null) {
23177
+ const target = Math.max(0, Math.min(offsetOf(row) - leadRows * ROW_HEIGHT_PX, rowBody.scrollHeight - rowBody.clientHeight));
23178
+ if (rowBody.scrollTop !== target) rowBody.scrollTop = target;
23179
+ setScrollTop(target);
23180
+ }
23181
+ return;
23182
+ }
22999
23183
  const block = model.blocks[focus];
23000
23184
  if (block === void 0) return;
23001
23185
  if (previewActive) {
@@ -23987,7 +24171,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23987
24171
  "data-diff-discussion": true,
23988
24172
  "data-lost": discussion.lost === true ? "" : void 0,
23989
24173
  style: {
23990
- width: Math.max(0, bodyWidth - discussionRightInsetPx),
24174
+ width: Math.max(0, bodyWidth),
23991
24175
  height: rows * THREAD_ROW_PX
23992
24176
  },
23993
24177
  children: [(0, react_jsx_runtime.jsxs)("div", {
@@ -24004,17 +24188,13 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24004
24188
  },
24005
24189
  children: discussion.collapsed ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { size: 12 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutline14, { size: 12 })
24006
24190
  }),
24007
- (0, react_jsx_runtime.jsxs)("span", {
24191
+ (0, react_jsx_runtime.jsx)("span", {
24008
24192
  className: PendingPanel_module_css_default.discussionRangeWrap,
24009
- children: [(0, react_jsx_runtime.jsx)("span", {
24193
+ children: (0, react_jsx_runtime.jsx)("span", {
24010
24194
  className: PendingPanel_module_css_default.discussionRange,
24011
24195
  "data-diff-discussion-range": true,
24012
24196
  children: discussionLineRange(discussion.anchor)
24013
- }), discussion.lost === true && (0, react_jsx_runtime.jsx)("span", {
24014
- className: PendingPanel_module_css_default.discussionOutdated,
24015
- "data-diff-discussion-outdated": true,
24016
- children: t("discussion.outdated")
24017
- })]
24197
+ })
24018
24198
  }),
24019
24199
  (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
24020
24200
  (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
@@ -24048,7 +24228,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24048
24228
  discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("p", {
24049
24229
  className: PendingPanel_module_css_default.discussionNote,
24050
24230
  "data-diff-discussion-quote-label": true,
24051
- children: t("discussion.quote")
24231
+ children: t("discussion.outdatedQuote")
24052
24232
  }), (0, react_jsx_runtime.jsx)(DiscussionQuote, {
24053
24233
  quote: discussion.quote,
24054
24234
  lines: discussion.quoteLines,
@@ -24123,6 +24303,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24123
24303
  type: "button",
24124
24304
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.discussionSend}`,
24125
24305
  "data-diff-discussion-send": true,
24306
+ disabled: askingId !== void 0,
24126
24307
  onClick: () => {
24127
24308
  sendDiscussion(discussion.id);
24128
24309
  },
@@ -24423,13 +24604,15 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24423
24604
  * that lands on the file's first change.
24424
24605
  */
24425
24606
  const [landing, setLanding] = (0, react.useState)(void 0);
24426
- /** Ask the diff to land on one file: its first change unless `top` says where.
24607
+ /** Ask the diff to land on one file: its first change unless `top` says where, or the row a jump
24608
+ * to a comment names (which lands the way a change-block jump does, see `landingRow`).
24427
24609
  * The nonce makes the request an event rather than a value, so re-clicking the
24428
24610
  * chip for the file already open lands on its first change again. */
24429
- const landOn = (fileId, top) => {
24611
+ const landOn = (fileId, top, row) => {
24430
24612
  setLanding((prev) => ({
24431
24613
  fileId,
24432
24614
  top,
24615
+ row,
24433
24616
  n: (prev?.n ?? 0) + 1
24434
24617
  }));
24435
24618
  };
@@ -24437,6 +24620,44 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24437
24620
  * cleanup (the docked tab unmounting) rather than from a handler. */
24438
24621
  const selectedRef = (0, react.useRef)(selected);
24439
24622
  selectedRef.current = selected;
24623
+ /**
24624
+ * Which tab the list pane shows: the pending files, or every comment the files in the list carry.
24625
+ * The pane's own state rather than a remembered preference: a reader who came to the list for a
24626
+ * comment is in the comments tab while they read it, and the next time the panel opens it is the
24627
+ * list they are shown — the pending list is what the panel is for.
24628
+ */
24629
+ const [listTab, setListTab] = (0, react.useState)("pending");
24630
+ /**
24631
+ * Whether this panel is commenting at all: with comment mode off there are no comments to list, so
24632
+ * the pane is the pending list alone and shows no tabs. It follows the setting like the frame does
24633
+ * (the Settings section is another mount).
24634
+ */
24635
+ const [commentMode, setCommentMode] = (0, react.useState)(commentModeEnabled);
24636
+ /** The tabs the pane offers: the comments one exists only while the panel is commenting, so with
24637
+ * the mode off the pane has one view and no switch to offer. */
24638
+ const listTabs = commentMode ? ["pending", "comments"] : ["pending"];
24639
+ /** The tab actually shown: the comments one only exists while the mode is on. */
24640
+ const activeTab = commentMode ? listTab : "pending";
24641
+ (0, react.useEffect)(() => {
24642
+ const onCommentMode = () => {
24643
+ setCommentMode(commentModeEnabled());
24644
+ };
24645
+ window.addEventListener(COMMENT_MODE_CHANGED_EVENT, onCommentMode);
24646
+ return () => {
24647
+ window.removeEventListener(COMMENT_MODE_CHANGED_EVENT, onCommentMode);
24648
+ };
24649
+ }, []);
24650
+ /** Bumped when the threads change, so the comments tab re-reads them (see `rememberDiscussions`). */
24651
+ const [commentsTick, setCommentsTick] = (0, react.useState)(0);
24652
+ (0, react.useEffect)(() => {
24653
+ const changed = () => {
24654
+ setCommentsTick((tick) => tick + 1);
24655
+ };
24656
+ window.addEventListener(COMMENTS_CHANGED_EVENT, changed);
24657
+ return () => {
24658
+ window.removeEventListener(COMMENTS_CHANGED_EVENT, changed);
24659
+ };
24660
+ }, []);
24440
24661
  /** Bumped when the already-open file is clicked again, to jump to the next
24441
24662
  * diff block in the open file's detail pane. */
24442
24663
  const [jumpSignal, setJumpSignal] = (0, react.useState)(0);
@@ -25118,6 +25339,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25118
25339
  if (value === void 0) return false;
25119
25340
  if (value.outcome !== "added" && value.outcome !== "duplicate") return false;
25120
25341
  if (value.id !== void 0) setPendingSelect(value.id);
25342
+ onRefresh(current);
25121
25343
  return true;
25122
25344
  };
25123
25345
  const renderEntry = (entry) => (0, react_jsx_runtime.jsx)(PendingFileRow, {
@@ -25166,6 +25388,38 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25166
25388
  };
25167
25389
  const selectedFile = files.find((file) => file.id === selected);
25168
25390
  /**
25391
+ * Every comment the files in the list carry, in list order and then in the order their rows run:
25392
+ * what the comments tab shows. A comment IS a block of rows in one file, so its label is the same
25393
+ * `path:lines` reference the thread's own header wears, its title is the first sentence of what
25394
+ * the reader asked (the first turn is the annotation; later ones are follow-ups), and an outdated
25395
+ * one says so — the same state the block itself is wearing (see `[data-lost]`).
25396
+ *
25397
+ * The threads are held by the file detail, which is one mount at a time, so they are read back
25398
+ * out of the memory the two share, and re-read whenever they change (`commentsTick`).
25399
+ */
25400
+ const commentEntries = (0, react.useMemo)(() => {
25401
+ const threads = rememberedDiscussions(current);
25402
+ return files.flatMap((file) => (threads[file.id] ?? []).map((discussion) => ({
25403
+ id: discussion.id,
25404
+ fileId: file.id,
25405
+ row: discussion.anchor.start,
25406
+ label: referenceLabelOf(file.path, snapshot.workspacePath, discussion.anchor.startLine, discussion.anchor.endLine),
25407
+ title: commentTitle(discussion) || t("panel.commentEmptyTitle"),
25408
+ lost: discussion.lost === true
25409
+ })));
25410
+ }, [
25411
+ files,
25412
+ current,
25413
+ snapshot.workspacePath,
25414
+ commentsTick,
25415
+ t
25416
+ ]);
25417
+ /** Open the file a comment hangs in and land on the comment, the way a change-block jump lands. */
25418
+ const jumpToComment = (fileId, row) => {
25419
+ if (fileId !== selected) setSelected(fileId);
25420
+ landOn(fileId, void 0, row);
25421
+ };
25422
+ /**
25169
25423
  * The folded card's own box, derived from the measured one, or undefined while
25170
25424
  * the list is not folded open. The card and its width grip are both placed from
25171
25425
  * these numbers, which is what keeps the grip on the card's right edge as the
@@ -25181,59 +25435,113 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25181
25435
  const promptFile = blockPrompt === null ? void 0 : files.find((file) => file.id === blockPrompt.id);
25182
25436
  /** The file whose removal is being confirmed (a whole-file action), if any. */
25183
25437
  const promptEntry = filePrompt === null ? void 0 : files.find((file) => file.id === filePrompt.id);
25184
- const fileListBody = (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
25185
- files.length > 0 && (0, react_jsx_runtime.jsxs)("div", {
25186
- className: PendingPanel_module_css_default.groupHead,
25187
- children: [
25188
- (0, react_jsx_runtime.jsx)("h3", {
25189
- className: PendingPanel_module_css_default.group,
25190
- children: t("panel.group.current")
25191
- }),
25192
- (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
25193
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
25194
- label: t("action.addPath"),
25195
- side: "bottom",
25196
- delayMs: 500,
25197
- children: (0, react_jsx_runtime.jsx)("button", {
25198
- type: "button",
25199
- className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.addButton}`,
25200
- "data-diff-add": true,
25201
- "aria-label": t("action.addPath"),
25202
- onClick: () => {
25203
- setAddOpen(true);
25204
- },
25205
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 12 })
25206
- })
25207
- }),
25208
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
25209
- label: t(forceFloat ? "action.fileListFloatOff" : "action.fileListFloatOn"),
25210
- side: "bottom",
25211
- delayMs: 500,
25212
- children: (0, react_jsx_runtime.jsx)("button", {
25213
- type: "button",
25214
- className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.addButton}`,
25215
- "data-diff-file-list-float": true,
25216
- "data-active": forceFloat ? "" : void 0,
25217
- "aria-label": t(forceFloat ? "action.fileListFloatOff" : "action.fileListFloatOn"),
25218
- "aria-pressed": forceFloat,
25219
- onClick: toggleForceFloat,
25220
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutline16, { size: 12 })
25221
- })
25438
+ const fileListBody = (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [files.length > 0 && (0, react_jsx_runtime.jsxs)("div", {
25439
+ className: PendingPanel_module_css_default.listHead,
25440
+ children: [
25441
+ listTabs.length > 1 ? (0, react_jsx_runtime.jsxs)("div", {
25442
+ className: PendingPanel_module_css_default.listTabs,
25443
+ role: "tablist",
25444
+ "aria-label": t("panel.tabs"),
25445
+ children: [(0, react_jsx_runtime.jsx)("button", {
25446
+ type: "button",
25447
+ role: "tab",
25448
+ className: PendingPanel_module_css_default.listTab,
25449
+ "data-diff-list-tab": "pending",
25450
+ "aria-selected": activeTab === "pending",
25451
+ onClick: () => {
25452
+ setListTab("pending");
25453
+ },
25454
+ children: t("panel.tab.pending")
25455
+ }), (0, react_jsx_runtime.jsx)("button", {
25456
+ type: "button",
25457
+ role: "tab",
25458
+ className: PendingPanel_module_css_default.listTab,
25459
+ "data-diff-list-tab": "comments",
25460
+ "aria-selected": activeTab === "comments",
25461
+ onClick: () => {
25462
+ setListTab("comments");
25463
+ },
25464
+ children: t("panel.tab.comments")
25465
+ })]
25466
+ }) : (0, react_jsx_runtime.jsx)("h3", {
25467
+ className: PendingPanel_module_css_default.listTitle,
25468
+ "data-diff-list-title": true,
25469
+ children: t(`panel.tab.${activeTab}`)
25470
+ }),
25471
+ listTabs.length <= 1 && (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
25472
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
25473
+ label: t(forceFloat ? "action.fileListFloatOff" : "action.fileListFloatOn"),
25474
+ side: "bottom",
25475
+ delayMs: 500,
25476
+ children: (0, react_jsx_runtime.jsx)("button", {
25477
+ type: "button",
25478
+ className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.addButton} ${PendingPanel_module_css_default.listFold}`,
25479
+ "data-diff-file-list-float": true,
25480
+ "data-active": forceFloat ? "" : void 0,
25481
+ "aria-label": t(forceFloat ? "action.fileListFloatOff" : "action.fileListFloatOn"),
25482
+ "aria-pressed": forceFloat,
25483
+ onClick: toggleForceFloat,
25484
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutline16, { size: 12 })
25222
25485
  })
25223
- ]
25224
- }),
25225
- (0, react_jsx_runtime.jsx)("div", {
25226
- className: PendingPanel_module_css_default.listScroll,
25227
- "data-diff-list-scroll": true,
25228
- ref: attachListScroll,
25229
- children: files.length > 0 && (0, react_jsx_runtime.jsx)("ul", {
25230
- className: PendingPanel_module_css_default.rows,
25231
- children: files.map(renderEntry)
25232
25486
  })
25233
- }),
25234
- files.length > 0 && (0, react_jsx_runtime.jsxs)("div", {
25235
- className: PendingPanel_module_css_default.bulkActions,
25236
- children: [(0, react_jsx_runtime.jsx)("button", {
25487
+ ]
25488
+ }), listTab === "comments" ? (0, react_jsx_runtime.jsx)("div", {
25489
+ className: PendingPanel_module_css_default.listScroll,
25490
+ "data-diff-list-scroll": true,
25491
+ children: commentEntries.length === 0 ? (0, react_jsx_runtime.jsx)("p", {
25492
+ className: PendingPanel_module_css_default.listEmpty,
25493
+ "data-diff-comments-empty": true,
25494
+ children: t("panel.commentsEmpty")
25495
+ }) : (0, react_jsx_runtime.jsx)("ul", {
25496
+ className: PendingPanel_module_css_default.rows,
25497
+ "data-diff-comment-list": true,
25498
+ children: commentEntries.map((entry) => (0, react_jsx_runtime.jsx)("li", {
25499
+ className: PendingPanel_module_css_default.row,
25500
+ children: (0, react_jsx_runtime.jsxs)("div", {
25501
+ role: "button",
25502
+ tabIndex: 0,
25503
+ className: PendingPanel_module_css_default.commentRow,
25504
+ "data-diff-comment-link": entry.id,
25505
+ "data-mobile-nav-copy": "1",
25506
+ onClick: () => {
25507
+ jumpToComment(entry.fileId, entry.row);
25508
+ },
25509
+ onKeyDown: (event) => {
25510
+ if (event.key !== "Enter" && event.key !== " ") return;
25511
+ event.preventDefault();
25512
+ jumpToComment(entry.fileId, entry.row);
25513
+ },
25514
+ children: [(0, react_jsx_runtime.jsxs)("span", {
25515
+ className: PendingPanel_module_css_default.commentHead,
25516
+ children: [(0, react_jsx_runtime.jsx)("span", {
25517
+ className: PendingPanel_module_css_default.commentLabel,
25518
+ "data-diff-comment-label": true,
25519
+ children: entry.label
25520
+ }), entry.lost && (0, react_jsx_runtime.jsx)("span", {
25521
+ className: PendingPanel_module_css_default.commentLost,
25522
+ "data-diff-comment-lost": true,
25523
+ children: t("panel.commentOutdated")
25524
+ })]
25525
+ }), (0, react_jsx_runtime.jsx)("span", {
25526
+ className: PendingPanel_module_css_default.commentTitle,
25527
+ "data-diff-comment-title": true,
25528
+ children: entry.title
25529
+ })]
25530
+ })
25531
+ }, entry.id))
25532
+ })
25533
+ }) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("div", {
25534
+ className: PendingPanel_module_css_default.listScroll,
25535
+ "data-diff-list-scroll": true,
25536
+ ref: attachListScroll,
25537
+ children: files.length > 0 && (0, react_jsx_runtime.jsx)("ul", {
25538
+ className: PendingPanel_module_css_default.rows,
25539
+ children: files.map(renderEntry)
25540
+ })
25541
+ }), files.length > 0 && (0, react_jsx_runtime.jsxs)("div", {
25542
+ className: PendingPanel_module_css_default.bulkActions,
25543
+ children: [
25544
+ (0, react_jsx_runtime.jsx)("button", {
25237
25545
  type: "button",
25238
25546
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary}`,
25239
25547
  "data-diff-keep-all": true,
@@ -25242,7 +25550,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25242
25550
  runBulk("keep");
25243
25551
  },
25244
25552
  children: bulkBusy === "keep" ? t("action.busy") : t("action.keepAll")
25245
- }), (0, react_jsx_runtime.jsx)("button", {
25553
+ }),
25554
+ (0, react_jsx_runtime.jsx)("button", {
25246
25555
  type: "button",
25247
25556
  className: PendingPanel_module_css_default.action,
25248
25557
  "data-diff-revert-all": true,
@@ -25251,9 +25560,19 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25251
25560
  runBulk("revert");
25252
25561
  },
25253
25562
  children: bulkBusy === "revert" ? t("action.busy") : t("action.revertAll")
25254
- })]
25255
- })
25256
- ] });
25563
+ }),
25564
+ (0, react_jsx_runtime.jsxs)("button", {
25565
+ type: "button",
25566
+ className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.addPath}`,
25567
+ "data-diff-add": true,
25568
+ "aria-label": t("action.addPath"),
25569
+ onClick: () => {
25570
+ setAddOpen(true);
25571
+ },
25572
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 12 }), t("panel.addPathGo")]
25573
+ })
25574
+ ]
25575
+ })] })] });
25257
25576
  const handleUndo = async (sessionId) => {
25258
25577
  const id = await onUndo(sessionId);
25259
25578
  if (id === void 0) return;
@@ -25428,11 +25747,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25428
25747
  } catch {}
25429
25748
  document.body.style.userSelect = "none";
25430
25749
  document.body.style.cursor = "col-resize";
25750
+ let latest = startWidth;
25751
+ let pending = 0;
25431
25752
  const onMove = (move) => {
25432
- const next = startWidth + (move.clientX - startX);
25433
- setListWidth(Math.min(Math.max(next, MIN_LIST_WIDTH_PX), cap));
25753
+ latest = Math.min(Math.max(startWidth + (move.clientX - startX), MIN_LIST_WIDTH_PX), cap);
25754
+ if (pending !== 0) return;
25755
+ pending = requestAnimationFrame(() => {
25756
+ pending = 0;
25757
+ setListWidth(latest);
25758
+ });
25434
25759
  };
25435
25760
  const finish = () => {
25761
+ if (pending !== 0) {
25762
+ cancelAnimationFrame(pending);
25763
+ pending = 0;
25764
+ setListWidth(latest);
25765
+ }
25436
25766
  document.body.style.userSelect = "";
25437
25767
  document.body.style.cursor = "";
25438
25768
  window.removeEventListener("pointermove", onMove);
@@ -25443,6 +25773,23 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25443
25773
  window.addEventListener("pointerup", finish);
25444
25774
  window.addEventListener("pointercancel", finish);
25445
25775
  };
25776
+ /**
25777
+ * End the text selection when the press lands on the panel's chrome — blank space, a label, the
25778
+ * toolbar, the file list.
25779
+ *
25780
+ * The chrome is `user-select: none` (see `.panel`), and a press on such an area is one the
25781
+ * browser does NOT clear the selection for: the highlight stayed up, and so did the selection
25782
+ * frame that goes with it, over a gesture that plainly ended. What IS content is left to the
25783
+ * browser — which is also what keeps a drag started on chrome able to select the code it runs
25784
+ * into, since dropping the ranges first costs the drag nothing.
25785
+ */
25786
+ const onPanelMouseDown = (event) => {
25787
+ const target = event.target;
25788
+ if (!(target instanceof Element)) return;
25789
+ if (target.closest(KEEPS_SELECTION) !== null) return;
25790
+ const live = window.getSelection();
25791
+ if (typeof live?.removeAllRanges === "function") live.removeAllRanges();
25792
+ };
25446
25793
  const content = (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
25447
25794
  importToast !== null && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
25448
25795
  text: importToast,
@@ -25478,6 +25825,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25478
25825
  height: viewportHeight
25479
25826
  }),
25480
25827
  "data-diff-approval-panel": true,
25828
+ onMouseDown: onPanelMouseDown,
25481
25829
  "data-diff-docked": docked ? "" : void 0,
25482
25830
  "aria-label": t("panel.title"),
25483
25831
  children: [
@@ -25627,6 +25975,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25627
25975
  undoFlash,
25628
25976
  landingTop: landing !== void 0 && landing.fileId === selectedFile.id ? landing.top : void 0,
25629
25977
  landingTick: landing !== void 0 && landing.fileId === selectedFile.id ? landing.n : 0,
25978
+ landingRow: landing !== void 0 && landing.fileId === selectedFile.id ? landing.row : void 0,
25630
25979
  failedMessage: failed.get(selectedFile.id),
25631
25980
  commentSkill: snapshot.commentSkill,
25632
25981
  onPasteReference,
@@ -25762,6 +26111,11 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25762
26111
  setAddOpen(false);
25763
26112
  },
25764
26113
  t
26114
+ }),
26115
+ (0, react_jsx_runtime.jsx)("span", {
26116
+ className: PendingPanel_module_css_default.threadFontProbe,
26117
+ "data-diff-thread-font": true,
26118
+ "aria-hidden": "true"
25765
26119
  })
25766
26120
  ]
25767
26121
  })] }), docked && dockHost !== void 0 ? dockHost : document.body),
@@ -27812,6 +28166,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27812
28166
  "panel.readFailed": "读取待处理改动失败:{message}",
27813
28167
  "panel.group.current": "当前会话",
27814
28168
  "panel.group.others": "其他会话",
28169
+ "panel.tabs": "列表页签",
28170
+ "panel.tab.pending": "待审列表",
28171
+ "panel.tab.comments": "评论",
28172
+ "panel.commentsEmpty": "当前打开的文件里还没有评论",
28173
+ "panel.commentOutdated": "已过期",
28174
+ "panel.commentEmptyTitle": "(未填写)",
27815
28175
  "panel.aria": "待处理改动",
27816
28176
  "panel.stats": "+{added} -{removed}",
27817
28177
  "panel.blockPosition": "第 {current}/{total} 块",
@@ -27834,8 +28194,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27834
28194
  "panel.tabWidthDesc": "差异中制表符的缩进宽度,可选 2 / 4 / 8 个空格(默认 4),同时作用于行宽折行测量。",
27835
28195
  "panel.splitMode": "双栏对比",
27836
28196
  "panel.splitModeDesc": "开启后整文件差异用左「改前」|右「当前」双栏、逐行对齐的视图展示,默认关闭使用单栏(合并)视图。",
27837
- "panel.navLeadRows": "差异跳转行距",
27838
- "panel.navLeadRowsDesc": "按上/下跳转差异时,目标差异上方保留的行数(默认 2)。也用于从当前滚动位置定位上/下一个差异。",
28197
+ "panel.navLeadRows": "跳转行距",
28198
+ "panel.navLeadRowsDesc": "跳转时目标上方保留的行数(默认 2):上/下跳到差异块,或从评论列表跳到某条评论。也用于从当前滚动位置定位上/下一个差异。",
27839
28199
  "panel.diffFontSize": "代码字号",
27840
28200
  "panel.diffFontSizeDesc": "差异代码的文字大小(按当前字号百分比缩放,默认100%,每次 ±10%)。",
27841
28201
  "panel.diffLineHeight": "代码行高",
@@ -27899,8 +28259,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27899
28259
  "discussion.promptRuleSkill": "(这是一条代码批注:先加载 {skill} skill,按它的规则回答。)",
27900
28260
  "discussion.thinking": "思考中",
27901
28261
  "discussion.queued": "排队等待中",
27902
- "discussion.outdated": "(已过期)",
27903
- "discussion.quote": "评论代码:",
28262
+ "discussion.outdatedQuote": "评论代码已过期:",
27904
28263
  "discussion.hidden": "更早的 {count} 条已省略",
27905
28264
  "discussion.failed": "这次提问失败了,可以再试一次。",
27906
28265
  "discussion.stopped": "这次回答被停掉了,可以再问一次。",
@@ -28020,6 +28379,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
28020
28379
  "panel.readFailed": "Reading pending changes failed: {message}",
28021
28380
  "panel.group.current": "This session",
28022
28381
  "panel.group.others": "Other sessions",
28382
+ "panel.tabs": "List tabs",
28383
+ "panel.tab.pending": "Pending",
28384
+ "panel.tab.comments": "Comments",
28385
+ "panel.commentsEmpty": "No comments in the open files yet",
28386
+ "panel.commentOutdated": "Outdated",
28387
+ "panel.commentEmptyTitle": "(not written yet)",
28023
28388
  "panel.aria": "Pending changes",
28024
28389
  "panel.stats": "+{added} -{removed}",
28025
28390
  "panel.blockPosition": "{current}/{total}",
@@ -28042,8 +28407,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
28042
28407
  "panel.tabWidthDesc": "The indent width of a tab character in the differences, as 2 / 4 / 8 spaces (default 4). Also drives the wrapped-line measurement.",
28043
28408
  "panel.splitMode": "Side-by-side view",
28044
28409
  "panel.splitModeDesc": "When on, the whole-file differences render as a side-by-side (left \"before\" | right \"current\") line-aligned view. Off (default) uses the single-column unified view.",
28045
- "panel.navLeadRows": "Block jump lead rows",
28046
- "panel.navLeadRowsDesc": "Rows left above the jumped-to diff block on up/down navigation (default 2). Also used to locate the previous/next diff from the current scroll position.",
28410
+ "panel.navLeadRows": "Jump lead rows",
28411
+ "panel.navLeadRowsDesc": "Rows left above the target when jumping — up/down to a diff block, or from the comments list to a comment (default 2). Also used to locate the previous/next diff from the current scroll position.",
28047
28412
  "panel.diffFontSize": "Code font size",
28048
28413
  "panel.diffFontSizeDesc": "The diff code text size as a percentage of the current size (default 100%, ±10% per step).",
28049
28414
  "panel.diffLineHeight": "Code line height",
@@ -28107,8 +28472,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
28107
28472
  "discussion.promptRuleSkill": "(This is a comment on a few diff lines: load the {skill} skill first and answer by its rules.)",
28108
28473
  "discussion.thinking": "Thinking",
28109
28474
  "discussion.queued": "Queued",
28110
- "discussion.outdated": " (Outdated)",
28111
- "discussion.quote": "Commented code:",
28475
+ "discussion.outdatedQuote": "Commented code is outdated:",
28112
28476
  "discussion.hidden": "{count} earlier turns omitted",
28113
28477
  "discussion.failed": "That question failed; you can try again.",
28114
28478
  "discussion.stopped": "That answer was stopped; you can ask again.",