collavre 0.20.3 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/collavre/actiontext.css +92 -2
- data/app/assets/stylesheets/collavre/code_highlight.css +144 -26
- data/app/assets/stylesheets/collavre/comments_popup.css +133 -2
- data/app/assets/stylesheets/collavre/landing.css +507 -0
- data/app/assets/stylesheets/collavre/popup.css +148 -0
- data/app/channels/collavre/agent_channel.rb +205 -0
- data/app/channels/collavre/comments_presence_channel.rb +7 -0
- data/app/controllers/collavre/admin/integrations_controller.rb +93 -0
- data/app/controllers/collavre/admin/settings_controller.rb +22 -17
- data/app/controllers/collavre/api/v1/agents_controller.rb +777 -0
- data/app/controllers/collavre/api/v1/base_controller.rb +46 -0
- data/app/controllers/collavre/application_controller.rb +27 -0
- data/app/controllers/collavre/attachments_controller.rb +30 -2
- data/app/controllers/collavre/channels_controller.rb +23 -0
- data/app/controllers/collavre/comments_controller.rb +1 -1
- data/app/controllers/collavre/creatives/attachments_controller.rb +79 -0
- data/app/controllers/collavre/creatives_controller.rb +141 -7
- data/app/controllers/collavre/landing_controller.rb +8 -0
- data/app/controllers/collavre/public_assets_controller.rb +24 -0
- data/app/controllers/collavre/tasks_controller.rb +12 -4
- data/app/controllers/collavre/topics_controller.rb +36 -30
- data/app/controllers/concerns/collavre/comments/approval_actions.rb +57 -14
- data/app/helpers/collavre/comments_helper.rb +7 -0
- data/app/helpers/collavre/public_assets_helper.rb +14 -0
- data/app/javascript/components/InlineLexicalEditor.jsx +42 -59
- data/app/javascript/components/plugins/attachment_cleanup_plugin.jsx +3 -0
- data/app/javascript/components/plugins/image_upload_plugin.jsx +12 -0
- data/app/javascript/controllers/__tests__/link_creative_controller.test.js +447 -0
- data/app/javascript/controllers/comment_controller.js +15 -1
- data/app/javascript/controllers/comments/__tests__/presence_controller.test.js +108 -0
- data/app/javascript/controllers/comments/form_controller.js +4 -0
- data/app/javascript/controllers/comments/list_controller.js +27 -9
- data/app/javascript/controllers/comments/popup_controller.js +9 -0
- data/app/javascript/controllers/comments/presence_controller.js +137 -4
- data/app/javascript/controllers/comments/topics_controller.js +15 -0
- data/app/javascript/controllers/creatives/__tests__/sync_controller.test.js +89 -0
- data/app/javascript/controllers/creatives/__tests__/tree_controller.test.js +120 -0
- data/app/javascript/controllers/creatives/sync_controller.js +30 -9
- data/app/javascript/controllers/creatives/tree_controller.js +23 -0
- data/app/javascript/controllers/index.js +4 -1
- data/app/javascript/controllers/landing_video_controller.js +53 -0
- data/app/javascript/controllers/link_creative_controller.js +451 -29
- data/app/javascript/creatives/tree_renderer.js +6 -0
- data/app/javascript/lib/api/__tests__/queue_manager.test.js +27 -0
- data/app/javascript/lib/api/creatives.js +13 -0
- data/app/javascript/lib/api/queue_manager.js +17 -5
- data/app/javascript/lib/lexical/__tests__/color_import.test.js +318 -0
- data/app/javascript/lib/lexical/__tests__/minimize_html.test.js +259 -0
- data/app/javascript/lib/lexical/color_import.js +186 -0
- data/app/javascript/lib/lexical/minimize_html.js +182 -0
- data/app/javascript/lib/lexical/video_node.jsx +96 -0
- data/app/javascript/modules/__tests__/command_args_form.test.js +103 -0
- data/app/javascript/modules/__tests__/html_content_empty.test.js +41 -0
- data/app/javascript/modules/__tests__/markdown_source_reconcile.test.js +70 -0
- data/app/javascript/modules/command_args_form.js +22 -4
- data/app/javascript/modules/command_menu.js +27 -0
- data/app/javascript/modules/creative_row_editor.js +227 -17
- data/app/javascript/modules/html_content_empty.js +12 -0
- data/app/javascript/modules/markdown_source_reconcile.js +53 -0
- data/app/jobs/collavre/ai_agent_job.rb +89 -3
- data/app/jobs/collavre/cancel_offline_delegated_tasks_job.rb +134 -0
- data/app/jobs/collavre/claude_channel_presence_job.rb +91 -0
- data/app/jobs/collavre/drop_trigger_job.rb +37 -8
- data/app/mailers/collavre/application_mailer.rb +1 -1
- data/app/models/collavre/agent_subscription.rb +52 -0
- data/app/models/collavre/channel/injected_message.rb +5 -0
- data/app/models/collavre/channel.rb +87 -0
- data/app/models/collavre/comment/claude_channel_permission.rb +145 -0
- data/app/models/collavre/comment.rb +70 -5
- data/app/models/collavre/creative/describable.rb +202 -3
- data/app/models/collavre/creative.rb +2 -0
- data/app/models/collavre/creative_share.rb +1 -0
- data/app/models/collavre/integration_setting.rb +35 -0
- data/app/models/collavre/preview_channel.rb +93 -0
- data/app/models/collavre/system_setting.rb +13 -2
- data/app/models/collavre/task.rb +34 -5
- data/app/models/collavre/topic.rb +8 -25
- data/app/models/collavre/user.rb +4 -0
- data/app/models/concerns/collavre/ai_agent_resolvable.rb +12 -3
- data/app/services/collavre/agent_session_abort.rb +28 -0
- data/app/services/collavre/ai_agent/claude_channel_adapter.rb +79 -0
- data/app/services/collavre/ai_agent/response_finalizer.rb +4 -2
- data/app/services/collavre/ai_agent_service.rb +68 -49
- data/app/services/collavre/ai_client.rb +3 -3
- data/app/services/collavre/attachment_backfill.rb +26 -0
- data/app/services/collavre/channel_attacher.rb +58 -0
- data/app/services/collavre/comments/mcp_command.rb +31 -1
- data/app/services/collavre/creatives/breadcrumb_resolver.rb +91 -0
- data/app/services/collavre/creatives/filter_pipeline.rb +26 -42
- data/app/services/collavre/creatives/filters/search_filter.rb +12 -2
- data/app/services/collavre/creatives/index_query.rb +110 -8
- data/app/services/collavre/creatives/permission_filter.rb +50 -0
- data/app/services/collavre/creatives/reveal_path_resolver.rb +118 -0
- data/app/services/collavre/creatives/tree_builder.rb +7 -3
- data/app/services/collavre/crons/recurring_task_arguments.rb +28 -0
- data/app/services/collavre/google_calendar_service.rb +4 -2
- data/app/services/collavre/markdown_converter.rb +130 -15
- data/app/services/collavre/markdown_importer.rb +7 -2
- data/app/services/collavre/orchestration/policy_resolver.rb +11 -1
- data/app/services/collavre/orchestration/stuck_detector.rb +22 -2
- data/app/services/collavre/tools/creative_attach_files_service.rb +62 -0
- data/app/services/collavre/tools/creative_list_attachments_service.rb +42 -0
- data/app/services/collavre/tools/creative_remove_attachment_service.rb +37 -0
- data/app/services/collavre/tools/cron_list_service.rb +1 -14
- data/app/services/collavre/tools/permission_denied_error.rb +9 -0
- data/app/services/collavre/tools/preview_attach_service.rb +128 -0
- data/app/services/collavre/tools/preview_detach_service.rb +61 -0
- data/app/services/collavre/tools/topic_authorizer.rb +24 -0
- data/app/services/collavre/topic_branch_service.rb +34 -26
- data/app/services/collavre/topics/orphaned_cron_notifier.rb +68 -0
- data/app/views/admin/shared/_tabs.html.erb +1 -0
- data/app/views/collavre/admin/integrations/_category.html.erb +22 -0
- data/app/views/collavre/admin/integrations/_setting_row.html.erb +70 -0
- data/app/views/collavre/admin/integrations/index.html.erb +42 -0
- data/app/views/collavre/admin/settings/_system_tab.html.erb +8 -0
- data/app/views/collavre/comments/_channel_chips.html.erb +33 -0
- data/app/views/collavre/comments/_comment.html.erb +16 -2
- data/app/views/collavre/comments/_comments_popup.html.erb +4 -1
- data/app/views/collavre/creatives/_inline_edit_form.html.erb +19 -0
- data/app/views/collavre/creatives/index.html.erb +10 -2
- data/app/views/collavre/landing/show.html.erb +130 -0
- data/app/views/collavre/shared/_link_creative_modal.html.erb +6 -2
- data/app/views/layouts/collavre/landing.html.erb +33 -0
- data/config/locales/admin.en.yml +4 -2
- data/config/locales/admin.ko.yml +4 -2
- data/config/locales/channels.en.yml +13 -0
- data/config/locales/channels.ko.yml +13 -0
- data/config/locales/claude_channel.en.yml +16 -0
- data/config/locales/claude_channel.ko.yml +16 -0
- data/config/locales/comments.en.yml +5 -0
- data/config/locales/comments.ko.yml +5 -0
- data/config/locales/creatives.en.yml +11 -0
- data/config/locales/creatives.ko.yml +10 -0
- data/config/locales/integrations.en.yml +55 -0
- data/config/locales/integrations.ko.yml +55 -0
- data/config/locales/landing.en.yml +51 -0
- data/config/locales/landing.ko.yml +51 -0
- data/config/routes.rb +30 -0
- data/db/migrate/20260526000000_create_channels.rb +42 -0
- data/db/migrate/20260527000000_add_dismissed_at_to_channels.rb +6 -0
- data/db/migrate/20260527000100_backfill_dismissed_at_for_legacy_detached_channels.rb +28 -0
- data/db/migrate/20260528000000_add_preview_channel_unique_index.rb +31 -0
- data/db/migrate/20260529000000_add_primary_agent_id_to_topics.rb +40 -0
- data/db/migrate/20260529100000_create_integration_settings.rb +15 -0
- data/db/migrate/20260609000000_drop_action_text_rich_texts.rb +20 -0
- data/db/migrate/20260609005000_add_session_id_to_topics.rb +16 -0
- data/db/migrate/20260609010000_create_agent_subscriptions.rb +19 -0
- data/db/migrate/20260609020000_add_last_seen_at_to_agent_subscriptions.rb +23 -0
- data/db/migrate/20260609030000_add_session_id_to_agent_subscriptions.rb +17 -0
- data/db/migrate/20260609190659_backfill_creative_files_into_description.rb +24 -0
- data/db/seeds.rb +19 -0
- data/lib/collavre/aws_credentials.rb +75 -0
- data/lib/collavre/engine.rb +50 -0
- data/lib/collavre/integration_settings/key_definition.rb +35 -0
- data/lib/collavre/integration_settings/registry.rb +60 -0
- data/lib/collavre/integration_settings/resolver.rb +71 -0
- data/lib/collavre/integration_settings.rb +46 -0
- data/lib/collavre/ses_settings_interceptor.rb +72 -0
- data/lib/collavre/version.rb +1 -1
- data/lib/collavre.rb +3 -0
- metadata +82 -2
- data/app/services/collavre/openclaw_abort_service.rb +0 -45
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9fd2c39503f762d09d1c98d125910e010ab634bb8d9e5e7c39c1acdc450b841f
|
|
4
|
+
data.tar.gz: 11684679fc116af3955540f8b866b5a3df763823e7d2cb82656d0652cb1b01ef
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a8c63aed51bf215f04787f5a6adb220b4306c117b951e0af7c7e19c2998455d50ff9d98edec2ad691e1f2c2d8610218565fd1f7c23348e4e12cfbd6a74167bbc
|
|
7
|
+
data.tar.gz: 9d7ff16652f6d416b3be9730fee13821ed6bbc94054e6695b4e97c82d68d023feff9d192675a733af9ecaf81b7366176d128ba6ad08695618fe3708cf508f422
|
|
@@ -15,6 +15,96 @@
|
|
|
15
15
|
padding: 0 0 var(--space-3) 0;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/* Markdown Editor */
|
|
19
|
+
.markdown-editor-wrapper {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
gap: var(--space-2);
|
|
23
|
+
padding: var(--space-2);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@media (min-width: 768px) {
|
|
27
|
+
.markdown-editor-wrapper {
|
|
28
|
+
flex-direction: row;
|
|
29
|
+
align-items: stretch;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.markdown-editor-wrapper > .markdown-editor-textarea,
|
|
33
|
+
.markdown-editor-wrapper > .markdown-preview {
|
|
34
|
+
flex: 1 1 0;
|
|
35
|
+
min-width: 0;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.markdown-editor-textarea {
|
|
40
|
+
width: 100%;
|
|
41
|
+
min-height: 6rem;
|
|
42
|
+
padding: 0.6rem 0.75rem;
|
|
43
|
+
border: 1px solid var(--border-color);
|
|
44
|
+
border-radius: var(--radius-2);
|
|
45
|
+
background: var(--surface-section, var(--surface-bg));
|
|
46
|
+
color: var(--text-primary);
|
|
47
|
+
font-family: ui-monospace, SFMono-Regular, SFMono, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
48
|
+
font-size: 0.9rem;
|
|
49
|
+
line-height: 1.5;
|
|
50
|
+
resize: vertical;
|
|
51
|
+
outline: none;
|
|
52
|
+
box-sizing: border-box;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.markdown-editor-textarea:focus {
|
|
56
|
+
border-color: var(--color-active);
|
|
57
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-active) 15%, transparent);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.markdown-preview {
|
|
61
|
+
padding: 0.6rem 0.75rem;
|
|
62
|
+
border: 1px solid var(--border-color);
|
|
63
|
+
border-radius: var(--radius-2);
|
|
64
|
+
background: var(--surface-btn, var(--surface-bg));
|
|
65
|
+
min-height: 2rem;
|
|
66
|
+
line-height: 1.5;
|
|
67
|
+
overflow-wrap: break-word;
|
|
68
|
+
word-break: break-word;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.markdown-preview:empty::before {
|
|
72
|
+
content: attr(data-placeholder);
|
|
73
|
+
color: var(--text-muted);
|
|
74
|
+
font-style: italic;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.markdown-preview h1, .markdown-preview h2, .markdown-preview h3 {
|
|
78
|
+
margin: 0 0 var(--space-2) 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.markdown-preview ul, .markdown-preview ol {
|
|
82
|
+
margin: 0 0 0.75rem 1.25rem;
|
|
83
|
+
padding: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.markdown-preview blockquote {
|
|
87
|
+
border-left: 3px solid var(--border-color);
|
|
88
|
+
margin: 0 0 0.75rem 0;
|
|
89
|
+
padding-left: 0.75rem;
|
|
90
|
+
color: var(--text-muted);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.markdown-preview table {
|
|
94
|
+
border-collapse: collapse;
|
|
95
|
+
margin: 0 0 0.75rem 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.markdown-preview th, .markdown-preview td {
|
|
99
|
+
border: 1px solid var(--border-color);
|
|
100
|
+
padding: 0.35rem 0.6rem;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.markdown-preview img {
|
|
104
|
+
max-width: 100%;
|
|
105
|
+
height: auto;
|
|
106
|
+
}
|
|
107
|
+
|
|
18
108
|
.lexical-editor-shell {
|
|
19
109
|
display: flex;
|
|
20
110
|
flex-direction: column;
|
|
@@ -400,7 +490,7 @@ body.dark-mode {
|
|
|
400
490
|
|
|
401
491
|
.lexical-attachment.is-selected {
|
|
402
492
|
border-color: var(--color-active);
|
|
403
|
-
box-shadow: 0 0 0 2px
|
|
493
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-active) 20%, transparent);
|
|
404
494
|
}
|
|
405
495
|
|
|
406
496
|
.lexical-attachment__remove {
|
|
@@ -498,7 +588,7 @@ body.dark-mode {
|
|
|
498
588
|
.lexical-attachment__caption-input:focus {
|
|
499
589
|
outline: none;
|
|
500
590
|
border-color: var(--color-active);
|
|
501
|
-
box-shadow: 0 0 0 2px
|
|
591
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-active) 15%, transparent);
|
|
502
592
|
}
|
|
503
593
|
|
|
504
594
|
.lexical-attachment__caption-size {
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
* Uses Collavre design tokens (--color-code-bg, --color-code-text, --font-mono).
|
|
5
5
|
* Syntax color tokens defined as CSS variables — overridden per theme context.
|
|
6
6
|
* Based on GitHub-style highlighting.
|
|
7
|
+
*
|
|
8
|
+
* Scoped to the markdown rendering surfaces so they share container,
|
|
9
|
+
* inline-code, and syntax-token styles:
|
|
10
|
+
* .comment-content — chat / comments
|
|
11
|
+
* .markdown-preview — creative inline editor live preview
|
|
12
|
+
* .creative-content — persisted creative description in the tree view
|
|
13
|
+
* .creative-title-content — persisted creative description in the title (h1) area
|
|
7
14
|
*/
|
|
8
15
|
|
|
9
16
|
/* ============================================================================
|
|
@@ -77,20 +84,29 @@ body.dark-mode {
|
|
|
77
84
|
/* ============================================================================
|
|
78
85
|
* MERMAID DIAGRAM CONTAINER
|
|
79
86
|
* ============================================================================ */
|
|
80
|
-
.comment-content .mermaid-chart
|
|
87
|
+
.comment-content .mermaid-chart,
|
|
88
|
+
.markdown-preview .mermaid-chart,
|
|
89
|
+
.creative-content .mermaid-chart,
|
|
90
|
+
.creative-title-content .mermaid-chart {
|
|
81
91
|
margin: var(--space-2) 0;
|
|
82
92
|
overflow-x: auto;
|
|
83
93
|
text-align: center;
|
|
84
94
|
}
|
|
85
95
|
|
|
86
|
-
.comment-content .mermaid-chart svg
|
|
96
|
+
.comment-content .mermaid-chart svg,
|
|
97
|
+
.markdown-preview .mermaid-chart svg,
|
|
98
|
+
.creative-content .mermaid-chart svg,
|
|
99
|
+
.creative-title-content .mermaid-chart svg {
|
|
87
100
|
max-width: 100%;
|
|
88
101
|
}
|
|
89
102
|
|
|
90
103
|
/* ============================================================================
|
|
91
104
|
* CODE BLOCK CONTAINER
|
|
92
105
|
* ============================================================================ */
|
|
93
|
-
.comment-content pre
|
|
106
|
+
.comment-content pre,
|
|
107
|
+
.markdown-preview pre,
|
|
108
|
+
.creative-content pre,
|
|
109
|
+
.creative-title-content pre {
|
|
94
110
|
background: var(--color-code-bg);
|
|
95
111
|
color: var(--color-code-text);
|
|
96
112
|
border: var(--border-1) solid var(--border-color);
|
|
@@ -103,7 +119,10 @@ body.dark-mode {
|
|
|
103
119
|
line-height: var(--leading-3);
|
|
104
120
|
}
|
|
105
121
|
|
|
106
|
-
.comment-content pre code
|
|
122
|
+
.comment-content pre code,
|
|
123
|
+
.markdown-preview pre code,
|
|
124
|
+
.creative-content pre code,
|
|
125
|
+
.creative-title-content pre code {
|
|
107
126
|
background: none;
|
|
108
127
|
border: none;
|
|
109
128
|
padding: 0;
|
|
@@ -114,7 +133,10 @@ body.dark-mode {
|
|
|
114
133
|
}
|
|
115
134
|
|
|
116
135
|
/* Inline code */
|
|
117
|
-
.comment-content code
|
|
136
|
+
.comment-content code,
|
|
137
|
+
.markdown-preview code,
|
|
138
|
+
.creative-content code,
|
|
139
|
+
.creative-title-content code {
|
|
118
140
|
background: var(--color-code-bg);
|
|
119
141
|
color: var(--color-code-text);
|
|
120
142
|
border-radius: var(--radius-1);
|
|
@@ -127,99 +149,195 @@ body.dark-mode {
|
|
|
127
149
|
* SYNTAX HIGHLIGHTING RULES (token-based, theme-agnostic)
|
|
128
150
|
* ============================================================================ */
|
|
129
151
|
.comment-content .hljs-comment,
|
|
130
|
-
.comment-content .hljs-quote
|
|
152
|
+
.comment-content .hljs-quote,
|
|
153
|
+
.markdown-preview .hljs-comment,
|
|
154
|
+
.markdown-preview .hljs-quote,
|
|
155
|
+
.creative-content .hljs-comment,
|
|
156
|
+
.creative-content .hljs-quote,
|
|
157
|
+
.creative-title-content .hljs-comment,
|
|
158
|
+
.creative-title-content .hljs-quote {
|
|
131
159
|
color: var(--syntax-comment);
|
|
132
160
|
font-style: italic;
|
|
133
161
|
}
|
|
134
162
|
|
|
135
163
|
.comment-content .hljs-keyword,
|
|
136
164
|
.comment-content .hljs-selector-tag,
|
|
137
|
-
.comment-content .hljs-type
|
|
165
|
+
.comment-content .hljs-type,
|
|
166
|
+
.markdown-preview .hljs-keyword,
|
|
167
|
+
.markdown-preview .hljs-selector-tag,
|
|
168
|
+
.markdown-preview .hljs-type,
|
|
169
|
+
.creative-content .hljs-keyword,
|
|
170
|
+
.creative-content .hljs-selector-tag,
|
|
171
|
+
.creative-content .hljs-type,
|
|
172
|
+
.creative-title-content .hljs-keyword,
|
|
173
|
+
.creative-title-content .hljs-selector-tag,
|
|
174
|
+
.creative-title-content .hljs-type {
|
|
138
175
|
color: var(--syntax-keyword);
|
|
139
176
|
}
|
|
140
177
|
|
|
141
|
-
.comment-content .hljs-string
|
|
178
|
+
.comment-content .hljs-string,
|
|
179
|
+
.markdown-preview .hljs-string,
|
|
180
|
+
.creative-content .hljs-string,
|
|
181
|
+
.creative-title-content .hljs-string {
|
|
142
182
|
color: var(--syntax-string);
|
|
143
183
|
}
|
|
144
184
|
|
|
145
185
|
.comment-content .hljs-number,
|
|
146
|
-
.comment-content .hljs-literal
|
|
186
|
+
.comment-content .hljs-literal,
|
|
187
|
+
.markdown-preview .hljs-number,
|
|
188
|
+
.markdown-preview .hljs-literal,
|
|
189
|
+
.creative-content .hljs-number,
|
|
190
|
+
.creative-content .hljs-literal,
|
|
191
|
+
.creative-title-content .hljs-number,
|
|
192
|
+
.creative-title-content .hljs-literal {
|
|
147
193
|
color: var(--syntax-number);
|
|
148
194
|
}
|
|
149
195
|
|
|
150
196
|
.comment-content .hljs-built_in,
|
|
151
|
-
.comment-content .hljs-builtin-name
|
|
197
|
+
.comment-content .hljs-builtin-name,
|
|
198
|
+
.markdown-preview .hljs-built_in,
|
|
199
|
+
.markdown-preview .hljs-builtin-name,
|
|
200
|
+
.creative-content .hljs-built_in,
|
|
201
|
+
.creative-content .hljs-builtin-name,
|
|
202
|
+
.creative-title-content .hljs-built_in,
|
|
203
|
+
.creative-title-content .hljs-builtin-name {
|
|
152
204
|
color: var(--syntax-builtin);
|
|
153
205
|
}
|
|
154
206
|
|
|
155
207
|
.comment-content .hljs-title,
|
|
156
|
-
.comment-content .hljs-title.function_
|
|
208
|
+
.comment-content .hljs-title.function_,
|
|
209
|
+
.markdown-preview .hljs-title,
|
|
210
|
+
.markdown-preview .hljs-title.function_,
|
|
211
|
+
.creative-content .hljs-title,
|
|
212
|
+
.creative-content .hljs-title.function_,
|
|
213
|
+
.creative-title-content .hljs-title,
|
|
214
|
+
.creative-title-content .hljs-title.function_ {
|
|
157
215
|
color: var(--syntax-title);
|
|
158
216
|
}
|
|
159
217
|
|
|
160
218
|
.comment-content .hljs-attr,
|
|
161
|
-
.comment-content .hljs-attribute
|
|
219
|
+
.comment-content .hljs-attribute,
|
|
220
|
+
.markdown-preview .hljs-attr,
|
|
221
|
+
.markdown-preview .hljs-attribute,
|
|
222
|
+
.creative-content .hljs-attr,
|
|
223
|
+
.creative-content .hljs-attribute,
|
|
224
|
+
.creative-title-content .hljs-attr,
|
|
225
|
+
.creative-title-content .hljs-attribute {
|
|
162
226
|
color: var(--syntax-attr);
|
|
163
227
|
}
|
|
164
228
|
|
|
165
229
|
.comment-content .hljs-variable,
|
|
166
|
-
.comment-content .hljs-template-variable
|
|
230
|
+
.comment-content .hljs-template-variable,
|
|
231
|
+
.markdown-preview .hljs-variable,
|
|
232
|
+
.markdown-preview .hljs-template-variable,
|
|
233
|
+
.creative-content .hljs-variable,
|
|
234
|
+
.creative-content .hljs-template-variable,
|
|
235
|
+
.creative-title-content .hljs-variable,
|
|
236
|
+
.creative-title-content .hljs-template-variable {
|
|
167
237
|
color: var(--syntax-variable);
|
|
168
238
|
}
|
|
169
239
|
|
|
170
|
-
.comment-content .hljs-params
|
|
240
|
+
.comment-content .hljs-params,
|
|
241
|
+
.markdown-preview .hljs-params,
|
|
242
|
+
.creative-content .hljs-params,
|
|
243
|
+
.creative-title-content .hljs-params {
|
|
171
244
|
color: var(--color-code-text);
|
|
172
245
|
}
|
|
173
246
|
|
|
174
|
-
.comment-content .hljs-regexp
|
|
247
|
+
.comment-content .hljs-regexp,
|
|
248
|
+
.markdown-preview .hljs-regexp,
|
|
249
|
+
.creative-content .hljs-regexp,
|
|
250
|
+
.creative-title-content .hljs-regexp {
|
|
175
251
|
color: var(--syntax-regexp);
|
|
176
252
|
}
|
|
177
253
|
|
|
178
|
-
.comment-content .hljs-tag
|
|
254
|
+
.comment-content .hljs-tag,
|
|
255
|
+
.markdown-preview .hljs-tag,
|
|
256
|
+
.creative-content .hljs-tag,
|
|
257
|
+
.creative-title-content .hljs-tag {
|
|
179
258
|
color: var(--syntax-tag);
|
|
180
259
|
}
|
|
181
260
|
|
|
182
|
-
.comment-content .hljs-name
|
|
261
|
+
.comment-content .hljs-name,
|
|
262
|
+
.markdown-preview .hljs-name,
|
|
263
|
+
.creative-content .hljs-name,
|
|
264
|
+
.creative-title-content .hljs-name {
|
|
183
265
|
color: var(--syntax-name);
|
|
184
266
|
}
|
|
185
267
|
|
|
186
268
|
.comment-content .hljs-selector-class,
|
|
187
|
-
.comment-content .hljs-selector-id
|
|
269
|
+
.comment-content .hljs-selector-id,
|
|
270
|
+
.markdown-preview .hljs-selector-class,
|
|
271
|
+
.markdown-preview .hljs-selector-id,
|
|
272
|
+
.creative-content .hljs-selector-class,
|
|
273
|
+
.creative-content .hljs-selector-id,
|
|
274
|
+
.creative-title-content .hljs-selector-class,
|
|
275
|
+
.creative-title-content .hljs-selector-id {
|
|
188
276
|
color: var(--syntax-selector);
|
|
189
277
|
}
|
|
190
278
|
|
|
191
279
|
.comment-content .hljs-selector-attr,
|
|
192
|
-
.comment-content .hljs-selector-pseudo
|
|
280
|
+
.comment-content .hljs-selector-pseudo,
|
|
281
|
+
.markdown-preview .hljs-selector-attr,
|
|
282
|
+
.markdown-preview .hljs-selector-pseudo,
|
|
283
|
+
.creative-content .hljs-selector-attr,
|
|
284
|
+
.creative-content .hljs-selector-pseudo,
|
|
285
|
+
.creative-title-content .hljs-selector-attr,
|
|
286
|
+
.creative-title-content .hljs-selector-pseudo {
|
|
193
287
|
color: var(--syntax-attr);
|
|
194
288
|
}
|
|
195
289
|
|
|
196
290
|
.comment-content .hljs-symbol,
|
|
197
|
-
.comment-content .hljs-bullet
|
|
291
|
+
.comment-content .hljs-bullet,
|
|
292
|
+
.markdown-preview .hljs-symbol,
|
|
293
|
+
.markdown-preview .hljs-bullet,
|
|
294
|
+
.creative-content .hljs-symbol,
|
|
295
|
+
.creative-content .hljs-bullet,
|
|
296
|
+
.creative-title-content .hljs-symbol,
|
|
297
|
+
.creative-title-content .hljs-bullet {
|
|
198
298
|
color: var(--syntax-number);
|
|
199
299
|
}
|
|
200
300
|
|
|
201
|
-
.comment-content .hljs-meta
|
|
301
|
+
.comment-content .hljs-meta,
|
|
302
|
+
.markdown-preview .hljs-meta,
|
|
303
|
+
.creative-content .hljs-meta,
|
|
304
|
+
.creative-title-content .hljs-meta {
|
|
202
305
|
color: var(--syntax-meta);
|
|
203
306
|
}
|
|
204
307
|
|
|
205
|
-
.comment-content .hljs-punctuation
|
|
308
|
+
.comment-content .hljs-punctuation,
|
|
309
|
+
.markdown-preview .hljs-punctuation,
|
|
310
|
+
.creative-content .hljs-punctuation,
|
|
311
|
+
.creative-title-content .hljs-punctuation {
|
|
206
312
|
color: var(--color-code-text);
|
|
207
313
|
}
|
|
208
314
|
|
|
209
|
-
.comment-content .hljs-deletion
|
|
315
|
+
.comment-content .hljs-deletion,
|
|
316
|
+
.markdown-preview .hljs-deletion,
|
|
317
|
+
.creative-content .hljs-deletion,
|
|
318
|
+
.creative-title-content .hljs-deletion {
|
|
210
319
|
color: var(--syntax-deletion-text);
|
|
211
320
|
background: var(--syntax-deletion-bg);
|
|
212
321
|
}
|
|
213
322
|
|
|
214
|
-
.comment-content .hljs-addition
|
|
323
|
+
.comment-content .hljs-addition,
|
|
324
|
+
.markdown-preview .hljs-addition,
|
|
325
|
+
.creative-content .hljs-addition,
|
|
326
|
+
.creative-title-content .hljs-addition {
|
|
215
327
|
color: var(--syntax-addition-text);
|
|
216
328
|
background: var(--syntax-addition-bg);
|
|
217
329
|
}
|
|
218
330
|
|
|
219
|
-
.comment-content .hljs-emphasis
|
|
331
|
+
.comment-content .hljs-emphasis,
|
|
332
|
+
.markdown-preview .hljs-emphasis,
|
|
333
|
+
.creative-content .hljs-emphasis,
|
|
334
|
+
.creative-title-content .hljs-emphasis {
|
|
220
335
|
font-style: italic;
|
|
221
336
|
}
|
|
222
337
|
|
|
223
|
-
.comment-content .hljs-strong
|
|
338
|
+
.comment-content .hljs-strong,
|
|
339
|
+
.markdown-preview .hljs-strong,
|
|
340
|
+
.creative-content .hljs-strong,
|
|
341
|
+
.creative-title-content .hljs-strong {
|
|
224
342
|
font-weight: var(--weight-7);
|
|
225
343
|
}
|
|
@@ -806,7 +806,8 @@ body.chat-fullscreen {
|
|
|
806
806
|
}
|
|
807
807
|
|
|
808
808
|
.edit-comment-action-btn,
|
|
809
|
-
.approve-comment-btn
|
|
809
|
+
.approve-comment-btn,
|
|
810
|
+
.deny-comment-btn {
|
|
810
811
|
padding: 0.15em 0.4em;
|
|
811
812
|
border-radius: var(--radius-2);
|
|
812
813
|
font-size: 0.75rem;
|
|
@@ -836,6 +837,18 @@ body.chat-fullscreen {
|
|
|
836
837
|
border-color: var(--color-success);
|
|
837
838
|
}
|
|
838
839
|
|
|
840
|
+
.deny-comment-btn {
|
|
841
|
+
border: 1px solid color-mix(in srgb, var(--color-danger) 35%, transparent);
|
|
842
|
+
background: color-mix(in srgb, var(--color-danger) 15%, transparent);
|
|
843
|
+
color: var(--color-danger);
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
.deny-comment-btn:hover {
|
|
847
|
+
background: var(--color-danger);
|
|
848
|
+
color: var(--text-on-badge);
|
|
849
|
+
border-color: var(--color-danger);
|
|
850
|
+
}
|
|
851
|
+
|
|
839
852
|
.comment-status-label {
|
|
840
853
|
margin-left: 0.4em;
|
|
841
854
|
font-size: 0.75em;
|
|
@@ -858,6 +871,11 @@ body.chat-fullscreen {
|
|
|
858
871
|
color: var(--color-complete);
|
|
859
872
|
}
|
|
860
873
|
|
|
874
|
+
.comment-status-label.denied-label {
|
|
875
|
+
background-color: color-mix(in srgb, var(--color-danger) 20%, transparent);
|
|
876
|
+
color: var(--color-danger);
|
|
877
|
+
}
|
|
878
|
+
|
|
861
879
|
.comment-status-label.pending-label {
|
|
862
880
|
background-color: color-mix(in srgb, var(--color-warning) 20%, transparent);
|
|
863
881
|
color: var(--color-warning);
|
|
@@ -1111,6 +1129,34 @@ body.chat-fullscreen {
|
|
|
1111
1129
|
gap: var(--space-1);
|
|
1112
1130
|
}
|
|
1113
1131
|
|
|
1132
|
+
/* Horizontally-scrollable viewport for channel chips + typing indicator.
|
|
1133
|
+
Keeps PR/Preview badges and live typing on a single line so they never
|
|
1134
|
+
wrap and push the form down. The scroll-prev button stays pinned at the
|
|
1135
|
+
left because it is a flex sibling of (not inside) this viewport.
|
|
1136
|
+
min-width:0 lets this flex child shrink below its content width, which is
|
|
1137
|
+
what actually enables overflow scrolling. */
|
|
1138
|
+
#typing-scroll-viewport {
|
|
1139
|
+
flex: 1;
|
|
1140
|
+
min-width: 0;
|
|
1141
|
+
display: flex;
|
|
1142
|
+
align-items: center;
|
|
1143
|
+
gap: var(--space-1);
|
|
1144
|
+
flex-wrap: nowrap;
|
|
1145
|
+
overflow-x: auto;
|
|
1146
|
+
overflow-y: hidden;
|
|
1147
|
+
scrollbar-width: thin;
|
|
1148
|
+
scroll-behavior: smooth;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
#typing-scroll-viewport::-webkit-scrollbar {
|
|
1152
|
+
height: 4px;
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
#typing-scroll-viewport::-webkit-scrollbar-thumb {
|
|
1156
|
+
background: var(--border-color);
|
|
1157
|
+
border-radius: var(--radius-2);
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1114
1160
|
.scroll-prev-msg-btn {
|
|
1115
1161
|
background: none;
|
|
1116
1162
|
border: 1px solid var(--border-color);
|
|
@@ -1131,10 +1177,11 @@ body.chat-fullscreen {
|
|
|
1131
1177
|
|
|
1132
1178
|
#typing-indicator {
|
|
1133
1179
|
font-style: italic;
|
|
1134
|
-
flex:
|
|
1180
|
+
flex: 0 0 auto;
|
|
1135
1181
|
min-height: var(--space-px-5);
|
|
1136
1182
|
display: flex;
|
|
1137
1183
|
align-items: center;
|
|
1184
|
+
white-space: nowrap;
|
|
1138
1185
|
}
|
|
1139
1186
|
|
|
1140
1187
|
#typing-indicator .avatar-wrapper {
|
|
@@ -1184,6 +1231,90 @@ body.chat-fullscreen {
|
|
|
1184
1231
|
color: var(--text-on-btn);
|
|
1185
1232
|
}
|
|
1186
1233
|
|
|
1234
|
+
/* --- Channel Chips (PR monitor etc) ------------------------------------ */
|
|
1235
|
+
#channel-chips-container,
|
|
1236
|
+
.channel-chips {
|
|
1237
|
+
display: inline-flex;
|
|
1238
|
+
flex-wrap: nowrap;
|
|
1239
|
+
flex-shrink: 0;
|
|
1240
|
+
gap: var(--space-1);
|
|
1241
|
+
align-items: center;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
.channel-chip {
|
|
1245
|
+
display: inline-flex;
|
|
1246
|
+
align-items: center;
|
|
1247
|
+
gap: var(--space-px-1);
|
|
1248
|
+
padding: var(--space-px-1) var(--space-2);
|
|
1249
|
+
border: 1px solid var(--border-color);
|
|
1250
|
+
border-radius: var(--radius-2);
|
|
1251
|
+
background: var(--color-section-bg);
|
|
1252
|
+
font-size: var(--text-0);
|
|
1253
|
+
line-height: 1;
|
|
1254
|
+
white-space: nowrap;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
.channel-chip a {
|
|
1258
|
+
color: var(--color-text);
|
|
1259
|
+
text-decoration: none;
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
.channel-chip a:hover {
|
|
1263
|
+
text-decoration: underline;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
.channel-chip button {
|
|
1267
|
+
background: none;
|
|
1268
|
+
border: 0;
|
|
1269
|
+
padding: 0 var(--space-px-1);
|
|
1270
|
+
color: var(--text-muted);
|
|
1271
|
+
cursor: pointer;
|
|
1272
|
+
font-size: 1.1em;
|
|
1273
|
+
line-height: 1;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
.channel-chip button:hover {
|
|
1277
|
+
color: var(--color-danger);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
/* Detached chips lose a touch of contrast so users can tell a closed/merged
|
|
1281
|
+
PR apart from one that is still actively monitored. */
|
|
1282
|
+
.channel-chip--detached {
|
|
1283
|
+
opacity: 0.7;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
.channel-chip-badge {
|
|
1287
|
+
display: inline-block;
|
|
1288
|
+
width: var(--space-2);
|
|
1289
|
+
height: var(--space-2);
|
|
1290
|
+
border-radius: 999px;
|
|
1291
|
+
flex-shrink: 0;
|
|
1292
|
+
background: var(--color-text);
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
.channel-chip-badge--open {
|
|
1296
|
+
background: var(--color-success);
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
.channel-chip-badge--merged {
|
|
1300
|
+
/* No purple token yet; --color-active (blue) is the closest neutral that
|
|
1301
|
+
reads as "shipped" without colliding with success/danger semantics. */
|
|
1302
|
+
background: var(--color-active);
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.channel-chip-badge--closed_without_merge {
|
|
1306
|
+
background: var(--color-danger);
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
.channel-chip-badge--running {
|
|
1310
|
+
background: var(--color-success);
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
.channel-chip-badge--stopped {
|
|
1314
|
+
background: var(--color-text);
|
|
1315
|
+
opacity: 0.5;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1187
1318
|
/* --- Context Chips --- */
|
|
1188
1319
|
.comment-contexts-list {
|
|
1189
1320
|
display: flex;
|