@sinequa/atomic-angular 2.13.0 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ import { Upload } from "tus-js-client";
7
7
  import { toSignal } from "@angular/core/rxjs-interop";
8
8
  import { TranslocoPipe, TranslocoService, provideTranslocoScope } from "@jsverse/transloco";
9
9
  import { Temporal } from "temporal-polyfill";
10
- import { AutocompleteComponent, AvatarComponent, AvatarFallbackComponent, BadgeComponent, BreakpointObserverService, ButtonComponent, ChatPlusIcon, CheckIcon, CheckboxComponent, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleXIcon, DialogBodyComponent, DialogComponent, DialogContentComponent, DialogFooterComponent, DialogHeaderComponent, DialogTitleComponent, ExternalLinkIcon, EyeIcon, FileIcon, FileSearchIcon, FileSpreadsheetIcon, FileTextIcon, FolderIcon, GridIcon, InputComponent, InputControlDirective, KeyIcon, ListIcon, MagnifyingGlassMinusIcon, MagnifyingGlassPlusIcon, MenuComponent, MenuContentComponent, MenuItemComponent, MenuTriggerDirective, PenToSquareIcon, PlusIcon, PopoverDirective, RefreshIcon, SearchInputComponent, SheetBodyComponent, SheetComponent, SheetHeaderComponent, SyncIcon, TabComponent, TabListComponent, TabsComponent, TagComponent, TagIcon, TagInputComponent, TagRemoveComponent, TextareaComponent, TextareaControlDirective, TextareaCounterComponent, TooltipDirective, TrashIcon, UploadIcon, UserIcon, UserRoundIcon, XMarkIcon, createCallable, injectCallRef } from "@sinequa/galactik";
10
+ import { AutocompleteComponent, AvatarComponent, AvatarFallbackComponent, BadgeComponent, BreakpointObserverService, ButtonComponent, ChatPlusIcon, CheckIcon, CheckboxComponent, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleXIcon, DialogBodyComponent, DialogComponent, DialogContentComponent, DialogFooterComponent, DialogHeaderComponent, DialogTitleComponent, ExternalLinkIcon, EyeIcon, FileIcon, FileSearchIcon, FileSpreadsheetIcon, FileTextIcon, FolderIcon, GridIcon, InputComponent, InputControlDirective, KeyIcon, ListIcon, MagnifyingGlassMinusIcon, MagnifyingGlassPlusIcon, MenuComponent, MenuContentComponent, MenuItemComponent, MenuTriggerDirective, PenToSquareIcon, PlusIcon, PopoverDirective, RefreshIcon, SearchInputComponent, SheetBodyComponent, SheetComponent, SheetHeaderComponent, SyncIcon, TabComponent, TabListComponent, TabsComponent, TagComponent, TagIcon, TagInputComponent, TagRemoveComponent, TextareaComponent, TextareaControlDirective, TextareaCounterComponent, TooltipDirective, UploadIcon, UserIcon, UserRoundIcon, XMarkIcon, createCallable, injectCallRef } from "@sinequa/galactik";
11
11
  import { FormField, FormRoot, disabled, form, maxLength, required, validate } from "@angular/forms/signals";
12
12
  import { DomSanitizer } from "@angular/platform-browser";
13
13
  import { NgTemplateOutlet } from "@angular/common";
