dsh-diff-approval 0.24.1 → 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");
@@ -31,232 +31,236 @@ window.__ModuleLoader__.load({
31
31
  document.head.appendChild(tag);
32
32
  }
33
33
  var PendingPanel_module_css_default = {
34
- "pickerNote": "F1KBNa_pickerNote",
35
- "coverButton": "F1KBNa_coverButton",
36
- "discussionRangeWrap": "F1KBNa_discussionRangeWrap",
37
- "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
38
- "colorPicker": "F1KBNa_colorPicker",
39
- "emptyState": "F1KBNa_emptyState",
40
- "coverNotice": "F1KBNa_coverNotice",
41
- "actionQuietDisabled": "F1KBNa_actionQuietDisabled",
42
- "blockActionsDivider": "F1KBNa_blockActionsDivider",
43
- "discussion": "F1KBNa_discussion",
44
- "panelFailure": "F1KBNa_panelFailure",
45
- "diffPath": "F1KBNa_diffPath",
46
- "wrapActive": "F1KBNa_wrapActive",
47
- "resizeHandle": "F1KBNa_resizeHandle",
48
- "stepperButtonUp": "F1KBNa_stepperButtonUp",
34
+ "settingsSelector": "F1KBNa_settingsSelector",
35
+ "headerActions": "F1KBNa_headerActions",
36
+ "colorSwatch": "F1KBNa_colorSwatch",
37
+ "diffBody": "F1KBNa_diffBody",
38
+ "readError": "F1KBNa_readError",
39
+ "rowDiscussed": "F1KBNa_rowDiscussed",
40
+ "lines": "F1KBNa_lines",
41
+ "discussionToggle": "F1KBNa_discussionToggle",
42
+ "splitHScrollFill": "F1KBNa_splitHScrollFill",
43
+ "blockActions": "F1KBNa_blockActions",
44
+ "fileListShrink": "F1KBNa_fileListShrink",
49
45
  "stepperValue": "F1KBNa_stepperValue",
50
- "fileListKnob": "F1KBNa_fileListKnob",
46
+ "colorPickerPopover": "F1KBNa_colorPickerPopover",
47
+ "diffPath": "F1KBNa_diffPath",
48
+ "splitHScroll": "F1KBNa_splitHScroll",
49
+ "group": "F1KBNa_group",
50
+ "diffBodyWrap": "F1KBNa_diffBodyWrap",
51
+ "row": "F1KBNa_row",
52
+ "settingsGroupText": "F1KBNa_settingsGroupText",
53
+ "discussion": "F1KBNa_discussion",
54
+ "rows": "F1KBNa_rows",
55
+ "discussionDot": "F1KBNa_discussionDot",
51
56
  "settingsGroupChevron": "F1KBNa_settingsGroupChevron",
52
- "expandExpanded": "F1KBNa_expandExpanded",
53
- "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
54
- "tree": "F1KBNa_tree",
55
- "discussionPin": "F1KBNa_discussionPin",
56
- "emptyActions": "F1KBNa_emptyActions",
57
- "coverCard": "F1KBNa_coverCard",
58
- "importButton": "F1KBNa_importButton",
59
- "settingsRowDesc": "F1KBNa_settingsRowDesc",
60
- "panelDocked": "F1KBNa_panelDocked",
61
- "treeName": "F1KBNa_treeName",
62
- "blockFlash": "F1KBNa_blockFlash",
63
- "coverPopover": "F1KBNa_coverPopover",
64
- "noticeButton": "F1KBNa_noticeButton",
65
- "intraAdd": "F1KBNa_intraAdd",
66
- "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
67
- "expand": "F1KBNa_expand",
68
- "blockPosition": "F1KBNa_blockPosition",
69
- "overviewRuler": "F1KBNa_overviewRuler",
70
- "badge": "F1KBNa_badge",
71
- "line": "F1KBNa_line",
72
- "states": "F1KBNa_states",
73
- "quoteCode": "F1KBNa_quoteCode",
74
- "confirmText": "F1KBNa_confirmText",
75
- "dockHost": "F1KBNa_dockHost",
76
- "searchInput": "F1KBNa_searchInput",
77
- "diffPreviewScroll": "F1KBNa_diffPreviewScroll",
78
- "discussionDots": "F1KBNa_discussionDots",
79
57
  "vSpacer": "F1KBNa_vSpacer",
80
- "splitCols": "F1KBNa_splitCols",
81
- "colorSvCursor": "F1KBNa_colorSvCursor",
82
- "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
83
- "diffHeader": "F1KBNa_diffHeader",
84
- "actionError": "F1KBNa_actionError",
85
- "colorHueCursor": "F1KBNa_colorHueCursor",
86
- "fileListFloatClosing": "F1KBNa_fileListFloatClosing",
87
- "mdPreviewBody": "F1KBNa_mdPreviewBody",
88
- "badgeLabel": "F1KBNa_badgeLabel",
89
- "wrap": "F1KBNa_wrap",
90
- "kindHint": "F1KBNa_kindHint",
91
- "searchToggleOn": "F1KBNa_searchToggleOn",
92
- "splitHScroll": "F1KBNa_splitHScroll",
93
- "panel": "F1KBNa_panel",
94
- "detailEmpty": "F1KBNa_detailEmpty",
58
+ "subline": "F1KBNa_subline",
59
+ "chipLabel": "F1KBNa_chipLabel",
60
+ "discussionRow": "F1KBNa_discussionRow",
61
+ "diff": "F1KBNa_diff",
62
+ "pickerInput": "F1KBNa_pickerInput",
63
+ "stepperButtonUp": "F1KBNa_stepperButtonUp",
64
+ "quoteDel": "F1KBNa_quoteDel",
65
+ "colorBackdrop": "F1KBNa_colorBackdrop",
66
+ "intraAdd": "F1KBNa_intraAdd",
67
+ "mirrored": "F1KBNa_mirrored",
95
68
  "searchToggle": "F1KBNa_searchToggle",
96
- "headerActions": "F1KBNa_headerActions",
97
- "notice": "F1KBNa_notice",
98
- "quoteNoWrap": "F1KBNa_quoteNoWrap",
99
- "pickerCheck": "F1KBNa_pickerCheck",
100
- "intraDel": "F1KBNa_intraDel",
101
- "quoteLine": "F1KBNa_quoteLine",
102
- "splitLdel": "F1KBNa_splitLdel",
103
- "searchCount": "F1KBNa_searchCount",
104
- "footerButtons": "F1KBNa_footerButtons",
105
- "confirmCard": "F1KBNa_confirmCard",
106
- "discussionUser": "F1KBNa_discussionUser",
107
- "noteCentered": "F1KBNa_noteCentered",
108
- "discussionInput": "F1KBNa_discussionInput",
109
- "fileListFloat": "F1KBNa_fileListFloat",
110
- "mdPreviewContent": "F1KBNa_mdPreviewContent",
111
- "diffFlashShake": "F1KBNa_diffFlashShake",
112
- "title": "F1KBNa_title",
69
+ "searchMatch": "F1KBNa_searchMatch",
70
+ "coverNotice": "F1KBNa_coverNotice",
71
+ "listScroll": "F1KBNa_listScroll",
72
+ "close": "F1KBNa_close",
113
73
  "diffFlashFade": "F1KBNa_diffFlashFade",
74
+ "actionError": "F1KBNa_actionError",
75
+ "del": "F1KBNa_del",
114
76
  "layer": "F1KBNa_layer",
115
- "bulkActions": "F1KBNa_bulkActions",
116
- "presentationHost": "F1KBNa_presentationHost",
117
- "mdPreviewFallback": "F1KBNa_mdPreviewFallback",
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",
118
84
  "treeNote": "F1KBNa_treeNote",
119
- "discussionHead": "F1KBNa_discussionHead",
120
- "headerEntryCount": "F1KBNa_headerEntryCount",
121
- "chipLabel": "F1KBNa_chipLabel",
122
- "header": "F1KBNa_header",
123
- "discussionCell": "F1KBNa_discussionCell",
124
- "confirmActions": "F1KBNa_confirmActions",
125
- "lines": "F1KBNa_lines",
126
- "rail": "F1KBNa_rail",
127
- "colorPickerPanel": "F1KBNa_colorPickerPanel",
128
- "settingsGroup": "F1KBNa_settingsGroup",
129
- "rowMeta": "F1KBNa_rowMeta",
130
- "badgeCount": "F1KBNa_badgeCount",
131
- "pickerClose": "F1KBNa_pickerClose",
132
- "hint": "F1KBNa_hint",
133
- "splitDivider": "F1KBNa_splitDivider",
134
- "close": "F1KBNa_close",
135
- "settingsReset": "F1KBNa_settingsReset",
136
- "coverBackdrop": "F1KBNa_coverBackdrop",
137
- "kindTag": "F1KBNa_kindTag",
138
- "stepper": "F1KBNa_stepper",
139
- "stepperButton": "F1KBNa_stepperButton",
140
85
  "note": "F1KBNa_note",
141
- "discussionBody": "F1KBNa_discussionBody",
142
- "gutter": "F1KBNa_gutter",
143
- "add": "F1KBNa_add",
144
- "colorPickerPreview": "F1KBNa_colorPickerPreview",
145
- "pickerInput": "F1KBNa_pickerInput",
146
- "markerDel": "F1KBNa_markerDel",
147
- "addCount": "F1KBNa_addCount",
148
- "colorSv": "F1KBNa_colorSv",
149
- "diffPreview": "F1KBNa_diffPreview",
150
- "discussionRow": "F1KBNa_discussionRow",
151
- "markerAdd": "F1KBNa_markerAdd",
86
+ "splitRoot": "F1KBNa_splitRoot",
87
+ "colorSvCursor": "F1KBNa_colorSvCursor",
88
+ "colorHueCursor": "F1KBNa_colorHueCursor",
89
+ "settingsRowDesc": "F1KBNa_settingsRowDesc",
152
90
  "fileList": "F1KBNa_fileList",
153
- "coverNoticeCard": "F1KBNa_coverNoticeCard",
154
- "colorPickerInput": "F1KBNa_colorPickerInput",
155
- "treeRow": "F1KBNa_treeRow",
91
+ "rowMenuAnchor": "F1KBNa_rowMenuAnchor",
92
+ "pickerNote": "F1KBNa_pickerNote",
93
+ "quoteLines": "F1KBNa_quoteLines",
94
+ "mdPreviewContent": "F1KBNa_mdPreviewContent",
95
+ "coverNoticeFade": "F1KBNa_coverNoticeFade",
96
+ "badgeLabel": "F1KBNa_badgeLabel",
97
+ "settingsGroupTitle": "F1KBNa_settingsGroupTitle",
98
+ "split": "F1KBNa_split",
99
+ "langLabel": "F1KBNa_langLabel",
100
+ "fileListFloat": "F1KBNa_fileListFloat",
101
+ "addButton": "F1KBNa_addButton",
156
102
  "searchMatchCurrent": "F1KBNa_searchMatchCurrent",
157
- "discussionDot": "F1KBNa_discussionDot",
158
- "coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
159
- "row": "F1KBNa_row",
160
- "discussionSend": "F1KBNa_discussionSend",
161
- "flexSpacer": "F1KBNa_flexSpacer",
162
- "settingsGroupText": "F1KBNa_settingsGroupText",
163
- "panelFailureRetry": "F1KBNa_panelFailureRetry",
164
- "discussionCompose": "F1KBNa_discussionCompose",
165
- "blockFlashShake": "F1KBNa_blockFlashShake",
166
- "diffActions": "F1KBNa_diffActions",
167
- "splitRdel": "F1KBNa_splitRdel",
168
103
  "importNote": "F1KBNa_importNote",
104
+ "discussionNote": "F1KBNa_discussionNote",
105
+ "states": "F1KBNa_states",
169
106
  "settingsRowText": "F1KBNa_settingsRowText",
170
- "toggleOn": "F1KBNa_toggleOn",
171
- "divider": "F1KBNa_divider",
172
- "diffBodyWrap": "F1KBNa_diffBodyWrap",
173
- "coverHost": "F1KBNa_coverHost",
174
- "action": "F1KBNa_action",
175
- "context": "F1KBNa_context",
176
- "pickerIcon": "F1KBNa_pickerIcon",
177
- "diffBody": "F1KBNa_diffBody",
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",
178
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",
179
136
  "rowFailed": "F1KBNa_rowFailed",
180
137
  "settingsPage": "F1KBNa_settingsPage",
181
- "colorValue": "F1KBNa_colorValue",
182
- "discussionNote": "F1KBNa_discussionNote",
138
+ "discussionUser": "F1KBNa_discussionUser",
139
+ "header": "F1KBNa_header",
183
140
  "detail": "F1KBNa_detail",
184
- "coverNoticeText": "F1KBNa_coverNoticeText",
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",
152
+ "footerButtons": "F1KBNa_footerButtons",
185
153
  "pickerForm": "F1KBNa_pickerForm",
186
- "del": "F1KBNa_del",
187
- "splitLadd": "F1KBNa_splitLadd",
188
- "pickerTitle": "F1KBNa_pickerTitle",
189
- "toggleThumb": "F1KBNa_toggleThumb",
190
- "pickerName": "F1KBNa_pickerName",
191
- "code": "F1KBNa_code",
192
- "statusAction": "F1KBNa_statusAction",
193
- "confirmBackdrop": "F1KBNa_confirmBackdrop",
194
- "overviewMarker": "F1KBNa_overviewMarker",
195
- "mdPreviewWrap": "F1KBNa_mdPreviewWrap",
196
- "splitCol": "F1KBNa_splitCol",
197
- "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
198
- "rows": "F1KBNa_rows",
199
- "chip": "F1KBNa_chip",
200
- "groupHead": "F1KBNa_groupHead",
154
+ "panel": "F1KBNa_panel",
155
+ "panelDocked": "F1KBNa_panelDocked",
156
+ "noticeButton": "F1KBNa_noticeButton",
157
+ "gutter": "F1KBNa_gutter",
158
+ "mdPreviewBody": "F1KBNa_mdPreviewBody",
159
+ "title": "F1KBNa_title",
160
+ "coverPopover": "F1KBNa_coverPopover",
161
+ "presentationSelect": "F1KBNa_presentationSelect",
162
+ "colorPickerInputRow": "F1KBNa_colorPickerInputRow",
163
+ "action": "F1KBNa_action",
164
+ "floatResizeHandle": "F1KBNa_floatResizeHandle",
165
+ "actionPrimary": "F1KBNa_actionPrimary",
201
166
  "colorHue": "F1KBNa_colorHue",
202
- "splitRoot": "F1KBNa_splitRoot",
203
- "group": "F1KBNa_group",
204
- "discussionOutdated": "F1KBNa_discussionOutdated",
205
- "colorPickerPopover": "F1KBNa_colorPickerPopover",
206
- "searchBar": "F1KBNa_searchBar",
207
- "discussionAnswer": "F1KBNa_discussionAnswer",
208
- "quoteText": "F1KBNa_quoteText",
209
- "mdPreviewDouble": "F1KBNa_mdPreviewDouble",
210
- "readError": "F1KBNa_readError",
211
- "missing": "F1KBNa_missing",
212
- "actionChord": "F1KBNa_actionChord",
213
- "headerEntry": "F1KBNa_headerEntry",
214
- "statusBar": "F1KBNa_statusBar",
215
- "panelFailureText": "F1KBNa_panelFailureText",
216
- "diffStats": "F1KBNa_diffStats",
217
- "langSelect": "F1KBNa_langSelect",
218
- "rowDiscussed": "F1KBNa_rowDiscussed",
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",
219
176
  "noticeText": "F1KBNa_noticeText",
220
- "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
221
- "diff": "F1KBNa_diff",
222
- "coverNoticeFade": "F1KBNa_coverNoticeFade",
223
- "actionPrimary": "F1KBNa_actionPrimary",
224
- "chipPresentation": "F1KBNa_chipPresentation",
225
- "diffBodySplit": "F1KBNa_diffBodySplit",
226
- "colorPickerChevron": "F1KBNa_colorPickerChevron",
227
- "toggle": "F1KBNa_toggle",
228
- "fileListShrink": "F1KBNa_fileListShrink",
229
- "pickerCard": "F1KBNa_pickerCard",
230
- "split": "F1KBNa_split",
231
- "discussionRange": "F1KBNa_discussionRange",
232
- "presentationSelect": "F1KBNa_presentationSelect",
233
- "delCount": "F1KBNa_delCount",
234
- "addButton": "F1KBNa_addButton",
177
+ "searchBar": "F1KBNa_searchBar",
235
178
  "treeCaret": "F1KBNa_treeCaret",
236
- "quoteLines": "F1KBNa_quoteLines",
237
- "floatResizeHandle": "F1KBNa_floatResizeHandle",
179
+ "splitRdel": "F1KBNa_splitRdel",
180
+ "fileListKnob": "F1KBNa_fileListKnob",
181
+ "quoteCode": "F1KBNa_quoteCode",
182
+ "delCount": "F1KBNa_delCount",
183
+ "diffBodySplit": "F1KBNa_diffBodySplit",
238
184
  "settingsRow": "F1KBNa_settingsRow",
239
- "missingHint": "F1KBNa_missingHint",
240
- "mirrored": "F1KBNa_mirrored",
241
- "rowPath": "F1KBNa_rowPath",
242
- "splitHScrollRow": "F1KBNa_splitHScrollRow",
243
- "listScroll": "F1KBNa_listScroll",
244
- "splitHScrollFill": "F1KBNa_splitHScrollFill",
245
- "settingsSelector": "F1KBNa_settingsSelector",
185
+ "discussionCell": "F1KBNa_discussionCell",
186
+ "splitLadd": "F1KBNa_splitLadd",
187
+ "dockHost": "F1KBNa_dockHost",
188
+ "colorPicker": "F1KBNa_colorPicker",
189
+ "emptyState": "F1KBNa_emptyState",
190
+ "rail": "F1KBNa_rail",
191
+ "importButton": "F1KBNa_importButton",
192
+ "quoteLine": "F1KBNa_quoteLine",
193
+ "coverButton": "F1KBNa_coverButton",
194
+ "colorPickerTrigger": "F1KBNa_colorPickerTrigger",
195
+ "divergedHint": "F1KBNa_divergedHint",
196
+ "quoteNoWrap": "F1KBNa_quoteNoWrap",
197
+ "statusBar": "F1KBNa_statusBar",
198
+ "kindHint": "F1KBNa_kindHint",
199
+ "wrap": "F1KBNa_wrap",
200
+ "stepper": "F1KBNa_stepper",
201
+ "discussionHead": "F1KBNa_discussionHead",
202
+ "wrapActive": "F1KBNa_wrapActive",
203
+ "diffActions": "F1KBNa_diffActions",
204
+ "resizeHandle": "F1KBNa_resizeHandle",
205
+ "toggle": "F1KBNa_toggle",
206
+ "chipPresentation": "F1KBNa_chipPresentation",
207
+ "quoteAdd": "F1KBNa_quoteAdd",
208
+ "panelFailureText": "F1KBNa_panelFailureText",
209
+ "notice": "F1KBNa_notice",
210
+ "blockActionsDivider": "F1KBNa_blockActionsDivider",
211
+ "chip": "F1KBNa_chip",
212
+ "panelFailureRetry": "F1KBNa_panelFailureRetry",
246
213
  "settingsGroupBody": "F1KBNa_settingsGroupBody",
247
- "subline": "F1KBNa_subline",
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",
248
221
  "rowHead": "F1KBNa_rowHead",
249
- "fileListKnobIn": "F1KBNa_fileListKnobIn",
250
- "discussionToggle": "F1KBNa_discussionToggle",
222
+ "discussionCode": "F1KBNa_discussionCode",
223
+ "settingsGroupDesc": "F1KBNa_settingsGroupDesc",
224
+ "colorSv": "F1KBNa_colorSv",
225
+ "treeRow": "F1KBNa_treeRow",
226
+ "pickerIcon": "F1KBNa_pickerIcon",
227
+ "coverBackdrop": "F1KBNa_coverBackdrop",
228
+ "diffStats": "F1KBNa_diffStats",
229
+ "coverHost": "F1KBNa_coverHost",
230
+ "expandExpanded": "F1KBNa_expandExpanded",
231
+ "groupHead": "F1KBNa_groupHead",
232
+ "discussionPin": "F1KBNa_discussionPin",
233
+ "discussionOutdated": "F1KBNa_discussionOutdated",
234
+ "discussionRange": "F1KBNa_discussionRange",
235
+ "markerDel": "F1KBNa_markerDel",
251
236
  "splitRadd": "F1KBNa_splitRadd",
252
- "colorBackdrop": "F1KBNa_colorBackdrop",
253
- "colorSwatch": "F1KBNa_colorSwatch",
254
- "searchMatch": "F1KBNa_searchMatch",
255
- "langLabel": "F1KBNa_langLabel",
256
- "diffPreviewTitle": "F1KBNa_diffPreviewTitle",
237
+ "colorPickerChevron": "F1KBNa_colorPickerChevron",
238
+ "settingsGroupHeader": "F1KBNa_settingsGroupHeader",
239
+ "tree": "F1KBNa_tree",
240
+ "flexSpacer": "F1KBNa_flexSpacer",
241
+ "actionChord": "F1KBNa_actionChord",
242
+ "blockFlash": "F1KBNa_blockFlash",
243
+ "treeName": "F1KBNa_treeName",
244
+ "colorPickerPreview": "F1KBNa_colorPickerPreview",
245
+ "quoteText": "F1KBNa_quoteText",
257
246
  "settingsRowTitle": "F1KBNa_settingsRowTitle",
258
- "divergedHint": "F1KBNa_divergedHint",
259
- "blockActions": "F1KBNa_blockActions"
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",
255
+ "mdPreviewSingle": "F1KBNa_mdPreviewSingle",
256
+ "divider": "F1KBNa_divider",
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.
@@ -19816,6 +19902,23 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19816
19902
  if (out.length > 1 && out[out.length - 1] === "") out.pop();
19817
19903
  return out;
19818
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
+ }
19819
19922
  /** Resolve the code cell's computed font for canvas measurement. */
19820
19923
  function codeFontOf() {
19821
19924
  const code = document.querySelector("[data-diff-code]");
@@ -19853,6 +19956,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
19853
19956
  * `.discussionUser`): its own 0.5 per side, and no margin outside it, so the fill is
19854
19957
  * flush with the thread's right column and this is what comes off the wrap width. */
19855
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;
19856
19975
  /** Rows rendered beyond the visible window in each direction. */
19857
19976
  const OVERSCAN_ROWS = 8;
19858
19977
  /** The identity a file with no discussions shares, so memos stay stable. */
@@ -20058,7 +20177,28 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20058
20177
  * @param props.wrap - the code view's wrap setting: off, the quote is one line per quoted line,
20059
20178
  * as the file renders it.
20060
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
+ }
20061
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}` : "";
20062
20202
  const rows = (0, react.useMemo)(() => {
20063
20203
  const texts = quote.split("\n");
20064
20204
  const runs = highlightWindow(texts, lang, 0, texts.length)?.runs;
@@ -20084,7 +20224,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20084
20224
  className: `${PendingPanel_module_css_default.quoteLines}${wrap ? "" : " " + PendingPanel_module_css_default.quoteNoWrap}`,
20085
20225
  "data-diff-discussion-quote": true,
20086
20226
  children: rows.map((row, index) => (0, react_jsx_runtime.jsxs)("div", {
20087
- 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,
20088
20229
  children: [
20089
20230
  (0, react_jsx_runtime.jsx)("span", {
20090
20231
  className: PendingPanel_module_css_default.gutter,
@@ -20328,6 +20469,13 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
20328
20469
  ]
20329
20470
  });
20330
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
+ }
20331
20479
  /** Whether a block keep/revert range covers the file's entire change region, so
20332
20480
  * applying it leaves the file with no pending diff — the "remove or keep in
20333
20481
  * list" prompt applies. This generalises the single-block case to a selection
@@ -21364,10 +21512,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21364
21512
  return markers;
21365
21513
  }
21366
21514
  /** One row of the file list: the clickable head in the left pane. */
21367
- function PendingFileRow({ file, selected, failedMessage, t, onSelect }) {
21515
+ function PendingFileRow({ file, selected, failedMessage, t, onSelect, onMenu }) {
21368
21516
  const stats = (0, react.useMemo)(() => computeWholeFileDiff(file.oldText, file.newText), [file.oldText, file.newText]);
21369
21517
  return (0, react_jsx_runtime.jsx)("li", {
21370
21518
  className: PendingPanel_module_css_default.row,
21519
+ onContextMenu: (event) => {
21520
+ event.preventDefault();
21521
+ onMenu(event);
21522
+ },
21371
21523
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
21372
21524
  label: file.path,
21373
21525
  delayMs: 500,
@@ -21414,7 +21566,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
21414
21566
  });
21415
21567
  }
21416
21568
  /** The selected file's diff, actions, jump controls, and copy toolbar. */
21417
- 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);
21418
21572
  const [langOverride, setLangOverride] = (0, react.useState)(void 0);
21419
21573
  const [langMenuOpen, setLangMenuOpen] = (0, react.useState)(false);
21420
21574
  const langMenuItems = (0, react.useMemo)(() => [{
@@ -22171,13 +22325,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22171
22325
  const lines = text.split("\n");
22172
22326
  const bubble = role === "user";
22173
22327
  const chrome = bubble ? 1 : 0;
22174
- const measure = makeMeasurer(codeFontOf());
22328
+ const measure = makeMeasurer(threadFontOf());
22175
22329
  if (measure === void 0 || bodyWidth === 0) return lines.length + chrome;
22176
22330
  const body = Math.max(0, bodyWidth - discussionRightInsetPx - 3 - 24);
22177
- 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");
22178
22332
  if (wrapping <= 0) return lines.length + chrome;
22179
22333
  const tabPx = tabWidthSpaces * measure(" ");
22180
- 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);
22181
22339
  }, [
22182
22340
  bodyWidth,
22183
22341
  tabWidthSpaces,
@@ -22195,24 +22353,31 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22195
22353
  */
22196
22354
  const quoteRowsOf = (0, react.useCallback)((quote, wrap) => {
22197
22355
  if (!wrap) return quote.split("\n").length;
22356
+ const lines = quote.split("\n");
22357
+ const measure = makeMeasurer(codeFontOf());
22198
22358
  const width = Math.max(0, bodyWidth - discussionRightInsetPx) - WRAP_GUTTERS_PX;
22199
- 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);
22200
22364
  }, [
22201
22365
  bodyWidth,
22202
22366
  discussionRightInsetPx,
22203
- messageRowsOf
22367
+ tabWidthSpaces
22204
22368
  ]);
22205
22369
  /**
22206
22370
  * The size one rendered message needs in code rows: its wrapped lines plus its own
22207
22371
  * padding — which for a bubble is exactly one row (half a row above, half below).
22208
22372
  * Every turn is therefore a whole number of rows and the thread stays on the code's
22209
- * 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.
22210
22375
  *
22211
22376
  * @param message - the message to size.
22212
22377
  * @returns its size in code rows.
22213
22378
  */
22214
22379
  const messageSizeOf = (0, react.useCallback)((message) => {
22215
- return messageRowsOf(discussionText(message), message.role);
22380
+ return messageRowsOf(discussionPlainText(discussionText(message)), message.role);
22216
22381
  }, [messageRowsOf]);
22217
22382
  /**
22218
22383
  * The thread as the block will render it, plus the body height that follows from
@@ -22223,24 +22388,26 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22223
22388
  * @param discussion - the block to lay out.
22224
22389
  * @returns the messages to render, the hidden count, and the body height.
22225
22390
  */
22391
+ const roundLimit = discussionRoundLimit();
22226
22392
  const layoutDiscussion = (0, react.useCallback)((discussion) => {
22227
22393
  const answer = discussion.reply === void 0 ? void 0 : stripBlankLines(discussion.reply);
22228
22394
  const stoppedNote = discussion.stopped === true && (answer === void 0 || answer === "") && discussion.failed !== true;
22229
- 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({
22230
22396
  role: "assistant",
22231
22397
  text: answer
22232
22398
  }) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0));
22233
- const tailCap = 12 - trailing;
22234
- const tail = discussionTail(discussion.messages, messageSizeOf, Math.max(1, tailCap));
22399
+ const tail = discussionRounds(discussion.messages, roundLimit, messageSizeOf);
22235
22400
  return {
22236
22401
  messages: tail.messages,
22237
22402
  hidden: tail.hidden,
22238
- rows: Math.ceil(tail.rows + trailing)
22403
+ rows: tail.rows + trailing
22239
22404
  };
22240
22405
  }, [
22241
22406
  langWrap,
22242
22407
  quoteRowsOf,
22243
- messageSizeOf
22408
+ messageSizeOf,
22409
+ roundLimit,
22410
+ ROW_HEIGHT_PX
22244
22411
  ]);
22245
22412
  /**
22246
22413
  * The discussions as the render will draw them: the body height the measurement
@@ -22296,7 +22463,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22296
22463
  const heights = wrapped === null ? new Array(rows.length).fill(ROW_HEIGHT_PX) : [...wrapped];
22297
22464
  for (const [after, extra] of discussionExtras) {
22298
22465
  const index = Math.max(0, Math.min(after, heights.length - 1));
22299
- heights[index] = (heights[index] ?? ROW_HEIGHT_PX) + extra * ROW_HEIGHT_PX;
22466
+ heights[index] = (heights[index] ?? ROW_HEIGHT_PX) + extra * THREAD_ROW_PX;
22300
22467
  }
22301
22468
  return heights;
22302
22469
  }, [
@@ -22597,13 +22764,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22597
22764
  if (startLine === void 0) return;
22598
22765
  const endLine = last?.newLine ?? last?.oldLine ?? startLine;
22599
22766
  const body = bodyRef.current;
22600
- 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;
22601
22768
  const id = `discussion-${Date.now().toString(36)}-${discussions.length}`;
22602
22769
  const quoted = model.diff.rows.slice(selection.start, selection.end + 1);
22603
22770
  const quote = quoted.map((row) => row.text).join("\n");
22604
22771
  const quoteLines = quoted.map((row) => ({
22605
22772
  old: row.oldLine,
22606
- new: row.newLine
22773
+ new: row.newLine,
22774
+ kind: row.kind
22607
22775
  }));
22608
22776
  setDiscussions((current) => [...current, {
22609
22777
  id,
@@ -22637,7 +22805,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22637
22805
  if (discussion === void 0) return;
22638
22806
  const next = collapsed ?? !discussion.collapsed;
22639
22807
  if (next === discussion.collapsed) return;
22640
- const shift = ((next ? 1 : discussionRows(discussion)) - discussionRows(discussion)) * ROW_HEIGHT_PX;
22808
+ const shift = ((next ? 1 : discussionRows(discussion)) - discussionRows(discussion)) * THREAD_ROW_PX;
22641
22809
  const body = bodyRef.current;
22642
22810
  if (body !== null && offsetOf(discussion.anchor.start) - body.scrollTop < 0) pendingScrollShiftRef.current += shift;
22643
22811
  setDiscussions((current) => current.map((entry) => entry.id === id ? {
@@ -22663,7 +22831,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22663
22831
  */
22664
22832
  const sendDiscussion = (id) => {
22665
22833
  const discussion = discussions.find((entry) => entry.id === id);
22666
- if (discussion === void 0 || discussion.lost === true) return;
22834
+ if (discussion === void 0) return;
22667
22835
  const text = discussion.draft.trim();
22668
22836
  if (text === "") return;
22669
22837
  const reference = `(${discussionLineRange(discussion.anchor)})`;
@@ -22705,7 +22873,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22705
22873
  const removeDiscussion = (id) => {
22706
22874
  const discussion = discussions.find((entry) => entry.id === id);
22707
22875
  if (discussion === void 0) return;
22708
- const shift = discussionRows(discussion) * ROW_HEIGHT_PX * -1;
22876
+ const shift = discussionRows(discussion) * THREAD_ROW_PX * -1;
22709
22877
  const body = bodyRef.current;
22710
22878
  if (body !== null && offsetOf(discussion.anchor.start) - body.scrollTop < 0) pendingScrollShiftRef.current += shift;
22711
22879
  setDiscussions((current) => current.filter((entry) => entry.id !== id));
@@ -22946,9 +23114,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
22946
23114
  }
22947
23115
  return found;
22948
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
+ }, []);
22949
23121
  const onScroll = () => {
22950
23122
  const body = bodyRef.current;
22951
23123
  if (body === null) return;
23124
+ syncQuoteScroll(body);
22952
23125
  setScrollTop(body.scrollTop);
22953
23126
  setViewportHeight(body.clientHeight);
22954
23127
  const count = model.blocks.length;
@@ -23364,6 +23537,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23364
23537
  maxScroll,
23365
23538
  viewportHeight
23366
23539
  ]);
23540
+ (0, react.useLayoutEffect)(() => {
23541
+ syncQuoteScroll(bodyRef.current);
23542
+ });
23367
23543
  return (0, react_jsx_runtime.jsxs)("div", {
23368
23544
  className: PendingPanel_module_css_default.diff,
23369
23545
  "data-diff-approval-diff": true,
@@ -23373,9 +23549,37 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23373
23549
  className: PendingPanel_module_css_default.diffHeader,
23374
23550
  "data-diff-toolbar": true,
23375
23551
  children: [
23376
- (0, react_jsx_runtime.jsx)("span", {
23552
+ (0, react_jsx_runtime.jsx)("input", {
23377
23553
  className: PendingPanel_module_css_default.diffPath,
23378
- 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
+ }
23379
23583
  }),
23380
23584
  (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
23381
23585
  label: t("action.openFile"),
@@ -23511,7 +23715,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23511
23715
  })
23512
23716
  }),
23513
23717
  (0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
23514
- (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", {
23515
23728
  type: "button",
23516
23729
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.actionQuietDisabled}`,
23517
23730
  "data-diff-keep": true,
