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