{{ session.company() }}
+ @for (m of menu.modules(); track m.id) { +Esta pantalla aún no está disponible.
+ `, + styles: ` + h1 { margin: 0 0 6px; font-size: 18px; font-weight: 600; } + p { margin: 0; color: var(--quiet); } + `, +}) +export class ComingSoonPage { + protected readonly title = inject(ActivatedRoute).snapshot.data['title'] as string; +} diff --git a/apps/web/src/app/features/shared/no-access.page.ts b/apps/web/src/app/features/shared/no-access.page.ts new file mode 100644 index 0000000..35c3814 --- /dev/null +++ b/apps/web/src/app/features/shared/no-access.page.ts @@ -0,0 +1,18 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; + +@Component({ + selector: 'sbo-no-access-page', + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [RouterLink], + template: ` +No tiene permisos para esta pantalla. Volver al inicio
+ `, + styles: ` + h1 { margin: 0 0 6px; font-size: 18px; font-weight: 600; } + p { margin: 0; color: var(--quiet); } + a { color: var(--focus); } + `, +}) +export class NoAccessPage {} diff --git a/apps/web/src/app/layout/main-layout.css b/apps/web/src/app/layout/main-layout.css new file mode 100644 index 0000000..c61fec3 --- /dev/null +++ b/apps/web/src/app/layout/main-layout.css @@ -0,0 +1,133 @@ +.app { + display: flex; + flex-direction: column; + height: 100vh; +} +.shell { + display: flex; + align-items: center; + gap: 12px; + padding: 6px 12px; + background: var(--shell); + color: var(--shell-ink); + flex: none; +} +.brand { + color: inherit; + text-decoration: none; + font-weight: 600; + font-size: 14px; +} +.brand small { + font-weight: 400; + margin-left: 8px; + color: var(--shell-quiet); +} +.sp { + flex: 1; +} +.user { + font-size: 12px; + color: var(--shell-quiet); +} +.out, +.burger { + background: transparent; + color: var(--shell-ink); + border: 1px solid var(--shell-quiet); + border-radius: 3px; + padding: 2px 10px; + cursor: pointer; +} +.burger { + display: none; + padding: 2px 8px; +} +.out:hover, +.burger:hover { + background: rgba(255, 255, 255, 0.08); +} +.body { + display: flex; + flex: 1; + min-height: 0; +} +.side { + width: 224px; + flex: none; + overflow-y: auto; + background: var(--panel); + border-right: 1px solid var(--line); + padding: 6px 0; +} +.mod { + display: block; + width: 100%; + text-align: left; + padding: 5px 12px; + background: none; + border: none; + font-weight: 600; + cursor: pointer; +} +.mod:hover { + background: var(--btn-h); +} +.caret { + display: inline-block; + width: 14px; + color: var(--quiet); +} +ul { + list-style: none; + margin: 0; + padding: 0; +} +li a { + display: block; + padding: 4px 12px 4px 28px; + color: var(--ink); + text-decoration: none; +} +li a:hover { + background: var(--btn-h); +} +li a.active { + background: var(--row-sel); + border-left: 3px solid var(--focus); + padding-left: 25px; + font-weight: 600; +} +.note { + margin: 8px 12px; + color: var(--quiet); + font-size: 12px; +} +.note.err { + color: var(--err); +} +.content { + flex: 1; + min-width: 0; + overflow: auto; + padding: 16px; +} +@media (max-width: 900px) { + .burger { + display: inline-block; + } + .user { + display: none; + } + .side { + display: none; + position: absolute; + top: 38px; + bottom: 0; + z-index: 30; + box-shadow: var(--shadow-pop); + } + .side.open { + display: block; + } +} diff --git a/apps/web/src/app/layout/main-layout.html b/apps/web/src/app/layout/main-layout.html new file mode 100644 index 0000000..85b2ef7 --- /dev/null +++ b/apps/web/src/app/layout/main-layout.html @@ -0,0 +1,46 @@ +