@@ -23520,8 +23733,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23520
23733
  onKeep(file.sessionId, file.id);
23521
23734
  },
23522
23735
  children: t("action.keep")
23523
- }),
23524
- (0, react_jsx_runtime.jsx)("button", {
23736
+ }), (0, react_jsx_runtime.jsx)("button", {
23525
23737
  type: "button",
23526
23738
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionQuietDisabled}`,
23527
23739
  "data-diff-revert": true,
@@ -23530,7 +23742,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23530
23742
  onRevert(file.sessionId, file.id);
23531
23743
  },
23532
23744
  children: file.kind === "create" ? t("action.delete") : t("action.revert")
23533
- })
23745
+ })] })
23534
23746
  ]
23535
23747
  }),
23536
23748
  failedMessage !== void 0 && (0, react_jsx_runtime.jsx)("p", {
@@ -23718,7 +23930,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23718
23930
  ref: bodyRef,
23719
23931
  tabIndex: 0,
23720
23932
  onScroll,
23721
- style: { tabSize: tabWidthSpaces },
23933
+ style: {
23934
+ tabSize: tabWidthSpaces,
23935
+ "--dsh-diff-quote-width": `${widestLine}ch`
23936
+ },
23722
23937
  "data-diff-body": true,
23723
23938
  children: (0, react_jsx_runtime.jsxs)("div", {
23724
23939
  className: `${PendingPanel_module_css_default.lines}${langWrap ? " " + PendingPanel_module_css_default.wrap : ""}`,
@@ -23752,7 +23967,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23752
23967
  return (0, react_jsx_runtime.jsxs)("div", {
23753
23968
  className: PendingPanel_module_css_default.discussionRow,
23754
23969
  "data-diff-discussion-space": rows,
23755
- style: { height: rows * ROW_HEIGHT_PX },
23970
+ style: { height: rows * THREAD_ROW_PX },
23756
23971
  children: [
23757
23972
  (0, react_jsx_runtime.jsx)("div", {
23758
23973
  className: PendingPanel_module_css_default.gutter,
@@ -23773,7 +23988,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23773
23988
  "data-lost": discussion.lost === true ? "" : void 0,
23774
23989
  style: {
23775
23990
  width: Math.max(0, bodyWidth - discussionRightInsetPx),
23776
- height: rows * ROW_HEIGHT_PX
23991
+ height: rows * THREAD_ROW_PX
23777
23992
  },
23778
23993
  children: [(0, react_jsx_runtime.jsxs)("div", {
23779
23994
  className: PendingPanel_module_css_default.discussionHead,
@@ -23853,16 +24068,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23853
24068
  discussion.messages.map((message, index) => message.role === "user" ? (0, react_jsx_runtime.jsx)("p", {
23854
24069
  className: PendingPanel_module_css_default.discussionUser,
23855
24070
  "data-diff-discussion-user": true,
23856
- children: message.text
24071
+ children: discussionNodes(message.text)
23857
24072
  }, `u${index}`) : (0, react_jsx_runtime.jsx)("p", {
23858
24073
  className: PendingPanel_module_css_default.discussionAnswer,
23859
24074
  "data-diff-discussion-reply": true,
23860
- children: message.text
24075
+ children: discussionNodes(message.text)
23861
24076
  }, `a${index}`)),
23862
24077
  discussion.reply !== void 0 && discussion.reply !== "" ? (0, react_jsx_runtime.jsx)("p", {
23863
24078
  className: PendingPanel_module_css_default.discussionAnswer,
23864
24079
  "data-diff-discussion-reply": true,
23865
- children: discussion.reply
24080
+ children: discussionNodes(discussion.reply)
23866
24081
  }) : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
23867
24082
  className: PendingPanel_module_css_default.discussionNote,
23868
24083
  "data-diff-discussion-failed": true,
@@ -23885,13 +24100,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23885
24100
  children: [(0, react_jsx_runtime.jsx)("input", {
23886
24101
  className: PendingPanel_module_css_default.discussionInput,
23887
24102
  "data-diff-discussion-input": true,
23888
- disabled: discussion.lost === true,
23889
24103
  ref: (element) => {
23890
24104
  if (element === null) discussionInputEls.current.delete(discussion.id);
23891
24105
  else discussionInputEls.current.set(discussion.id, element);
23892
24106
  },
23893
24107
  value: discussion.draft,
23894
- placeholder: t(discussion.lost === true ? "discussion.placeholderOutdated" : "discussion.placeholder"),
24108
+ placeholder: t("discussion.placeholder"),
23895
24109
  onChange: (event) => {
23896
24110
  const value = event.target.value;
23897
24111
  setDiscussions((current) => current.map((entry) => entry.id === discussion.id ? {
@@ -23909,7 +24123,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
23909
24123
  type: "button",
23910
24124
  className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.discussionSend}`,
23911
24125
  "data-diff-discussion-send": true,
23912
- disabled: discussion.lost === true,
23913
24126
  onClick: () => {
23914
24127
  sendDiscussion(discussion.id);
23915
24128
  },
@@ -24196,6 +24409,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24196
24409
  const [open, setOpen] = (0, react.useState)(false);
24197
24410
  const [selected, setSelected] = (0, react.useState)("");
24198
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
+ /**
24199
24418
  * Where the diff should land for the file it is about to show, and a nonce so a
24200
24419
  * repeated request for the *same* file lands again. `top` carries the offset the
24201
24420
  * reader was left at when the panel resumes a view (see `panel-memory`); it is
@@ -24284,6 +24503,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24284
24503
  * choice rides the same block RPC as its `removeWhenResolved` flag. */
24285
24504
  const [blockPrompt, setBlockPrompt] = (0, react.useState)(null);
24286
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);
24287
24508
  /** Whether the add-path dialog is open. One dialog covers both shapes: what
24288
24509
  * the browser settles on decides whether a file or a directory is added. */
