dsh-diff-approval 0.23.2 → 0.24.1
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 +588 -265
- package/lib/types/client/discussion.d.ts +62 -8
- package/lib/types/client/locales.d.ts +8 -2
- package/lib/types/client/panel-memory.d.ts +14 -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);border-radius:12px;flex-direction:column;display:flex;position:fixed;inset:8px 8px 128px;overflow:hidden}.F1KBNa_panelDocked{width:100%;max-width:none;height:100%;box-shadow:none;border:none;border-radius:0;position:static;inset:auto}.F1KBNa_dockHost{flex-direction:column;min-height:0;display:flex;position:absolute;inset:0}.F1KBNa_header{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.F1KBNa_headerActions{align-items:center;gap:2px;display:flex}.F1KBNa_settingsPage{padding:8px 12px}.F1KBNa_settingsGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupHeader{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsGroupText{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.F1KBNa_settingsGroupTitle{font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsGroupDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsGroupChevron{margin-left:auto;transition:transform .15s}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupChevron{transform:rotate(180deg)}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupHeader{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupBody{flex-direction:column;display:flex}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow{padding-left:16px}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow:last-child,.F1KBNa_settingsPage>.F1KBNa_settingsRow:last-child{border-bottom:none}.F1KBNa_settingsRow{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsRowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.F1KBNa_settingsRowTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsRowDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsSelector{background:var(--dsw-alias-bg-module-platform);min-width:72px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.F1KBNa_settingsSelector:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_settingsSelector[data-recording]{box-shadow:inset 0 0 0 1px var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-secondary)}.F1KBNa_settingsReset{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;margin-left:6px;padding:0;display:inline-flex}.F1KBNa_settingsReset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_settingsReset:disabled{opacity:.4;cursor:default}.F1KBNa_colorPicker{position:relative}.F1KBNa_colorPickerTrigger{background:var(--dsw-alias-bg-module-platform);width:120px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_colorPickerTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_colorSwatch{border:1px solid var(--dsw-alias-border-l2);border-radius:50%;flex:none;width:24px;height:24px}.F1KBNa_colorValue{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.F1KBNa_colorPickerChevron{flex:none}.F1KBNa_colorBackdrop{z-index:40;position:fixed;inset:0}.F1KBNa_colorPickerPopover{z-index:41;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:10px;padding:10px;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_colorPickerPanel{flex-direction:column;gap:8px;display:flex}.F1KBNa_colorPickerInputRow{align-items:center;gap:8px;display:flex}.F1KBNa_colorPickerPreview{border:1px solid var(--dsw-alias-border-l2);border-radius:6px;flex:none;width:22px;height:22px}.F1KBNa_colorPickerInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-module-platform);min-width:0;height:30px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 8px;font-size:12px;line-height:28px}.F1KBNa_colorPickerInput:focus{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.F1KBNa_colorSv{border:1px solid var(--dsw-alias-border-l1);cursor:crosshair;touch-action:none;border-radius:8px;height:140px;position:relative}.F1KBNa_colorSvCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_colorHue{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;touch-action:none;border-radius:7px;height:14px;position:relative}.F1KBNa_colorHueCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:16px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_diffPreview{z-index:2;border:1px solid var(--dsw-alias-border-l1);font:var(--dsw-font-markdown-code-block);background:var(--dsw-alias-markdown-code-block);border-radius:8px;margin:16px 0 8px;padding:8px;position:sticky;top:0;overflow:hidden}.F1KBNa_diffPreviewTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:6px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_diffPreviewScroll{height:132px;overflow-y:auto}.F1KBNa_mdPreviewWrap{isolation:isolate;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_mdPreviewBody{min-width:0;min-height:0;color:var(--dsw-alias-label-primary);flex:1;padding:12px 16px;position:relative;overflow:auto}.F1KBNa_mdPreviewContent{width:100%;min-width:0;margin:0 auto}.F1KBNa_mdPreviewSingle{display:block}.F1KBNa_mdPreviewDouble{display:flex}.F1KBNa_mdPreviewBody .mdBlock{border-radius:4px;margin-bottom:12px;padding:2px 6px}.F1KBNa_mdPreviewBody .mdAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_mdPreviewBody .mdDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_mdPreviewBody .mdWordDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdWordAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdDouble{flex-direction:column;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleRow{align-items:flex-start;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleCol{flex:1;min-width:0}.F1KBNa_mdPreviewBody .mdDoubleRule{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:0 12px}.F1KBNa_mdPreviewFallback{font-family:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 16px;font-size:12px;line-height:18px}.F1KBNa_mdPreviewBody{word-break:break-word;font-size:13px;line-height:20px}.F1KBNa_mdPreviewBody>:first-child{margin-top:0}.F1KBNa_mdPreviewBody>:last-child{margin-bottom:0}.F1KBNa_mdPreviewBody h1,.F1KBNa_mdPreviewBody h2,.F1KBNa_mdPreviewBody h3,.F1KBNa_mdPreviewBody h4,.F1KBNa_mdPreviewBody h5,.F1KBNa_mdPreviewBody h6{margin:16px 0 8px;font-weight:600;line-height:1.3}.F1KBNa_mdPreviewBody h1{font-size:22px}.F1KBNa_mdPreviewBody h2{font-size:19px}.F1KBNa_mdPreviewBody h3{font-size:16px}.F1KBNa_mdPreviewBody h4{font-size:15px}.F1KBNa_mdPreviewBody h5{font-size:14px}.F1KBNa_mdPreviewBody h6{font-size:13px}.F1KBNa_mdPreviewBody p{margin:8px 0}.F1KBNa_mdPreviewBody ul,.F1KBNa_mdPreviewBody ol{margin:8px 0;padding-left:22px}.F1KBNa_mdPreviewBody li{margin:2px 0}.F1KBNa_mdPreviewBody a{color:var(--dsw-alias-state-business-primary);text-decoration:none}.F1KBNa_mdPreviewBody a:hover{text-decoration:underline}.F1KBNa_mdPreviewBody code{font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:4px;padding:1px 5px;font-size:12.5px}.F1KBNa_mdPreviewBody pre{border:1px solid var(--dsw-alias-border-l1);font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:8px;margin:8px 0;padding:10px 12px;font-size:12.5px;line-height:18px;overflow:auto}.F1KBNa_mdPreviewBody pre code{background:0 0;padding:0}.F1KBNa_mdPreviewBody blockquote{border-left:3px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);margin:8px 0;padding:0 12px}.F1KBNa_mdPreviewBody hr{background:var(--dsw-alias-border-l1);border:none;height:1px;margin:16px 0}.F1KBNa_mdPreviewBody table{border-collapse:collapse;margin:8px 0}.F1KBNa_mdPreviewBody th,.F1KBNa_mdPreviewBody td{border:1px solid var(--dsw-alias-border-l1);padding:4px 10px}.F1KBNa_mdPreviewBody img{max-width:100%}.F1KBNa_mdPreviewBody .mdImageFallback{border:1px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-markdown-code-block) 45%, transparent);width:100%;min-height:120px;color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-markdown-code-block);text-align:center;white-space:pre-wrap;word-break:break-all;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:8px 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_toggle{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:18px;flex:none;width:60px;height:36px;padding:0;position:relative}.F1KBNa_toggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_toggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.F1KBNa_toggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleOn:hover{background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleThumb{background:var(--dsw-alias-label-primary);border-radius:50%;width:28px;height:28px;transition:left .12s;position:absolute;top:3px;left:3px}.F1KBNa_toggleOn .F1KBNa_toggleThumb{background:#fff;left:27px}.F1KBNa_stepper{align-items:center;gap:6px;display:inline-flex}.F1KBNa_stepperButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);width:32px;height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;padding:0;position:relative}.F1KBNa_stepperButton:before,.F1KBNa_stepperButton:after{content:\"\";background:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_stepperButton:before{width:10px;height:1px}.F1KBNa_stepperButton:after{width:1px;height:10px;display:none}.F1KBNa_stepperButtonUp:after{display:block}.F1KBNa_stepperButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_stepperButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_stepperValue{text-align:center;min-width:2ch;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:14px;line-height:22px}.F1KBNa_states{flex-direction:column;flex:1;min-height:0;padding:4px 12px 12px;display:flex;overflow-y:auto}.F1KBNa_split{flex:1;align-items:stretch;min-height:0;display:flex;position:relative}.F1KBNa_fileListKnob{z-index:39;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;box-shadow:var(--dsw-elevation-prominent);border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.F1KBNa_fileListKnob[data-open]{box-shadow:none;opacity:0}.F1KBNa_fileListKnob:not([data-open]){animation:.32s ease-in-out .5s both F1KBNa_fileListKnobIn}@keyframes F1KBNa_fileListKnobIn{0%{opacity:0}to{opacity:1}}.F1KBNa_fileListKnob:hover,.F1KBNa_fileListKnob:focus-visible{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-interactive-bg-hover), var(--dsw-alias-interactive-bg-hover))}.F1KBNa_fileListFloat{z-index:40;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);box-shadow:none;transform-origin:0 0;border-radius:12px;flex-direction:column;padding:6px 8px 10px;display:flex;position:absolute;overflow:hidden}.F1KBNa_fileListFloatClosing{pointer-events:none;animation:.14s ease-in forwards F1KBNa_fileListShrink}@keyframes F1KBNa_fileListShrink{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.F1KBNa_fileList{box-sizing:border-box;border-right:1px solid var(--dsw-alias-border-l2);flex-direction:column;flex:none;width:240px;min-height:0;padding:4px 8px 12px;display:flex}.F1KBNa_listScroll{flex:1;min-height:0;overflow-y:scroll}.F1KBNa_bulkActions{flex:none;gap:6px;padding:8px 8px 0 0;display:flex}.F1KBNa_bulkActions .F1KBNa_action{text-align:center;flex:1}.F1KBNa_resizeHandle{cursor:col-resize;touch-action:none;background:0 0;flex:none;width:5px;margin:0 -2px}.F1KBNa_resizeHandle:hover{background:var(--dsw-alias-border-l2)}.F1KBNa_floatResizeHandle{z-index:41;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border-radius:4px;position:absolute}.F1KBNa_floatResizeHandle:hover{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-border-l2), var(--dsw-alias-border-l2))}.F1KBNa_detail{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.F1KBNa_detailEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;margin:0;padding:24px;font-size:12px;line-height:18px;display:flex}.F1KBNa_confirmBackdrop{z-index:55;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.F1KBNa_confirmCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:340px;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}.F1KBNa_confirmText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;line-height:1.5}.F1KBNa_confirmActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;display:flex}.F1KBNa_pickerCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:420px;max-width:100%;height:70%;max-height:100%;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:8px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.F1KBNa_pickerTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}.F1KBNa_pickerClose{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:10px;right:10px}.F1KBNa_pickerClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_pickerForm{flex:none;gap:8px;display:flex}.F1KBNa_pickerInput{border:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;flex:auto;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_pickerInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_tree{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex:auto;min-height:0;padding:4px 2px 4px 4px;overflow:auto scroll}.F1KBNa_treeRow{border-radius:6px;align-items:center;gap:2px;padding-right:4px;display:flex}.F1KBNa_treeRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_treeRow[data-selected]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.F1KBNa_treeCaret{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_treeCaret:hover{color:var(--dsw-alias-label-primary)}.F1KBNa_treeName{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:auto;align-items:center;gap:6px;padding:2px 4px;font-family:inherit;font-size:12px;line-height:18px;display:flex}.F1KBNa_treeName:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_treeNote{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.F1KBNa_pickerIcon{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_pickerName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_pickerNote{color:var(--dsw-alias-label-tertiary);flex:none;margin:0;font-size:12px;line-height:18px}.F1KBNa_pickerCheck{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-right:auto;font-size:12px;line-height:18px;display:flex}.F1KBNa_title{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}.F1KBNa_note,.F1KBNa_readError,.F1KBNa_hint{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.F1KBNa_noteCentered{text-align:center;margin:auto}.F1KBNa_emptyState{flex-direction:column;align-items:center;gap:10px;margin:auto;display:flex}.F1KBNa_importButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:5px 14px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_importButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_importButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_importNote{color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:12px;line-height:18px}.F1KBNa_readError{color:var(--dsw-alias-state-error-primary)}.F1KBNa_group{color:var(--dsw-alias-label-tertiary);margin:8px 0 4px;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_groupHead{align-items:center;gap:4px;margin:8px 0 4px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton{box-sizing:border-box;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;min-height:0;padding:0;display:inline-flex}.F1KBNa_groupHead>.F1KBNa_group{margin:0}.F1KBNa_emptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.F1KBNa_rows{margin:0;padding:0;list-style:none}.F1KBNa_row{border:1px solid #0000;border-radius:10px;margin:2px 0}.F1KBNa_rowHead{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_rowHead:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_rowHead[data-selected]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_rowPath{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:hidden}.F1KBNa_kindTag{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_kindHint{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:16px}.F1KBNa_divergedHint,.F1KBNa_missingHint{border-bottom:1px solid var(--dsw-alias-border-l2);margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missing{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary));white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_rowFailed{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_actionError{border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missingHint{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary))}.F1KBNa_rowMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;gap:6px;margin-left:auto;font-size:12px;line-height:16px;display:inline-flex}.F1KBNa_addCount{color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_delCount{color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_diff{background:var(--dsw-alias-markdown-code-block);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffHeader{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_panelDocked .F1KBNa_diffHeader{background:var(--dsw-alias-bg-base)}.F1KBNa_diffPath{white-space:nowrap;scrollbar-width:none;min-width:0;color:var(--dsw-alias-label-primary);-webkit-user-select:text;user-select:text;flex:1;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:auto hidden}.F1KBNa_diffPath::-webkit-scrollbar{display:none}.F1KBNa_diffActions{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_diffStats{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:16px}.F1KBNa_flexSpacer{flex:1}.F1KBNa_divider{background:var(--dsw-alias-border-l1);align-self:stretch;width:1px;margin:2px 0}.F1KBNa_action{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_action:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_actionPrimary{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_actionPrimary:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_actionPrimary:disabled{background:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:.55}.F1KBNa_actionQuietDisabled:disabled{cursor:pointer;color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l1);background:0 0}.F1KBNa_actionPrimary.F1KBNa_actionQuietDisabled:disabled{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:1}.F1KBNa_iconAction{justify-content:center;align-items:center;min-height:25px;padding:4px 6px;display:inline-flex}.F1KBNa_close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expand{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expandExpanded svg{transform:rotate(180deg)}.F1KBNa_diffBodyWrap{isolation:isolate;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBody{min-width:0;font:var(--dsw-font-markdown-code-block);-webkit-text-size-adjust:100%;text-size-adjust:100%;cursor:text;outline:none;flex:1;padding:0;position:relative;overflow:auto}.F1KBNa_diffBody::-webkit-scrollbar,.F1KBNa_diffBody::-webkit-scrollbar-track,.F1KBNa_diffBody::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_blockActions{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);z-index:2;border-radius:10px;align-items:center;gap:9px;padding:5px;display:flex;position:absolute;right:8px}.F1KBNa_blockActionsDivider{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:2px 0}.F1KBNa_blockPosition{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;margin-left:7px;font-size:12px;line-height:16px}.F1KBNa_searchBar{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);border-radius:10px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:8px;right:8px}.F1KBNa_searchInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:150px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_searchInput:focus{border-color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchCount{text-align:center;min-width:34px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:16px}.F1KBNa_searchToggle{border:1px solid var(--dsw-alias-border-l1);min-height:25px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:4px 6px;display:inline-flex}.F1KBNa_searchToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_searchToggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchMatch{color:inherit;background-color:#facc1542;border-radius:2px}.F1KBNa_searchMatchCurrent{color:inherit;background-color:#facc1599;border-radius:2px}.F1KBNa_blockFlash{z-index:1;box-sizing:border-box;border:2px solid var(--dsw-alias-state-business-primary);pointer-events:none;border-radius:4px;animation:1s ease-out forwards F1KBNa_diffFlashFade;position:absolute;left:0;right:0}.F1KBNa_blockFlashShake{animation:.7s ease-out forwards F1KBNa_diffFlashShake}.F1KBNa_discussionRow{background:var(--dsw-alias-bg-base);display:table-row}.F1KBNa_discussionCell{display:table-cell}.F1KBNa_discussionPin{width:0;height:0;position:sticky;left:0}.F1KBNa_discussion{z-index:2;box-sizing:border-box;border-left:3px solid var(--dsw-alias-label-secondary);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,var(--dsw-alias-label-tertiary))}.F1KBNa_discussion[data-lost] .F1KBNa_discussionAnswer{color:var(--dsw-alias-label-secondary)}.F1KBNa_discussionAnswer{color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionUser{padding:calc(var(--dsh-diff-line-height,22px) * .2) calc(var(--dsh-diff-line-height,22px) * .5);margin:calc(var(--dsh-diff-line-height,22px) * .3) 0 calc(var(--dsh-diff-line-height,22px) * .3) auto;box-sizing:border-box;background:var(--dsw-specific-bubble,var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover)));width:fit-content;max-width:82%;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionNote[data-diff-discussion-hidden]{color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionHead{box-sizing:border-box;height:var(--dsh-diff-line-height,22px);flex:none;align-items:center;gap:8px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;height:calc(var(--dsh-diff-line-height,22px) * 2);flex:none;align-items:center;gap:8px;margin:0 -6px;padding:0;display:flex}.F1KBNa_discussionInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));border-radius:6px;flex:auto;padding:3px 8px;line-height:18px}.F1KBNa_discussionToggle{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_discussionToggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_discussionRangeWrap{font:var(--dsw-font-markdown-code-block);flex:none}.F1KBNa_discussionRange{color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1))}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput::placeholder{font-family:inherit;font-size:inherit;color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionSend{box-sizing:border-box;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;padding-left:9px;padding-right:9px;display:inline-flex}.F1KBNa_rowDiscussed{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent))}@keyframes F1KBNa_diffFlashFade{0%{opacity:1}to{opacity:0}}@keyframes F1KBNa_diffFlashShake{0%{opacity:1;transform:translateY(0)}10%{transform:translateY(1px)}20%{transform:translateY(-1px)}30%{transform:translateY(1px)}40%{transform:translateY(-1px)}50%{transform:translateY(1px)}60%{transform:translateY(-1px)}70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(0)}}.F1KBNa_overviewRuler{pointer-events:none;opacity:.5;width:4px;position:absolute;top:0;bottom:0;right:0}.F1KBNa_overviewMarker{border-radius:2px;width:100%;min-height:2px;position:absolute;right:0}.F1KBNa_markerDel{background-color:var(--dsw-alias-state-error-primary)}.F1KBNa_markerAdd{background-color:var(--dsw-alias-state-success-primary)}.F1KBNa_lines{border-spacing:0;width:max-content;min-width:100%;font-size:calc(1em * var(--dsh-diff-font-scale,1));display:table}.F1KBNa_line{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);-webkit-user-select:none;user-select:none;display:table-row}.F1KBNa_vSpacer{display:table-row}.F1KBNa_gutter{box-sizing:border-box;text-align:right;width:44px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;cursor:default;padding-right:10px;display:table-cell}.F1KBNa_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_add{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_statusBar{box-sizing:border-box;border-top:1px solid var(--dsw-alias-border-l2);height:34px;color:var(--dsw-alias-label-tertiary);font-family:var(--dsw-font-markdown-code-block);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.F1KBNa_statusAction{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_statusAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langSelect{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:4px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_langSelect:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langLabel{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.F1KBNa_presentationSelect{cursor:pointer;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_presentationSelect:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_chip{justify-content:flex-end;align-items:center;gap:5px;min-width:0;padding-right:14px;display:inline-flex}.F1KBNa_chipLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_coverHost{align-items:center;display:inline-flex;position:relative}.F1KBNa_coverCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:12px;align-items:center;gap:4px;padding:6px;display:flex}.F1KBNa_coverPopover{z-index:50;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_coverNotice{z-index:80;pointer-events:none;animation:1.25s ease-out forwards F1KBNa_coverNoticeFade;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_coverNoticeCard{gap:4px;padding:6px 8px}@keyframes F1KBNa_coverNoticeFade{0%,78%{opacity:1}to{opacity:0}}.F1KBNa_coverNoticeGlyph{width:44px;height:44px;color:var(--dsw-alias-label-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_coverNoticeGlyph[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_coverNoticeGlyph[data-changed]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_coverNoticeText{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.F1KBNa_coverButton{width:32px;height:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_coverButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_coverButton[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_presentationHost{align-items:center;display:inline-flex}.F1KBNa_chipPresentation{min-width:36px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:20px;flex:none;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_chipPresentation:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_mirrored{transform:scaleX(-1)}.F1KBNa_notice{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:360px;box-shadow:var(--dsw-shadow-lv3);border-radius:10px;align-items:flex-start;gap:12px;padding:12px 14px;display:flex;position:fixed;bottom:24px;right:24px}.F1KBNa_noticeText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);flex:1;margin:0;line-height:1.45}.F1KBNa_noticeButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font:var(--dsw-font-caption);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px}.F1KBNa_noticeButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_wrap .F1KBNa_line{height:auto;min-height:var(--dsh-diff-line-height,22px)}.F1KBNa_subline{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);white-space:pre;display:block;overflow:hidden}.F1KBNa_wrapActive{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_wrapActive:hover{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_splitRoot{isolation:isolate;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBodySplit{flex:1;min-height:0;overflow-x:hidden}.F1KBNa_splitCols{width:100%;min-width:0;display:flex}.F1KBNa_splitCol{box-sizing:border-box;flex:1 1 0;min-width:0;overflow:hidden}.F1KBNa_splitDivider{background:var(--dsw-alias-border-l2);flex:0 0 1px}.F1KBNa_splitCol .F1KBNa_gutter,.F1KBNa_splitCol .F1KBNa_code{vertical-align:top}.F1KBNa_splitHScrollRow{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;width:100%;min-width:0;display:flex}.F1KBNa_splitHScroll{min-width:0;height:var(--dsh-scrollbar-width,8px);flex:1 1 0;overflow:auto hidden}.F1KBNa_splitHScroll::-webkit-scrollbar{height:var(--dsh-scrollbar-width,8px)}.F1KBNa_splitHScroll::-webkit-scrollbar-track{cursor:default}.F1KBNa_splitHScroll::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_splitHScrollFill{height:1px}.F1KBNa_splitLdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 26%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 24%, transparent)}";
|
|
24
|
+
const css = ".F1KBNa_panelFailure{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;line-height:16px;display:flex}.F1KBNa_panelFailureText{min-width:0}.F1KBNa_panelFailureRetry{border:1px solid var(--dsw-alias-border-l2);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;margin-left:auto;padding:2px 8px}.F1KBNa_panelFailureRetry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_layer{box-sizing:border-box;flex:none;align-items:center;width:calc(100% + 4px);height:42px;margin:4px -2px;display:flex;position:relative}.F1KBNa_headerEntry{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:6px;display:inline-flex;position:relative}.F1KBNa_headerEntry:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_headerEntry[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}.F1KBNa_headerEntry:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_headerEntryCount{box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);min-width:14px;height:14px;color:var(--dsw-alias-label-primary-foreground);text-align:center;font-variant-numeric:tabular-nums;pointer-events:none;border-radius:7px;padding:0 3px;font-size:10px;line-height:14px;position:absolute;top:-1px;right:-1px}.F1KBNa_headerEntry svg{display:block}.F1KBNa_footerButtons{align-items:center;width:100%;display:flex}.F1KBNa_badge{box-sizing:border-box;width:100%;height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}.F1KBNa_badge:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_badge:disabled{color:var(--dsw-alias-label-tertiary);cursor:default;background:0 0}.F1KBNa_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.F1KBNa_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.F1KBNa_layer.F1KBNa_rail{width:36px;height:36px;margin:8px 0 10px}.F1KBNa_rail .F1KBNa_badge{border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.F1KBNa_rail .F1KBNa_badgeLabel{display:none}.F1KBNa_rail .F1KBNa_badgeCount{box-sizing:border-box;background:var(--dsw-alias-state-business-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-foreground);font-variant-numeric:tabular-nums;border-radius:9px;justify-content:center;align-items:center;padding:0 4px;font-size:11px;line-height:18px;display:flex;position:absolute;top:-3px;right:-7px}.F1KBNa_coverBackdrop{z-index:29;background:var(--dsw-specific-sidebar-fill);position:fixed;inset:0}.F1KBNa_panel{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:none;box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);-webkit-user-select:none;user-select:none;border-radius:12px;flex-direction:column;display:flex;position:fixed;inset:8px 8px 128px;overflow:hidden}.F1KBNa_panel .F1KBNa_code,.F1KBNa_panel .F1KBNa_mdPreviewBody,.F1KBNa_panel .F1KBNa_discussionUser,.F1KBNa_panel .F1KBNa_discussionAnswer,.F1KBNa_panel .F1KBNa_quoteText,.F1KBNa_panel .F1KBNa_diffPath,.F1KBNa_panel .F1KBNa_rowPath,.F1KBNa_panel input,.F1KBNa_panel textarea,.F1KBNa_panel [contenteditable]{-webkit-user-select:text;user-select:text}.F1KBNa_panelDocked{width:100%;max-width:none;height:100%;box-shadow:none;border:none;border-radius:0;position:static;inset:auto}.F1KBNa_dockHost{flex-direction:column;min-height:0;display:flex;position:absolute;inset:0}.F1KBNa_header{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.F1KBNa_headerActions{align-items:center;gap:2px;display:flex}.F1KBNa_settingsPage{padding:8px 12px}.F1KBNa_settingsGroup{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupHeader{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsGroupText{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.F1KBNa_settingsGroupTitle{font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsGroupDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsGroupChevron{margin-left:auto;transition:transform .15s}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupChevron{transform:rotate(180deg)}.F1KBNa_settingsGroup[data-open] .F1KBNa_settingsGroupHeader{border-bottom:1px solid var(--dsw-alias-border-l2)}.F1KBNa_settingsGroupBody{flex-direction:column;display:flex}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow{padding-left:16px}.F1KBNa_settingsGroupBody .F1KBNa_settingsRow:last-child,.F1KBNa_settingsPage>.F1KBNa_settingsRow:last-child{border-bottom:none}.F1KBNa_settingsRow{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.F1KBNa_settingsRowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.F1KBNa_settingsRowTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.F1KBNa_settingsRowDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.F1KBNa_settingsSelector{background:var(--dsw-alias-bg-module-platform);min-width:72px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.F1KBNa_settingsSelector:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_settingsSelector[data-recording]{box-shadow:inset 0 0 0 1px var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-secondary)}.F1KBNa_settingsReset{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;margin-left:6px;padding:0;display:inline-flex}.F1KBNa_settingsReset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_settingsReset:disabled{opacity:.4;cursor:default}.F1KBNa_colorPicker{position:relative}.F1KBNa_colorPickerTrigger{background:var(--dsw-alias-bg-module-platform);width:120px;height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_colorPickerTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_colorSwatch{border:1px solid var(--dsw-alias-border-l2);border-radius:50%;flex:none;width:24px;height:24px}.F1KBNa_colorValue{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.F1KBNa_colorPickerChevron{flex:none}.F1KBNa_colorBackdrop{z-index:40;position:fixed;inset:0}.F1KBNa_colorPickerPopover{z-index:41;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:10px;padding:10px;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_colorPickerPanel{flex-direction:column;gap:8px;display:flex}.F1KBNa_colorPickerInputRow{align-items:center;gap:8px;display:flex}.F1KBNa_colorPickerPreview{border:1px solid var(--dsw-alias-border-l2);border-radius:6px;flex:none;width:22px;height:22px}.F1KBNa_colorPickerInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-module-platform);min-width:0;height:30px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 8px;font-size:12px;line-height:28px}.F1KBNa_colorPickerInput:focus{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.F1KBNa_colorSv{border:1px solid var(--dsw-alias-border-l1);cursor:crosshair;touch-action:none;border-radius:8px;height:140px;position:relative}.F1KBNa_colorSvCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:14px;height:14px;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_colorHue{border:1px solid var(--dsw-alias-border-l1);cursor:pointer;touch-action:none;border-radius:7px;height:14px;position:relative}.F1KBNa_colorHueCursor{pointer-events:none;border:2px solid #fff;border-radius:50%;width:16px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #00000080}.F1KBNa_diffPreview{z-index:2;border:1px solid var(--dsw-alias-border-l1);font:var(--dsw-font-markdown-code-block);background:var(--dsw-alias-markdown-code-block);border-radius:8px;margin:16px 0 8px;padding:8px;position:sticky;top:0;overflow:hidden}.F1KBNa_diffPreviewTitle{color:var(--dsw-alias-label-tertiary);margin-bottom:6px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_diffPreviewScroll{height:132px;overflow-y:auto}.F1KBNa_mdPreviewWrap{isolation:isolate;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_mdPreviewBody{min-width:0;min-height:0;color:var(--dsw-alias-label-primary);flex:1;padding:12px 16px;position:relative;overflow:auto}.F1KBNa_mdPreviewContent{width:100%;min-width:0;margin:0 auto}.F1KBNa_mdPreviewSingle{display:block}.F1KBNa_mdPreviewDouble{display:flex}.F1KBNa_mdPreviewBody .mdBlock{border-radius:4px;margin-bottom:12px;padding:2px 6px}.F1KBNa_mdPreviewBody .mdAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_mdPreviewBody .mdDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_mdPreviewBody .mdWordDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdWordAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 34%, transparent);border-radius:2px;padding:0 1px}.F1KBNa_mdPreviewBody .mdDouble{flex-direction:column;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleRow{align-items:flex-start;width:100%;min-width:0;display:flex}.F1KBNa_mdPreviewBody .mdDoubleCol{flex:1;min-width:0}.F1KBNa_mdPreviewBody .mdDoubleRule{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:0 12px}.F1KBNa_mdPreviewFallback{font-family:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 16px;font-size:12px;line-height:18px}.F1KBNa_mdPreviewBody{word-break:break-word;font-size:13px;line-height:20px}.F1KBNa_mdPreviewBody>:first-child{margin-top:0}.F1KBNa_mdPreviewBody>:last-child{margin-bottom:0}.F1KBNa_mdPreviewBody h1,.F1KBNa_mdPreviewBody h2,.F1KBNa_mdPreviewBody h3,.F1KBNa_mdPreviewBody h4,.F1KBNa_mdPreviewBody h5,.F1KBNa_mdPreviewBody h6{margin:16px 0 8px;font-weight:600;line-height:1.3}.F1KBNa_mdPreviewBody h1{font-size:22px}.F1KBNa_mdPreviewBody h2{font-size:19px}.F1KBNa_mdPreviewBody h3{font-size:16px}.F1KBNa_mdPreviewBody h4{font-size:15px}.F1KBNa_mdPreviewBody h5{font-size:14px}.F1KBNa_mdPreviewBody h6{font-size:13px}.F1KBNa_mdPreviewBody p{margin:8px 0}.F1KBNa_mdPreviewBody ul,.F1KBNa_mdPreviewBody ol{margin:8px 0;padding-left:22px}.F1KBNa_mdPreviewBody li{margin:2px 0}.F1KBNa_mdPreviewBody a{color:var(--dsw-alias-state-business-primary);text-decoration:none}.F1KBNa_mdPreviewBody a:hover{text-decoration:underline}.F1KBNa_mdPreviewBody code{font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:4px;padding:1px 5px;font-size:12.5px}.F1KBNa_mdPreviewBody pre{border:1px solid var(--dsw-alias-border-l1);font-family:var(--dsw-font-markdown-code-block);background:#9e9e9e40;border-radius:8px;margin:8px 0;padding:10px 12px;font-size:12.5px;line-height:18px;overflow:auto}.F1KBNa_mdPreviewBody pre code{background:0 0;padding:0}.F1KBNa_mdPreviewBody blockquote{border-left:3px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);margin:8px 0;padding:0 12px}.F1KBNa_mdPreviewBody hr{background:var(--dsw-alias-border-l1);border:none;height:1px;margin:16px 0}.F1KBNa_mdPreviewBody table{border-collapse:collapse;margin:8px 0}.F1KBNa_mdPreviewBody th,.F1KBNa_mdPreviewBody td{border:1px solid var(--dsw-alias-border-l1);padding:4px 10px}.F1KBNa_mdPreviewBody img{max-width:100%}.F1KBNa_mdPreviewBody .mdImageFallback{border:1px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-markdown-code-block) 45%, transparent);width:100%;min-height:120px;color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-markdown-code-block);text-align:center;white-space:pre-wrap;word-break:break-all;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:8px 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_toggle{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:18px;flex:none;width:60px;height:36px;padding:0;position:relative}.F1KBNa_toggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_toggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.F1KBNa_toggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleOn:hover{background:var(--dsw-alias-state-business-primary)}.F1KBNa_toggleThumb{background:var(--dsw-alias-label-primary);border-radius:50%;width:28px;height:28px;transition:left .12s;position:absolute;top:3px;left:3px}.F1KBNa_toggleOn .F1KBNa_toggleThumb{background:#fff;left:27px}.F1KBNa_stepper{align-items:center;gap:6px;display:inline-flex}.F1KBNa_stepperButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);width:32px;height:32px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;padding:0;position:relative}.F1KBNa_stepperButton:before,.F1KBNa_stepperButton:after{content:\"\";background:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_stepperButton:before{width:10px;height:1px}.F1KBNa_stepperButton:after{width:1px;height:10px;display:none}.F1KBNa_stepperButtonUp:after{display:block}.F1KBNa_stepperButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_stepperButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_stepperValue{text-align:center;min-width:2ch;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:14px;line-height:22px}.F1KBNa_states{flex-direction:column;flex:1;min-height:0;padding:4px 12px 12px;display:flex;overflow-y:auto}.F1KBNa_split{flex:1;align-items:stretch;min-height:0;display:flex;position:relative}.F1KBNa_fileListKnob{z-index:39;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;box-shadow:var(--dsw-elevation-prominent);border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.F1KBNa_fileListKnob[data-open]{box-shadow:none;opacity:0}.F1KBNa_fileListKnob:not([data-open]){animation:.32s ease-in-out .5s both F1KBNa_fileListKnobIn}@keyframes F1KBNa_fileListKnobIn{0%{opacity:0}to{opacity:1}}.F1KBNa_fileListKnob:hover,.F1KBNa_fileListKnob:focus-visible{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-interactive-bg-hover), var(--dsw-alias-interactive-bg-hover))}.F1KBNa_fileListFloat{z-index:40;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);box-shadow:none;transform-origin:0 0;border-radius:12px;flex-direction:column;padding:6px 0 10px 8px;display:flex;position:absolute;overflow:hidden}.F1KBNa_fileListFloatClosing{pointer-events:none;animation:.14s ease-in forwards F1KBNa_fileListShrink}@keyframes F1KBNa_fileListShrink{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.F1KBNa_fileList{box-sizing:border-box;border-right:1px solid var(--dsw-alias-border-l2);flex-direction:column;flex:none;width:240px;min-height:0;padding:4px 8px 12px;display:flex}.F1KBNa_listScroll{flex:1;min-height:0;overflow-y:scroll}.F1KBNa_bulkActions{flex:none;gap:6px;padding:8px 8px 0 0;display:flex}.F1KBNa_bulkActions .F1KBNa_action{text-align:center;flex:1}.F1KBNa_resizeHandle{cursor:col-resize;touch-action:none;background:0 0;flex:none;width:5px;margin:0 -2px}.F1KBNa_resizeHandle:hover{background:var(--dsw-alias-border-l2)}.F1KBNa_floatResizeHandle{z-index:41;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;border-radius:4px;position:absolute}.F1KBNa_floatResizeHandle:hover{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(var(--dsw-alias-border-l2), var(--dsw-alias-border-l2))}.F1KBNa_detail{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.F1KBNa_detailEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;margin:0;padding:24px;font-size:12px;line-height:18px;display:flex}.F1KBNa_confirmBackdrop{z-index:55;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.F1KBNa_confirmCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:340px;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}.F1KBNa_confirmText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;line-height:1.5}.F1KBNa_confirmActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;display:flex}.F1KBNa_pickerCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:420px;max-width:100%;height:70%;max-height:100%;box-shadow:var(--dsw-shadow-lv3);border-radius:12px;flex-direction:column;gap:8px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.F1KBNa_pickerTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}.F1KBNa_pickerClose{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:10px;right:10px}.F1KBNa_pickerClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_pickerForm{flex:none;gap:8px;display:flex}.F1KBNa_pickerInput{border:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;flex:auto;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_pickerInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_tree{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex:auto;min-height:0;padding:4px 2px 4px 4px;overflow:auto scroll}.F1KBNa_treeRow{border-radius:6px;align-items:center;gap:2px;padding-right:4px;display:flex}.F1KBNa_treeRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_treeRow[data-selected]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.F1KBNa_treeCaret{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_treeCaret:hover{color:var(--dsw-alias-label-primary)}.F1KBNa_treeName{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:auto;align-items:center;gap:6px;padding:2px 4px;font-family:inherit;font-size:12px;line-height:18px;display:flex}.F1KBNa_treeName:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_treeNote{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.F1KBNa_pickerIcon{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_pickerName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_pickerNote{color:var(--dsw-alias-label-tertiary);flex:none;margin:0;font-size:12px;line-height:18px}.F1KBNa_pickerCheck{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-right:auto;font-size:12px;line-height:18px;display:flex}.F1KBNa_title{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}.F1KBNa_note,.F1KBNa_readError,.F1KBNa_hint{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.F1KBNa_noteCentered{text-align:center;margin:auto}.F1KBNa_emptyState{flex-direction:column;align-items:center;gap:10px;margin:auto;display:flex}.F1KBNa_importButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:5px 14px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_importButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_importButton:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_importNote{color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:12px;line-height:18px}.F1KBNa_readError{color:var(--dsw-alias-state-error-primary)}.F1KBNa_group{color:var(--dsw-alias-label-tertiary);margin:8px 0 4px;font-size:12px;font-weight:500;line-height:16px}.F1KBNa_groupHead{align-items:center;gap:4px;margin:8px 0 4px;padding-right:8px;display:flex}.F1KBNa_action.F1KBNa_addButton{box-sizing:border-box;border-radius:6px;justify-content:center;align-items:center;width:20px;height:20px;min-height:0;padding:0;display:inline-flex}.F1KBNa_groupHead>.F1KBNa_group{margin:0}.F1KBNa_emptyActions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.F1KBNa_rows{margin:0;padding:0;list-style:none}.F1KBNa_row{border:1px solid #0000;border-radius:10px;margin:2px 0}.F1KBNa_rowHead{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_rowHead:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_rowHead[data-selected]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_rowPath{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-left:4px;font-size:12px;line-height:18px;overflow:hidden}.F1KBNa_kindTag{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_kindHint{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px;line-height:16px}.F1KBNa_divergedHint,.F1KBNa_missingHint{border-bottom:1px solid var(--dsw-alias-border-l2);margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missing{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary));white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_rowFailed{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);white-space:nowrap;border-radius:6px;flex:none;padding:1px 6px;font-size:11px;line-height:14px}.F1KBNa_actionError{border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;margin:0;padding:6px 8px;font-size:12px;line-height:18px}.F1KBNa_missingHint{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary))}.F1KBNa_rowMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;gap:6px;margin-left:auto;font-size:12px;line-height:16px;display:inline-flex}.F1KBNa_addCount{color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_delCount{color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 60%, var(--dsw-alias-label-primary))}.F1KBNa_diff{background:var(--dsw-alias-markdown-code-block);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffHeader{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_panelDocked .F1KBNa_diffHeader{background:var(--dsw-alias-bg-base)}.F1KBNa_diffPath{white-space:nowrap;scrollbar-width:none;min-width:0;color:var(--dsw-alias-label-primary);flex:1;margin-left:4px;font-size:12px;line-height:18px;position:relative;top:1px;overflow:auto hidden}.F1KBNa_diffPath::-webkit-scrollbar{display:none}.F1KBNa_diffActions{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:6px 8px;display:flex}.F1KBNa_diffStats{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:16px}.F1KBNa_flexSpacer{flex:1}.F1KBNa_divider{background:var(--dsw-alias-border-l1);align-self:stretch;width:1px;margin:2px 0}.F1KBNa_action{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_action:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_actionChord{color:var(--dsw-alias-label-tertiary);margin-left:6px;font-size:11px}.F1KBNa_actionPrimary{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_actionPrimary:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_actionPrimary:disabled{background:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:.55}.F1KBNa_actionQuietDisabled:disabled{cursor:pointer;color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l1);background:0 0}.F1KBNa_actionPrimary.F1KBNa_actionQuietDisabled:disabled{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50);opacity:1}.F1KBNa_iconAction{justify-content:center;align-items:center;min-height:25px;padding:4px 6px;display:inline-flex}.F1KBNa_close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expand{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_expandExpanded svg{transform:rotate(180deg)}.F1KBNa_diffBodyWrap{isolation:isolate;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBody{min-width:0;font:var(--dsw-font-markdown-code-block);-webkit-text-size-adjust:100%;text-size-adjust:100%;cursor:text;outline:none;flex:1;padding:0;position:relative;overflow:auto}.F1KBNa_diffBody::-webkit-scrollbar,.F1KBNa_diffBody::-webkit-scrollbar-track,.F1KBNa_diffBody::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_blockActions{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);z-index:2;border-radius:10px;align-items:center;gap:9px;padding:5px;display:flex;position:absolute;right:8px}.F1KBNa_blockActionsDivider{background:var(--dsw-alias-border-l2);flex:none;align-self:stretch;width:1px;margin:2px 0}.F1KBNa_blockPosition{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;margin-left:7px;font-size:12px;line-height:16px}.F1KBNa_searchBar{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-markdown-code-block);box-shadow:var(--dsw-shadow-lv1);border-radius:10px;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:8px;right:8px}.F1KBNa_searchInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);width:150px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:3px 8px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_searchInput:focus{border-color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchCount{text-align:center;min-width:34px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:16px}.F1KBNa_searchToggle{border:1px solid var(--dsw-alias-border-l1);min-height:25px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:4px 6px;display:inline-flex}.F1KBNa_searchToggle:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_searchToggleOn{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-business-primary)}.F1KBNa_searchMatch{color:inherit;background-color:#facc1542;border-radius:2px}.F1KBNa_searchMatchCurrent{color:inherit;background-color:#facc1599;border-radius:2px}.F1KBNa_blockFlash{z-index:1;box-sizing:border-box;border:2px solid var(--dsw-alias-state-business-primary);pointer-events:none;border-radius:4px;animation:1s ease-out forwards F1KBNa_diffFlashFade;position:absolute;left:0;right:0}.F1KBNa_blockFlashShake{animation:.7s ease-out forwards F1KBNa_diffFlashShake}.F1KBNa_discussionRow{background:var(--dsw-alias-bg-base);display:table-row}.F1KBNa_discussionCell{display:table-cell}.F1KBNa_discussionPin{width:0;height:0;position:sticky;left:0}.F1KBNa_discussion{z-index:2;box-sizing:border-box;border-left:3px solid var(--dsw-alias-label-secondary);cursor:default;background:0 0;flex-direction:column;display:flex;position:absolute;top:0;left:0;overflow:hidden}.F1KBNa_discussionHead,.F1KBNa_discussionBody{font:var(--dsw-font-markdown-code-block)}.F1KBNa_discussionBody{flex-direction:column;flex:auto;min-height:0;padding:0 12px;display:flex;overflow:hidden}.F1KBNa_discussionAnswer{color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionUser{padding:calc(var(--dsh-diff-line-height,22px) * .2) calc(var(--dsh-diff-line-height,22px) * .5);margin:calc(var(--dsh-diff-line-height,22px) * .3) 0 calc(var(--dsh-diff-line-height,22px) * .3) auto;box-sizing:border-box;background:var(--dsw-specific-bubble,var(--dsw-alias-bg-layer-2,var(--dsw-alias-interactive-bg-hover)));width:fit-content;max-width:82%;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px 0 8px 8px}.F1KBNa_discussionNote{color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0}.F1KBNa_discussionNote[data-diff-discussion-hidden]{color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionDots{margin-left:1px}.F1KBNa_discussionDots>span{animation:1.2s ease-in-out infinite F1KBNa_discussionDot}.F1KBNa_discussionDots>span:nth-child(2){animation-delay:.15s}.F1KBNa_discussionDots>span:nth-child(3){animation-delay:.3s}@keyframes F1KBNa_discussionDot{0%,60%,to{opacity:.25}30%{opacity:1}}.F1KBNa_quoteLines{table-layout:fixed;border-spacing:0;width:calc(100% + 27px);min-width:0;color:var(--dsw-alias-label-primary);font-size:calc(1em * var(--dsh-diff-font-scale,1));line-height:var(--dsh-diff-line-height,22px);margin:0 -12px 0 -15px;display:table}.F1KBNa_quoteLine{height:var(--dsh-diff-line-height,22px);display:table-row}.F1KBNa_quoteCode{display:table-cell}.F1KBNa_quoteText{white-space:pre-wrap;overflow-wrap:anywhere;display:block}.F1KBNa_quoteNoWrap .F1KBNa_quoteText{white-space:pre;overflow-wrap:normal;overflow:hidden}.F1KBNa_discussionOutdated{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:16px}.F1KBNa_discussionHead{box-sizing:border-box;height:var(--dsh-diff-line-height,22px);flex:none;align-items:center;gap:8px;padding:0 12px;font-size:12px;line-height:16px;display:flex}.F1KBNa_discussionCompose{box-sizing:border-box;height:calc(var(--dsh-diff-line-height,22px) * 2);flex:none;align-items:center;gap:8px;margin:0 -6px;padding:0;display:flex}.F1KBNa_discussionInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;color:var(--dsw-alias-label-primary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1));cursor:text;border-radius:6px;flex:auto;padding:3px 8px;line-height:18px}.F1KBNa_discussionToggle{width:18px;height:18px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_discussionToggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_discussionRangeWrap{font:var(--dsw-font-markdown-code-block);flex:none}.F1KBNa_discussionRange{color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:calc(1em * var(--dsh-diff-font-scale,1))}.F1KBNa_discussionInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.F1KBNa_discussionInput:disabled{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-tertiary);cursor:default}.F1KBNa_discussionInput::placeholder{font-family:inherit;font-size:inherit;color:var(--dsw-alias-label-tertiary)}.F1KBNa_discussionSend{box-sizing:border-box;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;padding-left:9px;padding-right:9px;display:inline-flex}.F1KBNa_rowDiscussed{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent))}@keyframes F1KBNa_diffFlashFade{0%{opacity:1}to{opacity:0}}@keyframes F1KBNa_diffFlashShake{0%{opacity:1;transform:translateY(0)}10%{transform:translateY(1px)}20%{transform:translateY(-1px)}30%{transform:translateY(1px)}40%{transform:translateY(-1px)}50%{transform:translateY(1px)}60%{transform:translateY(-1px)}70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(0)}}.F1KBNa_overviewRuler{pointer-events:none;opacity:.5;width:4px;position:absolute;top:0;bottom:0;right:0}.F1KBNa_overviewMarker{border-radius:2px;width:100%;min-height:2px;position:absolute;right:0}.F1KBNa_markerDel{background-color:var(--dsw-alias-state-error-primary)}.F1KBNa_markerAdd{background-color:var(--dsw-alias-state-success-primary)}.F1KBNa_lines{border-spacing:0;width:max-content;min-width:100%;font-size:calc(1em * var(--dsh-diff-font-scale,1));display:table}.F1KBNa_line{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);-webkit-user-select:none;user-select:none;display:table-row}.F1KBNa_vSpacer{display:table-row}.F1KBNa_gutter{box-sizing:border-box;text-align:right;width:44px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;cursor:default;padding-right:10px;display:table-cell}.F1KBNa_code{white-space:pre;-webkit-user-select:text;user-select:text;display:table-cell}.F1KBNa_context{color:var(--dsw-alias-label-primary)}.F1KBNa_del{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_add{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_statusBar{box-sizing:border-box;border-top:1px solid var(--dsw-alias-border-l2);height:34px;color:var(--dsw-alias-label-tertiary);font-family:var(--dsw-font-markdown-code-block);font-variant-numeric:tabular-nums;flex:none;align-items:center;gap:8px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.F1KBNa_statusAction{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;background:0 0;border-radius:8px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px}.F1KBNa_statusAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langSelect{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:4px;padding:3px 12px;font-family:inherit;font-size:12px;line-height:18px;display:inline-flex}.F1KBNa_langSelect:hover{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_langLabel{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.F1KBNa_presentationSelect{cursor:pointer;height:28px;color:var(--dsw-alias-label-tertiary);background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_presentationSelect:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_chip{justify-content:flex-end;align-items:center;gap:5px;min-width:0;padding-right:14px;display:inline-flex}.F1KBNa_chipLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.F1KBNa_coverHost{align-items:center;display:inline-flex;position:relative}.F1KBNa_coverCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);box-shadow:var(--dsw-shadow-lv2);border-radius:12px;align-items:center;gap:4px;padding:6px;display:flex}.F1KBNa_coverPopover{z-index:50;position:absolute;top:calc(100% + 6px);right:0}.F1KBNa_coverNotice{z-index:80;pointer-events:none;animation:1.25s ease-out forwards F1KBNa_coverNoticeFade;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.F1KBNa_coverNoticeCard{gap:4px;padding:6px 8px}@keyframes F1KBNa_coverNoticeFade{0%,78%{opacity:1}to{opacity:0}}.F1KBNa_coverNoticeGlyph{width:44px;height:44px;color:var(--dsw-alias-label-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.F1KBNa_coverNoticeGlyph[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_coverNoticeGlyph[data-changed]{background:var(--dsw-alias-interactive-bg-hover)}.F1KBNa_coverNoticeText{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.F1KBNa_coverButton{width:32px;height:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.F1KBNa_coverButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_coverButton[data-on]{color:var(--dsw-alias-label-primary)}.F1KBNa_presentationHost{align-items:center;display:inline-flex}.F1KBNa_chipPresentation{min-width:36px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:20px;flex:none;justify-content:center;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.F1KBNa_chipPresentation:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.F1KBNa_mirrored{transform:scaleX(-1)}.F1KBNa_notice{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-width:360px;box-shadow:var(--dsw-shadow-lv3);border-radius:10px;align-items:flex-start;gap:12px;padding:12px 14px;display:flex;position:fixed;bottom:24px;right:24px}.F1KBNa_noticeText{font:var(--dsw-font-caption);color:var(--dsw-alias-label-primary);flex:1;margin:0;line-height:1.45}.F1KBNa_noticeButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font:var(--dsw-font-caption);cursor:pointer;border-radius:6px;flex:none;padding:4px 10px}.F1KBNa_noticeButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.F1KBNa_wrap .F1KBNa_line{height:auto;min-height:var(--dsh-diff-line-height,22px)}.F1KBNa_subline{height:var(--dsh-diff-line-height,22px);line-height:var(--dsh-diff-line-height,22px);white-space:pre;display:block;overflow:hidden}.F1KBNa_wrapActive{background:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-static-neutral-bluish-50)}.F1KBNa_wrapActive:hover{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 85%, var(--dsw-static-neutral-bluish-1000))}.F1KBNa_splitRoot{isolation:isolate;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.F1KBNa_diffBodySplit{flex:1;min-height:0;overflow-x:hidden}.F1KBNa_splitCols{width:100%;min-width:0;display:flex}.F1KBNa_splitCol{box-sizing:border-box;flex:1 1 0;min-width:0;overflow:hidden}.F1KBNa_splitDivider{background:var(--dsw-alias-border-l2);flex:0 0 1px}.F1KBNa_splitCol .F1KBNa_gutter,.F1KBNa_splitCol .F1KBNa_code{vertical-align:top}.F1KBNa_splitHScrollRow{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex:none;width:100%;min-width:0;display:flex}.F1KBNa_splitHScroll{min-width:0;height:var(--dsh-scrollbar-width,8px);flex:1 1 0;overflow:auto hidden}.F1KBNa_splitHScroll::-webkit-scrollbar{height:var(--dsh-scrollbar-width,8px)}.F1KBNa_splitHScroll::-webkit-scrollbar-track{cursor:default}.F1KBNa_splitHScroll::-webkit-scrollbar-thumb{cursor:default}.F1KBNa_splitHScrollFill{height:1px}.F1KBNa_splitLdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitLadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_splitRdel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 12%, transparent)}.F1KBNa_splitRadd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 10%, transparent)}.F1KBNa_intraDel{background-color:color-mix(in srgb, var(--dsh-diff-del-color,var(--dsw-alias-state-error-primary)) 26%, transparent);text-decoration:line-through}.F1KBNa_intraAdd{background-color:color-mix(in srgb, var(--dsh-diff-add-color,var(--dsw-alias-state-success-primary)) 24%, transparent)}";
|
|
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,223 +31,232 @@ window.__ModuleLoader__.load({
|
|
|
31
31
|
document.head.appendChild(tag);
|
|
32
32
|
}
|
|
33
33
|
var PendingPanel_module_css_default = {
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
34
|
+
"pickerNote": "F1KBNa_pickerNote",
|
|
35
|
+
"coverButton": "F1KBNa_coverButton",
|
|
36
|
+
"discussionRangeWrap": "F1KBNa_discussionRangeWrap",
|
|
37
|
+
"settingsGroupHeader": "F1KBNa_settingsGroupHeader",
|
|
38
|
+
"colorPicker": "F1KBNa_colorPicker",
|
|
39
|
+
"emptyState": "F1KBNa_emptyState",
|
|
40
|
+
"coverNotice": "F1KBNa_coverNotice",
|
|
41
|
+
"actionQuietDisabled": "F1KBNa_actionQuietDisabled",
|
|
42
|
+
"blockActionsDivider": "F1KBNa_blockActionsDivider",
|
|
43
|
+
"discussion": "F1KBNa_discussion",
|
|
37
44
|
"panelFailure": "F1KBNa_panelFailure",
|
|
38
|
-
"badge": "F1KBNa_badge",
|
|
39
|
-
"treeName": "F1KBNa_treeName",
|
|
40
45
|
"diffPath": "F1KBNa_diffPath",
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
46
|
+
"wrapActive": "F1KBNa_wrapActive",
|
|
47
|
+
"resizeHandle": "F1KBNa_resizeHandle",
|
|
48
|
+
"stepperButtonUp": "F1KBNa_stepperButtonUp",
|
|
49
|
+
"stepperValue": "F1KBNa_stepperValue",
|
|
50
|
+
"fileListKnob": "F1KBNa_fileListKnob",
|
|
51
|
+
"settingsGroupChevron": "F1KBNa_settingsGroupChevron",
|
|
52
|
+
"expandExpanded": "F1KBNa_expandExpanded",
|
|
53
|
+
"colorPickerInputRow": "F1KBNa_colorPickerInputRow",
|
|
54
|
+
"tree": "F1KBNa_tree",
|
|
55
|
+
"discussionPin": "F1KBNa_discussionPin",
|
|
56
|
+
"emptyActions": "F1KBNa_emptyActions",
|
|
57
|
+
"coverCard": "F1KBNa_coverCard",
|
|
58
|
+
"importButton": "F1KBNa_importButton",
|
|
59
|
+
"settingsRowDesc": "F1KBNa_settingsRowDesc",
|
|
50
60
|
"panelDocked": "F1KBNa_panelDocked",
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"colorPickerPanel": "F1KBNa_colorPickerPanel",
|
|
55
|
-
"mdPreviewDouble": "F1KBNa_mdPreviewDouble",
|
|
56
|
-
"line": "F1KBNa_line",
|
|
61
|
+
"treeName": "F1KBNa_treeName",
|
|
62
|
+
"blockFlash": "F1KBNa_blockFlash",
|
|
63
|
+
"coverPopover": "F1KBNa_coverPopover",
|
|
57
64
|
"noticeButton": "F1KBNa_noticeButton",
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"settingsGroupHeader": "F1KBNa_settingsGroupHeader",
|
|
62
|
-
"pickerInput": "F1KBNa_pickerInput",
|
|
63
|
-
"note": "F1KBNa_note",
|
|
64
|
-
"diff": "F1KBNa_diff",
|
|
65
|
-
"fileListShrink": "F1KBNa_fileListShrink",
|
|
66
|
-
"discussionHead": "F1KBNa_discussionHead",
|
|
67
|
-
"diffBodyWrap": "F1KBNa_diffBodyWrap",
|
|
68
|
-
"settingsRowTitle": "F1KBNa_settingsRowTitle",
|
|
69
|
-
"colorPickerPopover": "F1KBNa_colorPickerPopover",
|
|
70
|
-
"split": "F1KBNa_split",
|
|
71
|
-
"resizeHandle": "F1KBNa_resizeHandle",
|
|
72
|
-
"discussion": "F1KBNa_discussion",
|
|
73
|
-
"colorPickerInput": "F1KBNa_colorPickerInput",
|
|
65
|
+
"intraAdd": "F1KBNa_intraAdd",
|
|
66
|
+
"mdPreviewSingle": "F1KBNa_mdPreviewSingle",
|
|
67
|
+
"expand": "F1KBNa_expand",
|
|
74
68
|
"blockPosition": "F1KBNa_blockPosition",
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"diffPreviewScroll": "F1KBNa_diffPreviewScroll",
|
|
81
|
-
"layer": "F1KBNa_layer",
|
|
82
|
-
"stepperValue": "F1KBNa_stepperValue",
|
|
83
|
-
"divergedHint": "F1KBNa_divergedHint",
|
|
84
|
-
"colorPickerTrigger": "F1KBNa_colorPickerTrigger",
|
|
85
|
-
"diffFlashFade": "F1KBNa_diffFlashFade",
|
|
86
|
-
"discussionNote": "F1KBNa_discussionNote",
|
|
69
|
+
"overviewRuler": "F1KBNa_overviewRuler",
|
|
70
|
+
"badge": "F1KBNa_badge",
|
|
71
|
+
"line": "F1KBNa_line",
|
|
72
|
+
"states": "F1KBNa_states",
|
|
73
|
+
"quoteCode": "F1KBNa_quoteCode",
|
|
87
74
|
"confirmText": "F1KBNa_confirmText",
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
75
|
+
"dockHost": "F1KBNa_dockHost",
|
|
76
|
+
"searchInput": "F1KBNa_searchInput",
|
|
77
|
+
"diffPreviewScroll": "F1KBNa_diffPreviewScroll",
|
|
78
|
+
"discussionDots": "F1KBNa_discussionDots",
|
|
79
|
+
"vSpacer": "F1KBNa_vSpacer",
|
|
80
|
+
"splitCols": "F1KBNa_splitCols",
|
|
81
|
+
"colorSvCursor": "F1KBNa_colorSvCursor",
|
|
82
|
+
"settingsGroupTitle": "F1KBNa_settingsGroupTitle",
|
|
83
|
+
"diffHeader": "F1KBNa_diffHeader",
|
|
84
|
+
"actionError": "F1KBNa_actionError",
|
|
85
|
+
"colorHueCursor": "F1KBNa_colorHueCursor",
|
|
86
|
+
"fileListFloatClosing": "F1KBNa_fileListFloatClosing",
|
|
87
|
+
"mdPreviewBody": "F1KBNa_mdPreviewBody",
|
|
88
|
+
"badgeLabel": "F1KBNa_badgeLabel",
|
|
89
|
+
"wrap": "F1KBNa_wrap",
|
|
90
|
+
"kindHint": "F1KBNa_kindHint",
|
|
93
91
|
"searchToggleOn": "F1KBNa_searchToggleOn",
|
|
92
|
+
"splitHScroll": "F1KBNa_splitHScroll",
|
|
93
|
+
"panel": "F1KBNa_panel",
|
|
94
|
+
"detailEmpty": "F1KBNa_detailEmpty",
|
|
95
|
+
"searchToggle": "F1KBNa_searchToggle",
|
|
94
96
|
"headerActions": "F1KBNa_headerActions",
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
97
|
+
"notice": "F1KBNa_notice",
|
|
98
|
+
"quoteNoWrap": "F1KBNa_quoteNoWrap",
|
|
99
|
+
"pickerCheck": "F1KBNa_pickerCheck",
|
|
100
|
+
"intraDel": "F1KBNa_intraDel",
|
|
101
|
+
"quoteLine": "F1KBNa_quoteLine",
|
|
102
|
+
"splitLdel": "F1KBNa_splitLdel",
|
|
103
|
+
"searchCount": "F1KBNa_searchCount",
|
|
104
|
+
"footerButtons": "F1KBNa_footerButtons",
|
|
105
|
+
"confirmCard": "F1KBNa_confirmCard",
|
|
106
|
+
"discussionUser": "F1KBNa_discussionUser",
|
|
107
|
+
"noteCentered": "F1KBNa_noteCentered",
|
|
108
|
+
"discussionInput": "F1KBNa_discussionInput",
|
|
109
|
+
"fileListFloat": "F1KBNa_fileListFloat",
|
|
110
|
+
"mdPreviewContent": "F1KBNa_mdPreviewContent",
|
|
111
|
+
"diffFlashShake": "F1KBNa_diffFlashShake",
|
|
112
|
+
"title": "F1KBNa_title",
|
|
113
|
+
"diffFlashFade": "F1KBNa_diffFlashFade",
|
|
114
|
+
"layer": "F1KBNa_layer",
|
|
115
|
+
"bulkActions": "F1KBNa_bulkActions",
|
|
116
|
+
"presentationHost": "F1KBNa_presentationHost",
|
|
99
117
|
"mdPreviewFallback": "F1KBNa_mdPreviewFallback",
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
118
|
+
"treeNote": "F1KBNa_treeNote",
|
|
119
|
+
"discussionHead": "F1KBNa_discussionHead",
|
|
120
|
+
"headerEntryCount": "F1KBNa_headerEntryCount",
|
|
121
|
+
"chipLabel": "F1KBNa_chipLabel",
|
|
103
122
|
"header": "F1KBNa_header",
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"fileListKnob": "F1KBNa_fileListKnob",
|
|
112
|
-
"intraAdd": "F1KBNa_intraAdd",
|
|
113
|
-
"missing": "F1KBNa_missing",
|
|
114
|
-
"overviewMarker": "F1KBNa_overviewMarker",
|
|
115
|
-
"settingsGroupText": "F1KBNa_settingsGroupText",
|
|
116
|
-
"noteCentered": "F1KBNa_noteCentered",
|
|
117
|
-
"action": "F1KBNa_action",
|
|
118
|
-
"settingsReset": "F1KBNa_settingsReset",
|
|
119
|
-
"actionError": "F1KBNa_actionError",
|
|
120
|
-
"diffBody": "F1KBNa_diffBody",
|
|
121
|
-
"searchInput": "F1KBNa_searchInput",
|
|
122
|
-
"settingsGroupBody": "F1KBNa_settingsGroupBody",
|
|
123
|
-
"settingsGroupChevron": "F1KBNa_settingsGroupChevron",
|
|
124
|
-
"subline": "F1KBNa_subline",
|
|
125
|
-
"pickerCheck": "F1KBNa_pickerCheck",
|
|
126
|
-
"coverNoticeFade": "F1KBNa_coverNoticeFade",
|
|
127
|
-
"coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
|
|
128
|
-
"splitHScroll": "F1KBNa_splitHScroll",
|
|
129
|
-
"splitHScrollFill": "F1KBNa_splitHScrollFill",
|
|
130
|
-
"rows": "F1KBNa_rows",
|
|
131
|
-
"colorSwatch": "F1KBNa_colorSwatch",
|
|
132
|
-
"splitRadd": "F1KBNa_splitRadd",
|
|
133
|
-
"groupHead": "F1KBNa_groupHead",
|
|
123
|
+
"discussionCell": "F1KBNa_discussionCell",
|
|
124
|
+
"confirmActions": "F1KBNa_confirmActions",
|
|
125
|
+
"lines": "F1KBNa_lines",
|
|
126
|
+
"rail": "F1KBNa_rail",
|
|
127
|
+
"colorPickerPanel": "F1KBNa_colorPickerPanel",
|
|
128
|
+
"settingsGroup": "F1KBNa_settingsGroup",
|
|
129
|
+
"rowMeta": "F1KBNa_rowMeta",
|
|
134
130
|
"badgeCount": "F1KBNa_badgeCount",
|
|
131
|
+
"pickerClose": "F1KBNa_pickerClose",
|
|
135
132
|
"hint": "F1KBNa_hint",
|
|
136
|
-
"
|
|
137
|
-
"
|
|
133
|
+
"splitDivider": "F1KBNa_splitDivider",
|
|
134
|
+
"close": "F1KBNa_close",
|
|
135
|
+
"settingsReset": "F1KBNa_settingsReset",
|
|
136
|
+
"coverBackdrop": "F1KBNa_coverBackdrop",
|
|
137
|
+
"kindTag": "F1KBNa_kindTag",
|
|
138
138
|
"stepper": "F1KBNa_stepper",
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
139
|
+
"stepperButton": "F1KBNa_stepperButton",
|
|
140
|
+
"note": "F1KBNa_note",
|
|
141
|
+
"discussionBody": "F1KBNa_discussionBody",
|
|
142
|
+
"gutter": "F1KBNa_gutter",
|
|
143
|
+
"add": "F1KBNa_add",
|
|
144
|
+
"colorPickerPreview": "F1KBNa_colorPickerPreview",
|
|
145
|
+
"pickerInput": "F1KBNa_pickerInput",
|
|
146
|
+
"markerDel": "F1KBNa_markerDel",
|
|
147
|
+
"addCount": "F1KBNa_addCount",
|
|
148
|
+
"colorSv": "F1KBNa_colorSv",
|
|
149
149
|
"diffPreview": "F1KBNa_diffPreview",
|
|
150
|
-
"
|
|
150
|
+
"discussionRow": "F1KBNa_discussionRow",
|
|
151
|
+
"markerAdd": "F1KBNa_markerAdd",
|
|
152
|
+
"fileList": "F1KBNa_fileList",
|
|
153
|
+
"coverNoticeCard": "F1KBNa_coverNoticeCard",
|
|
154
|
+
"colorPickerInput": "F1KBNa_colorPickerInput",
|
|
155
|
+
"treeRow": "F1KBNa_treeRow",
|
|
156
|
+
"searchMatchCurrent": "F1KBNa_searchMatchCurrent",
|
|
157
|
+
"discussionDot": "F1KBNa_discussionDot",
|
|
158
|
+
"coverNoticeGlyph": "F1KBNa_coverNoticeGlyph",
|
|
151
159
|
"row": "F1KBNa_row",
|
|
152
|
-
"
|
|
160
|
+
"discussionSend": "F1KBNa_discussionSend",
|
|
161
|
+
"flexSpacer": "F1KBNa_flexSpacer",
|
|
162
|
+
"settingsGroupText": "F1KBNa_settingsGroupText",
|
|
163
|
+
"panelFailureRetry": "F1KBNa_panelFailureRetry",
|
|
164
|
+
"discussionCompose": "F1KBNa_discussionCompose",
|
|
153
165
|
"blockFlashShake": "F1KBNa_blockFlashShake",
|
|
154
|
-
"
|
|
155
|
-
"
|
|
166
|
+
"diffActions": "F1KBNa_diffActions",
|
|
167
|
+
"splitRdel": "F1KBNa_splitRdel",
|
|
168
|
+
"importNote": "F1KBNa_importNote",
|
|
156
169
|
"settingsRowText": "F1KBNa_settingsRowText",
|
|
157
|
-
"bulkActions": "F1KBNa_bulkActions",
|
|
158
|
-
"colorPickerPreview": "F1KBNa_colorPickerPreview",
|
|
159
|
-
"colorSv": "F1KBNa_colorSv",
|
|
160
|
-
"rowPath": "F1KBNa_rowPath",
|
|
161
170
|
"toggleOn": "F1KBNa_toggleOn",
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"
|
|
166
|
-
"expand": "F1KBNa_expand",
|
|
167
|
-
"blockActionsDivider": "F1KBNa_blockActionsDivider",
|
|
168
|
-
"headerEntryCount": "F1KBNa_headerEntryCount",
|
|
169
|
-
"fileListFloatClosing": "F1KBNa_fileListFloatClosing",
|
|
170
|
-
"discussionInput": "F1KBNa_discussionInput",
|
|
171
|
-
"delCount": "F1KBNa_delCount",
|
|
172
|
-
"mdPreviewWrap": "F1KBNa_mdPreviewWrap",
|
|
171
|
+
"divider": "F1KBNa_divider",
|
|
172
|
+
"diffBodyWrap": "F1KBNa_diffBodyWrap",
|
|
173
|
+
"coverHost": "F1KBNa_coverHost",
|
|
174
|
+
"action": "F1KBNa_action",
|
|
173
175
|
"context": "F1KBNa_context",
|
|
174
|
-
"
|
|
175
|
-
"
|
|
176
|
-
"
|
|
176
|
+
"pickerIcon": "F1KBNa_pickerIcon",
|
|
177
|
+
"diffBody": "F1KBNa_diffBody",
|
|
178
|
+
"iconAction": "F1KBNa_iconAction",
|
|
179
|
+
"rowFailed": "F1KBNa_rowFailed",
|
|
180
|
+
"settingsPage": "F1KBNa_settingsPage",
|
|
181
|
+
"colorValue": "F1KBNa_colorValue",
|
|
182
|
+
"discussionNote": "F1KBNa_discussionNote",
|
|
177
183
|
"detail": "F1KBNa_detail",
|
|
178
|
-
"
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
"
|
|
183
|
-
"
|
|
184
|
-
"
|
|
185
|
-
"
|
|
184
|
+
"coverNoticeText": "F1KBNa_coverNoticeText",
|
|
185
|
+
"pickerForm": "F1KBNa_pickerForm",
|
|
186
|
+
"del": "F1KBNa_del",
|
|
187
|
+
"splitLadd": "F1KBNa_splitLadd",
|
|
188
|
+
"pickerTitle": "F1KBNa_pickerTitle",
|
|
189
|
+
"toggleThumb": "F1KBNa_toggleThumb",
|
|
190
|
+
"pickerName": "F1KBNa_pickerName",
|
|
191
|
+
"code": "F1KBNa_code",
|
|
192
|
+
"statusAction": "F1KBNa_statusAction",
|
|
193
|
+
"confirmBackdrop": "F1KBNa_confirmBackdrop",
|
|
194
|
+
"overviewMarker": "F1KBNa_overviewMarker",
|
|
195
|
+
"mdPreviewWrap": "F1KBNa_mdPreviewWrap",
|
|
196
|
+
"splitCol": "F1KBNa_splitCol",
|
|
197
|
+
"settingsGroupDesc": "F1KBNa_settingsGroupDesc",
|
|
198
|
+
"rows": "F1KBNa_rows",
|
|
199
|
+
"chip": "F1KBNa_chip",
|
|
200
|
+
"groupHead": "F1KBNa_groupHead",
|
|
201
|
+
"colorHue": "F1KBNa_colorHue",
|
|
202
|
+
"splitRoot": "F1KBNa_splitRoot",
|
|
203
|
+
"group": "F1KBNa_group",
|
|
204
|
+
"discussionOutdated": "F1KBNa_discussionOutdated",
|
|
205
|
+
"colorPickerPopover": "F1KBNa_colorPickerPopover",
|
|
186
206
|
"searchBar": "F1KBNa_searchBar",
|
|
187
|
-
"
|
|
188
|
-
"
|
|
189
|
-
"
|
|
190
|
-
"
|
|
191
|
-
"
|
|
192
|
-
"
|
|
193
|
-
"
|
|
207
|
+
"discussionAnswer": "F1KBNa_discussionAnswer",
|
|
208
|
+
"quoteText": "F1KBNa_quoteText",
|
|
209
|
+
"mdPreviewDouble": "F1KBNa_mdPreviewDouble",
|
|
210
|
+
"readError": "F1KBNa_readError",
|
|
211
|
+
"missing": "F1KBNa_missing",
|
|
212
|
+
"actionChord": "F1KBNa_actionChord",
|
|
213
|
+
"headerEntry": "F1KBNa_headerEntry",
|
|
214
|
+
"statusBar": "F1KBNa_statusBar",
|
|
215
|
+
"panelFailureText": "F1KBNa_panelFailureText",
|
|
216
|
+
"diffStats": "F1KBNa_diffStats",
|
|
194
217
|
"langSelect": "F1KBNa_langSelect",
|
|
218
|
+
"rowDiscussed": "F1KBNa_rowDiscussed",
|
|
195
219
|
"noticeText": "F1KBNa_noticeText",
|
|
196
|
-
"
|
|
197
|
-
"
|
|
198
|
-
"
|
|
199
|
-
"
|
|
220
|
+
"colorPickerTrigger": "F1KBNa_colorPickerTrigger",
|
|
221
|
+
"diff": "F1KBNa_diff",
|
|
222
|
+
"coverNoticeFade": "F1KBNa_coverNoticeFade",
|
|
223
|
+
"actionPrimary": "F1KBNa_actionPrimary",
|
|
224
|
+
"chipPresentation": "F1KBNa_chipPresentation",
|
|
200
225
|
"diffBodySplit": "F1KBNa_diffBodySplit",
|
|
201
|
-
"
|
|
202
|
-
"badgeLabel": "F1KBNa_badgeLabel",
|
|
203
|
-
"dockHost": "F1KBNa_dockHost",
|
|
204
|
-
"stepperButtonUp": "F1KBNa_stepperButtonUp",
|
|
205
|
-
"toggleThumb": "F1KBNa_toggleThumb",
|
|
206
|
-
"actionQuietDisabled": "F1KBNa_actionQuietDisabled",
|
|
207
|
-
"blockFlash": "F1KBNa_blockFlash",
|
|
208
|
-
"discussionRow": "F1KBNa_discussionRow",
|
|
209
|
-
"pickerForm": "F1KBNa_pickerForm",
|
|
210
|
-
"group": "F1KBNa_group",
|
|
211
|
-
"coverHost": "F1KBNa_coverHost",
|
|
212
|
-
"iconAction": "F1KBNa_iconAction",
|
|
213
|
-
"expandExpanded": "F1KBNa_expandExpanded",
|
|
214
|
-
"kindHint": "F1KBNa_kindHint",
|
|
215
|
-
"colorHueCursor": "F1KBNa_colorHueCursor",
|
|
216
|
-
"fileList": "F1KBNa_fileList",
|
|
217
|
-
"rowMeta": "F1KBNa_rowMeta",
|
|
218
|
-
"settingsGroupTitle": "F1KBNa_settingsGroupTitle",
|
|
219
|
-
"addButton": "F1KBNa_addButton",
|
|
226
|
+
"colorPickerChevron": "F1KBNa_colorPickerChevron",
|
|
220
227
|
"toggle": "F1KBNa_toggle",
|
|
221
|
-
"
|
|
222
|
-
"
|
|
223
|
-
"
|
|
224
|
-
"
|
|
225
|
-
"
|
|
226
|
-
"
|
|
227
|
-
"
|
|
228
|
-
"
|
|
229
|
-
"
|
|
230
|
-
"mdPreviewBody": "F1KBNa_mdPreviewBody",
|
|
231
|
-
"detailEmpty": "F1KBNa_detailEmpty",
|
|
232
|
-
"title": "F1KBNa_title",
|
|
228
|
+
"fileListShrink": "F1KBNa_fileListShrink",
|
|
229
|
+
"pickerCard": "F1KBNa_pickerCard",
|
|
230
|
+
"split": "F1KBNa_split",
|
|
231
|
+
"discussionRange": "F1KBNa_discussionRange",
|
|
232
|
+
"presentationSelect": "F1KBNa_presentationSelect",
|
|
233
|
+
"delCount": "F1KBNa_delCount",
|
|
234
|
+
"addButton": "F1KBNa_addButton",
|
|
235
|
+
"treeCaret": "F1KBNa_treeCaret",
|
|
236
|
+
"quoteLines": "F1KBNa_quoteLines",
|
|
233
237
|
"floatResizeHandle": "F1KBNa_floatResizeHandle",
|
|
234
|
-
"
|
|
235
|
-
"
|
|
236
|
-
"
|
|
237
|
-
"
|
|
238
|
-
"fileListFloat": "F1KBNa_fileListFloat",
|
|
239
|
-
"markerDel": "F1KBNa_markerDel",
|
|
240
|
-
"confirmBackdrop": "F1KBNa_confirmBackdrop",
|
|
241
|
-
"kindTag": "F1KBNa_kindTag",
|
|
242
|
-
"addCount": "F1KBNa_addCount",
|
|
243
|
-
"discussionSend": "F1KBNa_discussionSend",
|
|
244
|
-
"panel": "F1KBNa_panel",
|
|
245
|
-
"coverButton": "F1KBNa_coverButton",
|
|
246
|
-
"panelFailureRetry": "F1KBNa_panelFailureRetry",
|
|
247
|
-
"discussionUser": "F1KBNa_discussionUser",
|
|
238
|
+
"settingsRow": "F1KBNa_settingsRow",
|
|
239
|
+
"missingHint": "F1KBNa_missingHint",
|
|
240
|
+
"mirrored": "F1KBNa_mirrored",
|
|
241
|
+
"rowPath": "F1KBNa_rowPath",
|
|
248
242
|
"splitHScrollRow": "F1KBNa_splitHScrollRow",
|
|
249
|
-
"
|
|
250
|
-
"
|
|
243
|
+
"listScroll": "F1KBNa_listScroll",
|
|
244
|
+
"splitHScrollFill": "F1KBNa_splitHScrollFill",
|
|
245
|
+
"settingsSelector": "F1KBNa_settingsSelector",
|
|
246
|
+
"settingsGroupBody": "F1KBNa_settingsGroupBody",
|
|
247
|
+
"subline": "F1KBNa_subline",
|
|
248
|
+
"rowHead": "F1KBNa_rowHead",
|
|
249
|
+
"fileListKnobIn": "F1KBNa_fileListKnobIn",
|
|
250
|
+
"discussionToggle": "F1KBNa_discussionToggle",
|
|
251
|
+
"splitRadd": "F1KBNa_splitRadd",
|
|
252
|
+
"colorBackdrop": "F1KBNa_colorBackdrop",
|
|
253
|
+
"colorSwatch": "F1KBNa_colorSwatch",
|
|
254
|
+
"searchMatch": "F1KBNa_searchMatch",
|
|
255
|
+
"langLabel": "F1KBNa_langLabel",
|
|
256
|
+
"diffPreviewTitle": "F1KBNa_diffPreviewTitle",
|
|
257
|
+
"settingsRowTitle": "F1KBNa_settingsRowTitle",
|
|
258
|
+
"divergedHint": "F1KBNa_divergedHint",
|
|
259
|
+
"blockActions": "F1KBNa_blockActions"
|
|
251
260
|
};
|
|
252
261
|
//#endregion
|
|
253
262
|
//#region lib/types/client/PathPicker.js
|
|
@@ -2808,47 +2817,143 @@ window.__ModuleLoader__.load({
|
|
|
2808
2817
|
* annotation at most, so a selection that touches an existing block offers no
|
|
2809
2818
|
* second one - otherwise two blocks would describe the same line.
|
|
2810
2819
|
*
|
|
2820
|
+
* An outdated thread owns no rows: the code under its numbers is no longer what the
|
|
2821
|
+
* comment was written about, so it cannot hold the range against a new annotation of the
|
|
2822
|
+
* code that is there now. Nothing marks those rows for it either (see the panel's band),
|
|
2823
|
+
* which is the same rule seen from the other side: a thread that no longer matches is
|
|
2824
|
+
* kept for its quote and its turns, not for its position.
|
|
2825
|
+
*
|
|
2811
2826
|
* @param discussions - the blocks currently attached to this file.
|
|
2812
2827
|
* @param anchor - the candidate range.
|
|
2813
2828
|
* @returns the overlapping discussion, or `undefined`.
|
|
2814
2829
|
*/
|
|
2815
2830
|
function discussionOverlapping(discussions, anchor) {
|
|
2816
|
-
return discussions.find((entry) => entry.anchor.start <= anchor.end && anchor.start <= entry.anchor.end);
|
|
2831
|
+
return discussions.find((entry) => entry.lost !== true && entry.anchor.start <= anchor.end && anchor.start <= entry.anchor.end);
|
|
2832
|
+
}
|
|
2833
|
+
/**
|
|
2834
|
+
* The same thread, marked as no longer sitting on the code it was written about.
|
|
2835
|
+
*
|
|
2836
|
+
* Overdue for nothing but the mark: the anchor, the quote and the turns all stay, so the
|
|
2837
|
+
* reader can still see what the comment meant. What goes is the writing row and the ownership
|
|
2838
|
+
* of the rows — there is no current code for an answer to be about.
|
|
2839
|
+
*
|
|
2840
|
+
* @param discussion - the block to mark.
|
|
2841
|
+
* @returns the marked block (the same object when it already carried the mark).
|
|
2842
|
+
*/
|
|
2843
|
+
function markOutdated(discussion) {
|
|
2844
|
+
return discussion.lost === true ? discussion : {
|
|
2845
|
+
...discussion,
|
|
2846
|
+
lost: true
|
|
2847
|
+
};
|
|
2848
|
+
}
|
|
2849
|
+
/**
|
|
2850
|
+
* The same thread with the outdated mark cleared, once the code it names holds its quote
|
|
2851
|
+
* again (a revert followed by a keep brings the lines back).
|
|
2852
|
+
*
|
|
2853
|
+
* @param discussion - the block to clear.
|
|
2854
|
+
* @returns the cleared block (the same object when it carried no mark).
|
|
2855
|
+
*/
|
|
2856
|
+
function clearOutdated(discussion) {
|
|
2857
|
+
if (discussion.lost !== true) return discussion;
|
|
2858
|
+
const next = { ...discussion };
|
|
2859
|
+
delete next.lost;
|
|
2860
|
+
return next;
|
|
2817
2861
|
}
|
|
2818
2862
|
/**
|
|
2819
|
-
* Re-anchor one discussion against the current rows
|
|
2820
|
-
*
|
|
2821
|
-
*
|
|
2822
|
-
*
|
|
2863
|
+
* Re-anchor one discussion against the current rows.
|
|
2864
|
+
*
|
|
2865
|
+
* The anchor's new-file line numbers are what a rebuild moves; the quote the thread carries
|
|
2866
|
+
* is what says whether they still hold the code the comment was written about. When they do
|
|
2867
|
+
* not — the lines were edited under it, or the hunk moved — the quote is looked for elsewhere
|
|
2868
|
+
* in the model and the thread follows it, nearest occurrence first when the same code shows up
|
|
2869
|
+
* more than once. When nothing matches, the block keeps the rows it last matched and is marked
|
|
2870
|
+
* outdated: it says so and keeps its quote for the reader, rather than being silently moved
|
|
2871
|
+
* onto whatever took those lines. Only when the whole range is gone from the model does the
|
|
2872
|
+
* block move, and then by line number, back to where the range used to be (see `gone`). The mark
|
|
2873
|
+
* is derived, not sticky — the lines coming back with their quote clears it (GitHub recomputes
|
|
2874
|
+
* `isOutdated` the same way).
|
|
2823
2875
|
*
|
|
2824
2876
|
* @param discussion - the block to re-anchor.
|
|
2825
2877
|
* @param lineOf - the new-file line number of a row, or `undefined` for a row that has none.
|
|
2878
|
+
* @param textOf - the text of a row, for the quote comparison.
|
|
2826
2879
|
* @param rowCount - how many rows the current model has.
|
|
2827
2880
|
* @returns the re-anchored discussion (the same object when nothing moved).
|
|
2828
2881
|
*/
|
|
2829
|
-
function remapDiscussion(discussion, lineOf, rowCount) {
|
|
2830
|
-
|
|
2882
|
+
function remapDiscussion(discussion, lineOf, textOf, rowCount) {
|
|
2883
|
+
const { startLine, endLine } = discussion.anchor;
|
|
2831
2884
|
let start = -1;
|
|
2832
2885
|
let end = -1;
|
|
2886
|
+
let before = -1;
|
|
2833
2887
|
for (let row = 0; row < rowCount; row++) {
|
|
2834
2888
|
const line = lineOf(row);
|
|
2835
|
-
if (line === void 0
|
|
2889
|
+
if (line === void 0) continue;
|
|
2890
|
+
if (line < startLine) {
|
|
2891
|
+
before = row;
|
|
2892
|
+
continue;
|
|
2893
|
+
}
|
|
2894
|
+
if (line > endLine) continue;
|
|
2836
2895
|
if (start === -1) start = row;
|
|
2837
2896
|
end = row;
|
|
2838
2897
|
}
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2898
|
+
const quote = discussion.quote;
|
|
2899
|
+
const span = Math.max(0, endLine - startLine);
|
|
2900
|
+
const textAt = (row) => {
|
|
2901
|
+
const parts = [];
|
|
2902
|
+
for (let index = row; index <= row + span; index++) parts.push(index < rowCount ? textOf(index) : "");
|
|
2903
|
+
return parts.join("\n");
|
|
2842
2904
|
};
|
|
2843
|
-
|
|
2844
|
-
|
|
2905
|
+
/**
|
|
2906
|
+
* The block with no row of its range left in the model: marked outdated, and hung where the
|
|
2907
|
+
* range used to be — just below the last row that still reads before its first line.
|
|
2908
|
+
*
|
|
2909
|
+
* The row index it last matched is not used for that: it is a row index, so every edit above
|
|
2910
|
+
* the block shifts what it points at, and the panel clamps it to the file's last row once the
|
|
2911
|
+
* file is shorter than it — which is how a comment ends up at the bottom of the file with
|
|
2912
|
+
* nothing to do with where it was written. The line numbers stay exactly as they were: they are
|
|
2913
|
+
* the original position, and the header keeps showing them.
|
|
2914
|
+
*
|
|
2915
|
+
* @returns the block, marked and re-hung (the same object when it was already there).
|
|
2916
|
+
*/
|
|
2917
|
+
const gone = () => {
|
|
2918
|
+
const row = Math.max(0, before);
|
|
2919
|
+
if (discussion.lost === true && discussion.anchor.start === row && discussion.anchor.end === row) return discussion;
|
|
2920
|
+
return markOutdated({
|
|
2921
|
+
...discussion,
|
|
2922
|
+
anchor: {
|
|
2923
|
+
...discussion.anchor,
|
|
2924
|
+
start: row,
|
|
2925
|
+
end: row
|
|
2926
|
+
}
|
|
2927
|
+
});
|
|
2928
|
+
};
|
|
2929
|
+
if (quote === void 0 || quote === "" || start !== -1 && textAt(start) === quote) {
|
|
2930
|
+
if (start === -1) return gone();
|
|
2931
|
+
if (start === discussion.anchor.start && end === discussion.anchor.end) return clearOutdated(discussion);
|
|
2932
|
+
return clearOutdated({
|
|
2933
|
+
...discussion,
|
|
2934
|
+
anchor: {
|
|
2935
|
+
...discussion.anchor,
|
|
2936
|
+
start,
|
|
2937
|
+
end
|
|
2938
|
+
}
|
|
2939
|
+
});
|
|
2940
|
+
}
|
|
2941
|
+
let found = -1;
|
|
2942
|
+
for (let row = 0; row + span < rowCount; row++) {
|
|
2943
|
+
if (textAt(row) !== quote) continue;
|
|
2944
|
+
if (found === -1 || Math.abs(row - start) < Math.abs(found - start)) found = row;
|
|
2945
|
+
}
|
|
2946
|
+
if (found === -1) return start === -1 ? gone() : markOutdated(discussion);
|
|
2947
|
+
return clearOutdated({
|
|
2845
2948
|
...discussion,
|
|
2846
2949
|
anchor: {
|
|
2847
2950
|
...discussion.anchor,
|
|
2848
|
-
start,
|
|
2849
|
-
end
|
|
2951
|
+
start: found,
|
|
2952
|
+
end: found + span,
|
|
2953
|
+
startLine: lineOf(found) ?? startLine,
|
|
2954
|
+
endLine: lineOf(found + span) ?? endLine
|
|
2850
2955
|
}
|
|
2851
|
-
};
|
|
2956
|
+
});
|
|
2852
2957
|
}
|
|
2853
2958
|
/**
|
|
2854
2959
|
* Decide the selection frame's contents.
|
|
@@ -19198,6 +19303,34 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
19198
19303
|
* @module dsh-diff-approval/client/panel-memory
|
|
19199
19304
|
*/
|
|
19200
19305
|
const views = /* @__PURE__ */ new Map();
|
|
19306
|
+
/**
|
|
19307
|
+
* One session's comment threads, by pending entry id.
|
|
19308
|
+
*
|
|
19309
|
+
* A thread is not a preference and not the host's to keep: it is what this visit put on the
|
|
19310
|
+
* diff, and the panel unmounts whenever it is closed or its presentation changes (the
|
|
19311
|
+
* floating overlay and the docked tab are two mounts). Module state gives them one memory,
|
|
19312
|
+
* so the threads are still there when the panel comes back, and a page reload starts clean -
|
|
19313
|
+
* which is the lifetime the comments are supposed to have.
|
|
19314
|
+
*/
|
|
19315
|
+
const threads = /* @__PURE__ */ new Map();
|
|
19316
|
+
/**
|
|
19317
|
+
* The comment threads a session's panel is holding.
|
|
19318
|
+
* @param sessionId - the session, if any.
|
|
19319
|
+
* @returns the threads by pending entry id; empty when there are none.
|
|
19320
|
+
*/
|
|
19321
|
+
function rememberedDiscussions(sessionId) {
|
|
19322
|
+
return sessionId === void 0 ? {} : threads.get(sessionId) ?? {};
|
|
19323
|
+
}
|
|
19324
|
+
/**
|
|
19325
|
+
* Remember the comment threads a session's panel holds. Called on every change, so a mount
|
|
19326
|
+
* that appears later (another presentation, or the panel reopened) starts from them.
|
|
19327
|
+
* @param sessionId - the session the panel is reviewing; nothing is recorded without one.
|
|
19328
|
+
* @param byFile - the threads, by pending entry id.
|
|
19329
|
+
*/
|
|
19330
|
+
function rememberDiscussions(sessionId, byFile) {
|
|
19331
|
+
if (sessionId === void 0) return;
|
|
19332
|
+
threads.set(sessionId, byFile);
|
|
19333
|
+
}
|
|
19201
19334
|
/** This session's record, created on first use. */
|
|
19202
19335
|
function viewOf(sessionId) {
|
|
19203
19336
|
let view = views.get(sessionId);
|
|
@@ -19431,6 +19564,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
19431
19564
|
const MAX_LIST_WIDTH_PX = 560;
|
|
19432
19565
|
/** Inset of the floating file-list card from the code scroll box, in px. */
|
|
19433
19566
|
const FLOAT_LIST_MARGIN_PX = 12;
|
|
19567
|
+
/** How far the list's rows sit from the right edge of whichever card holds them, in px — a fixed
|
|
19568
|
+
* number on every platform, which is why the scroller's own padding makes up whatever the
|
|
19569
|
+
* platform's scrollbar has already taken (see `applyListInset`). */
|
|
19570
|
+
const LIST_RIGHT_INSET_PX = 8;
|
|
19434
19571
|
/** The folded card's width grip: how wide its hit strip is, and how much of it
|
|
19435
19572
|
* lies over the card (the rest overhangs the code view, so the card's own
|
|
19436
19573
|
* scrollbar strip stays clear). */
|
|
@@ -19904,6 +20041,73 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
19904
20041
|
}
|
|
19905
20042
|
return nodes.length === 0 ? "\xA0" : nodes;
|
|
19906
20043
|
}
|
|
20044
|
+
/**
|
|
20045
|
+
* The code an outdated thread was written about.
|
|
20046
|
+
*
|
|
20047
|
+
* Laid out as the file's own rows are: the same two 44px gutters — with the numbers the lines
|
|
20048
|
+
* had — then the code column, so the quote sits on the file's columns rather than in a box of
|
|
20049
|
+
* its own. Highlighted with the same highlighter the rows use, on the language the file is read
|
|
20050
|
+
* in: a quote of code that renders as grey prose three rows under coloured code reads as a
|
|
20051
|
+
* different kind of thing. No search hits either — those belong to the file, and the quote is
|
|
20052
|
+
* not in it. The tokenize is memoised per quote and language, and the window is exactly the
|
|
20053
|
+
* quote, so a long one is one bounded job; an unknown language comes back plain.
|
|
20054
|
+
*
|
|
20055
|
+
* @param props.quote - the code, one line per `\n`.
|
|
20056
|
+
* @param props.lines - each line's gutter pair, in the same order.
|
|
20057
|
+
* @param props.lang - the grammar id the file is read in, or `undefined` for plain text.
|
|
20058
|
+
* @param props.wrap - the code view's wrap setting: off, the quote is one line per quoted line,
|
|
20059
|
+
* as the file renders it.
|
|
20060
|
+
*/
|
|
20061
|
+
function DiscussionQuote({ quote, lines, lang, wrap }) {
|
|
20062
|
+
const rows = (0, react.useMemo)(() => {
|
|
20063
|
+
const texts = quote.split("\n");
|
|
20064
|
+
const runs = highlightWindow(texts, lang, 0, texts.length)?.runs;
|
|
20065
|
+
return texts.map((text, index) => {
|
|
20066
|
+
const lineRuns = runs?.[index];
|
|
20067
|
+
const content = [];
|
|
20068
|
+
if (lineRuns === void 0) content.push(text);
|
|
20069
|
+
else for (const run of lineRuns) content.push((0, react_jsx_runtime.jsx)("span", {
|
|
20070
|
+
style: run.style,
|
|
20071
|
+
children: run.text
|
|
20072
|
+
}, content.length));
|
|
20073
|
+
return {
|
|
20074
|
+
content,
|
|
20075
|
+
gutter: lines?.[index]
|
|
20076
|
+
};
|
|
20077
|
+
});
|
|
20078
|
+
}, [
|
|
20079
|
+
quote,
|
|
20080
|
+
lines,
|
|
20081
|
+
lang
|
|
20082
|
+
]);
|
|
20083
|
+
return (0, react_jsx_runtime.jsx)("div", {
|
|
20084
|
+
className: `${PendingPanel_module_css_default.quoteLines}${wrap ? "" : " " + PendingPanel_module_css_default.quoteNoWrap}`,
|
|
20085
|
+
"data-diff-discussion-quote": true,
|
|
20086
|
+
children: rows.map((row, index) => (0, react_jsx_runtime.jsxs)("div", {
|
|
20087
|
+
className: PendingPanel_module_css_default.quoteLine,
|
|
20088
|
+
children: [
|
|
20089
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
20090
|
+
className: PendingPanel_module_css_default.gutter,
|
|
20091
|
+
"data-diff-quote-gutter": true,
|
|
20092
|
+
children: row.gutter?.old ?? ""
|
|
20093
|
+
}),
|
|
20094
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
20095
|
+
className: PendingPanel_module_css_default.gutter,
|
|
20096
|
+
"data-diff-quote-gutter": true,
|
|
20097
|
+
children: row.gutter?.new ?? ""
|
|
20098
|
+
}),
|
|
20099
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
20100
|
+
className: PendingPanel_module_css_default.quoteCode,
|
|
20101
|
+
children: (0, react_jsx_runtime.jsx)("span", {
|
|
20102
|
+
className: PendingPanel_module_css_default.quoteText,
|
|
20103
|
+
"data-diff-quote-text": true,
|
|
20104
|
+
children: row.content
|
|
20105
|
+
})
|
|
20106
|
+
})
|
|
20107
|
+
]
|
|
20108
|
+
}, index))
|
|
20109
|
+
});
|
|
20110
|
+
}
|
|
19907
20111
|
/** Chip styling for each intra-line run: removed chars and added chars stand out. */
|
|
19908
20112
|
const INTRA_CLASS = {
|
|
19909
20113
|
same: void 0,
|
|
@@ -21366,7 +21570,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
21366
21570
|
const [hoveredBlock, setHoveredBlock] = (0, react.useState)(void 0);
|
|
21367
21571
|
const [selection, setSelection] = (0, react.useState)(void 0);
|
|
21368
21572
|
const [commentMode, setCommentMode] = (0, react.useState)(commentModeEnabled);
|
|
21369
|
-
const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)(
|
|
21573
|
+
const [discussionsByFile, setDiscussionsByFile] = (0, react.useState)(() => rememberedDiscussions(file.sessionId));
|
|
21370
21574
|
const discussions = discussionsByFile[file.id] ?? EMPTY_DISCUSSIONS;
|
|
21371
21575
|
const setDiscussions = (update) => {
|
|
21372
21576
|
setDiscussionsByFile((all) => ({
|
|
@@ -21378,7 +21582,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
21378
21582
|
const [discussionMenuFor, setDiscussionMenuFor] = (0, react.useState)(void 0);
|
|
21379
21583
|
const discussionMenuItems = (0, react.useMemo)(() => [{
|
|
21380
21584
|
id: "delete",
|
|
21381
|
-
label: t("action.
|
|
21585
|
+
label: t("action.discussionEnd")
|
|
21382
21586
|
}], [t]);
|
|
21383
21587
|
/** The session's chat, watched so a discussion can show the answer it asked for. */
|
|
21384
21588
|
const [chat, setChat] = (0, react.useState)({
|
|
@@ -21957,16 +22161,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
21957
22161
|
*
|
|
21958
22162
|
* @param text - the message text.
|
|
21959
22163
|
* @param role - who said it: the two sides wrap at different widths.
|
|
22164
|
+
* @param widthPx - the exact width the text wraps in, when the caller lays it out somewhere
|
|
22165
|
+
* other than the thread's own column (the quote's code cell, which sits behind the file's two
|
|
22166
|
+
* gutters). Omitted, the turn's own column is used — and a bubble ignores it, since a bubble
|
|
22167
|
+
* wraps at its own percentage regardless.
|
|
21960
22168
|
* @returns the occupied row count (whole: a bubble's chrome is a whole row).
|
|
21961
22169
|
*/
|
|
21962
|
-
const messageRowsOf = (0, react.useCallback)((text, role) => {
|
|
22170
|
+
const messageRowsOf = (0, react.useCallback)((text, role, widthPx) => {
|
|
21963
22171
|
const lines = text.split("\n");
|
|
21964
22172
|
const bubble = role === "user";
|
|
21965
22173
|
const chrome = bubble ? 1 : 0;
|
|
21966
22174
|
const measure = makeMeasurer(codeFontOf());
|
|
21967
22175
|
if (measure === void 0 || bodyWidth === 0) return lines.length + chrome;
|
|
21968
22176
|
const body = Math.max(0, bodyWidth - discussionRightInsetPx - 3 - 24);
|
|
21969
|
-
const wrapping = (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * ROW_HEIGHT_PX : body) - measure("0");
|
|
22177
|
+
const wrapping = (widthPx ?? (bubble ? body * DISCUSSION_BUBBLE_MAX_WIDTH - 2 * DISCUSSION_BUBBLE_SIDE_PADDING_ROWS * ROW_HEIGHT_PX : body)) - measure("0");
|
|
21970
22178
|
if (wrapping <= 0) return lines.length + chrome;
|
|
21971
22179
|
const tabPx = tabWidthSpaces * measure(" ");
|
|
21972
22180
|
return chrome + lines.reduce((rows, line) => rows + Math.max(1, wrapInto(line, wrapping, measure, tabPx).length), 0);
|
|
@@ -21976,6 +22184,25 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
21976
22184
|
discussionRightInsetPx
|
|
21977
22185
|
]);
|
|
21978
22186
|
/**
|
|
22187
|
+
* How many rows the quote of an outdated thread occupies: the code as it wraps in its own
|
|
22188
|
+
* code cell, which is the block's full width less the two gutters the quote lays out in. It
|
|
22189
|
+
* carries no chrome of its own — no box, no padding — so the count is the wrapped lines.
|
|
22190
|
+
*
|
|
22191
|
+
* @param quote - the code the thread was written about.
|
|
22192
|
+
* @param wrap - the code view's wrap setting: off, no line wraps, so the quote is exactly one
|
|
22193
|
+
* row per quoted line whatever the width.
|
|
22194
|
+
* @returns the occupied row count (whole).
|
|
22195
|
+
*/
|
|
22196
|
+
const quoteRowsOf = (0, react.useCallback)((quote, wrap) => {
|
|
22197
|
+
if (!wrap) return quote.split("\n").length;
|
|
22198
|
+
const width = Math.max(0, bodyWidth - discussionRightInsetPx) - WRAP_GUTTERS_PX;
|
|
22199
|
+
return messageRowsOf(quote, "assistant", width);
|
|
22200
|
+
}, [
|
|
22201
|
+
bodyWidth,
|
|
22202
|
+
discussionRightInsetPx,
|
|
22203
|
+
messageRowsOf
|
|
22204
|
+
]);
|
|
22205
|
+
/**
|
|
21979
22206
|
* The size one rendered message needs in code rows: its wrapped lines plus its own
|
|
21980
22207
|
* padding — which for a bubble is exactly one row (half a row above, half below).
|
|
21981
22208
|
* Every turn is therefore a whole number of rows and the thread stays on the code's
|
|
@@ -21990,7 +22217,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
21990
22217
|
/**
|
|
21991
22218
|
* The thread as the block will render it, plus the body height that follows from
|
|
21992
22219
|
* it: the newest turns that fit the cap, an optional "older" note, the answer in
|
|
21993
|
-
* flight (or the failure note), and the compose row the user writes in.
|
|
22220
|
+
* flight (or the failure note), and the compose row the user writes in. An outdated
|
|
22221
|
+
* block's note and quote count as part of the trailing piece, above the turns.
|
|
21994
22222
|
*
|
|
21995
22223
|
* @param discussion - the block to lay out.
|
|
21996
22224
|
* @returns the messages to render, the hidden count, and the body height.
|
|
@@ -21998,18 +22226,22 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
21998
22226
|
const layoutDiscussion = (0, react.useCallback)((discussion) => {
|
|
21999
22227
|
const answer = discussion.reply === void 0 ? void 0 : stripBlankLines(discussion.reply);
|
|
22000
22228
|
const stoppedNote = discussion.stopped === true && (answer === void 0 || answer === "") && discussion.failed !== true;
|
|
22001
|
-
const trailing = discussion.lost === true ? 1 : answer !== void 0 && answer !== "" ? messageSizeOf({
|
|
22229
|
+
const trailing = (discussion.lost === true && discussion.quote !== void 0 && discussion.quote !== "" ? 1 + quoteRowsOf(discussion.quote, langWrap) : 0) + (answer !== void 0 && answer !== "" ? messageSizeOf({
|
|
22002
22230
|
role: "assistant",
|
|
22003
22231
|
text: answer
|
|
22004
|
-
}) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0);
|
|
22005
|
-
const tailCap = 12 - trailing
|
|
22232
|
+
}) : discussion.failed === true || discussion.asking === true ? 1 : 2 + (stoppedNote ? 1 : 0));
|
|
22233
|
+
const tailCap = 12 - trailing;
|
|
22006
22234
|
const tail = discussionTail(discussion.messages, messageSizeOf, Math.max(1, tailCap));
|
|
22007
22235
|
return {
|
|
22008
22236
|
messages: tail.messages,
|
|
22009
22237
|
hidden: tail.hidden,
|
|
22010
22238
|
rows: Math.ceil(tail.rows + trailing)
|
|
22011
22239
|
};
|
|
22012
|
-
}, [
|
|
22240
|
+
}, [
|
|
22241
|
+
langWrap,
|
|
22242
|
+
quoteRowsOf,
|
|
22243
|
+
messageSizeOf
|
|
22244
|
+
]);
|
|
22013
22245
|
/**
|
|
22014
22246
|
* The discussions as the render will draw them: the body height the measurement
|
|
22015
22247
|
* above arrived at, the turns it kept, and the text those turns actually show.
|
|
@@ -22044,11 +22276,18 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22044
22276
|
/**
|
|
22045
22277
|
* The rows a discussion annotates. They carry their own wash, so the mark scrolls with
|
|
22046
22278
|
* the code in both axes with no positioning at all — the overlay this replaces had to
|
|
22047
|
-
* be counter-translated on every horizontal scroll and trailed the text.
|
|
22279
|
+
* be counter-translated on every horizontal scroll and trailed the text. An outdated
|
|
22280
|
+
* block washes nothing: the rows under its numbers are no longer the code the comment
|
|
22281
|
+
* was written about, so a band there would claim them as annotated (GitHub drops the
|
|
22282
|
+
* position of an outdated thread the same way). It says it is outdated and shows the
|
|
22283
|
+
* code it was about instead.
|
|
22048
22284
|
*/
|
|
22049
22285
|
const discussedRows = (0, react.useMemo)(() => {
|
|
22050
22286
|
const set = /* @__PURE__ */ new Set();
|
|
22051
|
-
for (const discussion of laidDiscussions)
|
|
22287
|
+
for (const discussion of laidDiscussions) {
|
|
22288
|
+
if (discussion.lost === true) continue;
|
|
22289
|
+
for (let row = Math.max(0, discussion.anchor.start); row <= Math.min(discussion.anchor.end, rowCount - 1); row++) set.add(row);
|
|
22290
|
+
}
|
|
22052
22291
|
return set;
|
|
22053
22292
|
}, [laidDiscussions, rowCount]);
|
|
22054
22293
|
const rowHeights = (0, react.useMemo)(() => {
|
|
@@ -22101,6 +22340,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22101
22340
|
body.scrollTop += shift;
|
|
22102
22341
|
setScrollTop(body.scrollTop);
|
|
22103
22342
|
}, [discussions]);
|
|
22343
|
+
(0, react.useEffect)(() => {
|
|
22344
|
+
rememberDiscussions(file.sessionId, discussionsByFile);
|
|
22345
|
+
}, [file.sessionId, discussionsByFile]);
|
|
22104
22346
|
/** Patch one discussion in place, without touching the others or the file key. */
|
|
22105
22347
|
const updateDiscussion = (0, react.useCallback)((id, patch) => {
|
|
22106
22348
|
setDiscussionsByFile((all) => {
|
|
@@ -22114,6 +22356,21 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22114
22356
|
};
|
|
22115
22357
|
});
|
|
22116
22358
|
}, [file.id]);
|
|
22359
|
+
(0, react.useEffect)(() => {
|
|
22360
|
+
if (pendingAskRef.current !== void 0) return;
|
|
22361
|
+
const waiting = discussions.filter((entry) => entry.asking === true).at(-1);
|
|
22362
|
+
if (waiting === void 0) return;
|
|
22363
|
+
const baseline = waiting.baseline;
|
|
22364
|
+
if (baseline === void 0) return;
|
|
22365
|
+
const question = [...waiting.messages].reverse().find((message) => message.role === "user");
|
|
22366
|
+
if (question === void 0) return;
|
|
22367
|
+
const marker = `${t("discussion.marker")} (${discussionLineRange(waiting.anchor)})`;
|
|
22368
|
+
pendingAskRef.current = {
|
|
22369
|
+
id: waiting.id,
|
|
22370
|
+
baseline,
|
|
22371
|
+
needle: `${marker}\n${question.text.split("\n")[0] ?? ""}`
|
|
22372
|
+
};
|
|
22373
|
+
}, []);
|
|
22117
22374
|
const watchChatRef = (0, react.useRef)(watchChat);
|
|
22118
22375
|
watchChatRef.current = watchChat;
|
|
22119
22376
|
(0, react.useEffect)(() => {
|
|
@@ -22204,7 +22461,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22204
22461
|
if (!ours) {
|
|
22205
22462
|
updateDiscussion(pending.id, {
|
|
22206
22463
|
asking: true,
|
|
22207
|
-
queued:
|
|
22464
|
+
queued: held !== false,
|
|
22208
22465
|
failed: false,
|
|
22209
22466
|
reply: ""
|
|
22210
22467
|
});
|
|
@@ -22212,7 +22469,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22212
22469
|
}
|
|
22213
22470
|
clearRelease();
|
|
22214
22471
|
const streaming = chat.partial !== "" ? chat.partial : settled;
|
|
22215
|
-
|
|
22472
|
+
updateDiscussion(pending.id, {
|
|
22216
22473
|
asking: true,
|
|
22217
22474
|
queued: false,
|
|
22218
22475
|
failed: false,
|
|
@@ -22267,9 +22524,10 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22267
22524
|
]);
|
|
22268
22525
|
/**
|
|
22269
22526
|
* Re-anchor every block whenever the rows are rebuilt (a keep/revert or an edit
|
|
22270
|
-
* rewrites them). The anchor's new-file lines are what survive
|
|
22271
|
-
*
|
|
22272
|
-
*
|
|
22527
|
+
* rewrites them). The anchor's new-file lines are what survive, and the block's quote
|
|
22528
|
+
* is what says whether they still hold the code it was written about: when they do
|
|
22529
|
+
* not, the thread follows the quote instead, and when even that finds nothing it is
|
|
22530
|
+
* marked outdated — it stays where the user last saw it, says so, and keeps the quote.
|
|
22273
22531
|
*/
|
|
22274
22532
|
(0, react.useEffect)(() => {
|
|
22275
22533
|
setDiscussionsByFile((all) => {
|
|
@@ -22277,7 +22535,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22277
22535
|
const next = list.map((discussion) => remapDiscussion(discussion, (row) => {
|
|
22278
22536
|
const entry = model.diff.rows[row];
|
|
22279
22537
|
return entry?.newLine ?? entry?.oldLine;
|
|
22280
|
-
}, model.diff.rows.length));
|
|
22538
|
+
}, (row) => model.diff.rows[row]?.text ?? "", model.diff.rows.length));
|
|
22281
22539
|
return next.some((discussion, index) => discussion !== list[index]) ? {
|
|
22282
22540
|
...all,
|
|
22283
22541
|
[file.id]: next
|
|
@@ -22341,6 +22599,12 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22341
22599
|
const body = bodyRef.current;
|
|
22342
22600
|
if (body !== null && offsetOf(selection.start) - body.scrollTop < 0) pendingScrollShiftRef.current += 3 * ROW_HEIGHT_PX;
|
|
22343
22601
|
const id = `discussion-${Date.now().toString(36)}-${discussions.length}`;
|
|
22602
|
+
const quoted = model.diff.rows.slice(selection.start, selection.end + 1);
|
|
22603
|
+
const quote = quoted.map((row) => row.text).join("\n");
|
|
22604
|
+
const quoteLines = quoted.map((row) => ({
|
|
22605
|
+
old: row.oldLine,
|
|
22606
|
+
new: row.newLine
|
|
22607
|
+
}));
|
|
22344
22608
|
setDiscussions((current) => [...current, {
|
|
22345
22609
|
id,
|
|
22346
22610
|
anchor: {
|
|
@@ -22349,6 +22613,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22349
22613
|
startLine,
|
|
22350
22614
|
endLine
|
|
22351
22615
|
},
|
|
22616
|
+
quote,
|
|
22617
|
+
quoteLines,
|
|
22352
22618
|
messages: [],
|
|
22353
22619
|
draft: "",
|
|
22354
22620
|
collapsed: false
|
|
@@ -22431,7 +22697,8 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22431
22697
|
queued: false,
|
|
22432
22698
|
failed: false,
|
|
22433
22699
|
reply: "",
|
|
22434
|
-
collapsed: false
|
|
22700
|
+
collapsed: false,
|
|
22701
|
+
baseline: chat.nodes.length
|
|
22435
22702
|
} : entry));
|
|
22436
22703
|
};
|
|
22437
22704
|
/** Discard one block, keeping the code the user is reading in place. */
|
|
@@ -22814,6 +23081,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
22814
23081
|
}) : void 0;
|
|
22815
23082
|
const selectionCommentOffered = commentMode && frameForSelection?.comment === true;
|
|
22816
23083
|
const selectionFrameVisible = frameForSelection !== void 0 && (frameForSelection.keepRevert || selectionCommentOffered);
|
|
23084
|
+
const commentChord = chordLabel$1("addComment");
|
|
22817
23085
|
(0, react.useEffect)(() => {
|
|
22818
23086
|
if (!selectionCommentOffered) return;
|
|
22819
23087
|
const onKeyDown = (event) => {
|
|
@@ -23521,13 +23789,17 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
23521
23789
|
},
|
|
23522
23790
|
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 })
|
|
23523
23791
|
}),
|
|
23524
|
-
(0, react_jsx_runtime.
|
|
23792
|
+
(0, react_jsx_runtime.jsxs)("span", {
|
|
23525
23793
|
className: PendingPanel_module_css_default.discussionRangeWrap,
|
|
23526
|
-
children: (0, react_jsx_runtime.jsx)("span", {
|
|
23794
|
+
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
23527
23795
|
className: PendingPanel_module_css_default.discussionRange,
|
|
23528
23796
|
"data-diff-discussion-range": true,
|
|
23529
23797
|
children: discussionLineRange(discussion.anchor)
|
|
23530
|
-
})
|
|
23798
|
+
}), discussion.lost === true && (0, react_jsx_runtime.jsx)("span", {
|
|
23799
|
+
className: PendingPanel_module_css_default.discussionOutdated,
|
|
23800
|
+
"data-diff-discussion-outdated": true,
|
|
23801
|
+
children: t("discussion.outdated")
|
|
23802
|
+
})]
|
|
23531
23803
|
}),
|
|
23532
23804
|
(0, react_jsx_runtime.jsx)("span", { className: PendingPanel_module_css_default.flexSpacer }),
|
|
23533
23805
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
@@ -23558,11 +23830,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
23558
23830
|
}), !discussion.collapsed && (0, react_jsx_runtime.jsxs)("div", {
|
|
23559
23831
|
className: PendingPanel_module_css_default.discussionBody,
|
|
23560
23832
|
children: [
|
|
23561
|
-
discussion.lost === true && (0, react_jsx_runtime.jsx)("p", {
|
|
23833
|
+
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", {
|
|
23562
23834
|
className: PendingPanel_module_css_default.discussionNote,
|
|
23563
|
-
"data-diff-discussion-
|
|
23564
|
-
children: t("discussion.
|
|
23565
|
-
}),
|
|
23835
|
+
"data-diff-discussion-quote-label": true,
|
|
23836
|
+
children: t("discussion.quote")
|
|
23837
|
+
}), (0, react_jsx_runtime.jsx)(DiscussionQuote, {
|
|
23838
|
+
quote: discussion.quote,
|
|
23839
|
+
lines: discussion.quoteLines,
|
|
23840
|
+
lang,
|
|
23841
|
+
wrap: langWrap
|
|
23842
|
+
})] }),
|
|
23566
23843
|
discussion.hidden !== void 0 && discussion.hidden > 0 && (0, react_jsx_runtime.jsx)("p", {
|
|
23567
23844
|
className: PendingPanel_module_css_default.discussionNote,
|
|
23568
23845
|
"data-diff-discussion-hidden": true,
|
|
@@ -23586,25 +23863,35 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
23586
23863
|
className: PendingPanel_module_css_default.discussionAnswer,
|
|
23587
23864
|
"data-diff-discussion-reply": true,
|
|
23588
23865
|
children: discussion.reply
|
|
23589
|
-
}) : discussion.
|
|
23866
|
+
}) : discussion.failed === true ? (0, react_jsx_runtime.jsx)("p", {
|
|
23590
23867
|
className: PendingPanel_module_css_default.discussionNote,
|
|
23591
23868
|
"data-diff-discussion-failed": true,
|
|
23592
23869
|
children: t("discussion.failed")
|
|
23593
|
-
}) : discussion.asking === true ? (0, react_jsx_runtime.
|
|
23870
|
+
}) : discussion.asking === true ? (0, react_jsx_runtime.jsxs)("p", {
|
|
23594
23871
|
className: PendingPanel_module_css_default.discussionNote,
|
|
23595
23872
|
"data-diff-discussion-asking": true,
|
|
23596
|
-
children: discussion.queued === true ? t("discussion.queued") : t("discussion.thinking")
|
|
23873
|
+
children: [discussion.queued === true ? t("discussion.queued") : t("discussion.thinking"), (0, react_jsx_runtime.jsxs)("span", {
|
|
23874
|
+
className: PendingPanel_module_css_default.discussionDots,
|
|
23875
|
+
"data-diff-discussion-dots": true,
|
|
23876
|
+
"aria-hidden": "true",
|
|
23877
|
+
children: [
|
|
23878
|
+
(0, react_jsx_runtime.jsx)("span", { children: "." }),
|
|
23879
|
+
(0, react_jsx_runtime.jsx)("span", { children: "." }),
|
|
23880
|
+
(0, react_jsx_runtime.jsx)("span", { children: "." })
|
|
23881
|
+
]
|
|
23882
|
+
})]
|
|
23597
23883
|
}) : (0, react_jsx_runtime.jsxs)("div", {
|
|
23598
23884
|
className: PendingPanel_module_css_default.discussionCompose,
|
|
23599
23885
|
children: [(0, react_jsx_runtime.jsx)("input", {
|
|
23600
23886
|
className: PendingPanel_module_css_default.discussionInput,
|
|
23601
23887
|
"data-diff-discussion-input": true,
|
|
23888
|
+
disabled: discussion.lost === true,
|
|
23602
23889
|
ref: (element) => {
|
|
23603
23890
|
if (element === null) discussionInputEls.current.delete(discussion.id);
|
|
23604
23891
|
else discussionInputEls.current.set(discussion.id, element);
|
|
23605
23892
|
},
|
|
23606
23893
|
value: discussion.draft,
|
|
23607
|
-
placeholder: t("discussion.placeholder"),
|
|
23894
|
+
placeholder: t(discussion.lost === true ? "discussion.placeholderOutdated" : "discussion.placeholder"),
|
|
23608
23895
|
onChange: (event) => {
|
|
23609
23896
|
const value = event.target.value;
|
|
23610
23897
|
setDiscussions((current) => current.map((entry) => entry.id === discussion.id ? {
|
|
@@ -23622,6 +23909,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
23622
23909
|
type: "button",
|
|
23623
23910
|
className: `${PendingPanel_module_css_default.action} ${PendingPanel_module_css_default.actionPrimary} ${PendingPanel_module_css_default.discussionSend}`,
|
|
23624
23911
|
"data-diff-discussion-send": true,
|
|
23912
|
+
disabled: discussion.lost === true,
|
|
23625
23913
|
onClick: () => {
|
|
23626
23914
|
sendDiscussion(discussion.id);
|
|
23627
23915
|
},
|
|
@@ -23678,17 +23966,16 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
23678
23966
|
"data-diff-selection-divider": true,
|
|
23679
23967
|
"aria-hidden": "true"
|
|
23680
23968
|
}),
|
|
23681
|
-
selectionCommentOffered && (0, react_jsx_runtime.
|
|
23682
|
-
|
|
23683
|
-
|
|
23684
|
-
|
|
23685
|
-
|
|
23686
|
-
|
|
23687
|
-
className: PendingPanel_module_css_default.
|
|
23688
|
-
"data-diff-selection-comment": true,
|
|
23689
|
-
|
|
23690
|
-
|
|
23691
|
-
})
|
|
23969
|
+
selectionCommentOffered && (0, react_jsx_runtime.jsxs)("button", {
|
|
23970
|
+
type: "button",
|
|
23971
|
+
className: PendingPanel_module_css_default.action,
|
|
23972
|
+
"data-diff-selection-comment": true,
|
|
23973
|
+
onClick: addDiscussion,
|
|
23974
|
+
children: [t("action.comment"), commentChord !== "" && (0, react_jsx_runtime.jsx)("span", {
|
|
23975
|
+
className: PendingPanel_module_css_default.actionChord,
|
|
23976
|
+
"data-diff-selection-comment-chord": true,
|
|
23977
|
+
children: commentChord
|
|
23978
|
+
})]
|
|
23692
23979
|
})
|
|
23693
23980
|
]
|
|
23694
23981
|
}) : hoveredBlock !== void 0 && model.blocks[hoveredBlock] !== void 0 ? (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -24101,16 +24388,9 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
24101
24388
|
const toggleForceFloat = () => {
|
|
24102
24389
|
startListOpenRef.current = false;
|
|
24103
24390
|
const next = !forceFloat;
|
|
24104
|
-
|
|
24105
|
-
|
|
24106
|
-
|
|
24107
|
-
if (next) setFloatOpen(false);
|
|
24108
|
-
};
|
|
24109
|
-
if (next && floatOpen) {
|
|
24110
|
-
foldCardAway(apply);
|
|
24111
|
-
return;
|
|
24112
|
-
}
|
|
24113
|
-
apply();
|
|
24391
|
+
setForceFloat(next);
|
|
24392
|
+
setFileListFloat(next);
|
|
24393
|
+
if (next) setFloatOpen(true);
|
|
24114
24394
|
};
|
|
24115
24395
|
(0, react.useEffect)(() => {
|
|
24116
24396
|
const onResize = () => {
|
|
@@ -24203,6 +24483,29 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
24203
24483
|
panelWidth,
|
|
24204
24484
|
selected
|
|
24205
24485
|
]);
|
|
24486
|
+
const applyListInset = (0, react.useCallback)((scroller) => {
|
|
24487
|
+
if (scroller === null) return;
|
|
24488
|
+
const bar = Math.max(0, scroller.offsetWidth - scroller.clientWidth);
|
|
24489
|
+
scroller.style.paddingRight = `${Math.max(0, LIST_RIGHT_INSET_PX - bar)}px`;
|
|
24490
|
+
}, []);
|
|
24491
|
+
/** The scroller, for the re-measure below; the inset itself is applied on attach. */
|
|
24492
|
+
const listScrollRef = (0, react.useRef)(null);
|
|
24493
|
+
const attachListScroll = (0, react.useCallback)((scroller) => {
|
|
24494
|
+
listScrollRef.current = scroller;
|
|
24495
|
+
applyListInset(scroller);
|
|
24496
|
+
}, [applyListInset]);
|
|
24497
|
+
(0, react.useLayoutEffect)(() => {
|
|
24498
|
+
applyListInset(listScrollRef.current);
|
|
24499
|
+
}, [
|
|
24500
|
+
applyListInset,
|
|
24501
|
+
open,
|
|
24502
|
+
docked,
|
|
24503
|
+
floatMode,
|
|
24504
|
+
floatOpen,
|
|
24505
|
+
listWidth,
|
|
24506
|
+
panelWidth,
|
|
24507
|
+
snapshot.files.length
|
|
24508
|
+
]);
|
|
24206
24509
|
(0, react.useEffect)(() => {
|
|
24207
24510
|
if (!open || !snapshot.redoCleared) return;
|
|
24208
24511
|
onAckRedoCleared();
|
|
@@ -24648,6 +24951,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
24648
24951
|
(0, react_jsx_runtime.jsx)("div", {
|
|
24649
24952
|
className: PendingPanel_module_css_default.listScroll,
|
|
24650
24953
|
"data-diff-list-scroll": true,
|
|
24954
|
+
ref: attachListScroll,
|
|
24651
24955
|
children: files.length > 0 && (0, react_jsx_runtime.jsx)("ul", {
|
|
24652
24956
|
className: PendingPanel_module_css_default.rows,
|
|
24653
24957
|
children: files.map(renderEntry)
|
|
@@ -24800,6 +25104,19 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
24800
25104
|
closeDock,
|
|
24801
25105
|
collapseSidebar
|
|
24802
25106
|
]);
|
|
25107
|
+
(0, react.useEffect)(() => {
|
|
25108
|
+
const onMouseUp = (event) => {
|
|
25109
|
+
const target = event.target;
|
|
25110
|
+
const panel = panelRef.current;
|
|
25111
|
+
if (panel === null || !(target instanceof Node) || !panel.contains(target)) return;
|
|
25112
|
+
if (target instanceof Element && target.closest("input, textarea, [contenteditable]") !== null) return;
|
|
25113
|
+
event.preventDefault();
|
|
25114
|
+
};
|
|
25115
|
+
window.addEventListener("mouseup", onMouseUp, true);
|
|
25116
|
+
return () => {
|
|
25117
|
+
window.removeEventListener("mouseup", onMouseUp, true);
|
|
25118
|
+
};
|
|
25119
|
+
}, []);
|
|
24803
25120
|
(0, react.useEffect)(() => {
|
|
24804
25121
|
if (!open || docked) return;
|
|
24805
25122
|
const onKeyDown = (event) => {
|
|
@@ -25848,7 +26165,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
25848
26165
|
const [delColor, setDelColorState] = (0, react.useState)(() => diffDelColor() ?? currentDiffDelColor());
|
|
25849
26166
|
const addDefault = currentDiffAddColor();
|
|
25850
26167
|
const delDefault = currentDiffDelColor();
|
|
25851
|
-
const [diffOpen, setDiffOpen] = (0, react.useState)(
|
|
26168
|
+
const [diffOpen, setDiffOpen] = (0, react.useState)(false);
|
|
25852
26169
|
const [cover, setCoverState] = (0, react.useState)(panelCover);
|
|
25853
26170
|
const [coverOpen, setCoverOpen] = (0, react.useState)(false);
|
|
25854
26171
|
(0, react.useEffect)(() => {
|
|
@@ -27241,17 +27558,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
27241
27558
|
"action.discussionExpand": "展开",
|
|
27242
27559
|
"action.discussionCollapse": "收起",
|
|
27243
27560
|
"discussion.placeholder": "写下你的评论…",
|
|
27561
|
+
"discussion.placeholderOutdated": "代码已过期,无法继续评论",
|
|
27244
27562
|
"discussion.marker": "[评论]",
|
|
27245
27563
|
"discussion.promptRule": "(回答只针对这几行,不超过 3 行;行与行之间不要留空行;用纯文本,不要 Markdown 装饰;要求详细时不受长度限制。细则见 dsh-diff-approval-comment skill。)",
|
|
27246
27564
|
"discussion.promptRuleSkill": "(这是一条代码批注:先加载 {skill} skill,按它的规则回答。)",
|
|
27247
|
-
"discussion.thinking": "
|
|
27248
|
-
"discussion.queued": "
|
|
27249
|
-
"discussion.
|
|
27565
|
+
"discussion.thinking": "思考中",
|
|
27566
|
+
"discussion.queued": "排队等待中",
|
|
27567
|
+
"discussion.outdated": "(已过期)",
|
|
27568
|
+
"discussion.quote": "评论代码:",
|
|
27250
27569
|
"discussion.hidden": "更早的 {count} 条已省略",
|
|
27251
27570
|
"discussion.failed": "这次提问失败了,可以再试一次。",
|
|
27252
27571
|
"discussion.stopped": "这次回答被停掉了,可以再问一次。",
|
|
27253
27572
|
"action.revert": "回退",
|
|
27254
27573
|
"action.delete": "删除",
|
|
27574
|
+
"action.discussionEnd": "结束评论",
|
|
27255
27575
|
"action.keepAll": "全部保留",
|
|
27256
27576
|
"action.revertAll": "全部回退",
|
|
27257
27577
|
"action.openFile": "打开文件",
|
|
@@ -27323,7 +27643,7 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
27323
27643
|
"panel.fileKeptAsk": "「{file}」的改动已全部保留,是否从列表移除?",
|
|
27324
27644
|
"panel.fileRevertedAsk": "「{file}」的改动已全部回退,是否从列表移除?",
|
|
27325
27645
|
"panel.confirmFileRemove": "处理整文件后询问是否移出列表",
|
|
27326
|
-
"panel.confirmFileRemoveDesc": "
|
|
27646
|
+
"panel.confirmFileRemoveDesc": "对单个文件执行整文件保留 / 回退后,弹窗询问是否把该文件移出列表。关闭后直接移出(不影响全部保留 / 全部回退)。",
|
|
27327
27647
|
"action.refreshVcs": "刷新差异",
|
|
27328
27648
|
"action.matchCase": "区分大小写",
|
|
27329
27649
|
"action.matchWholeWord": "全字匹配",
|
|
@@ -27442,17 +27762,20 @@ XID_Start XIDS`.split(/\s/).map((p) => [w(p), p]));
|
|
|
27442
27762
|
"action.discussionExpand": "Expand",
|
|
27443
27763
|
"action.discussionCollapse": "Collapse",
|
|
27444
27764
|
"discussion.placeholder": "Write your comment…",
|
|
27765
|
+
"discussion.placeholderOutdated": "This code is outdated; commenting is off",
|
|
27445
27766
|
"discussion.marker": "[Review]",
|
|
27446
27767
|
"discussion.promptRule": "(Answer only about these lines, in at most 3 lines, with no blank line between them, as plain text without Markdown decoration; ignore the length limit if my annotation asks for detail. Full rules: the dsh-diff-approval-comment skill.)",
|
|
27447
27768
|
"discussion.promptRuleSkill": "(This is a comment on a few diff lines: load the {skill} skill first and answer by its rules.)",
|
|
27448
|
-
"discussion.thinking": "Thinking
|
|
27449
|
-
"discussion.queued": "Queued
|
|
27450
|
-
"discussion.
|
|
27769
|
+
"discussion.thinking": "Thinking",
|
|
27770
|
+
"discussion.queued": "Queued",
|
|
27771
|
+
"discussion.outdated": " (Outdated)",
|
|
27772
|
+
"discussion.quote": "Commented code:",
|
|
27451
27773
|
"discussion.hidden": "{count} earlier turns omitted",
|
|
27452
27774
|
"discussion.failed": "That question failed; you can try again.",
|
|
27453
27775
|
"discussion.stopped": "That answer was stopped; you can ask again.",
|
|
27454
27776
|
"action.revert": "Revert",
|
|
27455
27777
|
"action.delete": "Delete",
|
|
27778
|
+
"action.discussionEnd": "End comment",
|
|
27456
27779
|
"action.keepAll": "Keep all",
|
|
27457
27780
|
"action.revertAll": "Revert all",
|
|
27458
27781
|
"action.openFile": "Open file",
|