@devjuliovilla/jv-ui 1.5.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devjuliovilla-jv-ui.mjs","sources":["../../../projects/jv-ui/src/lib/components/jv-icon/jv-icon-registry.ts","../../../projects/jv-ui/src/lib/components/jv-icon/jv-icon.component.ts","../../../projects/jv-ui/src/lib/components/buttons/jv-button.component.ts","../../../projects/jv-ui/src/lib/components/buttons/jv-button-group.component.ts","../../../projects/jv-ui/src/lib/components/buttons/jv-icon-button.component.ts","../../../projects/jv-ui/src/lib/components/feedback/jv-alert.component.ts","../../../projects/jv-ui/src/lib/components/containers/jv-card.component.ts","../../../projects/jv-ui/src/lib/components/forms/jv-form-container.component.ts","../../../projects/jv-ui/src/lib/components/forms/jv-input.component.ts","../../../projects/jv-ui/src/lib/components/containers/jv-section.component.ts","../../../projects/jv-ui/src/lib/components/auth-pages/jv-change-password-page.component.ts","../../../projects/jv-ui/src/lib/components/auth-pages/jv-forgot-password-page.component.ts","../../../projects/jv-ui/src/lib/components/forms/jv-checkbox.component.ts","../../../projects/jv-ui/src/lib/components/auth-pages/jv-login-page.component.ts","../../../projects/jv-ui/src/lib/components/containers/jv-divider.component.ts","../../../projects/jv-ui/src/lib/components/feedback/jv-badge.component.ts","../../../projects/jv-ui/src/lib/services/jv-loader.service.ts","../../../projects/jv-ui/src/lib/components/feedback/jv-loader.component.ts","../../../projects/jv-ui/src/lib/services/jv-announcement.service.ts","../../../projects/jv-ui/src/lib/config/jv-ui-config.ts","../../../projects/jv-ui/src/lib/services/jv-theme.service.ts","../../../projects/jv-ui/src/lib/i18n/es.ts","../../../projects/jv-ui/src/lib/i18n/en.ts","../../../projects/jv-ui/src/lib/i18n/index.ts","../../../projects/jv-ui/src/lib/services/jv-translation.service.ts","../../../projects/jv-ui/src/lib/config/provide-jv-ui.ts","../../../projects/jv-ui/src/lib/services/jv-ui-config.service.ts","../../../projects/jv-ui/src/lib/services/jv-toast.service.ts","../../../projects/jv-ui/src/lib/components/feedback/jv-toast.component.ts","../../../projects/jv-ui/src/lib/components/forms/jv-radio.component.ts","../../../projects/jv-ui/src/lib/components/forms/jv-select.component.ts","../../../projects/jv-ui/src/lib/components/forms/jv-switch.component.ts","../../../projects/jv-ui/src/lib/services/jv-dialog.service.ts","../../../projects/jv-ui/src/lib/components/dialogs/jv-dialog.component.ts","../../../projects/jv-ui/src/lib/components/dialogs/jv-confirm-dialog.component.ts","../../../projects/jv-ui/src/lib/layout/jv-breadcrumb.component.ts","../../../projects/jv-ui/src/lib/layout/jv-sidebar.component.ts","../../../projects/jv-ui/src/lib/layout/jv-topbar.component.ts","../../../projects/jv-ui/src/lib/layout/jv-dashboard-shell.component.ts","../../../projects/jv-ui/src/lib/layout/jv-page.component.ts","../../../projects/jv-ui/src/lib/components/grid/jv-grid.models.ts","../../../projects/jv-ui/src/lib/components/grid/jv-grid.component.ts","../../../projects/jv-ui/src/devjuliovilla-jv-ui.ts"],"sourcesContent":["export interface JvIconDefinition {\r\n viewBox: string;\r\n paths: string[];\r\n}\r\n\r\nexport const JV_FALLBACK_ICON_NAME = 'circle-alert';\r\n\r\nexport const JV_LUCIDE_ICON_REGISTRY: Record<string, JvIconDefinition> = {\r\n bell: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M10.268 21a2 2 0 0 0 3.464 0', 'M3.262 15.326A2 2 0 0 0 4 16.95h16a2 2 0 0 0 .74-1.624C19.41 13.44 18 11.116 18 8A6 6 0 0 0 6 8c0 3.116-1.41 5.44-2.738 7.326'],\r\n },\r\n check: {\n viewBox: '0 0 24 24',\n paths: ['M20 6 9 17l-5-5'],\n },\n 'chevron-down': {\n viewBox: '0 0 24 24',\n paths: ['m6 9 6 6 6-6'],\n },\n 'chevron-up': {\n viewBox: '0 0 24 24',\n paths: ['m18 15-6-6-6 6'],\n },\n 'circle-alert': {\r\n viewBox: '0 0 24 24',\r\n paths: ['M12 8v4', 'M12 16h.01', 'M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Z'],\r\n },\r\n info: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M12 8h.01', 'M11 12h1v4h1', 'M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Z'],\r\n },\r\n menu: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M4 12h16', 'M4 6h16', 'M4 18h16'],\r\n },\r\n monitor: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M12 17v4', 'M8 21h8', 'M5 3h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z'],\r\n },\r\n moon: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'],\r\n },\r\n 'panel-left-close': {\r\n viewBox: '0 0 24 24',\r\n paths: ['M16 3H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8', 'M10 9l-3 3 3 3', 'M22 3v18'],\r\n },\r\n search: {\r\n viewBox: '0 0 24 24',\r\n paths: ['m21 21-4.34-4.34', 'M11 19a8 8 0 1 1 0-16 8 8 0 0 1 0 16Z'],\r\n },\r\n settings: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M12.22 2h-.44a2 2 0 0 0-1.94 1.52l-.19.8a2 2 0 0 1-1.34 1.42l-.76.26a2 2 0 0 1-1.87-.24l-.7-.43a2 2 0 0 0-2.55.3l-.31.31a2 2 0 0 0-.3 2.55l.43.7a2 2 0 0 1 .24 1.87l-.26.76a2 2 0 0 1-1.42 1.34l-.8.19A2 2 0 0 0 2 11.78v.44a2 2 0 0 0 1.52 1.94l.8.19a2 2 0 0 1 1.42 1.34l.26.76a2 2 0 0 1-.24 1.87l-.43.7a2 2 0 0 0 .3 2.55l.31.31a2 2 0 0 0 2.55.3l.7-.43a2 2 0 0 1 1.87-.24l.76.26a2 2 0 0 1 1.34 1.42l.19.8A2 2 0 0 0 11.78 22h.44a2 2 0 0 0 1.94-1.52l.19-.8a2 2 0 0 1 1.34-1.42l.76-.26a2 2 0 0 1 1.87.24l.7.43a2 2 0 0 0 2.55-.3l.31-.31a2 2 0 0 0 .3-2.55l-.43-.7a2 2 0 0 1-.24-1.87l.26-.76a2 2 0 0 1 1.42-1.34l.8-.19A2 2 0 0 0 22 12.22v-.44a2 2 0 0 0-1.52-1.94l-.8-.19a2 2 0 0 1-1.42-1.34l-.26-.76a2 2 0 0 1 .24-1.87l.43-.7a2 2 0 0 0-.3-2.55l-.31-.31a2 2 0 0 0-2.55-.3l-.7.43a2 2 0 0 1-1.87.24l-.76-.26a2 2 0 0 1-1.34-1.42l-.19-.8A2 2 0 0 0 12.22 2Z', 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z'],\r\n },\r\n sun: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M12 2v2', 'M12 20v2', 'm4.93 4.93 1.41 1.41', 'm17.66 17.66-1.41-1.41', 'M2 12h2', 'M20 12h2', 'm6.34 17.66-1.41-1.41', 'm19.07 4.93-1.41 1.41', 'M12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10Z'],\r\n },\r\n sparkles: {\r\n viewBox: '0 0 24 24',\r\n paths: ['m12 3-1.9 5.1L5 10l5.1 1.9L12 17l1.9-5.1L19 10l-5.1-1.9L12 3Z', 'M5 3v4', 'M19 17v4', 'M3 5h4', 'M17 19h4'],\r\n },\r\n 'triangle-alert': {\r\n viewBox: '0 0 24 24',\r\n paths: ['m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3', 'M12 9v4', 'M12 17h.01'],\r\n },\r\n user: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M19 21a7 7 0 0 0-14 0', 'M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Z'],\r\n },\r\n x: {\r\n viewBox: '0 0 24 24',\r\n paths: ['M18 6 6 18', 'M6 6l12 12'],\r\n },\r\n};\r\n","import { Component, computed, input } from '@angular/core';\n\nimport { JV_FALLBACK_ICON_NAME, JV_LUCIDE_ICON_REGISTRY } from './jv-icon-registry';\n\n@Component({\n selector: 'jv-icon',\n standalone: true,\n template: `\n <svg\n class=\"jv-icon\"\n [attr.viewBox]=\"iconDefinition().viewBox\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.role]=\"decorative() ? 'presentation' : 'img'\"\n [attr.aria-hidden]=\"decorative() ? 'true' : null\"\n [attr.aria-label]=\"decorative() ? null : ariaLabel() || normalizedName()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n @for (path of iconDefinition().paths; track path) {\n <path [attr.d]=\"path\" />\n }\n </svg>\n `,\n})\nexport class JvIconComponent {\n private readonly warnedNames = new Set<string>();\n\n readonly name = input.required<string>();\n readonly size = input(18);\n readonly strokeWidth = input(2);\n readonly decorative = input(true);\n readonly ariaLabel = input<string>();\n\n protected readonly normalizedName = computed(() => this.name().trim().toLowerCase());\n\n protected readonly iconDefinition = computed(() => {\n const icon = JV_LUCIDE_ICON_REGISTRY[this.normalizedName()];\n if (icon) {\n return icon;\n }\n\n if (!this.warnedNames.has(this.normalizedName())) {\n this.warnedNames.add(this.normalizedName());\n console.warn(`[jv-icon] Icon not found: ${this.normalizedName()}`);\n }\n\n return JV_LUCIDE_ICON_REGISTRY[JV_FALLBACK_ICON_NAME];\n });\n}\n","import { Component, computed, input } from '@angular/core';\r\n\r\nimport { JvIconComponent } from '../jv-icon/jv-icon.component';\r\nimport { JvIntent } from '../core/core-component.models';\r\n\r\n@Component({\r\n selector: 'jv-button',\r\n standalone: true,\r\n imports: [JvIconComponent],\r\n template: `\r\n <button\r\n type=\"button\"\r\n class=\"jv-button\"\r\n [class]=\"buttonClass()\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [disabled]=\"disabled() || loading()\"\r\n >\r\n @if (loading()) {\r\n <span class=\"jv-button-spinner\" aria-hidden=\"true\"></span>\r\n }\r\n\r\n <span class=\"jv-button-content\" [class.is-hidden]=\"loading()\">\r\n @if (icon() && iconPosition() === 'start') {\r\n <jv-icon [name]=\"icon()!\" [size]=\"18\" />\r\n }\r\n\r\n <span class=\"jv-button-label\"><ng-content></ng-content></span>\r\n\r\n @if (icon() && iconPosition() === 'end') {\r\n <jv-icon [name]=\"icon()!\" [size]=\"18\" />\r\n }\r\n </span>\r\n </button>\r\n `,\r\n styles: `\r\n .jv-button {\r\n position: relative;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: var(--jv-density-control-height);\r\n padding: 0 var(--jv-spacing-md);\r\n border: 1px solid transparent;\r\n border-radius: var(--jv-radius-md);\r\n font-weight: 600;\r\n transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease, box-shadow 160ms ease;\r\n cursor: pointer;\r\n }\r\n\r\n .jv-button:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n\r\n .jv-button-content {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .jv-button-content.is-hidden {\r\n visibility: hidden;\r\n }\r\n\r\n .jv-button-spinner {\r\n position: absolute;\r\n width: 1rem;\r\n height: 1rem;\r\n border: 2px solid currentColor;\r\n border-right-color: transparent;\r\n border-radius: 999px;\r\n animation: jv-spin 0.8s linear infinite;\r\n }\r\n\r\n .jv-button--primary {\r\n background: var(--jv-color-primary);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-button--secondary {\r\n background: var(--jv-color-secondary);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-button--outline {\r\n border-color: var(--jv-color-border);\r\n background: var(--jv-color-surface);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-button--ghost {\r\n background: transparent;\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-button--danger {\r\n background: var(--jv-color-danger);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-button--success {\r\n background: var(--jv-color-success);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-button--warning {\r\n background: var(--jv-color-warning);\r\n color: #111827;\r\n }\r\n\r\n .jv-button--link {\r\n min-height: auto;\r\n padding: 0;\r\n background: transparent;\r\n color: var(--jv-color-primary);\r\n text-decoration: underline;\r\n text-underline-offset: 0.2em;\r\n }\r\n\r\n .jv-button--outline:hover,\r\n .jv-button--ghost:hover {\r\n background: var(--jv-color-surface-muted);\r\n }\r\n\r\n .jv-button--primary:hover,\r\n .jv-button--secondary:hover,\r\n .jv-button--danger:hover,\r\n .jv-button--success:hover,\r\n .jv-button--warning:hover {\r\n filter: brightness(0.96);\r\n }\r\n\r\n @keyframes jv-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n `,\r\n})\r\nexport class JvButtonComponent {\r\n readonly variant = input<JvIntent>('primary');\r\n readonly icon = input<string | null>(null);\r\n readonly iconPosition = input<'start' | 'end'>('start');\r\n readonly loading = input(false);\r\n readonly disabled = input(false);\r\n\r\n protected readonly buttonClass = computed(() => `jv-button--${this.variant()}`);\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'jv-button-group',\r\n standalone: true,\r\n template: `<div class=\"jv-button-group\" role=\"group\"><ng-content></ng-content></div>`,\r\n styles: `\r\n .jv-button-group {\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n gap: var(--jv-spacing-sm);\r\n align-items: center;\r\n }\r\n `,\r\n})\r\nexport class JvButtonGroupComponent {}\r\n","import { Component, input } from '@angular/core';\r\n\r\nimport { JvIconComponent } from '../jv-icon/jv-icon.component';\r\nimport { JvIntent } from '../core/core-component.models';\r\n\r\n@Component({\r\n selector: 'jv-icon-button',\r\n standalone: true,\r\n imports: [JvIconComponent],\r\n template: `\r\n <button\r\n type=\"button\"\r\n class=\"jv-icon-button\"\r\n [class]=\"'jv-icon-button--' + variant()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <jv-icon [name]=\"icon()\" [size]=\"18\" />\r\n </button>\r\n `,\r\n styles: `\r\n .jv-icon-button {\r\n display: inline-grid;\r\n place-items: center;\r\n width: var(--jv-density-control-height);\r\n height: var(--jv-density-control-height);\r\n border: 1px solid transparent;\r\n border-radius: 999px;\r\n cursor: pointer;\r\n transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease;\r\n }\r\n\r\n .jv-icon-button:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n\r\n .jv-icon-button--primary {\r\n background: var(--jv-color-primary);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-icon-button--secondary {\r\n background: var(--jv-color-secondary);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-icon-button--outline {\r\n border-color: var(--jv-color-border);\r\n background: var(--jv-color-surface);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-icon-button--ghost,\r\n .jv-icon-button--link {\r\n background: transparent;\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-icon-button--danger {\r\n background: var(--jv-color-danger);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-icon-button--success {\r\n background: var(--jv-color-success);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-icon-button--warning {\r\n background: var(--jv-color-warning);\r\n color: #111827;\r\n }\r\n\r\n .jv-icon-button--outline:hover,\r\n .jv-icon-button--ghost:hover,\r\n .jv-icon-button--link:hover {\r\n background: var(--jv-color-surface-muted);\r\n }\r\n `,\r\n})\r\nexport class JvIconButtonComponent {\r\n readonly icon = input.required<string>();\r\n readonly ariaLabel = input.required<string>();\r\n readonly variant = input<JvIntent>('ghost');\r\n readonly disabled = input(false);\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\n\r\nimport { JvIconComponent } from '../jv-icon/jv-icon.component';\r\nimport { JvTone } from '../core/core-component.models';\r\n\r\n@Component({\r\n selector: 'jv-alert',\r\n standalone: true,\r\n imports: [JvIconComponent],\r\n template: `\r\n <div class=\"jv-alert\" [class]=\"alertClass()\" [attr.role]=\"role()\">\r\n <div class=\"jv-alert-icon\">\r\n <jv-icon [name]=\"iconName()\" [size]=\"18\" />\r\n </div>\r\n <div class=\"jv-alert-content\">\r\n @if (title()) {\r\n <strong>{{ title() }}</strong>\r\n }\r\n <div><ng-content></ng-content></div>\r\n </div>\r\n </div>\r\n `,\r\n styles: `\r\n .jv-alert {\r\n display: grid;\r\n grid-template-columns: auto 1fr;\r\n gap: var(--jv-spacing-sm);\r\n padding: var(--jv-spacing-md);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-md);\r\n }\r\n\r\n .jv-alert-content {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n .jv-alert--primary {\r\n background: color-mix(in srgb, var(--jv-color-primary) 10%, var(--jv-color-surface));\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-alert--secondary,\r\n .jv-alert--neutral {\r\n background: var(--jv-color-surface-muted);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-alert--success {\r\n background: color-mix(in srgb, var(--jv-color-success) 12%, var(--jv-color-surface));\r\n }\r\n\r\n .jv-alert--warning {\r\n background: color-mix(in srgb, var(--jv-color-warning) 16%, var(--jv-color-surface));\r\n }\r\n\r\n .jv-alert--danger {\r\n background: color-mix(in srgb, var(--jv-color-danger) 12%, var(--jv-color-surface));\r\n }\r\n\r\n .jv-alert--info {\r\n background: color-mix(in srgb, var(--jv-color-info) 12%, var(--jv-color-surface));\r\n }\r\n\r\n strong {\r\n font-size: 0.95rem;\r\n }\r\n `,\r\n})\r\nexport class JvAlertComponent {\r\n readonly tone = input<JvTone>('info');\r\n readonly title = input('');\r\n readonly role = input<'status' | 'alert'>('status');\r\n\r\n protected readonly alertClass = computed(() => `jv-alert--${this.tone()}`);\r\n\r\n protected readonly iconName = computed(() => {\r\n switch (this.tone()) {\r\n case 'success':\r\n return 'check';\r\n case 'warning':\r\n return 'triangle-alert';\r\n case 'danger':\r\n return 'circle-alert';\r\n case 'primary':\r\n return 'sparkles';\r\n case 'secondary':\r\n case 'neutral':\r\n return 'info';\r\n default:\r\n return 'info';\r\n }\r\n });\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'jv-card',\r\n standalone: true,\r\n template: `\r\n <article class=\"jv-card\" [class]=\"elevated() ? 'jv-card--elevated' : 'jv-card--flat'\">\r\n <ng-content></ng-content>\r\n </article>\r\n `,\r\n styles: `\r\n .jv-card {\r\n padding: var(--jv-spacing-lg);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-lg);\r\n background: var(--jv-color-surface);\r\n }\r\n\r\n .jv-card--elevated {\r\n box-shadow: var(--jv-shadow-md);\r\n }\r\n `,\r\n})\r\nexport class JvCardComponent {\r\n readonly elevated = input(true);\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'jv-form-container',\r\n standalone: true,\r\n template: `\r\n <div class=\"jv-form-container\" [class.is-invalid]=\"invalid()\">\r\n @if (label()) {\r\n <label class=\"jv-form-label\" [attr.for]=\"inputId() || null\">\r\n <span>{{ label() }}</span>\r\n @if (required()) {\r\n <span class=\"required-indicator\" aria-hidden=\"true\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <ng-content></ng-content>\r\n\r\n @if (hint() && !invalid()) {\r\n <p class=\"jv-form-hint\" [id]=\"resolvedHintId() || null\">{{ hint() }}</p>\r\n }\r\n\r\n @if (error() && invalid()) {\r\n <p class=\"jv-form-error\" [id]=\"resolvedErrorId() || null\" role=\"alert\" aria-live=\"assertive\">{{ error() }}</p>\r\n }\r\n </div>\r\n `,\r\n styles: `\r\n .jv-form-container {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n .jv-form-label {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.35rem;\r\n font-weight: 600;\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .required-indicator,\r\n .jv-form-error {\r\n color: var(--jv-color-danger);\r\n }\r\n\r\n .jv-form-hint,\r\n .jv-form-error {\r\n margin: 0;\r\n font-size: 0.875rem;\r\n }\r\n\r\n .jv-form-hint {\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n `,\r\n})\r\nexport class JvFormContainerComponent {\r\n readonly label = input('');\r\n readonly hint = input('');\r\n readonly error = input('');\r\n readonly inputId = input('');\r\n readonly hintId = input('');\r\n readonly errorId = input('');\r\n readonly required = input(false);\r\n readonly invalid = input(false);\r\n\r\n protected readonly resolvedHintId = computed(() => this.hintId() || (this.inputId() ? `${this.inputId()}-hint` : ''));\r\n protected readonly resolvedErrorId = computed(() => this.errorId() || (this.inputId() ? `${this.inputId()}-error` : ''));\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nlet inputIdSequence = 0;\r\n\r\n@Component({\r\n selector: 'jv-input',\r\n standalone: true,\r\n imports: [CommonModule],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JvInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n template: `\r\n <input\r\n class=\"jv-input\"\r\n [class.is-invalid]=\"invalid()\"\r\n [id]=\"inputId()\"\r\n [type]=\"type()\"\r\n [value]=\"value\"\r\n [placeholder]=\"placeholder()\"\r\n [required]=\"required()\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\r\n [attr.aria-describedby]=\"describedBy() || null\"\r\n (input)=\"handleInput($event)\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n `,\r\n styles: `\r\n .jv-input {\r\n width: 100%;\r\n min-height: var(--jv-density-control-height);\r\n padding: 0 var(--jv-spacing-md);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-md);\r\n background: var(--jv-color-surface);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-input::placeholder {\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n\r\n .jv-input.is-invalid {\r\n border-color: var(--jv-color-danger);\r\n }\r\n\r\n .jv-input:disabled {\r\n opacity: 0.7;\r\n cursor: not-allowed;\r\n }\r\n `,\r\n})\r\nexport class JvInputComponent implements ControlValueAccessor {\r\n readonly type = input<'text' | 'email' | 'password' | 'search' | 'number'>('text');\r\n readonly placeholder = input('');\r\n readonly required = input(false);\r\n readonly invalid = input(false);\r\n readonly describedBy = input('');\r\n readonly inputId = input(`jv-input-${++inputIdSequence}`);\r\n\r\n value = '';\r\n disabled = false;\r\n private onChange: (value: string) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n writeValue(value: string | null): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n handleInput(event: Event) {\r\n const nextValue = (event.target as HTMLInputElement).value;\r\n this.value = nextValue;\r\n this.onChange(nextValue);\r\n }\r\n\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'jv-section',\r\n standalone: true,\r\n template: `\r\n <section class=\"jv-section\">\r\n @if (title() || description()) {\r\n <header class=\"jv-section-header\">\r\n @if (title()) {\r\n <h2>{{ title() }}</h2>\r\n }\r\n @if (description()) {\r\n <p>{{ description() }}</p>\r\n }\r\n </header>\r\n }\r\n <div class=\"jv-section-content\"><ng-content></ng-content></div>\r\n </section>\r\n `,\r\n styles: `\r\n .jv-section {\r\n display: grid;\r\n gap: var(--jv-spacing-md);\r\n }\r\n\r\n .jv-section-header {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n h2,\r\n p {\r\n margin: 0;\r\n }\r\n\r\n p {\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n `,\r\n})\r\nexport class JvSectionComponent {\r\n readonly title = input('');\r\n readonly description = input('');\r\n}\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\r\n\r\nimport { JvAlertComponent } from '../feedback/jv-alert.component';\r\nimport { JvButtonComponent } from '../buttons/jv-button.component';\r\nimport { JvCardComponent } from '../containers/jv-card.component';\r\nimport { JvFormContainerComponent } from '../forms/jv-form-container.component';\r\nimport { JvInputComponent } from '../forms/jv-input.component';\r\nimport { JvSectionComponent } from '../containers/jv-section.component';\r\nimport { JvChangePasswordSubmitEvent } from './jv-auth-page.models';\r\n\r\nfunction passwordMatchValidator(control: AbstractControl): ValidationErrors | null {\r\n const newPassword = control.get('newPassword')?.value;\r\n const confirmPassword = control.get('confirmPassword')?.value;\r\n\r\n if (!newPassword || !confirmPassword) {\r\n return null;\r\n }\r\n\r\n return newPassword === confirmPassword ? null : { passwordMismatch: true };\r\n}\r\n\r\n@Component({\r\n selector: 'jv-change-password-page',\r\n standalone: true,\r\n imports: [ReactiveFormsModule, JvAlertComponent, JvButtonComponent, JvCardComponent, JvFormContainerComponent, JvInputComponent, JvSectionComponent],\r\n template: `\r\n <jv-card>\r\n <jv-section [title]=\"title()\" [description]=\"description()\">\r\n @if (error()) {\r\n <jv-alert tone=\"danger\" title=\"Password change error\" role=\"alert\">{{ error() }}</jv-alert>\r\n }\r\n\r\n <form class=\"auth-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <jv-form-container label=\"Current password\" inputId=\"jv-current-password\" error=\"Current password is required\" [required]=\"true\" [invalid]=\"currentInvalid()\">\r\n <jv-input inputId=\"jv-current-password\" type=\"password\" formControlName=\"currentPassword\" [invalid]=\"currentInvalid()\" />\r\n </jv-form-container>\r\n\r\n <jv-form-container label=\"New password\" inputId=\"jv-new-password\" error=\"New password is required\" [required]=\"true\" [invalid]=\"newInvalid()\">\r\n <jv-input inputId=\"jv-new-password\" type=\"password\" formControlName=\"newPassword\" [invalid]=\"newInvalid()\" />\r\n </jv-form-container>\r\n\r\n <jv-form-container label=\"Confirm new password\" inputId=\"jv-confirm-password\" error=\"Passwords must match\" [required]=\"true\" [invalid]=\"confirmInvalid()\">\r\n <jv-input inputId=\"jv-confirm-password\" type=\"password\" formControlName=\"confirmPassword\" [invalid]=\"confirmInvalid()\" />\r\n </jv-form-container>\r\n\r\n <div class=\"auth-actions\">\r\n <jv-button variant=\"outline\" (click)=\"cancel.emit()\">{{ cancelLabel() }}</jv-button>\r\n <jv-button variant=\"primary\" icon=\"check\" [loading]=\"loading()\">{{ submitLabel() }}</jv-button>\r\n </div>\r\n </form>\r\n </jv-section>\r\n </jv-card>\r\n `,\r\n styles: `\r\n .auth-form {\r\n display: grid;\r\n gap: var(--jv-spacing-md);\r\n }\r\n\r\n .auth-actions {\r\n display: flex;\r\n gap: var(--jv-spacing-sm);\r\n flex-wrap: wrap;\r\n }\r\n `,\r\n})\r\nexport class JvChangePasswordPageComponent {\r\n private readonly formBuilder = inject(FormBuilder);\r\n\r\n readonly title = input('Change password');\r\n readonly description = input('Update your password and keep your account secure.');\r\n readonly submitLabel = input('Update password');\r\n readonly cancelLabel = input('Cancel');\r\n readonly loading = input(false);\r\n readonly error = input('');\r\n\r\n readonly changePasswordSubmit = output<JvChangePasswordSubmitEvent>();\r\n readonly cancel = output<void>();\r\n\r\n protected readonly form = this.formBuilder.group(\r\n {\r\n currentPassword: ['', Validators.required],\r\n newPassword: ['', Validators.required],\r\n confirmPassword: ['', Validators.required],\r\n },\r\n { validators: passwordMatchValidator },\r\n );\r\n\r\n protected readonly currentInvalid = computed(() => {\r\n const control = this.form.controls.currentPassword;\r\n return control.invalid && (control.touched || control.dirty);\r\n });\r\n\r\n protected readonly newInvalid = computed(() => {\r\n const control = this.form.controls.newPassword;\r\n return control.invalid && (control.touched || control.dirty);\r\n });\r\n\r\n protected readonly confirmInvalid = computed(() => {\r\n const control = this.form.controls.confirmPassword;\r\n return (control.invalid && (control.touched || control.dirty)) || ((control.touched || control.dirty) && this.form.hasError('passwordMismatch'));\r\n });\r\n\r\n protected submit() {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.changePasswordSubmit.emit(this.form.getRawValue() as JvChangePasswordSubmitEvent);\r\n }\r\n}\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\n\r\nimport { JvAlertComponent } from '../feedback/jv-alert.component';\r\nimport { JvButtonComponent } from '../buttons/jv-button.component';\r\nimport { JvCardComponent } from '../containers/jv-card.component';\r\nimport { JvFormContainerComponent } from '../forms/jv-form-container.component';\r\nimport { JvInputComponent } from '../forms/jv-input.component';\r\nimport { JvSectionComponent } from '../containers/jv-section.component';\r\nimport { JvForgotPasswordSubmitEvent } from './jv-auth-page.models';\r\n\r\n@Component({\r\n selector: 'jv-forgot-password-page',\r\n standalone: true,\r\n imports: [ReactiveFormsModule, JvAlertComponent, JvButtonComponent, JvCardComponent, JvFormContainerComponent, JvInputComponent, JvSectionComponent],\r\n template: `\r\n <jv-card>\r\n <jv-section [title]=\"title()\" [description]=\"description()\">\r\n @if (error()) {\r\n <jv-alert tone=\"danger\" title=\"Reset error\" role=\"alert\">{{ error() }}</jv-alert>\r\n }\r\n\r\n <form class=\"auth-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <jv-form-container label=\"Email\" inputId=\"jv-forgot-email\" error=\"Enter a valid email\" [required]=\"true\" [invalid]=\"emailInvalid()\">\r\n <jv-input inputId=\"jv-forgot-email\" type=\"email\" formControlName=\"email\" [invalid]=\"emailInvalid()\" placeholder=\"you@example.com\" />\r\n </jv-form-container>\r\n\r\n <div class=\"auth-actions\">\r\n <jv-button variant=\"outline\" (click)=\"backToLogin.emit()\">{{ backLabel() }}</jv-button>\r\n <jv-button variant=\"primary\" icon=\"check\" [loading]=\"loading()\">{{ submitLabel() }}</jv-button>\r\n </div>\r\n </form>\r\n </jv-section>\r\n </jv-card>\r\n `,\r\n styles: `\r\n .auth-form {\r\n display: grid;\r\n gap: var(--jv-spacing-md);\r\n }\r\n\r\n .auth-actions {\r\n display: flex;\r\n gap: var(--jv-spacing-sm);\r\n flex-wrap: wrap;\r\n }\r\n `,\r\n})\r\nexport class JvForgotPasswordPageComponent {\r\n private readonly formBuilder = inject(FormBuilder);\r\n\r\n readonly title = input('Reset your password');\r\n readonly description = input('We will send reset instructions to your email address.');\r\n readonly submitLabel = input('Send reset link');\r\n readonly backLabel = input('Back to login');\r\n readonly loading = input(false);\r\n readonly error = input('');\r\n\r\n readonly forgotPasswordSubmit = output<JvForgotPasswordSubmitEvent>();\r\n readonly backToLogin = output<void>();\r\n\r\n protected readonly form = this.formBuilder.group({\r\n email: ['', [Validators.required, Validators.email]],\r\n });\r\n\r\n protected readonly emailInvalid = computed(() => {\r\n const control = this.form.controls.email;\r\n return control.invalid && (control.touched || control.dirty);\r\n });\r\n\r\n protected submit() {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.forgotPasswordSubmit.emit(this.form.getRawValue() as JvForgotPasswordSubmitEvent);\r\n }\r\n}\r\n","import { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nlet checkboxIdSequence = 0;\r\n\r\n@Component({\r\n selector: 'jv-checkbox',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JvCheckboxComponent),\r\n multi: true,\r\n },\r\n ],\r\n template: `\r\n <label class=\"jv-checkbox\" [class.is-disabled]=\"disabled\">\r\n <input\r\n type=\"checkbox\"\r\n [id]=\"inputId()\"\r\n [checked]=\"value\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-describedby]=\"describedBy() || null\"\r\n (change)=\"handleChange($event)\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n <span>{{ label() }}</span>\r\n </label>\r\n `,\r\n styles: `\r\n .jv-checkbox {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n min-height: var(--jv-density-control-height);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-checkbox.is-disabled {\r\n opacity: 0.7;\r\n }\r\n `,\r\n})\r\nexport class JvCheckboxComponent implements ControlValueAccessor {\r\n readonly label = input('');\r\n readonly describedBy = input('');\r\n readonly inputId = input(`jv-checkbox-${++checkboxIdSequence}`);\r\n\r\n value = false;\r\n disabled = false;\r\n private onChange: (value: boolean) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n writeValue(value: boolean | null): void {\r\n this.value = value ?? false;\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n handleChange(event: Event) {\r\n const nextValue = (event.target as HTMLInputElement).checked;\r\n this.value = nextValue;\r\n this.onChange(nextValue);\r\n }\r\n\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n}\r\n","import { Component, computed, input, output, inject } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\n\r\nimport { JvAlertComponent } from '../feedback/jv-alert.component';\r\nimport { JvButtonComponent } from '../buttons/jv-button.component';\r\nimport { JvCardComponent } from '../containers/jv-card.component';\r\nimport { JvCheckboxComponent } from '../forms/jv-checkbox.component';\r\nimport { JvFormContainerComponent } from '../forms/jv-form-container.component';\r\nimport { JvInputComponent } from '../forms/jv-input.component';\r\nimport { JvSectionComponent } from '../containers/jv-section.component';\r\nimport { JvLoginSubmitEvent } from './jv-auth-page.models';\r\n\r\n@Component({\r\n selector: 'jv-login-page',\r\n standalone: true,\r\n imports: [ReactiveFormsModule, JvAlertComponent, JvButtonComponent, JvCardComponent, JvCheckboxComponent, JvFormContainerComponent, JvInputComponent, JvSectionComponent],\r\n template: `\r\n <jv-card>\r\n <jv-section [title]=\"title()\" [description]=\"description()\">\r\n @if (error()) {\r\n <jv-alert tone=\"danger\" title=\"Sign-in error\" role=\"alert\">{{ error() }}</jv-alert>\r\n }\r\n\r\n <form class=\"auth-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <jv-form-container label=\"Email or username\" inputId=\"jv-login-identifier\" error=\"This field is required\" [required]=\"true\" [invalid]=\"identifierInvalid()\">\r\n <jv-input inputId=\"jv-login-identifier\" formControlName=\"identifier\" [invalid]=\"identifierInvalid()\" placeholder=\"you@example.com\" />\r\n </jv-form-container>\r\n\r\n <jv-form-container label=\"Password\" inputId=\"jv-login-password\" error=\"Password is required\" [required]=\"true\" [invalid]=\"passwordInvalid()\">\r\n <jv-input inputId=\"jv-login-password\" type=\"password\" formControlName=\"password\" [invalid]=\"passwordInvalid()\" placeholder=\"Enter your password\" />\r\n </jv-form-container>\r\n\r\n <div class=\"auth-inline-row\">\r\n <jv-checkbox formControlName=\"rememberMe\" label=\"{{ rememberMeLabel() }}\" />\r\n <button type=\"button\" class=\"auth-link\" (click)=\"forgotPasswordClick.emit()\">{{ forgotPasswordLabel() }}</button>\r\n </div>\r\n\r\n <jv-button variant=\"primary\" icon=\"check\" [loading]=\"loading()\">{{ submitLabel() }}</jv-button>\r\n </form>\r\n </jv-section>\r\n </jv-card>\r\n `,\r\n styles: `\r\n .auth-form {\r\n display: grid;\r\n gap: var(--jv-spacing-md);\r\n }\r\n\r\n .auth-inline-row {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n gap: var(--jv-spacing-md);\r\n flex-wrap: wrap;\r\n }\r\n\r\n .auth-link {\r\n border: 0;\r\n padding: 0;\r\n background: transparent;\r\n color: var(--jv-color-primary);\r\n text-decoration: underline;\r\n text-underline-offset: 0.18em;\r\n }\r\n `,\r\n})\r\nexport class JvLoginPageComponent {\r\n private readonly formBuilder = inject(FormBuilder);\r\n\r\n readonly title = input('Welcome back');\r\n readonly description = input('Use your account credentials to continue.');\r\n readonly submitLabel = input('Sign in');\r\n readonly rememberMeLabel = input('Remember me');\r\n readonly forgotPasswordLabel = input('Forgot password?');\r\n readonly loading = input(false);\r\n readonly error = input('');\r\n\r\n readonly loginSubmit = output<JvLoginSubmitEvent>();\r\n readonly forgotPasswordClick = output<void>();\r\n\r\n protected readonly form = this.formBuilder.group({\r\n identifier: ['', Validators.required],\r\n password: ['', Validators.required],\r\n rememberMe: [false],\r\n });\r\n\r\n protected readonly identifierInvalid = computed(() => {\r\n const control = this.form.controls.identifier;\r\n return control.invalid && (control.touched || control.dirty);\r\n });\r\n\r\n protected readonly passwordInvalid = computed(() => {\r\n const control = this.form.controls.password;\r\n return control.invalid && (control.touched || control.dirty);\r\n });\r\n\r\n protected submit() {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.loginSubmit.emit(this.form.getRawValue() as JvLoginSubmitEvent);\r\n }\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'jv-divider',\r\n standalone: true,\r\n template: `\r\n <div\r\n class=\"jv-divider\"\r\n [class.jv-divider--vertical]=\"vertical()\"\r\n [attr.role]=\"'separator'\"\r\n [attr.aria-orientation]=\"vertical() ? 'vertical' : 'horizontal'\"\r\n ></div>\r\n `,\r\n styles: `\r\n .jv-divider {\r\n width: 100%;\r\n height: 1px;\r\n background: var(--jv-color-border);\r\n }\r\n\r\n .jv-divider--vertical {\r\n width: 1px;\r\n height: 100%;\r\n min-height: 1.5rem;\r\n }\r\n `,\r\n})\r\nexport class JvDividerComponent {\r\n readonly vertical = input(false);\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\n\r\nimport { JvTone } from '../core/core-component.models';\r\n\r\n@Component({\r\n selector: 'jv-badge',\r\n standalone: true,\r\n template: `<span class=\"jv-badge\" [class]=\"badgeClass()\"><ng-content></ng-content></span>`,\r\n styles: `\r\n .jv-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 1.75rem;\r\n padding: 0 var(--jv-spacing-sm);\r\n border-radius: 999px;\r\n font-size: 0.8rem;\r\n font-weight: 700;\r\n line-height: 1;\r\n white-space: nowrap;\r\n }\r\n\r\n .jv-badge--primary {\r\n background: color-mix(in srgb, var(--jv-color-primary) 14%, var(--jv-color-surface));\r\n color: var(--jv-color-primary);\r\n }\r\n\r\n .jv-badge--secondary,\r\n .jv-badge--neutral {\r\n background: var(--jv-color-surface-muted);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-badge--success {\r\n background: color-mix(in srgb, var(--jv-color-success) 16%, var(--jv-color-surface));\r\n color: var(--jv-color-success);\r\n }\r\n\r\n .jv-badge--warning {\r\n background: color-mix(in srgb, var(--jv-color-warning) 20%, var(--jv-color-surface));\r\n color: #8a4b00;\r\n }\r\n\r\n .jv-badge--danger {\r\n background: color-mix(in srgb, var(--jv-color-danger) 16%, var(--jv-color-surface));\r\n color: var(--jv-color-danger);\r\n }\r\n\r\n .jv-badge--info {\r\n background: color-mix(in srgb, var(--jv-color-info) 16%, var(--jv-color-surface));\r\n color: var(--jv-color-info);\r\n }\r\n `,\r\n})\r\nexport class JvBadgeComponent {\r\n readonly tone = input<JvTone>('primary');\r\n\r\n protected readonly badgeClass = computed(() => `jv-badge--${this.tone()}`);\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JvLoaderService {\r\n private readonly counter = signal(0);\r\n private readonly visible = signal(false);\r\n private readonly message = signal('Loading');\r\n private readonly delayMs = 300;\r\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n readonly activeCount = this.counter.asReadonly();\r\n readonly isVisible = this.visible.asReadonly();\r\n readonly liveMessage = this.message.asReadonly();\r\n\r\n show(message = 'Loading') {\r\n this.message.set(message);\r\n this.counter.update((count) => count + 1);\r\n\r\n if (this.counter() === 1) {\r\n this.scheduleVisibility();\r\n }\r\n }\r\n\r\n hide() {\r\n this.counter.update((count) => Math.max(0, count - 1));\r\n\r\n if (this.counter() === 0) {\r\n this.clearTimer();\r\n this.visible.set(false);\r\n }\r\n }\r\n\r\n private scheduleVisibility() {\r\n this.clearTimer();\r\n this.showTimeout = setTimeout(() => {\r\n if (this.counter() > 0) {\r\n this.visible.set(true);\r\n }\r\n this.showTimeout = null;\r\n }, this.delayMs);\r\n }\r\n\r\n private clearTimer() {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Component, HostListener, effect, inject } from '@angular/core';\r\n\r\nimport { JvLoaderService } from '../../services/jv-loader.service';\r\n\r\n@Component({\r\n selector: 'jv-loader',\r\n standalone: true,\r\n template: `\r\n @if (loaderService.isVisible()) {\r\n <div class=\"jv-loader-backdrop\" aria-live=\"polite\" aria-atomic=\"true\">\r\n <div class=\"jv-loader-panel\" role=\"status\">\r\n <span class=\"spinner\" aria-hidden=\"true\"></span>\r\n <span>{{ loaderService.liveMessage() }}</span>\r\n </div>\r\n </div>\r\n }\r\n `,\r\n styles: `\r\n .jv-loader-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 1050;\r\n display: grid;\r\n place-items: center;\r\n background: rgba(15, 23, 42, 0.18);\r\n backdrop-filter: blur(2px);\r\n }\r\n\r\n .jv-loader-panel {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n padding: var(--jv-spacing-md) var(--jv-spacing-lg);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-lg);\r\n background: var(--jv-color-surface);\r\n box-shadow: var(--jv-shadow-lg);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .spinner {\r\n width: 1rem;\r\n height: 1rem;\r\n border: 2px solid currentColor;\r\n border-right-color: transparent;\r\n border-radius: 999px;\r\n animation: jv-loader-spin 0.8s linear infinite;\r\n }\r\n\r\n @keyframes jv-loader-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n `,\r\n})\r\nexport class JvLoaderComponent {\r\n private readonly document = inject(DOCUMENT);\r\n protected readonly loaderService = inject(JvLoaderService);\r\n\r\n constructor() {\r\n effect(() => {\r\n const locked = this.loaderService.isVisible();\r\n const body = this.document.body;\r\n const root = this.document.documentElement;\r\n\r\n body.style.overflow = locked ? 'hidden' : '';\r\n root.style.overflow = locked ? 'hidden' : '';\r\n });\r\n }\r\n\r\n @HostListener('document:wheel', ['$event'])\r\n handleWheel(event: WheelEvent) {\r\n if (this.loaderService.isVisible()) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('document:touchmove', ['$event'])\r\n handleTouchMove(event: TouchEvent) {\r\n if (this.loaderService.isVisible()) {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class JvAnnouncementService {\n private readonly document = inject(DOCUMENT);\n private region: HTMLElement | null = null;\n\n announce(message: string, politeness: 'polite' | 'assertive' = 'polite') {\n if (!message.trim()) {\n return;\n }\n\n const region = this.ensureRegion(politeness);\n region.textContent = '';\n\n // Clear and reinsert so NVDA reliably reads repeated updates.\n setTimeout(() => {\n region.textContent = message;\n }, 20);\n }\n\n private ensureRegion(politeness: 'polite' | 'assertive') {\n if (!this.region) {\n const region = this.document.createElement('div');\n region.className = 'sr-only';\n region.setAttribute('role', politeness === 'assertive' ? 'alert' : 'status');\n region.setAttribute('aria-live', politeness);\n region.setAttribute('aria-atomic', 'true');\n this.document.body.appendChild(region);\n this.region = region;\n return region;\n }\n\n this.region.setAttribute('role', politeness === 'assertive' ? 'alert' : 'status');\n this.region.setAttribute('aria-live', politeness);\n return this.region;\n }\n}\n","export type JvTheme = 'light' | 'dark' | 'high-contrast';\r\n\r\nexport type JvDensity = 'compact' | 'normal' | 'comfortable';\r\n\r\nexport type JvToastPosition =\r\n | 'top-left'\r\n | 'top-center'\r\n | 'top-right'\r\n | 'bottom-left'\r\n | 'bottom-center'\r\n | 'bottom-right';\r\n\r\nexport interface JvUiConfig {\r\n theme: JvTheme;\r\n density: JvDensity;\r\n language: string;\r\n locale: string;\r\n toastPosition: JvToastPosition;\r\n}\r\n\r\nexport const JV_UI_DEFAULT_CONFIG: JvUiConfig = {\r\n theme: 'light',\r\n density: 'normal',\r\n language: 'es-MX',\r\n locale: 'es',\r\n toastPosition: 'bottom-right',\r\n};\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, signal, inject } from '@angular/core';\n\nimport { JvDensity, JvTheme } from '../config/jv-ui-config';\nimport { JvUiConfigService } from './jv-ui-config.service';\n\n@Injectable({ providedIn: 'root' })\nexport class JvThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly config = inject(JvUiConfigService);\n private readonly storageKey = 'jv-ui-theme';\n\n readonly theme = signal<JvTheme>(this.config.snapshot.theme);\n readonly density = signal<JvDensity>(this.config.snapshot.density);\n\n initialize() {\n const initialConfig = this.config.snapshot;\n const theme = this.resolveInitialTheme(initialConfig.theme);\n\n this.applyTheme(theme);\n this.applyDensity(initialConfig.density);\n this.applyLanguage(initialConfig.language);\n }\n\n setTheme(theme: JvTheme) {\n this.applyTheme(theme);\n\n try {\n this.document.defaultView?.localStorage.setItem(this.storageKey, theme);\n } catch {\n // Ignore storage failures in restricted environments.\n }\n }\n\n setDensity(density: JvDensity) {\n this.applyDensity(density);\n }\n\n private applyTheme(theme: JvTheme) {\n this.theme.set(theme);\n const root = this.document.documentElement;\n\n root.dataset['theme'] = theme;\n root.style.colorScheme = theme === 'dark' ? 'dark' : 'light';\n }\n\n private applyDensity(density: JvDensity) {\n this.density.set(density);\n this.document.documentElement.dataset['density'] = density;\n }\n\n private applyLanguage(language: string) {\n this.document.documentElement.lang = language;\n }\n\n private resolveInitialTheme(fallbackTheme: JvTheme): JvTheme {\n const savedTheme = this.readSavedTheme();\n if (savedTheme) {\n return savedTheme;\n }\n\n if (fallbackTheme === 'high-contrast') {\n return fallbackTheme;\n }\n\n return this.prefersDarkMode() ? 'dark' : fallbackTheme;\n }\n\n private readSavedTheme(): JvTheme | null {\n try {\n const saved = this.document.defaultView?.localStorage.getItem(this.storageKey);\n return this.isTheme(saved) ? saved : null;\n } catch {\n return null;\n }\n }\n\n private prefersDarkMode(): boolean {\n return this.document.defaultView?.matchMedia?.('(prefers-color-scheme: dark)').matches ?? false;\n }\n\n private isTheme(value: string | null | undefined): value is JvTheme {\n return value === 'light' || value === 'dark' || value === 'high-contrast';\n }\n}\n","export const ES: Record<string, string> = {\r\n 'grid.emptyMessage': 'No hay registros',\r\n 'grid.noResults': 'No se encontraron resultados',\r\n 'grid.searchPlaceholder': 'Buscar...',\r\n 'grid.loading': 'Cargando datos...',\r\n 'grid.pageOf': 'de',\r\n 'grid.itemsPerPage': 'Registros por página',\r\n 'grid.selected': 'seleccionados',\r\n 'grid.selectAll': 'Seleccionar todo',\r\n 'grid.deselectAll': 'Deseleccionar todo',\r\n 'grid.sortAsc': 'Orden ascendente',\r\n 'grid.sortDesc': 'Orden descendente',\r\n 'grid.sortNone': 'Sin orden',\r\n 'grid.pageFirst': 'Primera página',\r\n 'grid.pagePrev': 'Página anterior',\r\n 'grid.pageNext': 'Página siguiente',\r\n 'grid.pageLast': 'Última página',\r\n 'grid.pageOfTotal': 'Página {page} de {total}',\r\n 'grid.itemsTotal': '{total} registros',\r\n 'grid.itemsShowing': 'Mostrando {start}-{end} de {total}',\r\n};\r\n","export const EN: Record<string, string> = {\r\n 'grid.emptyMessage': 'No records found',\r\n 'grid.noResults': 'No results found',\r\n 'grid.searchPlaceholder': 'Search...',\r\n 'grid.loading': 'Loading data...',\r\n 'grid.pageOf': 'of',\r\n 'grid.itemsPerPage': 'Items per page',\r\n 'grid.selected': 'selected',\r\n 'grid.selectAll': 'Select all',\r\n 'grid.deselectAll': 'Deselect all',\r\n 'grid.sortAsc': 'Sort ascending',\r\n 'grid.sortDesc': 'Sort descending',\r\n 'grid.sortNone': 'No sort',\r\n 'grid.pageFirst': 'First page',\r\n 'grid.pagePrev': 'Previous page',\r\n 'grid.pageNext': 'Next page',\r\n 'grid.pageLast': 'Last page',\r\n 'grid.pageOfTotal': 'Page {page} of {total}',\r\n 'grid.itemsTotal': '{total} items',\r\n 'grid.itemsShowing': 'Showing {start}-{end} of {total}',\r\n};\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nimport { ES } from './es';\r\nimport { EN } from './en';\r\n\r\nexport type JvLocale = 'es' | 'en';\r\n\r\nexport const JV_LOCALE_DICTIONARIES: Record<JvLocale, Record<string, string>> = {\r\n es: ES,\r\n en: EN,\r\n};\r\n\r\nexport const JV_DEFAULT_LOCALE: JvLocale = 'es';\r\n\r\nexport { ES, EN };\r\n","import { Injectable, signal, inject } from '@angular/core';\r\n\r\nimport { JvUiConfigService } from './jv-ui-config.service';\r\nimport { JV_DEFAULT_LOCALE, JV_LOCALE_DICTIONARIES, JvLocale } from '../i18n';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JvTranslationService {\r\n private readonly config = inject(JvUiConfigService);\r\n\r\n readonly locale = signal<JvLocale>(this.config.snapshot.locale as JvLocale);\r\n\r\n initialize() {\r\n const locale = this.resolveLocale(this.config.snapshot.locale);\r\n this.locale.set(locale);\r\n }\r\n\r\n setLocale(locale: JvLocale) {\r\n this.locale.set(locale);\r\n }\r\n\r\n translate(key: string, params?: Record<string, string | number>): string {\r\n const dict = JV_LOCALE_DICTIONARIES[this.locale()] ?? JV_LOCALE_DICTIONARIES[JV_DEFAULT_LOCALE];\r\n let value = dict[key];\r\n\r\n if (value === undefined) {\r\n value = JV_LOCALE_DICTIONARIES[JV_DEFAULT_LOCALE][key] ?? key;\r\n }\r\n\r\n if (params) {\r\n for (const [k, v] of Object.entries(params)) {\r\n value = value.replace(`{${k}}`, String(v));\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private resolveLocale(locale: string): JvLocale {\r\n if (locale === 'es' || locale === 'en') return locale;\r\n return locale.startsWith('es') ? 'es' : 'en';\r\n }\r\n}\r\n","import { ENVIRONMENT_INITIALIZER, InjectionToken, makeEnvironmentProviders, Provider, inject } from '@angular/core';\r\n\r\nimport { JV_UI_DEFAULT_CONFIG, JvUiConfig } from './jv-ui-config';\r\nimport { JvThemeService } from '../services/jv-theme.service';\r\nimport { JvTranslationService } from '../services/jv-translation.service';\r\n\r\nexport const JV_UI_CONFIG = new InjectionToken<Partial<JvUiConfig>[]>('JV_UI_CONFIG');\r\n\r\nexport const JV_UI_CONFIG_DEFAULTS = new InjectionToken<JvUiConfig>('JV_UI_CONFIG_DEFAULTS', {\r\n providedIn: 'root',\r\n factory: () => JV_UI_DEFAULT_CONFIG,\r\n});\r\n\r\nexport function provideJvUi(config: Partial<JvUiConfig> = {}) {\r\n const configProvider: Provider = {\r\n provide: JV_UI_CONFIG,\r\n useValue: config,\r\n multi: true,\r\n };\r\n\r\n return makeEnvironmentProviders([\r\n configProvider,\r\n {\r\n provide: ENVIRONMENT_INITIALIZER,\r\n multi: true,\r\n useValue: () => {\r\n inject(JvThemeService).initialize();\r\n inject(JvTranslationService).initialize();\r\n },\r\n },\r\n ]);\r\n}\r\n","import { Injectable, inject } from '@angular/core';\n\nimport { JV_UI_CONFIG, JV_UI_CONFIG_DEFAULTS } from '../config/provide-jv-ui';\nimport { JvUiConfig } from '../config/jv-ui-config';\n\n@Injectable({ providedIn: 'root' })\nexport class JvUiConfigService {\n private readonly defaults = inject(JV_UI_CONFIG_DEFAULTS);\n private readonly configLayers = inject(JV_UI_CONFIG, { optional: true }) ?? [];\n\n get snapshot(): JvUiConfig {\n return this.configLayers.reduce<JvUiConfig>(\n (merged, layer) => ({ ...merged, ...layer }),\n { ...this.defaults },\n );\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\r\n\r\nimport { JvToastItem } from '../components/feedback/jv-feedback.models';\r\nimport { JvTone } from '../components/core/core-component.models';\r\nimport { JvToastPosition } from '../config/jv-ui-config';\r\nimport { JvAnnouncementService } from './jv-announcement.service';\r\nimport { JvUiConfigService } from './jv-ui-config.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JvToastService {\r\n private readonly announcementService = inject(JvAnnouncementService);\r\n private readonly config = inject(JvUiConfigService);\r\n private readonly items = signal<JvToastItem[]>([]);\r\n private readonly positionOverride = signal<JvToastPosition | null>(null);\r\n private nextId = 0;\r\n\r\n readonly toasts = computed(() => this.items());\r\n readonly position = computed(() => this.positionOverride() ?? this.config.snapshot.toastPosition);\r\n\r\n show(message: string, tone: JvTone = 'info', options: { title?: string; duration?: number } = {}) {\r\n const id = ++this.nextId;\r\n const toast: JvToastItem = {\r\n id,\r\n title: options.title,\r\n message,\r\n tone,\r\n duration: options.duration ?? 4000,\r\n };\r\n\r\n this.items.update((current) => [...current, toast]);\r\n this.announcementService.announce(\r\n toast.title ? `${toast.title}. ${toast.message}` : toast.message,\r\n toast.tone === 'danger' ? 'assertive' : 'polite',\r\n );\r\n\r\n if (toast.duration > 0) {\r\n setTimeout(() => this.dismiss(id), toast.duration);\r\n }\r\n\r\n return id;\r\n }\r\n\r\n dismiss(id: number) {\r\n this.items.update((current) => current.filter((item) => item.id !== id));\r\n }\r\n\r\n setPosition(position: JvToastPosition) {\r\n this.positionOverride.set(position);\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\n\r\nimport { JvToastService } from '../../services/jv-toast.service';\r\nimport { JvIconComponent } from '../jv-icon/jv-icon.component';\r\n\r\n@Component({\r\n selector: 'jv-toast',\r\n standalone: true,\r\n imports: [JvIconComponent],\r\n template: `\r\n @if (toastService.toasts().length > 0) {\r\n <div class=\"jv-toast-viewport\" [class]=\"'is-' + toastService.position()\" aria-live=\"polite\" aria-atomic=\"false\">\r\n @for (toast of toastService.toasts(); track toast.id) {\r\n <article class=\"jv-toast-item\" [class]=\"'jv-toast--' + toast.tone\" [attr.role]=\"toast.tone === 'danger' ? 'alert' : 'status'\" aria-atomic=\"true\">\r\n <div class=\"jv-toast-copy\">\r\n @if (toast.title) {\r\n <strong>{{ toast.title }}</strong>\r\n }\r\n <p>{{ toast.message }}</p>\r\n </div>\r\n\r\n <button type=\"button\" class=\"jv-toast-close\" (click)=\"toastService.dismiss(toast.id)\" aria-label=\"Dismiss notification\">\r\n <jv-icon name=\"x\" [size]=\"16\" />\r\n </button>\r\n </article>\r\n }\r\n </div>\r\n }\r\n `,\r\n styles: `\r\n .jv-toast-viewport {\r\n position: fixed;\r\n z-index: 1100;\r\n display: grid;\r\n gap: var(--jv-spacing-sm);\r\n width: min(360px, calc(100vw - 2rem));\r\n }\r\n\r\n .is-top-left { top: 1rem; left: 1rem; }\r\n .is-top-center { top: 1rem; left: 50%; transform: translateX(-50%); }\r\n .is-top-right { top: 1rem; right: 1rem; }\r\n .is-bottom-left { bottom: 1rem; left: 1rem; }\r\n .is-bottom-center { bottom: 1rem; left: 50%; transform: translateX(-50%); }\r\n .is-bottom-right { bottom: 1rem; right: 1rem; }\r\n\r\n .jv-toast-item {\r\n display: grid;\r\n grid-template-columns: 1fr auto;\r\n gap: var(--jv-spacing-sm);\r\n padding: var(--jv-spacing-md);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-md);\r\n background: var(--jv-color-surface);\r\n box-shadow: var(--jv-shadow-lg);\r\n }\r\n\r\n .jv-toast-copy strong,\r\n .jv-toast-copy p {\r\n margin: 0;\r\n }\r\n\r\n .jv-toast-copy {\r\n display: grid;\r\n gap: 0.25rem;\r\n }\r\n\r\n .jv-toast-copy p {\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n\r\n .jv-toast-close {\r\n display: inline-grid;\r\n place-items: center;\r\n width: 2rem;\r\n height: 2rem;\r\n border: 0;\r\n border-radius: 999px;\r\n background: transparent;\r\n color: inherit;\r\n }\r\n\r\n .jv-toast--success { border-color: color-mix(in srgb, var(--jv-color-success) 35%, var(--jv-color-border)); }\r\n .jv-toast--warning { border-color: color-mix(in srgb, var(--jv-color-warning) 35%, var(--jv-color-border)); }\r\n .jv-toast--danger { border-color: color-mix(in srgb, var(--jv-color-danger) 35%, var(--jv-color-border)); }\r\n .jv-toast--info,\r\n .jv-toast--primary { border-color: color-mix(in srgb, var(--jv-color-primary) 35%, var(--jv-color-border)); }\r\n `,\r\n})\r\nexport class JvToastComponent {\r\n protected readonly toastService = inject(JvToastService);\r\n}\r\n","import { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nlet radioIdSequence = 0;\r\n\r\n@Component({\r\n selector: 'jv-radio',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JvRadioComponent),\r\n multi: true,\r\n },\r\n ],\r\n template: `\r\n <label class=\"jv-radio\" [class.is-disabled]=\"disabled\">\r\n <input\r\n type=\"radio\"\r\n [id]=\"inputId()\"\r\n [name]=\"name()\"\r\n [checked]=\"value === radioValue()\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-describedby]=\"describedBy() || null\"\r\n (change)=\"handleChange()\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n <span>{{ label() }}</span>\r\n </label>\r\n `,\r\n styles: `\r\n .jv-radio {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n min-height: var(--jv-density-control-height);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-radio.is-disabled {\r\n opacity: 0.7;\r\n }\r\n `,\r\n})\r\nexport class JvRadioComponent implements ControlValueAccessor {\r\n readonly name = input.required<string>();\r\n readonly label = input('');\r\n readonly radioValue = input.required<string>();\r\n readonly describedBy = input('');\r\n readonly inputId = input(`jv-radio-${++radioIdSequence}`);\r\n\r\n value = '';\r\n disabled = false;\r\n private onChange: (value: string) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n writeValue(value: string | null): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n handleChange() {\r\n const nextValue = this.radioValue();\r\n this.value = nextValue;\r\n this.onChange(nextValue);\r\n }\r\n\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n}\r\n","import { Component, computed, forwardRef, input, output } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { JvSelectOption } from './jv-form.models';\r\n\r\nlet selectIdSequence = 0;\r\n\r\n@Component({\r\n selector: 'jv-select',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JvSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n template: `\r\n <select\r\n class=\"jv-select\"\r\n [class.is-invalid]=\"invalid()\"\r\n [id]=\"inputId()\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required()\"\r\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\r\n [attr.aria-describedby]=\"describedBy() || null\"\r\n [value]=\"currentValue()\"\r\n (change)=\"handleChange($event)\"\r\n (blur)=\"handleBlur()\"\r\n >\r\n @if (placeholder()) {\r\n <option value=\"\" [disabled]=\"required()\">{{ placeholder() }}</option>\r\n }\r\n\r\n @for (option of options(); track option.label + ':' + option.value) {\r\n <option [value]=\"option.value\" [disabled]=\"option.disabled ?? false\">{{ option.label }}</option>\r\n }\r\n </select>\r\n `,\r\n styles: `\r\n .jv-select {\r\n width: 100%;\r\n min-height: var(--jv-density-control-height);\r\n padding: 0 var(--jv-spacing-md);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-md);\r\n background: var(--jv-color-surface);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-select.is-invalid {\r\n border-color: var(--jv-color-danger);\r\n }\r\n `,\r\n})\r\nexport class JvSelectComponent implements ControlValueAccessor {\r\n readonly options = input<JvSelectOption[]>([]);\r\n readonly placeholder = input('');\r\n readonly required = input(false);\r\n readonly invalid = input(false);\r\n readonly describedBy = input('');\r\n readonly inputId = input(`jv-select-${++selectIdSequence}`);\r\n readonly modelValue = input('');\r\n readonly selectionChange = output<string>();\r\n\r\n value = '';\r\n disabled = false;\r\n private onChange: (value: string) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n protected readonly currentValue = computed(() => this.modelValue() || this.value);\r\n\r\n writeValue(value: string | null): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n handleChange(event: Event) {\r\n const nextValue = (event.target as HTMLSelectElement).value;\r\n this.value = nextValue;\r\n this.onChange(nextValue);\r\n this.selectionChange.emit(nextValue);\r\n }\r\n\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n}\r\n","import { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nlet switchIdSequence = 0;\r\n\r\n@Component({\r\n selector: 'jv-switch',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JvSwitchComponent),\r\n multi: true,\r\n },\r\n ],\r\n template: `\r\n <label class=\"jv-switch\" [class.is-disabled]=\"disabled\">\r\n <input\r\n class=\"jv-switch-input\"\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n [id]=\"inputId()\"\r\n [checked]=\"value\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-describedby]=\"describedBy() || null\"\r\n (change)=\"handleChange($event)\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n <span class=\"jv-switch-track\" aria-hidden=\"true\">\r\n <span class=\"jv-switch-thumb\"></span>\r\n </span>\r\n <span>{{ label() }}</span>\r\n </label>\r\n `,\r\n styles: `\r\n .jv-switch {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n min-height: var(--jv-density-control-height);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-switch.is-disabled {\r\n opacity: 0.7;\r\n }\r\n\r\n .jv-switch-input {\r\n position: absolute;\r\n opacity: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .jv-switch-track {\r\n position: relative;\r\n display: inline-flex;\r\n align-items: center;\r\n width: 2.75rem;\r\n height: 1.6rem;\r\n padding: 0.15rem;\r\n border-radius: 999px;\r\n background: var(--jv-color-border);\r\n transition: background-color 160ms ease;\r\n }\r\n\r\n .jv-switch-thumb {\r\n width: 1.25rem;\r\n height: 1.25rem;\r\n border-radius: 999px;\r\n background: #ffffff;\r\n box-shadow: var(--jv-shadow-sm);\r\n transition: transform 160ms ease;\r\n }\r\n\r\n .jv-switch-input:checked + .jv-switch-track {\r\n background: var(--jv-color-primary);\r\n }\r\n\r\n .jv-switch-input:checked + .jv-switch-track .jv-switch-thumb {\r\n transform: translateX(1.1rem);\r\n }\r\n `,\r\n})\r\nexport class JvSwitchComponent implements ControlValueAccessor {\r\n readonly label = input('');\r\n readonly describedBy = input('');\r\n readonly inputId = input(`jv-switch-${++switchIdSequence}`);\r\n\r\n value = false;\r\n disabled = false;\r\n private onChange: (value: boolean) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n writeValue(value: boolean | null): void {\r\n this.value = value ?? false;\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n handleChange(event: Event) {\r\n const nextValue = (event.target as HTMLInputElement).checked;\r\n this.value = nextValue;\r\n this.onChange(nextValue);\r\n }\r\n\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject, signal } from '@angular/core';\n\nimport { JvActiveConfirmDialog, JvConfirmOptions } from '../components/feedback/jv-feedback.models';\nimport { JvAnnouncementService } from './jv-announcement.service';\n\n@Injectable({ providedIn: 'root' })\nexport class JvDialogService {\n private readonly announcementService = inject(JvAnnouncementService);\n private readonly document = inject(DOCUMENT);\n private readonly activeDialogSignal = signal<JvActiveConfirmDialog | null>(null);\r\n private nextId = 0;\r\n private resolver: ((value: boolean) => void) | null = null;\r\n private restoreTarget: HTMLElement | null = null;\r\n\r\n readonly activeDialog = this.activeDialogSignal.asReadonly();\r\n\r\n confirm(options: JvConfirmOptions) {\r\n const id = ++this.nextId;\r\n this.restoreTarget = this.document.activeElement instanceof HTMLElement ? this.document.activeElement : null;\r\n this.activeDialogSignal.set({\n id,\r\n title: options.title,\r\n message: options.message,\r\n confirmLabel: options.confirmLabel ?? 'Confirm',\r\n cancelLabel: options.cancelLabel ?? 'Cancel',\r\n tone: options.tone ?? 'primary',\n });\n this.announcementService.announce(`${options.title}. ${options.message}`, 'assertive');\n\n return new Promise<boolean>((resolve) => {\n this.resolver = resolve;\n });\r\n }\r\n\r\n resolve(result: boolean) {\r\n this.activeDialogSignal.set(null);\r\n this.resolver?.(result);\r\n this.resolver = null;\r\n this.restoreTarget?.focus();\r\n this.restoreTarget = null;\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Component, ElementRef, HostListener, effect, inject, input, output, viewChild } from '@angular/core';\n\r\n@Component({\r\n selector: 'jv-dialog',\r\n standalone: true,\r\n template: `\r\n @if (open()) {\r\n <div class=\"jv-dialog-backdrop\" (click)=\"backdropClose()\">\r\n <div class=\"jv-dialog-panel\" role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\" [attr.aria-labelledby]=\"titleId\" [attr.aria-describedby]=\"descriptionId\" (click)=\"$event.stopPropagation()\" #panel>\n <header class=\"jv-dialog-header\">\r\n <h2 [id]=\"titleId\">{{ title() }}</h2>\r\n </header>\r\n\r\n <div class=\"jv-dialog-body\" [id]=\"descriptionId\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <footer class=\"jv-dialog-footer\">\r\n <ng-content select=\"[dialog-actions]\"></ng-content>\r\n </footer>\r\n </div>\r\n </div>\r\n }\r\n `,\r\n styles: `\r\n .jv-dialog-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 1200;\r\n display: grid;\r\n place-items: center;\r\n padding: 1rem;\r\n background: rgba(15, 23, 42, 0.5);\r\n }\r\n\r\n .jv-dialog-panel {\r\n width: min(32rem, 100%);\r\n max-height: calc(100vh - 2rem);\r\n overflow: auto;\r\n padding: var(--jv-spacing-lg);\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-lg);\r\n background: var(--jv-color-surface);\r\n box-shadow: var(--jv-shadow-lg);\r\n }\r\n\r\n .jv-dialog-header,\r\n .jv-dialog-body,\r\n .jv-dialog-footer {\r\n display: grid;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .jv-dialog-footer {\r\n margin-top: var(--jv-spacing-lg);\r\n }\r\n\r\n h2,\r\n p {\r\n margin: 0;\r\n }\r\n `,\r\n})\r\nexport class JvDialogComponent {\n private readonly document = inject(DOCUMENT);\n private readonly panelRef = viewChild<ElementRef<HTMLDivElement>>('panel');\n\r\n readonly open = input(false);\r\n readonly title = input('Dialog');\r\n\r\n readonly closed = output<void>();\r\n\r\n protected readonly titleId = `jv-dialog-title-${Math.random().toString(36).slice(2, 8)}`;\r\n protected readonly descriptionId = `jv-dialog-description-${Math.random().toString(36).slice(2, 8)}`;\r\n\r\n constructor() {\n effect(() => {\n if (this.open()) {\n queueMicrotask(() => this.focusInitialElement());\n }\n });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleDocumentKeydown(event: KeyboardEvent) {\n if (!this.open()) {\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closed.emit();\n return;\n }\n\n if (event.key === 'Tab') {\n this.trapFocus(event);\n }\n }\n\n private focusInitialElement() {\n const panel = this.panelRef()?.nativeElement;\n if (!panel) {\n return;\n }\n\n const firstFocusable = this.getFocusableElements()[0];\n (firstFocusable ?? panel).focus();\n }\n\n backdropClose() {\n this.closed.emit();\n }\n\n private trapFocus(event: KeyboardEvent) {\n const focusable = this.getFocusableElements();\n const panel = this.panelRef()?.nativeElement;\n if (!panel || focusable.length === 0) {\n panel?.focus();\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = this.document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && active === first) {\n last.focus();\n event.preventDefault();\n } else if (!event.shiftKey && active === last) {\n first.focus();\n event.preventDefault();\n }\n }\n\n private getFocusableElements() {\n const panel = this.panelRef()?.nativeElement;\n if (!panel) {\n return [] as HTMLElement[];\n }\n\n return Array.from(\n panel.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n );\n }\n}\n","import { Component, computed, inject } from '@angular/core';\r\n\r\nimport { JvDialogService } from '../../services/jv-dialog.service';\r\nimport { JvButtonComponent } from '../buttons/jv-button.component';\r\nimport { JvIntent } from '../core/core-component.models';\r\nimport { JvDialogComponent } from './jv-dialog.component';\r\n\r\n@Component({\r\n selector: 'jv-confirm-dialog',\r\n standalone: true,\r\n imports: [JvButtonComponent, JvDialogComponent],\r\n template: `\r\n <jv-dialog\r\n [open]=\"isOpen()\"\r\n [title]=\"dialogTitle()\"\r\n (closed)=\"dialogService.resolve(false)\"\r\n >\r\n <p>{{ dialogMessage() }}</p>\r\n\r\n <div dialog-actions class=\"actions\">\r\n <jv-button variant=\"ghost\" (click)=\"dialogService.resolve(false)\">{{ cancelLabel() }}</jv-button>\r\n <jv-button [variant]=\"confirmVariant()\" (click)=\"dialogService.resolve(true)\">{{ confirmLabel() }}</jv-button>\r\n </div>\r\n </jv-dialog>\r\n `,\r\n styles: `\r\n .actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: var(--jv-spacing-sm);\r\n flex-wrap: wrap;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n `,\r\n})\r\nexport class JvConfirmDialogComponent {\r\n protected readonly dialogService = inject(JvDialogService);\r\n protected readonly activeDialog = this.dialogService.activeDialog;\r\n\r\n protected readonly isOpen = computed(() => this.activeDialog() !== null);\r\n protected readonly dialogTitle = computed(() => this.activeDialog()?.title ?? 'Confirm');\r\n protected readonly dialogMessage = computed(() => this.activeDialog()?.message ?? '');\r\n protected readonly cancelLabel = computed(() => this.activeDialog()?.cancelLabel ?? 'Cancel');\r\n protected readonly confirmLabel = computed(() => this.activeDialog()?.confirmLabel ?? 'Confirm');\r\n protected readonly confirmVariant = computed<JvIntent>(() => {\r\n const tone = this.activeDialog()?.tone ?? 'primary';\r\n return tone === 'info' ? 'primary' : tone;\r\n });\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\nimport { JvBreadcrumbItem } from './jv-layout.models';\r\n\r\n@Component({\r\n selector: 'jv-breadcrumb',\r\n standalone: true,\r\n template: `\r\n @if (items().length > 0) {\r\n <nav aria-label=\"Breadcrumb\" class=\"jv-breadcrumb\">\r\n <ol>\r\n @for (item of items(); track item.label; let isLast = $last) {\r\n <li>\r\n @if (item.href && !item.active && !isLast) {\r\n <a [href]=\"item.href\">{{ item.label }}</a>\r\n } @else {\r\n <span [attr.aria-current]=\"item.active || isLast ? 'page' : null\">{{ item.label }}</span>\r\n }\r\n\r\n @if (!isLast) {\r\n <span aria-hidden=\"true\" class=\"separator\">/</span>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n </nav>\r\n }\r\n `,\r\n styles: `\r\n .jv-breadcrumb ol {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: var(--jv-spacing-xs);\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n color: var(--jv-color-foreground-muted);\r\n font-size: 0.875rem;\r\n }\r\n\r\n .jv-breadcrumb li {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n .jv-breadcrumb a {\r\n color: inherit;\r\n text-decoration: none;\r\n }\r\n\r\n .jv-breadcrumb a:hover {\r\n color: var(--jv-color-foreground);\r\n text-decoration: underline;\r\n }\r\n\r\n .separator {\r\n opacity: 0.7;\r\n }\r\n `,\r\n})\r\nexport class JvBreadcrumbComponent {\r\n readonly items = input<JvBreadcrumbItem[]>([]);\r\n}\r\n","import { Component, computed, inject, input, output, signal } from '@angular/core';\r\nimport { Router, RouterLink } from '@angular/router';\r\n\r\nimport { JvIconComponent } from '../components/jv-icon/jv-icon.component';\r\nimport { JvNavItem } from './jv-layout.models';\r\n\r\n@Component({\r\n selector: 'jv-sidebar',\r\n standalone: true,\r\n imports: [JvIconComponent, RouterLink],\r\n template: `\r\n <aside class=\"jv-sidebar\" [class.is-collapsed]=\"collapsed()\" [class.is-mobile-open]=\"mobileOpen()\">\r\n <div class=\"jv-sidebar-brand\">\r\n <div class=\"brand-mark\">\r\n <jv-icon [name]=\"brandIcon()\" [size]=\"18\" />\r\n </div>\r\n\r\n @if (!collapsed()) {\r\n <div class=\"brand-copy\">\r\n <strong>{{ title() }}</strong>\r\n @if (subtitle()) {\r\n <span>{{ subtitle() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <nav class=\"jv-sidebar-nav\" [attr.aria-label]=\"ariaLabel()\">\r\n <ul class=\"jv-sidebar-list\">\r\n @for (item of normalizedItems(); track item.id) {\r\n <li class=\"jv-sidebar-item\">\r\n @if (item.children.length > 0) {\r\n <button\r\n type=\"button\"\r\n class=\"jv-sidebar-link\"\r\n [class.is-active]=\"item.active\"\r\n [attr.aria-label]=\"item.label\"\r\n [attr.aria-expanded]=\"isExpanded(item.id) ? 'true' : 'false'\"\r\n [attr.aria-controls]=\"'jv-sidebar-section-' + item.id\"\r\n [attr.title]=\"item.label\"\r\n (click)=\"toggleSection(item.id)\"\r\n >\r\n <span class=\"jv-sidebar-link-main\">\r\n @if (item.icon) {\r\n <jv-icon [name]=\"item.icon\" [size]=\"18\" />\r\n }\r\n\r\n @if (!collapsed()) {\r\n <span>{{ item.label }}</span>\r\n }\r\n </span>\r\n\r\n @if (!collapsed()) {\r\n <jv-icon [name]=\"isExpanded(item.id) ? 'chevron-up' : 'chevron-down'\" [size]=\"16\" />\r\n }\r\n </button>\r\n } @else {\r\n @if (isHashLink(item.href)) {\r\n <button\r\n type=\"button\"\r\n class=\"jv-sidebar-link\"\r\n [class.is-active]=\"item.active\"\r\n [attr.aria-label]=\"item.label\"\r\n [attr.aria-current]=\"item.active ? 'page' : null\"\r\n [attr.title]=\"item.label\"\r\n (click)=\"navigateTo(item.href)\"\r\n >\r\n <span class=\"jv-sidebar-link-main\">\r\n @if (item.icon) {\r\n <jv-icon [name]=\"item.icon\" [size]=\"18\" />\r\n }\r\n\r\n @if (!collapsed()) {\r\n <span>{{ item.label }}</span>\r\n }\r\n </span>\r\n </button>\r\n } @else {\r\n <a\r\n class=\"jv-sidebar-link\"\r\n [class.is-active]=\"item.active\"\r\n [attr.aria-label]=\"item.label\"\r\n [attr.aria-current]=\"item.active ? 'page' : null\"\r\n [routerLink]=\"item.href\"\r\n [attr.title]=\"item.label\"\r\n >\r\n <span class=\"jv-sidebar-link-main\">\r\n @if (item.icon) {\r\n <jv-icon [name]=\"item.icon\" [size]=\"18\" />\r\n }\r\n\r\n @if (!collapsed()) {\r\n <span>{{ item.label }}</span>\r\n }\r\n </span>\r\n </a>\r\n }\r\n }\r\n\r\n @if (!collapsed() && item.children.length > 0 && isExpanded(item.id)) {\r\n <div class=\"jv-sidebar-children\" [id]=\"'jv-sidebar-section-' + item.id\">\r\n @for (child of item.children; track child.id) {\r\n @if (isHashLink(child.href)) {\r\n <button type=\"button\" class=\"jv-sidebar-child-link\" [class.is-active]=\"child.active\" [attr.aria-label]=\"child.label\" [attr.aria-current]=\"child.active ? 'page' : null\" [attr.title]=\"child.label\" (click)=\"navigateTo(child.href)\">\r\n {{ child.label }}\r\n </button>\r\n } @else {\r\n <a class=\"jv-sidebar-child-link\" [class.is-active]=\"child.active\" [attr.aria-label]=\"child.label\" [attr.aria-current]=\"child.active ? 'page' : null\" [routerLink]=\"child.href\" [attr.title]=\"child.label\">\r\n {{ child.label }}\r\n </a>\r\n }\r\n }\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n\r\n <div class=\"jv-sidebar-footer\">\r\n <button type=\"button\" class=\"jv-sidebar-toggle\" (click)=\"collapseToggle.emit()\">\r\n <jv-icon [name]=\"collapsed() ? 'menu' : 'panel-left-close'\" [size]=\"18\" />\r\n @if (!collapsed()) {\r\n <span>Collapse</span>\r\n }\r\n </button>\r\n </div>\r\n </aside>\r\n `,\r\n styles: `\r\n .jv-sidebar {\r\n display: grid;\r\n grid-template-rows: auto 1fr auto;\r\n gap: var(--jv-spacing-lg);\r\n width: 280px;\r\n min-width: 280px;\r\n height: 100vh;\r\n padding: var(--jv-spacing-lg);\r\n overflow-y: auto;\r\n border-right: 1px solid var(--jv-color-border);\r\n background: var(--jv-color-surface);\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n }\r\n\r\n .jv-sidebar::-webkit-scrollbar {\r\n width: 0;\r\n height: 0;\r\n display: none;\r\n }\r\n\r\n .jv-sidebar.is-collapsed {\r\n width: 96px;\r\n min-width: 96px;\r\n padding-inline: var(--jv-spacing-md);\r\n }\r\n\r\n .jv-sidebar-brand,\r\n .jv-sidebar-link,\r\n .jv-sidebar-toggle {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .brand-mark {\r\n display: inline-grid;\r\n place-items: center;\r\n width: 2.5rem;\r\n height: 2.5rem;\r\n border-radius: var(--jv-radius-md);\r\n background: color-mix(in srgb, var(--jv-color-primary) 16%, var(--jv-color-surface));\r\n color: var(--jv-color-primary);\r\n }\r\n\r\n .brand-copy {\r\n display: grid;\r\n gap: 0.1rem;\r\n }\r\n\r\n .brand-copy span {\r\n color: var(--jv-color-foreground-muted);\r\n font-size: 0.875rem;\r\n }\r\n\r\n .jv-sidebar-item {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n list-style: none;\r\n }\r\n\r\n .jv-sidebar-list {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n .jv-sidebar-nav {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n align-content: start;\r\n }\r\n\r\n .jv-sidebar-link,\r\n .jv-sidebar-child-link,\r\n .jv-sidebar-toggle {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n min-height: var(--jv-density-control-height);\r\n padding: 0 var(--jv-spacing-md);\r\n border: 1px solid transparent;\r\n border-radius: var(--jv-radius-md);\r\n background: transparent;\r\n color: var(--jv-color-foreground-muted);\r\n text-decoration: none;\r\n cursor: pointer;\r\n }\r\n\r\n .jv-sidebar-link-main {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .jv-sidebar-link:hover,\r\n .jv-sidebar-child-link:hover,\r\n .jv-sidebar-toggle:hover {\r\n background: var(--jv-color-surface-muted);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-sidebar-link.is-active,\r\n .jv-sidebar-child-link.is-active {\r\n border-color: color-mix(in srgb, var(--jv-color-primary) 25%, var(--jv-color-border));\r\n background: color-mix(in srgb, var(--jv-color-primary) 12%, var(--jv-color-surface));\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .jv-sidebar-children {\r\n display: grid;\r\n gap: var(--jv-spacing-xs);\r\n margin-left: var(--jv-spacing-xl);\r\n padding-left: var(--jv-spacing-sm);\r\n border-left: 1px solid var(--jv-color-border);\r\n }\r\n\r\n .jv-sidebar-child-link {\r\n display: flex;\r\n align-items: center;\r\n min-height: 2.25rem;\r\n font-size: 0.9rem;\r\n }\r\n\r\n .jv-sidebar-toggle {\r\n width: 100%;\r\n background: var(--jv-color-surface-muted);\r\n cursor: pointer;\r\n }\r\n\r\n @media (max-width: 900px) {\r\n .jv-sidebar {\r\n width: 100%;\r\n min-width: 0;\r\n height: auto;\r\n max-height: 100vh;\r\n border-right: 0;\r\n border-bottom: 1px solid var(--jv-color-border);\r\n }\r\n\r\n .jv-sidebar:not(.is-mobile-open) {\r\n display: none;\r\n }\r\n\r\n .jv-sidebar.is-collapsed {\r\n width: 100%;\r\n min-width: 0;\r\n }\r\n }\r\n `,\r\n})\r\nexport class JvSidebarComponent {\r\n private readonly router = inject(Router);\r\n private readonly expandedSections = signal<Set<string>>(new Set());\r\n\r\n readonly title = input.required<string>();\r\n readonly subtitle = input('');\r\n readonly brandIcon = input('monitor');\r\n readonly items = input<JvNavItem[]>([]);\r\n readonly collapsed = input(false);\r\n readonly mobileOpen = input(false);\r\n readonly ariaLabel = input('Sidebar navigation');\r\n\r\n readonly collapseToggle = output<void>();\r\n\r\n private readonly activeChildParentIds = computed(() => {\r\n const url = this.router.url;\r\n const ids = new Set<string>();\r\n for (const item of this.items()) {\r\n for (const child of item.children ?? []) {\r\n if (child.href && url.startsWith(child.href)) {\r\n ids.add(item.id);\r\n }\r\n }\r\n }\r\n return ids;\r\n });\r\n\r\n protected readonly normalizedItems = computed(() =>\r\n this.items().map((item) => ({\r\n ...item,\r\n children: item.children ?? [],\r\n })),\r\n );\r\n\r\n protected isExpanded(id: string) {\r\n return this.expandedSections().has(id) || this.activeChildParentIds().has(id);\r\n }\r\n\r\n protected toggleSection(id: string) {\r\n this.expandedSections.update((current) => {\r\n const next = new Set(current);\r\n if (next.has(id)) {\r\n next.delete(id);\r\n } else {\r\n next.add(id);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n protected isHashLink(href?: string) {\r\n return !!href && href.startsWith('#');\r\n }\r\n\r\n protected navigateTo(href?: string) {\r\n if (!href) {\r\n return;\r\n }\r\n\r\n const target = document.querySelector(href);\r\n target?.scrollIntoView({ block: 'start', behavior: 'smooth' });\r\n }\r\n}\r\n","import { Component, input, output } from '@angular/core';\r\n\r\nimport { JvIconComponent } from '../components/jv-icon/jv-icon.component';\r\nimport { JvTheme } from '../config/jv-ui-config';\r\nimport { JvThemeOption, JvTopbarAction } from './jv-layout.models';\r\n\r\n@Component({\r\n selector: 'jv-topbar',\r\n standalone: true,\r\n imports: [JvIconComponent],\r\n template: `\r\n <header class=\"jv-topbar\">\r\n <div class=\"jv-topbar-start\">\r\n <button type=\"button\" class=\"icon-button\" (click)=\"menuClick.emit()\" aria-label=\"Toggle navigation menu\">\r\n <jv-icon name=\"menu\" [size]=\"18\" />\r\n </button>\r\n\r\n @if (title()) {\r\n <div class=\"title-block\">\r\n <strong>{{ title() }}</strong>\r\n @if (subtitle()) {\r\n <span>{{ subtitle() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"jv-topbar-end\">\r\n <ng-content select=\"[topbar-actions]\"></ng-content>\r\n\r\n @if (showThemeSelector()) {\r\n <div class=\"theme-group\" aria-label=\"Theme selector\">\r\n @for (option of themeOptions(); track option.value) {\r\n <button\r\n type=\"button\"\r\n class=\"theme-pill\"\r\n [class.is-active]=\"currentTheme() === option.value\"\r\n (click)=\"themeChange.emit(option.value)\"\r\n >\r\n @if (option.icon) {\r\n <jv-icon [name]=\"option.icon\" [size]=\"16\" />\r\n }\r\n <span>{{ option.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @for (action of visibleActions(); track action.id) {\r\n <button type=\"button\" class=\"icon-button\" [attr.aria-label]=\"action.label\" (click)=\"actionClick.emit(action.id)\">\r\n <jv-icon [name]=\"action.icon\" [size]=\"18\" />\r\n </button>\r\n }\r\n </div>\r\n </header>\r\n `,\r\n styles: `\r\n .jv-topbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--jv-spacing-md);\r\n padding: var(--jv-spacing-md) var(--jv-spacing-lg);\r\n border-bottom: 1px solid var(--jv-color-border);\r\n background: var(--jv-color-surface);\r\n }\r\n\r\n .jv-topbar-start,\r\n .jv-topbar-end,\r\n .theme-group {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .jv-topbar-end {\r\n flex-wrap: wrap;\r\n justify-content: flex-end;\r\n }\r\n\r\n .title-block {\r\n display: grid;\r\n gap: 0.1rem;\r\n }\r\n\r\n .title-block span {\r\n color: var(--jv-color-foreground-muted);\r\n font-size: 0.875rem;\r\n }\r\n\r\n .icon-button,\r\n .theme-pill {\r\n border: 1px solid var(--jv-color-border);\r\n background: var(--jv-color-surface-muted);\r\n color: var(--jv-color-foreground);\r\n }\r\n\r\n .icon-button {\r\n display: inline-grid;\r\n place-items: center;\r\n width: var(--jv-density-control-height);\r\n height: var(--jv-density-control-height);\r\n border-radius: 999px;\r\n }\r\n\r\n .theme-pill {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-xs);\r\n min-height: var(--jv-density-control-height);\r\n padding: 0 var(--jv-spacing-md);\r\n border-radius: 999px;\r\n }\r\n\r\n .theme-pill.is-active {\r\n border-color: var(--jv-color-primary);\r\n background: color-mix(in srgb, var(--jv-color-primary) 14%, var(--jv-color-surface));\r\n }\r\n\r\n @media (max-width: 900px) {\r\n .jv-topbar {\r\n align-items: flex-start;\r\n flex-direction: column;\r\n }\r\n\r\n .jv-topbar-end {\r\n width: 100%;\r\n justify-content: flex-start;\r\n }\r\n\r\n .theme-group {\r\n flex-wrap: wrap;\r\n }\r\n }\r\n `,\r\n})\r\nexport class JvTopbarComponent {\r\n readonly title = input('');\r\n readonly subtitle = input('');\r\n readonly currentTheme = input<JvTheme>('light');\r\n readonly themeOptions = input<JvThemeOption[]>([]);\r\n readonly actions = input<JvTopbarAction[]>([]);\r\n readonly showThemeSelector = input(true);\r\n\r\n readonly menuClick = output<void>();\r\n readonly themeChange = output<JvTheme>();\r\n readonly actionClick = output<string>();\r\n\r\n protected readonly visibleActions = () => this.actions();\r\n}\r\n","import { Component, input, output } from '@angular/core';\r\n\r\nimport { JvTheme } from '../config/jv-ui-config';\r\nimport { JvSidebarComponent } from './jv-sidebar.component';\r\nimport { JvTopbarComponent } from './jv-topbar.component';\r\nimport { JvNavItem, JvThemeOption, JvTopbarAction } from './jv-layout.models';\r\n\r\n@Component({\r\n selector: 'jv-dashboard-shell',\r\n standalone: true,\r\n imports: [JvSidebarComponent, JvTopbarComponent],\r\n template: `\r\n <div class=\"jv-dashboard-shell\" [class.is-sidebar-collapsed]=\"sidebarCollapsed()\">\r\n <jv-sidebar\r\n [title]=\"title()\"\r\n [subtitle]=\"sidebarSubtitle()\"\r\n [brandIcon]=\"brandIcon()\"\r\n [items]=\"navItems()\"\r\n [collapsed]=\"sidebarCollapsed()\"\r\n [mobileOpen]=\"mobileSidebarOpen()\"\r\n (collapseToggle)=\"sidebarCollapseToggle.emit()\"\r\n />\r\n\r\n <div class=\"jv-dashboard-main\">\r\n <jv-topbar\r\n [title]=\"topbarTitle()\"\r\n [subtitle]=\"topbarSubtitle()\"\r\n [currentTheme]=\"currentTheme()\"\r\n [themeOptions]=\"themeOptions()\"\r\n [actions]=\"topbarActions()\"\r\n [showThemeSelector]=\"showThemeSelector()\"\r\n (menuClick)=\"menuClick.emit()\"\r\n (themeChange)=\"themeChange.emit($event)\"\r\n (actionClick)=\"topbarActionClick.emit($event)\"\r\n >\r\n <ng-content select=\"[topbar-actions]\" topbar-actions></ng-content>\r\n </jv-topbar>\r\n\r\n <main class=\"jv-dashboard-content\">\r\n <ng-content></ng-content>\r\n </main>\r\n </div>\r\n </div>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n height: 100dvh;\r\n overflow: hidden;\r\n }\r\n\r\n .jv-dashboard-shell {\r\n display: grid;\r\n height: 100%;\r\n grid-template-columns: auto 1fr;\r\n background: var(--jv-color-background);\r\n overflow: hidden;\r\n }\r\n\r\n .jv-dashboard-main {\r\n display: grid;\r\n grid-template-rows: auto 1fr;\r\n min-width: 0;\r\n min-height: 0;\r\n overflow: hidden;\r\n }\r\n\r\n .jv-dashboard-content {\r\n overflow: auto;\r\n min-width: 0;\r\n min-height: 0;\r\n padding: var(--jv-spacing-xl);\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n }\r\n\r\n .jv-dashboard-content::-webkit-scrollbar {\r\n width: 0;\r\n height: 0;\r\n display: none;\r\n }\r\n\r\n @media (max-width: 900px) {\r\n .jv-dashboard-shell {\r\n grid-template-columns: 1fr;\r\n }\r\n\r\n .jv-dashboard-content {\r\n padding: var(--jv-spacing-lg);\r\n }\r\n }\r\n `,\r\n})\r\nexport class JvDashboardShellComponent {\r\n readonly title = input.required<string>();\r\n readonly sidebarSubtitle = input('');\r\n readonly brandIcon = input('monitor');\r\n readonly navItems = input<JvNavItem[]>([]);\r\n readonly sidebarCollapsed = input(false);\r\n readonly mobileSidebarOpen = input(false);\r\n\r\n readonly topbarTitle = input('');\r\n readonly topbarSubtitle = input('');\r\n readonly currentTheme = input<JvTheme>('light');\r\n readonly themeOptions = input<JvThemeOption[]>([]);\r\n readonly topbarActions = input<JvTopbarAction[]>([]);\r\n readonly showThemeSelector = input(true);\r\n\r\n readonly menuClick = output<void>();\r\n readonly sidebarCollapseToggle = output<void>();\r\n readonly themeChange = output<JvTheme>();\r\n readonly topbarActionClick = output<string>();\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\nimport { JvBreadcrumbComponent } from './jv-breadcrumb.component';\r\nimport { JvBreadcrumbItem } from './jv-layout.models';\r\n\r\n@Component({\r\n selector: 'jv-page',\r\n standalone: true,\r\n imports: [JvBreadcrumbComponent],\r\n template: `\r\n <section class=\"jv-page\">\r\n @if (eyebrow() || title() || description() || breadcrumbs().length > 0) {\r\n <header class=\"jv-page-header\">\r\n <jv-breadcrumb [items]=\"breadcrumbs()\" />\r\n\r\n @if (eyebrow()) {\r\n <p class=\"eyebrow\">{{ eyebrow() }}</p>\r\n }\r\n\r\n @if (title()) {\r\n <h1>{{ title() }}</h1>\r\n }\r\n\r\n @if (description()) {\r\n <p class=\"description\">{{ description() }}</p>\r\n }\r\n\r\n <ng-content select=\"[page-actions]\"></ng-content>\r\n </header>\r\n }\r\n\r\n <div class=\"jv-page-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </section>\r\n `,\r\n styles: `\r\n .jv-page {\r\n display: grid;\r\n gap: var(--jv-spacing-lg);\r\n min-width: 0;\r\n }\r\n\r\n .jv-page-header {\r\n display: grid;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .jv-page-content {\r\n min-width: 0;\r\n }\r\n\r\n .eyebrow {\r\n margin: 0;\r\n color: var(--jv-color-primary);\r\n font-size: 0.75rem;\r\n font-weight: 700;\r\n letter-spacing: 0.12em;\r\n text-transform: uppercase;\r\n }\r\n\r\n h1,\r\n .description {\r\n margin: 0;\r\n }\r\n\r\n .description {\r\n color: var(--jv-color-foreground-muted);\r\n max-width: 72ch;\r\n }\r\n `,\r\n})\r\nexport class JvPageComponent {\r\n readonly eyebrow = input('');\r\n readonly title = input('');\r\n readonly description = input('');\r\n readonly breadcrumbs = input<JvBreadcrumbItem[]>([]);\r\n}\r\n","export type JvGridRowId = string | number;\r\n\r\nexport type JvGridTrackBy<T> = keyof T | ((row: T, index: number) => JvGridRowId);\r\n\r\nexport type JvGridSortDirection = 'asc' | 'desc' | null;\r\n\r\nexport interface JvGridSortState {\r\n columnKey: string;\r\n direction: JvGridSortDirection;\r\n}\r\n\r\nexport interface JvGridColumn<T = any> {\r\n key: keyof T | string;\r\n header: string;\r\n sortable?: boolean;\r\n searchable?: boolean;\r\n hidden?: boolean;\r\n width?: string;\r\n align?: 'start' | 'center' | 'end';\r\n type?: 'text' | 'number' | 'currency' | 'date' | 'datetime' | 'boolean';\r\n cellClass?: string;\r\n headerClass?: string;\r\n format?: (value: unknown, row: T) => string;\r\n}\r\n\r\nexport interface JvGridAction<T = any> {\r\n id: string;\r\n label: string;\r\n icon?: string;\r\n variant?: 'default' | 'primary' | 'danger';\r\n disabled?: (row: T) => boolean;\r\n}\r\n\r\nexport interface JvGridOptions {\r\n searchable?: boolean;\r\n sortable?: boolean;\r\n pageable?: boolean;\r\n selectable?: boolean;\r\n pageSize?: number;\r\n pageSizeOptions?: number[];\r\n density?: 'compact' | 'normal' | 'comfortable';\r\n loading?: boolean;\r\n emptyMessage?: string;\r\n noResultsMessage?: string;\r\n searchPlaceholder?: string;\r\n ariaLabel?: string;\r\n trackBy?: JvGridTrackBy<any>;\r\n}\r\n\r\nexport interface JvGridPageEvent {\r\n pageIndex: number;\r\n pageSize: number;\r\n}\r\n\r\nexport const JV_GRID_DEFAULT_OPTIONS: JvGridOptions = {\r\n searchable: true,\r\n sortable: true,\r\n pageable: true,\r\n selectable: false,\r\n pageSize: 20,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n density: 'normal',\r\n loading: false,\r\n emptyMessage: '',\r\n noResultsMessage: '',\r\n searchPlaceholder: '',\r\n ariaLabel: '',\r\n};\r\n","import { Component, computed, effect, inject, input, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { JvButtonComponent } from '../buttons/jv-button.component';\r\nimport { JvIconComponent } from '../jv-icon/jv-icon.component';\r\nimport { JvInputComponent } from '../forms/jv-input.component';\r\nimport { JvTranslationService } from '../../services/jv-translation.service';\r\nimport type { JvIntent } from '../core/core-component.models';\r\nimport {\r\n JvGridAction,\r\n JvGridColumn,\r\n JvGridOptions,\r\n JvGridPageEvent,\r\n JvGridRowId,\r\n JvGridSortDirection,\r\n JvGridSortState,\r\n JV_GRID_DEFAULT_OPTIONS,\r\n} from './jv-grid.models';\r\n\r\nlet gridIdSequence = 0;\r\n\r\n@Component({\r\n selector: 'jv-grid',\r\n standalone: true,\r\n imports: [FormsModule, JvButtonComponent, JvIconComponent, JvInputComponent],\r\n template: `\r\n <div class=\"jv-grid\" role=\"region\" [attr.aria-label]=\"resolvedOptions().ariaLabel || gridLabel()\">\r\n @if (resolvedOptions().searchable) {\r\n <div class=\"jv-grid-toolbar\">\r\n <div class=\"jv-grid-search\">\r\n <jv-icon name=\"search\" [size]=\"16\" />\r\n <jv-input\r\n inputId=\"grid-search\"\r\n [placeholder]=\"t('grid.searchPlaceholder')\"\r\n [ngModel]=\"searchTerm()\"\r\n (ngModelChange)=\"onSearchInput($event)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (resolvedOptions().loading) {\r\n <div class=\"jv-grid-loading\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"jv-grid-spinner\" aria-hidden=\"true\"></span>\r\n <span>{{ t('grid.loading') }}</span>\r\n </div>\r\n } @else {\r\n <div class=\"jv-grid-table-wrap\">\r\n <table\r\n class=\"jv-grid-table\"\r\n role=\"grid\"\r\n [attr.aria-label]=\"resolvedOptions().ariaLabel || gridLabel()\"\r\n [class]=\"densityClass()\"\r\n >\r\n <caption class=\"sr-only\">{{ resolvedOptions().ariaLabel || gridLabel() }}</caption>\r\n <thead class=\"jv-grid-thead\">\r\n <tr>\r\n @if (resolvedOptions().selectable) {\r\n <th class=\"jv-grid-th jv-grid-th-select\" scope=\"col\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"jv-grid-checkbox\"\r\n [checked]=\"allSelected()\"\r\n (change)=\"toggleSelectAll($any($event.target).checked)\"\r\n [attr.aria-label]=\"allSelected() ? t('grid.deselectAll') : t('grid.selectAll')\"\r\n [indeterminate]=\"someSelected()\"\r\n />\r\n </th>\r\n }\r\n @for (col of visibleColumns(); track colKey(col)) {\r\n <th\r\n class=\"jv-grid-th\"\r\n [class]=\"col.headerClass || ''\"\r\n [class.jv-grid-th-sortable]=\"col.sortable !== false && resolvedOptions().sortable\"\r\n [style.text-align]=\"col.align ?? 'start'\"\r\n [style.width]=\"col.width || undefined\"\r\n scope=\"col\"\r\n [attr.aria-sort]=\"getAriaSort(col)\"\r\n [attr.aria-label]=\"getSortLabel(col)\"\r\n [tabindex]=\"col.sortable !== false && resolvedOptions().sortable ? 0 : -1\"\r\n (click)=\"toggleSort(col)\"\r\n (keydown.enter)=\"toggleSort(col)\"\r\n (keydown.space)=\"toggleSort(col, $event)\"\r\n >\r\n <div class=\"jv-grid-th-content\">\r\n <span>{{ col.header }}</span>\r\n @if (col.sortable !== false && resolvedOptions().sortable) {\r\n <span class=\"jv-grid-sort-icon\" aria-hidden=\"true\">\r\n @if (sortState().columnKey === colKey(col)) {\r\n @if (sortState().direction === 'asc') { ▲ }\r\n @if (sortState().direction === 'desc') { ▼ }\r\n }\r\n </span>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (actions().length > 0) {\r\n <th class=\"jv-grid-th jv-grid-th-actions\" scope=\"col\">\r\n <span class=\"sr-only\">{{ t('grid.actionsLabel', { label: '' }) }}</span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody class=\"jv-grid-tbody\">\r\n @if (pagedData().length === 0 && !searchTerm().trim()) {\r\n <tr>\r\n <td\r\n class=\"jv-grid-empty\"\r\n [attr.colspan]=\"colspan()\"\r\n >\r\n {{ resolvedOptions().emptyMessage || t('grid.emptyMessage') }}\r\n </td>\r\n </tr>\r\n } @else if (pagedData().length === 0 && searchTerm().trim()) {\r\n <tr>\r\n <td\r\n class=\"jv-grid-empty\"\r\n [attr.colspan]=\"colspan()\"\r\n >\r\n {{ resolvedOptions().noResultsMessage || t('grid.noResults') }}\r\n </td>\r\n </tr>\r\n } @else {\r\n @for (row of pagedData(); track getRowId(row, $index)) {\r\n <tr\r\n class=\"jv-grid-tr\"\r\n (click)=\"onRowClick(row)\"\r\n (keydown.enter)=\"onRowClick(row)\"\r\n (keydown.space)=\"onRowClick($event, row)\"\r\n [tabindex]=\"0\"\r\n >\r\n @if (resolvedOptions().selectable) {\r\n <td class=\"jv-grid-td jv-grid-td-select\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"jv-grid-checkbox\"\r\n [checked]=\"isSelected(row)\"\r\n (change)=\"toggleRow(row); $event.stopPropagation()\"\r\n (keydown.space)=\"$event.stopPropagation()\"\r\n [attr.aria-label]=\"getRowLabel(row, $index)\"\r\n />\r\n </td>\r\n }\r\n @for (col of visibleColumns(); track colKey(col)) {\r\n <td\r\n class=\"jv-grid-td\"\r\n [class]=\"col.cellClass || ''\"\r\n [style.text-align]=\"col.align ?? 'start'\"\r\n >\r\n @let value = getCellValue(row, col);\r\n @if (col.type === 'boolean') {\r\n @if (value) {\r\n <span class=\"jv-grid-boolean jv-grid-boolean-true\" aria-label=\"true\">✓</span>\r\n } @else {\r\n <span class=\"jv-grid-boolean jv-grid-boolean-false\" aria-label=\"false\">✗</span>\r\n }\r\n } @else if (col.format) {\r\n {{ col.format(value, row) }}\r\n } @else {\r\n {{ formatValue(value, col) }}\r\n }\r\n </td>\r\n }\r\n @if (actions().length > 0) {\r\n <td class=\"jv-grid-td jv-grid-td-actions\">\r\n <div class=\"jv-grid-actions-group\">\r\n @for (action of actions(); track action.id) {\r\n <jv-button\r\n [variant]=\"actionVariant(action.variant)\"\r\n [icon]=\"action.icon ?? null\"\r\n [disabled]=\"action.disabled?.(row) ?? false\"\r\n [attr.aria-label]=\"action.label\"\r\n (click)=\"onActionClick(action, row); $event.stopPropagation()\"\r\n >{{ action.label }}</jv-button>\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n\r\n @if (resolvedOptions().pageable && totalPages() > 1 && !resolvedOptions().loading) {\r\n <nav class=\"jv-grid-pagination\" [attr.aria-label]=\"t('grid.paginationLabel', { label: '' })\">\r\n <div class=\"jv-grid-pagination-info\">\r\n {{ t('grid.itemsShowing', { start: pageStart(), end: pageEnd(), total: totalItems() }) }}\r\n </div>\r\n <div class=\"jv-grid-pagination-controls\">\r\n <jv-button\r\n variant=\"outline\"\r\n icon=\"chevrons-left\"\r\n [disabled]=\"pageIndex() === 0\"\r\n (click)=\"goToPage(0)\"\r\n [attr.aria-label]=\"t('grid.pageFirst')\"\r\n ></jv-button>\r\n <jv-button\r\n variant=\"outline\"\r\n icon=\"chevron-left\"\r\n [disabled]=\"pageIndex() === 0\"\r\n (click)=\"goToPage(pageIndex() - 1)\"\r\n [attr.aria-label]=\"t('grid.pagePrev')\"\r\n ></jv-button>\r\n @for (p of pageRange(); track p) {\r\n <jv-button\r\n [variant]=\"p === pageIndex() ? 'primary' : 'outline'\"\r\n [attr.aria-current]=\"p === pageIndex() ? 'page' : null\"\r\n [attr.aria-label]=\"t('grid.pageOfTotal', { page: p + 1, total: totalPages() })\"\r\n (click)=\"goToPage(p)\"\r\n >{{ p + 1 }}</jv-button>\r\n }\r\n <jv-button\r\n variant=\"outline\"\r\n icon=\"chevron-right\"\r\n [disabled]=\"pageIndex() >= totalPages() - 1\"\r\n (click)=\"goToPage(pageIndex() + 1)\"\r\n [attr.aria-label]=\"t('grid.pageNext')\"\r\n ></jv-button>\r\n <jv-button\r\n variant=\"outline\"\r\n icon=\"chevrons-right\"\r\n [disabled]=\"pageIndex() >= totalPages() - 1\"\r\n (click)=\"goToPage(totalPages() - 1)\"\r\n [attr.aria-label]=\"t('grid.pageLast')\"\r\n ></jv-button>\r\n </div>\r\n </nav>\r\n }\r\n </div>\r\n `,\r\n styles: `\r\n .jv-grid {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--jv-spacing-md);\r\n }\r\n\r\n .jv-grid-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-md);\r\n }\r\n\r\n .jv-grid-search {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-sm);\r\n }\r\n\r\n .jv-grid-table-wrap {\r\n overflow-x: auto;\r\n border: 1px solid var(--jv-color-border);\r\n border-radius: var(--jv-radius-md);\r\n }\r\n\r\n .jv-grid-table {\r\n width: 100%;\r\n border-collapse: collapse;\r\n background: var(--jv-color-surface);\r\n }\r\n\r\n .jv-grid-thead {\r\n background: var(--jv-color-surface-muted);\r\n }\r\n\r\n .jv-grid-th {\r\n padding: var(--jv-spacing-sm) var(--jv-spacing-md);\r\n font-weight: 600;\r\n font-size: 0.875rem;\r\n color: var(--jv-color-foreground-muted);\r\n text-align: start;\r\n white-space: nowrap;\r\n border-bottom: 1px solid var(--jv-color-border);\r\n user-select: none;\r\n }\r\n\r\n .jv-grid-th-sortable {\r\n cursor: pointer;\r\n }\r\n\r\n .jv-grid-th-sortable:hover {\r\n background: var(--jv-color-surface);\r\n }\r\n\r\n .jv-grid-th-content {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n .jv-grid-sort-icon {\r\n font-size: 0.75rem;\r\n line-height: 1;\r\n }\r\n\r\n .jv-grid-th-select,\r\n .jv-grid-td-select {\r\n width: 3rem;\r\n text-align: center;\r\n }\r\n\r\n .jv-grid-th-actions,\r\n .jv-grid-td-actions {\r\n width: 1%;\r\n white-space: nowrap;\r\n }\r\n\r\n .jv-grid-td {\r\n padding: var(--jv-spacing-sm) var(--jv-spacing-md);\r\n color: var(--jv-color-foreground);\r\n font-size: var(--jv-density-font-size);\r\n border-bottom: 1px solid var(--jv-color-border);\r\n }\r\n\r\n .jv-grid-tr {\r\n transition: background-color 120ms ease;\r\n }\r\n\r\n .jv-grid-tr:hover {\r\n background: var(--jv-color-surface-muted);\r\n }\r\n\r\n .jv-grid-tr:focus-visible {\r\n outline: 2px solid var(--jv-color-primary);\r\n outline-offset: -2px;\r\n }\r\n\r\n .jv-grid-checkbox {\r\n width: 1rem;\r\n height: 1rem;\r\n accent-color: var(--jv-color-primary);\r\n cursor: pointer;\r\n }\r\n\r\n .jv-grid-boolean {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1.5rem;\r\n height: 1.5rem;\r\n border-radius: 999px;\r\n font-size: 0.75rem;\r\n font-weight: 700;\r\n }\r\n\r\n .jv-grid-boolean-true {\r\n background: var(--jv-color-success);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-grid-boolean-false {\r\n background: var(--jv-color-danger);\r\n color: #ffffff;\r\n }\r\n\r\n .jv-grid-empty {\r\n padding: var(--jv-spacing-xl) var(--jv-spacing-md);\r\n text-align: center;\r\n color: var(--jv-color-foreground-muted);\r\n font-style: italic;\r\n }\r\n\r\n .jv-grid-actions-group {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n\r\n\r\n .jv-grid-loading {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--jv-spacing-md);\r\n padding: var(--jv-spacing-xl);\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n\r\n .jv-grid-spinner {\r\n width: 1.25rem;\r\n height: 1.25rem;\r\n border: 2px solid var(--jv-color-border);\r\n border-right-color: var(--jv-color-primary);\r\n border-radius: 999px;\r\n animation: jv-grid-spin 0.8s linear infinite;\r\n }\r\n\r\n @keyframes jv-grid-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n\r\n .jv-grid-pagination {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--jv-spacing-md);\r\n flex-wrap: wrap;\r\n }\r\n\r\n .jv-grid-pagination-info {\r\n font-size: 0.875rem;\r\n color: var(--jv-color-foreground-muted);\r\n }\r\n\r\n .jv-grid-pagination-controls {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--jv-spacing-xs);\r\n }\r\n\r\n\r\n `,\r\n})\r\nexport class JvGridComponent<T = any> {\r\n private readonly gridId = `jv-grid-${++gridIdSequence}`;\r\n private readonly translationService = inject(JvTranslationService);\r\n\r\n readonly data = input<T[]>([]);\r\n readonly columns = input<JvGridColumn<T>[]>([]);\r\n readonly actions = input<JvGridAction<T>[]>([]);\r\n readonly options = input<Partial<JvGridOptions>>({});\r\n readonly trackBy = input<keyof T | ((row: T, index: number) => JvGridRowId) | null>(null);\r\n readonly selectedIds = input<JvGridRowId[]>([]);\r\n\r\n readonly rowClick = output<T>();\r\n readonly actionClick = output<{ actionId: string; row: T }>();\r\n readonly selectionChange = output<JvGridRowId[]>();\r\n readonly pageChange = output<JvGridPageEvent>();\r\n readonly searchChange = output<string>();\r\n readonly sortChange = output<JvGridSortState>();\r\n\r\n private readonly effectiveOptions = computed(() => ({ ...JV_GRID_DEFAULT_OPTIONS, ...this.options() }));\r\n private readonly idKey = computed(() => {\r\n const tb = this.trackBy();\r\n if (typeof tb === 'string') return tb;\r\n return null;\r\n });\r\n\r\n protected readonly resolvedOptions = this.effectiveOptions;\r\n protected readonly gridLabel = computed(() =>\r\n this.resolvedOptions().ariaLabel || `Grid ${this.gridId}`\r\n );\r\n\r\n protected readonly visibleColumns = computed(() =>\r\n this.columns().filter(col => !col.hidden)\r\n );\r\n\r\n private readonly internalSelectedIds = signal<JvGridRowId[]>([]);\r\n\r\n readonly searchTerm = signal('');\r\n readonly sortState = signal<JvGridSortState>({ columnKey: '', direction: null });\r\n readonly pageIndex = signal(0);\r\n protected readonly pageSize = computed(() => this.effectiveOptions().pageSize ?? 20);\r\n\r\n private readonly searchPageResetter = effect(() => {\r\n this.searchTerm();\r\n this.pageIndex.set(0);\r\n });\r\n\r\n private readonly selectedIdSet = computed(() => {\r\n const fromInput = this.selectedIds();\r\n const fromInternal = this.internalSelectedIds();\r\n const ids = fromInput.length > 0 ? fromInput : fromInternal;\r\n return new Set(ids);\r\n });\r\n\r\n protected readonly filteredData = computed(() => {\r\n let items = this.data();\r\n const term = this.searchTerm().trim().toLowerCase();\r\n if (!term) return items;\r\n\r\n return items.filter(row => {\r\n return this.visibleColumns().some(col => {\r\n if (col.searchable === false) return false;\r\n const value = this.getRawCellValue(row, col);\r\n if (value == null) return false;\r\n return String(value).toLowerCase().includes(term);\r\n });\r\n });\r\n });\r\n\r\n protected readonly sortedData = computed(() => {\r\n let items = this.filteredData();\r\n const { columnKey, direction } = this.sortState();\r\n if (!columnKey || !direction) return items;\r\n\r\n return [...items].sort((a, b) => {\r\n const va = this.getRawCellValue(a, this.findColumn(columnKey));\r\n const vb = this.getRawCellValue(b, this.findColumn(columnKey));\r\n if (va == null) return 1;\r\n if (vb == null) return -1;\r\n const cmp = va < vb ? -1 : va > vb ? 1 : 0;\r\n return direction === 'asc' ? cmp : -cmp;\r\n });\r\n });\r\n\r\n protected readonly totalItems = computed(() => this.sortedData().length);\r\n protected readonly totalPages = computed(() =>\r\n Math.max(1, Math.ceil(this.totalItems() / this.pageSize()))\r\n );\r\n\r\n protected readonly pagedData = computed(() => {\r\n const items = this.sortedData();\r\n const ps = this.pageSize();\r\n const page = Math.min(this.pageIndex(), this.totalPages() - 1);\r\n return items.slice(page * ps, page * ps + ps);\r\n });\r\n\r\n protected readonly pageStart = computed(() =>\r\n this.totalItems() === 0 ? 0 : this.pageIndex() * this.pageSize() + 1\r\n );\r\n\r\n protected readonly pageEnd = computed(() =>\r\n Math.min((this.pageIndex() + 1) * this.pageSize(), this.totalItems())\r\n );\r\n\r\n protected readonly pageRange = computed(() => {\r\n const total = this.totalPages();\r\n const current = this.pageIndex();\r\n const range: number[] = [];\r\n const start = Math.max(0, current - 2);\r\n const end = Math.min(total, start + 5);\r\n for (let i = start; i < end; i++) range.push(i);\r\n return range;\r\n });\r\n\r\n protected readonly allSelected = computed(() => {\r\n const rows = this.pagedData();\r\n return rows.length > 0 && rows.every(r => this.selectedIdSet().has(this.getRowId(r)));\r\n });\r\n\r\n protected readonly someSelected = computed(() => {\r\n const rows = this.pagedData();\r\n return rows.some(r => this.selectedIdSet().has(this.getRowId(r))) && !this.allSelected();\r\n });\r\n\r\n protected readonly colspan = computed(() => {\r\n let count = this.visibleColumns().length;\r\n if (this.resolvedOptions().selectable) count++;\r\n if (this.actions().length > 0) count++;\r\n return count;\r\n });\r\n\r\n protected readonly densityClass = computed(() => `jv-grid-density--${this.resolvedOptions().density ?? 'normal'}`);\r\n\r\n protected readonly t = (key: string, params?: Record<string, string | number>) =>\r\n this.translationService.translate(key, params);\r\n\r\n protected getRowId(row: T, index?: number): JvGridRowId {\r\n const idKey = this.idKey();\r\n if (idKey) return (row as any)[idKey] as JvGridRowId;\r\n const tb = this.trackBy();\r\n if (typeof tb === 'function') return tb(row, index ?? 0);\r\n if (index !== undefined) return index;\r\n return this.data().indexOf(row);\r\n }\r\n\r\n protected colKey(col: JvGridColumn<T>): string {\r\n return String(col.key);\r\n }\r\n\r\n protected getRawCellValue(row: T, col: JvGridColumn<T>): unknown {\r\n return (row as any)[col.key];\r\n }\r\n\r\n protected getCellValue(row: T, col: JvGridColumn<T>): unknown {\r\n return this.getRawCellValue(row, col);\r\n }\r\n\r\n protected formatValue(value: unknown, col: JvGridColumn<T>): string {\r\n if (value == null) return '';\r\n if (col.type === 'date' && value instanceof Date) {\r\n return value.toLocaleDateString();\r\n }\r\n return String(value);\r\n }\r\n\r\n protected getAriaSort(col: JvGridColumn<T>): 'ascending' | 'descending' | 'none' | null {\r\n if (col.sortable === false || !this.resolvedOptions().sortable) return null;\r\n if (this.sortState().columnKey !== this.colKey(col)) return 'none';\r\n if (this.sortState().direction === 'asc') return 'ascending';\r\n if (this.sortState().direction === 'desc') return 'descending';\r\n return 'none';\r\n }\r\n\r\n protected getSortLabel(col: JvGridColumn<T>): string {\r\n const ariaSort = this.getAriaSort(col);\r\n if (ariaSort === 'ascending') return `${col.header} - ${this.t('grid.sortAsc')}`;\r\n if (ariaSort === 'descending') return `${col.header} - ${this.t('grid.sortDesc')}`;\r\n return `${col.header} - ${this.t('grid.sortAsc')} ${this.t('grid.sortDesc')}`;\r\n }\r\n\r\n private findColumn(key: string): JvGridColumn<T> {\r\n return this.columns().find(c => this.colKey(c) === key) ?? { key, header: key };\r\n }\r\n\r\n protected toggleSort(col: JvGridColumn<T>, event?: Event) {\r\n if (!event || !(event instanceof KeyboardEvent && event.key === ' ')) {\r\n if (col.sortable === false || !this.resolvedOptions().sortable) return;\r\n if (event instanceof KeyboardEvent) event.preventDefault();\r\n\r\n const key = this.colKey(col);\r\n const current = this.sortState();\r\n let direction: JvGridSortDirection;\r\n\r\n if (current.columnKey !== key) {\r\n direction = 'asc';\r\n } else if (current.direction === 'asc') {\r\n direction = 'desc';\r\n } else {\r\n direction = null;\r\n }\r\n\r\n this.sortState.set({ columnKey: direction ? key : '', direction });\r\n this.pageIndex.set(0);\r\n this.sortChange.emit({ columnKey: direction ? key : '', direction });\r\n }\r\n }\r\n\r\n protected readonly actionVariant = (v?: 'default' | 'primary' | 'danger'): JvIntent =>\r\n v === 'primary' ? 'primary' : v === 'danger' ? 'danger' : 'ghost';\r\n\r\n protected onSearchInput(value: string) {\r\n this.searchTerm.set(value);\r\n this.searchChange.emit(value);\r\n }\r\n\r\n protected goToPage(page: number) {\r\n if (page >= 0 && page < this.totalPages()) {\r\n this.pageIndex.set(page);\r\n this.pageChange.emit({ pageIndex: page, pageSize: this.pageSize() });\r\n }\r\n }\r\n\r\n protected isSelected(row: T): boolean {\r\n return this.selectedIdSet().has(this.getRowId(row));\r\n }\r\n\r\n protected toggleRow(row: T) {\r\n const id = this.getRowId(row);\r\n this.internalSelectedIds.update(ids => {\r\n const set = new Set(ids);\r\n if (set.has(id)) set.delete(id);\r\n else set.add(id);\r\n return Array.from(set);\r\n });\r\n this.selectionChange.emit(this.internalSelectedIds());\r\n }\r\n\r\n protected toggleSelectAll(checked: boolean) {\r\n this.internalSelectedIds.update(ids => {\r\n const set = new Set(ids);\r\n const rows = this.pagedData();\r\n rows.forEach(r => {\r\n if (checked) set.add(this.getRowId(r));\r\n else set.delete(this.getRowId(r));\r\n });\r\n return Array.from(set);\r\n });\r\n this.selectionChange.emit(this.internalSelectedIds());\r\n }\r\n\r\n protected onRowClick(event: Event | T, row?: T) {\r\n if (event instanceof Event) {\r\n event.preventDefault();\r\n this.rowClick.emit(row!);\r\n } else {\r\n this.rowClick.emit(event);\r\n }\r\n }\r\n\r\n protected onActionClick(action: JvGridAction<T>, row: T) {\r\n this.actionClick.emit({ actionId: action.id, row });\r\n }\r\n\r\n protected getRowLabel(row: T, index: number): string {\r\n const label = this.visibleColumns()\r\n .slice(0, 2)\r\n .map(col => this.getCellValue(row, col))\r\n .filter(v => v != null)\r\n .join(' - ');\r\n return `${label}${this.isSelected(row) ? ` (${this.t('grid.selected')})` : ''}`;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@devjuliovilla/jv-ui",
3
+ "version": "1.5.0",
4
+ "description": "Accessibility-first Angular component library — components, forms, data grids, dialogs, layout, services, and i18n infrastructure built with signals and standalone APIs.",
5
+ "author": "@devjuliovilla",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/devjuliovilla/JV_UI.git"
10
+ },
11
+ "homepage": "https://github.com/devjuliovilla/JV_UI#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/devjuliovilla/JV_UI/issues"
14
+ },
15
+ "keywords": [
16
+ "angular",
17
+ "components",
18
+ "ui-library",
19
+ "accessible",
20
+ "signals",
21
+ "standalone",
22
+ "grid",
23
+ "forms",
24
+ "i18n",
25
+ "wcag"
26
+ ],
27
+ "peerDependencies": {
28
+ "@angular/common": "^21.2.0",
29
+ "@angular/core": "^21.2.0"
30
+ },
31
+ "dependencies": {
32
+ "tslib": "^2.3.0"
33
+ },
34
+ "sideEffects": false,
35
+ "module": "fesm2022/devjuliovilla-jv-ui.mjs",
36
+ "typings": "types/devjuliovilla-jv-ui.d.ts",
37
+ "exports": {
38
+ "./package.json": {
39
+ "default": "./package.json"
40
+ },
41
+ ".": {
42
+ "types": "./types/devjuliovilla-jv-ui.d.ts",
43
+ "default": "./fesm2022/devjuliovilla-jv-ui.mjs"
44
+ }
45
+ },
46
+ "type": "module"
47
+ }