perfViz/src/components/httprequestviewer/InitiatorView.module.css
Michael Mainguy 488d9a2650 Add JavaScript viewer and HTTP request initiator tracking
Introduces comprehensive request initiator visualization and JavaScript performance analysis capabilities.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-19 06:32:57 -05:00

256 lines
4.9 KiB
CSS

/* Initiator View styles using CSS variables from App.module.css */
.initiatorContainer {
background: var(--color-bg-secondary);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
padding: var(--spacing-lg);
margin-top: var(--spacing-md);
}
.initiatorHeader {
margin-bottom: var(--spacing-md);
padding-bottom: var(--spacing-sm);
border-bottom: 2px solid var(--color-primary);
}
.title {
color: var(--color-text-highlight);
font-size: var(--font-size-lg);
font-weight: bold;
margin: 0;
}
/* No initiator state */
.noInitiator {
color: var(--color-text-muted);
font-style: italic;
text-align: center;
padding: var(--spacing-lg);
background: var(--color-bg-light);
border-radius: var(--radius-md);
}
/* Initiator basic information */
.initiatorInfo {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
margin-bottom: var(--spacing-md);
}
.infoRow {
display: flex;
align-items: center;
gap: var(--spacing-md);
}
.infoLabel {
font-weight: 500;
color: var(--color-text);
min-width: 80px;
font-size: var(--font-size-sm);
}
.infoValue {
color: var(--color-text-highlight);
font-size: var(--font-size-base);
display: flex;
align-items: center;
gap: var(--spacing-xs);
}
/* Section titles */
.sectionTitle {
color: var(--color-text-highlight);
font-size: var(--font-size-md);
font-weight: bold;
margin: 0 0 var(--spacing-sm) 0;
display: flex;
align-items: center;
gap: var(--spacing-xs);
}
/* Parser information */
.parserInfo {
background: var(--color-bg-light);
border: 1px solid var(--color-border-light);
border-radius: var(--radius-md);
padding: var(--spacing-md);
margin-bottom: var(--spacing-md);
}
.parserDetails {
display: flex;
flex-direction: column;
gap: var(--spacing-xs);
}
.parserUrl {
font-size: var(--font-size-base);
}
.parserLocation {
font-size: var(--font-size-sm);
color: var(--color-text-muted);
font-family: var(--font-family-mono);
}
/* Call stack information */
.stackInfo {
background: var(--color-bg-light);
border: 1px solid var(--color-border-light);
border-radius: var(--radius-md);
padding: var(--spacing-md);
}
.callStack {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
max-height: 300px;
overflow-y: auto;
}
.callFrame {
display: flex;
align-items: flex-start;
gap: var(--spacing-sm);
padding: var(--spacing-sm);
background: var(--color-bg-primary);
border: 1px solid var(--color-border-light);
border-radius: var(--radius-sm);
transition: all 0.2s ease;
}
.callFrame:hover {
background: var(--color-bg-hover);
border-color: var(--color-primary);
}
.frameIndex {
background: var(--color-primary);
color: white;
border-radius: 50%;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
font-size: var(--font-size-xs);
font-weight: bold;
flex-shrink: 0;
margin-top: 2px;
}
.frameDetails {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: var(--spacing-xs);
}
.frameFunction {
font-weight: 500;
color: var(--color-text-highlight);
font-size: var(--font-size-base);
font-family: var(--font-family-mono);
word-break: break-word;
}
.frameLocation {
display: flex;
align-items: center;
gap: var(--spacing-sm);
flex-wrap: wrap;
}
.frameUrl {
color: var(--color-primary);
text-decoration: none;
font-size: var(--font-size-sm);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 400px;
}
.frameUrl:hover {
color: var(--color-text-highlight);
text-decoration: underline;
}
.framePosition {
font-family: var(--font-family-mono);
font-size: var(--font-size-xs);
color: var(--color-text-muted);
background: var(--color-bg-secondary);
padding: 2px 6px;
border-radius: var(--radius-xs);
white-space: nowrap;
}
/* Basic info for other types */
.basicInfo {
background: var(--color-bg-light);
border: 1px solid var(--color-border-light);
border-radius: var(--radius-md);
padding: var(--spacing-md);
text-align: center;
}
.basicInfoText {
color: var(--color-text-muted);
font-size: var(--font-size-base);
}
/* URL links */
.urlLink {
color: var(--color-primary);
text-decoration: none;
word-break: break-word;
}
.urlLink:hover {
color: var(--color-text-highlight);
text-decoration: underline;
}
/* Responsive design */
@media (max-width: 768px) {
.initiatorContainer {
padding: var(--spacing-md);
}
.infoRow {
flex-direction: column;
align-items: flex-start;
gap: var(--spacing-xs);
}
.infoLabel {
min-width: auto;
}
.frameLocation {
flex-direction: column;
align-items: flex-start;
gap: var(--spacing-xs);
}
.frameUrl {
max-width: 100%;
}
}
@media (max-width: 480px) {
.callFrame {
flex-direction: column;
gap: var(--spacing-xs);
}
.frameIndex {
align-self: flex-start;
}
}