/* * Copyright 2023 Harness, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ .main { --border-color: var(--grey-200); --line-height: 17.3438px; // TODO: Restyle DiffView to match latest design // https://www.figma.com/file/PgBvi804VdQNyLS8fD9K0p/Code?node-id=9391%3A118114&mode=dev --bg-selected-line-number: #ccf8a5; --bg-selected-line-content: #e7f8b5fc; --bg-line-added: var(--green-100); --bg-change-added: var(--green-300); --bg-line-deleted: var(--red-100); --bg-change-deleted: var(--red-200); --bg-hunk: var(--grey-100); --fg-hunk: var(--grey-700); border-radius: 5px; min-height: 36px; :global { .d2h-wrapper > div { margin-bottom: 0; } .d2h-file-wrapper { border: 0; .d2h-diff-tbody { &, tr { position: relative; // Use content-visibility to optimize for rendering performance // Ref: // - https://web.dev/articles/content-visibility // - https://web.dev/articles/dom-size-and-interactivity &, .d2h-code-line-ctn > * { content-visibility: auto; contain-intrinsic-size: auto var(--line-height); } // Reduce pointer events on diff line DOM elements to avoid // browser hit test. When the number of DOM elements is huge, // browsers have to spend too much time on hit test causing unresponsivenss // Ref: https://stackoverflow.com/questions/41830529/optimizing-native-hit-testing-of-dom-elements-chrome .d2h-code-line-ctn { width: auto; & > * { pointer-events: none; } } &[data-annotated-line] { background-color: var(--white); & + [data-annotated-line] { [data-comment-thread-id] { padding-top: 0; } } } } tr { &:has(.d2h-del) { background-color: var(--bg-line-deleted); } &:has(.d2h-ins) { background-color: var(--bg-line-added); } &:has(.d2h-emptyplaceholder) { background-color: #f1f1f1; } } .d2h-info { background-color: var(--bg-hunk); color: var(--fg-hunk); line-height: 26px; } .d2h-code-linenumber { width: auto; display: flex; padding: 0 5px; .line-num1, .line-num2 { flex-basis: 100%; width: auto; text-overflow: initial; overflow: visible; display: inline-block; padding: 0 10px; } } } .d2h-code-line, .d2h-code-side-line { .d2h-code-line-ctn { ins { background-color: var(--bg-change-added); } del { background-color: var(--bg-change-deleted); } } } .d2h-file-diff :is(.d2h-del.d2h-change, .d2h-ins.d2h-change) { background-color: transparent; } // Line number background - kind of distracted // td:is(.d2h-code-side-linenumber, .d2h-code-linenumber).d2h-del { // background-color: var(--bg-change-deleted); // } &.line-by-line-file-diff { .d2h-code-line { padding: 0 4px; } [data-annotation-for-line] { right: -25px; top: 4px; } [data-selected-indicator] { top: 0; right: -8px; } } &.side-by-side-file-diff { .d2h-code-line { padding: 0 70px; } .d2h-code-side-line { padding: 0 6px; } .d2h-code-side-linenumber.d2h-info { pointer-events: none; } [data-content-for-line-number] { padding-left: 2px; } } .d2h-code-side-linenumber, .d2h-code-linenumber { position: sticky; left: 0; z-index: 2; overflow: visible; line-height: 20px; } .d2h-code-side-line { position: relative; padding: 0; } tr { td:first-of-type { z-index: 2; } td:last-of-type > div { z-index: 0; } [data-annotation-for-line] { height: 14px; width: 14px; font-weight: 600; background: var(--primary-7); color: var(--white); text-align: center; border-radius: 5px; align-items: center; justify-content: center; cursor: pointer; user-select: none; position: absolute; top: -11px; right: -26px; display: none; transform: scale(1.1); transition: transform 0.75s; } [data-selected-indicator] { height: 20px; width: 4px; background-color: var(--primary-7); position: absolute; top: -15px; right: -9px; display: none; } &.selected, &:has(.selected) { td { &:first-of-type { background-color: var(--bg-selected-line-number) !important; border-color: var(--primary-7) !important; } &:last-of-type, *:not( span[data-annotation-for-line], span[data-selected-indicator], [data-comment-thread-id], [data-comment-thread-id] * ) { background-color: var(--bg-selected-line-content) !important; } [data-selected-indicator] { display: inline-block; } } } &:hover [data-annotation-for-line] { display: flex; &:hover { transform: scale(1.3); } } &:has([data-annotated='true'] [data-content-for-line-number]), &:has([data-content-for-line-number='']), &:has(.d2h-emptyplaceholder[data-content-for-line-number='']) { &, :hover { [data-annotation-for-line] { pointer-events: none; display: none; } } } } [data-content-for-line-number] { cursor: default; width: 100%; padding-left: 4px; height: 17.3438px !important; } } .d2h-file-header { display: none; } .d2h-files-diff { .d2h-code-side-linenumber { border-left: 0; } } .d2h-file-side-diff { border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; } .d2h-code-side-linenumber { width: 64px; } } &.readOnly { :global { .d2h-file-wrapper { .d2h-diff-tbody { tr:hover [data-annotation-for-line] { display: none !important; } .d2h-code-side-linenumber, .d2h-code-linenumber { cursor: default; } } } } } &.collapsed { .diffHeader { border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; } .diffContent { display: none; } } .diffHeader { display: grid; align-items: center; background-color: var(--white); position: sticky; top: var(--diff-viewer-sticky-top, 0); z-index: 1; padding: 5px 10px 5px 5px; border-top-left-radius: 4px; border-top-right-radius: 4px; box-shadow: 0px 2px 4px 0px rgba(96, 97, 112, 0.16), 0px 0px 1px 0px rgba(40, 41, 61, 0.04); z-index: 4; .fnamePopover { display: flex; } .chevron { align-self: center; height: 24px; width: 24px; } .fname { align-self: center; align-items: center; text-align: left; a { font-size: 13px; font-weight: 600; line-height: 20px; text-align: center; color: var(--grey-700); &:hover { color: var(--primary-7) !important; } } } .expandCollapseDiffBtn { transform: translateX(-5px); > span { display: flex; } } .addedLines { align-self: center; min-width: 36px; height: 18px; background: var(--green-50); border-radius: 2px; padding: 0px 8px 0px 8px; font-size: 13px; font-weight: 600; line-height: 18px; text-align: center; color: var(--green-800); } .deletedLines { align-self: center; min-width: 36px; height: 18px; background: var(--red-50); border-radius: 2px; padding: 0px 8px 0px 8px; font-size: 13px; font-weight: 600; line-height: 18px; text-align: center; color: var(--red-800); } .fileChanged { align-self: center; height: 28px; width: 184px; background: var(--orange-50); border-radius: 4px; margin-top: 2px; margin-right: 8px; font-size: 13px; font-weight: 600; line-height: 28px; text-align: center; color: var(--orange-500); } .viewLabel { display: flex; background: var(--grey-100); height: 28px; padding: 0 8px; align-items: center; font-size: 13px; font-weight: 500; line-height: 28px; border-radius: 4px; text-align: center; color: var(--black); margin-top: 2px; // avoid text being selected when user presses button twice user-select: none; cursor: pointer; input { display: inline-block; margin-right: var(--spacing-small); } } } .diffContent { box-shadow: 0px 2px 4px 0px rgba(96, 97, 112, 0.16), 0px 0px 1px 0px rgba(40, 41, 61, 0.04); z-index: 3; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; max-width: calc(var(--page-container-width) - 48px); &.hidden { height: var(--block-height); content-visibility: auto; contain-intrinsic-size: auto var(--line-height); * { display: none !important; } } } } .popover { :global { .bp3-popover-content { padding: var(--spacing-medium); max-width: 700px; word-break: break-all; } } } .selectoSelection { display: none !important; }