24289
24510
  const [addOpen, setAddOpen] = (0, react.useState)(false);
@@ -24631,19 +24852,23 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24631
24852
  if (!showing) return;
24632
24853
  if (started) startListOpenRef.current = true;
24633
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);
24634
24857
  const keep = selected !== "" && pending(selected) ? selected : void 0;
24635
24858
  const remembered = keep === void 0 && started ? lastPanelFile(current) : void 0;
24636
24859
  const resumed = remembered !== void 0 && pending(remembered) ? remembered : void 0;
24637
- const pick = keep ?? resumed ?? files[0]?.id;
24860
+ const pick = typed ?? keep ?? resumed ?? files[0]?.id;
24638
24861
  if (pick === void 0) return;
24639
24862
  if (pick !== selected) setSelected(pick);
24640
24863
  if (started) landOn(pick, panelFileOffset(current, pick));
24864
+ else if (typed !== void 0) landOn(pick);
24641
24865
  }, [
24642
24866
  open,
24643
24867
  docked,
24644
24868
  current,
24645
24869
  files,
24646
- selected
24870
+ selected,
24871
+ pendingSelect
24647
24872
  ]);
24648
24873
  const runImportVcs = async () => {
24649
24874
  if (current === void 0 || importBusy) return;
@@ -24831,6 +25056,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24831
25056
  setAddOpen(false);
24832
25057
  setBlockPrompt(null);
24833
25058
  setFilePrompt(null);
25059
+ setRowMenu(null);
24834
25060
  }, [open]);