@@ -4477,7 +4477,7 @@ var UploadTracker = class UploadTracker {
4477
4477
  data-testid="peek-text">
4478
4478
  <workspace-message [message]="peekShown()" />
4479
4479
  </span>
4480
- <span class="shrink-0 translate-x-1.5 text-xs text-(--font-neutral-muted) opacity-0 transition-[opacity,transform] delay-100 duration-200 group-hover/tracker:translate-x-0 group-hover/tracker:opacity-100">
4480
+ <span class="shrink-0 translate-x-1.5 text-xs text-(--font-neutral-muted) opacity-0 transition-[opacity,transform] delay-100 duration-200 group-hover/tracker:translate-x-0 group-hover/tracker:opacity-100 pointer-coarse:translate-x-0 pointer-coarse:opacity-100">
4481
4481
  {{ "documentWorkspaces.tracker.clickToRestore" | transloco }}
4482
4482
  </span>
4483
4483
  </div>
@@ -4822,7 +4822,7 @@ i0.ɵɵngDeclareClassMetadata({
4822
4822
  data-testid="peek-text">
4823
4823
  <workspace-message [message]="peekShown()" />
4824
4824
  </span>
4825
- <span class="shrink-0 translate-x-1.5 text-xs text-(--font-neutral-muted) opacity-0 transition-[opacity,transform] delay-100 duration-200 group-hover/tracker:translate-x-0 group-hover/tracker:opacity-100">
4825
+ <span class="shrink-0 translate-x-1.5 text-xs text-(--font-neutral-muted) opacity-0 transition-[opacity,transform] delay-100 duration-200 group-hover/tracker:translate-x-0 group-hover/tracker:opacity-100 pointer-coarse:translate-x-0 pointer-coarse:opacity-100">
4826
4826
  {{ "documentWorkspaces.tracker.clickToRestore" | transloco }}
4827
4827
  </span>
4828
4828
  </div>
@@ -5144,13 +5144,13 @@ var WorkspaceRow = class WorkspaceRow {
5144
5144
  variant="tertiary"
5145
5145
  scheme="neutral"
5146
5146
  size="sm"
5147
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
5147
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
5148
5148
  [iconOnly]="true"
5149
5149
  [writerOnly]="workspace().currentUserRole"
5150
5150
  [attr.aria-label]="'documentWorkspaces.list.deleteWorkspace' | transloco"
5151
5151
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
5152
5152
  (click)="deleteRequested.emit()">
5153
- <trash-icon />
5153
+ <x-mark-icon />
5154
5154
  </button>
5155
5155
  }
5156
5156
  </div>
@@ -5234,8 +5234,8 @@ var WorkspaceRow = class WorkspaceRow {
5234
5234
  },
5235
5235
  {
5236
5236
  kind: "component",
5237
- type: TrashIcon,
5238
- selector: "trash, trash-icon, Trash, TrashIcon",
5237
+ type: XMarkIcon,
5238
+ selector: "x-mark, x-mark-icon, XMark, XMarkIcon",
5239
5239
  inputs: ["class"]
5240
5240
  },
5241
5241
  {
@@ -5282,7 +5282,7 @@ i0.ɵɵngDeclareClassMetadata({
5282
5282
  HighlightedText,
5283
5283
  TagComponent,
5284
5284
  TooltipDirective,
5285
- TrashIcon,
5285
+ XMarkIcon,
5286
5286
  WorkspaceIcon,
5287
5287
  WorkspaceRoleTag,
5288
5288
  WriterOnly
@@ -5341,13 +5341,13 @@ i0.ɵɵngDeclareClassMetadata({
5341
5341
  variant="tertiary"
5342
5342
  scheme="neutral"
5343
5343
  size="sm"
5344
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
5344
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
5345
5345
  [iconOnly]="true"
5346
5346
  [writerOnly]="workspace().currentUserRole"
5347
5347
  [attr.aria-label]="'documentWorkspaces.list.deleteWorkspace' | transloco"
5348
5348
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
5349
5349
  (click)="deleteRequested.emit()">
5350
- <trash-icon />
5350
+ <x-mark-icon />
5351
5351
  </button>
5352
5352
  }
5353
5353
  </div>
@@ -5513,13 +5513,13 @@ var WorkspaceCard = class WorkspaceCard {
5513
5513
  variant="tertiary"
5514
5514
  scheme="neutral"
5515
5515
  size="sm"
5516
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
5516
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
5517
5517
  [iconOnly]="true"
5518
5518
  [writerOnly]="workspace().currentUserRole"
5519
5519
  [attr.aria-label]="'documentWorkspaces.list.deleteWorkspace' | transloco"
5520
5520
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
5521
5521
  (click)="deleteRequested.emit()">
5522
- <trash-icon />
5522
+ <x-mark-icon />
5523
5523
  </button>
5524
5524
  }
5525
5525
  </div>
@@ -5622,8 +5622,8 @@ var WorkspaceCard = class WorkspaceCard {
5622
5622
  },
5623
5623
  {
5624
5624
  kind: "component",
5625
- type: TrashIcon,
5626
- selector: "trash, trash-icon, Trash, TrashIcon",
5625
+ type: XMarkIcon,
5626
+ selector: "x-mark, x-mark-icon, XMark, XMarkIcon",
5627
5627
  inputs: ["class"]
5628
5628
  },
5629
5629
  {
@@ -5670,7 +5670,7 @@ i0.ɵɵngDeclareClassMetadata({
5670
5670
  HighlightedText,
5671
5671
  TagComponent,
5672
5672
  TooltipDirective,
5673
- TrashIcon,
5673
+ XMarkIcon,
5674
5674
  WorkspaceIcon,
5675
5675
  WorkspaceRoleTag,
5676
5676
  WriterOnly
@@ -5703,13 +5703,13 @@ i0.ɵɵngDeclareClassMetadata({
5703
5703
  variant="tertiary"
5704
5704
  scheme="neutral"
5705
5705
  size="sm"
5706
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
5706
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
5707
5707
  [iconOnly]="true"
5708
5708
  [writerOnly]="workspace().currentUserRole"
5709
5709
  [attr.aria-label]="'documentWorkspaces.list.deleteWorkspace' | transloco"
5710
5710
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
5711
5711
  (click)="deleteRequested.emit()">
5712
- <trash-icon />
5712
+ <x-mark-icon />
5713
5713
  </button>
5714
5714
  }
5715
5715
  </div>
@@ -5931,7 +5931,7 @@ var WorkspaceList = class WorkspaceList {
5931
5931
  host: { classAttribute: "@container flex h-full min-h-0 flex-col p-3 pb-2 md:p-8 md:pb-4" },
5932
5932
  providers: [provideTranslocoScope("document-workspaces")],
5933
5933
  ngImport: i0,
5934
- template: "\n <div class=\"mb-1 flex items-center justify-between gap-4\">\n <h1 class=\"text-2xl leading-[31px] font-bold text-(--font-neutral-black)\">{{ \"documentWorkspaces.list.title\" | transloco }}</h1>\n <button (click)=\"createRequested.emit()\">\n <plus-icon />\n {{ \"documentWorkspaces.list.addWorkspace\" | transloco }}\n </button>\n </div>\n <p class=\"mb-6 text-base text-(--font-primary-base)\">{{ \"documentWorkspaces.list.subtitle\" | transloco }}</p>\n\n <Tabs class=\"mb-3 max-w-full\">\n <TabList\n variant=\"inner\"\n class=\"w-fit max-w-full\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [attr.aria-label]=\"'documentWorkspaces.list.title' | transloco\"\n [selectedTab]=\"filter.tab()\"\n (selectedTabChange)=\"onTabChange($event)\">\n @for (item of tabs; track item.tab) {\n <Tab [value]=\"item.tab\" variant=\"inner\">\n @switch (item.tab) {\n @case (\"editor\") {\n <user-icon class=\"shrink-0\" />\n }\n @case (\"reader\") {\n <user-round-icon class=\"shrink-0\" />\n }\n }\n <span>{{ item.labelKey | transloco }}</span>\n <Badge variant=\"number\" fill=\"primary\" scheme=\"sage\" size=\"xs\" class=\"shrink-0\" [attr.data-testid]=\"'badge-' + item.tab\">{{ filter.counts()[item.tab] }}</Badge>\n </Tab>\n }\n </TabList>\n </Tabs>\n\n <div class=\"mb-6 flex flex-wrap items-center gap-2\">\n <div role=\"group\" class=\"inline-flex gap-1 rounded-full bg-(--bg-primary-lighter) p-0.5\">\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'grid'\"\n [attr.aria-label]=\"'documentWorkspaces.common.gridView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.gridView' | transloco\"\n (click)=\"viewMode.set('grid')\">\n <grid-icon class=\"size-3.5\" />\n </button>\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'list'\"\n [attr.aria-label]=\"'documentWorkspaces.common.listView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.listView' | transloco\"\n (click)=\"viewMode.set('list')\">\n <list-icon class=\"size-3.5\" />\n </button>\n </div>\n\n <SearchInput\n role=\"search\"\n class=\"min-w-32 flex-[0_1_15rem]\"\n [formField]=\"searchForm\"\n [placeholder]=\"'documentWorkspaces.list.searchPlaceholder' | transloco\"\n [aria-label]=\"'documentWorkspaces.list.searchPlaceholder' | transloco\"\n [clearLabel]=\"'documentWorkspaces.common.clearSearch' | transloco\" />\n\n @if (selection.selectableItems().length) {\n @if (selection.active()) {\n <div class=\"ml-auto flex items-center gap-2 @max-xl:order-last @max-xl:ml-0 @max-xl:basis-full\" data-testid=\"selection-bar\">\n <span class=\"text-sm text-(--font-primary-base)\" aria-live=\"polite\">{{ \"documentWorkspaces.list.selectedCount\" | transloco: { count: selection.count() } }}</span>\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" (click)=\"selection.toggleAll()\">\n {{ (selection.allSelected() ? \"documentWorkspaces.common.unselectAll\" : \"documentWorkspaces.common.selectAll\") | transloco }}\n </button>\n <button class=\"text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)\" variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" [disabled]=\"!selection.count()\" (click)=\"deleteSelected()\">\n <trash-icon />\n {{ \"documentWorkspaces.common.delete\" | transloco }}\n </button>\n </div>\n }\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" class=\"@max-xl:ml-auto\" [class.ml-auto]=\"!selection.active()\" (click)=\"selection.toggleMode()\">\n {{ (selection.active() ? \"documentWorkspaces.common.cancel\" : \"documentWorkspaces.common.select\") | transloco }}\n </button>\n }\n </div>\n\n @if (refreshError(); as message) {\n <p role=\"alert\" class=\"text-sm text-(--font-error-base)\">{{ \"documentWorkspaces.list.refreshError\" | transloco: { error: message } }}</p>\n }\n\n <!-- Only the workspaces scroll: the title, the tabs and the toolbar stay in place. -->\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n @switch (status()) {\n @case (\"loading\") {\n <p class=\"text-sm text-(--font-primary-muted)\">{{ \"documentWorkspaces.list.loading\" | transloco }}</p>\n }\n @case (\"error\") {\n <div class=\"flex items-center gap-3 text-sm\" data-testid=\"load-error\">\n <span class=\"text-(--font-error-base)\">\n @if (loadError(); as message) {\n <workspace-message [message]=\"message\" />\n } @else {\n {{ \"documentWorkspaces.list.loadError\" | transloco }}\n }\n </span>\n <button variant=\"secondary\" size=\"sm\" (click)=\"load()\">{{ \"documentWorkspaces.common.retry\" | transloco }}</button>\n </div>\n }\n @default {\n @if (!filter.filtered().length) {\n <p class=\"py-8 text-center text-sm text-(--font-primary-muted)\" data-testid=\"empty\">\n {{ (store.workspaces().length ? \"documentWorkspaces.list.noMatch\" : \"documentWorkspaces.list.empty\") | transloco }}\n </p>\n } @else if (viewMode() === \"grid\") {\n <div class=\"grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] content-start gap-4 pb-8\">\n @for (workspace of filter.filtered(); track workspace.id) {\n <workspace-card\n [workspace]=\"workspace\"\n [query]=\"filter.query()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(workspace)\"\n [selectable]=\"selection.canSelect(workspace)\"\n (opened)=\"opened.emit(workspace)\"\n (deleteRequested)=\"confirmDelete([workspace])\"\n (selectedChange)=\"selection.toggle(workspace, $event)\" />\n }\n </div>\n } @else {\n <div role=\"table\" class=\"flex flex-col gap-3 pb-8\">\n <div role=\"row\" [attr.data-selecting]=\"selection.active() ? '' : null\" class=\"grid grid-cols-[minmax(0,1fr)_auto_auto_2.5rem] items-center gap-x-4 px-3 data-selecting:grid-cols-[2rem_minmax(0,1fr)_auto_auto_2.5rem] @xl:grid-cols-[minmax(0,1fr)_4.5rem_6.5rem_6.5rem_2.5rem] @xl:data-selecting:grid-cols-[2rem_minmax(0,1fr)_4.5rem_6.5rem_6.5rem_2.5rem] @3xl:grid-cols-[minmax(0,2fr)_5.5rem_7.5rem_9rem_minmax(5rem,1fr)_2.5rem] @3xl:data-selecting:grid-cols-[2rem_minmax(0,2fr)_5.5rem_7.5rem_9rem_minmax(5rem,1fr)_2.5rem] py-1 text-xs font-semibold text-(--font-primary-muted)\">\n @if (selection.active()) {\n <div role=\"columnheader\">\n <checkbox\n [checked]=\"selection.allSelected()\"\n [indeterminate]=\"selection.partiallySelected()\"\n [aria-label]=\"'documentWorkspaces.common.selectAll' | transloco\"\n (checkedChange)=\"selection.toggleAll()\" />\n </div>\n }\n <div role=\"columnheader\">{{ \"documentWorkspaces.list.columnName\" | transloco }}</div>\n <div role=\"columnheader\">{{ \"documentWorkspaces.list.columnContent\" | transloco }}</div>\n <div role=\"columnheader\">{{ \"documentWorkspaces.list.columnOwner\" | transloco }}</div>\n <div role=\"columnheader\" class=\"hidden @xl:block\">{{ \"documentWorkspaces.list.columnDateUpdated\" | transloco }}</div>\n <div role=\"columnheader\" class=\"hidden @3xl:block\">{{ \"documentWorkspaces.list.columnTags\" | transloco }}</div>\n <div role=\"columnheader\"></div>\n </div>\n @for (workspace of filter.filtered(); track workspace.id) {\n <workspace-row\n [workspace]=\"workspace\"\n [query]=\"filter.query()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(workspace)\"\n [selectable]=\"selection.canSelect(workspace)\"\n (opened)=\"opened.emit(workspace)\"\n (deleteRequested)=\"confirmDelete([workspace])\"\n (selectedChange)=\"selection.toggle(workspace, $event)\" />\n }\n </div>\n }\n\n @if (store.hasMore() || store.truncated()) {\n <div class=\"flex flex-col items-center gap-2 pb-8\" data-testid=\"load-more\">\n <p class=\"text-sm text-(--font-primary-muted)\">\n {{ \"documentWorkspaces.list.partial\" | transloco: { shown: store.workspaces().length, total: store.pagination().total } }}\n </p>\n @if (loadMoreError(); as message) {\n <p role=\"alert\" class=\"text-sm text-(--font-error-base)\">{{ \"documentWorkspaces.list.loadMoreError\" | transloco: { error: message } }}</p>\n }\n @if (store.hasMore()) {\n <button variant=\"secondary\" size=\"sm\" [disabled]=\"loadingMore()\" (click)=\"loadMore()\">\n {{ \"documentWorkspaces.list.loadMore\" | transloco }}\n </button>\n }\n </div>\n }\n }\n }\n </div>\n ",
5934
+ template: "\n <div class=\"mb-1 flex items-center justify-between gap-4\">\n <h1 class=\"text-2xl leading-[31px] font-bold text-(--font-neutral-black)\">{{ \"documentWorkspaces.list.title\" | transloco }}</h1>\n <button (click)=\"createRequested.emit()\">\n <plus-icon />\n {{ \"documentWorkspaces.list.addWorkspace\" | transloco }}\n </button>\n </div>\n <p class=\"mb-6 text-base text-(--font-primary-base)\">{{ \"documentWorkspaces.list.subtitle\" | transloco }}</p>\n\n <Tabs class=\"mb-3 max-w-full\">\n <TabList\n variant=\"inner\"\n class=\"w-fit max-w-full\"\n selectionMode=\"explicit\"\n [softDisabled]=\"false\"\n [attr.aria-label]=\"'documentWorkspaces.list.title' | transloco\"\n [selectedTab]=\"filter.tab()\"\n (selectedTabChange)=\"onTabChange($event)\">\n @for (item of tabs; track item.tab) {\n <Tab [value]=\"item.tab\" variant=\"inner\">\n @switch (item.tab) {\n @case (\"editor\") {\n <user-icon class=\"shrink-0\" />\n }\n @case (\"reader\") {\n <user-round-icon class=\"shrink-0\" />\n }\n }\n <span>{{ item.labelKey | transloco }}</span>\n <Badge variant=\"number\" fill=\"primary\" scheme=\"sage\" size=\"xs\" class=\"shrink-0\" [attr.data-testid]=\"'badge-' + item.tab\">{{ filter.counts()[item.tab] }}</Badge>\n </Tab>\n }\n </TabList>\n </Tabs>\n\n <div class=\"mb-6 flex flex-wrap items-center gap-2\">\n <div role=\"group\" class=\"inline-flex gap-1 rounded-full bg-(--bg-primary-lighter) p-0.5\">\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'grid'\"\n [attr.aria-label]=\"'documentWorkspaces.common.gridView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.gridView' | transloco\"\n (click)=\"viewMode.set('grid')\">\n <grid-icon class=\"size-3.5\" />\n </button>\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'list'\"\n [attr.aria-label]=\"'documentWorkspaces.common.listView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.listView' | transloco\"\n (click)=\"viewMode.set('list')\">\n <list-icon class=\"size-3.5\" />\n </button>\n </div>\n\n <SearchInput\n role=\"search\"\n class=\"min-w-32 flex-[0_1_15rem]\"\n [formField]=\"searchForm\"\n [placeholder]=\"'documentWorkspaces.list.searchPlaceholder' | transloco\"\n [aria-label]=\"'documentWorkspaces.list.searchPlaceholder' | transloco\"\n [clearLabel]=\"'documentWorkspaces.common.clearSearch' | transloco\" />\n\n @if (selection.selectableItems().length) {\n @if (selection.active()) {\n <div class=\"ml-auto flex items-center gap-2 @max-xl:order-last @max-xl:ml-0 @max-xl:basis-full\" data-testid=\"selection-bar\">\n <span class=\"text-sm text-(--font-primary-base)\" aria-live=\"polite\">{{ \"documentWorkspaces.list.selectedCount\" | transloco: { count: selection.count() } }}</span>\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" (click)=\"selection.toggleAll()\">\n {{ (selection.allSelected() ? \"documentWorkspaces.common.unselectAll\" : \"documentWorkspaces.common.selectAll\") | transloco }}\n </button>\n <button class=\"text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)\" variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" [disabled]=\"!selection.count()\" (click)=\"deleteSelected()\">\n <x-mark-icon />\n {{ \"documentWorkspaces.common.delete\" | transloco }}\n </button>\n </div>\n }\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" class=\"@max-xl:ml-auto\" [class.ml-auto]=\"!selection.active()\" (click)=\"selection.toggleMode()\">\n {{ (selection.active() ? \"documentWorkspaces.common.cancel\" : \"documentWorkspaces.common.select\") | transloco }}\n </button>\n }\n </div>\n\n @if (refreshError(); as message) {\n <p role=\"alert\" class=\"text-sm text-(--font-error-base)\">{{ \"documentWorkspaces.list.refreshError\" | transloco: { error: message } }}</p>\n }\n\n <!-- Only the workspaces scroll: the title, the tabs and the toolbar stay in place. -->\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n @switch (status()) {\n @case (\"loading\") {\n <p class=\"text-sm text-(--font-primary-muted)\">{{ \"documentWorkspaces.list.loading\" | transloco }}</p>\n }\n @case (\"error\") {\n <div class=\"flex items-center gap-3 text-sm\" data-testid=\"load-error\">\n <span class=\"text-(--font-error-base)\">\n @if (loadError(); as message) {\n <workspace-message [message]=\"message\" />\n } @else {\n {{ \"documentWorkspaces.list.loadError\" | transloco }}\n }\n </span>\n <button variant=\"secondary\" size=\"sm\" (click)=\"load()\">{{ \"documentWorkspaces.common.retry\" | transloco }}</button>\n </div>\n }\n @default {\n @if (!filter.filtered().length) {\n <p class=\"py-8 text-center text-sm text-(--font-primary-muted)\" data-testid=\"empty\">\n {{ (store.workspaces().length ? \"documentWorkspaces.list.noMatch\" : \"documentWorkspaces.list.empty\") | transloco }}\n </p>\n } @else if (viewMode() === \"grid\") {\n <div class=\"grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] content-start gap-4 pb-8\">\n @for (workspace of filter.filtered(); track workspace.id) {\n <workspace-card\n [workspace]=\"workspace\"\n [query]=\"filter.query()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(workspace)\"\n [selectable]=\"selection.canSelect(workspace)\"\n (opened)=\"opened.emit(workspace)\"\n (deleteRequested)=\"confirmDelete([workspace])\"\n (selectedChange)=\"selection.toggle(workspace, $event)\" />\n }\n </div>\n } @else {\n <div role=\"table\" class=\"flex flex-col gap-3 pb-8\">\n <div role=\"row\" [attr.data-selecting]=\"selection.active() ? '' : null\" class=\"grid grid-cols-[minmax(0,1fr)_auto_auto_2.5rem] items-center gap-x-4 px-3 data-selecting:grid-cols-[2rem_minmax(0,1fr)_auto_auto_2.5rem] @xl:grid-cols-[minmax(0,1fr)_4.5rem_6.5rem_6.5rem_2.5rem] @xl:data-selecting:grid-cols-[2rem_minmax(0,1fr)_4.5rem_6.5rem_6.5rem_2.5rem] @3xl:grid-cols-[minmax(0,2fr)_5.5rem_7.5rem_9rem_minmax(5rem,1fr)_2.5rem] @3xl:data-selecting:grid-cols-[2rem_minmax(0,2fr)_5.5rem_7.5rem_9rem_minmax(5rem,1fr)_2.5rem] py-1 text-xs font-semibold text-(--font-primary-muted)\">\n @if (selection.active()) {\n <div role=\"columnheader\">\n <checkbox\n [checked]=\"selection.allSelected()\"\n [indeterminate]=\"selection.partiallySelected()\"\n [aria-label]=\"'documentWorkspaces.common.selectAll' | transloco\"\n (checkedChange)=\"selection.toggleAll()\" />\n </div>\n }\n <div role=\"columnheader\">{{ \"documentWorkspaces.list.columnName\" | transloco }}</div>\n <div role=\"columnheader\">{{ \"documentWorkspaces.list.columnContent\" | transloco }}</div>\n <div role=\"columnheader\">{{ \"documentWorkspaces.list.columnOwner\" | transloco }}</div>\n <div role=\"columnheader\" class=\"hidden @xl:block\">{{ \"documentWorkspaces.list.columnDateUpdated\" | transloco }}</div>\n <div role=\"columnheader\" class=\"hidden @3xl:block\">{{ \"documentWorkspaces.list.columnTags\" | transloco }}</div>\n <div role=\"columnheader\"></div>\n </div>\n @for (workspace of filter.filtered(); track workspace.id) {\n <workspace-row\n [workspace]=\"workspace\"\n [query]=\"filter.query()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(workspace)\"\n [selectable]=\"selection.canSelect(workspace)\"\n (opened)=\"opened.emit(workspace)\"\n (deleteRequested)=\"confirmDelete([workspace])\"\n (selectedChange)=\"selection.toggle(workspace, $event)\" />\n }\n </div>\n }\n\n @if (store.hasMore() || store.truncated()) {\n <div class=\"flex flex-col items-center gap-2 pb-8\" data-testid=\"load-more\">\n <p class=\"text-sm text-(--font-primary-muted)\">\n {{ \"documentWorkspaces.list.partial\" | transloco: { shown: store.workspaces().length, total: store.pagination().total } }}\n </p>\n @if (loadMoreError(); as message) {\n <p role=\"alert\" class=\"text-sm text-(--font-error-base)\">{{ \"documentWorkspaces.list.loadMoreError\" | transloco: { error: message } }}</p>\n }\n @if (store.hasMore()) {\n <button variant=\"secondary\" size=\"sm\" [disabled]=\"loadingMore()\" (click)=\"loadMore()\">\n {{ \"documentWorkspaces.list.loadMore\" | transloco }}\n </button>\n }\n </div>\n }\n }\n }\n </div>\n ",
5935
5935
  isInline: true,
5936
5936
  dependencies: [
5937
5937
  {
@@ -6054,8 +6054,8 @@ var WorkspaceList = class WorkspaceList {
6054
6054
  },
6055
6055
  {
6056
6056
  kind: "component",
6057
- type: TrashIcon,
6058
- selector: "trash, trash-icon, Trash, TrashIcon",
6057
+ type: XMarkIcon,
6058
+ selector: "x-mark, x-mark-icon, XMark, XMarkIcon",
6059
6059
  inputs: ["class"]
6060
6060
  },
6061
6061
  {
@@ -6142,7 +6142,7 @@ i0.ɵɵngDeclareClassMetadata({
6142
6142
  TabListComponent,
6143
6143
  TabsComponent,
6144
6144
  TooltipDirective,
6145
- TrashIcon,
6145
+ XMarkIcon,
6146
6146
  UserIcon,
6147
6147
  UserRoundIcon,
6148
6148
  WorkspaceCard,
@@ -6226,7 +6226,7 @@ i0.ɵɵngDeclareClassMetadata({
6226
6226
  {{ (selection.allSelected() ? "documentWorkspaces.common.unselectAll" : "documentWorkspaces.common.selectAll") | transloco }}
6227
6227
  </button>
6228
6228
  <button class="text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)" variant="tertiary" scheme="neutral" size="sm" [disabled]="!selection.count()" (click)="deleteSelected()">
6229
- <trash-icon />
6229
+ <x-mark-icon />
6230
6230
  {{ "documentWorkspaces.common.delete" | transloco }}
6231
6231
  </button>
6232
6232
  </div>
@@ -6462,13 +6462,13 @@ var DocumentCard = class DocumentCard {
6462
6462
  variant="tertiary"
6463
6463
  scheme="neutral"
6464
6464
  size="sm"
6465
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
6465
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
6466
6466
  [iconOnly]="true"
6467
6467
  [writerOnly]="workspaceRole()"
6468
6468
  [attr.aria-label]="'documentWorkspaces.detail.deleteDocument' | transloco"
6469
6469
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
6470
6470
  (click)="deleteRequested.emit()">
6471
- <trash-icon />
6471
+ <x-mark-icon />
6472
6472
  </button>
6473
6473
  }
6474
6474
  </div>
@@ -6582,8 +6582,8 @@ var DocumentCard = class DocumentCard {
6582
6582
  },
6583
6583
  {
6584
6584
  kind: "component",
6585
- type: TrashIcon,
6586
- selector: "trash, trash-icon, Trash, TrashIcon",
6585
+ type: XMarkIcon,
6586
+ selector: "x-mark, x-mark-icon, XMark, XMarkIcon",
6587
6587
  inputs: ["class"]
6588
6588
  },
6589
6589
  {
@@ -6631,7 +6631,7 @@ i0.ɵɵngDeclareClassMetadata({
6631
6631
  HighlightedText,
6632
6632
  TagComponent,
6633
6633
  TooltipDirective,
6634
- TrashIcon,
6634
+ XMarkIcon,
6635
6635
  UploadIcon,
6636
6636
  WorkspaceMessage,
6637
6637
  WriterOnly
@@ -6661,13 +6661,13 @@ i0.ɵɵngDeclareClassMetadata({
6661
6661
  variant="tertiary"
6662
6662
  scheme="neutral"
6663
6663
  size="sm"
6664
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
6664
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
6665
6665
  [iconOnly]="true"
6666
6666
  [writerOnly]="workspaceRole()"
6667
6667
  [attr.aria-label]="'documentWorkspaces.detail.deleteDocument' | transloco"
6668
6668
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
6669
6669
  (click)="deleteRequested.emit()">
6670
- <trash-icon />
6670
+ <x-mark-icon />
6671
6671
  </button>
6672
6672
  }
6673
6673
  </div>
@@ -6920,13 +6920,13 @@ var DocumentRow = class DocumentRow {
6920
6920
  variant="tertiary"
6921
6921
  scheme="neutral"
6922
6922
  size="sm"
6923
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
6923
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
6924
6924
  [iconOnly]="true"
6925
6925
  [writerOnly]="workspaceRole()"
6926
6926
  [attr.aria-label]="'documentWorkspaces.detail.deleteDocument' | transloco"
6927
6927
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
6928
6928
  (click)="deleteRequested.emit()">
6929
- <trash-icon />
6929
+ <x-mark-icon />
6930
6930
  </button>
6931
6931
  }
6932
6932
  </div>
@@ -7016,8 +7016,8 @@ var DocumentRow = class DocumentRow {
7016
7016
  },
7017
7017
  {
7018
7018
  kind: "component",
7019
- type: TrashIcon,
7020
- selector: "trash, trash-icon, Trash, TrashIcon",
7019
+ type: XMarkIcon,
7020
+ selector: "x-mark, x-mark-icon, XMark, XMarkIcon",
7021
7021
  inputs: ["class"]
7022
7022
  },
7023
7023
  {
@@ -7065,7 +7065,7 @@ i0.ɵɵngDeclareClassMetadata({
7065
7065
  HighlightedText,
7066
7066
  TagComponent,
7067
7067
  TooltipDirective,
7068
- TrashIcon,
7068
+ XMarkIcon,
7069
7069
  UploadIcon,
7070
7070
  WorkspaceMessage,
7071
7071
  WriterOnly
@@ -7127,13 +7127,13 @@ i0.ɵɵngDeclareClassMetadata({
7127
7127
  variant="tertiary"
7128
7128
  scheme="neutral"
7129
7129
  size="sm"
7130
- class="text-(--font-error-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100"
7130
+ class="text-(--font-primary-muted) opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-(--bg-error-lightest) hover:text-(--font-error-base) max-md:opacity-100 pointer-coarse:opacity-100"
7131
7131
  [iconOnly]="true"
7132
7132
  [writerOnly]="workspaceRole()"
7133
7133
  [attr.aria-label]="'documentWorkspaces.detail.deleteDocument' | transloco"
7134
7134
  [tooltip]="'documentWorkspaces.common.delete' | transloco"
7135
7135
  (click)="deleteRequested.emit()">
7136
- <trash-icon />
7136
+ <x-mark-icon />
7137
7137
  </button>
7138
7138
  }
7139
7139
  </div>
@@ -8016,6 +8016,8 @@ var PrincipalPicker = class PrincipalPicker {
8016
8016
  "fieldLabelLang",
8017
8017
  "placeholder",
8018
8018
  "ariaLabel",
8019
+ "hideKeyboardLabel",
8020
+ "keyboardLabel",
8019
8021
  "noResultsText",
8020
8022
  "searchingText",
8021
8023
  "errorText",
@@ -9778,7 +9780,7 @@ var WorkspaceDetail = class WorkspaceDetail {
9778
9780
  host: { classAttribute: "flex h-full min-h-0" },
9779
9781
  providers: [provideTranslocoScope("document-workspaces")],
9780
9782
  ngImport: i0,
9781
- template: "\n <div class=\"@container flex min-h-0 min-w-0 flex-1 flex-col p-3 pb-2 md:p-8 md:pb-4\">\n <div class=\"mb-3 flex flex-wrap items-center gap-x-3 gap-y-2\">\n <button\n size=\"sm\"\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'documentWorkspaces.detail.back' | transloco\"\n [tooltip]=\"'documentWorkspaces.detail.back' | transloco\"\n (click)=\"leave()\">\n <chevron-left-icon />\n </button>\n\n @if (workspace(); as workspace) {\n <h1 class=\"min-w-28 flex-[1_1_16rem] text-2xl leading-[31px] font-bold break-words text-(--font-neutral-black)\">{{ workspace.name }}</h1>\n\n <!-- Beside the title while they fit next to its 16rem, on a line of their own under it once they do not. -->\n @if (!deletedElsewhere()) {\n <div class=\"ml-auto flex shrink-0 items-center gap-1\">\n <button\n size=\"sm\"\n variant=\"tertiary\"\n scheme=\"neutral\"\n class=\"text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)\"\n [writerOnly]=\"workspace.currentUserRole\"\n (click)=\"confirmDeleteWorkspace(workspace)\">\n <trash-icon />\n {{ \"documentWorkspaces.common.delete\" | transloco }}\n </button>\n <button size=\"sm\" variant=\"tertiary\" scheme=\"neutral\" [writerOnly]=\"workspace.currentUserRole\" (click)=\"share(workspace)\">\n <user-round-icon />\n {{ \"documentWorkspaces.share.title\" | transloco }}\n </button>\n <button size=\"sm\" variant=\"tertiary\" scheme=\"neutral\" [writerOnly]=\"workspace.currentUserRole\" (click)=\"edit(workspace)\">\n <pen-to-square-icon />\n {{ \"documentWorkspaces.common.edit\" | transloco }}\n </button>\n <button\n size=\"sm\"\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [disabled]=\"refreshing()\"\n [attr.aria-label]=\"'documentWorkspaces.common.refresh' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.refresh' | transloco\"\n (click)=\"refresh()\">\n <refresh-icon />\n </button>\n </div>\n }\n }\n </div>\n\n @if (workspace(); as workspace) {\n @if (workspace.description) {\n <p class=\"mb-3 text-base text-(--font-primary-base)\">{{ workspace.description }}</p>\n }\n @if (workspace.tags.length) {\n <p class=\"mb-6 flex items-center gap-2 text-sm text-(--font-primary-base)\" data-testid=\"tags\">\n <tag-icon class=\"size-4\" />\n {{ workspace.tags.join(\", \") }}\n </p>\n }\n\n @if (!deletedElsewhere()) {\n <div class=\"mb-3 flex flex-wrap items-center gap-2\">\n <div role=\"group\" class=\"inline-flex gap-1 rounded-full bg-(--bg-primary-lighter) p-0.5\">\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'grid'\"\n [attr.aria-label]=\"'documentWorkspaces.common.gridView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.gridView' | transloco\"\n (click)=\"viewMode.set('grid')\">\n <grid-icon class=\"size-3.5\" />\n </button>\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'list'\"\n [attr.aria-label]=\"'documentWorkspaces.common.listView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.listView' | transloco\"\n (click)=\"viewMode.set('list')\">\n <list-icon class=\"size-3.5\" />\n </button>\n </div>\n\n <SearchInput\n role=\"search\"\n class=\"min-w-32 flex-[0_1_15rem]\"\n [formField]=\"searchForm\"\n [placeholder]=\"'documentWorkspaces.detail.searchPlaceholder' | transloco\"\n [aria-label]=\"'documentWorkspaces.detail.searchPlaceholder' | transloco\"\n [clearLabel]=\"'documentWorkspaces.common.clearSearch' | transloco\" />\n\n <button class=\"@max-md:px-2\" [writerOnly]=\"workspace.currentUserRole\" (click)=\"upload(workspace)\">\n <upload-icon />\n <span class=\"@max-md:sr-only\">{{ \"documentWorkspaces.detail.upload\" | transloco }}</span>\n </button>\n\n @if (selection.selectableItems().length) {\n @if (selection.active()) {\n <div class=\"ml-auto flex items-center gap-2 @max-xl:order-last @max-xl:ml-0 @max-xl:basis-full\" data-testid=\"selection-bar\">\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" (click)=\"selection.toggleAll()\">\n {{ (selection.allSelected() ? \"documentWorkspaces.common.unselectAll\" : \"documentWorkspaces.common.selectAll\") | transloco }}\n </button>\n <button class=\"text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)\" variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" [disabled]=\"!selection.count()\" (click)=\"deleteSelected()\">\n <trash-icon />\n {{ \"documentWorkspaces.common.delete\" | transloco }}\n </button>\n </div>\n }\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" class=\"@max-xl:ml-auto\" [class.ml-auto]=\"!selection.active()\" (click)=\"selection.toggleMode()\">\n {{ (selection.active() ? \"documentWorkspaces.common.cancel\" : \"documentWorkspaces.common.select\") | transloco }}\n </button>\n }\n </div>\n\n <p class=\"mb-6 text-sm text-(--font-primary-base)\" aria-live=\"polite\" data-testid=\"count\">\n @if (selection.active()) {\n {{ \"documentWorkspaces.detail.selectedDocumentCount\" | transloco: { count: selection.count() } }}\n } @else {\n {{ \"documentWorkspaces.detail.fileCount\" | transloco: { count: workspace.documentCount } }}\n }\n </p>\n }\n }\n\n @if (refreshError(); as message) {\n <p role=\"alert\" class=\"text-(--font-error-base) text-sm\">{{ \"documentWorkspaces.detail.refreshError\" | transloco: { error: message } }}</p>\n }\n\n <!-- Only the documents scroll: the title, the toolbar and the count stay in place. -->\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n @switch (status()) {\n @case (\"loading\") {\n <p class=\"text-(--font-primary-muted) text-sm\">{{ \"documentWorkspaces.detail.docsLoading\" | transloco }}</p>\n }\n @case (\"error\") {\n <div class=\"flex items-center gap-3 text-sm\" data-testid=\"load-error\">\n <span class=\"text-(--font-error-base)\">\n @if (loadError(); as message) {\n <workspace-message [message]=\"message\" />\n } @else {\n {{ \"documentWorkspaces.detail.docsLoadError\" | transloco }}\n }\n </span>\n <button variant=\"secondary\" size=\"sm\" (click)=\"load()\">{{ \"documentWorkspaces.common.retry\" | transloco }}</button>\n </div>\n }\n @default {\n @if (deletedElsewhere()) {\n <div class=\"flex flex-col items-center gap-1 py-8 text-center\" data-testid=\"not-found\">\n <div class=\"mb-1 inline-flex size-14 shrink-0 items-center justify-center rounded-(--radius-xl) bg-(--teal-100,#E0F4F1) text-(--teal-400,#4EBFB0)\">\n <file-search-icon class=\"size-6\" />\n </div>\n <p class=\"max-w-70 text-sm text-(--font-primary-base)\">{{ \"documentWorkspaces.errors.notFound\" | transloco }}</p>\n <button variant=\"secondary\" size=\"sm\" class=\"mt-2\" (click)=\"leave()\">{{ \"documentWorkspaces.detail.back\" | transloco }}</button>\n </div>\n } @else if (workspace(); as workspace) {\n @if (!documents().length) {\n <div class=\"flex flex-col items-center gap-1 py-8 text-center\" data-testid=\"empty\">\n <svg class=\"mb-1 block size-14 shrink-0\" width=\"56\" height=\"56\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" data-testid=\"empty-icon\">\n <g opacity=\"0.8\">\n <rect class=\"fill-(--teal-100,#E0F4F1)\" width=\"38\" height=\"38\" rx=\"12\" />\n <path\n d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\"\n class=\"fill-(--teal-400,#4EBFB0)\" />\n </g>\n </svg>\n <h5 class=\"text-sm font-semibold text-(--font-primary-dark)\">{{ \"documentWorkspaces.detail.emptyTitle\" | transloco }}</h5>\n <p class=\"max-w-70 text-sm text-(--font-primary-base)\">{{ \"documentWorkspaces.detail.emptySubtitle\" | transloco }}</p>\n </div>\n } @else if (!filtered().length) {\n <p class=\"text-(--font-primary-muted) py-8 text-center text-sm\" data-testid=\"no-match\">{{ \"documentWorkspaces.detail.noMatch\" | transloco }}</p>\n } @else if (viewMode() === \"grid\") {\n <div class=\"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] content-start gap-4 pb-8\">\n @for (document of filtered(); track document.id) {\n <document-card\n [document]=\"document\"\n [workspaceRole]=\"workspace.currentUserRole\"\n [query]=\"query()\"\n [active]=\"document.id === previewedDocumentId()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(document)\"\n [selectable]=\"selection.canSelect(document)\"\n (opened)=\"togglePreview(document)\"\n (deleteRequested)=\"confirmDeleteDocuments([document])\"\n (selectedChange)=\"selection.toggle(document, $event)\" />\n }\n </div>\n } @else {\n <div role=\"table\" class=\"flex flex-col gap-3 pb-8\">\n <div role=\"row\" [attr.data-selecting]=\"selection.active() ? '' : null\" class=\"grid grid-cols-[minmax(0,1fr)_auto_2.5rem] items-center gap-x-4 px-3 data-selecting:grid-cols-[2rem_minmax(0,1fr)_auto_2.5rem] @3xl:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_6rem_10rem_2.5rem] @3xl:data-selecting:grid-cols-[2rem_minmax(0,2fr)_minmax(0,1fr)_6rem_10rem_2.5rem] py-1 text-xs font-semibold text-(--font-primary-muted)\">\n @if (selection.active()) {\n <div role=\"columnheader\">\n <checkbox\n [checked]=\"selection.allSelected()\"\n [indeterminate]=\"selection.partiallySelected()\"\n [aria-label]=\"'documentWorkspaces.common.selectAll' | transloco\"\n (checkedChange)=\"selection.toggleAll()\" />\n </div>\n }\n <div role=\"columnheader\">{{ \"documentWorkspaces.detail.columnName\" | transloco }}</div>\n <div role=\"columnheader\" class=\"@max-3xl:hidden\">{{ \"documentWorkspaces.detail.columnSource\" | transloco }}</div>\n <div role=\"columnheader\" class=\"@max-3xl:hidden\">{{ \"documentWorkspaces.detail.columnSize\" | transloco }}</div>\n <div role=\"columnheader\">{{ \"documentWorkspaces.detail.columnDate\" | transloco }}</div>\n <div role=\"columnheader\"></div>\n </div>\n @for (document of filtered(); track document.id) {\n <document-row\n [document]=\"document\"\n [workspaceRole]=\"workspace.currentUserRole\"\n [query]=\"query()\"\n [active]=\"document.id === previewedDocumentId()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(document)\"\n [selectable]=\"selection.canSelect(document)\"\n (opened)=\"togglePreview(document)\"\n (deleteRequested)=\"confirmDeleteDocuments([document])\"\n (selectedChange)=\"selection.toggle(document, $event)\" />\n }\n </div>\n }\n\n @if (hasMore()) {\n <div class=\"flex flex-col items-center gap-2\">\n @if (loadMoreError(); as message) {\n <p role=\"alert\" class=\"text-(--font-error-base) text-sm\">{{ \"documentWorkspaces.detail.loadMoreError\" | transloco: { error: message } }}</p>\n }\n <button variant=\"secondary\" size=\"sm\" [disabled]=\"loadingMore()\" (click)=\"loadMore()\">\n {{ \"documentWorkspaces.detail.loadMore\" | transloco }}\n </button>\n </div>\n }\n } @else {\n <p class=\"text-(--font-primary-muted) py-8 text-center text-sm\" data-testid=\"not-found\">{{ \"documentWorkspaces.errors.notFound\" | transloco }}</p>\n }\n }\n }\n </div>\n </div>\n\n <!-- The list gives up part of its width to the preview, and takes it back when the preview closes. -->\n <div\n #handle=\"resizeHandle\"\n class=\"group/handle flex w-3 shrink-0 cursor-col-resize items-center justify-center max-md:hidden\"\n [class.hidden]=\"!previewed()\"\n [resizeHandle]=\"previewWidth()\"\n (resizeHandleChange)=\"userPreviewWidth.set($event)\"\n [resizeMin]=\"280\"\n [resizeMax]=\"maxPreviewWidth()\"\n [attr.aria-label]=\"'documentWorkspaces.preview.resize' | transloco\">\n <span class=\"h-6 w-0.5 rounded-full bg-(--stroke-primary-light) opacity-0 group-hover/handle:opacity-100 group-focus-visible/handle:opacity-100 group-data-resizing/handle:opacity-100\"></span>\n </div>\n <aside\n class=\"sticky top-3 my-3 mr-3 flex h-[calc(100dvh-1.5rem)] max-h-[calc(100%-1.5rem)] shrink-0 self-start overflow-hidden rounded-(--radius-xl) bg-(--bg-neutral-white) transition-[width] duration-[350ms] ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:transition-none data-open:border data-open:border-(--stroke-primary-lighter) data-open:shadow-[0_4px_6px_-2px_rgba(45,57,58,0.05),0_10px_15px_-3px_rgba(45,57,58,0.1)] max-md:data-open:fixed max-md:data-open:inset-0 max-md:data-open:z-50 max-md:data-open:m-0 max-md:data-open:w-full! max-md:data-open:max-h-none max-md:data-open:rounded-none\"\n [class.transition-none]=\"handle.resizing()\"\n [style.width.px]=\"previewed() ? previewWidth() : 0\"\n [attr.data-open]=\"previewed() ? '' : null\"\n [attr.aria-hidden]=\"previewed() ? null : 'true'\"\n data-testid=\"preview\">\n @if (previewed(); as previewed) {\n <!-- Its own width, so the content does not reflow while the card opens. -->\n <document-preview-panel\n class=\"shrink-0 max-md:w-full!\"\n [style.width.px]=\"previewWidth()\"\n [document]=\"previewed\"\n [queryName]=\"queryName()\"\n (closed)=\"previewedDocumentId.set(null)\"\n (askFollowUp)=\"askFollowUp.emit($event)\" />\n }\n </aside>\n ",
9783
+ template: "\n <div class=\"@container flex min-h-0 min-w-0 flex-1 flex-col p-3 pb-2 md:p-8 md:pb-4\">\n <div class=\"mb-3 flex flex-wrap items-center gap-x-3 gap-y-2\">\n <button\n size=\"sm\"\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'documentWorkspaces.detail.back' | transloco\"\n [tooltip]=\"'documentWorkspaces.detail.back' | transloco\"\n (click)=\"leave()\">\n <chevron-left-icon />\n </button>\n\n @if (workspace(); as workspace) {\n <h1 class=\"min-w-28 flex-[1_1_16rem] text-2xl leading-[31px] font-bold break-words text-(--font-neutral-black)\">{{ workspace.name }}</h1>\n\n <!-- Beside the title while they fit next to its 16rem, on a line of their own under it once they do not. -->\n @if (!deletedElsewhere()) {\n <div class=\"ml-auto flex shrink-0 items-center gap-1\">\n <button\n size=\"sm\"\n variant=\"tertiary\"\n scheme=\"neutral\"\n class=\"text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)\"\n [writerOnly]=\"workspace.currentUserRole\"\n (click)=\"confirmDeleteWorkspace(workspace)\">\n <x-mark-icon />\n {{ \"documentWorkspaces.common.delete\" | transloco }}\n </button>\n <button size=\"sm\" variant=\"tertiary\" scheme=\"neutral\" [writerOnly]=\"workspace.currentUserRole\" (click)=\"share(workspace)\">\n <user-round-icon />\n {{ \"documentWorkspaces.share.title\" | transloco }}\n </button>\n <button size=\"sm\" variant=\"tertiary\" scheme=\"neutral\" [writerOnly]=\"workspace.currentUserRole\" (click)=\"edit(workspace)\">\n <pen-to-square-icon />\n {{ \"documentWorkspaces.common.edit\" | transloco }}\n </button>\n <button\n size=\"sm\"\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [disabled]=\"refreshing()\"\n [attr.aria-label]=\"'documentWorkspaces.common.refresh' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.refresh' | transloco\"\n (click)=\"refresh()\">\n <refresh-icon />\n </button>\n </div>\n }\n }\n </div>\n\n @if (workspace(); as workspace) {\n @if (workspace.description) {\n <p class=\"mb-3 text-base text-(--font-primary-base)\">{{ workspace.description }}</p>\n }\n @if (workspace.tags.length) {\n <p class=\"mb-6 flex items-center gap-2 text-sm text-(--font-primary-base)\" data-testid=\"tags\">\n <tag-icon class=\"size-4\" />\n {{ workspace.tags.join(\", \") }}\n </p>\n }\n\n @if (!deletedElsewhere()) {\n <div class=\"mb-3 flex flex-wrap items-center gap-2\">\n <div role=\"group\" class=\"inline-flex gap-1 rounded-full bg-(--bg-primary-lighter) p-0.5\">\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'grid'\"\n [attr.aria-label]=\"'documentWorkspaces.common.gridView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.gridView' | transloco\"\n (click)=\"viewMode.set('grid')\">\n <grid-icon class=\"size-3.5\" />\n </button>\n <button\n variant=\"none\"\n class=\"inline-flex size-6 items-center justify-center rounded-full text-(--font-primary-base) aria-pressed:bg-(--bg-neutral-white) aria-pressed:shadow-md\"\n [attr.aria-pressed]=\"viewMode() === 'list'\"\n [attr.aria-label]=\"'documentWorkspaces.common.listView' | transloco\"\n [tooltip]=\"'documentWorkspaces.common.listView' | transloco\"\n (click)=\"viewMode.set('list')\">\n <list-icon class=\"size-3.5\" />\n </button>\n </div>\n\n <SearchInput\n role=\"search\"\n class=\"min-w-32 flex-[0_1_15rem]\"\n [formField]=\"searchForm\"\n [placeholder]=\"'documentWorkspaces.detail.searchPlaceholder' | transloco\"\n [aria-label]=\"'documentWorkspaces.detail.searchPlaceholder' | transloco\"\n [clearLabel]=\"'documentWorkspaces.common.clearSearch' | transloco\" />\n\n <button class=\"@max-md:px-2\" [writerOnly]=\"workspace.currentUserRole\" (click)=\"upload(workspace)\">\n <upload-icon />\n <span class=\"@max-md:sr-only\">{{ \"documentWorkspaces.detail.upload\" | transloco }}</span>\n </button>\n\n @if (selection.selectableItems().length) {\n @if (selection.active()) {\n <div class=\"ml-auto flex items-center gap-2 @max-xl:order-last @max-xl:ml-0 @max-xl:basis-full\" data-testid=\"selection-bar\">\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" (click)=\"selection.toggleAll()\">\n {{ (selection.allSelected() ? \"documentWorkspaces.common.unselectAll\" : \"documentWorkspaces.common.selectAll\") | transloco }}\n </button>\n <button class=\"text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)\" variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" [disabled]=\"!selection.count()\" (click)=\"deleteSelected()\">\n <x-mark-icon />\n {{ \"documentWorkspaces.common.delete\" | transloco }}\n </button>\n </div>\n }\n <button variant=\"tertiary\" scheme=\"neutral\" size=\"sm\" class=\"@max-xl:ml-auto\" [class.ml-auto]=\"!selection.active()\" (click)=\"selection.toggleMode()\">\n {{ (selection.active() ? \"documentWorkspaces.common.cancel\" : \"documentWorkspaces.common.select\") | transloco }}\n </button>\n }\n </div>\n\n <p class=\"mb-6 text-sm text-(--font-primary-base)\" aria-live=\"polite\" data-testid=\"count\">\n @if (selection.active()) {\n {{ \"documentWorkspaces.detail.selectedDocumentCount\" | transloco: { count: selection.count() } }}\n } @else {\n {{ \"documentWorkspaces.detail.fileCount\" | transloco: { count: workspace.documentCount } }}\n }\n </p>\n }\n }\n\n @if (refreshError(); as message) {\n <p role=\"alert\" class=\"text-(--font-error-base) text-sm\">{{ \"documentWorkspaces.detail.refreshError\" | transloco: { error: message } }}</p>\n }\n\n <!-- Only the documents scroll: the title, the toolbar and the count stay in place. -->\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n @switch (status()) {\n @case (\"loading\") {\n <p class=\"text-(--font-primary-muted) text-sm\">{{ \"documentWorkspaces.detail.docsLoading\" | transloco }}</p>\n }\n @case (\"error\") {\n <div class=\"flex items-center gap-3 text-sm\" data-testid=\"load-error\">\n <span class=\"text-(--font-error-base)\">\n @if (loadError(); as message) {\n <workspace-message [message]=\"message\" />\n } @else {\n {{ \"documentWorkspaces.detail.docsLoadError\" | transloco }}\n }\n </span>\n <button variant=\"secondary\" size=\"sm\" (click)=\"load()\">{{ \"documentWorkspaces.common.retry\" | transloco }}</button>\n </div>\n }\n @default {\n @if (deletedElsewhere()) {\n <div class=\"flex flex-col items-center gap-1 py-8 text-center\" data-testid=\"not-found\">\n <div class=\"mb-1 inline-flex size-14 shrink-0 items-center justify-center rounded-(--radius-xl) bg-(--teal-100,#E0F4F1) text-(--teal-400,#4EBFB0)\">\n <file-search-icon class=\"size-6\" />\n </div>\n <p class=\"max-w-70 text-sm text-(--font-primary-base)\">{{ \"documentWorkspaces.errors.notFound\" | transloco }}</p>\n <button variant=\"secondary\" size=\"sm\" class=\"mt-2\" (click)=\"leave()\">{{ \"documentWorkspaces.detail.back\" | transloco }}</button>\n </div>\n } @else if (workspace(); as workspace) {\n @if (!documents().length) {\n <div class=\"flex flex-col items-center gap-1 py-8 text-center\" data-testid=\"empty\">\n <svg class=\"mb-1 block size-14 shrink-0\" width=\"56\" height=\"56\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" data-testid=\"empty-icon\">\n <g opacity=\"0.8\">\n <rect class=\"fill-(--teal-100,#E0F4F1)\" width=\"38\" height=\"38\" rx=\"12\" />\n <path\n d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\"\n class=\"fill-(--teal-400,#4EBFB0)\" />\n </g>\n </svg>\n <h5 class=\"text-sm font-semibold text-(--font-primary-dark)\">{{ \"documentWorkspaces.detail.emptyTitle\" | transloco }}</h5>\n <p class=\"max-w-70 text-sm text-(--font-primary-base)\">{{ \"documentWorkspaces.detail.emptySubtitle\" | transloco }}</p>\n </div>\n } @else if (!filtered().length) {\n <p class=\"text-(--font-primary-muted) py-8 text-center text-sm\" data-testid=\"no-match\">{{ \"documentWorkspaces.detail.noMatch\" | transloco }}</p>\n } @else if (viewMode() === \"grid\") {\n <div class=\"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] content-start gap-4 pb-8\">\n @for (document of filtered(); track document.id) {\n <document-card\n [document]=\"document\"\n [workspaceRole]=\"workspace.currentUserRole\"\n [query]=\"query()\"\n [active]=\"document.id === previewedDocumentId()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(document)\"\n [selectable]=\"selection.canSelect(document)\"\n (opened)=\"togglePreview(document)\"\n (deleteRequested)=\"confirmDeleteDocuments([document])\"\n (selectedChange)=\"selection.toggle(document, $event)\" />\n }\n </div>\n } @else {\n <div role=\"table\" class=\"flex flex-col gap-3 pb-8\">\n <div role=\"row\" [attr.data-selecting]=\"selection.active() ? '' : null\" class=\"grid grid-cols-[minmax(0,1fr)_auto_2.5rem] items-center gap-x-4 px-3 data-selecting:grid-cols-[2rem_minmax(0,1fr)_auto_2.5rem] @3xl:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_6rem_10rem_2.5rem] @3xl:data-selecting:grid-cols-[2rem_minmax(0,2fr)_minmax(0,1fr)_6rem_10rem_2.5rem] py-1 text-xs font-semibold text-(--font-primary-muted)\">\n @if (selection.active()) {\n <div role=\"columnheader\">\n <checkbox\n [checked]=\"selection.allSelected()\"\n [indeterminate]=\"selection.partiallySelected()\"\n [aria-label]=\"'documentWorkspaces.common.selectAll' | transloco\"\n (checkedChange)=\"selection.toggleAll()\" />\n </div>\n }\n <div role=\"columnheader\">{{ \"documentWorkspaces.detail.columnName\" | transloco }}</div>\n <div role=\"columnheader\" class=\"@max-3xl:hidden\">{{ \"documentWorkspaces.detail.columnSource\" | transloco }}</div>\n <div role=\"columnheader\" class=\"@max-3xl:hidden\">{{ \"documentWorkspaces.detail.columnSize\" | transloco }}</div>\n <div role=\"columnheader\">{{ \"documentWorkspaces.detail.columnDate\" | transloco }}</div>\n <div role=\"columnheader\"></div>\n </div>\n @for (document of filtered(); track document.id) {\n <document-row\n [document]=\"document\"\n [workspaceRole]=\"workspace.currentUserRole\"\n [query]=\"query()\"\n [active]=\"document.id === previewedDocumentId()\"\n [selecting]=\"selection.active()\"\n [selected]=\"selection.isSelected(document)\"\n [selectable]=\"selection.canSelect(document)\"\n (opened)=\"togglePreview(document)\"\n (deleteRequested)=\"confirmDeleteDocuments([document])\"\n (selectedChange)=\"selection.toggle(document, $event)\" />\n }\n </div>\n }\n\n @if (hasMore()) {\n <div class=\"flex flex-col items-center gap-2\">\n @if (loadMoreError(); as message) {\n <p role=\"alert\" class=\"text-(--font-error-base) text-sm\">{{ \"documentWorkspaces.detail.loadMoreError\" | transloco: { error: message } }}</p>\n }\n <button variant=\"secondary\" size=\"sm\" [disabled]=\"loadingMore()\" (click)=\"loadMore()\">\n {{ \"documentWorkspaces.detail.loadMore\" | transloco }}\n </button>\n </div>\n }\n } @else {\n <p class=\"text-(--font-primary-muted) py-8 text-center text-sm\" data-testid=\"not-found\">{{ \"documentWorkspaces.errors.notFound\" | transloco }}</p>\n }\n }\n }\n </div>\n </div>\n\n <!-- The list gives up part of its width to the preview, and takes it back when the preview closes. -->\n <div\n #handle=\"resizeHandle\"\n class=\"group/handle flex w-3 shrink-0 cursor-col-resize items-center justify-center max-md:hidden\"\n [class.hidden]=\"!previewed()\"\n [resizeHandle]=\"previewWidth()\"\n (resizeHandleChange)=\"userPreviewWidth.set($event)\"\n [resizeMin]=\"280\"\n [resizeMax]=\"maxPreviewWidth()\"\n [attr.aria-label]=\"'documentWorkspaces.preview.resize' | transloco\">\n <span class=\"h-6 w-0.5 rounded-full bg-(--stroke-primary-light) opacity-0 group-hover/handle:opacity-100 group-focus-visible/handle:opacity-100 group-data-resizing/handle:opacity-100 pointer-coarse:opacity-100\"></span>\n </div>\n <aside\n class=\"sticky top-3 my-3 mr-3 flex h-[calc(100dvh-1.5rem)] max-h-[calc(100%-1.5rem)] shrink-0 self-start overflow-hidden rounded-(--radius-xl) bg-(--bg-neutral-white) transition-[width] duration-[350ms] ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:transition-none data-open:border data-open:border-(--stroke-primary-lighter) data-open:shadow-[0_4px_6px_-2px_rgba(45,57,58,0.05),0_10px_15px_-3px_rgba(45,57,58,0.1)] max-md:data-open:fixed max-md:data-open:inset-0 max-md:data-open:z-50 max-md:data-open:m-0 max-md:data-open:w-full! max-md:data-open:max-h-none max-md:data-open:rounded-none\"\n [class.transition-none]=\"handle.resizing()\"\n [style.width.px]=\"previewed() ? previewWidth() : 0\"\n [attr.data-open]=\"previewed() ? '' : null\"\n [attr.aria-hidden]=\"previewed() ? null : 'true'\"\n data-testid=\"preview\">\n @if (previewed(); as previewed) {\n <!-- Its own width, so the content does not reflow while the card opens. -->\n <document-preview-panel\n class=\"shrink-0 max-md:w-full!\"\n [style.width.px]=\"previewWidth()\"\n [document]=\"previewed\"\n [queryName]=\"queryName()\"\n (closed)=\"previewedDocumentId.set(null)\"\n (askFollowUp)=\"askFollowUp.emit($event)\" />\n }\n </aside>\n ",
9782
9784
  isInline: true,
9783
9785
  dependencies: [
9784
9786
  {
@@ -9948,8 +9950,8 @@ var WorkspaceDetail = class WorkspaceDetail {
9948
9950
  },
9949
9951
  {
9950
9952
  kind: "component",
9951
- type: TrashIcon,
9952
- selector: "trash, trash-icon, Trash, TrashIcon",
9953
+ type: XMarkIcon,
9954
+ selector: "x-mark, x-mark-icon, XMark, XMarkIcon",
9953
9955
  inputs: ["class"]
9954
9956
  },
9955
9957
  {
@@ -10012,7 +10014,7 @@ i0.ɵɵngDeclareClassMetadata({
10012
10014
  SearchInputComponent,
10013
10015
  TagIcon,
10014
10016
  TooltipDirective,
10015
- TrashIcon,
10017
+ XMarkIcon,
10016
10018
  UploadIcon,
10017
10019
  UserRoundIcon,
10018
10020
  WorkspaceMessage,
@@ -10048,7 +10050,7 @@ i0.ɵɵngDeclareClassMetadata({
10048
10050
  class="text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)"
10049
10051
  [writerOnly]="workspace.currentUserRole"
10050
10052
  (click)="confirmDeleteWorkspace(workspace)">
10051
- <trash-icon />
10053
+ <x-mark-icon />
10052
10054
  {{ "documentWorkspaces.common.delete" | transloco }}
10053
10055
  </button>
10054
10056
  <button size="sm" variant="tertiary" scheme="neutral" [writerOnly]="workspace.currentUserRole" (click)="share(workspace)">
@@ -10129,7 +10131,7 @@ i0.ɵɵngDeclareClassMetadata({
10129
10131
  {{ (selection.allSelected() ? "documentWorkspaces.common.unselectAll" : "documentWorkspaces.common.selectAll") | transloco }}
10130
10132
  </button>
10131
10133
  <button class="text-(--font-error-base) enabled:hover:bg-(--bg-error-lightest)" variant="tertiary" scheme="neutral" size="sm" [disabled]="!selection.count()" (click)="deleteSelected()">
10132
- <trash-icon />
10134
+ <x-mark-icon />
10133
10135
  {{ "documentWorkspaces.common.delete" | transloco }}
10134
10136
  </button>
10135
10137
  </div>
@@ -10275,7 +10277,7 @@ i0.ɵɵngDeclareClassMetadata({
10275
10277
  [resizeMin]="280"
10276
10278
  [resizeMax]="maxPreviewWidth()"
10277
10279
  [attr.aria-label]="'documentWorkspaces.preview.resize' | transloco">
10278
- <span class="h-6 w-0.5 rounded-full bg-(--stroke-primary-light) opacity-0 group-hover/handle:opacity-100 group-focus-visible/handle:opacity-100 group-data-resizing/handle:opacity-100"></span>
10280
+ <span class="h-6 w-0.5 rounded-full bg-(--stroke-primary-light) opacity-0 group-hover/handle:opacity-100 group-focus-visible/handle:opacity-100 group-data-resizing/handle:opacity-100 pointer-coarse:opacity-100"></span>
10279
10281
  </div>
10280
10282
  <aside
10281
10283
  class="sticky top-3 my-3 mr-3 flex h-[calc(100dvh-1.5rem)] max-h-[calc(100%-1.5rem)] shrink-0 self-start overflow-hidden rounded-(--radius-xl) bg-(--bg-neutral-white) transition-[width] duration-[350ms] ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:transition-none data-open:border data-open:border-(--stroke-primary-lighter) data-open:shadow-[0_4px_6px_-2px_rgba(45,57,58,0.05),0_10px_15px_-3px_rgba(45,57,58,0.1)] max-md:data-open:fixed max-md:data-open:inset-0 max-md:data-open:z-50 max-md:data-open:m-0 max-md:data-open:w-full! max-md:data-open:max-h-none max-md:data-open:rounded-none"