summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components/line-comment-styles.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/ui/src/components/line-comment-styles.ts')
-rw-r--r--packages/ui/src/components/line-comment-styles.ts223
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
+}