diff options
Diffstat (limited to 'packages/ui/src/components/line-comment-styles.ts')
| -rw-r--r-- | packages/ui/src/components/line-comment-styles.ts | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/packages/ui/src/components/line-comment-styles.ts b/packages/ui/src/components/line-comment-styles.ts new file mode 100644 index 000000000..d5be67554 --- /dev/null +++ b/packages/ui/src/components/line-comment-styles.ts @@ -0,0 +1,223 @@ +export const lineCommentStyles = ` +[data-annotation-slot] { + padding: 12px; + box-sizing: border-box; +} + +[data-component="line-comment"] { + position: absolute; + right: 24px; + z-index: var(--line-comment-z, 30); +} + +[data-component="line-comment"][data-inline] { + position: relative; + right: auto; + display: flex; + width: 100%; + align-items: flex-start; +} + +[data-component="line-comment"][data-open] { + z-index: var(--line-comment-open-z, 100); +} + +[data-component="line-comment"] [data-slot="line-comment-button"] { + width: 20px; + height: 20px; + border-radius: var(--radius-md); + display: flex; + align-items: center; + justify-content: center; + background: var(--icon-interactive-base); + box-shadow: var(--shadow-xs); + cursor: default; + border: none; +} + +[data-component="line-comment"][data-variant="add"] [data-slot="line-comment-button"] { + background: var(--syntax-diff-add); +} + +[data-component="line-comment"] [data-component="icon"] { + color: var(--white); +} + +[data-component="line-comment"] [data-slot="line-comment-icon"] { + width: 12px; + height: 12px; + color: var(--white); +} + +[data-component="line-comment"] [data-slot="line-comment-button"]:focus { + outline: none; +} + +[data-component="line-comment"] [data-slot="line-comment-button"]:focus-visible { + box-shadow: var(--shadow-xs-border-focus); +} + +[data-component="line-comment"] [data-slot="line-comment-popover"] { + position: absolute; + top: calc(100% + 4px); + right: -8px; + z-index: var(--line-comment-popover-z, 40); + min-width: 200px; + max-width: none; + border-radius: 8px; + background: var(--surface-raised-stronger-non-alpha); + box-shadow: var(--shadow-xxs-border); + padding: 12px; +} + +[data-component="line-comment"][data-inline] [data-slot="line-comment-popover"] { + position: relative; + top: auto; + right: auto; + margin-left: 8px; + flex: 0 1 600px; + width: min(100%, 600px); + max-width: min(100%, 600px); +} + +[data-component="line-comment"][data-inline] [data-slot="line-comment-popover"][data-inline-body] { + margin-left: 0; +} + +[data-component="line-comment"][data-inline][data-variant="default"] [data-slot="line-comment-popover"][data-inline-body] { + cursor: pointer; +} + +[data-component="line-comment"][data-variant="editor"] [data-slot="line-comment-popover"] { + width: 380px; + max-width: none; + padding: 8px; + border-radius: 14px; +} + +[data-component="line-comment"][data-inline][data-variant="editor"] [data-slot="line-comment-popover"] { + flex-basis: 600px; +} + +[data-component="line-comment"] [data-slot="line-comment-content"] { + display: flex; + flex-direction: column; + gap: 6px; +} + +[data-component="line-comment"] [data-slot="line-comment-head"] { + display: flex; + align-items: flex-start; + gap: 8px; +} + +[data-component="line-comment"] [data-slot="line-comment-text"] { + flex: 1; + font-family: var(--font-family-sans); + font-size: var(--font-size-base); + font-weight: var(--font-weight-regular); + line-height: var(--line-height-x-large); + letter-spacing: var(--letter-spacing-normal); + color: var(--text-strong); + white-space: pre-wrap; +} + +[data-component="line-comment"] [data-slot="line-comment-tools"] { + flex: 0 0 auto; + display: flex; + align-items: center; + justify-content: flex-end; +} + +[data-component="line-comment"] [data-slot="line-comment-label"], +[data-component="line-comment"] [data-slot="line-comment-editor-label"] { + font-family: var(--font-family-sans); + font-size: var(--font-size-small); + font-weight: var(--font-weight-medium); + line-height: var(--line-height-large); + letter-spacing: var(--letter-spacing-normal); + color: var(--text-weak); + white-space: nowrap; +} + +[data-component="line-comment"] [data-slot="line-comment-editor"] { + display: flex; + flex-direction: column; + gap: 8px; +} + +[data-component="line-comment"] [data-slot="line-comment-textarea"] { + width: 100%; + resize: vertical; + padding: 8px; + border-radius: var(--radius-md); + background: var(--surface-base); + border: 1px solid var(--border-base); + color: var(--text-strong); + font-family: var(--font-family-sans); + font-size: var(--font-size-small); + line-height: var(--line-height-large); +} + +[data-component="line-comment"] [data-slot="line-comment-textarea"]:focus { + outline: none; + box-shadow: var(--shadow-xs-border-select); +} + +[data-component="line-comment"] [data-slot="line-comment-actions"] { + display: flex; + align-items: center; + gap: 8px; + padding-left: 8px; +} + +[data-component="line-comment"] [data-slot="line-comment-editor-label"] { + margin-right: auto; +} + +[data-component="line-comment"] [data-slot="line-comment-action"] { + border: 1px solid var(--border-base); + background: var(--surface-base); + color: var(--text-strong); + border-radius: var(--radius-md); + height: 28px; + padding: 0 10px; + font-family: var(--font-family-sans); + font-size: var(--font-size-small); + font-weight: var(--font-weight-medium); +} + +[data-component="line-comment"] [data-slot="line-comment-action"][data-variant="ghost"] { + background: transparent; +} + +[data-component="line-comment"] [data-slot="line-comment-action"][data-variant="primary"] { + background: var(--text-strong); + border-color: var(--text-strong); + color: var(--background-base); +} + +[data-component="line-comment"] [data-slot="line-comment-action"]:disabled { + opacity: 0.5; + pointer-events: none; +} +` + +let installed = false + +export function installLineCommentStyles() { + if (installed) return + if (typeof document === "undefined") return + + const id = "opencode-line-comment-styles" + if (document.getElementById(id)) { + installed = true + return + } + + const style = document.createElement("style") + style.id = id + style.textContent = lineCommentStyles + document.head.appendChild(style) + installed = true +} |