24835
25061
  /** Run the same decision over every current-session file, sequentially. */
24836
25062
  const runBulk = async (kind) => {
@@ -24877,11 +25103,35 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24877
25103
  }
24878
25104
  showCopyToast(t("panel.fileNotPending"));
24879
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
+ };
24880
25123
  const renderEntry = (entry) => (0, react_jsx_runtime.jsx)(PendingFileRow, {
24881
25124
  file: entry,
24882
25125
  selected: selected === entry.id,
24883
25126
  failedMessage: failed.get(entry.id),
24884
25127
  t,
25128
+ onMenu: (event) => {
25129
+ setRowMenu({
25130
+ file: entry,
25131
+ x: event.clientX,
25132
+ y: event.clientY
25133
+ });
25134
+ },
24885
25135
  onSelect: (id) => {
24886
25136
  if (id === selected) setJumpSignal((signal) => signal + 1);
24887
25137
  else {
@@ -24890,6 +25140,30 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
24890
25140
  }
24891
25141
  }
24892
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
+ };
24893
25167
  const selectedFile = files.find((file) => file.id === selected);
24894
25168
  /**
24895
25169
  * The folded card's own box, derived from the measured one, or undefined while
@@ -25122,6 +25396,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25122
25396
  const onKeyDown = (event) => {
25123
25397
  if (event.key !== "Escape") return;
25124
25398
  if (pathPickerOpen()) return;
25399
+ if (event.target instanceof Element && event.target.closest("[data-diff-path-input]") !== null) return;
25125
25400
  if (document.querySelector("[data-diff-approval-cover-popover]") !== null) return;
25126
25401
  const target = event.target;
25127
25402
  if (target instanceof Node && panelRef.current?.contains(target) === true && document.querySelector("[data-diff-searchbar]") !== null) return;
@@ -25359,6 +25634,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25359
25634
  watchChat,
25360
25635
  onToast: showCopyToast,
25361
25636
  t,
25637
+ onAddTypedPath: addTypedPath,
25362
25638
  onKeep: keepWithPrompt,
25363
25639
  onRevert: revertWithPrompt,
25364
25640
  onRefreshVcs: (entry) => {
@@ -25465,6 +25741,18 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
25465
25741
  })]
25466
25742
  })
25467
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
+ }),
25468
25756
  addOpen && current !== void 0 && (0, react_jsx_runtime.jsx)(PathPicker, {
25469
25757
  rootPath: snapshot.workspacePath,
25470
25758
  onBrowse: (path) => onBrowse(current, path),
@@ -26151,6 +26439,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26151
26439
  function DiffApprovalSettingsTab({ t }) {
26152
26440
  const [pasteOnCopy, setPasteOnCopyState] = (0, react.useState)(pasteOnCopyEnabled);
26153
26441
  const [commentMode, setCommentModeState] = (0, react.useState)(commentModeEnabled);
26442
+ const [discussionRounds, setDiscussionRoundsState] = (0, react.useState)(discussionRoundLimit);
26154
26443
  const [includeUntracked, setIncludeUntrackedState] = (0, react.useState)(includeUntrackedEnabled);
26155
26444
  const [confirmFileRemove, setConfirmFileRemoveState] = (0, react.useState)(confirmFileRemoveEnabled);
26156
26445
  const [tab, setTabState] = (0, react.useState)(tabWidth);
@@ -26186,6 +26475,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26186
26475
  setPanelCover(value);
26187
26476
  };
26188
26477
  const [summon, setSummonState] = (0, react.useState)(quickSummonKey);
26478
+ const [commentOpen, setCommentOpen] = (0, react.useState)(false);
26189
26479
  const [keysOpen, setKeysOpen] = (0, react.useState)(false);
26190
26480
  const [keybindings, setKeybindingsState] = (0, react.useState)(() => {
26191
26481
  const initial = {};
@@ -26207,6 +26497,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26207
26497
  setPasteOnCopyState(value);
26208
26498
  setPasteOnCopyEnabled(value);
26209
26499
  };
26500
+ const setDiscussionRounds = (value) => {
26501
+ setDiscussionRoundsState(value);
26502
+ setDiscussionRoundLimit(value);
26503
+ };
26210
26504
  const setCommentMode = (value) => {
26211
26505
  setCommentModeState(value);
26212
26506
  setCommentModeEnabled(value);
@@ -26372,6 +26666,50 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26372
26666
  max: 10,
26373
26667
  dataAttribute: "data-diff-nav-lead-rows",
26374
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
26375
26713
  }),
26376
26714
  (0, react_jsx_runtime.jsx)(PreferenceRow, {
26377
26715
  title: t("panel.pasteOnCopy"),
@@ -26380,14 +26718,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26380
26718
  onSelect: setPasteOnCopy,
26381
26719
  dataAttribute: "data-diff-paste-on-copy-select",
26382
26720
  t
26383
- }),
26384
- (0, react_jsx_runtime.jsx)(PreferenceRow, {
26385
- title: t("panel.commentMode"),
26386
- description: t("panel.commentModeDesc"),
26387
- value: commentMode,
26388
- onSelect: setCommentMode,
26389
- dataAttribute: "data-diff-comment-mode-select",
26390
- t
26391
26721
  })
26392
26722
  ]
26393
26723
  })]
@@ -26593,11 +26923,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26593
26923
  path
26594
26924
  }));
26595
26925
  },
26596
- async addPath(sessionId, path, includeUnchanged) {
26926
+ async addPath(sessionId, path, includeUnchanged, exact) {
26597
26927
  return addValueOf(await rpc.call(DIFF_APPROVAL_CHANNEL, "add-path", {
26598
26928
  sessionId,
26599
26929
  path,
26600
- includeUnchanged
26930
+ includeUnchanged,
26931
+ ...exact === true ? { exact: true } : {}
26601
26932
  }));
26602
26933
  },
26603
26934
  async open(sessionId, id, action) {
@@ -26749,7 +27080,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26749
27080
  if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error("the add returned a malformed value");
26750
27081
  const record = value;
26751
27082
  const outcome = record.outcome;
26752
- 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");
26753
27084
  const added = record.added;
26754
27085
  const duplicates = record.duplicates;
26755
27086
  if (typeof added !== "number" || typeof duplicates !== "number") throw new Error("the add returned a malformed value");
@@ -26758,6 +27089,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
26758
27089
  outcome,
26759
27090
  added,
26760
27091
  duplicates,
27092
+ id: typeof record.id === "string" ? record.id : void 0,
26761
27093
  truncated: record.truncated === true ? true : void 0,
26762
27094
  message: typeof message === "string" && message.length > 0 ? message : void 0
26763
27095
  };
@@ -27048,8 +27380,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27048
27380
  browse(sessionId, path) {
27049
27381
  return port.browse(sessionId, path);
27050
27382
  },
27051
- async addPath(sessionId, path, includeUnchanged) {
27052
- 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);
27053
27385
  await this.refresh(sessionId);
27054
27386
  return value;
27055
27387
  },
@@ -27519,10 +27851,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27519
27851
  "panel.quickSummon": "快速呼出",
27520
27852
  "panel.commentMode": "评论模式",
27521
27853
  "panel.commentModeDesc": "选中差异行后可以直接就这几行向智能体提问,回答就显示在这几行下方。",
27854
+ "panel.discussionRounds": "评论里保留的对话轮数",
27855
+ "panel.discussionRoundsDesc": "一条评论里保留最近几轮(你问一句、Agent 答一句算一轮),更早的整轮省略。默认 2 轮,范围 1–10。",
27522
27856
  "panel.quickSummonDesc": "用键盘快捷键打开/关闭差异面板。点击右侧按钮后按下新的按键组合即可修改。",
27523
27857
  "panel.recordShortcut": "按下快捷键…",
27524
27858
  "settings.keybindings": "快捷键",
27525
27859
  "settings.keybindingsDesc": "展开后可配置各项操作的按键组合。",
27860
+ "settings.comment": "评论",
27861
+ "settings.commentDesc": "就选中的差异行向智能体提问:评论模式的开关,以及一条评论里保留多少对话。",
27526
27862
  "settings.diffView": "差异视图",
27527
27863
  "settings.diffViewDesc": "调整差异的显示效果(字号、行高、新增/删除颜色)与布局偏好。",
27528
27864
  "settings.diffPreview": "预览",
@@ -27549,7 +27885,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27549
27885
  "settings.tabLabel": "改动审批",
27550
27886
  "row.create": "新增",
27551
27887
  "row.failed": "失败",
27552
- "row.dismiss": "移除",
27888
+ "row.dismiss": "移出",
27553
27889
  "row.added": "+{added}",
27554
27890
  "row.removed": "-{removed}",
27555
27891
  "action.keep": "保留",
@@ -27558,7 +27894,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27558
27894
  "action.discussionExpand": "展开",
27559
27895
  "action.discussionCollapse": "收起",
27560
27896
  "discussion.placeholder": "写下你的评论…",
27561
- "discussion.placeholderOutdated": "代码已过期,无法继续评论",
27562
27897
  "discussion.marker": "[评论]",
27563
27898
  "discussion.promptRule": "(回答只针对这几行,不超过 3 行;行与行之间不要留空行;用纯文本,不要 Markdown 装饰;要求详细时不受长度限制。细则见 dsh-diff-approval-comment skill。)",
27564
27899
  "discussion.promptRuleSkill": "(这是一条代码批注:先加载 {skill} skill,按它的规则回答。)",
@@ -27575,6 +27910,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27575
27910
  "action.keepAll": "全部保留",
27576
27911
  "action.revertAll": "全部回退",
27577
27912
  "action.openFile": "打开文件",
27913
+ "action.pathField": "路径(回车打开)",
27578
27914
  "action.revealFile": "打开所在目录",
27579
27915
  "action.busy": "处理中…",
27580
27916
  "action.prevDiff": "上一处差异",
@@ -27640,8 +27976,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27640
27976
  "status.missing": "该改动已不存在",
27641
27977
  "panel.resolvedAsk": "「{file}」的所有改动都已处理,是否从列表移除?",
27642
27978
  "panel.keepInList": "保留在列表",
27643
- "panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移除?",
27644
- "panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移除?",
27979
+ "panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移出?",
27980
+ "panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移出?",
27645
27981
  "panel.confirmFileRemove": "处理整文件后询问是否移出列表",
27646
27982
  "panel.confirmFileRemoveDesc": "对单个文件执行整文件保留 / 回退后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响全部保留 / 全部回退)。",
27647
27983
  "action.refreshVcs": "刷新差异",
@@ -27723,10 +28059,14 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27723
28059
  "panel.quickSummon": "Quick summon",
27724
28060
  "panel.commentMode": "Comment mode",
27725
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.",
27726
28064
  "panel.quickSummonDesc": "Open or close the diff panel with a keyboard shortcut. Click the button and press a new chord to change it.",
27727
28065
  "panel.recordShortcut": "Press keys…",
27728
28066
  "settings.keybindings": "Shortcuts",
27729
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.",
27730
28070
  "settings.diffView": "Diff view",
27731
28071
  "settings.diffViewDesc": "Adjust the diff appearance (font size, line height, add/delete colors) and layout preferences.",
27732
28072
  "settings.diffPreview": "Preview",
@@ -27762,7 +28102,6 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27762
28102
  "action.discussionExpand": "Expand",
27763
28103
  "action.discussionCollapse": "Collapse",
27764
28104
  "discussion.placeholder": "Write your comment…",
27765
- "discussion.placeholderOutdated": "This code is outdated; commenting is off",
27766
28105
  "discussion.marker": "[Review]",
27767
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.)",
27768
28107
  "discussion.promptRuleSkill": "(This is a comment on a few diff lines: load the {skill} skill first and answer by its rules.)",
@@ -27779,6 +28118,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
27779
28118
  "action.keepAll": "Keep all",
27780
28119
  "action.revertAll": "Revert all",
27781
28120
  "action.openFile": "Open file",
28121
+ "action.pathField": "Path (Enter to open)",
27782
28122
  "action.revealFile": "Reveal in folder",
27783
28123
  "action.busy": "Working…",
27784
28124
  "action.prevDiff": "Previous diff",
@@ -28050,7 +28390,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
28050
28390
  onImportVcs: (sessionId, includeUntracked) => store.importVcs(sessionId, includeUntracked),
28051
28391
  onRefreshVcs: (sessionId, id, includeUntracked) => store.refreshVcs(sessionId, id, includeUntracked),
28052
28392
  onBrowse: (sessionId, path) => store.browse(sessionId, path),
28053
- onAddPath: (sessionId, path, includeUnchanged) => store.addPath(sessionId, path, includeUnchanged),
28393
+ onAddPath: (sessionId, path, includeUnchanged, exact) => store.addPath(sessionId, path, includeUnchanged, exact),
28054
28394
  onKeepAll: (sessionId) => store.keepAll(sessionId),
28055
28395
  onRevertAll: (sessionId) => store.revertAll(sessionId),
28056
28396
  onAckRedoCleared: () => store.clearRedoCleared(),