diff --git a/booklore-ui/src/app/features/book/components/shelf-assigner/shelf-assigner.component.scss b/booklore-ui/src/app/features/book/components/shelf-assigner/shelf-assigner.component.scss index 3bc58203f..6773e4516 100644 --- a/booklore-ui/src/app/features/book/components/shelf-assigner/shelf-assigner.component.scss +++ b/booklore-ui/src/app/features/book/components/shelf-assigner/shelf-assigner.component.scss @@ -1,3 +1,5 @@ +@use '../../../../shared/styles/panel-shared' as panel; + .shelf-assigner { width: 550px; max-width: 550px; @@ -11,81 +13,8 @@ } .panel-header { - position: relative; - display: flex; - align-items: center; - gap: 1rem; - padding: 1.5rem 1.5rem 1.25rem 1.5rem; - border-radius: 10px 10px 0 0; - border: 1px solid var(--border-color); + @include panel.panel-header; border-bottom: none; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08); - - .header-icon-wrapper { - display: flex; - align-items: center; - justify-content: center; - width: 48px; - height: 48px; - background: var(--primary-color); - border-radius: 10px; - - - .header-icon { - font-size: 1.5rem; - color: var(--primary-contrast-color); - } - } - - .header-text { - flex: 1; - - .panel-title { - margin: 0 0 0.25rem 0; - font-size: 1.25rem; - font-weight: 600; - color: var(--text-color); - } - - .panel-description { - margin: 0; - font-size: 0.875rem; - color: var(--text-secondary-color); - } - } - - @media (max-width: 480px) { - padding: 1rem 3rem 1rem 1rem; - - .header-icon-wrapper { - width: 40px; - height: 40px; - - .header-icon { - font-size: 1.25rem; - } - } - - .header-text { - .panel-title { - font-size: 1.125rem; - } - - .panel-description { - font-size: 0.8rem; - } - } - - ::ng-deep .close-button { - top: 0.5rem; - right: 0.5rem; - - .p-button { - width: 2rem; - height: 2rem; - } - } - } } .shelves-container { @@ -339,31 +268,6 @@ } .dialog-footer { - display: flex; - justify-content: space-between; - align-items: center; - gap: 0.75rem; - padding: 1.25rem 1.5rem; - background: var(--card-background); - border: 1px solid var(--border-color); + @include panel.dialog-footer; border-top: none; - border-radius: 0 0 10px 10px; - box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06); - - .footer-actions { - display: flex; - gap: 0.75rem; - } - - @media (max-width: 480px) { - flex-direction: column; - padding: 1rem; - gap: 0.5rem; - - .footer-actions { - width: 100%; - justify-content: flex-end; - gap: 0.5rem; - } - } } diff --git a/booklore-ui/src/app/features/book/components/shelf-creator/shelf-creator.component.scss b/booklore-ui/src/app/features/book/components/shelf-creator/shelf-creator.component.scss index 45f04e7ff..ea549d8eb 100644 --- a/booklore-ui/src/app/features/book/components/shelf-creator/shelf-creator.component.scss +++ b/booklore-ui/src/app/features/book/components/shelf-creator/shelf-creator.component.scss @@ -1,3 +1,5 @@ +@use '../../../../shared/styles/panel-shared' as panel; + .shelf-creator { display: flex; flex-direction: column; @@ -10,80 +12,7 @@ } .panel-header { - position: relative; - display: flex; - align-items: center; - gap: 1rem; - padding: 1.5rem 1.5rem 1.25rem 1.5rem; - border-radius: 10px 10px 0 0; - border: 1px solid var(--border-color); - - .header-icon-wrapper { - display: flex; - align-items: center; - justify-content: center; - width: 48px; - height: 48px; - background: var(--primary-color); - border-radius: 10px; - box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); - - .header-icon { - font-size: 1.5rem; - color: var(--primary-contrast-color); - } - } - - .header-text { - flex: 1; - - .panel-title { - margin: 0 0 0.25rem 0; - font-size: 1.25rem; - font-weight: 600; - color: var(--text-color); - } - - .panel-description { - margin: 0; - font-size: 0.875rem; - color: var(--text-secondary-color); - } - } - - .close-button { - position: absolute; - top: 0.75rem; - right: 0.75rem; - } - - @media (max-width: 480px) { - padding: 1rem; - - .header-icon-wrapper { - width: 40px; - height: 40px; - - .header-icon { - font-size: 1.25rem; - } - } - - .header-text { - .panel-title { - font-size: 1.125rem; - } - - .panel-description { - font-size: 0.8rem; - } - } - - .close-button { - top: 0.5rem; - right: 0.5rem; - } - } + @include panel.panel-header; } .form-container { @@ -306,88 +235,10 @@ } .dialog-footer { - display: flex; - justify-content: space-between; - align-items: center; - gap: 1rem; - padding: 1.25rem 1.5rem; - background: var(--card-background); - border: 1px solid var(--border-color); + @include panel.dialog-footer; border-top: none; - border-radius: 0 0 10px 10px; - box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06); - - .validation-status { - flex: 1; - min-width: 0; - } - - .footer-actions { - display: flex; - gap: 0.75rem; - flex-shrink: 0; - } - - @media (max-width: 640px) { - flex-direction: column; - align-items: stretch; - padding: 1rem; - gap: 0.75rem; - - .validation-status { - width: 100%; - } - - .footer-actions { - width: 100%; - justify-content: flex-end; - gap: 0.5rem; - } - } } .validation-message { - display: flex; - align-items: center; - gap: 0.375rem; - padding: 0.25rem 0.5rem; - font-weight: 500; - border-radius: 6px; - font-size: 0.875rem; - width: fit-content; - max-width: 100%; - - i { - font-size: 0.95rem; - } - - &.error { - background: rgba(239, 68, 68, 0.1); - color: rgb(239, 68, 68); - border: 1px solid rgba(239, 68, 68, 0.3); - - i { - color: rgb(239, 68, 68); - } - } - - &.success { - background: rgba(34, 197, 94, 0.1); - color: rgb(34, 197, 94); - border: 1px solid rgba(34, 197, 94, 0.3); - - i { - color: rgb(34, 197, 94); - } - } - - @media (max-width: 640px) { - font-size: 0.8rem; - padding: 0.375rem 0.5rem; - width: 100%; - - i { - font-size: 0.875rem; - } - } + @include panel.validation-message; } diff --git a/booklore-ui/src/app/features/book/components/shelf-edit-dialog/shelf-edit-dialog.component.scss b/booklore-ui/src/app/features/book/components/shelf-edit-dialog/shelf-edit-dialog.component.scss index 9b4a187e2..e3f3dfe78 100644 --- a/booklore-ui/src/app/features/book/components/shelf-edit-dialog/shelf-edit-dialog.component.scss +++ b/booklore-ui/src/app/features/book/components/shelf-edit-dialog/shelf-edit-dialog.component.scss @@ -1,3 +1,5 @@ +@use '../../../../shared/styles/panel-shared' as panel; + .shelf-form { width: 550px; max-width: 550px; @@ -11,80 +13,8 @@ } .panel-header { - position: relative; - display: flex; - align-items: center; - gap: 1rem; - padding: 1.5rem 1.5rem 1.25rem 1.5rem; - border-radius: 10px 10px 0 0; - border: 1px solid var(--border-color); + @include panel.panel-header; border-bottom: none; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08); - - .header-icon-wrapper { - display: flex; - align-items: center; - justify-content: center; - width: 48px; - height: 48px; - background: var(--primary-color); - border-radius: 10px; - - .header-icon { - font-size: 1.5rem; - color: var(--primary-contrast-color); - } - } - - .header-text { - flex: 1; - - .panel-title { - margin: 0 0 0.25rem 0; - font-size: 1.25rem; - font-weight: 600; - color: var(--text-color); - } - - .panel-description { - margin: 0; - font-size: 0.875rem; - color: var(--text-secondary-color); - } - } - - @media (max-width: 480px) { - padding: 1rem 3rem 1rem 1rem; - - .header-icon-wrapper { - width: 40px; - height: 40px; - - .header-icon { - font-size: 1.25rem; - } - } - - .header-text { - .panel-title { - font-size: 1.125rem; - } - - .panel-description { - font-size: 0.8rem; - } - } - - ::ng-deep .close-button { - top: 0.5rem; - right: 0.5rem; - - .p-button { - width: 2rem; - height: 2rem; - } - } - } } .shelf-container { @@ -173,31 +103,6 @@ } .dialog-footer { - display: flex; - justify-content: space-between; - align-items: center; - gap: 0.75rem; - padding: 1.25rem 1.5rem; - background: var(--card-background); - border: 1px solid var(--border-color); + @include panel.dialog-footer; border-top: none; - border-radius: 0 0 10px 10px; - box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06); - - .footer-actions { - display: flex; - gap: 0.75rem; - } - - @media (max-width: 480px) { - flex-direction: column; - padding: 1rem; - gap: 0.5rem; - - .footer-actions { - width: 100%; - justify-content: flex-end; - gap: 0.5rem; - } - } } diff --git a/booklore-ui/src/app/features/dashboard/components/dashboard-settings/dashboard-settings.component.scss b/booklore-ui/src/app/features/dashboard/components/dashboard-settings/dashboard-settings.component.scss index e3023e426..48b2d02a7 100644 --- a/booklore-ui/src/app/features/dashboard/components/dashboard-settings/dashboard-settings.component.scss +++ b/booklore-ui/src/app/features/dashboard/components/dashboard-settings/dashboard-settings.component.scss @@ -1,3 +1,5 @@ +@use '../../../../shared/styles/panel-shared' as panel; + .dashboard-settings { width: 1000px; max-width: 1000px; @@ -11,81 +13,7 @@ } .panel-header { - position: relative; - display: flex; - align-items: center; - gap: 1rem; - padding: 1.5rem 1.5rem 1.25rem 1.5rem; - border-radius: 10px 10px 0 0; - border: 1px solid var(--border-color); - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08); - - .header-icon-wrapper { - display: flex; - align-items: center; - justify-content: center; - width: 48px; - height: 48px; - background: var(--primary-color); - border-radius: 10px; - box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); - - .header-icon { - font-size: 1.5rem; - color: var(--primary-contrast-color); - } - } - - .header-text { - flex: 1; - - .panel-title { - margin: 0 0 0.25rem 0; - font-size: 1.25rem; - font-weight: 600; - color: var(--text-color); - } - - .panel-description { - margin: 0; - font-size: 0.875rem; - color: var(--text-secondary-color); - } - } - - ::ng-deep .close-button { - position: absolute; - top: 0.75rem; - right: 0.75rem; - } - - @media (max-width: 480px) { - padding: 1rem; - - .header-icon-wrapper { - width: 40px; - height: 40px; - - .header-icon { - font-size: 1.25rem; - } - } - - .header-text { - .panel-title { - font-size: 1.125rem; - } - - .panel-description { - font-size: 0.8rem; - } - } - - ::ng-deep .close-button { - top: 0.5rem; - right: 0.5rem; - } - } + @include panel.panel-header; } .settings-controls { @@ -267,36 +195,17 @@ label { } .dialog-footer { - display: flex; - justify-content: space-between; - align-items: center; - gap: 1rem; - padding: 1.25rem 1.5rem; - background: var(--card-background); - border: 1px solid var(--border-color); + @include panel.dialog-footer; border-top: none; - border-radius: 0 0 10px 10px; - box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06); .footer-left { display: flex; align-items: center; gap: 0.5rem; - flex: 1; - } - - .footer-actions { - display: flex; - gap: 0.75rem; } @media (max-width: 640px) { - flex-direction: column; - padding: 1rem; - gap: 0.75rem; - .footer-left { - width: 100%; flex-direction: column; gap: 0.5rem; @@ -306,8 +215,6 @@ label { } .footer-actions { - width: 100%; - ::ng-deep .p-button { flex: 1; } diff --git a/booklore-ui/src/app/features/library-creator/library-creator.component.html b/booklore-ui/src/app/features/library-creator/library-creator.component.html index 2ed127d64..7da35faa2 100644 --- a/booklore-ui/src/app/features/library-creator/library-creator.component.html +++ b/booklore-ui/src/app/features/library-creator/library-creator.component.html @@ -1,13 +1,13 @@
-
- +
+
-
-

+
+

{{ mode === 'edit' ? 'Edit Library' : 'Create New Library' }}

-

Set up a new library to organize and manage your book collection

+

Set up a new library to organize and manage your book collection