Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 28 additions & 15 deletions scripts/portal_generator/assets/portal.js
Original file line number Diff line number Diff line change
Expand Up @@ -3627,27 +3627,40 @@ function buildUrlBar(bar, opId, path, servers) {

var idx = getActiveServerIndex(opId, servers);
var resolvedUrl = resolveServerUrl(servers[idx], opId);

// Server part (clickable)
var serverSpan = document.createElement('span');
serverSpan.className = 'url-server-part';
serverSpan.textContent = resolvedUrl;
serverSpan.title = 'Click to change server';
var fullUrl = resolvedUrl + path;

if (servers.length > 1) {
serverSpan.addEventListener('click', function(e) {
// Create combobox-style container
var combobox = document.createElement('div');
combobox.className = 'url-combobox';
combobox.title = 'Click to change server';

// URL text
var urlText = document.createElement('span');
urlText.className = 'url-combobox-text';
urlText.textContent = fullUrl;

// Chevron icon
var chevron = document.createElement('span');
chevron.className = 'url-combobox-chevron';
chevron.innerHTML = '<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M3 4.5L6 7.5L9 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';

combobox.appendChild(urlText);
combobox.appendChild(chevron);

combobox.addEventListener('click', function(e) {
e.stopPropagation();
toggleServerDropdown(bar, opId, servers);
});
}

// Path part
var pathSpan = document.createElement('span');
pathSpan.className = 'url-path-part';
pathSpan.textContent = path;

bar.appendChild(serverSpan);
bar.appendChild(pathSpan);
bar.appendChild(combobox);
} else {
// Single server - just show URL as plain text
var urlText = document.createElement('span');
urlText.className = 'url-text-plain';
urlText.textContent = fullUrl;
bar.appendChild(urlText);
}
}

function toggleServerDropdown(bar, opId, servers) {
Expand Down
114 changes: 90 additions & 24 deletions scripts/portal_generator/assets/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,7 @@ code {

/* Tooltip on hover - liquid glass effect */
.hero-tab-mcp::after {
content: "Something wonderful is going to happen.";
content: "In final testing - launching this month";
position: absolute;
bottom: -40px;
left: 50%;
Expand Down Expand Up @@ -968,18 +968,19 @@ code {

/* Catalog Results Header */
.catalog-results-header {
display: flex;
display: grid;
grid-template-columns: repeat(3, minmax(0, 389px));
gap: 32px; /* Same horizontal gap as card grid */
align-items: center;
justify-content: space-between;
gap: var(--space-lg);
justify-content: center;
}

.catalog-search-and-results {
display: flex;
align-items: center;
gap: var(--space-lg);
flex: 1;
min-width: 0;
grid-column: 1 / 3;
}

.results-count {
Expand Down Expand Up @@ -1151,14 +1152,15 @@ code {

.tag-chip {
display: inline-flex;
border: 1px solid var(--color-neutral-5);
border: 1px solid var(--color-border-primary);
align-items: center;
gap: var(--space-xx-small);
padding: var(--space-xxx-small) var(--space-x-small);
color: var(--color-neutral-5);
color: var(--color-text-primary);
background: var(--color-bg-primary);
border-radius: var(--radius-xl);
font-size: var(--font-size-3);
font-weight: var(--font-weight-regular);
font-weight: var(--font-weight-medium);
transition: background 0.15s cubic-bezier(0.4, 0.0, 0.2, 1);
white-space: nowrap;
height: 1.5rem;
Expand Down Expand Up @@ -1265,6 +1267,8 @@ code {
display: flex;
align-items: center;
gap: 12px;
grid-column: 3;
justify-self: end;
}

/* Sort Button */
Expand Down Expand Up @@ -1422,19 +1426,51 @@ code {
/* Catalog Grid */
.catalog-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 36px 0px;
grid-template-columns: repeat(3, minmax(0, 389px));
gap: 36px 32px; /* 36px vertical, 32px horizontal gap for equal "streets" */
justify-content: center;
}

@media (max-width: 1200px) {
.catalog-grid {
grid-template-columns: repeat(2, 1fr);
grid-template-columns: repeat(2, minmax(0, 389px));
gap: 36px 32px;
justify-content: center;
}

.catalog-results-header {
grid-template-columns: repeat(2, minmax(0, 389px));
gap: 32px;
justify-content: center;
}

.catalog-search-and-results {
grid-column: 1 / 2;
}

.catalog-controls-right {
grid-column: 2;
}
}

@media (max-width: 768px) {
.catalog-grid {
grid-template-columns: 1fr;
gap: 36px 0;
}

.catalog-results-header {
grid-template-columns: 1fr;
gap: var(--space-lg);
}

.catalog-search-and-results {
grid-column: 1;
}

.catalog-controls-right {
grid-column: 1;
justify-self: start;
}
}

Expand Down Expand Up @@ -3386,20 +3422,50 @@ button.nav-group-header {
overflow: hidden;
}

.url-server-part {
color: var(--color-text-secondary);
/* URL Combobox - Flat style with chevron aligned to far right */
.url-combobox {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
cursor: pointer;
position: relative;
border-bottom: 1px dashed transparent;
transition: border-color 0.15s, color 0.15s;
font-family: var(--font-mono);
font-size: var(--font-size-3);
min-height: 24px;
}

.url-server-part:hover {
.url-combobox:hover .url-combobox-text {
color: var(--color-primary);
}

.url-combobox:hover .url-combobox-chevron {
color: var(--color-primary);
border-bottom-color: var(--color-primary);
}

.url-path-part {
.url-combobox-text {
color: var(--color-text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: var(--space-lg);
}

.url-combobox-chevron {
display: flex;
align-items: center;
color: var(--color-text-secondary);
flex-shrink: 0;
margin-left: auto;
}

.url-combobox-chevron svg {
display: block;
}

/* Plain URL text for single server */
.url-text-plain {
font-family: var(--font-mono);
font-size: var(--font-size-3);
color: var(--color-text-primary);
}

Expand Down Expand Up @@ -3917,7 +3983,6 @@ details[open] .examples-toggle-icon {

.ace-editor-container {
border: 1px solid var(--color-gray-200);
border-radius: var(--radius-small);
overflow: hidden;
}

Expand Down Expand Up @@ -4758,7 +4823,6 @@ details[open] .examples-toggle-icon {
.example-block {
margin: var(--space-sm) 0;
border: 1px solid var(--color-border-primary);
border-radius: var(--radius-small);
overflow: hidden;
max-width: 100%;
}
Expand Down Expand Up @@ -5157,8 +5221,11 @@ details[open] .examples-toggle-icon {
}

.skill-view-markdown ul,
.skill-view-markdown ol {
padding-left: var(--space-x-large);
.skill-view-markdown ol,
.skill-page .content-section ul,
.skill-page .content-section ol {
margin-left: var(--space-lg);
padding-left: var(--space-xl);
margin-bottom: var(--space-medium);
}

Expand Down Expand Up @@ -5319,7 +5386,6 @@ details[open] .examples-toggle-icon {
font-family: var(--font-mono);
font-size: 0.8125rem;
border: 1px solid var(--color-neutral-5);
border-radius: var(--radius-medium);
min-height: 200px;
}

Expand Down
10 changes: 5 additions & 5 deletions scripts/portal_generator/templates/homepage.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@
<section class="hero">
<div class="hero-content">
<h1 class="hero-title">Mulesoft Developer Portal</h1>
<p class="hero-subtitle">For developers and AI agents to discover, interact and automate together</p>
<p class="hero-subtitle">For developers and AI agents to discover, interact, and automate together</p>

<div class="hero-tabs">
<button class="hero-tab active" data-filter="all">All</button>
<button class="hero-tab" data-filter="api">
<img src="assets/icons/api-filter-icon.svg" width="16" height="16" style="margin-right: 6px;" alt="">
APIs
</button>
<button class="hero-tab" data-filter="skill">
<img src="assets/icons/skill-filter-icon.svg" width="16" height="16" style="margin-right: 6px;" alt="">
Skills
</button>
<button class="hero-tab hero-tab-mcp" data-filter="mcp">
<img src="assets/icons/mcp-filter-icon.svg" width="16" height="16" style="margin-right: 6px;" alt="">
MCP Servers
<span class="coming-soon-badge">Coming Soon</span>
</button>
<button class="hero-tab" data-filter="skill">
<img src="assets/icons/skill-filter-icon.svg" width="16" height="16" style="margin-right: 6px;" alt="">
Skills
</button>
</div>
</div>
</section>
Expand Down
Loading