Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qjclaw-dmg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AI-甘富林
qjclaw-dmg
Commits
b1d4353e
Commit
b1d4353e
authored
May 19, 2026
by
edy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(ui): refine branded expert workspace heading
parent
b9019396
Pipeline
#18474
failed
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
56 additions
and
11 deletions
+56
-11
ConversationWorkspaceView.tsx
apps/ui/src/features/chat/ConversationWorkspaceView.tsx
+8
-5
ExpertsView.tsx
apps/ui/src/features/experts/ExpertsView.tsx
+9
-6
chat.css
apps/ui/src/styles/chat.css
+16
-0
expertWorkspaceHeaderSource.test.ts
apps/ui/test/expertWorkspaceHeaderSource.test.ts
+23
-0
No files found.
apps/ui/src/features/chat/ConversationWorkspaceView.tsx
View file @
b1d4353e
...
@@ -256,13 +256,16 @@ export function ConversationWorkspaceView({
...
@@ -256,13 +256,16 @@ export function ConversationWorkspaceView({
{
homeMicrocopyStatus
}
{
homeMicrocopyStatus
}
</
span
>
</
span
>
</
div
>
</
div
>
)
:
expertWorkspaceLogo
?
(
<
div
className=
"expert-hero-heading"
>
{
expertWorkspaceLogo
}
<
strong
className=
"expert-hero-title"
>
{
activeExpertName
}
</
strong
>
</
div
>
)
:
(
)
:
(
<
div
className=
"conversation-panel-kicker expert-hero-kicker"
>
<
div
className=
"conversation-panel-kicker expert-hero-kicker"
>
{
expertWorkspaceLogo
??
(
<
span
className=
{
"expert-hero-icon expert-hero-icon-"
+
activeExpertVisualKey
}
aria
-
hidden=
"true"
>
<
span
className=
{
"expert-hero-icon expert-hero-icon-"
+
activeExpertVisualKey
}
aria
-
hidden=
"true"
>
{
renderExpertIcon
(
activeExpertVisualKey
)
}
{
renderExpertIcon
(
activeExpertVisualKey
)
}
</
span
>
</
span
>
)
}
<
span
className=
"expert-hero-copy"
>
<
span
className=
"expert-hero-copy"
>
<
strong
>
{
activeExpertName
}
</
strong
>
<
strong
>
{
activeExpertName
}
</
strong
>
</
span
>
</
span
>
...
...
apps/ui/src/features/experts/ExpertsView.tsx
View file @
b1d4353e
...
@@ -79,13 +79,16 @@ export function ExpertsView({
...
@@ -79,13 +79,16 @@ export function ExpertsView({
return
(
return
(
<
ChatWorkspace
<
ChatWorkspace
panelLead=
{
(
panelLead=
{
expertWorkspaceLogo
?
(
<
div
className=
"expert-hero-heading"
>
{
expertWorkspaceLogo
}
<
strong
className=
"expert-hero-title"
>
{
activeExpertName
}
</
strong
>
</
div
>
)
:
(
<
div
className=
"conversation-panel-kicker expert-hero-kicker"
>
<
div
className=
"conversation-panel-kicker expert-hero-kicker"
>
{
expertWorkspaceLogo
??
(
<
span
className=
{
"expert-hero-icon expert-hero-icon-"
+
activeExpertVisualKey
}
aria
-
hidden=
"true"
>
<
span
className=
{
"expert-hero-icon expert-hero-icon-"
+
activeExpertVisualKey
}
aria
-
hidden=
"true"
>
{
renderExpertIcon
(
activeExpertVisualKey
)
}
{
renderExpertIcon
(
activeExpertVisualKey
)
}
</
span
>
</
span
>
)
}
<
span
className=
"expert-hero-copy"
>
<
span
className=
"expert-hero-copy"
>
<
strong
>
{
activeExpertName
}
</
strong
>
<
strong
>
{
activeExpertName
}
</
strong
>
</
span
>
</
span
>
...
...
apps/ui/src/styles/chat.css
View file @
b1d4353e
...
@@ -564,6 +564,22 @@
...
@@ -564,6 +564,22 @@
min-width
:
0
;
min-width
:
0
;
}
}
.conversation-shell
.expert-hero-heading
{
display
:
inline-flex
;
align-items
:
center
;
gap
:
1em
;
min-width
:
0
;
}
.conversation-shell
.expert-hero-title
{
min-width
:
0
;
color
:
#12355f
;
font-size
:
13px
;
font-weight
:
700
;
line-height
:
1.2
;
white-space
:
nowrap
;
}
.conversation-shell
.expert-workspace-logo
{
.conversation-shell
.expert-workspace-logo
{
width
:
44px
;
width
:
44px
;
height
:
44px
;
height
:
44px
;
...
...
apps/ui/test/expertWorkspaceHeaderSource.test.ts
0 → 100644
View file @
b1d4353e
import
test
from
"node:test"
import
assert
from
"node:assert/strict"
import
{
readFileSync
}
from
"node:fs"
const
conversationWorkspaceSource
=
readFileSync
(
new
URL
(
"../src/features/chat/ConversationWorkspaceView.tsx"
,
import
.
meta
.
url
),
"utf8"
)
const
expertsViewSource
=
readFileSync
(
new
URL
(
"../src/features/experts/ExpertsView.tsx"
,
import
.
meta
.
url
),
"utf8"
)
const
chatStylesSource
=
readFileSync
(
new
URL
(
"../src/styles/chat.css"
,
import
.
meta
.
url
),
"utf8"
)
function
cssBlock
(
source
:
string
,
selector
:
string
):
string
{
const
start
=
source
.
indexOf
(
`
${
selector
}
{`
)
assert
.
notEqual
(
start
,
-
1
,
`Missing CSS selector:
${
selector
}
`
)
const
end
=
source
.
indexOf
(
"
\n
}"
,
start
)
assert
.
notEqual
(
end
,
-
1
,
`Missing CSS block end:
${
selector
}
`
)
return
source
.
slice
(
start
,
end
+
2
)
}
test
(
"branded expert workspace heading renders as icon followed by plain text"
,
()
=>
{
assert
.
match
(
conversationWorkspaceSource
,
/expertWorkspaceLogo
\?
\(\s
*<div className="expert-hero-heading">
[\s\S]
*
?\{
expertWorkspaceLogo
\}[\s\S]
*
?
<strong className="expert-hero-title">
\{
activeExpertName
\}
<
\/
strong>
[\s\S]
*
?
<
\/
div>
\s
*
\)
:
\(
/
)
assert
.
match
(
expertsViewSource
,
/expertWorkspaceLogo
\?
\(\s
*<div className="expert-hero-heading">
[\s\S]
*
?\{
expertWorkspaceLogo
\}[\s\S]
*
?
<strong className="expert-hero-title">
\{
activeExpertName
\}
<
\/
strong>
[\s\S]
*
?
<
\/
div>
\s
*
\)
:
\(
/
)
assert
.
doesNotMatch
(
conversationWorkspaceSource
.
match
(
/expertWorkspaceLogo
\?
\([\s\S]
*
?\)
:
\(
/
)?.[
0
]
??
""
,
/conversation-panel-kicker/
)
assert
.
doesNotMatch
(
expertsViewSource
.
match
(
/expertWorkspaceLogo
\?
\([\s\S]
*
?\)
:
\(
/
)?.[
0
]
??
""
,
/conversation-panel-kicker/
)
assert
.
match
(
cssBlock
(
chatStylesSource
,
".conversation-shell .expert-hero-heading"
),
/display:
\s
*inline-flex;
[\s\S]
*
?
gap:
\s
*1em;/
)
})
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment