fix(frontend): keep the empty-state toolbar reachable, and name the view counters

"Empty" here means the default listing found nothing, and a workspace
whose items are all archived looks exactly the same. The searchbar
carries "Only archived", so taking it off the pointer left those items
unreachable without hand-writing a query URL. Dimmed still, never
`inert`.

The disclosure named the counters that fire on a creation or an import
and not the three that fire on merely seeing the empty home or opening
either picker.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012fRjnaHLwjpHN84gNNxah9
This commit is contained in:
Guilhem Lemouel
2026-09-07 09:48:00 +02:00
co-authored by Claude Opus 5
parent e44cce0363
commit 96c7b3cee2
2 changed files with 16 additions and 10 deletions
@@ -1072,9 +1072,10 @@
model identifiers, the names of public hub scripts used, the languages debug sessions
are started for, whether AI chat skills are turned on or off and how often one is
loaded, whether SSO logins evaluate an IdP groups claim (SAML or OIDC) and change a
membership, the plan tier and quota shown when the execution meter is opened, and which
home-page entry point a new item is created from, the name of any public hub project
imported from it and how far that import got, last 30 days)</li
membership, the plan tier and quota shown when the execution meter is opened, how often
an empty workspace home is seen and its create menu or hub-project picker opened, and
which home-page entry point a new item is created from, the name of any public hub
project imported from it and how far that import got, last 30 days)</li
>
<li
>feature adoption (counts of which flow, script, trigger and worker features your
@@ -1128,9 +1129,10 @@
model identifiers, the names of public hub scripts used, the languages debug sessions
are started for, whether AI chat skills are turned on or off and how often one is
loaded, whether SSO logins evaluate an IdP groups claim (SAML or OIDC) and change a
membership, the plan tier and quota shown when the execution meter is opened, and which
home-page entry point a new item is created from, the name of any public hub project
imported from it and how far that import got, last 30 days)</li
membership, the plan tier and quota shown when the execution meter is opened, how often
an empty workspace home is seen and its create menu or hub-project picker opened, and
which home-page entry point a new item is created from, the name of any public hub
project imported from it and how far that import got, last 30 days)</li
>
<li
>feature adoption (counts of which flow, script, trigger and worker features your
@@ -1688,9 +1688,12 @@
}}
>
{#if !contentActive}
<!-- Kept mounted, not hidden, so the toolbar doesn't reflow the moment the first
item lands: `inert` takes it out of the tab order and off the pointer too. -->
<div class="flex justify-start" class:opacity-40={workspaceEmpty} inert={workspaceEmpty}>
<!-- Kept mounted, not hidden, so the toolbar doesn't reflow the moment the first item
lands. Dimmed but still usable: "empty" here means the default listing found
nothing, and a workspace whose items are all archived looks exactly the same —
these controls are how it says so, and taking them off the pointer would leave
those items unreachable. -->
<div class="flex justify-start" class:opacity-40={workspaceEmpty}>
<ToggleButtonGroup
selected={itemKind}
onSelected={(v) => {
@@ -1789,10 +1792,11 @@
{/if}
<div class="flex grow items-center justify-end gap-2 min-w-0">
<!-- Dimmed, never inert: "Only archived" lives in here, and it is the one thing a
workspace with nothing but archived items still needs. -->
<div
class="relative text-primary w-full min-w-[200px] max-w-[26rem]"
class:opacity-40={workspaceEmpty}
inert={workspaceEmpty}
>
<FilterSearchbar
schema={searchbarSchema}