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