diff --git a/frontend/src/components/common/DataTable.vue b/frontend/src/components/common/DataTable.vue index b9c1e12..b6eb1d5 100644 --- a/frontend/src/components/common/DataTable.vue +++ b/frontend/src/components/common/DataTable.vue @@ -1107,31 +1107,26 @@ defineExpose({ /* Filter Panel Styles */ .dt-filter-panel { - background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); - border: 1px solid #e2e8f0; - border-radius: 12px; - margin-bottom: 1rem; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - transition: all 0.3s ease; -} - -.dt-filter-panel:hover { - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + background: #ffffff; + border: 1px solid #e5e7eb; + border-radius: 6px; + margin-bottom: 0.5rem; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .dt-filter-header { - padding: 1rem 1.25rem 0.5rem; - border-bottom: 1px solid #e2e8f0; + padding: 0.5rem 0.75rem 0.25rem; + border-bottom: 1px solid #f3f4f6; } .dt-filter-title { margin: 0; - font-size: 0.875rem; + font-size: 0.75rem; font-weight: 600; color: #374151; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; } .dt-filter-title i { @@ -1139,80 +1134,75 @@ defineExpose({ } .dt-filter-content { - padding: 1.25rem; + padding: 0.75rem; } .dt-filter-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1rem; - margin-bottom: 1rem; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 0.5rem; + margin-bottom: 0.5rem; } .dt-filter-field { display: flex; flex-direction: column; - gap: 0.375rem; + gap: 0.25rem; } .dt-filter-label { - font-size: 0.875rem; + font-size: 0.75rem; font-weight: 500; color: #374151; } .dt-filter-input { border: 1px solid #d1d5db; - border-radius: 8px; - padding: 0.625rem; - font-size: 0.875rem; - transition: - border-color 0.2s ease, - box-shadow 0.2s ease; + border-radius: 4px; + padding: 0.375rem 0.5rem; + font-size: 0.75rem; + transition: border-color 0.2s ease; + background: #ffffff; } .dt-filter-input:focus { border-color: #6366f1; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); + outline: none; } .dt-filter-actions { display: flex; - gap: 0.75rem; + gap: 0.5rem; align-items: center; flex-wrap: wrap; } .dt-btn-primary, .dt-btn-secondary { - border-radius: 8px; + border-radius: 4px; font-weight: 500; - transition: all 0.2s ease; -} - -.dt-btn-primary:hover { - transform: translateY(-1px); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + font-size: 0.75rem; + padding: 0.375rem 0.75rem; } .dt-filter-status { - margin-top: 0.75rem; - padding: 0.75rem; - background: #f3f4f6; - border-radius: 8px; - font-size: 0.8125rem; + margin-top: 0.5rem; + padding: 0.375rem 0.5rem; + background: #f9fafb; + border-radius: 4px; + font-size: 0.7rem; color: #6b7280; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; } /* Pagination Panel Styles */ .dt-pagination-panel { - background: linear-gradient(135deg, #ffffff 0%, #f9fafb 100%); + background: #ffffff; border: 1px solid #e5e7eb; - border-radius: 10px; - margin-bottom: 1rem; + border-radius: 6px; + margin-bottom: 0.5rem; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } @@ -1220,40 +1210,41 @@ defineExpose({ display: flex; justify-content: space-between; align-items: center; - padding: 0.875rem 1.25rem; + padding: 0.5rem 0.75rem; flex-wrap: wrap; - gap: 1rem; + gap: 0.5rem; } .dt-pagination-info { display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; color: #6b7280; - font-size: 0.875rem; + font-size: 0.75rem; } .dt-pagination-info i { color: #6366f1; + font-size: 0.75rem; } .dt-pagination-controls { display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; } .dt-pagination-label { - font-size: 0.875rem; + font-size: 0.75rem; color: #374151; font-weight: 500; } .dt-pagination-select { border: 1px solid #d1d5db; - border-radius: 6px; - padding: 0.375rem 0.75rem; - font-size: 0.875rem; + border-radius: 4px; + padding: 0.25rem 0.5rem; + font-size: 0.75rem; background: white; transition: border-color 0.2s ease; } @@ -1265,27 +1256,27 @@ defineExpose({ /* Bulk Actions Panel Styles */ .dt-bulk-actions-panel { - background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); - border: 1px solid #f59e0b; - border-radius: 10px; - margin-bottom: 1rem; - box-shadow: 0 2px 4px rgba(245, 158, 11, 0.1); - animation: slideInBulk 0.3s ease-out; + background: #fef7ed; + border: 1px solid #fed7aa; + border-radius: 6px; + margin-bottom: 0.5rem; + box-shadow: 0 1px 2px rgba(251, 146, 60, 0.1); + animation: slideInBulk 0.2s ease-out; } @keyframes slideInBulk { from { opacity: 0; - transform: translateY(-10px) scale(0.98); + transform: translateY(-5px); } to { opacity: 1; - transform: translateY(0) scale(1); + transform: translateY(0); } } .dt-bulk-actions-content { - padding: 1rem 1.25rem; + padding: 0.5rem 0.75rem; } .dt-bulk-actions-groups { @@ -1293,55 +1284,51 @@ defineExpose({ justify-content: space-between; align-items: center; flex-wrap: wrap; - gap: 0.75rem; - margin-bottom: 0.75rem; + gap: 0.5rem; + margin-bottom: 0.5rem; } .dt-bulk-btn { - border-radius: 8px; + border-radius: 4px; font-weight: 500; - transition: all 0.2s ease; -} - -.dt-bulk-btn:hover { - transform: translateY(-1px); - box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1); + font-size: 0.75rem; + padding: 0.375rem 0.75rem; } .dt-bulk-actions-status { - padding: 0.5rem 0.75rem; + padding: 0.25rem 0.5rem; background: rgba(255, 255, 255, 0.8); - border-radius: 6px; - font-size: 0.8125rem; - color: #92400e; + border-radius: 4px; + font-size: 0.7rem; + color: #ea580c; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; font-weight: 500; } /* Global Actions Panel Styles */ .dt-global-actions-panel { - background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); - border: 1px solid #e2e8f0; - border-radius: 10px; - margin-bottom: 1rem; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - border-left: 4px solid #6366f1; + background: #ffffff; + border: 1px solid #e5e7eb; + border-radius: 6px; + margin-bottom: 0.5rem; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + border-left: 3px solid #6366f1; } .dt-global-actions-content { display: flex; justify-content: space-between; align-items: center; - padding: 1rem 1.25rem; + padding: 0.5rem 0.75rem; flex-wrap: wrap; - gap: 0.75rem; + gap: 0.5rem; } .dt-action-group { display: flex; - gap: 0.5rem; + gap: 0.375rem; flex-wrap: wrap; align-items: center; } @@ -1360,15 +1347,17 @@ defineExpose({ } .dt-action-btn { - border-radius: 8px; + border-radius: 4px; font-weight: 500; + font-size: 0.75rem; + padding: 0.375rem 0.75rem; transition: all 0.2s ease; position: relative; } .dt-action-btn:hover:not(:disabled) { transform: translateY(-1px); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .dt-action-btn-global { @@ -1397,14 +1386,14 @@ defineExpose({ } .dt-global-actions-status { - padding: 0.625rem 1.25rem; - background: #f3f4f6; - border-top: 1px solid #e5e7eb; - font-size: 0.8125rem; + padding: 0.375rem 0.75rem; + background: #f9fafb; + border-top: 1px solid #f3f4f6; + font-size: 0.7rem; color: #6b7280; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; } /* Row Actions Styles */ @@ -1498,45 +1487,15 @@ defineExpose({ } } -/* Dark mode support (optional) */ -@media (prefers-color-scheme: dark) { - .dt-filter-panel, - .dt-pagination-panel, - .dt-global-actions-panel { - background: linear-gradient(135deg, #1f2937 0%, #111827 100%); - border-color: #374151; - color: #f9fafb; - } - - .dt-filter-title, - .dt-filter-label, - .dt-pagination-label { - color: #f9fafb; - } - - .dt-filter-input, - .dt-pagination-select { - background: #374151; - border-color: #4b5563; - color: #f9fafb; - } - - .dt-filter-status, - .dt-global-actions-status { - background: #374151; - color: #d1d5db; - } -} - /* Animation utilities */ .dt-fade-in { - animation: fadeIn 0.3s ease-out; + animation: fadeIn 0.2s ease-out; } @keyframes fadeIn { from { opacity: 0; - transform: translateY(10px); + transform: translateY(5px); } to { opacity: 1; @@ -1545,13 +1504,13 @@ defineExpose({ } .dt-slide-in { - animation: slideIn 0.3s ease-out; + animation: slideIn 0.2s ease-out; } @keyframes slideIn { from { opacity: 0; - transform: translateX(-10px); + transform: translateX(-5px); } to { opacity: 1; diff --git a/frontend/src/components/pages/Clients.vue b/frontend/src/components/pages/Clients.vue index f17b8b3..6509eff 100644 --- a/frontend/src/components/pages/Clients.vue +++ b/frontend/src/components/pages/Clients.vue @@ -176,21 +176,21 @@ const tableActions = [ variant: "outlined", }, }, - { - label: "Export Selected", - action: (selectedRows) => { - console.log("Exporting", selectedRows.length, "clients:", selectedRows); - // Implementation would export selected clients - }, - type: "button", - style: "success", - icon: "pi pi-download", - requiresMultipleSelection: true, // Bulk action - operates on selected rows - layout: { - position: "right", - variant: "filled", - }, - }, + // { + // label: "Export Selected", + // action: (selectedRows) => { + // console.log("Exporting", selectedRows.length, "clients:", selectedRows); + // // Implementation would export selected clients + // }, + // type: "button", + // style: "success", + // icon: "pi pi-download", + // requiresMultipleSelection: true, // Bulk action - operates on selected rows + // layout: { + // position: "right", + // variant: "filled", + // }, + // }, { label: "Edit", action: (rowData) => {