dsh-diff-approval 0.24.0 → 0.25.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{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{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{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_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{white-space:nowrap;scrollbar-width:none;min-width:0;color:var(--dsw-alias-label-primary);flex:1;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:auto hidden}.F1KBNa_diffPath::-webkit-scrollbar{display: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{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_discussionAnswer{color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionUser{padding:calc(var(--dsh-diff-line-height,22px) * .2) calc(var(--dsh-diff-line-height,22px) * .5);margin:calc(var(--dsh-diff-line-height,22px) * .3) 0 calc(var(--dsh-diff-line-height,22px) * .3) auto;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);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px 0 8px 8px}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.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);margin:0 -12px 0 -15px;display:table}.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;display:block}.F1KBNa_quoteNoWrap .F1KBNa_quoteText{white-space:pre;overflow-wrap:normal;overflow:hidden}.F1KBNa_discussionOutdated{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:16px}.F1KBNa_discussionHead{box-sizing:border-box;height:var(--dsh-diff-line-height,22px);flex:none;align-items:center;gap:8px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;height:calc(var(--dsh-diff-line-height,22px) * 2);flex:none;align-items:center;gap:8px;margin:0 -6px;padding:0;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);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));cursor:text;border-radius:6px;flex:auto;padding:3px 8px;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;font-size:calc(1em * var(--dsh-diff-font-scale,1))}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput:disabled{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-tertiary);cursor:default}.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{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent))}@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_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_add{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.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{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)) 12%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 26%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 24%, 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{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)}";
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");
@@ -32,231 +32,235 @@ window.__ModuleLoader__.load({
32
32
  }
33
33
  var PendingPanel_module_css_default = {
34
34
  "settingsSelector": "F1KBNa_settingsSelector",
35
- "notice": "F1KBNa_notice",
36
- "toggle": "F1KBNa_toggle",
37
- "quoteCode": "F1KBNa_quoteCode",
38
- "noticeText": "F1KBNa_noticeText",
35
+ "headerActions": "F1KBNa_headerActions",
36
+ "colorSwatch": "F1KBNa_colorSwatch",
37
+ "diffBody": "F1KBNa_diffBody",
39
38
  "readError": "F1KBNa_readError",
40
- "intraAdd": "F1KBNa_intraAdd",
41
- "pickerTitle": "F1KBNa_pickerTitle",
42
- "colorSv": "F1KBNa_colorSv",
43
- "splitCol": "F1KBNa_splitCol",
44
- "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
45
- "searchMatch": "F1KBNa_searchMatch",
46
39
  "rowDiscussed": "F1KBNa_rowDiscussed",
40
+ "lines": "F1KBNa_lines",
41
+ "discussionToggle": "F1KBNa_discussionToggle",
42
+ "splitHScrollFill": "F1KBNa_splitHScrollFill",
43
+ "blockActions": "F1KBNa_blockActions",
44
+ "fileListShrink": "F1KBNa_fileListShrink",
45
+ "stepperValue": "F1KBNa_stepperValue",
47
46
  "colorPickerPopover": "F1KBNa_colorPickerPopover",
48
- "discussionCompose": "F1KBNa_discussionCompose",
49
- "toggleOn": "F1KBNa_toggleOn",
50
- "fileList": "F1KBNa_fileList",
51
- "diffBodySplit": "F1KBNa_diffBodySplit",
52
- "mdPreviewBody": "F1KBNa_mdPreviewBody",
53
- "overviewRuler": "F1KBNa_overviewRuler",
54
- "confirmBackdrop": "F1KBNa_confirmBackdrop",
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
+ "discussionRow": "F1KBNa_discussionRow",
61
+ "diff": "F1KBNa_diff",
62
+ "pickerInput": "F1KBNa_pickerInput",
55
63
  "stepperButtonUp": "F1KBNa_stepperButtonUp",
56
- "confirmCard": "F1KBNa_confirmCard",
57
- "colorPicker": "F1KBNa_colorPicker",
58
- "diffActions": "F1KBNa_diffActions",
59
- "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
60
- "headerEntry": "F1KBNa_headerEntry",
61
- "layer": "F1KBNa_layer",
62
- "split": "F1KBNa_split",
63
- "code": "F1KBNa_code",
64
- "treeRow": "F1KBNa_treeRow",
65
- "colorValue": "F1KBNa_colorValue",
64
+ "quoteDel": "F1KBNa_quoteDel",
65
+ "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",
66
74
  "actionError": "F1KBNa_actionError",
67
- "statusAction": "F1KBNa_statusAction",
68
- "headerActions": "F1KBNa_headerActions",
69
- "searchToggleOn": "F1KBNa_searchToggleOn",
70
- "presentationSelect": "F1KBNa_presentationSelect",
71
- "splitHScrollRow": "F1KBNa_splitHScrollRow",
75
+ "del": "F1KBNa_del",
76
+ "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",
85
+ "note": "F1KBNa_note",
86
+ "splitRoot": "F1KBNa_splitRoot",
87
+ "colorSvCursor": "F1KBNa_colorSvCursor",
88
+ "colorHueCursor": "F1KBNa_colorHueCursor",
89
+ "settingsRowDesc": "F1KBNa_settingsRowDesc",
90
+ "fileList": "F1KBNa_fileList",
91
+ "rowMenuAnchor": "F1KBNa_rowMenuAnchor",
92
+ "pickerNote": "F1KBNa_pickerNote",
93
+ "quoteLines": "F1KBNa_quoteLines",
72
94
  "mdPreviewContent": "F1KBNa_mdPreviewContent",
73
- "dockHost": "F1KBNa_dockHost",
74
- "diffPath": "F1KBNa_diffPath",
75
- "coverNotice": "F1KBNa_coverNotice",
76
- "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
77
- "noteCentered": "F1KBNa_noteCentered",
78
- "diff": "F1KBNa_diff",
79
- "discussionAnswer": "F1KBNa_discussionAnswer",
80
- "pickerForm": "F1KBNa_pickerForm",
81
- "detailEmpty": "F1KBNa_detailEmpty",
82
- "pickerCheck": "F1KBNa_pickerCheck",
83
- "diffBody": "F1KBNa_diffBody",
84
- "searchBar": "F1KBNa_searchBar",
95
+ "coverNoticeFade": "F1KBNa_coverNoticeFade",
96
+ "badgeLabel": "F1KBNa_badgeLabel",
97
+ "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
98
+ "split": "F1KBNa_split",
85
99
  "langLabel": "F1KBNa_langLabel",
86
- "discussionToggle": "F1KBNa_discussionToggle",
87
- "fileListKnob": "F1KBNa_fileListKnob",
88
- "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
89
- "del": "F1KBNa_del",
90
100
  "fileListFloat": "F1KBNa_fileListFloat",
91
- "settingsGroup": "F1KBNa_settingsGroup",
92
- "discussionDot": "F1KBNa_discussionDot",
93
- "tree": "F1KBNa_tree",
94
- "colorPickerInput": "F1KBNa_colorPickerInput",
95
- "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
96
- "discussionBody": "F1KBNa_discussionBody",
101
+ "addButton": "F1KBNa_addButton",
102
+ "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
103
+ "importNote": "F1KBNa_importNote",
97
104
  "discussionNote": "F1KBNa_discussionNote",
98
- "blockActions": "F1KBNa_blockActions",
99
- "badgeCount": "F1KBNa_badgeCount",
100
- "row": "F1KBNa_row",
101
- "discussionSend": "F1KBNa_discussionSend",
102
- "wrap": "F1KBNa_wrap",
103
- "panelFailureRetry": "F1KBNa_panelFailureRetry",
104
- "pickerIcon": "F1KBNa_pickerIcon",
105
- "discussionInput": "F1KBNa_discussionInput",
106
- "subline": "F1KBNa_subline",
107
- "group": "F1KBNa_group",
108
- "stepperButton": "F1KBNa_stepperButton",
109
- "title": "F1KBNa_title",
110
- "coverCard": "F1KBNa_coverCard",
111
- "panel": "F1KBNa_panel",
112
- "presentationHost": "F1KBNa_presentationHost",
113
- "blockFlash": "F1KBNa_blockFlash",
105
+ "states": "F1KBNa_states",
114
106
  "settingsRowText": "F1KBNa_settingsRowText",
115
- "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
116
- "missingHint": "F1KBNa_missingHint",
117
- "detail": "F1KBNa_detail",
118
- "splitCols": "F1KBNa_splitCols",
119
- "splitRadd": "F1KBNa_splitRadd",
120
- "fileListShrink": "F1KBNa_fileListShrink",
107
+ "noteCentered": "F1KBNa_noteCentered",
108
+ "discussionBody": "F1KBNa_discussionBody",
109
+ "diffHeader": "F1KBNa_diffHeader",
110
+ "colorValue": "F1KBNa_colorValue",
111
+ "diffPreview": "F1KBNa_diffPreview",
112
+ "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
113
+ "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",
122
+ "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
123
+ "panelFailure": "F1KBNa_panelFailure",
124
+ "line": "F1KBNa_line",
125
+ "badgeCount": "F1KBNa_badgeCount",
126
+ "overviewMarker": "F1KBNa_overviewMarker",
127
+ "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",
121
138
  "discussionUser": "F1KBNa_discussionUser",
122
- "discussion": "F1KBNa_discussion",
123
- "addButton": "F1KBNa_addButton",
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",
146
+ "emptyActions": "F1KBNa_emptyActions",
147
+ "badge": "F1KBNa_badge",
148
+ "hint": "F1KBNa_hint",
149
+ "pickerCheck": "F1KBNa_pickerCheck",
150
+ "expand": "F1KBNa_expand",
151
+ "splitHScrollRow": "F1KBNa_splitHScrollRow",
124
152
  "footerButtons": "F1KBNa_footerButtons",
125
- "settingsGroupText": "F1KBNa_settingsGroupText",
126
- "wrapActive": "F1KBNa_wrapActive",
127
- "blockActionsDivider": "F1KBNa_blockActionsDivider",
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",
128
160
  "coverPopover": "F1KBNa_coverPopover",
129
- "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
130
- "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
131
- "quoteNoWrap": "F1KBNa_quoteNoWrap",
132
- "addCount": "F1KBNa_addCount",
133
- "searchInput": "F1KBNa_searchInput",
134
- "importNote": "F1KBNa_importNote",
135
- "splitHScroll": "F1KBNa_splitHScroll",
136
- "pickerClose": "F1KBNa_pickerClose",
137
- "chipPresentation": "F1KBNa_chipPresentation",
138
- "rail": "F1KBNa_rail",
139
- "rowFailed": "F1KBNa_rowFailed",
140
- "diffStats": "F1KBNa_diffStats",
141
- "expandExpanded": "F1KBNa_expandExpanded",
142
- "diffHeader": "F1KBNa_diffHeader",
161
+ "presentationSelect": "F1KBNa_presentationSelect",
162
+ "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
163
+ "action": "F1KBNa_action",
164
+ "floatResizeHandle": "F1KBNa_floatResizeHandle",
165
+ "actionPrimary": "F1KBNa_actionPrimary",
143
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",
144
178
  "treeCaret": "F1KBNa_treeCaret",
145
- "quoteLine": "F1KBNa_quoteLine",
146
- "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
147
- "splitLadd": "F1KBNa_splitLadd",
148
- "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
149
- "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
150
- "colorPickerChevron": "F1KBNa_colorPickerChevron",
151
- "colorBackdrop": "F1KBNa_colorBackdrop",
152
- "colorPickerPreview": "F1KBNa_colorPickerPreview",
153
- "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
179
+ "splitRdel": "F1KBNa_splitRdel",
180
+ "fileListKnob": "F1KBNa_fileListKnob",
181
+ "quoteCode": "F1KBNa_quoteCode",
182
+ "delCount": "F1KBNa_delCount",
183
+ "diffBodySplit": "F1KBNa_diffBodySplit",
154
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",
155
191
  "importButton": "F1KBNa_importButton",
156
- "markerAdd": "F1KBNa_markerAdd",
157
- "toggleThumb": "F1KBNa_toggleThumb",
158
- "settingsPage": "F1KBNa_settingsPage",
159
- "colorHueCursor": "F1KBNa_colorHueCursor",
160
- "headerEntryCount": "F1KBNa_headerEntryCount",
161
- "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
162
- "pickerInput": "F1KBNa_pickerInput",
163
- "settingsRowDesc": "F1KBNa_settingsRowDesc",
164
- "overviewMarker": "F1KBNa_overviewMarker",
165
- "actionPrimary": "F1KBNa_actionPrimary",
166
- "chipLabel": "F1KBNa_chipLabel",
167
- "rows": "F1KBNa_rows",
168
- "panelDocked": "F1KBNa_panelDocked",
192
+ "quoteLine": "F1KBNa_quoteLine",
169
193
  "coverButton": "F1KBNa_coverButton",
170
- "lines": "F1KBNa_lines",
171
- "kindTag": "F1KBNa_kindTag",
172
- "badgeLabel": "F1KBNa_badgeLabel",
173
- "states": "F1KBNa_states",
174
- "iconAction": "F1KBNa_iconAction",
175
- "splitHScrollFill": "F1KBNa_splitHScrollFill",
176
- "rowPath": "F1KBNa_rowPath",
177
- "coverNoticeFade": "F1KBNa_coverNoticeFade",
178
- "discussionPin": "F1KBNa_discussionPin",
179
- "pickerNote": "F1KBNa_pickerNote",
180
- "emptyState": "F1KBNa_emptyState",
181
- "gutter": "F1KBNa_gutter",
182
- "panelFailureText": "F1KBNa_panelFailureText",
183
- "confirmText": "F1KBNa_confirmText",
184
- "header": "F1KBNa_header",
185
- "close": "F1KBNa_close",
186
- "discussionDots": "F1KBNa_discussionDots",
187
- "quoteText": "F1KBNa_quoteText",
188
- "confirmActions": "F1KBNa_confirmActions",
189
- "action": "F1KBNa_action",
190
- "discussionCell": "F1KBNa_discussionCell",
191
- "splitLdel": "F1KBNa_splitLdel",
192
- "vSpacer": "F1KBNa_vSpacer",
193
- "intraDel": "F1KBNa_intraDel",
194
- "note": "F1KBNa_note",
195
- "searchCount": "F1KBNa_searchCount",
194
+ "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
195
+ "divergedHint": "F1KBNa_divergedHint",
196
+ "quoteNoWrap": "F1KBNa_quoteNoWrap",
196
197
  "statusBar": "F1KBNa_statusBar",
197
- "coverNoticeCard": "F1KBNa_coverNoticeCard",
198
- "fileListKnobIn": "F1KBNa_fileListKnobIn",
199
- "bulkActions": "F1KBNa_bulkActions",
200
- "flexSpacer": "F1KBNa_flexSpacer",
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",
201
213
  "settingsGroupBody": "F1KBNa_settingsGroupBody",
202
- "colorSvCursor": "F1KBNa_colorSvCursor",
203
- "settingsRowTitle": "F1KBNa_settingsRowTitle",
214
+ "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
215
+ "toggleOn": "F1KBNa_toggleOn",
216
+ "rowPath": "F1KBNa_rowPath",
217
+ "blockPosition": "F1KBNa_blockPosition",
218
+ "langSelect": "F1KBNa_langSelect",
219
+ "headerEntry": "F1KBNa_headerEntry",
220
+ "presentationHost": "F1KBNa_presentationHost",
204
221
  "rowHead": "F1KBNa_rowHead",
205
- "colorPickerPanel": "F1KBNa_colorPickerPanel",
206
- "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
207
- "stepperValue": "F1KBNa_stepperValue",
208
- "missing": "F1KBNa_missing",
209
- "discussionOutdated": "F1KBNa_discussionOutdated",
210
- "markerDel": "F1KBNa_markerDel",
211
- "hint": "F1KBNa_hint",
222
+ "discussionCode": "F1KBNa_discussionCode",
212
223
  "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
213
- "blockFlashShake": "F1KBNa_blockFlashShake",
214
- "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
215
- "emptyActions": "F1KBNa_emptyActions",
224
+ "colorSv": "F1KBNa_colorSv",
225
+ "treeRow": "F1KBNa_treeRow",
226
+ "pickerIcon": "F1KBNa_pickerIcon",
227
+ "coverBackdrop": "F1KBNa_coverBackdrop",
228
+ "diffStats": "F1KBNa_diffStats",
216
229
  "coverHost": "F1KBNa_coverHost",
217
- "langSelect": "F1KBNa_langSelect",
218
- "diffFlashFade": "F1KBNa_diffFlashFade",
219
- "splitRoot": "F1KBNa_splitRoot",
220
- "splitRdel": "F1KBNa_splitRdel",
221
- "diffBodyWrap": "F1KBNa_diffBodyWrap",
222
- "discussionRow": "F1KBNa_discussionRow",
230
+ "expandExpanded": "F1KBNa_expandExpanded",
231
+ "groupHead": "F1KBNa_groupHead",
232
+ "discussionPin": "F1KBNa_discussionPin",
233
+ "discussionOutdated": "F1KBNa_discussionOutdated",
223
234
  "discussionRange": "F1KBNa_discussionRange",
224
- "expand": "F1KBNa_expand",
225
- "pickerCard": "F1KBNa_pickerCard",
226
- "add": "F1KBNa_add",
227
- "kindHint": "F1KBNa_kindHint",
228
- "stepper": "F1KBNa_stepper",
229
- "splitDivider": "F1KBNa_splitDivider",
230
- "diffPreview": "F1KBNa_diffPreview",
231
- "blockPosition": "F1KBNa_blockPosition",
232
- "discussionHead": "F1KBNa_discussionHead",
233
- "chip": "F1KBNa_chip",
234
- "treeNote": "F1KBNa_treeNote",
235
- "coverNoticeText": "F1KBNa_coverNoticeText",
236
- "diffFlashShake": "F1KBNa_diffFlashShake",
237
- "resizeHandle": "F1KBNa_resizeHandle",
238
- "noticeButton": "F1KBNa_noticeButton",
235
+ "markerDel": "F1KBNa_markerDel",
236
+ "splitRadd": "F1KBNa_splitRadd",
237
+ "colorPickerChevron": "F1KBNa_colorPickerChevron",
238
+ "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
239
+ "tree": "F1KBNa_tree",
240
+ "flexSpacer": "F1KBNa_flexSpacer",
239
241
  "actionChord": "F1KBNa_actionChord",
240
- "badge": "F1KBNa_badge",
241
- "colorSwatch": "F1KBNa_colorSwatch",
242
- "settingsReset": "F1KBNa_settingsReset",
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",
252
+ "discussionInput": "F1KBNa_discussionInput",
253
+ "addCount": "F1KBNa_addCount",
254
+ "overviewRuler": "F1KBNa_overviewRuler",
243
255
  "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
244
- "delCount": "F1KBNa_delCount",
245
- "context": "F1KBNa_context",
246
- "pickerName": "F1KBNa_pickerName",
247
- "floatResizeHandle": "F1KBNa_floatResizeHandle",
248
- "listScroll": "F1KBNa_listScroll",
249
- "groupHead": "F1KBNa_groupHead",
250
- "mirrored": "F1KBNa_mirrored",
251
256
  "divider": "F1KBNa_divider",
252
- "line": "F1KBNa_line",
253
- "divergedHint": "F1KBNa_divergedHint",
254
- "panelFailure": "F1KBNa_panelFailure",
255
- "searchToggle": "F1KBNa_searchToggle",
256
- "coverBackdrop": "F1KBNa_coverBackdrop",
257
- "treeName": "F1KBNa_treeName",
258
- "quoteLines": "F1KBNa_quoteLines",
259
- "rowMeta": "F1KBNa_rowMeta"
257
+ "coverNoticeText": "F1KBNa_coverNoticeText",
258
+ "colorPickerInput": "F1KBNa_colorPickerInput",
259
+ "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
260
+ "discussionAnswer": "F1KBNa_discussionAnswer",
261
+ "confirmText": "F1KBNa_confirmText",
262
+ "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
263
+ "missingHint": "F1KBNa_missingHint"
260
264
  };
261
265
  //#endregion
262
266
  //#region lib/types/client/PathPicker.js
@@ -770,6 +774,7 @@ window.__ModuleLoader__.load({
770
774
  const PASTE_ON_COPY_KEY = "diff-approval:paste-on-copy";
771
775
  const IMPORT_UNTRACKED_KEY = "diff-approval:import-untracked";
772
776
  const CONFIRM_FILE_REMOVE_KEY = "diff-approval:confirm-file-remove";
777
+ const DISCUSSION_ROUNDS_KEY = "diff-approval:discussion-rounds";
773
778
  const SEARCH_CASE_KEY = "diff-approval:search-case";
774
779
  const SEARCH_WORD_KEY = "diff-approval:search-word";
775
780
  const TAB_WIDTH_KEY = "diff-approval:tab-size";
@@ -1131,6 +1136,19 @@ window.__ModuleLoader__.load({
1131
1136
  if (!Number.isInteger(raw)) return 2;
1132
1137
  return Math.max(0, Math.min(10, raw));
1133
1138
  }
1139
+ /**
1140
+ * How many rounds of a comment thread the panel keeps.
1141
+ * @returns the configured round count, or the default when nothing valid is stored.
1142
+ */
1143
+ function discussionRoundLimit() {
1144
+ const raw = Number.parseInt(localStorage.getItem(DISCUSSION_ROUNDS_KEY) ?? "", 10);
1145
+ if (!Number.isInteger(raw)) return 2;
1146
+ return Math.max(1, Math.min(10, raw));
1147
+ }
1148
+ /** Persist the comment thread's round limit. */
1149
+ function setDiscussionRoundLimit(value) {
1150
+ localStorage.setItem(DISCUSSION_ROUNDS_KEY, String(Math.max(1, Math.min(10, value))));
1151
+ }
1134
1152
  /** Persist the block-jump lead row count. */
1135
1153
  function setNavLeadRows(value) {
1136
1154
  localStorage.setItem(NAV_LEAD_KEY, String(Math.max(0, Math.min(10, value))));
@@ -2732,33 +2750,101 @@ window.__ModuleLoader__.load({
2732
2750
  return (text.endsWith("\n") ? text.slice(0, -1) : text).split("\n");
2733
2751
  }
2734
2752
  /**
2735
- * The newest turns that fit a size budget, and how many older ones were left out.
2736
- * A thread grows without bound, so the block shows its tail and says what it is
2737
- * hiding rather than clipping silently; the hidden note costs one row of the
2738
- * budget itself. Sizes are in whatever unit the caller budgets in (the panel uses
2739
- * code rows, fractions included, and rounds the total up once).
2753
+ * The newest rounds of a thread, and how many older turns were left out.
2754
+ *
2755
+ * A thread grows without bound, so the block shows its tail and says what it is hiding. The unit
2756
+ * is the round rather than a row budget: a block keeps the last `rounds` questions and
2757
+ * everything said after them, however long those turns are (the count is a preference). That is possible
2758
+ * because the block reserves exactly what it draws (see `discussionRows`), so a long answer is
2759
+ * shown in full instead of being sliced — the row budget this replaces existed to stop an old
2760
+ * thread from swamping the diff, and a round cap does that without ever cutting a turn in half.
2740
2761
  *
2741
2762
  * @param messages - the whole thread, oldest first.
2763
+ * @param rounds - how many rounds to keep (at least one: something has to be visible).
2742
2764
  * @param sizeOf - the size one message needs when rendered (text plus its chrome).
2743
- * @param capRows - the body budget.
2744
2765
  * @returns the messages to render, the count left out, and the size they need.
2745
2766
  */
2746
- function discussionTail(messages, sizeOf, capRows) {
2747
- let rows = 0;
2748
- let keep = 0;
2767
+ function discussionRounds(messages, rounds, sizeOf) {
2768
+ const keep = Math.max(1, Math.floor(rounds));
2769
+ let questions = 0;
2770
+ let start = 0;
2749
2771
  for (let index = messages.length - 1; index >= 0; index--) {
2750
- const size = Math.max(1, sizeOf(messages[index]));
2751
- const reserve = index > 0 ? 1 : 0;
2752
- if (keep > 0 && rows + size + reserve > capRows) break;
2753
- rows += size;
2754
- keep += 1;
2772
+ if (messages[index].role !== "user") continue;
2773
+ questions += 1;
2774
+ if (questions === keep) {
2775
+ start = index;
2776
+ break;
2777
+ }
2755
2778
  }
2756
- const hidden = messages.length - keep;
2779
+ const kept = messages.slice(start);
2780
+ const hidden = start;
2757
2781
  return {
2758
- messages: messages.slice(hidden),
2782
+ messages: kept,
2759
2783
  hidden,
2760
- rows: rows + (hidden > 0 ? 1 : 0)
2784
+ rows: kept.reduce((total, message) => total + Math.max(1, sizeOf(message)), 0) + (hidden > 0 ? 1 : 0)
2785
+ };
2786
+ }
2787
+ /**
2788
+ * Read one turn's inline Markdown: `code` and **strong**.
2789
+ *
2790
+ * Deliberately tiny. The thread is laid out on the diff's own row grid — one line box per code
2791
+ * row — so nothing here may become a block: no headings, lists, quotes or fenced code. A marker
2792
+ * with no partner, or one spanning a line break, is left exactly as typed, and so is everything
2793
+ * this does not know about.
2794
+ *
2795
+ * @param text - the turn's text.
2796
+ * @returns its runs, in order.
2797
+ */
2798
+ function discussionRuns(text) {
2799
+ const runs = [];
2800
+ let literal = "";
2801
+ const flush = () => {
2802
+ if (literal === "") return;
2803
+ runs.push({
2804
+ kind: "text",
2805
+ text: literal
2806
+ });
2807
+ literal = "";
2761
2808
  };
2809
+ for (let index = 0; index < text.length; index++) {
2810
+ const rest = text.slice(index);
2811
+ const code = /^`([^`\n]+)`/.exec(rest);
2812
+ const strong = code === null ? /^\*\*([^*\n]+)\*\*/.exec(rest) : null;
2813
+ if (code !== null) {
2814
+ flush();
2815
+ runs.push({
2816
+ kind: "code",
2817
+ text: code[1]
2818
+ });
2819
+ index += code[0].length - 1;
2820
+ continue;
2821
+ }
2822
+ if (strong !== null) {
2823
+ flush();
2824
+ runs.push({
2825
+ kind: "strong",
2826
+ text: strong[1]
2827
+ });
2828
+ index += strong[0].length - 1;
2829
+ continue;
2830
+ }
2831
+ literal += text[index];
2832
+ }
2833
+ flush();
2834
+ return runs;
2835
+ }
2836
+ /**
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("");
2762
2848
  }
2763
2849
  /**
2764
2850
  * An answer with its blank lines dropped.
@@ -19564,6 +19650,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19564
19650
  const MAX_LIST_WIDTH_PX = 560;
19565
19651
  /** Inset of the floating file-list card from the code scroll box, in px. */
19566
19652
  const FLOAT_LIST_MARGIN_PX = 12;
19653
+ /** How far the list's rows sit from the right edge of whichever card holds them, in px — a fixed
19654
+ * number on every platform, which is why the scroller's own padding makes up whatever the
19655
+ * platform's scrollbar has already taken (see `applyListInset`). */
19656
+ const LIST_RIGHT_INSET_PX = 8;
19567
19657
  /** The folded card's width grip: how wide its hit strip is, and how much of it
19568
19658
  * lies over the card (the rest overhangs the code view, so the card's own
19569
19659
  * scrollbar strip stays clear). */
@@ -19812,6 +19902,23 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19812
19902
  if (out.length > 1 && out[out.length - 1] === "") out.pop();
19813
19903
  return out;
19814
19904
  }
19905
+ /**
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.
19910
+ *
19911
+ * @returns a canvas `font` string, or undefined when there is no code cell to read.
19912
+ */
19913
+ function threadFontOf() {
19914
+ const code = document.querySelector("[data-diff-code]");
19915
+ if (code === null) return void 0;
19916
+ 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}`;
19921
+ }
19815
19922
  /** Resolve the code cell's computed font for canvas measurement. */
19816
19923
  function codeFontOf() {
19817
19924
  const code = document.querySelector("[data-diff-code]");
@@ -19849,6 +19956,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19849
19956
  * `.discussionUser`): its own 0.5 per side, and no margin outside it, so the fill is
19850
19957
  * flush with the thread's right column and this is what comes off the wrap width. */
19851
19958
  const DISCUSSION_BUBBLE_SIDE_PADDING_ROWS = .5;
19959
+ /**
19960
+ * The comment thread's own row height, in px — a fixed number, NOT the code's line height.
19961
+ * A thread is prose: it keeps the size the default settings show whatever the reader sets the
19962
+ * code's line height and font scale to, so a thread reads the same in a 10px code row as in a
19963
+ * 36px one. The block still reserves whole rows of its own, and the diff's height table takes
19964
+ * its exact pixel height (see the discussion extras below), so the rows under it stay exact.
19965
+ * Mirrors the literal 22px the thread's rules use in the stylesheet.
19966
+ */
19967
+ const THREAD_ROW_PX = 22;
19968
+ /**
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.
19973
+ */
19974
+ const DISCUSSION_CODE_PADDING_PX = 2;
19852
19975
  /** Rows rendered beyond the visible window in each direction. */
19853
19976
  const OVERSCAN_ROWS = 8;
19854
19977
  /** The identity a file with no discussions shares, so memos stay stable. */
@@ -20054,7 +20177,28 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20054
20177
  * @param props.wrap - the code view's wrap setting: off, the quote is one line per quoted line,
20055
20178
  * as the file renders it.
20056
20179
  */
20180
+ /**
20181
+ * One turn's text as the thread draws it: its literal runs, its inline `code`, its **bold**.
20182
+ *
20183
+ * The thread draws on the diff's own row grid, so these two are the whole of the inline
20184
+ * Markdown it knows (see `discussionRuns`); everything else is left exactly as written.
20185
+ *
20186
+ * @param text - the turn's text.
20187
+ * @returns its nodes, in order.
20188
+ */
20189
+ function discussionNodes(text) {
20190
+ return discussionRuns(text).map((run, index) => {
20191
+ if (run.kind === "code") return (0, react_jsx_runtime.jsx)("code", {
20192
+ className: PendingPanel_module_css_default.discussionCode,
20193
+ children: run.text
20194
+ }, index);
20195
+ if (run.kind === "strong") return (0, react_jsx_runtime.jsx)("strong", { children: run.text }, index);
20196
+ return run.text;
20197
+ });
20198
+ }
20057
20199
  function DiscussionQuote({ quote, lines, lang, wrap }) {
20200
+ /** The diff's own wash for a quoted row, or nothing for context (and for older threads). */
20201
+ const wash = (kind) => kind === "add" ? ` ${PendingPanel_module_css_default.quoteAdd}` : kind === "del" ? ` ${PendingPanel_module_css_default.quoteDel}` : "";
20058
20202
  const rows = (0, react.useMemo)(() => {
20059
20203
  const texts = quote.split("\n");
20060
20204
  const runs = highlightWindow(texts, lang, 0, texts.length)?.runs;
@@ -20080,7 +20224,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20080
20224
  className: `${PendingPanel_module_css_default.quoteLines}${wrap ? "" : " " + PendingPanel_module_css_default.quoteNoWrap}`,
20081
20225
  "data-diff-discussion-quote": true,
20082
20226
  children: rows.map((row, index) => (0, react_jsx_runtime.jsxs)("div", {
20083
- className: PendingPanel_module_css_default.quoteLine,
20227
+ className: `${PendingPanel_module_css_default.quoteLine}${wash(row.gutter?.kind)}`,
20228
+ "data-diff-quote-kind": row.gutter?.kind,
20084
20229
  children: [
20085
20230
  (0, react_jsx_runtime.jsx)("span", {
20086
20231
  className: PendingPanel_module_css_default.gutter,
@@ -20324,6 +20469,13 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20324
20469
  ]
20325
20470
  });
20326
20471
  });
20472
+ /** Whether a pending file has nothing left to review: its content already matches the tracked
20473
+ * baseline. The file list's context menu offers its actions off this answer, and the detail
20474
+ * toolbar derives the same answer from the diff it already holds (its `model.blocks`), so a row
20475
+ * and the file it opens can never disagree about which actions they are. */
20476
+ function fileHasNoDiff(file) {
20477
+ return changeBlocksOf(computeWholeFileDiff(file.oldText, file.newText)).length === 0;
20478
+ }
20327
20479
  /** Whether a block keep/revert range covers the file's entire change region, so
20328
20480
  * applying it leaves the file with no pending diff — the "remove or keep in
20329
20481
  * list" prompt applies. This generalises the single-block case to a selection
@@ -21360,10 +21512,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21360
21512
  return markers;
21361
21513
  }
21362
21514
  /** One row of the file list: the clickable head in the left pane. */
21363
- function PendingFileRow({ file, selected, failedMessage, t, onSelect }) {
21515
+ function PendingFileRow({ file, selected, failedMessage, t, onSelect, onMenu }) {
21364
21516
  const stats = (0, react.useMemo)(() => computeWholeFileDiff(file.oldText, file.newText), [file.oldText, file.newText]);
21365
21517
  return (0, react_jsx_runtime.jsx)("li", {
21366
21518
  className: PendingPanel_module_css_default.row,
21519
+ onContextMenu: (event) => {
21520
+ event.preventDefault();
21521
+ onMenu(event);
21522
+ },
21367
21523
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
21368
21524
  label: file.path,
21369
21525
  delayMs: 500,
@@ -21410,7 +21566,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21410
21566
  });
21411
21567
  }
21412
21568
  /** The selected file's diff, actions, jump controls, and copy toolbar. */
21413
- function PendingDiff({ file, busy, workspacePath, jumpSignal, undoFlash, landingTop, landingTick, failedMessage, commentSkill, onPasteReference, onAskAgent, watchChat, onToast, t, onKeep, onRevert, onRefreshVcs, onBlockKeep, onBlockRevert, onOpen, onPreviewImage }) {
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 }) {
21570
+ /** The path being typed into the header field; null shows the open file's own path. */
21571
+ const [pathDraft, setPathDraft] = (0, react.useState)(null);
21414
21572
  const [langOverride, setLangOverride] = (0, react.useState)(void 0);
21415
21573
  const [langMenuOpen, setLangMenuOpen] = (0, react.useState)(false);
21416
21574
  const langMenuItems = (0, react.useMemo)(() => [{
@@ -22167,13 +22325,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22167
22325
  const lines = text.split("\n");
22168
22326
  const bubble = role === "user";
22169
22327
  const chrome = bubble ? 1 : 0;
22170
- const measure = makeMeasurer(codeFontOf());
22328
+ const measure = makeMeasurer(threadFontOf());
22171
22329
  if (measure === void 0 || bodyWidth === 0) return lines.length + chrome;
22172
22330
  const body = Math.max(0, bodyWidth - discussionRightInsetPx - 3 - 24);
22173
- const wrapping = (widthPx ?? (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * ROW_HEIGHT_PX : body)) - measure("0");
22331
+ const wrapping = (widthPx ?? (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * THREAD_ROW_PX : body)) - measure("0");
22174
22332
  if (wrapping <= 0) return lines.length + chrome;
22175
22333
  const tabPx = tabWidthSpaces * measure(" ");
22176
- return chrome + lines.reduce((rows, line) => rows + Math.max(1, wrapInto(line, wrapping, measure, tabPx).length), 0);
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);
22177
22339
  }, [
22178
22340
  bodyWidth,
22179
22341
  tabWidthSpaces,
@@ -22191,24 +22353,31 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22191
22353
  */
22192
22354
  const quoteRowsOf = (0, react.useCallback)((quote, wrap) => {
22193
22355
  if (!wrap) return quote.split("\n").length;
22356
+ const lines = quote.split("\n");
22357
+ const measure = makeMeasurer(codeFontOf());
22194
22358
  const width = Math.max(0, bodyWidth - discussionRightInsetPx) - WRAP_GUTTERS_PX;
22195
- return messageRowsOf(quote, "assistant", width);
22359
+ if (measure === void 0) return lines.length;
22360
+ const wrapping = width - measure("0");
22361
+ if (wrapping <= 0) return lines.length;
22362
+ const tabPx = tabWidthSpaces * measure(" ");
22363
+ return lines.reduce((rows, line) => rows + Math.max(1, wrapInto(line, wrapping, measure, tabPx).length), 0);
22196
22364
  }, [
22197
22365
  bodyWidth,
22198
22366
  discussionRightInsetPx,
22199
- messageRowsOf
22367
+ tabWidthSpaces
22200
22368
  ]);
22201
22369
  /**
22202
22370
  * The size one rendered message needs in code rows: its wrapped lines plus its own
22203
22371
  * padding — which for a bubble is exactly one row (half a row above, half below).
22204
22372
  * Every turn is therefore a whole number of rows and the thread stays on the code's
22205
- * own grid.
22373
+ * own grid. The text is measured with its inline markers gone, because that is what the
22374
+ * turn draws: counting `` and ** would reserve room for characters nobody sees.
22206
22375
  *
22207
22376
  * @param message - the message to size.
22208
22377
  * @returns its size in code rows.
22209
22378
  */
22210
22379
  const messageSizeOf = (0, react.useCallback)((message) => {
22211
- return messageRowsOf(discussionText(message), message.role);
22380
+ return messageRowsOf(discussionPlainText(discussionText(message)), message.role);
22212
22381
  }, [messageRowsOf]);
22213
22382
  /**
22214
22383
  * The thread as the block will render it, plus the body height that follows from
@@ -22219,24 +22388,26 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22219
22388
  * @param discussion - the block to lay out.
22220
22389
  * @returns the messages to render, the hidden count, and the body height.
22221
22390
  */
22391
+ const roundLimit = discussionRoundLimit();
22222
22392
  const layoutDiscussion = (0, react.useCallback)((discussion) => {
22223
22393
  const answer = discussion.reply === void 0 ? void 0 : stripBlankLines(discussion.reply);
22224
22394
  const stoppedNote = discussion.stopped === true && (answer === void 0 || answer === "") && discussion.failed !== true;
22225
- const trailing = (discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" ? 1 + quoteRowsOf(discussion.quote, langWrap) : 0) + (answer !== void 0 && answer !== "" ? messageSizeOf({
22395
+ const trailing = (discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" ? 1 + quoteRowsOf(discussion.quote, langWrap) * (ROW_HEIGHT_PX / THREAD_ROW_PX) : 0) + (answer !== void 0 && answer !== "" ? messageSizeOf({
22226
22396
  role: "assistant",
22227
22397
  text: answer
22228
22398
  }) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0));
22229
- const tailCap = 12 - trailing;
22230
- const tail = discussionTail(discussion.messages, messageSizeOf, Math.max(1, tailCap));
22399
+ const tail = discussionRounds(discussion.messages, roundLimit, messageSizeOf);
22231
22400
  return {
22232
22401
  messages: tail.messages,
22233
22402
  hidden: tail.hidden,
22234
- rows: Math.ceil(tail.rows + trailing)
22403
+ rows: tail.rows + trailing
22235
22404
  };
22236
22405
  }, [
22237
22406
  langWrap,
22238
22407
  quoteRowsOf,
22239
- messageSizeOf
22408
+ messageSizeOf,
22409
+ roundLimit,
22410
+ ROW_HEIGHT_PX
22240
22411
  ]);
22241
22412
  /**
22242
22413
  * The discussions as the render will draw them: the body height the measurement
@@ -22292,7 +22463,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22292
22463
  const heights = wrapped === null ? new Array(rows.length).fill(ROW_HEIGHT_PX) : [...wrapped];
22293
22464
  for (const [after, extra] of discussionExtras) {
22294
22465
  const index = Math.max(0, Math.min(after, heights.length - 1));
22295
- heights[index] = (heights[index] ?? ROW_HEIGHT_PX) + extra * ROW_HEIGHT_PX;
22466
+ heights[index] = (heights[index] ?? ROW_HEIGHT_PX) + extra * THREAD_ROW_PX;
22296
22467
  }
22297
22468
  return heights;
22298
22469
  }, [
@@ -22593,13 +22764,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22593
22764
  if (startLine === void 0) return;
22594
22765
  const endLine = last?.newLine ?? last?.oldLine ?? startLine;
22595
22766
  const body = bodyRef.current;
22596
- if (body !== null && offsetOf(selection.start) - body.scrollTop < 0) pendingScrollShiftRef.current += 3 * ROW_HEIGHT_PX;
22767
+ if (body !== null && offsetOf(selection.start) - body.scrollTop < 0) pendingScrollShiftRef.current += 66;
22597
22768
  const id = `discussion-${Date.now().toString(36)}-${discussions.length}`;
22598
22769
  const quoted = model.diff.rows.slice(selection.start, selection.end + 1);
22599
22770
  const quote = quoted.map((row) => row.text).join("\n");
22600
22771
  const quoteLines = quoted.map((row) => ({
22601
22772
  old: row.oldLine,
22602
- new: row.newLine
22773
+ new: row.newLine,
22774
+ kind: row.kind
22603
22775
  }));
22604
22776
  setDiscussions((current) => [...current, {
22605
22777
  id,
@@ -22633,7 +22805,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22633
22805
  if (discussion === void 0) return;
22634
22806
  const next = collapsed ?? !discussion.collapsed;
22635
22807
  if (next === discussion.collapsed) return;
22636
- const shift = ((next ? 1 : discussionRows(discussion)) - discussionRows(discussion)) * ROW_HEIGHT_PX;
22808
+ const shift = ((next ? 1 : discussionRows(discussion)) - discussionRows(discussion)) * THREAD_ROW_PX;
22637
22809
  const body = bodyRef.current;
22638
22810
  if (body !== null && offsetOf(discussion.anchor.start) - body.scrollTop < 0) pendingScrollShiftRef.current += shift;
22639
22811
  setDiscussions((current) => current.map((entry) => entry.id === id ? {
@@ -22659,7 +22831,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22659
22831
  */
22660
22832
  const sendDiscussion = (id) => {
22661
22833
  const discussion = discussions.find((entry) => entry.id === id);
22662
- if (discussion === void 0 || discussion.lost === true) return;
22834
+ if (discussion === void 0) return;
22663
22835
  const text = discussion.draft.trim();
22664
22836
  if (text === "") return;
22665
22837
  const reference = `(${discussionLineRange(discussion.anchor)})`;
@@ -22701,7 +22873,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22701
22873
  const removeDiscussion = (id) => {
22702
22874
  const discussion = discussions.find((entry) => entry.id === id);
22703
22875
  if (discussion === void 0) return;
22704
- const shift = discussionRows(discussion) * ROW_HEIGHT_PX * -1;
22876
+ const shift = discussionRows(discussion) * THREAD_ROW_PX * -1;
22705
22877
  const body = bodyRef.current;
22706
22878
  if (body !== null && offsetOf(discussion.anchor.start) - body.scrollTop < 0) pendingScrollShiftRef.current += shift;
22707
22879
  setDiscussions((current) => current.filter((entry) => entry.id !== id));
@@ -22942,9 +23114,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22942
23114
  }
22943
23115
  return found;
22944
23116
  };
23117
+ const syncQuoteScroll = (0, react.useCallback)((body) => {
23118
+ if (body === null) return;
23119
+ for (const text of body.querySelectorAll("[data-diff-quote-text]")) text.scrollLeft = body.scrollLeft;
23120
+ }, []);
22945
23121
  const onScroll = () => {
22946
23122
  const body = bodyRef.current;
22947
23123
  if (body === null) return;
23124
+ syncQuoteScroll(body);
22948
23125
  setScrollTop(body.scrollTop);
22949
23126
  setViewportHeight(body.clientHeight);
22950
23127
  const count = model.blocks.length;
@@ -23360,6 +23537,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23360
23537
  maxScroll,
23361
23538
  viewportHeight
23362
23539
  ]);
23540
+ (0, react.useLayoutEffect)(() => {
23541
+ syncQuoteScroll(bodyRef.current);
23542
+ });
23363
23543
  return (0, react_jsx_runtime.jsxs)("div", {
23364
23544
  className: PendingPanel_module_css_default.diff,
23365
23545
  "data-diff-approval-diff": true,
@@ -23369,9 +23549,37 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23369
23549
  className: PendingPanel_module_css_default.diffHeader,
23370
23550
  "data-diff-toolbar": true,
23371
23551
  children: [
23372
- (0, react_jsx_runtime.jsx)("span", {
23552
+ (0, react_jsx_runtime.jsx)("input", {
23373
23553
  className: PendingPanel_module_css_default.diffPath,
23374
- children: file.path
23554
+ "data-diff-path-input": true,
23555
+ type: "text",
23556
+ value: pathDraft ?? file.path,
23557
+ spellCheck: false,
23558
+ autoComplete: "off",
23559
+ "aria-label": t("action.pathField"),
23560
+ onChange: (event) => {
23561
+ setPathDraft(event.target.value);
23562
+ },
23563
+ onBlur: () => {
23564
+ setPathDraft(null);
23565
+ },
23566
+ onKeyDown: (event) => {
23567
+ if (event.key === "Enter") {
23568
+ event.preventDefault();
23569
+ const typed = (pathDraft ?? "").trim();
23570
+ if (typed === "" || typed === file.path) {
23571
+ setPathDraft(null);
23572
+ return;
23573
+ }
23574
+ onAddTypedPath(typed).finally(() => {
23575
+ setPathDraft(null);
23576
+ });
23577
+ } else if (event.key === "Escape") {
23578
+ event.preventDefault();
23579
+ setPathDraft(null);
23580
+ event.currentTarget.blur();
23581
+ }
23582
+ }
23375
23583
  }),
23376
23584
  (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
23377
23585
  label: t("action.openFile"),
@@ -23507,7 +23715,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23507
23715
  })
23508
23716
  }),
23509
23717
  (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
23510
- (0, react_jsx_runtime.jsx)("button", {
23718
+ model.blocks.length === 0 ? (0, react_jsx_runtime.jsx)("button", {
23719
+ type: "button",
23720
+ className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.actionQuietDisabled}`,
23721
+ "data-diff-remove": true,
23722
+ disabled: busy,
23723
+ onClick: () => {
23724
+ onKeep(file.sessionId, file.id, false);
23725
+ },
23726
+ children: t("row.dismiss")
23727
+ }) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("button", {
23511
23728
  type: "button",
23512
23729
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.actionQuietDisabled}`,
23513
23730
  "data-diff-keep": true,
@@ -23516,8 +23733,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23516
23733
  onKeep(file.sessionId, file.id);
23517
23734
  },
23518
23735
  children: t("action.keep")
23519
- }),
23520
- (0, react_jsx_runtime.jsx)("button", {
23736
+ }), (0, react_jsx_runtime.jsx)("button", {
23521
23737
  type: "button",
23522
23738
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionQuietDisabled}`,
23523
23739
  "data-diff-revert": true,
@@ -23526,7 +23742,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23526
23742
  onRevert(file.sessionId, file.id);
23527
23743
  },
23528
23744
  children: file.kind === "create" ? t("action.delete") : t("action.revert")
23529
- })
23745
+ })] })
23530
23746
  ]
23531
23747
  }),
23532
23748
  failedMessage !== void 0 && (0, react_jsx_runtime.jsx)("p", {
@@ -23714,7 +23930,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23714
23930
  ref: bodyRef,
23715
23931
  tabIndex: 0,
23716
23932
  onScroll,
23717
- style: { tabSize: tabWidthSpaces },
23933
+ style: {
23934
+ tabSize: tabWidthSpaces,
23935
+ "--dsh-diff-quote-width": `${widestLine}ch`
23936
+ },
23718
23937
  "data-diff-body": true,
23719
23938
  children: (0, react_jsx_runtime.jsxs)("div", {
23720
23939
  className: `${PendingPanel_module_css_default.lines}${langWrap ? " " + PendingPanel_module_css_default.wrap : ""}`,
@@ -23748,7 +23967,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23748
23967
  return (0, react_jsx_runtime.jsxs)("div", {
23749
23968
  className: PendingPanel_module_css_default.discussionRow,
23750
23969
  "data-diff-discussion-space": rows,
23751
- style: { height: rows * ROW_HEIGHT_PX },
23970
+ style: { height: rows * THREAD_ROW_PX },
23752
23971
  children: [
23753
23972
  (0, react_jsx_runtime.jsx)("div", {
23754
23973
  className: PendingPanel_module_css_default.gutter,
@@ -23769,7 +23988,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23769
23988
  "data-lost": discussion.lost === true ? "" : void 0,
23770
23989
  style: {
23771
23990
  width: Math.max(0, bodyWidth - discussionRightInsetPx),
23772
- height: rows * ROW_HEIGHT_PX
23991
+ height: rows * THREAD_ROW_PX
23773
23992
  },
23774
23993
  children: [(0, react_jsx_runtime.jsxs)("div", {
23775
23994
  className: PendingPanel_module_css_default.discussionHead,
@@ -23849,16 +24068,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23849
24068
  discussion.messages.map((message, index) => message.role === "user" ? (0, react_jsx_runtime.jsx)("p", {
23850
24069
  className: PendingPanel_module_css_default.discussionUser,
23851
24070
  "data-diff-discussion-user": true,
23852
- children: message.text
24071
+ children: discussionNodes(message.text)
23853
24072
  }, `u${index}`) : (0, react_jsx_runtime.jsx)("p", {
23854
24073
  className: PendingPanel_module_css_default.discussionAnswer,
23855
24074
  "data-diff-discussion-reply": true,
23856
- children: message.text
24075
+ children: discussionNodes(message.text)
23857
24076
  }, `a${index}`)),
23858
24077
  discussion.reply !== void 0 && discussion.reply !== "" ? (0, react_jsx_runtime.jsx)("p", {
23859
24078
  className: PendingPanel_module_css_default.discussionAnswer,
23860
24079
  "data-diff-discussion-reply": true,
23861
- children: discussion.reply
24080
+ children: discussionNodes(discussion.reply)
23862
24081
  }) : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
23863
24082
  className: PendingPanel_module_css_default.discussionNote,
23864
24083
  "data-diff-discussion-failed": true,
@@ -23881,13 +24100,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23881
24100
  children: [(0, react_jsx_runtime.jsx)("input", {
23882
24101
  className: PendingPanel_module_css_default.discussionInput,
23883
24102
  "data-diff-discussion-input": true,
23884
- disabled: discussion.lost === true,
23885
24103
  ref: (element) => {
23886
24104
  if (element === null) discussionInputEls.current.delete(discussion.id);
23887
24105
  else discussionInputEls.current.set(discussion.id, element);
23888
24106
  },
23889
24107
  value: discussion.draft,
23890
- placeholder: t(discussion.lost === true ? "discussion.placeholderOutdated" : "discussion.placeholder"),
24108
+ placeholder: t("discussion.placeholder"),
23891
24109
  onChange: (event) => {
23892
24110
  const value = event.target.value;
23893
24111
  setDiscussions((current) => current.map((entry) => entry.id === discussion.id ? {
@@ -23905,7 +24123,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23905
24123
  type: "button",
23906
24124
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.discussionSend}`,
23907
24125
  "data-diff-discussion-send": true,
23908
- disabled: discussion.lost === true,
23909
24126
  onClick: () => {
23910
24127
  sendDiscussion(discussion.id);
23911
24128
  },
@@ -24192,6 +24409,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24192
24409
  const [open, setOpen] = (0, react.useState)(false);
24193
24410
  const [selected, setSelected] = (0, react.useState)("");
24194
24411
  /**
24412
+ * A file the detail header's path field just added, waiting for it to show up in the list so it
24413
+ * can be selected. The add's own refresh lands a poll later, and a selection made to an id that
24414
+ * is not in the list yet would be replaced by the list's first row, so the id waits here.
24415
+ */
24416
+ const [pendingSelect, setPendingSelect] = (0, react.useState)(null);
24417
+ /**
24195
24418
  * Where the diff should land for the file it is about to show, and a nonce so a
24196
24419
  * repeated request for the *same* file lands again. `top` carries the offset the
24197
24420
  * reader was left at when the panel resumes a view (see `panel-memory`); it is
@@ -24280,6 +24503,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24280
24503
  * choice rides the same block RPC as its `removeWhenResolved` flag. */
24281
24504
  const [blockPrompt, setBlockPrompt] = (0, react.useState)(null);
24282
24505
  const [filePrompt, setFilePrompt] = (0, react.useState)(null);
24506
+ /** The file list row whose action menu is open, and where the right-click landed. */
24507
+ const [rowMenu, setRowMenu] = (0, react.useState)(null);
24283
24508
  /** Whether the add-path dialog is open. One dialog covers both shapes: what
24284
24509
  * the browser settles on decides whether a file or a directory is added. */
24285
24510
  const [addOpen, setAddOpen] = (0, react.useState)(false);
@@ -24479,6 +24704,29 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24479
24704
  panelWidth,
24480
24705
  selected
24481
24706
  ]);
24707
+ const applyListInset = (0, react.useCallback)((scroller) => {
24708
+ if (scroller === null) return;
24709
+ const bar = Math.max(0, scroller.offsetWidth - scroller.clientWidth);
24710
+ scroller.style.paddingRight = `${Math.max(0, LIST_RIGHT_INSET_PX - bar)}px`;
24711
+ }, []);
24712
+ /** The scroller, for the re-measure below; the inset itself is applied on attach. */
24713
+ const listScrollRef = (0, react.useRef)(null);
24714
+ const attachListScroll = (0, react.useCallback)((scroller) => {
24715
+ listScrollRef.current = scroller;
24716
+ applyListInset(scroller);
24717
+ }, [applyListInset]);
24718
+ (0, react.useLayoutEffect)(() => {
24719
+ applyListInset(listScrollRef.current);
24720
+ }, [
24721
+ applyListInset,
24722
+ open,
24723
+ docked,
24724
+ floatMode,
24725
+ floatOpen,
24726
+ listWidth,
24727
+ panelWidth,
24728
+ snapshot.files.length
24729
+ ]);
24482
24730
  (0, react.useEffect)(() => {
24483
24731
  if (!open || !snapshot.redoCleared) return;
24484
24732
  onAckRedoCleared();
@@ -24604,19 +24852,23 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24604
24852
  if (!showing) return;
24605
24853
  if (started) startListOpenRef.current = true;
24606
24854
  const pending = (id) => files.some((file) => file.id === id);
24855
+ const typed = pendingSelect !== null && pending(pendingSelect) ? pendingSelect : void 0;
24856
+ if (typed !== void 0) setPendingSelect(null);
24607
24857
  const keep = selected !== "" && pending(selected) ? selected : void 0;
24608
24858
  const remembered = keep === void 0 && started ? lastPanelFile(current) : void 0;
24609
24859
  const resumed = remembered !== void 0 && pending(remembered) ? remembered : void 0;
24610
- const pick = keep ?? resumed ?? files[0]?.id;
24860
+ const pick = typed ?? keep ?? resumed ?? files[0]?.id;
24611
24861
  if (pick === void 0) return;
24612
24862
  if (pick !== selected) setSelected(pick);
24613
24863
  if (started) landOn(pick, panelFileOffset(current, pick));
24864
+ else if (typed !== void 0) landOn(pick);
24614
24865
  }, [
24615
24866
  open,
24616
24867
  docked,
24617
24868
  current,
24618
24869
  files,
24619
- selected
24870
+ selected,
24871
+ pendingSelect
24620
24872
  ]);
24621
24873
  const runImportVcs = async () => {
24622
24874
  if (current === void 0 || importBusy) return;
@@ -24804,6 +25056,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24804
25056
  setAddOpen(false);
24805
25057
  setBlockPrompt(null);
24806
25058
  setFilePrompt(null);
25059
+ setRowMenu(null);
24807
25060
  }, [open]);
24808
25061
  /** Run the same decision over every current-session file, sequentially. */
24809
25062
  const runBulk = async (kind) => {
@@ -24850,11 +25103,35 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24850
25103
  }
24851
25104
  showCopyToast(t("panel.fileNotPending"));
24852
25105
  };
25106
+ /**
25107
+ * Open a path typed into the detail header's field: add it to the list when it is not there
25108
+ * yet, then select the file the host says it landed as. Only one exact file counts — a path
25109
+ * that is missing, is a directory, or has nothing readable in it leaves the list untouched,
25110
+ * and the field falls back to the path it was showing.
25111
+ *
25112
+ * @param path - the path as typed.
25113
+ * @returns whether a file was opened.
25114
+ */
25115
+ const addTypedPath = async (path) => {
25116
+ if (current === void 0) return false;
25117
+ const value = await onAddPath(current, path, true, true).catch(() => void 0);
25118
+ if (value === void 0) return false;
25119
+ if (value.outcome !== "added" && value.outcome !== "duplicate") return false;
25120
+ if (value.id !== void 0) setPendingSelect(value.id);
25121
+ return true;
25122
+ };
24853
25123
  const renderEntry = (entry) => (0, react_jsx_runtime.jsx)(PendingFileRow, {
24854
25124
  file: entry,
24855
25125
  selected: selected === entry.id,
24856
25126
  failedMessage: failed.get(entry.id),
24857
25127
  t,
25128
+ onMenu: (event) => {
25129
+ setRowMenu({
25130
+ file: entry,
25131
+ x: event.clientX,
25132
+ y: event.clientY
25133
+ });
25134
+ },
24858
25135
  onSelect: (id) => {
24859
25136
  if (id === selected) setJumpSignal((signal) => signal + 1);
24860
25137
  else {
@@ -24863,6 +25140,30 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24863
25140
  }
24864
25141
  }
24865
25142
  }, entry.id);
25143
+ /** The row menu's rows: the pair the file's own toolbar offers, or its single 移出. */
25144
+ const rowMenuItems = (0, react.useMemo)(() => {
25145
+ if (rowMenu === null) return [];
25146
+ if (fileHasNoDiff(rowMenu.file)) return [{
25147
+ id: "remove",
25148
+ label: t("row.dismiss")
25149
+ }];
25150
+ return [{
25151
+ id: "keep",
25152
+ label: t("action.keep")
25153
+ }, {
25154
+ id: "revert",
25155
+ label: rowMenu.file.kind === "create" ? t("action.delete") : t("action.revert")
25156
+ }];
25157
+ }, [rowMenu, t]);
25158
+ /** Run a row-menu choice through the same handlers the open file uses. 移出 is a keep: the
25159
+ * host folds the content and drops the entry, so the file itself is left alone. */
25160
+ const runRowMenu = (id) => {
25161
+ const target = rowMenu;
25162
+ setRowMenu(null);
25163
+ if (target === null) return;
25164
+ if (id === "keep" || id === "remove") onKeep(target.file.sessionId, target.file.id);
25165
+ else if (id === "revert") onRevert(target.file.sessionId, target.file.id);
25166
+ };
24866
25167
  const selectedFile = files.find((file) => file.id === selected);
24867
25168
  /**
24868
25169
  * The folded card's own box, derived from the measured one, or undefined while
@@ -24924,6 +25225,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24924
25225
  (0, react_jsx_runtime.jsx)("div", {
24925
25226
  className: PendingPanel_module_css_default.listScroll,
24926
25227
  "data-diff-list-scroll": true,
25228
+ ref: attachListScroll,
24927
25229
  children: files.length > 0 && (0, react_jsx_runtime.jsx)("ul", {
24928
25230
  className: PendingPanel_module_css_default.rows,
24929
25231
  children: files.map(renderEntry)
@@ -25094,6 +25396,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25094
25396
  const onKeyDown = (event) => {
25095
25397
  if (event.key !== "Escape") return;
25096
25398
  if (pathPickerOpen()) return;
25399
+ if (event.target instanceof Element && event.target.closest("[data-diff-path-input]") !== null) return;
25097
25400
  if (document.querySelector("[data-diff-approval-cover-popover]") !== null) return;
25098
25401
  const target = event.target;
25099
25402
  if (target instanceof Node && panelRef.current?.contains(target) === true && document.querySelector("[data-diff-searchbar]") !== null) return;
@@ -25331,6 +25634,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25331
25634
  watchChat,
25332
25635
  onToast: showCopyToast,
25333
25636
  t,
25637
+ onAddTypedPath: addTypedPath,
25334
25638
  onKeep: keepWithPrompt,
25335
25639
  onRevert: revertWithPrompt,
25336
25640
  onRefreshVcs: (entry) => {
@@ -25437,6 +25741,18 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25437
25741
  })]
25438
25742
  })
25439
25743
  }),
25744
+ rowMenu !== null && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
25745
+ open: true,
25746
+ portal: true,
25747
+ compact: true,
25748
+ items: rowMenuItems,
25749
+ onSelect: runRowMenu,
25750
+ onClose: () => {
25751
+ setRowMenu(null);
25752
+ },
25753
+ getAnchorRect: () => new DOMRect(rowMenu.x, rowMenu.y, 0, 0),
25754
+ anchor: (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.rowMenuAnchor })
25755
+ }),
25440
25756
  addOpen && current !== void 0 && (0, react_jsx_runtime.jsx)(PathPicker, {
25441
25757
  rootPath: snapshot.workspacePath,
25442
25758
  onBrowse: (path) => onBrowse(current, path),
@@ -26123,6 +26439,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26123
26439
  function DiffApprovalSettingsTab({ t }) {
26124
26440
  const [pasteOnCopy, setPasteOnCopyState] = (0, react.useState)(pasteOnCopyEnabled);
26125
26441
  const [commentMode, setCommentModeState] = (0, react.useState)(commentModeEnabled);
26442
+ const [discussionRounds, setDiscussionRoundsState] = (0, react.useState)(discussionRoundLimit);
26126
26443
  const [includeUntracked, setIncludeUntrackedState] = (0, react.useState)(includeUntrackedEnabled);
26127
26444
  const [confirmFileRemove, setConfirmFileRemoveState] = (0, react.useState)(confirmFileRemoveEnabled);
26128
26445
  const [tab, setTabState] = (0, react.useState)(tabWidth);
@@ -26158,6 +26475,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26158
26475
  setPanelCover(value);
26159
26476
  };
26160
26477
  const [summon, setSummonState] = (0, react.useState)(quickSummonKey);
26478
+ const [commentOpen, setCommentOpen] = (0, react.useState)(false);
26161
26479
  const [keysOpen, setKeysOpen] = (0, react.useState)(false);
26162
26480
  const [keybindings, setKeybindingsState] = (0, react.useState)(() => {
26163
26481
  const initial = {};
@@ -26179,6 +26497,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26179
26497
  setPasteOnCopyState(value);
26180
26498
  setPasteOnCopyEnabled(value);
26181
26499
  };
26500
+ const setDiscussionRounds = (value) => {
26501
+ setDiscussionRoundsState(value);
26502
+ setDiscussionRoundLimit(value);
26503
+ };
26182
26504
  const setCommentMode = (value) => {
26183
26505
  setCommentModeState(value);
26184
26506
  setCommentModeEnabled(value);
@@ -26344,6 +26666,50 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26344
26666
  max: 10,
26345
26667
  dataAttribute: "data-diff-nav-lead-rows",
26346
26668
  t
26669
+ })
26670
+ ]
26671
+ })]
26672
+ }),
26673
+ (0, react_jsx_runtime.jsxs)("div", {
26674
+ className: PendingPanel_module_css_default.settingsGroup,
26675
+ "data-open": commentOpen || void 0,
26676
+ children: [(0, react_jsx_runtime.jsxs)("button", {
26677
+ type: "button",
26678
+ className: PendingPanel_module_css_default.settingsGroupHeader,
26679
+ onClick: () => {
26680
+ setCommentOpen((open) => !open);
26681
+ },
26682
+ "data-diff-comment-toggle": true,
26683
+ children: [(0, react_jsx_runtime.jsxs)("span", {
26684
+ className: PendingPanel_module_css_default.settingsGroupText,
26685
+ children: [(0, react_jsx_runtime.jsx)("span", {
26686
+ className: PendingPanel_module_css_default.settingsGroupTitle,
26687
+ children: t("settings.comment")
26688
+ }), (0, react_jsx_runtime.jsx)("span", {
26689
+ className: PendingPanel_module_css_default.settingsGroupDesc,
26690
+ children: t("settings.commentDesc")
26691
+ })]
26692
+ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: PendingPanel_module_css_default.settingsGroupChevron })]
26693
+ }), commentOpen && (0, react_jsx_runtime.jsxs)("div", {
26694
+ className: PendingPanel_module_css_default.settingsGroupBody,
26695
+ children: [
26696
+ (0, react_jsx_runtime.jsx)(PreferenceRow, {
26697
+ title: t("panel.commentMode"),
26698
+ description: t("panel.commentModeDesc"),
26699
+ value: commentMode,
26700
+ onSelect: setCommentMode,
26701
+ dataAttribute: "data-diff-comment-mode-select",
26702
+ t
26703
+ }),
26704
+ (0, react_jsx_runtime.jsx)(StepperRow, {
26705
+ title: t("panel.discussionRounds"),
26706
+ description: t("panel.discussionRoundsDesc"),
26707
+ value: discussionRounds,
26708
+ onChange: setDiscussionRounds,
26709
+ min: 1,
26710
+ max: 10,
26711
+ dataAttribute: "data-diff-discussion-rounds",
26712
+ t
26347
26713
  }),
26348
26714
  (0, react_jsx_runtime.jsx)(PreferenceRow, {
26349
26715
  title: t("panel.pasteOnCopy"),
@@ -26352,14 +26718,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26352
26718
  onSelect: setPasteOnCopy,
26353
26719
  dataAttribute: "data-diff-paste-on-copy-select",
26354
26720
  t
26355
- }),
26356
- (0, react_jsx_runtime.jsx)(PreferenceRow, {
26357
- title: t("panel.commentMode"),
26358
- description: t("panel.commentModeDesc"),
26359
- value: commentMode,
26360
- onSelect: setCommentMode,
26361
- dataAttribute: "data-diff-comment-mode-select",
26362
- t
26363
26721
  })
26364
26722
  ]
26365
26723
  })]
@@ -26565,11 +26923,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26565
26923
  path
26566
26924
  }));
26567
26925
  },
26568
- async addPath(sessionId, path, includeUnchanged) {
26926
+ async addPath(sessionId, path, includeUnchanged, exact) {
26569
26927
  return addValueOf(await rpc.call(DIFF_APPROVAL_CHANNEL, "add-path", {
26570
26928
  sessionId,
26571
26929
  path,
26572
- includeUnchanged
26930
+ includeUnchanged,
26931
+ ...exact === true ? { exact: true } : {}
26573
26932
  }));
26574
26933
  },
26575
26934
  async open(sessionId, id, action) {
@@ -26721,7 +27080,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26721
27080
  if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error("the add returned a malformed value");
26722
27081
  const record = value;
26723
27082
  const outcome = record.outcome;
26724
- if (outcome !== "added" && outcome !== "duplicate" && outcome !== "unchanged" && outcome !== "empty" && outcome !== "missing" && outcome !== "outside" && outcome !== "no-vcs" && outcome !== "failed") throw new Error("the add returned a malformed outcome");
27083
+ if (outcome !== "added" && outcome !== "duplicate" && outcome !== "unchanged" && outcome !== "empty" && outcome !== "missing" && outcome !== "outside" && outcome !== "no-vcs" && outcome !== "failed" && outcome !== "not-a-file") throw new Error("the add returned a malformed outcome");
26725
27084
  const added = record.added;
26726
27085
  const duplicates = record.duplicates;
26727
27086
  if (typeof added !== "number" || typeof duplicates !== "number") throw new Error("the add returned a malformed value");
@@ -26730,6 +27089,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26730
27089
  outcome,
26731
27090
  added,
26732
27091
  duplicates,
27092
+ id: typeof record.id === "string" ? record.id : void 0,
26733
27093
  truncated: record.truncated === true ? true : void 0,
26734
27094
  message: typeof message === "string" && message.length > 0 ? message : void 0
26735
27095
  };
@@ -27020,8 +27380,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27020
27380
  browse(sessionId, path) {
27021
27381
  return port.browse(sessionId, path);
27022
27382
  },
27023
- async addPath(sessionId, path, includeUnchanged) {
27024
- const value = await port.addPath(sessionId, path, includeUnchanged);
27383
+ async addPath(sessionId, path, includeUnchanged, exact) {
27384
+ const value = await port.addPath(sessionId, path, includeUnchanged, exact);
27025
27385
  await this.refresh(sessionId);
27026
27386
  return value;
27027
27387
  },
@@ -27491,10 +27851,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27491
27851
  "panel.quickSummon": "快速呼出",
27492
27852
  "panel.commentMode": "评论模式",
27493
27853
  "panel.commentModeDesc": "选中差异行后可以直接就这几行向智能体提问,回答就显示在这几行下方。",
27854
+ "panel.discussionRounds": "评论里保留的对话轮数",
27855
+ "panel.discussionRoundsDesc": "一条评论里保留最近几轮(你问一句、Agent 答一句算一轮),更早的整轮省略。默认 2 轮,范围 1–10。",
27494
27856
  "panel.quickSummonDesc": "用键盘快捷键打开/关闭差异面板。点击右侧按钮后按下新的按键组合即可修改。",
27495
27857
  "panel.recordShortcut": "按下快捷键…",
27496
27858
  "settings.keybindings": "快捷键",
27497
27859
  "settings.keybindingsDesc": "展开后可配置各项操作的按键组合。",
27860
+ "settings.comment": "评论",
27861
+ "settings.commentDesc": "就选中的差异行向智能体提问:评论模式的开关,以及一条评论里保留多少对话。",
27498
27862
  "settings.diffView": "差异视图",
27499
27863
  "settings.diffViewDesc": "调整差异的显示效果(字号、行高、新增/删除颜色)与布局偏好。",
27500
27864
  "settings.diffPreview": "预览",
@@ -27521,7 +27885,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27521
27885
  "settings.tabLabel": "改动审批",
27522
27886
  "row.create": "新增",
27523
27887
  "row.failed": "失败",
27524
- "row.dismiss": "移除",
27888
+ "row.dismiss": "移出",
27525
27889
  "row.added": "+{added}",
27526
27890
  "row.removed": "-{removed}",
27527
27891
  "action.keep": "保留",
@@ -27530,7 +27894,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27530
27894
  "action.discussionExpand": "展开",
27531
27895
  "action.discussionCollapse": "收起",
27532
27896
  "discussion.placeholder": "写下你的评论…",
27533
- "discussion.placeholderOutdated": "代码已过期,无法继续评论",
27534
27897
  "discussion.marker": "[评论]",
27535
27898
  "discussion.promptRule": "(回答只针对这几行,不超过 3 行;行与行之间不要留空行;用纯文本,不要 Markdown 装饰;要求详细时不受长度限制。细则见 dsh-diff-approval-comment skill。)",
27536
27899
  "discussion.promptRuleSkill": "(这是一条代码批注:先加载 {skill} skill,按它的规则回答。)",
@@ -27547,6 +27910,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27547
27910
  "action.keepAll": "全部保留",
27548
27911
  "action.revertAll": "全部回退",
27549
27912
  "action.openFile": "打开文件",
27913
+ "action.pathField": "路径(回车打开)",
27550
27914
  "action.revealFile": "打开所在目录",
27551
27915
  "action.busy": "处理中…",
27552
27916
  "action.prevDiff": "上一处差异",
@@ -27612,8 +27976,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27612
27976
  "status.missing": "该改动已不存在",
27613
27977
  "panel.resolvedAsk": "「{file}」的所有改动都已处理,是否从列表移除?",
27614
27978
  "panel.keepInList": "保留在列表",
27615
- "panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移除?",
27616
- "panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移除?",
27979
+ "panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移出?",
27980
+ "panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移出?",
27617
27981
  "panel.confirmFileRemove": "处理整文件后询问是否移出列表",
27618
27982
  "panel.confirmFileRemoveDesc": "对单个文件执行整文件保留 / 回退后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响全部保留 / 全部回退)。",
27619
27983
  "action.refreshVcs": "刷新差异",
@@ -27695,10 +28059,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27695
28059
  "panel.quickSummon": "Quick summon",
27696
28060
  "panel.commentMode": "Comment mode",
27697
28061
  "panel.commentModeDesc": "Ask the agent about the rows you select in the diff; the answer appears in a thread right below them.",
28062
+ "panel.discussionRounds": "Rounds kept in a comment",
28063
+ "panel.discussionRoundsDesc": "How many rounds a comment keeps (one question and the answer to it); older rounds are left out. Default 2, range 1-10.",
27698
28064
  "panel.quickSummonDesc": "Open or close the diff panel with a keyboard shortcut. Click the button and press a new chord to change it.",
27699
28065
  "panel.recordShortcut": "Press keys…",
27700
28066
  "settings.keybindings": "Shortcuts",
27701
28067
  "settings.keybindingsDesc": "Expand to configure the key combo for each action.",
28068
+ "settings.comment": "Comments",
28069
+ "settings.commentDesc": "Ask the agent about the diff rows you select: the comment-mode switch, and how much of a thread a comment keeps.",
27702
28070
  "settings.diffView": "Diff view",
27703
28071
  "settings.diffViewDesc": "Adjust the diff appearance (font size, line height, add/delete colors) and layout preferences.",
27704
28072
  "settings.diffPreview": "Preview",
@@ -27734,7 +28102,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27734
28102
  "action.discussionExpand": "Expand",
27735
28103
  "action.discussionCollapse": "Collapse",
27736
28104
  "discussion.placeholder": "Write your comment…",
27737
- "discussion.placeholderOutdated": "This code is outdated; commenting is off",
27738
28105
  "discussion.marker": "[Review]",
27739
28106
  "discussion.promptRule": "(Answer only about these lines, in at most 3 lines, with no blank line between them, as plain text without Markdown decoration; ignore the length limit if my annotation asks for detail. Full rules: the dsh-diff-approval-comment skill.)",
27740
28107
  "discussion.promptRuleSkill": "(This is a comment on a few diff lines: load the {skill} skill first and answer by its rules.)",
@@ -27751,6 +28118,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27751
28118
  "action.keepAll": "Keep all",
27752
28119
  "action.revertAll": "Revert all",
27753
28120
  "action.openFile": "Open file",
28121
+ "action.pathField": "Path (Enter to open)",
27754
28122
  "action.revealFile": "Reveal in folder",
27755
28123
  "action.busy": "Working…",
27756
28124
  "action.prevDiff": "Previous diff",
@@ -28022,7 +28390,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
28022
28390
  onImportVcs: (sessionId, includeUntracked) => store.importVcs(sessionId, includeUntracked),
28023
28391
  onRefreshVcs: (sessionId, id, includeUntracked) => store.refreshVcs(sessionId, id, includeUntracked),
28024
28392
  onBrowse: (sessionId, path) => store.browse(sessionId, path),
28025
- onAddPath: (sessionId, path, includeUnchanged) => store.addPath(sessionId, path, includeUnchanged),
28393
+ onAddPath: (sessionId, path, includeUnchanged, exact) => store.addPath(sessionId, path, includeUnchanged, exact),
28026
28394
  onKeepAll: (sessionId) => store.keepAll(sessionId),
28027
28395
  onRevertAll: (sessionId) => store.revertAll(sessionId),
28028
28396
  onAckRedoCleared: () => store.clearRedoCleared(),