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