Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
70 changes: 69 additions & 1 deletion packages/host/app/components/operator-mode/submode-layout.gts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,13 @@ type PanelWidths = {
export default class SubmodeLayout extends Component<Signature> {
@tracked private searchSheetMode: SearchSheetMode = SearchSheetModes.Closed;
@tracked private profileSummaryOpened = false;
@tracked private sortOrder: 'default' | 'hosted-only' = 'default';

@action private setSortOrder(event: Event) {
this.sortOrder = (event.target as HTMLSelectElement).value as
| 'default'
| 'hosted-only';
}

private aiPanelWidths: PanelWidths = new TrackedObject({
defaultWidth: 30,
Expand Down Expand Up @@ -401,6 +408,20 @@ export default class SubmodeLayout extends Component<Signature> {
{{on 'click' this.toggleWorkspaceChooser}}
data-test-workspace-chooser-toggle
/>
{{#if this.workspaceChooserOpened}}
<div class='sort-controls'>
<label class='sort-label' for='workspace-sort-dropdown'>Sort by</label>
<select
id='workspace-sort-dropdown'
class='sort-dropdown'
{{on 'change' this.setSortOrder}}
aria-label='Filter workspaces'
>
<option value='default'>View All</option>
<option value='hosted-only'>Hosted Only</option>
</select>
</div>
{{/if}}
{{#if (not this.workspaceChooserOpened)}}
<SubmodeSwitcher
class='submode-switcher'
Expand Down Expand Up @@ -432,7 +453,10 @@ export default class SubmodeLayout extends Component<Signature> {
</button>
</div>
{{#if this.workspaceChooserOpened}}
<WorkspaceChooser />
<WorkspaceChooser
@sortOrder={{this.sortOrder}}
@onSortChange={{this.setSortOrder}}
/>
{{/if}}

{{yield
Expand Down Expand Up @@ -574,6 +598,50 @@ export default class SubmodeLayout extends Component<Signature> {
gap: var(--operator-mode-spacing);
}

.sort-controls {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
gap: 10px;
pointer-events: auto;
}
.sort-label {
color: rgba(255 255 255 / 50%);
font: 400 var(--boxel-font-sm);
letter-spacing: var(--boxel-lsp);
white-space: nowrap;
}
.sort-dropdown {
appearance: none;
background-color: rgba(255 255 255 / 8%);
border: 1px solid rgba(255 255 255 / 25%);
border-radius: 7px;
color: var(--boxel-light);
cursor: pointer;
font: 400 var(--boxel-font-sm);
letter-spacing: var(--boxel-lsp);
padding: 6px 32px 6px 14px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 12px center;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.sort-dropdown:hover {
background-color: rgba(255 255 255 / 12%);
border-color: rgba(255 255 255 / 50%);
}
.sort-dropdown:focus {
outline: none;
border-color: rgba(255 255 255 / 50%);
}
.sort-dropdown option {
background-color: #1a1628;
color: var(--boxel-light);
}

.submode-switcher {
border: none;
border-radius: var(--submode-bar-item-border-radius);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,7 @@ export default class AddWorkspace extends Component<Signature> {
data-test-add-workspace
>
<div class='content'>
<IconPlus width='40px' height='40px' role='presentation' class='icon' />
<br />
New workspace
<IconPlus width='32px' height='32px' role='presentation' class='icon' />
</div>
</ItemContainer>
{{#if this.isModalOpen}}
Expand All @@ -257,7 +255,7 @@ export default class AddWorkspace extends Component<Signature> {
{{/if}}
<style scoped>
.container {
border-style: dashed;
border-style: none;
background: transparent;
display: flex;
justify-content: center;
Expand Down
657 changes: 626 additions & 31 deletions packages/host/app/components/operator-mode/workspace-chooser/index.gts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,28 @@ const WorkspaceChooserItemContainer: TemplateOnlyComponent<Signature> =
</button>
<style scoped>
.workspace {
min-width: 251.6px;
width: 251.6px;
height: 215.3px;
min-width: 250px;
width: 250px;
height: 166px;
display: flex;
flex-direction: column;
border-radius: 15px;
border: solid 1px rgba(255, 255, 255, 0.5);
border: none;
overflow: hidden;
padding: 0;
position: relative;
}
.workspace::after {
content: '';
position: absolute;
inset: 0;
border-radius: 15px;
border: 1px solid var(--item-container-border-color, rgba(255 255 255 / 15%));
pointer-events: none;
z-index: 2;
}
.workspace:hover::after {
border-color: var(--item-container-border-hover-color, rgba(255 255 255 / 40%));
}
.workspace:focus-visible {
outline-offset: -1px;
Expand Down
Loading