fix table header ui

This commit is contained in:
Julian Freeman
2026-04-17 16:49:20 -04:00
parent 5f835731fc
commit 3478c44860
4 changed files with 112 additions and 113 deletions

View File

@@ -68,33 +68,33 @@ function isSelected(profileId: string) {
</button> </button>
</div> </div>
<div v-if="isSelectableMode" class="modal-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !sortedProfiles.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!sortedProfiles.length || deleteBusy"
@change="emit('toggleAllProfileSelection')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedProfileIds.length || deleteBusy"
@click="emit('deleteSelectedProfiles')"
>
{{ deleteBusy ? "Deleting..." : `Delete Selected (${selectedProfileIds.length})` }}
</button>
</div>
<div class="modal-table"> <div class="modal-table">
<div v-if="isSelectableMode" class="modal-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !sortedProfiles.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!sortedProfiles.length || deleteBusy"
@change="emit('toggleAllProfileSelection')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedProfileIds.length || deleteBusy"
@click="emit('deleteSelectedProfiles')"
>
{{ deleteBusy ? "Deleting..." : `Delete Selected (${selectedProfileIds.length})` }}
</button>
</div>
<div class="modal-table-header modal-grid" :class="{ bookmark: isBookmark, extension: isExtension }"> <div class="modal-table-header modal-grid" :class="{ bookmark: isBookmark, extension: isExtension }">
<div v-if="isSelectableMode" class="header-cell checkbox-cell">Pick</div> <div v-if="isSelectableMode" class="header-cell checkbox-cell">Pick</div>
<div class="header-cell icon-cell">Avatar</div> <div class="header-cell icon-cell">Avatar</div>
@@ -256,6 +256,8 @@ function isSelected(profileId: string) {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
gap: 12px; gap: 12px;
padding: 10px 12px 8px;
border-bottom: 1px solid rgba(148, 163, 184, 0.1);
} }
.modal-table-header { .modal-table-header {

View File

@@ -32,33 +32,33 @@ function isSelected(url: string) {
<template> <template>
<section class="table-section"> <section class="table-section">
<div class="bookmarks-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !bookmarks.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!bookmarks.length || deleteBusy"
@change="emit('toggleAllBookmarks')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedBookmarkUrls.length || deleteBusy"
@click="emit('deleteSelected')"
>
{{ deleteBusy ? "Deleting..." : `Delete Selected (${selectedBookmarkUrls.length})` }}
</button>
</div>
<div v-if="bookmarks.length" class="data-table"> <div v-if="bookmarks.length" class="data-table">
<div class="bookmarks-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !bookmarks.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!bookmarks.length || deleteBusy"
@change="emit('toggleAllBookmarks')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedBookmarkUrls.length || deleteBusy"
@click="emit('deleteSelected')"
>
{{ deleteBusy ? "Deleting..." : `Delete Selected (${selectedBookmarkUrls.length})` }}
</button>
</div>
<div class="data-table-header bookmarks-grid"> <div class="data-table-header bookmarks-grid">
<div class="header-cell checkbox-cell">Pick</div> <div class="header-cell checkbox-cell">Pick</div>
<button class="header-cell sortable" :class="{ active: sortKey === 'title' }" type="button" @click="emit('update:sortKey', 'title')">Name</button> <button class="header-cell sortable" :class="{ active: sortKey === 'title' }" type="button" @click="emit('update:sortKey', 'title')">Name</button>
@@ -112,9 +112,6 @@ function isSelected(url: string) {
<style scoped> <style scoped>
.table-section { .table-section {
display: flex;
flex-direction: column;
gap: 10px;
padding: 0; padding: 0;
height: 100%; height: 100%;
min-height: 0; min-height: 0;
@@ -125,6 +122,8 @@ function isSelected(url: string) {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
gap: 12px; gap: 12px;
padding: 10px 12px 8px;
border-bottom: 1px solid rgba(148, 163, 184, 0.1);
} }
.data-table { .data-table {

View File

@@ -32,33 +32,33 @@ function isSelected(extensionId: string) {
<template> <template>
<section class="table-section"> <section class="table-section">
<div class="extensions-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !extensions.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!extensions.length || deleteBusy"
@change="emit('toggleAllExtensions')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedExtensionIds.length || deleteBusy"
@click="emit('deleteSelected')"
>
{{ deleteBusy ? "Deleting..." : `Delete Selected (${selectedExtensionIds.length})` }}
</button>
</div>
<div v-if="extensions.length" class="data-table"> <div v-if="extensions.length" class="data-table">
<div class="extensions-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !extensions.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!extensions.length || deleteBusy"
@change="emit('toggleAllExtensions')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedExtensionIds.length || deleteBusy"
@click="emit('deleteSelected')"
>
{{ deleteBusy ? "Deleting..." : `Delete Selected (${selectedExtensionIds.length})` }}
</button>
</div>
<div class="data-table-header extensions-grid"> <div class="data-table-header extensions-grid">
<div class="header-cell checkbox-cell">Pick</div> <div class="header-cell checkbox-cell">Pick</div>
<div class="header-cell icon-cell">Icon</div> <div class="header-cell icon-cell">Icon</div>
@@ -117,9 +117,6 @@ function isSelected(extensionId: string) {
<style scoped> <style scoped>
.table-section { .table-section {
display: flex;
flex-direction: column;
gap: 10px;
padding: 0; padding: 0;
height: 100%; height: 100%;
min-height: 0; min-height: 0;
@@ -130,6 +127,8 @@ function isSelected(extensionId: string) {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
gap: 12px; gap: 12px;
padding: 10px 12px 8px;
border-bottom: 1px solid rgba(148, 163, 184, 0.1);
} }
.toolbar-checkbox { .toolbar-checkbox {

View File

@@ -64,33 +64,33 @@ function hasAnyHistoryFile(statuses: CleanupFileStatus[]) {
<template> <template>
<section class="table-section"> <section class="table-section">
<div class="history-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !selectableProfiles.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!selectableProfiles.length || cleanupBusy"
@change="emit('toggleAllProfiles')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedProfileIds.length || cleanupBusy"
@click="emit('cleanupSelected')"
>
{{ cleanupBusy ? "Cleaning..." : `Clean Selected (${selectedProfileIds.length})` }}
</button>
</div>
<div v-if="profiles.length" class="data-table"> <div v-if="profiles.length" class="data-table">
<div class="history-toolbar">
<label class="toolbar-checkbox" :class="{ disabled: !selectableProfiles.length }">
<input
type="checkbox"
class="native-checkbox"
:checked="allSelected"
:disabled="!selectableProfiles.length || cleanupBusy"
@change="emit('toggleAllProfiles')"
/>
<span class="custom-checkbox" :class="{ checked: allSelected }" aria-hidden="true">
<svg viewBox="0 0 16 16">
<path d="M3.5 8.2L6.4 11.1L12.5 4.9" />
</svg>
</span>
<span>Select All</span>
</label>
<button
class="danger-button"
type="button"
:disabled="!selectedProfileIds.length || cleanupBusy"
@click="emit('cleanupSelected')"
>
{{ cleanupBusy ? "Cleaning..." : `Clean Selected (${selectedProfileIds.length})` }}
</button>
</div>
<div class="data-table-header history-grid"> <div class="data-table-header history-grid">
<div class="header-cell checkbox-cell">Pick</div> <div class="header-cell checkbox-cell">Pick</div>
<div class="header-cell icon-cell">Avatar</div> <div class="header-cell icon-cell">Avatar</div>
@@ -172,9 +172,6 @@ function hasAnyHistoryFile(statuses: CleanupFileStatus[]) {
<style scoped> <style scoped>
.table-section { .table-section {
display: flex;
flex-direction: column;
gap: 10px;
padding: 0; padding: 0;
height: 100%; height: 100%;
min-height: 0; min-height: 0;
@@ -185,6 +182,8 @@ function hasAnyHistoryFile(statuses: CleanupFileStatus[]) {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
gap: 12px; gap: 12px;
padding: 10px 12px 8px;
border-bottom: 1px solid rgba(148, 163, 184, 0.1);
} }
.toolbar-checkbox { .toolbar-checkbox {