{"version":3,"file":"vespera-ui-angular.mjs","sources":["../../src/button.component.ts","../../src/badge.component.ts","../../src/display.component.ts","../../src/media.component.ts","../../src/feedback.component.ts","../../src/card.component.ts","../../src/alert.component.ts","../../src/field.component.ts","../../src/toggle.component.ts","../../src/forms.component.ts","../../src/icon.component.ts","../../src/nav.component.ts","../../src/data.component.ts","../../src/structure.component.ts","../../src/charts.component.ts","../../src/extras.component.ts","../../src/tree.component.ts","../../src/otp.component.ts","../../src/area-bar.component.ts","../../src/overlay.component.ts","../../src/anchored.component.ts","../../src/tooltip.component.ts","../../src/toast.component.ts","../../src/command-palette.component.ts","../../src/select.component.ts","../../src/file-dropzone.component.ts","../../src/date-picker.component.ts","../../src/event-calendar.component.ts","../../src/side-nav.component.ts","../../src/block-state.component.ts","../../src/blocks.component.ts","../../src/blocks2.component.ts","../../src/kanban.component.ts","../../src/vespera-ui-angular.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\n\nexport type ButtonVariant = 'primary' | 'ghost' | 'subtle' | 'outline' | 'danger';\n\n@Component({\n  selector: 'vsp-button',\n  template: `<button\n    [class]=\"cls\"\n    [disabled]=\"disabled || loading\"\n    [attr.aria-busy]=\"loading || null\"\n  >\n    @if (loading) {\n      <span class=\"ui-spinner\" aria-hidden=\"true\"></span>\n    }\n    @if (loading && loadingText != null) {\n      {{ loadingText }}\n    } @else {\n      <ng-content />\n    }\n  </button>`,\n})\nexport class VspButton {\n  @Input() variant: ButtonVariant = 'ghost';\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\n  @Input() loading = false;\n  @Input() loadingText?: string;\n  @Input() fullWidth = false;\n  @Input() disabled = false;\n\n  get cls(): string {\n    return [\n      'btn',\n      `btn-${this.variant}`,\n      this.size === 'sm' ? 'btn-sm' : '',\n      this.size === 'lg' ? 'btn-lg' : '',\n      this.fullWidth ? 'btn-block' : '',\n    ]\n      .filter(Boolean)\n      .join(' ');\n  }\n}\n","import { Component, Input } from '@angular/core';\n\nexport type BadgeTone = 'pos' | 'neg' | 'warn' | 'info' | 'muted';\n\n@Component({\n  selector: 'vsp-badge',\n  template: `<span [class]=\"cls\">\n    @if (dot) {\n      <i></i>\n    }\n    <ng-content />\n  </span>`,\n})\nexport class VspBadge {\n  @Input() tone: BadgeTone = 'muted';\n  @Input() dot = false;\n\n  get cls(): string {\n    return `badge badge-${this.tone}`;\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'vsp-tag',\n  template: `<span class=\"ui-tag\">\n    <ng-content />\n    <button type=\"button\" aria-label=\"Remove\" (click)=\"remove.emit()\">×</button>\n  </span>`,\n})\nexport class VspTag {\n  @Output() remove = new EventEmitter<void>();\n}\n\n@Component({\n  selector: 'vsp-kbd',\n  template: `<kbd class=\"ui-kbd\"><ng-content /></kbd>`,\n})\nexport class VspKbd {}\n\n@Component({\n  selector: 'vsp-divider',\n  template: `<hr [class]=\"cls\" />`,\n})\nexport class VspDivider {\n  @Input() vertical = false;\n  get cls(): string {\n    return this.vertical ? 'ui-divider v' : 'ui-divider';\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type AvatarStatus = 'online' | 'offline' | 'away' | 'busy';\nconst AVATAR_STATUS: Record<AvatarStatus, string> = {\n  online: 'var(--success)',\n  offline: 'var(--text-faint)',\n  away: 'var(--warning)',\n  busy: 'var(--danger)',\n};\n\n@Component({\n  selector: 'vsp-avatar',\n  template: `<span style=\"position: relative; display: inline-flex; flex-shrink: 0\">\n    <span\n      class=\"vsp-avatar\"\n      [style.width.px]=\"size\"\n      [style.height.px]=\"size\"\n      [style.fontSize.px]=\"size * 0.38\"\n      [style.borderRadius]=\"radius\"\n      [style.background]=\"bg\"\n      style=\"overflow: hidden\"\n    >\n      @if (src) {\n        <img [src]=\"src\" [alt]=\"alt ?? name\" style=\"width: 100%; height: 100%; object-fit: cover\" />\n      } @else {\n        {{ initials }}\n      }\n    </span>\n    @if (status) {\n      <span\n        [attr.aria-label]=\"status\"\n        [style.width.px]=\"dot\"\n        [style.height.px]=\"dot\"\n        [style.background]=\"statusColor\"\n        style=\"position: absolute; right: 0; bottom: 0; border-radius: 50%; border: 2px solid var(--surface-1)\"\n      ></span>\n    }\n  </span>`,\n})\nexport class VspAvatar {\n  @Input() name = '';\n  @Input() hue = 0;\n  @Input() size = 34;\n  @Input() src?: string;\n  @Input() alt?: string;\n  @Input() status?: AvatarStatus;\n  @Input() shape: 'circle' | 'square' = 'circle';\n  get initials(): string {\n    return this.name\n      .split(' ')\n      .map((s) => s.charAt(0))\n      .slice(0, 2)\n      .join('')\n      .toUpperCase();\n  }\n  get radius(): string {\n    return this.shape === 'square' ? 'var(--r-sm)' : '50%';\n  }\n  get dot(): number {\n    return Math.max(8, Math.round(this.size * 0.28));\n  }\n  get statusColor(): string {\n    return this.status ? AVATAR_STATUS[this.status] : '';\n  }\n  get bg(): string {\n    return this.src\n      ? 'var(--surface-3)'\n      : `linear-gradient(140deg, oklch(0.62 0.16 ${this.hue}), oklch(0.55 0.17 ${(this.hue + 50) % 360}))`;\n  }\n}\n\nexport interface Person {\n  name: string;\n  hue?: number;\n  src?: string;\n}\n\n@Component({\n  selector: 'vsp-avatar-group',\n  imports: [VspAvatar],\n  template: `<div style=\"display: flex; align-items: center\">\n    @for (p of shown; track $index) {\n      <span\n        [style.marginLeft.px]=\"$index ? -10 : 0\"\n        [style.zIndex]=\"shown.length - $index\"\n        style=\"border: 2px solid var(--surface-1); border-radius: 50%; position: relative\"\n      >\n        <vsp-avatar [name]=\"p.name\" [hue]=\"p.hue ?? 0\" [src]=\"p.src\" [size]=\"size\" />\n      </span>\n    }\n    @if (extra > 0) {\n      <span\n        [style.width.px]=\"size\"\n        [style.height.px]=\"size\"\n        [style.fontSize.px]=\"size * 0.34\"\n        style=\"margin-left: -10px; border-radius: 50%; display: grid; place-items: center; background: var(--surface-3); border: 2px solid var(--surface-1); font-weight: 700; color: var(--text-dim)\"\n        >+{{ extra }}</span\n      >\n    }\n  </div>`,\n})\nexport class VspAvatarGroup {\n  @Input() people: Person[] = [];\n  @Input() max = 4;\n  @Input() size = 32;\n  get shown(): Person[] {\n    return this.people.slice(0, this.max);\n  }\n  get extra(): number {\n    return this.people.length - this.shown.length;\n  }\n}\n\n@Component({\n  selector: 'vsp-segmented',\n  template: `<div class=\"ui-seg\">\n    @for (o of options; track o) {\n      <button type=\"button\" [class.on]=\"value === o\" (click)=\"pick(o)\">{{ o }}</button>\n    }\n  </div>`,\n})\nexport class VspSegmented {\n  @Input() value?: string;\n  @Output() valueChange = new EventEmitter<string>();\n  @Input() options: string[] = [];\n  pick(o: string): void {\n    this.value = o;\n    this.valueChange.emit(o);\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'vsp-spinner',\n  template: `<span\n    [class]=\"cls\"\n    [attr.role]=\"label ? 'status' : null\"\n    [attr.aria-label]=\"label\"\n    [attr.aria-hidden]=\"label ? null : 'true'\"\n  ></span>`,\n})\nexport class VspSpinner {\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\n  @Input() label?: string;\n  get cls(): string {\n    return 'ui-spinner' + (this.size === 'sm' ? ' sm' : '') + (this.size === 'lg' ? ' lg' : '');\n  }\n}\n\nexport type IconButtonVariant = 'ghost' | 'subtle' | 'danger';\n\n@Component({\n  selector: 'vsp-icon-button',\n  template: `<button\n    type=\"button\"\n    [class]=\"cls\"\n    [attr.aria-label]=\"label\"\n    [disabled]=\"disabled || loading\"\n    [attr.aria-busy]=\"loading || null\"\n  >\n    @if (loading) {\n      <span class=\"ui-spinner\" aria-hidden=\"true\"></span>\n    } @else {\n      <ng-content />\n    }\n  </button>`,\n})\nexport class VspIconButton {\n  @Input() label?: string;\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\n  @Input() variant?: IconButtonVariant;\n  @Input() loading = false;\n  @Input() disabled = false;\n  get cls(): string {\n    return [\n      'vsp-icon-btn',\n      this.size === 'sm' ? 'vsp-icon-btn-sm' : '',\n      this.size === 'lg' ? 'vsp-icon-btn-lg' : '',\n      this.variant ? `vsp-icon-btn-${this.variant}` : '',\n    ]\n      .filter(Boolean)\n      .join(' ');\n  }\n}\n\n@Component({\n  selector: 'vsp-progress',\n  template: `<div\n    [class]=\"indeterminate ? 'meter indeterminate' : 'meter'\"\n    [style.height.px]=\"height\"\n    role=\"progressbar\"\n    [attr.aria-label]=\"label\"\n    [attr.aria-valuemin]=\"indeterminate ? null : 0\"\n    [attr.aria-valuemax]=\"indeterminate ? null : max\"\n    [attr.aria-valuenow]=\"indeterminate ? null : value\"\n  >\n    @if (indeterminate) {\n      <i [style.background]=\"tone\"></i>\n    } @else {\n      <i [style.width.%]=\"pct\" [style.background]=\"tone\" style=\"transition: width 0.3s\"></i>\n    }\n  </div>`,\n})\nexport class VspProgress {\n  @Input() value = 0;\n  @Input() tone?: string;\n  @Input() height = 6;\n  @Input() max = 100;\n  @Input() indeterminate = false;\n  @Input() label?: string;\n  get pct(): number {\n    return Math.min(100, Math.max(0, (this.value / this.max) * 100));\n  }\n}\n\n@Component({\n  selector: 'vsp-skeleton',\n  template: `<div\n    class=\"skel\"\n    [style.width]=\"px(w)\"\n    [style.height]=\"px(h)\"\n    [style.borderRadius]=\"px(r)\"\n  ></div>`,\n})\nexport class VspSkeleton {\n  @Input() w: string | number = '100%';\n  @Input() h: string | number = 12;\n  @Input() r: number = 7;\n  px(v: string | number): string {\n    return typeof v === 'number' ? `${v}px` : v;\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'vsp-card',\n  template: `<div [class]=\"cls\"><ng-content /></div>`,\n})\nexport class VspCard {\n  @Input() pad = false;\n  get cls(): string {\n    return this.pad ? 'card card-pad' : 'card';\n  }\n}\n\n@Component({\n  selector: 'vsp-card-head',\n  template: `<div class=\"card-head\">\n    <div style=\"min-width: 0\">\n      <div class=\"ttl\">{{ title }}</div>\n      @if (desc) {\n        <div class=\"eyebrow\" style=\"margin-top: 3px\">{{ desc }}</div>\n      }\n    </div>\n    <div class=\"vsp-top-spacer\"></div>\n    <ng-content select=\"[slot=right]\" />\n  </div>`,\n})\nexport class VspCardHead {\n  @Input() title?: string;\n  @Input() desc?: string;\n}\n","import { Component, Input } from '@angular/core';\n\nexport type AlertTone = 'info' | 'pos' | 'warn' | 'neg';\n\n@Component({\n  selector: 'vsp-alert',\n  template: `<div [class]=\"cls\">\n    <ng-content select=\"[slot=icon]\" />\n    <div style=\"flex: 1\">\n      @if (title) {\n        <div class=\"ui-alert-title\">{{ title }}</div>\n      }\n      <div class=\"ui-alert-body\"><ng-content /></div>\n    </div>\n    <ng-content select=\"[slot=action]\" />\n  </div>`,\n})\nexport class VspAlert {\n  @Input() tone: AlertTone = 'info';\n  @Input() title?: string;\n  get cls(): string {\n    return `ui-alert ${this.tone}`;\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'vsp-field',\n  template: `<div class=\"ui-field\">\n    @if (label) {\n      <label class=\"ui-label\" [attr.for]=\"htmlFor\">\n        <span\n          >{{ label }}\n          @if (required) {\n            <span class=\"req\"> *</span>\n          }\n        </span>\n      </label>\n    }\n    <ng-content />\n    @if (error || hint) {\n      <span [class]=\"hintCls\">{{ error || hint }}</span>\n    }\n  </div>`,\n})\nexport class VspField {\n  @Input() label?: string;\n  @Input() required = false;\n  @Input() hint?: string;\n  @Input() error?: string;\n  @Input() htmlFor?: string;\n  get hintCls(): string {\n    return this.error ? 'ui-hint err' : 'ui-hint';\n  }\n}\n\n@Component({\n  selector: 'vsp-input',\n  template: `<input [class]=\"cls\" [value]=\"value\" (input)=\"onInput($event)\" />`,\n})\nexport class VspInput {\n  @Input() value = '';\n  @Output() valueChange = new EventEmitter<string>();\n  @Input() invalid = false;\n  get cls(): string {\n    return this.invalid ? 'ui-input invalid' : 'ui-input';\n  }\n  onInput(e: Event): void {\n    this.value = (e.target as HTMLInputElement).value;\n    this.valueChange.emit(this.value);\n  }\n}\n\n@Component({\n  selector: 'vsp-textarea',\n  template: `<textarea class=\"ui-textarea\" [value]=\"value\" (input)=\"onInput($event)\"></textarea>`,\n})\nexport class VspTextarea {\n  @Input() value = '';\n  @Output() valueChange = new EventEmitter<string>();\n  onInput(e: Event): void {\n    this.value = (e.target as HTMLTextAreaElement).value;\n    this.valueChange.emit(this.value);\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'vsp-switch',\n  template: `<button\n    type=\"button\"\n    [disabled]=\"disabled\"\n    [class]=\"cls\"\n    [attr.aria-pressed]=\"checked\"\n    aria-label=\"Toggle\"\n    (click)=\"toggle()\"\n  ></button>`,\n})\nexport class VspSwitch {\n  @Input() checked = false;\n  @Output() checkedChange = new EventEmitter<boolean>();\n  @Input() size?: 'sm';\n  @Input() disabled = false;\n  get cls(): string {\n    return ['ui-switch', this.size === 'sm' && 'sm', this.checked && 'on']\n      .filter(Boolean)\n      .join(' ');\n  }\n  toggle(): void {\n    this.checked = !this.checked;\n    this.checkedChange.emit(this.checked);\n  }\n}\n\n@Component({\n  selector: 'vsp-checkbox',\n  template: `<label class=\"ui-opt\" [style.opacity]=\"disabled ? 0.5 : 1\">\n    <input\n      type=\"checkbox\"\n      [checked]=\"checked\"\n      [disabled]=\"disabled\"\n      (change)=\"toggle()\"\n      style=\"position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0\"\n    />\n    <span\n      [id]=\"id\"\n      role=\"checkbox\"\n      [attr.aria-checked]=\"indeterminate ? 'mixed' : checked\"\n      [attr.aria-invalid]=\"invalid || null\"\n      [class]=\"checkCls\"\n    ></span>\n    <span>\n      <span>{{ label }}</span>\n      @if (sub) {\n        <span class=\"ui-opt-sub\">{{ sub }}</span>\n      }\n    </span>\n  </label>`,\n})\nexport class VspCheckbox {\n  @Input() checked = false;\n  @Output() checkedChange = new EventEmitter<boolean>();\n  @Input() label?: string;\n  @Input() sub?: string;\n  @Input() disabled = false;\n  @Input() indeterminate = false;\n  @Input() invalid = false;\n  @Input() id?: string;\n  get checkCls(): string {\n    return (\n      'ui-check' +\n      (this.checked || this.indeterminate ? ' on' : '') +\n      (this.indeterminate ? ' mixed' : '') +\n      (this.invalid ? ' invalid' : '')\n    );\n  }\n  toggle(): void {\n    this.checked = !this.checked;\n    this.checkedChange.emit(this.checked);\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type NativeSelectOption =\n  | string\n  | { value: string; label: string; sub?: string; disabled?: boolean };\n\nconst val = (o: NativeSelectOption): string => (typeof o === 'string' ? o : o.value);\nconst lbl = (o: NativeSelectOption): string => (typeof o === 'string' ? o : o.label);\nconst subOf = (o: NativeSelectOption): string | undefined =>\n  typeof o === 'object' ? o.sub : undefined;\n\n@Component({\n  selector: 'vsp-radio',\n  template: `<label class=\"ui-opt\" [style.opacity]=\"disabled ? 0.5 : 1\">\n    <input\n      type=\"radio\"\n      [name]=\"name\"\n      [value]=\"value\"\n      [checked]=\"checked\"\n      [disabled]=\"disabled\"\n      (change)=\"disabled ? null : select.emit()\"\n      style=\"position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0\"\n    />\n    <span [class]=\"dotCls\"></span>\n    <span>\n      <span>{{ label }}</span>\n      @if (sub) {\n        <span class=\"ui-opt-sub\">{{ sub }}</span>\n      }\n    </span>\n  </label>`,\n})\nexport class VspRadio {\n  @Input() checked = false;\n  @Input() label?: string;\n  @Input() sub?: string;\n  @Input() name?: string;\n  @Input() value?: string;\n  @Input() disabled = false;\n  @Output() select = new EventEmitter<void>();\n  get dotCls(): string {\n    return this.checked ? 'ui-radio-dot on' : 'ui-radio-dot';\n  }\n}\n\n@Component({\n  selector: 'vsp-radio-group',\n  imports: [VspRadio],\n  template: `<div\n    role=\"radiogroup\"\n    [style.flex-direction]=\"orientation === 'horizontal' ? 'row' : 'column'\"\n    [style.gap.px]=\"orientation === 'horizontal' ? 18 : 12\"\n    [style.flex-wrap]=\"orientation === 'horizontal' ? 'wrap' : null\"\n    style=\"display: flex\"\n  >\n    @for (o of options; track val(o)) {\n      <vsp-radio\n        [name]=\"name\"\n        [label]=\"lbl(o)\"\n        [sub]=\"subOf(o)\"\n        [value]=\"val(o)\"\n        [disabled]=\"disabled || disOf(o)\"\n        [checked]=\"value === val(o)\"\n        (select)=\"pick(val(o))\"\n      />\n    }\n  </div>`,\n})\nexport class VspRadioGroup {\n  @Input() value?: string;\n  @Output() valueChange = new EventEmitter<string>();\n  @Input() options: NativeSelectOption[] = [];\n  @Input() name = 'vsp-radio';\n  @Input() disabled = false;\n  @Input() orientation: 'vertical' | 'horizontal' = 'vertical';\n  val = val;\n  lbl = lbl;\n  subOf = subOf;\n  disOf(o: NativeSelectOption): boolean {\n    return typeof o === 'object' && !!o.disabled;\n  }\n  pick(v: string): void {\n    this.value = v;\n    this.valueChange.emit(v);\n  }\n}\n\n@Component({\n  selector: 'vsp-slider',\n  template: `<input\n    type=\"range\"\n    class=\"ui-slider\"\n    [id]=\"id\"\n    [value]=\"value\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [step]=\"step\"\n    [disabled]=\"disabled\"\n    [attr.aria-label]=\"ariaLabel\"\n    (input)=\"onInput($event)\"\n  />`,\n})\nexport class VspSlider {\n  @Input() value = 0;\n  @Output() valueChange = new EventEmitter<number>();\n  @Input() min = 0;\n  @Input() max = 100;\n  @Input() step = 1;\n  @Input() disabled = false;\n  @Input() id?: string;\n  @Input('aria-label') ariaLabel?: string;\n  onInput(e: Event): void {\n    this.value = Number((e.target as HTMLInputElement).value);\n    this.valueChange.emit(this.value);\n  }\n}\n\n@Component({\n  selector: 'vsp-native-select',\n  template: `<select class=\"ui-select\" [value]=\"value\" (change)=\"onChange($event)\">\n    @for (o of options; track val(o)) {\n      <option [value]=\"val(o)\">{{ lbl(o) }}</option>\n    }\n  </select>`,\n})\nexport class VspNativeSelect {\n  @Input() value?: string;\n  @Output() valueChange = new EventEmitter<string>();\n  @Input() options: NativeSelectOption[] = [];\n  val = val;\n  lbl = lbl;\n  onChange(e: Event): void {\n    this.value = (e.target as HTMLSelectElement).value;\n    this.valueChange.emit(this.value);\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n/** Inline icon by name — keeps the Angular wrapper free of the icons package. */\n@Component({\n  selector: 'vsp-icon',\n  template: `<svg\n    viewBox=\"0 0 24 24\"\n    [attr.width]=\"size\"\n    [attr.height]=\"size\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    stroke-width=\"2\"\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n  >\n    @switch (name) {\n      @case ('plus') {\n        <path d=\"M12 5v14M5 12h14\" />\n      }\n      @case ('check') {\n        <path d=\"m20 6-11 11-5-5\" />\n      }\n      @case ('x') {\n        <path d=\"M6 6l12 12M18 6 6 18\" />\n      }\n      @case ('filter') {\n        <path d=\"M3 5h18l-7 8v6l-4-2v-4z\" />\n      }\n      @case ('bolt') {\n        <path d=\"M13 2 4 14h7l-1 8 9-12h-7z\" />\n      }\n      @case ('shield') {\n        <path d=\"M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6z\" />\n      }\n      @case ('arrowUp') {\n        <path d=\"M12 19V5M6 11l6-6 6 6\" />\n      }\n      @case ('more') {\n        <circle cx=\"5\" cy=\"12\" r=\"1.4\" />\n        <circle cx=\"12\" cy=\"12\" r=\"1.4\" />\n        <circle cx=\"19\" cy=\"12\" r=\"1.4\" />\n      }\n      @case ('download') {\n        <path d=\"M12 4v11M7 11l5 5 5-5\" />\n        <path d=\"M5 20h14\" />\n      }\n      @case ('eye') {\n        <path d=\"M2 12s4-7 10-7 10 7 10 7-4 7-10 7-10-7-10-7z\" />\n        <circle cx=\"12\" cy=\"12\" r=\"3\" />\n      }\n      @case ('refresh') {\n        <path d=\"M21 12a9 9 0 1 1-2.6-6.4\" />\n        <path d=\"M21 4v5h-5\" />\n      }\n      @case ('doc') {\n        <path d=\"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z\" />\n        <path d=\"M14 3v5h5M9 13h6M9 17h6\" />\n      }\n      @case ('mail') {\n        <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n        <path d=\"m3 7 9 6 9-6\" />\n      }\n      @case ('users') {\n        <circle cx=\"9\" cy=\"8\" r=\"3\" />\n        <path d=\"M3 20a6 6 0 0 1 12 0\" />\n        <path d=\"M16 5.2a3 3 0 0 1 0 5.6M21 20a6 6 0 0 0-4-5.6\" />\n      }\n      @case ('bell') {\n        <path d=\"M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9\" />\n        <path d=\"M13.7 21a2 2 0 0 1-3.4 0\" />\n      }\n      @case ('clock') {\n        <circle cx=\"12\" cy=\"12\" r=\"9\" />\n        <path d=\"M12 7v5l3 2\" />\n      }\n      @case ('inbox') {\n        <path d=\"M22 12h-6l-2 3h-4l-2-3H2\" />\n        <path\n          d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"\n        />\n      }\n      @case ('settings') {\n        <circle cx=\"12\" cy=\"12\" r=\"3\" />\n        <path\n          d=\"M19.4 15a1.7 1.7 0 0 0 .34 1.87l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.7 1.7 0 0 0-1.87-.34 1.7 1.7 0 0 0-1 1.56V21a2 2 0 0 1-4 0v-.09A1.7 1.7 0 0 0 8.6 19.4a1.7 1.7 0 0 0-1.87.34l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.7 1.7 0 0 0 .34-1.87 1.7 1.7 0 0 0-1.56-1H2a2 2 0 0 1 0-4h.09A1.7 1.7 0 0 0 3.6 8.6a1.7 1.7 0 0 0-.34-1.87l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.7 1.7 0 0 0 1.87.34H8a1.7 1.7 0 0 0 1-1.56V2a2 2 0 0 1 4 0v.09a1.7 1.7 0 0 0 1 1.56 1.7 1.7 0 0 0 1.87-.34l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.7 1.7 0 0 0-.34 1.87V8a1.7 1.7 0 0 0 1.56 1H22a2 2 0 0 1 0 4h-.09a1.7 1.7 0 0 0-1.51 1z\"\n        />\n      }\n    }\n  </svg>`,\n})\nexport class VspIcon {\n  @Input() name = '';\n  @Input() size = 16;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { VspIcon } from './icon.component';\n\nexport type TabItem = string | { value: string; label: string; count?: number; disabled?: boolean };\nexport type BreadcrumbItem = string | { label: string; href?: string; icon?: string };\nconst BC_ELL = { ellipsis: true };\n\n@Component({\n  selector: 'vsp-tabs',\n  template: `<div class=\"ui-tabs\" style=\"align-items: center\">\n    @for (t of tabs; track id(t)) {\n      <button type=\"button\" [class]=\"cls(t)\" [disabled]=\"dis(t)\" (click)=\"pick(id(t))\">\n        {{ lbl(t) }}\n        @if (cnt(t) != null) {\n          <span class=\"badge badge-muted\" style=\"margin-left: 7px\">{{ cnt(t) }}</span>\n        }\n      </button>\n    }\n    <div style=\"flex: 1\"></div>\n    <ng-content select=\"[slot=right]\" />\n  </div>`,\n})\nexport class VspTabs {\n  @Input() tabs: TabItem[] = [];\n  @Input() value?: string;\n  @Output() valueChange = new EventEmitter<string>();\n  id(t: TabItem): string {\n    return typeof t === 'string' ? t : t.value;\n  }\n  lbl(t: TabItem): string {\n    return typeof t === 'string' ? t : t.label;\n  }\n  cnt(t: TabItem): number | undefined {\n    return typeof t === 'object' ? t.count : undefined;\n  }\n  dis(t: TabItem): boolean | undefined {\n    return typeof t === 'object' ? t.disabled : undefined;\n  }\n  cls(t: TabItem): string {\n    return 'ui-tab' + (this.value === this.id(t) ? ' on' : '');\n  }\n  pick(v: string): void {\n    this.value = v;\n    this.valueChange.emit(v);\n  }\n}\n\n@Component({\n  selector: 'vsp-breadcrumb',\n  imports: [VspIcon],\n  template: `<nav\n    aria-label=\"Breadcrumb\"\n    style=\"display: flex; align-items: center; gap: 7px; font-size: 12.5px\"\n  >\n    @for (it of display; track $index; let i = $index, last = $last) {\n      @if (i > 0) {\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"13\"\n          height=\"13\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          style=\"color: var(--text-faint)\"\n        >\n          <path d=\"M9 18l6-6-6-6\" />\n        </svg>\n      }\n      @if (isEll(it)) {\n        <span style=\"color: var(--text-faint)\">…</span>\n      } @else if (hrefOf(it) && !last) {\n        <a\n          [href]=\"hrefOf(it)\"\n          style=\"text-decoration: none; display: inline-flex; align-items: center; gap: 5px\"\n          [style.color]=\"last ? 'var(--text)' : 'var(--text-dim)'\"\n          [style.fontWeight]=\"last ? 600 : 500\"\n        >\n          @if (iconOf(it)) {\n            <vsp-icon [name]=\"iconOf(it)!\" [size]=\"14\" />\n          }\n          {{ lbl(it) }}\n        </a>\n      } @else {\n        <span\n          style=\"display: inline-flex; align-items: center; gap: 5px\"\n          [style.color]=\"last ? 'var(--text)' : 'var(--text-dim)'\"\n          [style.fontWeight]=\"last ? 600 : 500\"\n        >\n          @if (iconOf(it)) {\n            <vsp-icon [name]=\"iconOf(it)!\" [size]=\"14\" />\n          }\n          {{ lbl(it) }}\n        </span>\n      }\n    }\n  </nav>`,\n})\nexport class VspBreadcrumb {\n  @Input() items: BreadcrumbItem[] = [];\n  @Input() maxItems?: number;\n  readonly ELL = BC_ELL;\n  get display(): unknown[] {\n    if (this.maxItems && this.items.length > this.maxItems)\n      return [\n        this.items[0],\n        this.ELL,\n        ...this.items.slice(this.items.length - (this.maxItems - 1)),\n      ];\n    return this.items;\n  }\n  isEll(it: unknown): boolean {\n    return it === this.ELL;\n  }\n  private obj(it: unknown): { label: string; href?: string; icon?: string } | null {\n    return typeof it === 'object' && it !== this.ELL\n      ? (it as { label: string; href?: string; icon?: string })\n      : null;\n  }\n  lbl(it: unknown): string {\n    return this.obj(it)?.label ?? (it as string);\n  }\n  hrefOf(it: unknown): string | undefined {\n    return this.obj(it)?.href;\n  }\n  iconOf(it: unknown): string | undefined {\n    return this.obj(it)?.icon;\n  }\n}\n\ninterface PageItem {\n  gap: boolean;\n  n: number;\n}\n\n@Component({\n  selector: 'vsp-pagination',\n  template: `<div style=\"display: flex; gap: 4px; align-items: center\">\n    <button\n      type=\"button\"\n      class=\"btn btn-ghost btn-sm\"\n      [disabled]=\"page === 0\"\n      aria-label=\"Previous page\"\n      (click)=\"go(page - 1)\"\n    >\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"14\"\n        height=\"14\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M15 18l-6-6 6-6\" />\n      </svg>\n    </button>\n    @for (item of nums; track $index) {\n      @if (item.gap) {\n        <span class=\"mono\" style=\"padding: 0 6px; color: var(--text-faint)\">…</span>\n      } @else {\n        <button\n          type=\"button\"\n          [class]=\"numCls(item.n)\"\n          style=\"min-width: 32px; padding: 0\"\n          (click)=\"go(item.n)\"\n        >\n          {{ item.n + 1 }}\n        </button>\n      }\n    }\n    <button\n      type=\"button\"\n      class=\"btn btn-ghost btn-sm\"\n      [disabled]=\"page >= pages - 1\"\n      aria-label=\"Next page\"\n      (click)=\"go(page + 1)\"\n    >\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"14\"\n        height=\"14\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M9 18l6-6-6-6\" />\n      </svg>\n    </button>\n  </div>`,\n})\nexport class VspPagination {\n  @Input() page = 0;\n  @Output() pageChange = new EventEmitter<number>();\n  @Input() pages = 1;\n  get nums(): PageItem[] {\n    const r: PageItem[] = [];\n    for (let i = 0; i < this.pages; i++) {\n      if (i === 0 || i === this.pages - 1 || Math.abs(i - this.page) <= 1)\n        r.push({ gap: false, n: i });\n      else if (!r[r.length - 1]?.gap) r.push({ gap: true, n: -1 });\n    }\n    return r;\n  }\n  numCls(n: number): string {\n    return 'btn btn-sm ' + (n === this.page ? 'btn-primary' : 'btn-subtle');\n  }\n  go(p: number): void {\n    this.page = p;\n    this.pageChange.emit(p);\n  }\n}\n\nexport type StepStatus = 'done' | 'active' | 'pending' | 'error';\nexport type StepperItem = string | { label: string; status?: StepStatus };\n\n@Component({\n  selector: 'vsp-stepper',\n  template: `<div [class]=\"'ui-steps' + (orientation === 'vertical' ? ' vertical' : '')\">\n    @for (s of steps; track $index; let i = $index) {\n      @if (i > 0) {\n        <div [class]=\"barCls(i)\"></div>\n      }\n      @if (onStepClick) {\n        <button type=\"button\" [class]=\"stepCls(i, s)\" (click)=\"onStepClick(i)\">\n          <span class=\"ui-step-dot\">\n            @if (statusOf(i, s) === 'done') {\n              <svg\n                viewBox=\"0 0 24 24\"\n                width=\"14\"\n                height=\"14\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                stroke-width=\"2\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              >\n                <path d=\"M20 6L9 17l-5-5\" />\n              </svg>\n            } @else if (statusOf(i, s) === 'error') {\n              !\n            } @else {\n              {{ i + 1 }}\n            }\n          </span>\n          <span class=\"ui-step-label\">{{ lbl(s) }}</span>\n        </button>\n      } @else {\n        <div [class]=\"stepCls(i, s)\">\n          <span class=\"ui-step-dot\">\n            @if (statusOf(i, s) === 'done') {\n              <svg\n                viewBox=\"0 0 24 24\"\n                width=\"14\"\n                height=\"14\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                stroke-width=\"2\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              >\n                <path d=\"M20 6L9 17l-5-5\" />\n              </svg>\n            } @else if (statusOf(i, s) === 'error') {\n              !\n            } @else {\n              {{ i + 1 }}\n            }\n          </span>\n          <span class=\"ui-step-label\">{{ lbl(s) }}</span>\n        </div>\n      }\n    }\n  </div>`,\n})\nexport class VspStepper {\n  @Input() steps: StepperItem[] = [];\n  @Input() current = 0;\n  @Input() onStepClick?: (i: number) => void;\n  @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n  lbl(s: StepperItem): string {\n    return typeof s === 'object' ? s.label : s;\n  }\n  statusOf(i: number, s: StepperItem): StepStatus {\n    if (typeof s === 'object' && s.status) return s.status;\n    return i < this.current ? 'done' : i === this.current ? 'active' : 'pending';\n  }\n  barCls(i: number): string {\n    return 'ui-step-bar' + (i <= this.current ? ' done' : '');\n  }\n  stepCls(i: number, s: StepperItem): string {\n    return 'ui-step ' + this.statusOf(i, s) + (this.onStepClick ? ' clickable' : '');\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'vsp-circular-progress',\n  template: `<div style=\"position: relative\" [style.width.px]=\"size\" [style.height.px]=\"size\">\n    <svg [attr.width]=\"size\" [attr.height]=\"size\" style=\"transform: rotate(-90deg)\">\n      <circle\n        [attr.cx]=\"size / 2\"\n        [attr.cy]=\"size / 2\"\n        [attr.r]=\"r\"\n        fill=\"none\"\n        stroke=\"var(--surface-3)\"\n        [attr.stroke-width]=\"thickness\"\n      />\n      <circle\n        [attr.cx]=\"size / 2\"\n        [attr.cy]=\"size / 2\"\n        [attr.r]=\"r\"\n        fill=\"none\"\n        [attr.stroke]=\"color\"\n        [attr.stroke-width]=\"thickness\"\n        stroke-linecap=\"round\"\n        [attr.stroke-dasharray]=\"circ\"\n        [attr.stroke-dashoffset]=\"offset\"\n        style=\"transition: stroke-dashoffset 0.5s cubic-bezier(0.3, 0.7, 0.3, 1)\"\n      />\n    </svg>\n    <div\n      class=\"tnum\"\n      [style.fontSize.px]=\"size * 0.24\"\n      style=\"position: absolute; inset: 0; display: grid; place-items: center; font-weight: 800\"\n    >\n      {{ display }}\n    </div>\n  </div>`,\n})\nexport class VspCircularProgress {\n  @Input() value = 0;\n  @Input() size = 76;\n  @Input() thickness = 7;\n  @Input() color = 'var(--accent)';\n  @Input() label?: string;\n  get r(): number {\n    return (this.size - this.thickness) / 2;\n  }\n  get circ(): number {\n    return 2 * Math.PI * this.r;\n  }\n  get offset(): number {\n    return this.circ * (1 - Math.min(100, this.value) / 100);\n  }\n  get display(): string {\n    return this.label ?? `${Math.round(this.value)}%`;\n  }\n}\n\n@Component({\n  selector: 'vsp-stat',\n  template: `<div class=\"card card-pad\" style=\"display: flex; align-items: center; gap: 13px\">\n    <span\n      #ic\n      [style.display]=\"ic.childElementCount ? '' : 'none'\"\n      [style.background]=\"'color-mix(in oklab, ' + tone + ' 14%, transparent)'\"\n      [style.color]=\"tone\"\n      style=\"width: 38px; height: 38px; border-radius: var(--r-sm); flex-shrink: 0; display: grid; place-items: center\"\n    >\n      <ng-content select=\"[slot=icon]\" />\n    </span>\n    <div style=\"min-width: 0\">\n      <div class=\"eyebrow\">{{ label }}</div>\n      <div style=\"display: flex; align-items: baseline; gap: 8px; margin-top: 3px\">\n        <span class=\"tnum\" style=\"font-size: 22px; font-weight: 800; letter-spacing: -0.02em\">{{\n          value\n        }}</span>\n        @if (delta != null) {\n          <span [class]=\"deltaCls\" style=\"padding: 1px 6px\">\n            <svg\n              viewBox=\"0 0 24 24\"\n              width=\"10\"\n              height=\"10\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            >\n              <path [attr.d]=\"arrow\" />\n            </svg>\n            {{ delta }}\n          </span>\n        }\n      </div>\n    </div>\n  </div>`,\n})\nexport class VspStat {\n  @Input() label?: string;\n  @Input() value?: string;\n  @Input() delta?: string;\n  @Input() deltaDir: 'up' | 'down' = 'up';\n  @Input() tone = 'var(--accent)';\n  get deltaCls(): string {\n    return 'badge ' + (this.deltaDir === 'up' ? 'badge-pos' : 'badge-neg');\n  }\n  get arrow(): string {\n    return this.deltaDir === 'up' ? 'M12 19V5M5 12l7-7 7 7' : 'M12 5v14M5 12l7 7 7-7';\n  }\n}\n\nexport type TimelineTone = 'pos' | 'neg' | 'warn' | 'info';\nexport interface TimelineItem {\n  title: string;\n  time?: string;\n  body?: string;\n  tone?: TimelineTone;\n  active?: boolean;\n}\nconst TL_TONE: Record<TimelineTone, string> = {\n  pos: 'var(--success)',\n  neg: 'var(--danger)',\n  warn: 'var(--warning)',\n  info: 'var(--accent)',\n};\n\n@Component({\n  selector: 'vsp-timeline',\n  template: `<div [class]=\"orientation === 'horizontal' ? 'ui-tl horizontal' : 'ui-tl'\">\n    @for (it of items; track $index) {\n      <div [class]=\"it.active ? 'ui-tl-item active' : 'ui-tl-item'\">\n        <span class=\"ui-tl-dot\" [style]=\"dotStyle(it.tone)\">\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"14\"\n            height=\"14\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <circle cx=\"12\" cy=\"12\" r=\"9\" />\n            <path d=\"M12 7v5l3 2\" />\n          </svg>\n        </span>\n        <div class=\"ui-tl-body\">\n          <div style=\"display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap\">\n            <span style=\"font-weight: 600; font-size: 13.5px\">{{ it.title }}</span>\n            @if (it.time) {\n              <span class=\"eyebrow\" style=\"margin-left: auto\">{{ it.time }}</span>\n            }\n          </div>\n          @if (it.body) {\n            <div style=\"font-size: 12.5px; color: var(--text-dim); margin-top: 3px\">\n              {{ it.body }}\n            </div>\n          }\n        </div>\n      </div>\n    }\n  </div>`,\n})\nexport class VspTimeline {\n  @Input() items: TimelineItem[] = [];\n  @Input() orientation: 'vertical' | 'horizontal' = 'vertical';\n  dotStyle(tone?: TimelineTone): string {\n    if (!tone) return '';\n    const c = TL_TONE[tone];\n    return `background:color-mix(in oklab, ${c} 14%, transparent);color:${c};border-color:color-mix(in oklab, ${c} 30%, transparent)`;\n  }\n}\n\n@Component({\n  selector: 'vsp-description-list',\n  template: `<dl class=\"ui-dl\">\n    @for (item of items; track $index; let last = $last) {\n      <dt [class.last]=\"last\">{{ item[0] }}</dt>\n      <dd [class.last]=\"last\">{{ item[1] }}</dd>\n    }\n  </dl>`,\n})\nexport class VspDescriptionList {\n  @Input() items: [string, string][] = [];\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nexport type BannerTone = 'info' | 'warn' | 'accent' | 'pos' | 'neg';\nconst BANNER_ICON: Record<BannerTone, string> = {\n  info: 'M12 3l1.6 5L19 9.6l-5 1.6L12 16l-1.6-4.8L5 9.6l5.4-1.6z',\n  warn: 'M18 8a6 6 0 00-12 0c0 7-3 9-3 9h18s-3-2-3-9',\n  accent: 'M13 2L3 14h9l-1 8 10-12h-9l1-8z',\n  pos: 'M22 11.08V12a10 10 0 11-5.93-9.14M22 4L12 14.01l-3-3',\n  neg: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z',\n};\n\n@Component({\n  selector: 'vsp-banner',\n  template: `<div [class]=\"cls\">\n    <span #ic style=\"display: contents\"><ng-content select=\"[slot=icon]\" /></span>\n    @if (!ic.childElementCount) {\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"18\"\n        height=\"18\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path [attr.d]=\"iconPath\" />\n      </svg>\n    }\n    <div style=\"flex: 1; font-size: 13px; font-weight: 500\"><ng-content /></div>\n    <ng-content select=\"[slot=action]\" />\n    @if (dismissible) {\n      <button type=\"button\" class=\"ui-banner-x\" aria-label=\"Dismiss\" (click)=\"dismiss.emit()\">\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"15\"\n          height=\"15\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <path d=\"M18 6L6 18M6 6l12 12\" />\n        </svg>\n      </button>\n    }\n  </div>`,\n})\nexport class VspBanner {\n  @Input() tone: BannerTone = 'info';\n  @Input() dismissible = false;\n  @Output() dismiss = new EventEmitter<void>();\n  get cls(): string {\n    return 'ui-banner ' + this.tone;\n  }\n  get iconPath(): string {\n    return BANNER_ICON[this.tone];\n  }\n}\n\n@Component({\n  selector: 'vsp-empty-state',\n  template: `<div\n    style=\"display: grid; place-items: center; text-align: center\"\n    [style.padding]=\"compact ? '32px 20px' : '56px 24px'\"\n  >\n    <div style=\"max-width: 340px\">\n      <span\n        style=\"width: 56px; height: 56px; border-radius: 16px; display: grid; place-items: center; margin: 0 auto 18px; background: color-mix(in oklab, var(--accent) 12%, transparent); color: var(--accent); border: 1px solid color-mix(in oklab, var(--accent) 22%, transparent)\"\n      >\n        <span #ic style=\"display: contents\"><ng-content select=\"[slot=icon]\" /></span>\n        @if (!ic.childElementCount) {\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"26\"\n            height=\"26\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path\n              d=\"M22 12h-6l-2 3h-4l-2-3H2M5.45 5.11L2 12v6a2 2 0 002 2h16a2 2 0 002-2v-6l-3.45-6.89A2 2 0 0016.76 4H7.24a2 2 0 00-1.79 1.11z\"\n            />\n          </svg>\n        }\n      </span>\n      <div style=\"font-size: 17px; font-weight: 700\">{{ title }}</div>\n      @if (desc) {\n        <p style=\"margin: 7px 0 0; color: var(--text-dim); font-size: 13.5px; line-height: 1.6\">\n          {{ desc }}\n        </p>\n      }\n      <div\n        #ac\n        [style.display]=\"ac.childElementCount ? 'flex' : 'none'\"\n        style=\"margin-top: 20px; gap: 8px; justify-content: center\"\n      >\n        <ng-content select=\"[slot=action]\" />\n      </div>\n    </div>\n  </div>`,\n})\nexport class VspEmptyState {\n  @Input() title?: string;\n  @Input() desc?: string;\n  @Input() compact = false;\n}\n\nexport interface AccordionItem {\n  title: string;\n  body: string;\n}\n\n@Component({\n  selector: 'vsp-accordion',\n  template: `<div class=\"ui-acc\">\n    @for (it of items; track $index; let i = $index) {\n      <div [class]=\"itemCls(i)\">\n        <button type=\"button\" class=\"ui-acc-head\" (click)=\"toggle(i)\">\n          {{ it.title }}\n          <svg\n            class=\"chev\"\n            viewBox=\"0 0 24 24\"\n            width=\"17\"\n            height=\"17\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path d=\"M9 18l6-6-6-6\" />\n          </svg>\n        </button>\n        <div class=\"ui-acc-bodywrap\">\n          <div>\n            <div class=\"ui-acc-body\">{{ it.body }}</div>\n          </div>\n        </div>\n      </div>\n    }\n  </div>`,\n})\nexport class VspAccordion implements OnInit {\n  @Input() items: AccordionItem[] = [];\n  @Input() multiple = false;\n  @Input() defaultOpen: number[] = [];\n  /** Controlled open indices. Omit for uncontrolled. */\n  @Input() open?: number[];\n  @Output() openChange = new EventEmitter<number[]>();\n  private internal = new Set<number>();\n  ngOnInit(): void {\n    this.internal = new Set(this.defaultOpen);\n  }\n  private get openSet(): Set<number> {\n    return this.open !== undefined ? new Set(this.open) : this.internal;\n  }\n  toggle(i: number): void {\n    const cur = this.openSet;\n    const n = new Set<number>(this.multiple ? cur : []);\n    if (cur.has(i)) n.delete(i);\n    else n.add(i);\n    if (this.open === undefined) this.internal = n;\n    this.openChange.emit([...n]);\n  }\n  itemCls(i: number): string {\n    return 'ui-acc-item' + (this.openSet.has(i) ? ' open' : '');\n  }\n}\n","import { Component, Input } from '@angular/core';\n\nfunction niceNum(n: number): string {\n  if (Math.abs(n) >= 1e6) return (n / 1e6).toFixed(n % 1e6 === 0 ? 0 : 1) + 'M';\n  if (Math.abs(n) >= 1e3) return (n / 1e3).toFixed(n % 1e3 === 0 ? 0 : 1) + 'k';\n  return String(n);\n}\n\ntype Pt = [number, number];\nfunction smoothPath(pts: Pt[]): string {\n  if (pts.length < 2) return '';\n  let d = `M ${pts[0]![0]} ${pts[0]![1]}`;\n  for (let i = 0; i < pts.length - 1; i++) {\n    const [x0, y0] = pts[i]!;\n    const [x1, y1] = pts[i + 1]!;\n    const cx = (x0 + x1) / 2;\n    d += ` C ${cx} ${y0} ${cx} ${y1} ${x1} ${y1}`;\n  }\n  return d;\n}\n\nlet sparkUid = 0;\n\n@Component({\n  selector: 'vsp-sparkline',\n  template: `<svg\n    [attr.width]=\"w\"\n    [attr.height]=\"h\"\n    [attr.viewBox]=\"'0 0 ' + w + ' ' + h\"\n    style=\"display: block; overflow: visible\"\n  >\n    @if (fill) {\n      <defs>\n        <linearGradient [id]=\"gid\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n          <stop offset=\"0\" [attr.stop-color]=\"color\" stop-opacity=\"0.28\" />\n          <stop offset=\"1\" [attr.stop-color]=\"color\" stop-opacity=\"0\" />\n        </linearGradient>\n      </defs>\n      <path [attr.d]=\"areaD\" [attr.fill]=\"'url(#' + gid + ')'\" />\n    }\n    <path [attr.d]=\"d\" fill=\"none\" [attr.stroke]=\"color\" stroke-width=\"2\" stroke-linecap=\"round\" />\n    <circle [attr.cx]=\"last[0]\" [attr.cy]=\"last[1]\" r=\"2.6\" [attr.fill]=\"color\" />\n  </svg>`,\n})\nexport class VspSparkline {\n  @Input() data: number[] = [];\n  @Input() color = 'var(--accent)';\n  @Input() w = 110;\n  @Input() h = 34;\n  @Input() fill = true;\n  gid = 'spk' + ++sparkUid;\n  get pts(): Pt[] {\n    const min = Math.min(...this.data);\n    const max = Math.max(...this.data);\n    const rng = max - min || 1;\n    return this.data.map((v, i) => [\n      (i / (this.data.length - 1)) * this.w,\n      this.h - 3 - ((v - min) / rng) * (this.h - 6),\n    ]);\n  }\n  get d(): string {\n    return smoothPath(this.pts);\n  }\n  get areaD(): string {\n    return `${this.d} L ${this.w} ${this.h} L 0 ${this.h} Z`;\n  }\n  get last(): Pt {\n    return this.pts[this.pts.length - 1] ?? [0, 0];\n  }\n}\n\nexport interface DonutDatum {\n  label: string;\n  value: number;\n  color: string;\n}\n\n@Component({\n  selector: 'vsp-donut',\n  template: `<div style=\"display: flex; align-items: center; gap: 22px\">\n    <div\n      [style.width.px]=\"size\"\n      [style.height.px]=\"size\"\n      style=\"position: relative; flex-shrink: 0\"\n    >\n      @if (hover != null) {\n        <div\n          style=\"position: absolute; inset: 0; display: grid; place-items: center; text-align: center\"\n        >\n          <div>\n            <div style=\"font-size: 19px; font-weight: 800; letter-spacing: -0.02em\">\n              {{ fmt(data[hover].value) }}\n            </div>\n            <div style=\"font-size: 11px; color: var(--text-dim); margin-top: 2px\">\n              {{ data[hover].label }}\n            </div>\n          </div>\n        </div>\n      } @else if (centerLabel != null) {\n        <div\n          style=\"position: absolute; inset: 0; display: grid; place-items: center; text-align: center\"\n        >\n          {{ centerLabel }}\n        </div>\n      }\n      <svg\n        [attr.width]=\"size\"\n        [attr.height]=\"size\"\n        style=\"transform: rotate(-90deg); display: block\"\n      >\n        <circle\n          [attr.cx]=\"c\"\n          [attr.cy]=\"c\"\n          [attr.r]=\"r\"\n          fill=\"none\"\n          stroke=\"var(--surface-3)\"\n          [attr.stroke-width]=\"thickness\"\n        />\n        @for (s of segs; track $index; let i = $index) {\n          <circle\n            [attr.cx]=\"c\"\n            [attr.cy]=\"c\"\n            [attr.r]=\"r\"\n            fill=\"none\"\n            [attr.stroke]=\"s.color\"\n            [attr.stroke-width]=\"thickness\"\n            [attr.stroke-dasharray]=\"s.dash\"\n            [attr.stroke-dashoffset]=\"s.offset\"\n            stroke-linecap=\"round\"\n            [attr.opacity]=\"hover === null || hover === i ? 1 : 0.3\"\n            style=\"transition: opacity 0.15s; cursor: pointer\"\n            (mouseenter)=\"hover = i\"\n            (mouseleave)=\"hover = null\"\n          />\n        }\n      </svg>\n    </div>\n    <div style=\"display: flex; flex-direction: column; gap: 9px; flex: 1\">\n      @for (d of data; track $index; let i = $index) {\n        <div\n          style=\"display: flex; align-items: center; gap: 9px; font-size: 12.5px; cursor: pointer; transition: opacity 0.15s\"\n          [style.opacity]=\"hover === null || hover === i ? 1 : 0.45\"\n          (mouseenter)=\"hover = i\"\n          (mouseleave)=\"hover = null\"\n        >\n          <i\n            [style.background]=\"d.color\"\n            style=\"width: 9px; height: 9px; border-radius: 3px; flex-shrink: 0\"\n          ></i>\n          <span style=\"color: var(--text-dim); flex: 1\">{{ d.label }}</span>\n          <span class=\"mono tnum\" style=\"font-weight: 600\">{{ pct(d.value) }}%</span>\n        </div>\n      }\n    </div>\n  </div>`,\n})\nexport class VspDonut {\n  @Input() data: DonutDatum[] = [];\n  @Input() size = 168;\n  @Input() thickness = 22;\n  @Input() centerLabel?: string;\n  @Input() valueFormat?: (n: number) => string;\n  hover: number | null = null;\n  fmt(n: number): string {\n    return this.valueFormat ? this.valueFormat(n) : niceNum(n);\n  }\n  get total(): number {\n    return this.data.reduce((s, d) => s + d.value, 0) || 1;\n  }\n  get r(): number {\n    return (this.size - this.thickness) / 2;\n  }\n  get c(): number {\n    return this.size / 2;\n  }\n  get circ(): number {\n    return 2 * Math.PI * this.r;\n  }\n  get segs(): { color: string; dash: string; offset: number }[] {\n    let acc = 0;\n    return this.data.map((d) => {\n      const len = (d.value / this.total) * this.circ;\n      const seg = { color: d.color, dash: `${len - 2.5} ${this.circ - len + 2.5}`, offset: -acc };\n      acc += len;\n      return seg;\n    });\n  }\n  pct(v: number): number {\n    return Math.round((v / this.total) * 100);\n  }\n}\n\n@Component({\n  selector: 'vsp-stat-card',\n  imports: [VspSparkline],\n  template: `<div\n    class=\"card card-pad vsp-rise\"\n    style=\"display: flex; flex-direction: column; gap: 14px\"\n  >\n    <div style=\"display: flex; align-items: center; justify-content: space-between\">\n      <div style=\"display: flex; align-items: center; gap: 10px\">\n        <span\n          style=\"width: 34px; height: 34px; border-radius: var(--r-sm); display: grid; place-items: center; background: color-mix(in oklab, var(--accent) 13%, transparent); color: var(--accent)\"\n        >\n          <ng-content select=\"[slot=icon]\" />\n        </span>\n        <span class=\"eyebrow\">{{ label }}</span>\n      </div>\n      @if (delta != null) {\n        <span [class]=\"deltaCls\">\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"11\"\n            height=\"11\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path [attr.d]=\"arrow\" />\n          </svg>\n          {{ delta }}\n        </span>\n      }\n    </div>\n    <div style=\"display: flex; align-items: flex-end; justify-content: space-between; gap: 12px\">\n      <div\n        class=\"tnum\"\n        style=\"font-size: 30px; font-weight: 800; letter-spacing: -0.02em; line-height: 1\"\n      >\n        {{ value }}\n      </div>\n      @if (spark) {\n        <vsp-sparkline [data]=\"spark\" [color]=\"sparkColor\" />\n      }\n    </div>\n  </div>`,\n})\nexport class VspStatCard {\n  @Input() label?: string;\n  @Input() value?: string;\n  @Input() delta?: string;\n  @Input() deltaDir: 'up' | 'down' = 'up';\n  @Input() spark?: number[];\n  @Input() sparkColor = 'var(--accent)';\n  get deltaCls(): string {\n    return 'badge ' + (this.deltaDir === 'up' ? 'badge-pos' : 'badge-neg');\n  }\n  get arrow(): string {\n    return this.deltaDir === 'up' ? 'M12 19V5M5 12l7-7 7 7' : 'M12 5v14M5 12l7 7 7-7';\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'vsp-number-stepper',\n  template: `<div [class]=\"disabled ? 'ui-stepper disabled' : 'ui-stepper'\">\n    <button\n      type=\"button\"\n      aria-label=\"Decrease\"\n      [disabled]=\"disabled || (min != null && value <= min)\"\n      (click)=\"set(value - step)\"\n    >\n      −\n    </button>\n    <span class=\"val\">\n      <input\n        [id]=\"id\"\n        class=\"ui-stepper-input\"\n        type=\"text\"\n        inputmode=\"decimal\"\n        [value]=\"value\"\n        [disabled]=\"disabled\"\n        aria-label=\"Value\"\n        (input)=\"onInput($event)\"\n        (blur)=\"set(value)\"\n      />\n      @if (unit) {\n        <i>{{ unit }}</i>\n      }\n    </span>\n    <button\n      type=\"button\"\n      aria-label=\"Increase\"\n      [disabled]=\"disabled || (max != null && value >= max)\"\n      (click)=\"set(value + step)\"\n    >\n      +\n    </button>\n  </div>`,\n})\nexport class VspNumberStepper {\n  @Input() value = 0;\n  @Output() valueChange = new EventEmitter<number>();\n  @Input() min?: number;\n  @Input() max?: number;\n  @Input() step = 1;\n  @Input() unit?: string;\n  @Input() disabled = false;\n  @Input() id?: string;\n  set(v: number): void {\n    let n = v;\n    if (this.min != null && n < this.min) n = this.min;\n    if (this.max != null && n > this.max) n = this.max;\n    this.value = n;\n    this.valueChange.emit(n);\n  }\n  onInput(e: Event): void {\n    const raw = (e.target as HTMLInputElement).value;\n    const n = Number(raw);\n    if (raw !== '' && raw !== '-' && Number.isFinite(n)) {\n      this.value = n;\n      this.valueChange.emit(n);\n    }\n  }\n}\n\n@Component({\n  selector: 'vsp-copy-button',\n  template: `<button type=\"button\" [class]=\"cls\" (click)=\"copy()\">\n    @if (done) {\n      <span style=\"color: var(--success); display: inline-flex\">\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"15\"\n          height=\"15\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <path d=\"M20 6L9 17l-5-5\" />\n        </svg> </span\n      >Copied\n    } @else {\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"15\"\n        height=\"15\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6\" />\n      </svg>\n      {{ label }}\n    }\n  </button>`,\n})\nexport class VspCopyButton {\n  @Input() text = '';\n  @Input() label = 'Copy';\n  @Input() size = 'sm';\n  done = false;\n  get cls(): string {\n    return 'btn btn-ghost' + (this.size === 'sm' ? ' btn-sm' : '');\n  }\n  async copy(): Promise<void> {\n    try {\n      await navigator.clipboard?.writeText(this.text);\n    } catch {\n      /* clipboard unavailable */\n    }\n    this.done = true;\n    setTimeout(() => (this.done = false), 1400);\n  }\n}\n\n@Component({\n  selector: 'vsp-inline-edit',\n  template: `@if (editing) {\n      <input\n        #inp\n        autofocus\n        class=\"ui-input\"\n        [value]=\"draft\"\n        style=\"height: 32px; max-width: 240px\"\n        (input)=\"draft = inp.value\"\n        (blur)=\"commit()\"\n        (keydown.enter)=\"commit()\"\n        (keydown.escape)=\"cancel()\"\n      />\n    } @else {\n      <span\n        class=\"ui-inline\"\n        role=\"button\"\n        tabindex=\"0\"\n        (click)=\"start()\"\n        (keydown.enter)=\"start()\"\n      >\n        <span [style.color]=\"value ? 'var(--text)' : 'var(--text-faint)'\">{{\n          value || placeholder\n        }}</span>\n        <span class=\"pen\" style=\"display: inline-flex\">\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"14\"\n            height=\"14\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path d=\"M12 20h9M16.5 3.5a2.12 2.12 0 013 3L7 19l-4 1 1-4z\" />\n          </svg>\n        </span>\n      </span>\n    }`,\n})\nexport class VspInlineEdit {\n  @Input() value = '';\n  @Input() placeholder = 'Empty';\n  @Output() save = new EventEmitter<string>();\n  editing = false;\n  draft = '';\n  start(): void {\n    this.draft = this.value;\n    this.editing = true;\n  }\n  commit(): void {\n    this.editing = false;\n    if (this.draft !== this.value) this.save.emit(this.draft);\n  }\n  cancel(): void {\n    this.draft = this.value;\n    this.editing = false;\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nexport interface TreeNodeData {\n  id?: string;\n  label: string;\n  badge?: string;\n  children?: TreeNodeData[];\n}\n\n@Component({\n  selector: 'vsp-tree',\n  imports: [NgTemplateOutlet],\n  template: `<div class=\"ui-tree\">\n      @for (n of data; track $index) {\n        <ng-container *ngTemplateOutlet=\"nodeTpl; context: { $implicit: n }\" />\n      }\n    </div>\n\n    <ng-template #nodeTpl let-n>\n      <div>\n        <div\n          [class]=\"rowCls(n)\"\n          role=\"button\"\n          tabindex=\"0\"\n          (click)=\"activate(n)\"\n          (keydown.enter)=\"activate(n)\"\n        >\n          @if (hasKids(n)) {\n            <svg\n              class=\"tw-chev\"\n              viewBox=\"0 0 24 24\"\n              width=\"16\"\n              height=\"16\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            >\n              <path d=\"M9 18l6-6-6-6\" />\n            </svg>\n          } @else {\n            <span style=\"width: 16px; flex-shrink: 0\"></span>\n          }\n          <svg\n            class=\"tw-icon\"\n            viewBox=\"0 0 24 24\"\n            width=\"16\"\n            height=\"16\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            @if (hasKids(n)) {\n              <path d=\"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5\" />\n            } @else {\n              <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6\" />\n            }\n          </svg>\n          <span\n            style=\"flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap\"\n            >{{ n.label }}</span\n          >\n          @if (n.badge != null) {\n            <span class=\"mono\" style=\"font-size: 11px; color: var(--text-faint)\">{{\n              n.badge\n            }}</span>\n          }\n        </div>\n        @if (hasKids(n) && expandedSet.has(id(n))) {\n          <div class=\"ui-tree-children\">\n            @for (c of n.children; track $index) {\n              <ng-container *ngTemplateOutlet=\"nodeTpl; context: { $implicit: c }\" />\n            }\n          </div>\n        }\n      </div>\n    </ng-template>`,\n})\nexport class VspTree implements OnInit {\n  @Input() data: TreeNodeData[] = [];\n  @Input() defaultExpanded: string[] = [];\n  /** Controlled expanded node ids. Omit for uncontrolled. */\n  @Input('expanded') expandedInput?: string[];\n  @Output() expandedChange = new EventEmitter<string[]>();\n  /** Controlled selected node id. Omit for uncontrolled. */\n  @Input('selected') selectedInput?: string | null;\n  @Output() select = new EventEmitter<string>();\n  private internalExpanded = new Set<string>();\n  private internalSelected: string | null = null;\n\n  ngOnInit(): void {\n    this.internalExpanded = new Set(this.defaultExpanded);\n  }\n  get expandedSet(): Set<string> {\n    return this.expandedInput !== undefined ? new Set(this.expandedInput) : this.internalExpanded;\n  }\n  get selectedId(): string | null {\n    return this.selectedInput !== undefined ? this.selectedInput : this.internalSelected;\n  }\n  id(n: TreeNodeData): string {\n    return n.id ?? n.label;\n  }\n  hasKids(n: TreeNodeData): boolean {\n    return (n.children ?? []).length > 0;\n  }\n  rowCls(n: TreeNodeData): string {\n    const i = this.id(n);\n    return (\n      'ui-tree-row' +\n      (this.expandedSet.has(i) ? ' open' : '') +\n      (this.selectedId === i ? ' sel' : '')\n    );\n  }\n  activate(n: TreeNodeData): void {\n    const i = this.id(n);\n    if (this.hasKids(n)) {\n      const next = new Set(this.expandedSet);\n      if (next.has(i)) next.delete(i);\n      else next.add(i);\n      if (this.expandedInput === undefined) this.internalExpanded = next;\n      this.expandedChange.emit([...next]);\n    }\n    if (this.selectedInput === undefined) this.internalSelected = i;\n    this.select.emit(i);\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\n\n@Component({\n  selector: 'vsp-otp-input',\n  template: `<div [class]=\"invalid ? 'ui-otp invalid' : 'ui-otp'\">\n    @for (i of indices; track i) {\n      <input\n        #otp\n        inputmode=\"numeric\"\n        maxlength=\"1\"\n        [value]=\"value[i] ?? ''\"\n        [disabled]=\"disabled\"\n        [attr.aria-invalid]=\"invalid || null\"\n        (input)=\"set(i, otp.value)\"\n        (paste)=\"onPaste(i, $event)\"\n        (keydown)=\"onKey(i, $event)\"\n      />\n    }\n  </div>`,\n})\nexport class VspOTPInput {\n  @Input() length = 6;\n  @Input() value = '';\n  @Input() disabled = false;\n  @Input() invalid = false;\n  @Output() valueChange = new EventEmitter<string>();\n  @Output() complete = new EventEmitter<string>();\n  @ViewChildren('otp') inputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n  get indices(): number[] {\n    return Array.from({ length: this.length }, (_, i) => i);\n  }\n  private chars(): string[] {\n    return Array.from({ length: this.length }, (_, k) => this.value[k] ?? '');\n  }\n  private emit(next: string[]): void {\n    this.value = next.join('');\n    this.valueChange.emit(this.value);\n    if (this.value.length === this.length) this.complete.emit(this.value);\n  }\n  set(i: number, raw: string): void {\n    const clean = raw.replace(/\\D/g, '');\n    const next = this.chars();\n    next[i] = clean.slice(-1);\n    this.emit(next);\n    if (clean && i < this.length - 1) this.inputs.get(i + 1)?.nativeElement.focus();\n  }\n  onPaste(i: number, e: ClipboardEvent): void {\n    const text = (e.clipboardData?.getData('text') ?? '').replace(/\\D/g, '');\n    if (!text) return;\n    e.preventDefault();\n    const next = this.chars();\n    for (let j = 0; j < text.length && i + j < this.length; j++) next[i + j] = text[j]!;\n    this.emit(next);\n    this.inputs.get(Math.min(i + text.length, this.length - 1))?.nativeElement.focus();\n  }\n  onKey(i: number, e: KeyboardEvent): void {\n    if (e.key === 'Backspace' && !this.value[i] && i > 0)\n      this.inputs.get(i - 1)?.nativeElement.focus();\n  }\n}\n","import { Component, Input } from '@angular/core';\n\ntype Pt = [number, number];\nfunction smoothPath(pts: Pt[]): string {\n  if (pts.length < 2) return '';\n  let d = `M ${pts[0]![0]} ${pts[0]![1]}`;\n  for (let i = 0; i < pts.length - 1; i++) {\n    const [x0, y0] = pts[i]!;\n    const [x1, y1] = pts[i + 1]!;\n    const cx = (x0 + x1) / 2;\n    d += ` C ${cx} ${y0} ${cx} ${y1} ${x1} ${y1}`;\n  }\n  return d;\n}\nfunction niceNum(n: number): string {\n  if (Math.abs(n) >= 1e6) return (n / 1e6).toFixed(n % 1e6 === 0 ? 0 : 1) + 'M';\n  if (Math.abs(n) >= 1e3) return (n / 1e3).toFixed(n % 1e3 === 0 ? 0 : 1) + 'k';\n  return String(n);\n}\nlet acUid = 0;\n\n@Component({\n  selector: 'vsp-area-chart',\n  template: `<svg [attr.width]=\"width\" [attr.height]=\"height\" style=\"display: block\">\n    <defs>\n      <linearGradient [id]=\"gid\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n        <stop offset=\"0\" [attr.stop-color]=\"color\" stop-opacity=\"0.22\" />\n        <stop offset=\"1\" [attr.stop-color]=\"color\" stop-opacity=\"0\" />\n      </linearGradient>\n    </defs>\n    @for (t of ticks; track $index) {\n      <line\n        [attr.x1]=\"padL\"\n        [attr.x2]=\"width - padR\"\n        [attr.y1]=\"t.y\"\n        [attr.y2]=\"t.y\"\n        stroke=\"var(--grid-line)\"\n        stroke-width=\"1\"\n      />\n      <text\n        [attr.x]=\"padL - 8\"\n        [attr.y]=\"t.y + 3.5\"\n        text-anchor=\"end\"\n        font-size=\"10\"\n        fill=\"var(--text-faint)\"\n        font-family=\"var(--font-mono)\"\n      >\n        {{ t.label }}\n      </text>\n    }\n    @if (labels) {\n      @for (lb of labels; track $index; let i = $index) {\n        @if (showLabel(i)) {\n          <text\n            [attr.x]=\"sx(i, labels.length)\"\n            [attr.y]=\"height - 8\"\n            text-anchor=\"middle\"\n            font-size=\"10\"\n            fill=\"var(--text-faint)\"\n            font-family=\"var(--font-mono)\"\n          >\n            {{ lb }}\n          </text>\n        }\n      }\n    }\n    @for (ln of lineEls; track $index) {\n      @if (ln.area) {\n        <path [attr.d]=\"ln.area\" [attr.fill]=\"'url(#' + gid + ')'\" />\n      }\n      <path\n        [attr.d]=\"ln.d\"\n        fill=\"none\"\n        [attr.stroke]=\"ln.stroke\"\n        stroke-width=\"2.4\"\n        stroke-linecap=\"round\"\n        [attr.stroke-dasharray]=\"ln.dash\"\n        [style.opacity]=\"ln.opacity\"\n      />\n    }\n  </svg>`,\n})\nexport class VspAreaChart {\n  @Input() series: number[][] = [];\n  @Input() labels?: string[];\n  @Input() width = 760;\n  @Input() height = 260;\n  @Input() color = 'var(--accent)';\n  @Input() color2 = 'var(--accent-2)';\n  @Input() dual = false;\n  gid = 'ac' + ++acUid;\n  padL = 38;\n  padB = 26;\n  padT = 12;\n  padR = 8;\n  get innerW(): number {\n    return Math.max(10, this.width - this.padL - this.padR);\n  }\n  get innerH(): number {\n    return this.height - this.padB - this.padT;\n  }\n  get s0(): number[] {\n    return this.series[0] ?? [];\n  }\n  get s1(): number[] | undefined {\n    return this.series[1];\n  }\n  get max(): number {\n    return Math.max(...(this.dual && this.s1 ? [...this.s0, ...this.s1] : this.s0), 0) * 1.12;\n  }\n  get rng(): number {\n    return this.max || 1;\n  }\n  sx(i: number, len: number): number {\n    return this.padL + (i / Math.max(1, len - 1)) * this.innerW;\n  }\n  sy(v: number): number {\n    return this.padT + this.innerH - (v / this.rng) * this.innerH;\n  }\n  showLabel(i: number): boolean {\n    return !!this.labels && i % Math.ceil(this.labels.length / 7) === 0;\n  }\n  get ticks(): { y: number; label: string }[] {\n    return Array.from({ length: 5 }, (_, i) => ({\n      y: this.sy((this.max / 4) * i),\n      label: niceNum(Math.round((this.max / 4) * i)),\n    }));\n  }\n  get lineEls(): {\n    d: string;\n    area: string | null;\n    stroke: string;\n    dash: string | null;\n    opacity: number;\n  }[] {\n    const sets = this.dual && this.s1 ? [this.s0, this.s1] : [this.s0];\n    return sets.map((arr, li) => {\n      const pts: Pt[] = arr.map((v, i) => [this.sx(i, arr.length), this.sy(v)]);\n      const last = pts[pts.length - 1];\n      const first = pts[0];\n      return {\n        d: smoothPath(pts),\n        area:\n          li === 0 && first && last\n            ? `${smoothPath(pts)} L ${last[0]} ${this.padT + this.innerH} L ${first[0]} ${this.padT + this.innerH} Z`\n            : null,\n        stroke: li === 0 ? this.color : this.color2,\n        dash: li === 1 ? '5 5' : null,\n        opacity: li === 1 ? 0.7 : 1,\n      };\n    });\n  }\n}\n\nconst BAR_PALETTE = [\n  'var(--accent)',\n  'var(--accent-2)',\n  'var(--success)',\n  'var(--warning)',\n  'var(--danger)',\n];\n\n@Component({\n  selector: 'vsp-bar-chart',\n  template: `<div style=\"position: relative\">\n    <svg [attr.width]=\"width\" [attr.height]=\"height\" style=\"display: block\">\n      @for (g of gridEls; track $index) {\n        <line\n          [attr.x1]=\"g.x1\"\n          [attr.x2]=\"g.x2\"\n          [attr.y1]=\"g.y1\"\n          [attr.y2]=\"g.y2\"\n          stroke=\"var(--grid-line)\"\n        />\n        <text\n          [attr.x]=\"g.tx\"\n          [attr.y]=\"g.ty\"\n          [attr.text-anchor]=\"g.anchor\"\n          font-size=\"10\"\n          fill=\"var(--text-faint)\"\n          font-family=\"var(--font-mono)\"\n        >\n          {{ g.label }}\n        </text>\n      }\n      @for (b of bars; track $index) {\n        <rect\n          [attr.x]=\"b.x\"\n          [attr.y]=\"b.y\"\n          [attr.width]=\"b.w\"\n          [attr.height]=\"b.h\"\n          rx=\"4\"\n          [attr.fill]=\"hover === b.i ? b.fill : dim(b.fill)\"\n          style=\"transition: fill 0.15s\"\n        />\n      }\n      @for (cat of cats; track $index) {\n        <g (mouseenter)=\"hover = cat.i\" (mouseleave)=\"hover = null\">\n          <rect\n            [attr.x]=\"cat.hx\"\n            [attr.y]=\"cat.hy\"\n            [attr.width]=\"cat.hw\"\n            [attr.height]=\"cat.hh\"\n            fill=\"transparent\"\n          />\n          @if (cat.label != null) {\n            <text\n              [attr.x]=\"cat.lx\"\n              [attr.y]=\"cat.ly\"\n              [attr.text-anchor]=\"cat.anchor\"\n              font-size=\"10\"\n              fill=\"var(--text-faint)\"\n              font-family=\"var(--font-mono)\"\n            >\n              {{ cat.label }}\n            </text>\n          }\n        </g>\n      }\n    </svg>\n    @if (hover != null) {\n      <div\n        class=\"ui-chart-tip\"\n        [style.left.px]=\"tipLeft\"\n        [style.top.px]=\"tipTop\"\n        style=\"position: absolute; transform: translate(-50%, -100%); pointer-events: none\"\n      >\n        @if (labels && labels[hover] != null) {\n          <div class=\"ui-chart-tip-label\">{{ labels[hover] }}</div>\n        }\n        @for (row of tipRows; track $index) {\n          <div class=\"ui-chart-tip-row\">\n            <i [style.background]=\"row.color\"></i>\n            @if (row.label) {\n              <span>{{ row.label }}</span>\n            }\n            <b>{{ row.value }}</b>\n          </div>\n        }\n      </div>\n    }\n    @if (showLegend) {\n      <div class=\"ui-chart-legend\">\n        @for (l of legendItems; track $index) {\n          <span><i [style.background]=\"l.color\"></i>{{ l.label }}</span>\n        }\n      </div>\n    }\n  </div>`,\n})\nexport class VspBarChart {\n  @Input() data: number[] | number[][] = [];\n  @Input() labels?: string[];\n  @Input() width = 620;\n  @Input() height = 240;\n  @Input() color?: string;\n  @Input() colors?: string[];\n  @Input() seriesLabels?: string[];\n  @Input() horizontal = false;\n  @Input() stacked = false;\n  @Input() valueFormat?: (n: number) => string;\n  @Input() showValues = false;\n  hover: number | null = null;\n  padB = 26;\n  padT = 10;\n  padR = 10;\n\n  get series(): number[][] {\n    return Array.isArray(this.data[0]) ? (this.data as number[][]) : [this.data as number[]];\n  }\n  get nSeries(): number {\n    return this.series.length;\n  }\n  get nCats(): number {\n    return this.series.reduce((m, s) => Math.max(m, s.length), 0);\n  }\n  get padL(): number {\n    return this.horizontal ? 60 : 34;\n  }\n  colorAt(s: number): string {\n    return (\n      this.colors?.[s] ??\n      (s === 0 && this.color ? this.color : BAR_PALETTE[s % BAR_PALETTE.length]!)\n    );\n  }\n  fmt(n: number): string {\n    return this.valueFormat ? this.valueFormat(n) : niceNum(n);\n  }\n  dim(c: string): string {\n    return `color-mix(in oklab, ${c} 80%, transparent)`;\n  }\n  get max(): number {\n    const m = this.stacked\n      ? Math.max(\n          ...Array.from({ length: this.nCats }, (_, i) =>\n            this.series.reduce((s, a) => s + (a[i] ?? 0), 0),\n          ),\n          0,\n        )\n      : Math.max(...this.series.flat(), 0);\n    return (m || 1) * 1.15;\n  }\n  get valAxis(): number {\n    return this.horizontal\n      ? Math.max(10, this.width - this.padL - this.padR)\n      : this.height - this.padB - this.padT;\n  }\n  get catAxis(): number {\n    return this.horizontal\n      ? this.height - this.padT - this.padB\n      : Math.max(10, this.width - this.padL - this.padR);\n  }\n  get band(): number {\n    return this.catAxis / this.nCats;\n  }\n  private rect(cs: number, thick: number, vStart: number, vLen: number) {\n    if (this.horizontal)\n      return {\n        x: this.padL + (vStart / this.max) * this.valAxis,\n        y: this.padT + cs,\n        w: (vLen / this.max) * this.valAxis,\n        h: thick,\n      };\n    return {\n      x: this.padL + cs,\n      y: this.padT + this.valAxis - ((vStart + vLen) / this.max) * this.valAxis,\n      w: thick,\n      h: (vLen / this.max) * this.valAxis,\n    };\n  }\n  get bars(): { x: number; y: number; w: number; h: number; fill: string; i: number }[] {\n    const out: { x: number; y: number; w: number; h: number; fill: string; i: number }[] = [];\n    const band = this.band;\n    for (let i = 0; i < this.nCats; i++) {\n      if (this.stacked) {\n        let acc = 0;\n        this.series.forEach((arr, s) => {\n          const v = arr[i] ?? 0;\n          const r = this.rect(i * band + band * 0.18, band * 0.64, acc, v);\n          out.push({\n            x: r.x,\n            y: r.y,\n            w: Math.max(0, r.w),\n            h: Math.max(0, r.h),\n            fill: this.colorAt(s),\n            i,\n          });\n          acc += v;\n        });\n      } else {\n        const sub = (band * 0.64) / this.nSeries;\n        this.series.forEach((arr, s) => {\n          const v = arr[i] ?? 0;\n          const r = this.rect(i * band + band * 0.18 + s * sub, sub * 0.86, 0, v);\n          out.push({\n            x: r.x,\n            y: r.y,\n            w: Math.max(0, r.w),\n            h: Math.max(0, r.h),\n            fill: this.colorAt(s),\n            i,\n          });\n        });\n      }\n    }\n    return out;\n  }\n  get gridEls(): {\n    x1: number;\n    x2: number;\n    y1: number;\n    y2: number;\n    tx: number;\n    ty: number;\n    anchor: string;\n    label: string;\n  }[] {\n    return [0, 0.25, 0.5, 0.75, 1].map((f) => {\n      const p = this.horizontal\n        ? this.padL + f * this.valAxis\n        : this.padT + this.valAxis - f * this.valAxis;\n      return {\n        x1: this.horizontal ? p : this.padL,\n        x2: this.horizontal ? p : this.padL + this.catAxis,\n        y1: this.horizontal ? this.padT : p,\n        y2: this.horizontal ? this.padT + this.catAxis : p,\n        tx: this.horizontal ? p : this.padL - 8,\n        ty: this.horizontal ? this.height - 8 : p + 3.5,\n        anchor: this.horizontal ? 'middle' : 'end',\n        label: this.fmt(Math.round(this.max * f)),\n      };\n    });\n  }\n  get cats(): {\n    i: number;\n    hx: number;\n    hy: number;\n    hw: number;\n    hh: number;\n    label: string | undefined;\n    lx: number;\n    ly: number;\n    anchor: string;\n  }[] {\n    const band = this.band;\n    return Array.from({ length: this.nCats }, (_, i) => {\n      const center = i * band + band / 2;\n      return {\n        i,\n        hx: this.horizontal ? this.padL : this.padL + i * band,\n        hy: this.horizontal ? this.padT + i * band : this.padT,\n        hw: this.horizontal ? this.valAxis : band,\n        hh: this.horizontal ? band : this.valAxis,\n        label: this.labels?.[i],\n        lx: this.horizontal ? this.padL - 8 : this.padL + center,\n        ly: this.horizontal ? this.padT + center + 3.5 : this.height - 8,\n        anchor: this.horizontal ? 'end' : 'middle',\n      };\n    });\n  }\n  get tipLeft(): number {\n    const band = this.band;\n    return this.horizontal ? this.padL + 8 : this.padL + (this.hover ?? 0) * band + band / 2;\n  }\n  get tipTop(): number {\n    const band = this.band;\n    return this.horizontal ? this.padT + (this.hover ?? 0) * band + band / 2 : this.padT + 4;\n  }\n  get tipRows(): { color: string; label?: string; value: string }[] {\n    const i = this.hover ?? 0;\n    return this.series.map((arr, s) => ({\n      color: this.colorAt(s),\n      label: this.seriesLabels?.[s],\n      value: this.fmt(arr[i] ?? 0),\n    }));\n  }\n  get showLegend(): boolean {\n    return this.nSeries > 1 && !!this.seriesLabels;\n  }\n  get legendItems(): { color: string; label: string }[] {\n    return (this.seriesLabels ?? []).map((label, s) => ({ color: this.colorAt(s), label }));\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  ViewChild,\n} from '@angular/core';\n\nexport type DialogTone = 'pos' | 'neg' | 'warn' | 'info';\nconst DIALOG_TONE: Record<DialogTone, string> = {\n  pos: 'var(--success)',\n  neg: 'var(--danger)',\n  warn: 'var(--warning)',\n  info: 'var(--accent)',\n};\n\nconst FOCUSABLE_SEL =\n  'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\n/** Trap Tab focus inside `node`, focus the first focusable, restore focus on cleanup. */\nfunction trapFocus(node: HTMLElement): () => void {\n  const prev = document.activeElement as HTMLElement | null;\n  const list = (): HTMLElement[] =>\n    Array.from(node.querySelectorAll<HTMLElement>(FOCUSABLE_SEL)).filter(\n      (el) => el.offsetWidth > 0 || el.offsetHeight > 0,\n    );\n  const id = setTimeout(() => (list()[0] ?? node).focus(), 0);\n  const onKey = (e: KeyboardEvent): void => {\n    if (e.key !== 'Tab') return;\n    const els = list();\n    if (!els.length) {\n      e.preventDefault();\n      return;\n    }\n    const first = els[0]!;\n    const last = els[els.length - 1]!;\n    if (e.shiftKey && document.activeElement === first) {\n      e.preventDefault();\n      last.focus();\n    } else if (!e.shiftKey && document.activeElement === last) {\n      e.preventDefault();\n      first.focus();\n    }\n  };\n  node.addEventListener('keydown', onKey);\n  return () => {\n    clearTimeout(id);\n    node.removeEventListener('keydown', onKey);\n    prev?.focus?.();\n  };\n}\n\n/**\n * A modal dialog. Renders in place — `.ui-overlay` is `position: fixed`, so as\n * long as the component lives inside `.vsp-root` the overlay covers the viewport\n * and inherits the theme tokens (no portal needed). Project content into the\n * default slot for the body, `slot=\"icon\"` for the header icon, and\n * `slot=\"footer\"` for the footer.\n */\n@Component({\n  selector: 'vsp-dialog',\n  template: `@if (open) {\n    <div class=\"ui-overlay\" role=\"presentation\" (mousedown)=\"onBackdrop($event)\">\n      <div\n        #panel\n        class=\"ui-dialog\"\n        [style.maxWidth.px]=\"maxWidth\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        tabindex=\"-1\"\n      >\n        <div class=\"ui-dialog-head\">\n          <span\n            #ic\n            [style.display]=\"ic.childElementCount ? 'grid' : 'none'\"\n            [style.background]=\"'color-mix(in oklab, ' + color + ' 13%, transparent)'\"\n            [style.color]=\"color\"\n            style=\"width: 42px; height: 42px; border-radius: var(--r-sm); place-items: center; margin-bottom: 14px\"\n          >\n            <ng-content select=\"[slot=icon]\" />\n          </span>\n          <div class=\"ui-dialog-title\">{{ title }}</div>\n          @if (desc) {\n            <div class=\"ui-dialog-desc\">{{ desc }}</div>\n          }\n        </div>\n        <div\n          #body\n          [style.display]=\"body.childElementCount ? 'block' : 'none'\"\n          class=\"ui-dialog-body\"\n        >\n          <ng-content />\n        </div>\n        <div\n          #foot\n          [style.display]=\"foot.childElementCount ? 'flex' : 'none'\"\n          class=\"ui-dialog-foot\"\n        >\n          <ng-content select=\"[slot=footer]\" />\n        </div>\n      </div>\n    </div>\n  }`,\n})\nexport class VspDialog {\n  @Input() open = false;\n  @Input() title?: string;\n  @Input() desc?: string;\n  @Input() maxWidth = 460;\n  @Input() tone?: DialogTone;\n  @Input() closeOnOverlayClick = true;\n  @Input() closeOnEsc = true;\n  @Output() close = new EventEmitter<void>();\n\n  private cleanup: (() => void) | null = null;\n  @ViewChild('panel') set panelRef(el: ElementRef<HTMLElement> | undefined) {\n    this.cleanup?.();\n    this.cleanup = el ? trapFocus(el.nativeElement) : null;\n  }\n\n  get color(): string {\n    return this.tone ? DIALOG_TONE[this.tone] : 'var(--accent)';\n  }\n  @HostListener('document:keydown.escape')\n  onEsc(): void {\n    if (this.open && this.closeOnEsc) this.close.emit();\n  }\n  onBackdrop(e: MouseEvent): void {\n    if (this.closeOnOverlayClick && e.target === e.currentTarget) this.close.emit();\n  }\n}\n\n/** A side drawer. Like `vsp-dialog`, renders in place inside `.vsp-root`. */\n@Component({\n  selector: 'vsp-sheet',\n  template: `@if (open) {\n    <div\n      class=\"ui-overlay\"\n      [attr.data-sheet-side]=\"side\"\n      role=\"presentation\"\n      (mousedown)=\"onBackdrop($event)\"\n    >\n      <div\n        #panel\n        class=\"ui-sheet\"\n        [attr.data-side]=\"side\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        tabindex=\"-1\"\n      >\n        <div class=\"ui-sheet-head\">\n          <span\n            #ic\n            [style.display]=\"ic.childElementCount ? 'grid' : 'none'\"\n            style=\"width: 38px; height: 38px; border-radius: var(--r-sm); place-items: center; background: color-mix(in oklab, var(--accent) 13%, transparent); color: var(--accent); flex-shrink: 0\"\n          >\n            <ng-content select=\"[slot=icon]\" />\n          </span>\n          <div style=\"flex: 1; min-width: 0\">\n            <div style=\"font-size: 16px; font-weight: 700; letter-spacing: -0.01em\">\n              {{ title }}\n            </div>\n            @if (desc) {\n              <div style=\"font-size: 12.5px; color: var(--text-dim); margin-top: 3px\">\n                {{ desc }}\n              </div>\n            }\n          </div>\n          <button\n            type=\"button\"\n            class=\"vsp-icon-btn\"\n            style=\"border: 0; background: transparent; width: 32px; height: 32px\"\n            aria-label=\"Close\"\n            (click)=\"close.emit()\"\n          >\n            <svg\n              viewBox=\"0 0 24 24\"\n              width=\"16\"\n              height=\"16\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            >\n              <path d=\"M18 6L6 18M6 6l12 12\" />\n            </svg>\n          </button>\n        </div>\n        <div class=\"ui-sheet-body vsp-scroll\"><ng-content /></div>\n        <div\n          #foot\n          [style.display]=\"foot.childElementCount ? 'block' : 'none'\"\n          class=\"ui-sheet-foot\"\n        >\n          <ng-content select=\"[slot=footer]\" />\n        </div>\n      </div>\n    </div>\n  }`,\n})\nexport class VspSheet {\n  @Input() open = false;\n  @Input() title?: string;\n  @Input() desc?: string;\n  @Input() side: 'right' | 'left' | 'top' | 'bottom' = 'right';\n  @Input() closeOnOverlayClick = true;\n  @Input() closeOnEsc = true;\n  @Output() close = new EventEmitter<void>();\n\n  private cleanup: (() => void) | null = null;\n  @ViewChild('panel') set panelRef(el: ElementRef<HTMLElement> | undefined) {\n    this.cleanup?.();\n    this.cleanup = el ? trapFocus(el.nativeElement) : null;\n  }\n\n  @HostListener('document:keydown.escape')\n  onEsc(): void {\n    if (this.open && this.closeOnEsc) this.close.emit();\n  }\n  onBackdrop(e: MouseEvent): void {\n    if (this.closeOnOverlayClick && e.target === e.currentTarget) this.close.emit();\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Input,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { VspIcon } from './icon.component';\n\nexport type AnchoredAlign = 'start' | 'end';\n\n/** Roving arrow-key focus between sibling menu items (one level). */\nfunction menuNav(e: KeyboardEvent): void {\n  const k = e.key;\n  if (k !== 'ArrowDown' && k !== 'ArrowUp' && k !== 'Home' && k !== 'End') return;\n  e.preventDefault();\n  const parent = (e.currentTarget as HTMLElement).parentElement;\n  if (!parent) return;\n  const els = Array.from(\n    parent.querySelectorAll<HTMLButtonElement>(':scope > [role^=\"menuitem\"]:not([disabled])'),\n  );\n  const i = els.indexOf(e.currentTarget as HTMLButtonElement);\n  const n = els.length;\n  const next =\n    k === 'Home'\n      ? els[0]\n      : k === 'End'\n        ? els[n - 1]\n        : k === 'ArrowDown'\n          ? els[(i + 1) % n]\n          : els[(i - 1 + n) % n];\n  next?.focus();\n}\n\n/**\n * Positioning base for menus and popovers: anchors a layer to a trigger. The\n * layer is `position: fixed`, so it renders in place (inside `.vsp-root`) and is\n * positioned against the trigger's viewport rect. Click-outside and Escape close\n * it. Project the trigger with `slot=\"trigger\"`; the default slot is the layer.\n */\n@Component({\n  selector: 'vsp-anchored',\n  template: `<span #trig style=\"display: inline-flex\" (click)=\"toggle()\">\n      <ng-content select=\"[slot=trigger]\" />\n    </span>\n    @if (isOpen) {\n      <div #layer [class]=\"layerClass\" [style]=\"layerStyle\"><ng-content /></div>\n    }`,\n})\nexport class VspAnchored {\n  @Input() align: AnchoredAlign = 'start';\n  @Input() width?: number;\n  @Input() layerClass = 'ui-menu';\n  /** Controlled open state. Leave unset for uncontrolled. */\n  @Input('open') openInput?: boolean;\n  @Output() openChange = new EventEmitter<boolean>();\n  @ViewChild('trig') trig!: ElementRef<HTMLElement>;\n  @ViewChild('layer') layer?: ElementRef<HTMLElement>;\n  internalOpen = false;\n  rect: DOMRect | null = null;\n  layerSize: { w: number; h: number } | null = null;\n\n  get isOpen(): boolean {\n    return this.openInput !== undefined ? this.openInput : this.internalOpen;\n  }\n  private setOpen(next: boolean): void {\n    if (this.openInput === undefined) this.internalOpen = next;\n    this.openChange.emit(next);\n  }\n  toggle(): void {\n    const next = !this.isOpen;\n    this.setOpen(next);\n    if (next) {\n      requestAnimationFrame(() => {\n        this.place();\n        requestAnimationFrame(() => this.measure());\n      });\n    } else {\n      this.layerSize = null;\n    }\n  }\n  close(): void {\n    this.setOpen(false);\n    this.layerSize = null;\n  }\n  place(): void {\n    if (this.trig) this.rect = this.trig.nativeElement.getBoundingClientRect();\n  }\n  private measure(): void {\n    if (this.layer) {\n      // offsetWidth/Height = untransformed layout box (open animation safe).\n      const el = this.layer.nativeElement;\n      this.layerSize = { w: el.offsetWidth, h: el.offsetHeight };\n    }\n  }\n  get layerStyle(): string {\n    const r = this.rect;\n    if (!r) return '';\n    const MARGIN = 8;\n    const vw = window.innerWidth;\n    const vh = window.innerHeight;\n    const lw = this.layerSize?.w ?? this.width ?? r.width;\n    const lh = this.layerSize?.h ?? 0;\n    let top = r.bottom + 6;\n    if (lh && top + lh > vh - MARGIN && r.top - 6 - lh >= MARGIN) top = r.top - 6 - lh;\n    let left = this.align === 'end' ? r.right - lw : r.left;\n    left = Math.max(MARGIN, Math.min(left, vw - MARGIN - lw));\n    if (lh) top = Math.max(MARGIN, Math.min(top, vh - MARGIN - lh));\n    let s = `position:fixed;top:${top}px;left:${left}px;min-width:${this.width ?? r.width}px;max-height:calc(100vh - ${MARGIN * 2}px);overflow-y:auto;z-index:320;`;\n    if (!this.layerSize) s += 'visibility:hidden;';\n    return s;\n  }\n  @HostListener('document:mousedown', ['$event'])\n  onDoc(e: MouseEvent): void {\n    if (!this.isOpen) return;\n    const t = e.target as Node;\n    if (!this.layer?.nativeElement.contains(t) && !this.trig?.nativeElement.contains(t))\n      this.close();\n  }\n  @HostListener('document:keydown.escape')\n  onEsc(): void {\n    if (this.isOpen) this.close();\n  }\n  @HostListener('window:resize')\n  onResize(): void {\n    if (this.isOpen) this.place();\n  }\n}\n\nexport interface MenuItem {\n  label?: string;\n  kbd?: string;\n  /** Optional leading icon name (see `vsp-icon`). */\n  icon?: string;\n  danger?: boolean;\n  heading?: boolean;\n  sep?: boolean;\n  disabled?: boolean;\n  /** Render as a checkable item — shows a tick and keeps the menu open on select. */\n  type?: 'checkbox' | 'radio';\n  checked?: boolean;\n  /** Nested items — renders a submenu that flies out to the side. */\n  items?: MenuItem[];\n  onClick?: () => void;\n}\n\n@Component({\n  selector: 'vsp-menu-items',\n  imports: [VspIcon, forwardRef(() => VspSubMenuItem)],\n  template: `@for (it of items; track $index) {\n    @if (it.sep) {\n      <div class=\"ui-menu-sep\"></div>\n    } @else if (it.heading) {\n      <div class=\"ui-menu-label\">{{ it.label }}</div>\n    } @else if (it.items && it.items.length) {\n      <vsp-sub-menu-item [item]=\"it\" [close]=\"close\" />\n    } @else {\n      <button\n        type=\"button\"\n        [class]=\"'ui-menu-item' + (it.danger ? ' danger' : '')\"\n        [attr.role]=\"role(it)\"\n        [disabled]=\"it.disabled\"\n        [attr.aria-checked]=\"it.type ? !!it.checked : null\"\n        (click)=\"pick(it)\"\n        (keydown)=\"nav($event)\"\n      >\n        @if (it.type) {\n          <span class=\"ui-menu-check\">\n            @if (it.checked) {\n              <vsp-icon name=\"check\" [size]=\"16\" />\n            }\n          </span>\n        } @else if (it.icon) {\n          <vsp-icon [name]=\"it.icon\" [size]=\"15\" />\n        }\n        {{ it.label }}\n        @if (it.kbd) {\n          <kbd class=\"ui-kbd\">{{ it.kbd }}</kbd>\n        }\n      </button>\n    }\n  }`,\n})\nexport class VspMenuItems {\n  @Input() items: MenuItem[] = [];\n  @Input() close: () => void = () => {};\n  nav = menuNav;\n  role(it: MenuItem): string {\n    return it.type === 'checkbox'\n      ? 'menuitemcheckbox'\n      : it.type === 'radio'\n        ? 'menuitemradio'\n        : 'menuitem';\n  }\n  pick(it: MenuItem): void {\n    it.onClick?.();\n    if (!it.type) this.close();\n  }\n}\n\n@Component({\n  selector: 'vsp-sub-menu-item',\n  imports: [VspIcon, forwardRef(() => VspMenuItems)],\n  template: `<button\n      #btn\n      type=\"button\"\n      role=\"menuitem\"\n      aria-haspopup=\"menu\"\n      [attr.aria-expanded]=\"open\"\n      [disabled]=\"item.disabled\"\n      [class]=\"'ui-menu-item ui-menu-parent' + (item.danger ? ' danger' : '')\"\n      (mouseenter)=\"openNow()\"\n      (mouseleave)=\"closeSoon()\"\n      (click)=\"openNow()\"\n      (keydown)=\"onKey($event)\"\n    >\n      @if (item.icon) {\n        <vsp-icon [name]=\"item.icon\" [size]=\"15\" />\n      }\n      {{ item.label }}\n      <svg\n        class=\"ui-menu-sub-arrow\"\n        viewBox=\"0 0 24 24\"\n        width=\"14\"\n        height=\"14\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M9 18l6-6-6-6\" />\n      </svg>\n    </button>\n    @if (open && rect) {\n      <div\n        class=\"ui-menu\"\n        role=\"menu\"\n        [style.left.px]=\"rect.right - 4\"\n        [style.top.px]=\"rect.top - 6\"\n        style=\"position: fixed; z-index: 340\"\n        (mouseenter)=\"openNow()\"\n        (mouseleave)=\"closeSoon()\"\n      >\n        <vsp-menu-items [items]=\"item.items ?? []\" [close]=\"close\" />\n      </div>\n    } `,\n})\nexport class VspSubMenuItem {\n  @Input() item!: MenuItem;\n  @Input() close: () => void = () => {};\n  @ViewChild('btn') btn?: ElementRef<HTMLElement>;\n  open = false;\n  rect: DOMRect | null = null;\n  private timer: ReturnType<typeof setTimeout> | null = null;\n  private cancel(): void {\n    if (this.timer != null) {\n      clearTimeout(this.timer);\n      this.timer = null;\n    }\n  }\n  openNow(): void {\n    this.cancel();\n    if (this.btn) this.rect = this.btn.nativeElement.getBoundingClientRect();\n    this.open = true;\n  }\n  closeSoon(): void {\n    this.cancel();\n    this.timer = setTimeout(() => (this.open = false), 130);\n  }\n  onKey(e: KeyboardEvent): void {\n    if (e.key === 'ArrowRight') {\n      e.preventDefault();\n      this.openNow();\n    } else if (e.key === 'ArrowLeft') {\n      e.preventDefault();\n      this.open = false;\n    } else menuNav(e);\n  }\n}\n\n@Component({\n  selector: 'vsp-dropdown-menu',\n  imports: [VspAnchored, VspMenuItems],\n  template: `<vsp-anchored\n    #a\n    [align]=\"align\"\n    [width]=\"width\"\n    [open]=\"open\"\n    (openChange)=\"openChange.emit($event)\"\n    layerClass=\"ui-menu\"\n  >\n    <span slot=\"trigger\"><ng-content select=\"[slot=trigger]\" /></span>\n    <vsp-menu-items [items]=\"items\" [close]=\"closeFn\" />\n  </vsp-anchored>`,\n})\nexport class VspDropdownMenu {\n  @Input() items: MenuItem[] = [];\n  @Input() align: AnchoredAlign = 'end';\n  @Input() width?: number;\n  @Input() open?: boolean;\n  @Output() openChange = new EventEmitter<boolean>();\n  @ViewChild('a') anchored?: VspAnchored;\n  closeFn = (): void => this.anchored?.close();\n}\n\n@Component({\n  selector: 'vsp-popover',\n  imports: [VspAnchored],\n  template: `<vsp-anchored\n    [align]=\"align\"\n    [width]=\"width\"\n    [open]=\"open\"\n    (openChange)=\"openChange.emit($event)\"\n    layerClass=\"ui-popover\"\n  >\n    <span slot=\"trigger\"><ng-content select=\"[slot=trigger]\" /></span>\n    <ng-content />\n  </vsp-anchored>`,\n})\nexport class VspPopover {\n  @Input() align: AnchoredAlign = 'start';\n  @Input() width = 260;\n  @Input() open?: boolean;\n  @Output() openChange = new EventEmitter<boolean>();\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n@Component({\n  selector: 'vsp-tooltip',\n  template: `<span\n    #el\n    style=\"display: inline-flex\"\n    (mouseenter)=\"enter()\"\n    (mouseleave)=\"leave()\"\n    (focusin)=\"enter()\"\n    (focusout)=\"leave()\"\n  >\n    <ng-content />\n    @if (show) {\n      <div\n        class=\"ui-tip\"\n        role=\"tooltip\"\n        [style.left.px]=\"pos.x\"\n        [style.top.px]=\"pos.y\"\n        [style.transform]=\"transform\"\n      >\n        {{ label }}\n      </div>\n    }\n  </span>`,\n})\nexport class VspTooltip {\n  @Input() label?: string;\n  @Input() side: 'top' | 'bottom' | 'left' | 'right' = 'top';\n  @Input() delay = 0;\n  @Input() disabled = false;\n  @ViewChild('el') el!: ElementRef<HTMLElement>;\n  show = false;\n  pos = { x: 0, y: 0 };\n  private timer: ReturnType<typeof setTimeout> | null = null;\n  private static readonly TRANSFORM: Record<string, string> = {\n    top: 'translate(-50%,-100%)',\n    bottom: 'translateX(-50%)',\n    left: 'translate(-100%,-50%)',\n    right: 'translateY(-50%)',\n  };\n  get transform(): string {\n    return VspTooltip.TRANSFORM[this.side]!;\n  }\n  private place(): void {\n    const r = this.el.nativeElement.getBoundingClientRect();\n    const cx = r.left + r.width / 2;\n    const cy = r.top + r.height / 2;\n    if (this.side === 'bottom') this.pos = { x: cx, y: r.bottom + 8 };\n    else if (this.side === 'left') this.pos = { x: r.left - 8, y: cy };\n    else if (this.side === 'right') this.pos = { x: r.right + 8, y: cy };\n    else this.pos = { x: cx, y: r.top - 8 };\n  }\n  enter(): void {\n    if (this.disabled) return;\n    this.place();\n    if (this.delay > 0) this.timer = setTimeout(() => (this.show = true), this.delay);\n    else this.show = true;\n  }\n  leave(): void {\n    if (this.timer != null) {\n      clearTimeout(this.timer);\n      this.timer = null;\n    }\n    this.show = false;\n  }\n}\n","import { Component, Input, signal } from '@angular/core';\n\nexport type ToastTone = 'info' | 'pos' | 'neg' | 'warn';\nexport interface ToastAction {\n  label: string;\n  onClick: () => void;\n}\nexport type ToastPosition =\n  | 'top-left'\n  | 'top'\n  | 'top-right'\n  | 'bottom-left'\n  | 'bottom'\n  | 'bottom-right';\nexport interface ToastOptions {\n  title?: string;\n  body?: string;\n  tone?: ToastTone;\n  /** Auto-dismiss after this many ms (default 3600). Pass `Infinity` to persist. */\n  duration?: number;\n  action?: ToastAction;\n}\ninterface ToastItem extends ToastOptions {\n  id: string;\n}\n\nconst ICON: Record<ToastTone, string> = {\n  pos: 'M22 11.08V12a10 10 0 11-5.93-9.14M22 4L12 14.01l-3-3',\n  neg: 'M18 6L6 18M6 6l12 12',\n  warn: 'M18 8a6 6 0 00-12 0c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 01-3.46 0',\n  info: 'M12 3l1.6 5L19 9.6l-5 1.6L12 16l-1.6-4.8L5 9.6l5.4-1.6z',\n};\n\nconst toastsSignal = signal<ToastItem[]>([]);\nlet counter = 0;\n\n/** Show a toast. Requires a `<vsp-toast-host />` mounted inside your `.vsp-root`. */\nexport function toast(opts: ToastOptions | string): void {\n  const o: ToastOptions = typeof opts === 'string' ? { title: opts } : opts;\n  const item: ToastItem = { id: `toast-${counter++}`, tone: 'info', ...o };\n  toastsSignal.update((l) => [...l, item]);\n  if (o.duration !== Infinity) {\n    setTimeout(\n      () => toastsSignal.update((l) => l.filter((x) => x.id !== item.id)),\n      o.duration ?? 3600,\n    );\n  }\n}\n\n@Component({\n  selector: 'vsp-toast-host',\n  template: `<div class=\"ui-toast-region\" [attr.data-position]=\"position\">\n    @for (t of toasts(); track t.id) {\n      <div [class]=\"'ui-toast ' + (t.tone ?? 'info')\" role=\"status\">\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"18\"\n          height=\"18\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <path [attr.d]=\"icon(t.tone)\" />\n        </svg>\n        <div style=\"flex: 1\">\n          <div class=\"ui-toast-title\">{{ t.title }}</div>\n          @if (t.body) {\n            <div class=\"ui-toast-body\">{{ t.body }}</div>\n          }\n        </div>\n        @if (t.action) {\n          <button type=\"button\" class=\"ui-toast-action\" (click)=\"runAction(t)\">\n            {{ t.action.label }}\n          </button>\n        }\n        <button\n          type=\"button\"\n          class=\"vsp-icon-btn\"\n          style=\"border: 0; background: transparent; width: 26px; height: 26px\"\n          aria-label=\"Dismiss\"\n          (click)=\"dismiss(t.id)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"15\"\n            height=\"15\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path d=\"M18 6L6 18M6 6l12 12\" />\n          </svg>\n        </button>\n      </div>\n    }\n  </div>`,\n})\nexport class VspToastHost {\n  @Input() position: ToastPosition = 'bottom-right';\n  toasts = toastsSignal.asReadonly();\n  icon(tone?: ToastTone): string {\n    return ICON[tone ?? 'info'];\n  }\n  dismiss(id: string): void {\n    toastsSignal.update((l) => l.filter((x) => x.id !== id));\n  }\n  runAction(t: ToastItem): void {\n    t.action?.onClick();\n    this.dismiss(t.id);\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\n\nexport interface CommandItem {\n  label: string;\n  meta?: string;\n  keywords?: string;\n  /** Optional leading icon as an SVG path `d` string. */\n  icon?: string;\n  onRun?: () => void;\n}\nexport interface CommandGroup {\n  label: string;\n  items: CommandItem[];\n}\ntype FlatCmd = CommandItem & { group: string; idx: number };\n\nconst haystack = (it: CommandItem): string =>\n  [it.label, it.keywords ?? '', it.meta ?? ''].join(' ').toLowerCase();\n\n/**\n * A ⌘K-style command palette. Renders in place — `.ui-overlay` is\n * `position: fixed`, so as long as the component lives inside `.vsp-root` it\n * covers the viewport and inherits the theme tokens (no portal needed).\n */\n@Component({\n  selector: 'vsp-command-palette',\n  template: `@if (open) {\n    <div class=\"ui-overlay ui-cmd-wrap\" role=\"presentation\" (mousedown)=\"onBackdrop($event)\">\n      <div class=\"ui-cmd\" role=\"dialog\" aria-modal=\"true\">\n        <div class=\"ui-cmd-input\">\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"16\"\n            height=\"16\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <circle cx=\"11\" cy=\"11\" r=\"7\" />\n            <path d=\"m21 21-4.3-4.3\" />\n          </svg>\n          <input\n            #input\n            [value]=\"q\"\n            placeholder=\"Type a command or search…\"\n            (input)=\"onInput($event)\"\n            (keydown)=\"onKey($event)\"\n          />\n          <kbd class=\"ui-kbd\">ESC</kbd>\n        </div>\n        <div class=\"ui-cmd-list vsp-scroll\">\n          @if (flat.length === 0) {\n            <div\n              style=\"padding: 28px 12px; text-align: center; color: var(--text-faint); font-size: 13px\"\n            >\n              No results for “{{ q }}”\n            </div>\n          }\n          @for (g of groupOrder; track g) {\n            <div>\n              <div class=\"ui-cmd-group\">{{ g }}</div>\n              @for (it of itemsOf(g); track it.idx) {\n                <div\n                  [class]=\"'ui-cmd-item' + (it.idx === active ? ' active' : '')\"\n                  (mouseenter)=\"active = it.idx\"\n                  (click)=\"run(it)\"\n                >\n                  @if (it.icon) {\n                    <svg\n                      viewBox=\"0 0 24 24\"\n                      width=\"16\"\n                      height=\"16\"\n                      fill=\"none\"\n                      stroke=\"currentColor\"\n                      stroke-width=\"2\"\n                      stroke-linecap=\"round\"\n                      stroke-linejoin=\"round\"\n                    >\n                      <path [attr.d]=\"it.icon\" />\n                    </svg>\n                  }\n                  <span>{{ it.label }}</span>\n                  @if (it.meta) {\n                    <span class=\"ui-cmd-meta\">{{ it.meta }}</span>\n                  }\n                </div>\n              }\n            </div>\n          }\n        </div>\n        <div class=\"ui-cmd-foot\">\n          <span class=\"k\"> <kbd class=\"ui-kbd\">↑</kbd> <kbd class=\"ui-kbd\">↓</kbd> navigate </span>\n          <span class=\"k\"> <kbd class=\"ui-kbd\">↵</kbd> select </span>\n          <span class=\"k\" style=\"margin-left: auto\">Vespera Command</span>\n        </div>\n      </div>\n    </div>\n  }`,\n})\nexport class VspCommandPalette implements OnChanges {\n  @Input() open = false;\n  @Input() groups: CommandGroup[] = [];\n  @Output() close = new EventEmitter<void>();\n  @ViewChild('input') input?: ElementRef<HTMLInputElement>;\n\n  q = '';\n  active = 0;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['open'] && this.open) {\n      this.q = '';\n      this.active = 0;\n      setTimeout(() => this.input?.nativeElement.focus(), 30);\n    }\n  }\n\n  get flat(): FlatCmd[] {\n    const query = this.q.toLowerCase();\n    const out: FlatCmd[] = [];\n    for (const g of this.groups) {\n      for (const it of g.items) {\n        if (!query || haystack(it).includes(query)) {\n          out.push({ ...it, group: g.label, idx: out.length });\n        }\n      }\n    }\n    return out;\n  }\n\n  get groupOrder(): string[] {\n    const order: string[] = [];\n    const seen = new Set<string>();\n    for (const it of this.flat) {\n      if (!seen.has(it.group)) {\n        seen.add(it.group);\n        order.push(it.group);\n      }\n    }\n    return order;\n  }\n\n  itemsOf(g: string): FlatCmd[] {\n    return this.flat.filter((it) => it.group === g);\n  }\n\n  onInput(e: Event): void {\n    this.q = (e.target as HTMLInputElement).value;\n    this.active = 0;\n  }\n\n  run(it: FlatCmd | undefined): void {\n    it?.onRun?.();\n    this.close.emit();\n  }\n\n  @HostListener('document:keydown.escape')\n  onEsc(): void {\n    if (this.open) this.close.emit();\n  }\n\n  onBackdrop(e: MouseEvent): void {\n    if (e.target === e.currentTarget) this.close.emit();\n  }\n\n  onKey(e: KeyboardEvent): void {\n    const flat = this.flat;\n    if (e.key === 'ArrowDown') {\n      e.preventDefault();\n      this.active = Math.min(flat.length - 1, this.active + 1);\n    } else if (e.key === 'ArrowUp') {\n      e.preventDefault();\n      this.active = Math.max(0, this.active - 1);\n    } else if (e.key === 'Enter') {\n      e.preventDefault();\n      this.run(flat[this.active]);\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\n\nexport type SelectValue = string | number;\nexport interface SelectOption {\n  value: SelectValue;\n  label: string;\n  /** Optional color swatch shown before the label. */\n  swatch?: string;\n}\nexport type SelectOptionInput = SelectValue | SelectOption;\n\nfunction normalize(o: SelectOptionInput): SelectOption {\n  return typeof o === 'object' ? o : { value: o, label: String(o) };\n}\n\n/* ---------------- anchored, in-place floating panel ---------------- */\n\n/**\n * Floating panel that tracks its trigger. Renders in place — `.ui-menu` is\n * positioned `fixed` from the anchor's rect, so it escapes overflow as long as\n * the component lives inside `.vsp-root`. Project the panel body as content.\n */\n@Component({\n  selector: 'vsp-sel-panel',\n  template: `@if (open && rect) {\n    <div\n      #panel\n      [class]=\"menuClass\"\n      style=\"position: fixed; z-index: 330\"\n      [style.top.px]=\"rect.bottom + 6\"\n      [style.left.px]=\"rect.left\"\n      [style.width]=\"auto ? 'auto' : (width ?? rect.width) + 'px'\"\n      [style.padding]=\"auto ? '0' : null\"\n      [style.maxHeight]=\"auto ? null : maxH + 'px'\"\n    >\n      <ng-content />\n    </div>\n  }`,\n})\nexport class VspSelPanel implements OnChanges, OnDestroy {\n  @Input() open = false;\n  @Input() anchor: HTMLElement | null = null;\n  @Input() width?: number;\n  @Input() menuClass = 'ui-menu ui-combo';\n  /** Hug the content (auto width, no padding/max-height) — used by the date pickers. */\n  @Input() auto = false;\n  @Output() close = new EventEmitter<void>();\n  @ViewChild('panel') panel?: ElementRef<HTMLElement>;\n\n  rect: DOMRect | null = null;\n  private cleanup: (() => void) | null = null;\n\n  get maxH(): number {\n    return Math.max(220, window.innerHeight - (this.rect?.bottom ?? 0) - 16);\n  }\n\n  private place = (): void => {\n    if (this.anchor) this.rect = this.anchor.getBoundingClientRect();\n  };\n\n  ngOnChanges(c: SimpleChanges): void {\n    if (c['open']) {\n      if (this.open) this.activate();\n      else this.deactivate();\n    }\n  }\n\n  private activate(): void {\n    this.place();\n    const onDoc = (e: MouseEvent): void => {\n      const t = e.target as Node;\n      if (!this.panel?.nativeElement.contains(t) && !this.anchor?.contains(t)) this.close.emit();\n    };\n    const onEsc = (e: KeyboardEvent): void => {\n      if (e.key === 'Escape') this.close.emit();\n    };\n    document.addEventListener('mousedown', onDoc);\n    window.addEventListener('keydown', onEsc);\n    window.addEventListener('resize', this.place);\n    window.addEventListener('scroll', this.place, true);\n    this.cleanup = () => {\n      document.removeEventListener('mousedown', onDoc);\n      window.removeEventListener('keydown', onEsc);\n      window.removeEventListener('resize', this.place);\n      window.removeEventListener('scroll', this.place, true);\n    };\n  }\n\n  private deactivate(): void {\n    this.cleanup?.();\n    this.cleanup = null;\n    this.rect = null;\n  }\n\n  ngOnDestroy(): void {\n    this.cleanup?.();\n  }\n}\n\n/* ---------------- search + list ---------------- */\n\n@Component({\n  selector: 'vsp-combo-list',\n  template: `\n    <div class=\"ui-combo-search\">\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <circle cx=\"11\" cy=\"11\" r=\"7\" />\n        <path d=\"m21 21-4.3-4.3\" />\n      </svg>\n      <input\n        #search\n        [value]=\"q\"\n        [placeholder]=\"searchPlaceholder ?? 'Search…'\"\n        (input)=\"onInput($event)\"\n        (keydown)=\"onKey($event)\"\n      />\n    </div>\n    <div class=\"ui-combo-list\">\n      @if (loading) {\n        <div class=\"ui-combo-loading\">\n          <span class=\"ui-spinner\" aria-hidden=\"true\"></span> Loading…\n        </div>\n      } @else if (items.length === 0) {\n        <div class=\"ui-combo-empty\">{{ emptyText ?? 'No matches for “' + q + '”' }}</div>\n      }\n      @for (o of loading ? [] : items; track o.value; let i = $index) {\n        <div\n          [class]=\"'ui-combo-item' + (i === activeIdx ? ' active' : '')\"\n          (mouseenter)=\"activeIdxChange.emit(i)\"\n          (click)=\"pick.emit(o)\"\n        >\n          @if (o.swatch) {\n            <span\n              [style.background]=\"o.swatch\"\n              style=\"width: 9px; height: 9px; border-radius: 3px; flex-shrink: 0\"\n            ></span>\n          }\n          <span>{{ o.label }}</span>\n          @if (isSel(o)) {\n            <svg\n              class=\"tick\"\n              viewBox=\"0 0 24 24\"\n              width=\"14\"\n              height=\"14\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            >\n              <path d=\"M20 6L9 17l-5-5\" />\n            </svg>\n          }\n        </div>\n      }\n    </div>\n    <ng-content select=\"[footer]\" />\n  `,\n})\nexport class VspComboList implements AfterViewInit {\n  @Input() q = '';\n  @Input() items: SelectOption[] = [];\n  @Input() activeIdx = 0;\n  @Input() isSel: (o: SelectOption) => boolean = () => false;\n  @Input() searchPlaceholder?: string;\n  @Input() loading = false;\n  @Input() emptyText?: string;\n  @Output() qChange = new EventEmitter<string>();\n  @Output() activeIdxChange = new EventEmitter<number>();\n  @Output() pick = new EventEmitter<SelectOption>();\n  @ViewChild('search') search?: ElementRef<HTMLInputElement>;\n\n  ngAfterViewInit(): void {\n    setTimeout(() => this.search?.nativeElement.focus(), 30);\n  }\n\n  onInput(e: Event): void {\n    this.qChange.emit((e.target as HTMLInputElement).value);\n    this.activeIdxChange.emit(0);\n  }\n\n  onKey(e: KeyboardEvent): void {\n    if (e.key === 'ArrowDown') {\n      e.preventDefault();\n      this.activeIdxChange.emit(Math.min(this.items.length - 1, this.activeIdx + 1));\n    } else if (e.key === 'ArrowUp') {\n      e.preventDefault();\n      this.activeIdxChange.emit(Math.max(0, this.activeIdx - 1));\n    } else if (e.key === 'Enter') {\n      e.preventDefault();\n      const it = this.items[this.activeIdx];\n      if (it) this.pick.emit(it);\n    }\n  }\n}\n\n/* ---------------- Select (themed drop-in, auto-searches at ≥8 options) ---------------- */\n\n@Component({\n  selector: 'vsp-select',\n  imports: [VspSelPanel, VspComboList],\n  template: `\n    <button\n      #anchor\n      type=\"button\"\n      [id]=\"id\"\n      [disabled]=\"disabled\"\n      [attr.aria-invalid]=\"invalid || null\"\n      [class]=\"'ui-selectbtn' + (open ? ' open' : '') + (invalid ? ' invalid' : '')\"\n      (click)=\"open = !open\"\n    >\n      <span [class]=\"'val' + (sel ? '' : ' ph')\">{{ sel ? sel.label : placeholder }}</span>\n    </button>\n    @if (name) {\n      <input type=\"hidden\" [name]=\"name\" [value]=\"cur ?? ''\" />\n    }\n    <vsp-sel-panel [open]=\"open\" [anchor]=\"anchor\" (close)=\"open = false\">\n      @if (open) {\n        @if (useSearch) {\n          <vsp-combo-list\n            [q]=\"q\"\n            [items]=\"items\"\n            [activeIdx]=\"active\"\n            [isSel]=\"isSelFn\"\n            [emptyText]=\"emptyText\"\n            (qChange)=\"q = $event\"\n            (activeIdxChange)=\"active = $event\"\n            (pick)=\"choose($event)\"\n          />\n        } @else {\n          <div class=\"ui-combo-list\">\n            @if (items.length === 0) {\n              <div class=\"ui-combo-empty\">{{ emptyText ?? 'No options' }}</div>\n            }\n            @for (o of items; track o.value) {\n              <div [class]=\"'ui-combo-item' + (sameVal(o) ? ' active' : '')\" (click)=\"choose(o)\">\n                @if (o.swatch) {\n                  <span\n                    [style.background]=\"o.swatch\"\n                    style=\"width: 9px; height: 9px; border-radius: 3px; flex-shrink: 0\"\n                  ></span>\n                }\n                <span>{{ o.label }}</span>\n                @if (sameVal(o)) {\n                  <svg\n                    class=\"tick\"\n                    viewBox=\"0 0 24 24\"\n                    width=\"14\"\n                    height=\"14\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    stroke-width=\"2\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  >\n                    <path d=\"M20 6L9 17l-5-5\" />\n                  </svg>\n                }\n              </div>\n            }\n          </div>\n        }\n      }\n    </vsp-sel-panel>\n  `,\n})\nexport class VspSelect {\n  @Input() options: SelectOptionInput[] = [];\n  @Input() value?: SelectValue;\n  @Output() valueChange = new EventEmitter<SelectValue>();\n  @Input() placeholder = 'Select…';\n  @Input() disabled = false;\n  @Input() invalid = false;\n  @Input() emptyText?: string;\n  @Input() id?: string;\n  @Input() name?: string;\n  @Input() searchable?: boolean;\n\n  open = false;\n  q = '';\n  active = 0;\n\n  get opts(): SelectOption[] {\n    return this.options.map(normalize);\n  }\n  get cur(): SelectValue | undefined {\n    return this.value ?? this.opts[0]?.value;\n  }\n  get sel(): SelectOption | undefined {\n    return this.opts.find((o) => String(o.value) === String(this.cur));\n  }\n  get useSearch(): boolean {\n    return this.searchable ?? this.opts.length >= 8;\n  }\n  get items(): SelectOption[] {\n    return this.useSearch\n      ? this.opts.filter((o) => o.label.toLowerCase().includes(this.q.toLowerCase()))\n      : this.opts;\n  }\n  isSelFn = (o: SelectOption): boolean => String(o.value) === String(this.cur);\n  sameVal(o: SelectOption): boolean {\n    return String(o.value) === String(this.cur);\n  }\n  choose(o: SelectOption): void {\n    this.value = o.value;\n    this.valueChange.emit(o.value);\n    this.open = false;\n    this.q = '';\n  }\n}\n\n/* ---------------- Combobox (searchable single select) ---------------- */\n\n@Component({\n  selector: 'vsp-combobox',\n  imports: [VspSelPanel, VspComboList],\n  template: `\n    <button\n      #anchor\n      type=\"button\"\n      [id]=\"id\"\n      [disabled]=\"disabled\"\n      [attr.aria-invalid]=\"invalid || null\"\n      [class]=\"'ui-trigger' + (open ? ' open' : '') + (invalid ? ' invalid' : '')\"\n      (click)=\"open = !open\"\n    >\n      <span [class]=\"'val' + (sel ? '' : ' ph')\">{{ sel ? sel.label : placeholder }}</span>\n      @if (clearable && sel && !disabled) {\n        <span\n          role=\"button\"\n          tabindex=\"-1\"\n          style=\"display: grid; place-items: center; color: var(--text-faint)\"\n          (click)=\"clear($event)\"\n          (keydown.enter)=\"set(null)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"14\"\n            height=\"14\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path d=\"M18 6L6 18M6 6l12 12\" />\n          </svg>\n        </span>\n      }\n      <svg\n        class=\"chev\"\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M6 9l6 6 6-6\" />\n      </svg>\n    </button>\n    @if (name) {\n      <input type=\"hidden\" [name]=\"name\" [value]=\"value ?? ''\" />\n    }\n    <vsp-sel-panel [open]=\"open\" [anchor]=\"anchor\" (close)=\"open = false\">\n      @if (open) {\n        <vsp-combo-list\n          [q]=\"q\"\n          [items]=\"items\"\n          [activeIdx]=\"active\"\n          [isSel]=\"isSelFn\"\n          [searchPlaceholder]=\"searchPlaceholder\"\n          [loading]=\"loading\"\n          [emptyText]=\"emptyText\"\n          (qChange)=\"q = $event\"\n          (activeIdxChange)=\"active = $event\"\n          (pick)=\"pick($event)\"\n        >\n          @if (canCreate) {\n            <button footer type=\"button\" class=\"ui-combo-create\" (click)=\"create()\">\n              <svg\n                viewBox=\"0 0 24 24\"\n                width=\"15\"\n                height=\"15\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                stroke-width=\"2\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              >\n                <path d=\"M12 5v14M5 12h14\" />\n              </svg>\n              Create “{{ q.trim() }}”\n            </button>\n          }\n        </vsp-combo-list>\n      }\n    </vsp-sel-panel>\n  `,\n})\nexport class VspCombobox {\n  @Input() options: SelectOptionInput[] = [];\n  @Input() value: SelectValue | null = null;\n  @Output() valueChange = new EventEmitter<SelectValue | null>();\n  @Input() placeholder = 'Select…';\n  @Input() searchPlaceholder?: string;\n  @Input() clearable = false;\n  @Input() disabled = false;\n  @Input() invalid = false;\n  @Input() loading = false;\n  @Input() emptyText?: string;\n  @Input() id?: string;\n  @Input() name?: string;\n  @Input() creatable = false;\n  @Output() created = new EventEmitter<string>();\n\n  open = false;\n  q = '';\n  active = 0;\n\n  get canCreate(): boolean {\n    const t = this.q.trim();\n    return (\n      this.creatable && !!t && !this.opts.some((o) => o.label.toLowerCase() === t.toLowerCase())\n    );\n  }\n  create(): void {\n    this.created.emit(this.q.trim());\n    this.open = false;\n    this.q = '';\n  }\n\n  get opts(): SelectOption[] {\n    return this.options.map(normalize);\n  }\n  get sel(): SelectOption | undefined {\n    return this.opts.find((o) => o.value === this.value);\n  }\n  get items(): SelectOption[] {\n    return this.opts.filter((o) => o.label.toLowerCase().includes(this.q.toLowerCase()));\n  }\n  isSelFn = (o: SelectOption): boolean => o.value === this.value;\n  set(v: SelectValue | null): void {\n    this.value = v;\n    this.valueChange.emit(v);\n  }\n  clear(e: Event): void {\n    e.stopPropagation();\n    this.set(null);\n  }\n  pick(o: SelectOption): void {\n    this.set(o.value);\n    this.open = false;\n    this.q = '';\n  }\n}\n\n/* ---------------- MultiSelect (searchable, tagged) ---------------- */\n\n@Component({\n  selector: 'vsp-multi-select',\n  imports: [VspSelPanel, VspComboList],\n  template: `\n    <div\n      #anchor\n      role=\"button\"\n      [attr.tabindex]=\"disabled ? -1 : 0\"\n      [id]=\"id\"\n      [attr.aria-disabled]=\"disabled || null\"\n      [attr.aria-invalid]=\"invalid || null\"\n      [class]=\"\n        'ui-trigger' +\n        (open ? ' open' : '') +\n        (invalid ? ' invalid' : '') +\n        (disabled ? ' disabled' : '')\n      \"\n      style=\"min-height: var(--ctrl-h)\"\n      (click)=\"disabled ? null : (open = !open)\"\n      (keydown.enter)=\"toggleOpen($event)\"\n      (keydown.space)=\"toggleOpen($event)\"\n    >\n      @if (selOpts.length === 0) {\n        <span class=\"val ph\">{{ placeholder }}</span>\n      } @else {\n        <span class=\"tags\">\n          @for (o of selOpts; track o.value) {\n            <span class=\"ui-tag\" (click)=\"$event.stopPropagation()\">\n              {{ o.label }}\n              <button type=\"button\" [attr.aria-label]=\"'Remove ' + o.label\" (click)=\"remove(o)\">\n                <svg\n                  viewBox=\"0 0 24 24\"\n                  width=\"11\"\n                  height=\"11\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  stroke-width=\"2\"\n                  stroke-linecap=\"round\"\n                  stroke-linejoin=\"round\"\n                >\n                  <path d=\"M18 6L6 18M6 6l12 12\" />\n                </svg>\n              </button>\n            </span>\n          }\n        </span>\n      }\n      <svg\n        class=\"chev\"\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M6 9l6 6 6-6\" />\n      </svg>\n    </div>\n    @if (name) {\n      @for (v of value; track v) {\n        <input type=\"hidden\" [name]=\"name\" [value]=\"v\" />\n      }\n    }\n    <vsp-sel-panel [open]=\"open\" [anchor]=\"anchor\" (close)=\"open = false\">\n      @if (open) {\n        <vsp-combo-list\n          [q]=\"q\"\n          [items]=\"items\"\n          [activeIdx]=\"active\"\n          [isSel]=\"isSelFn\"\n          [searchPlaceholder]=\"searchPlaceholder\"\n          [loading]=\"loading\"\n          [emptyText]=\"emptyText\"\n          (qChange)=\"q = $event\"\n          (activeIdxChange)=\"active = $event\"\n          (pick)=\"toggle($event)\"\n        >\n          <div footer class=\"ui-combo-foot\">\n            <span class=\"mono\" style=\"font-size: 11px; color: var(--text-faint)\">\n              {{ value.length }} selected{{ max ? ' / ' + max : '' }}\n            </span>\n            <div style=\"flex: 1\"></div>\n            @if (value.length > 0) {\n              <button type=\"button\" class=\"btn btn-subtle btn-sm\" (click)=\"set([])\">Clear</button>\n            }\n          </div>\n        </vsp-combo-list>\n      }\n    </vsp-sel-panel>\n  `,\n})\nexport class VspMultiSelect {\n  @Input() options: SelectOptionInput[] = [];\n  @Input() value: SelectValue[] = [];\n  @Output() valueChange = new EventEmitter<SelectValue[]>();\n  @Input() placeholder = 'Select…';\n  @Input() searchPlaceholder?: string;\n  @Input() max?: number;\n  @Input() disabled = false;\n  @Input() invalid = false;\n  @Input() loading = false;\n  @Input() emptyText?: string;\n  @Input() id?: string;\n  @Input() name?: string;\n\n  open = false;\n  q = '';\n  active = 0;\n\n  get opts(): SelectOption[] {\n    return this.options.map(normalize);\n  }\n  get items(): SelectOption[] {\n    return this.opts.filter((o) => o.label.toLowerCase().includes(this.q.toLowerCase()));\n  }\n  get selOpts(): SelectOption[] {\n    return this.opts.filter((o) => this.has(o.value));\n  }\n  has(v: SelectValue): boolean {\n    return this.value.includes(v);\n  }\n  isSelFn = (o: SelectOption): boolean => this.has(o.value);\n  set(next: SelectValue[]): void {\n    this.value = next;\n    this.valueChange.emit(next);\n  }\n  toggle(o: SelectOption): void {\n    if (this.has(o.value)) this.set(this.value.filter((v) => v !== o.value));\n    else if (!this.max || this.value.length < this.max) this.set([...this.value, o.value]);\n  }\n  remove(o: SelectOption): void {\n    this.set(this.value.filter((v) => v !== o.value));\n  }\n  toggleOpen(e: Event): void {\n    if (this.disabled) return;\n    e.preventDefault();\n    this.open = !this.open;\n  }\n}\n\n/* ---------------- TokenInput (creatable tags) ---------------- */\n\n@Component({\n  selector: 'vsp-token-input',\n  template: `\n    <div\n      #root\n      [class]=\"'ui-trigger' + (invalid ? ' invalid' : '') + (disabled ? ' disabled' : '')\"\n      [attr.aria-invalid]=\"invalid || null\"\n      [style.cursor]=\"disabled ? 'not-allowed' : 'text'\"\n      style=\"flex-wrap: wrap; align-items: center; gap: 6px; padding-top: 5px; padding-bottom: 5px\"\n      (click)=\"focusInput()\"\n    >\n      @for (t of value; track t) {\n        <span class=\"ui-tag\" style=\"max-width: 100%\">\n          <span style=\"overflow: hidden; text-overflow: ellipsis; white-space: nowrap\">{{\n            t\n          }}</span>\n          <button type=\"button\" [attr.aria-label]=\"'Remove ' + t\" (click)=\"remove(t)\">\n            <svg\n              viewBox=\"0 0 24 24\"\n              width=\"11\"\n              height=\"11\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            >\n              <path d=\"M18 6L6 18M6 6l12 12\" />\n            </svg>\n          </button>\n        </span>\n      }\n      <input\n        [id]=\"id\"\n        [value]=\"draft\"\n        [disabled]=\"disabled || full\"\n        [placeholder]=\"value.length ? '' : placeholder\"\n        (input)=\"draft = $any($event.target).value\"\n        (keydown)=\"onKey($event)\"\n        (blur)=\"add()\"\n        style=\"flex: 1 1 80px; min-width: 80px; border: 0; background: transparent; outline: none; font: inherit; font-size: 13.5px; color: var(--text)\"\n      />\n    </div>\n  `,\n})\nexport class VspTokenInput {\n  @Input() value: string[] = [];\n  @Output() valueChange = new EventEmitter<string[]>();\n  @Input() placeholder = 'Type and press Enter…';\n  @Input() disabled = false;\n  @Input() invalid = false;\n  @Input() max?: number;\n  @Input() id?: string;\n  @ViewChild('root') root?: ElementRef<HTMLElement>;\n\n  draft = '';\n\n  get full(): boolean {\n    return this.max != null && this.value.length >= this.max;\n  }\n  set(next: string[]): void {\n    this.value = next;\n    this.valueChange.emit(next);\n  }\n  add(): void {\n    const t = this.draft.trim();\n    if (t && !this.value.includes(t) && !this.full) this.set([...this.value, t]);\n    this.draft = '';\n  }\n  remove(t: string): void {\n    this.set(this.value.filter((v) => v !== t));\n  }\n  focusInput(): void {\n    if (!this.disabled) this.root?.nativeElement.querySelector('input')?.focus();\n  }\n  onKey(e: KeyboardEvent): void {\n    if (e.key === 'Enter' || e.key === ',') {\n      e.preventDefault();\n      this.add();\n    } else if (e.key === 'Backspace' && !this.draft && this.value.length) {\n      this.set(this.value.slice(0, -1));\n    }\n  }\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\n\n@Component({\n  selector: 'vsp-file-dropzone',\n  template: `<div\n    [class]=\"'ui-dropzone' + (drag ? ' drag' : '') + (disabled ? ' disabled' : '')\"\n    role=\"button\"\n    [attr.tabindex]=\"disabled ? -1 : 0\"\n    [attr.aria-disabled]=\"disabled || null\"\n    (click)=\"disabled ? null : input.click()\"\n    (keydown.enter)=\"disabled ? null : input.click()\"\n    (keydown.space)=\"disabled ? null : input.click()\"\n    (dragover)=\"onDragOver($event)\"\n    (dragleave)=\"drag = false\"\n    (drop)=\"onDrop($event)\"\n  >\n    <span class=\"dz-icon\">\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"21\"\n        height=\"21\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\" />\n      </svg>\n    </span>\n    <div style=\"font-weight: 600; font-size: 13.5px\">\n      Drop files or <span style=\"color: var(--accent)\">browse</span>\n    </div>\n    <div style=\"font-size: 12px; color: var(--text-faint)\">{{ hint }}</div>\n    <input\n      #input\n      type=\"file\"\n      [attr.accept]=\"accept\"\n      [multiple]=\"multiple\"\n      hidden\n      (change)=\"onChange($event)\"\n    />\n  </div>`,\n})\nexport class VspFileDropzone {\n  @Input() hint = 'PNG, JPG or PDF up to 10MB';\n  @Input() accept?: string;\n  @Input() multiple = true;\n  @Input() maxSize?: number;\n  @Input() maxFiles?: number;\n  @Input() disabled = false;\n  @Output() files = new EventEmitter<File[]>();\n  @Output() reject = new EventEmitter<File[]>();\n  @ViewChild('input') input?: ElementRef<HTMLInputElement>;\n\n  drag = false;\n\n  private take(list: FileList | null): void {\n    if (!list || !list.length) return;\n    let files = Array.from(list);\n    const rejected: File[] = [];\n    if (this.maxSize != null)\n      files = files.filter((f) => {\n        if (f.size > this.maxSize!) {\n          rejected.push(f);\n          return false;\n        }\n        return true;\n      });\n    if (this.maxFiles != null && files.length > this.maxFiles) {\n      rejected.push(...files.slice(this.maxFiles));\n      files = files.slice(0, this.maxFiles);\n    }\n    if (rejected.length) this.reject.emit(rejected);\n    if (files.length) this.files.emit(files);\n  }\n  onDragOver(e: DragEvent): void {\n    if (this.disabled) return;\n    e.preventDefault();\n    this.drag = true;\n  }\n  onDrop(e: DragEvent): void {\n    if (this.disabled) return;\n    e.preventDefault();\n    this.drag = false;\n    this.take(e.dataTransfer?.files ?? null);\n  }\n  onChange(e: Event): void {\n    this.take((e.target as HTMLInputElement).files);\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  Output,\n} from '@angular/core';\nimport { VspSelPanel } from './select.component';\n\nconst DOW = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst MONTHS = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n];\n\n/** Format a date like \"Jan 5, 2026\". */\nexport const fmtDate = (d: Date | null | undefined): string =>\n  d ? `${MONTHS[d.getMonth()].slice(0, 3)} ${d.getDate()}, ${d.getFullYear()}` : '';\n\nconst sameDay = (a: Date | null | undefined, b: Date | null | undefined): boolean =>\n  !!a &&\n  !!b &&\n  a.getFullYear() === b.getFullYear() &&\n  a.getMonth() === b.getMonth() &&\n  a.getDate() === b.getDate();\n\nconst stripTime = (d: Date): Date => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nconst nightsBetween = (a: Date, b: Date): number =>\n  Math.abs(Math.round((stripTime(b).getTime() - stripTime(a).getTime()) / 86400000));\n\n/**\n * Flexible date matcher used by the pickers' `disabled` input. Accepts a `Date`,\n * `Date[]`, `{ from, to }`, `{ before }`, `{ after }`, `{ dayOfWeek: [0,6] }`, a\n * `(date) => boolean` predicate, or an array of any of these (any match wins).\n */\nexport type DateMatcher =\n  | Date\n  | Date[]\n  | { from: Date; to: Date }\n  | { before: Date }\n  | { after: Date }\n  | { dayOfWeek: number[] }\n  | ((date: Date) => boolean);\n\n/** True when `d` satisfies the matcher (or any matcher in the array). */\nexport function matchesDate(d: Date, matcher?: DateMatcher | DateMatcher[]): boolean {\n  if (!matcher) return false;\n  if (Array.isArray(matcher)) return matcher.some((m) => matchesDate(d, m as DateMatcher));\n  if (matcher instanceof Date) return sameDay(d, matcher);\n  if (typeof matcher === 'function') return matcher(d);\n  const x = stripTime(d);\n  if ('from' in matcher && 'to' in matcher)\n    return x >= stripTime(matcher.from) && x <= stripTime(matcher.to);\n  if ('before' in matcher) return x < stripTime(matcher.before);\n  if ('after' in matcher) return x > stripTime(matcher.after);\n  if ('dayOfWeek' in matcher) return matcher.dayOfWeek.includes(d.getDay());\n  return false;\n}\n\ninterface GridDay {\n  dt: Date;\n  muted?: boolean;\n}\n\nfunction monthGrid(year: number, month: number): GridDay[] {\n  const first = new Date(year, month, 1);\n  const days: GridDay[] = [];\n  for (let i = first.getDay(); i > 0; i--)\n    days.push({ dt: new Date(year, month, 1 - i), muted: true });\n  const dim = new Date(year, month + 1, 0).getDate();\n  for (let d = 1; d <= dim; d++) days.push({ dt: new Date(year, month, d) });\n  while (days.length < 42) {\n    const last = days[days.length - 1].dt;\n    const nd = new Date(last);\n    nd.setDate(nd.getDate() + 1);\n    days.push({ dt: nd, muted: true });\n  }\n  return days;\n}\n\nexport interface MonthView {\n  m: number;\n  y: number;\n}\nexport type RangeEdge = 'start' | 'end' | false;\nexport interface DateRange {\n  start: Date | null;\n  end: Date | null;\n}\n/** A named shortcut shown in the range picker's preset rail. */\nexport interface RangePreset {\n  label: string;\n  range: DateRange;\n}\n\n/* ---------------- Calendar (month grid) ---------------- */\n\n@Component({\n  selector: 'vsp-calendar',\n  template: `<div class=\"ui-cal\">\n    <div class=\"ui-cal-head\">\n      <button\n        type=\"button\"\n        class=\"ui-cal-nav\"\n        aria-label=\"Previous month\"\n        [disabled]=\"prevDisabled\"\n        (click)=\"nav(-1)\"\n      >\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"16\"\n          height=\"16\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <path d=\"M15 18l-6-6 6-6\" />\n        </svg>\n      </button>\n      <span class=\"ttl\">{{ months[view.m] }} {{ view.y }}</span>\n      <button\n        type=\"button\"\n        class=\"ui-cal-nav\"\n        aria-label=\"Next month\"\n        [disabled]=\"nextDisabled\"\n        (click)=\"nav(1)\"\n      >\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"16\"\n          height=\"16\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <path d=\"M9 18l6-6-6-6\" />\n        </svg>\n      </button>\n    </div>\n    <div class=\"ui-cal-grid\">\n      @for (d of dow; track d) {\n        <div class=\"ui-cal-dow\">{{ d }}</div>\n      }\n      @for (g of days; track i; let i = $index) {\n        <button\n          type=\"button\"\n          [class]=\"dayClass(g.dt, g.muted)\"\n          [disabled]=\"dayDisabled(g.dt)\"\n          (click)=\"dayDisabled(g.dt) ? null : pick.emit(strip(g.dt))\"\n        >\n          {{ g.dt.getDate() }}\n        </button>\n      }\n    </div>\n  </div>`,\n})\nexport class VspCalendar {\n  private readonly cdr = inject(ChangeDetectorRef);\n  @Input() view: MonthView = { m: 0, y: 0 };\n  @Output() viewChange = new EventEmitter<MonthView>();\n  @Input() isSelected: (d: Date) => boolean = () => false;\n  @Input() isInRange?: (d: Date) => boolean;\n  @Input() isRangeEnd?: (d: Date) => RangeEdge;\n  @Input() isDisabled?: (d: Date) => boolean;\n  @Input() min?: Date;\n  @Input() max?: Date;\n  @Output() pick = new EventEmitter<Date>();\n\n  dow = DOW;\n  months = MONTHS;\n  today = stripTime(new Date());\n  strip = stripTime;\n\n  get days(): GridDay[] {\n    return monthGrid(this.view.y, this.view.m);\n  }\n  private get minD(): Date | null {\n    return this.min ? stripTime(this.min) : null;\n  }\n  private get maxD(): Date | null {\n    return this.max ? stripTime(this.max) : null;\n  }\n  get prevDisabled(): boolean {\n    return !!this.minD && new Date(this.view.y, this.view.m, 1) <= this.minD;\n  }\n  get nextDisabled(): boolean {\n    return !!this.maxD && new Date(this.view.y, this.view.m + 1, 0) >= this.maxD;\n  }\n  dayDisabled = (dt: Date): boolean =>\n    !!this.isDisabled?.(dt) ||\n    (!!this.minD && stripTime(dt) < this.minD) ||\n    (!!this.maxD && stripTime(dt) > this.maxD);\n\n  nav(delta: number): void {\n    let m = this.view.m + delta;\n    let y = this.view.y;\n    if (m < 0) {\n      m = 11;\n      y--;\n    }\n    if (m > 11) {\n      m = 0;\n      y++;\n    }\n    // Drive our own `view` rather than waiting for the parent to push it back via\n    // `[view]`. In a zoneless app that @Output() round-trip doesn't refresh the open\n    // calendar, so the month label/grid would appear frozen. Self-updating + markForCheck\n    // keeps the calendar correct under both zoned and zoneless change detection.\n    this.view = { m, y };\n    this.viewChange.emit(this.view);\n    this.cdr.markForCheck();\n  }\n\n  dayClass(dt: Date, muted?: boolean): string {\n    const sel = this.isSelected(dt);\n    const range = this.isInRange?.(dt);\n    const rEdge = this.isRangeEnd?.(dt);\n    return [\n      'ui-cal-day',\n      muted && 'muted',\n      sameDay(dt, this.today) && 'today',\n      sel && 'sel',\n      range && !sel && 'inrange',\n      rEdge === 'start' && 'rstart',\n      rEdge === 'end' && 'rend',\n      this.dayDisabled(dt) && 'disabled',\n    ]\n      .filter(Boolean)\n      .join(' ');\n  }\n}\n\n/* ---------------- DatePicker ---------------- */\n\n@Component({\n  selector: 'vsp-date-picker',\n  imports: [VspSelPanel, VspCalendar],\n  template: `\n    <button\n      #anchor\n      type=\"button\"\n      [class]=\"'ui-trigger' + (open ? ' open' : '')\"\n      (click)=\"open = !open\"\n    >\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        style=\"color: var(--text-faint); flex-shrink: 0\"\n      >\n        <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n        <path d=\"M16 2v4M8 2v4M3 10h18\" />\n      </svg>\n      <span [class]=\"'val' + (empty ? ' ph' : '')\">{{ label }}</span>\n      <svg\n        class=\"chev\"\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M6 9l6 6 6-6\" />\n      </svg>\n    </button>\n    <vsp-sel-panel\n      [open]=\"open\"\n      [anchor]=\"anchor\"\n      [auto]=\"true\"\n      menuClass=\"ui-menu\"\n      (close)=\"open = false\"\n    >\n      @if (open) {\n        <vsp-calendar\n          [view]=\"view\"\n          (viewChange)=\"view = $event\"\n          [min]=\"min\"\n          [max]=\"max\"\n          [isDisabled]=\"isDisabledFn\"\n          [isSelected]=\"isSelectedFn\"\n          (pick)=\"choose($event)\"\n        />\n        @if (multiple) {\n          <div class=\"ui-combo-foot\">\n            <span class=\"mono\" style=\"font-size: 11px; color: var(--text-faint)\">\n              {{ values.length ? values.length + ' selected' : 'Select dates' }}\n            </span>\n            <div style=\"flex: 1\"></div>\n            <button type=\"button\" class=\"btn btn-subtle btn-sm\" (click)=\"clearAll()\">Clear</button>\n            <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"open = false\">\n              Done\n            </button>\n          </div>\n        }\n      }\n    </vsp-sel-panel>\n  `,\n})\nexport class VspDatePicker implements OnChanges {\n  @Input() value: Date | null = null;\n  @Output() valueChange = new EventEmitter<Date>();\n  @Input() placeholder = 'Pick a date';\n  @Input() min?: Date;\n  @Input() max?: Date;\n  @Input() disabled?: DateMatcher | DateMatcher[];\n  @Input() multiple = false;\n  @Input() values: Date[] = [];\n  @Output() valuesChange = new EventEmitter<Date[]>();\n\n  open = false;\n  view: MonthView;\n  fmt = fmtDate;\n  private syncedTime?: number;\n\n  constructor() {\n    const base = this.value ?? new Date();\n    this.view = { m: base.getMonth(), y: base.getFullYear() };\n  }\n\n  ngOnChanges(): void {\n    const v = this.multiple ? this.values[this.values.length - 1] : this.value;\n    if (!v) return;\n    // Re-center the calendar on the selected date only when that date's value actually\n    // changes — not on every new `[value]`/`[values]` object reference. A parent that\n    // binds a freshly-built `Date` each change-detection pass would otherwise reset the\n    // month every cycle and clobber the user's month navigation.\n    const t = v.getTime();\n    if (t !== this.syncedTime) {\n      this.syncedTime = t;\n      this.view = { m: v.getMonth(), y: v.getFullYear() };\n    }\n  }\n\n  get label(): string {\n    if (this.multiple)\n      return this.values.length\n        ? this.values.length === 1\n          ? fmtDate(this.values[0])\n          : `${this.values.length} dates`\n        : this.placeholder;\n    return this.value ? fmtDate(this.value) : this.placeholder;\n  }\n  get empty(): boolean {\n    return this.multiple ? !this.values.length : !this.value;\n  }\n\n  isDisabledFn = (d: Date): boolean => matchesDate(d, this.disabled);\n  isSelectedFn = (d: Date): boolean =>\n    this.multiple ? this.values.some((x) => sameDay(x, d)) : sameDay(d, this.value);\n  choose(d: Date): void {\n    if (this.multiple) {\n      const exists = this.values.some((x) => sameDay(x, d));\n      this.values = exists\n        ? this.values.filter((x) => !sameDay(x, d))\n        : [...this.values, d].sort((a, b) => a.getTime() - b.getTime());\n      this.valuesChange.emit(this.values);\n    } else {\n      this.value = d;\n      this.valueChange.emit(d);\n      this.open = false;\n    }\n  }\n  clearAll(): void {\n    this.values = [];\n    this.valuesChange.emit(this.values);\n  }\n}\n\n/* ---------------- DateRangePicker ---------------- */\n\n@Component({\n  selector: 'vsp-date-range-picker',\n  imports: [VspSelPanel, VspCalendar],\n  template: `\n    <button\n      #anchor\n      type=\"button\"\n      [class]=\"'ui-trigger' + (open ? ' open' : '')\"\n      (click)=\"open = !open\"\n    >\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        style=\"color: var(--text-faint); flex-shrink: 0\"\n      >\n        <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n        <path d=\"M16 2v4M8 2v4M3 10h18\" />\n      </svg>\n      <span [class]=\"'val' + (value.start ? '' : ' ph')\">{{ label }}</span>\n      <svg\n        class=\"chev\"\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M6 9l6 6 6-6\" />\n      </svg>\n    </button>\n    <vsp-sel-panel\n      [open]=\"open\"\n      [anchor]=\"anchor\"\n      [auto]=\"true\"\n      menuClass=\"ui-menu\"\n      (close)=\"open = false\"\n    >\n      @if (open) {\n        <div class=\"ui-cal-wrap\">\n          @if (presets?.length) {\n            <div class=\"ui-cal-presets\">\n              @for (p of presets; track p.label) {\n                <button\n                  type=\"button\"\n                  [class]=\"'ui-cal-preset' + (isPresetActive(p) ? ' on' : '')\"\n                  (click)=\"set(p.range)\"\n                >\n                  {{ p.label }}\n                </button>\n              }\n            </div>\n          }\n          <vsp-calendar\n            [view]=\"view\"\n            (viewChange)=\"view = $event\"\n            [min]=\"min\"\n            [max]=\"max\"\n            [isDisabled]=\"isDisabledFn\"\n            [isSelected]=\"isSelectedFn\"\n            [isInRange]=\"isInRangeFn\"\n            [isRangeEnd]=\"isRangeEndFn\"\n            (pick)=\"pick($event)\"\n          />\n        </div>\n        <div class=\"ui-combo-foot\">\n          <span class=\"mono\" style=\"font-size: 11px; color: var(--text-faint)\">\n            {{ footLabel }}\n          </span>\n          <div style=\"flex: 1\"></div>\n          <button\n            type=\"button\"\n            class=\"btn btn-subtle btn-sm\"\n            (click)=\"set({ start: null, end: null })\"\n          >\n            Clear\n          </button>\n          <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"open = false\">Done</button>\n        </div>\n      }\n    </vsp-sel-panel>\n  `,\n})\nexport class VspDateRangePicker {\n  @Input() value: DateRange = { start: null, end: null };\n  @Output() valueChange = new EventEmitter<DateRange>();\n  @Input() placeholder = 'Pick a range';\n  @Input() min?: Date;\n  @Input() max?: Date;\n  @Input() disabled?: DateMatcher | DateMatcher[];\n  @Input() minNights?: number;\n  @Input() maxNights?: number;\n  @Input() presets?: RangePreset[];\n\n  open = false;\n  view: MonthView;\n\n  constructor() {\n    const base = this.value.start ?? new Date();\n    this.view = { m: base.getMonth(), y: base.getFullYear() };\n  }\n\n  set(r: DateRange): void {\n    this.value = r;\n    this.valueChange.emit(r);\n  }\n  pick(d: Date): void {\n    const v = this.value;\n    if (!v.start || v.end) this.set({ start: d, end: null });\n    else if (d < v.start) this.set({ start: d, end: v.start });\n    else this.set({ start: v.start, end: d });\n  }\n  isDisabledFn = (d: Date): boolean => {\n    if (matchesDate(d, this.disabled)) return true;\n    const v = this.value;\n    if (v.start && !v.end && !sameDay(d, v.start)) {\n      const n = nightsBetween(v.start, d);\n      if (this.minNights != null && n < this.minNights) return true;\n      if (this.maxNights != null && n > this.maxNights) return true;\n    }\n    return false;\n  };\n  isSelectedFn = (d: Date): boolean => sameDay(d, this.value.start) || sameDay(d, this.value.end);\n  isInRangeFn = (d: Date): boolean =>\n    !!this.value.start && !!this.value.end && d > this.value.start && d < this.value.end;\n  isRangeEndFn = (d: Date): RangeEdge => {\n    if (sameDay(d, this.value.start) && this.value.end) return 'start';\n    if (sameDay(d, this.value.end)) return 'end';\n    return false;\n  };\n  isPresetActive(p: RangePreset): boolean {\n    return sameDay(p.range.start, this.value.start) && sameDay(p.range.end, this.value.end);\n  }\n\n  get label(): string {\n    const v = this.value;\n    return v.start\n      ? v.end\n        ? `${fmtDate(v.start)} – ${fmtDate(v.end)}`\n        : `${fmtDate(v.start)} – …`\n      : this.placeholder;\n  }\n  get footLabel(): string {\n    const v = this.value;\n    return v.start && v.end ? `${nightsBetween(v.start, v.end) + 1} days` : 'Select start & end';\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { VspSegmented } from './media.component';\nimport { VspDialog } from './overlay.component';\nimport { VspField, VspInput } from './field.component';\nimport { VspSelect } from './select.component';\nimport { VspButton } from './button.component';\nimport { toast } from './toast.component';\n\nconst MONTHS = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n];\nconst DOW_FULL = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nexport type EventTone = 'info' | 'success' | 'warning' | 'danger' | 'violet';\n\nconst TONE: Record<EventTone, string> = {\n  info: 'var(--accent)',\n  success: 'var(--success)',\n  warning: 'var(--warning)',\n  danger: 'var(--danger)',\n  violet: 'var(--accent-2)',\n};\n\nconst TONE_OPTIONS = [\n  { value: 'info', label: 'Blue' },\n  { value: 'success', label: 'Green' },\n  { value: 'warning', label: 'Amber' },\n  { value: 'danger', label: 'Red' },\n  { value: 'violet', label: 'Violet' },\n];\n\nexport interface CalendarEvent {\n  id?: string;\n  /** Day of the month (1–31). */\n  d: number;\n  title: string;\n  tone: EventTone;\n  /** Display time, e.g. `\"10:00\"` or `\"All day\"`. */\n  time: string;\n  /** Hour (8–18) used to place the event in the week grid. */\n  hour?: number;\n}\ninterface InternalEvent extends CalendarEvent {\n  id: string;\n  hour: number;\n}\ninterface Draft {\n  days: number[];\n  hour: number;\n  title: string;\n  tone: EventTone;\n  time: string;\n}\ntype View = 'month' | 'week' | 'agenda';\ninterface Cell {\n  day: number;\n  muted?: boolean;\n}\n\nconst DEFAULT_EVENTS: CalendarEvent[] = [\n  { d: 2, title: 'Q2 board review', tone: 'info', time: '10:00' },\n  { d: 5, title: 'Northwind renewal', tone: 'success', time: '09:30' },\n  { d: 5, title: 'Webhook deploy', tone: 'warning', time: '14:00' },\n  { d: 9, title: 'Payment retry · Cobalt', tone: 'danger', time: '08:00' },\n  { d: 12, title: 'Onboarding · Halcyon', tone: 'violet', time: '11:00' },\n  { d: 12, title: 'Team sync', tone: 'info', time: '15:30' },\n  { d: 12, title: 'Invoice run', tone: 'success', time: '17:00' },\n  { d: 18, title: 'Security audit', tone: 'warning', time: '13:00' },\n  { d: 21, title: 'Expansion call · Vertex', tone: 'success', time: '10:30' },\n  { d: 24, title: 'Quarterly close', tone: 'info', time: 'All day' },\n  { d: 24, title: 'Roadmap review', tone: 'violet', time: '16:00' },\n  { d: 28, title: 'SLA report due', tone: 'danger', time: '12:00' },\n];\n\n/**\n * A month / week / agenda calendar with click-and-drag day selection and an\n * inline \"new event\" dialog. Events are kept in local state; `change` reports\n * every change so a host can persist them.\n */\n@Component({\n  selector: 'vsp-event-calendar',\n  imports: [VspSegmented, VspDialog, VspField, VspInput, VspSelect, VspButton],\n  template: `<div class=\"ui-cb\">\n    <div class=\"ui-cb-head\">\n      <div style=\"display: flex; gap: 4px\">\n        <button\n          type=\"button\"\n          class=\"vsp-icon-btn\"\n          style=\"width: 32px; height: 32px\"\n          aria-label=\"Previous month\"\n          (click)=\"nav(-1)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"18\"\n            height=\"18\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path d=\"M15 18l-6-6 6-6\" />\n          </svg>\n        </button>\n        <button\n          type=\"button\"\n          class=\"vsp-icon-btn\"\n          style=\"width: 32px; height: 32px\"\n          aria-label=\"Next month\"\n          (click)=\"nav(1)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            width=\"18\"\n            height=\"18\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <path d=\"M9 18l6-6-6-6\" />\n          </svg>\n        </button>\n      </div>\n      <div class=\"ui-cb-title\">{{ months[vm.m] }} {{ vm.y }}</div>\n      <button type=\"button\" class=\"btn btn-ghost btn-sm\" (click)=\"goToday()\">Today</button>\n      <div style=\"flex: 1\"></div>\n      <vsp-segmented\n        [value]=\"cap(view)\"\n        [options]=\"['Month', 'Week', 'Agenda']\"\n        (valueChange)=\"setView($event)\"\n      />\n      <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"openAdd([today.getDate()])\">\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"16\"\n          height=\"16\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <path d=\"M12 5v14M5 12h14\" />\n        </svg>\n        Event\n      </button>\n    </div>\n\n    @if (view === 'month') {\n      <div class=\"ui-cb-grid\">\n        @for (d of dowFull; track d) {\n          <div class=\"ui-cb-dow\">{{ d }}</div>\n        }\n      </div>\n      <div class=\"ui-cb-grid\" (mouseleave)=\"onLeave()\">\n        @for (c of cells; track i; let i = $index) {\n          <div\n            [class]=\"cellClass(c)\"\n            [style.borderBottom]=\"i >= cells.length - 7 ? '0' : null\"\n            (mousedown)=\"cellDown(c)\"\n            (mouseenter)=\"cellEnter(c)\"\n            (mouseup)=\"cellUp(c)\"\n          >\n            <span [class]=\"'ui-cb-date' + (isToday(c.day, c.muted) ? ' today' : '')\">{{\n              c.day\n            }}</span>\n            @for (e of evsFor(c).slice(0, 3); track e.id) {\n              <div\n                class=\"ui-cb-event\"\n                [style.color]=\"tone(e.tone)\"\n                [style.background]=\"bg(e.tone, 14)\"\n              >\n                <i></i>{{ e.title }}\n              </div>\n            }\n            @if (evsFor(c).length > 3) {\n              <span class=\"ui-cb-more\">+{{ evsFor(c).length - 3 }} more</span>\n            }\n          </div>\n        }\n      </div>\n    }\n\n    @if (view === 'week') {\n      <div class=\"ui-cb-week\" style=\"max-height: 420px; overflow-y: auto\">\n        <div class=\"ui-cb-wk-corner\"></div>\n        @for (d of weekDays; track i; let i = $index) {\n          <div class=\"ui-cb-wk-dh\">\n            <div class=\"eyebrow\">{{ dowFull[d.getDay()] }}</div>\n            <div\n              style=\"font-weight: 700; font-size: 15px\"\n              [style.color]=\"d.getDate() === today.getDate() ? 'var(--accent)' : 'var(--text)'\"\n            >\n              {{ d.getDate() }}\n            </div>\n          </div>\n        }\n        @for (h of hours; track h) {\n          <div class=\"ui-cb-wk-hr\">{{ pad(h) }}:00</div>\n          @for (d of weekDays; track i; let i = $index) {\n            <div class=\"ui-cb-slot\" (click)=\"slotClick(d, h)\">\n              @if (apptAt(d, h); as appt) {\n                <div\n                  class=\"ui-cb-appt\"\n                  [style.color]=\"tone(appt.tone)\"\n                  [style.background]=\"bg(appt.tone, 18)\"\n                >\n                  {{ appt.title }}\n                </div>\n              }\n            </div>\n          }\n        }\n      </div>\n    }\n\n    @if (view === 'agenda') {\n      <div>\n        @for (day of agendaDays; track day) {\n          <div class=\"ui-cb-agenda-day\">\n            <div style=\"width: 56px; flex-shrink: 0; text-align: center\">\n              <div class=\"eyebrow\">{{ dowFull[dowOf(day)] }}</div>\n              <div class=\"tnum\" style=\"font-size: 22px; font-weight: 800; line-height: 1.1\">\n                {{ day }}\n              </div>\n            </div>\n            <div style=\"flex: 1; display: flex; flex-direction: column; gap: 8px\">\n              @for (e of sortedDay(day); track e.id) {\n                <div style=\"display: flex; align-items: center; gap: 10px\">\n                  <span\n                    style=\"width: 8px; height: 8px; border-radius: 99px; flex-shrink: 0\"\n                    [style.background]=\"tone(e.tone)\"\n                  ></span>\n                  <span style=\"font-weight: 600; font-size: 13.5px\">{{ e.title }}</span>\n                  <span\n                    class=\"mono\"\n                    style=\"margin-left: auto; font-size: 11.5px; color: var(--text-faint)\"\n                  >\n                    {{ e.time }}\n                  </span>\n                </div>\n              }\n            </div>\n          </div>\n        }\n      </div>\n    }\n\n    <vsp-dialog\n      [open]=\"!!add\"\n      [maxWidth]=\"420\"\n      [title]=\"\n        add && add.days.length > 1 ? 'New event · ' + add.days.length + ' days' : 'New event'\n      \"\n      [desc]=\"dialogDesc\"\n      (close)=\"add = null\"\n    >\n      <svg\n        slot=\"icon\"\n        viewBox=\"0 0 24 24\"\n        width=\"20\"\n        height=\"20\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n        <path d=\"M16 2v4M8 2v4M3 10h18\" />\n      </svg>\n      @if (add; as a) {\n        <div style=\"display: grid; gap: 14px\">\n          <vsp-field label=\"Title\" [required]=\"true\">\n            <vsp-input [(value)]=\"a.title\" placeholder=\"Meeting, review, booking…\" />\n          </vsp-field>\n          <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 12px\">\n            <vsp-field label=\"Time\">\n              <vsp-input [(value)]=\"a.time\" />\n            </vsp-field>\n            <vsp-field label=\"Color\">\n              <vsp-select [(value)]=\"a.tone\" [options]=\"toneOptions\" />\n            </vsp-field>\n          </div>\n        </div>\n      }\n      <vsp-button slot=\"footer\" variant=\"ghost\" size=\"sm\" (click)=\"add = null\">Cancel</vsp-button>\n      <vsp-button slot=\"footer\" variant=\"primary\" size=\"sm\" (click)=\"saveAdd()\"\n        >Add event</vsp-button\n      >\n    </vsp-dialog>\n  </div>`,\n})\nexport class VspEventCalendar {\n  @Input() initialEvents: CalendarEvent[] = DEFAULT_EVENTS;\n  @Output() change = new EventEmitter<CalendarEvent[]>();\n\n  today = new Date();\n  view: View = 'month';\n  vm = { m: this.today.getMonth(), y: this.today.getFullYear() };\n  events: InternalEvent[] = [];\n  sel: { a: number; b: number } | null = null;\n  dragging = false;\n  add: Draft | null = null;\n\n  months = MONTHS;\n  dowFull = DOW_FULL;\n  toneOptions = TONE_OPTIONS;\n  hours: number[] = [];\n\n  constructor() {\n    this.events = this.initialEvents.map((e, i) => ({ id: `e${i}`, hour: 9, ...e }));\n    for (let h = 8; h <= 18; h++) this.hours.push(h);\n  }\n\n  tone(t: EventTone): string {\n    return TONE[t];\n  }\n  bg(t: EventTone, pct: number): string {\n    return `color-mix(in oklab, ${TONE[t]} ${pct}%, transparent)`;\n  }\n  pad(h: number): string {\n    return String(h).padStart(2, '0');\n  }\n  cap(v: View): string {\n    return v[0].toUpperCase() + v.slice(1);\n  }\n  setView(v: string): void {\n    this.view = v.toLowerCase() as View;\n  }\n  goToday(): void {\n    this.vm = { m: this.today.getMonth(), y: this.today.getFullYear() };\n  }\n\n  private commit(next: InternalEvent[]): void {\n    this.events = next;\n    this.change.emit(next);\n  }\n  nav(delta: number): void {\n    let m = this.vm.m + delta;\n    let y = this.vm.y;\n    if (m < 0) {\n      m = 11;\n      y--;\n    }\n    if (m > 11) {\n      m = 0;\n      y++;\n    }\n    this.vm = { m, y };\n  }\n  openAdd(days: number[], hour?: number): void {\n    this.add = {\n      days,\n      hour: hour ?? 9,\n      title: '',\n      tone: 'info',\n      time: hour != null ? `${this.pad(hour)}:00` : '10:00',\n    };\n  }\n  saveAdd(): void {\n    const a = this.add;\n    if (!a) return;\n    if (!a.title.trim()) {\n      this.add = null;\n      return;\n    }\n    const stamp = Date.now();\n    this.commit([\n      ...this.events,\n      ...a.days.map((d, i) => ({\n        id: `n${stamp}${i}`,\n        d,\n        hour: a.hour,\n        title: a.title,\n        tone: a.tone,\n        time: a.time,\n      })),\n    ]);\n    this.add = null;\n    toast({\n      tone: 'pos',\n      title: a.days.length > 1 ? `${a.days.length} events added` : 'Event added',\n    });\n  }\n  slotClick(d: Date, h: number): void {\n    if (!this.apptAt(d, h)) this.openAdd([d.getDate()], h);\n  }\n\n  get evByDay(): Record<number, InternalEvent[]> {\n    const map: Record<number, InternalEvent[]> = {};\n    for (const e of this.events) (map[e.d] = map[e.d] || []).push(e);\n    return map;\n  }\n  get cells(): Cell[] {\n    const first = new Date(this.vm.y, this.vm.m, 1).getDay();\n    const dim = new Date(this.vm.y, this.vm.m + 1, 0).getDate();\n    const prevDim = new Date(this.vm.y, this.vm.m, 0).getDate();\n    const out: Cell[] = [];\n    for (let i = first - 1; i >= 0; i--) out.push({ day: prevDim - i, muted: true });\n    for (let d = 1; d <= dim; d++) out.push({ day: d });\n    while (out.length % 7) out.push({ day: out.length - (first + dim) + 1, muted: true });\n    return out;\n  }\n  get weekDays(): Date[] {\n    const d0 = new Date(this.vm.y, this.vm.m, this.today.getDate() - this.today.getDay());\n    const out: Date[] = [];\n    for (let i = 0; i < 7; i++) {\n      const d = new Date(d0);\n      d.setDate(d0.getDate() + i);\n      out.push(d);\n    }\n    return out;\n  }\n  get agendaDays(): number[] {\n    return Object.keys(this.evByDay)\n      .map(Number)\n      .sort((a, b) => a - b);\n  }\n  get dialogDesc(): string {\n    const a = this.add;\n    if (!a) return '';\n    return `${MONTHS[this.vm.m]} ${a.days[0]}${a.days.length > 1 ? `–${a.days[a.days.length - 1]}` : ''}, ${this.vm.y}`;\n  }\n\n  evsFor(c: Cell): InternalEvent[] {\n    return c.muted ? [] : this.evByDay[c.day] || [];\n  }\n  apptAt(d: Date, h: number): InternalEvent | undefined {\n    return this.events.find(\n      (e) => e.d === d.getDate() && e.hour === h && d.getMonth() === this.vm.m,\n    );\n  }\n  sortedDay(day: number): InternalEvent[] {\n    return this.evByDay[day].slice().sort((a, b) => a.hour - b.hour);\n  }\n  dowOf(day: number): number {\n    return new Date(this.vm.y, this.vm.m, day).getDay();\n  }\n  isToday(d: number, muted?: boolean): boolean {\n    return (\n      !muted &&\n      d === this.today.getDate() &&\n      this.vm.m === this.today.getMonth() &&\n      this.vm.y === this.today.getFullYear()\n    );\n  }\n  inSel(d: number): boolean {\n    return (\n      !!this.sel && d >= Math.min(this.sel.a, this.sel.b) && d <= Math.max(this.sel.a, this.sel.b)\n    );\n  }\n  cellClass(c: Cell): string {\n    return ['ui-cb-cell', c.muted && 'muted', !c.muted && this.inSel(c.day) && 'sel']\n      .filter(Boolean)\n      .join(' ');\n  }\n  onLeave(): void {\n    if (!this.dragging) this.sel = null;\n  }\n  cellDown(c: Cell): void {\n    if (!c.muted) {\n      this.dragging = true;\n      this.sel = { a: c.day, b: c.day };\n    }\n  }\n  cellEnter(c: Cell): void {\n    if (this.dragging && !c.muted && this.sel) this.sel = { a: this.sel.a, b: c.day };\n  }\n  cellUp(c: Cell): void {\n    if (this.dragging && this.sel) {\n      this.dragging = false;\n      const lo = Math.min(this.sel.a, c.day);\n      const hi = Math.max(this.sel.a, c.day);\n      const days: number[] = [];\n      for (let d = lo; d <= hi; d++) days.push(d);\n      this.openAdd(days);\n      this.sel = null;\n    }\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { VspIcon } from './icon.component';\n\n/* ===================== Setting row ===================== */\n\n/** A labelled row (title + optional description) with a trailing control slot. */\n@Component({\n  selector: 'vsp-setting-row',\n  template: `<div [class]=\"last ? 'ui-setrow last' : 'ui-setrow'\">\n    <div class=\"ui-setrow-main\">\n      <div class=\"ui-setrow-title\">{{ title }}</div>\n      @if (desc) {\n        <div class=\"ui-setrow-desc\">{{ desc }}</div>\n      }\n    </div>\n    <ng-content />\n  </div>`,\n})\nexport class VspSettingRow {\n  @Input() title?: string;\n  @Input() desc?: string;\n  @Input() last = false;\n}\n\n/* ===================== Vertical tabs ===================== */\n\nexport type VerticalTabItem =\n  | string\n  | { value: string; label: string; icon?: string; badge?: string | number };\n\n/** Vertical tab strip — a settings-style left rail. */\n@Component({\n  selector: 'vsp-vertical-tabs',\n  imports: [VspIcon],\n  template: `<div class=\"ui-vtabs\">\n    @for (t of tabs; track id(t)) {\n      <button type=\"button\" [class]=\"cls(t)\" (click)=\"pick(id(t))\">\n        @if (ico(t)) {\n          <vsp-icon [name]=\"ico(t)!\" [size]=\"16\" />\n        }\n        {{ lbl(t) }}\n        @if (bdg(t) != null) {\n          <span class=\"ui-nav-badge\">{{ bdg(t) }}</span>\n        }\n      </button>\n    }\n  </div>`,\n})\nexport class VspVerticalTabs {\n  @Input() tabs: VerticalTabItem[] = [];\n  @Input() value?: string;\n  @Output() valueChange = new EventEmitter<string>();\n  id(t: VerticalTabItem): string {\n    return typeof t === 'string' ? t : t.value;\n  }\n  lbl(t: VerticalTabItem): string {\n    return typeof t === 'string' ? t : t.label;\n  }\n  ico(t: VerticalTabItem): string | undefined {\n    return typeof t === 'object' ? t.icon : undefined;\n  }\n  bdg(t: VerticalTabItem): string | number | undefined {\n    return typeof t === 'object' ? t.badge : undefined;\n  }\n  cls(t: VerticalTabItem): string {\n    return 'ui-vtab' + (this.value === this.id(t) ? ' on' : '');\n  }\n  pick(v: string): void {\n    this.value = v;\n    this.valueChange.emit(v);\n  }\n}\n\n/* ===================== Nav item ===================== */\n\n/** A sidebar nav row — renders as an `<a>` when `href` is set, else a `<button>`. */\n@Component({\n  selector: 'vsp-nav-item',\n  imports: [VspIcon],\n  template: `@if (href && !disabled) {\n      <a [href]=\"href\" [class]=\"cls\" [attr.aria-current]=\"active ? 'page' : null\">\n        @if (icon) {\n          <vsp-icon [name]=\"icon\" [size]=\"16\" />\n        }\n        <span [style.flex]=\"sub ? 'none' : 1\">{{ label }}<ng-content /></span>\n        @if (badge != null) {\n          <span class=\"ui-nav-badge\">{{ badge }}</span>\n        }\n      </a>\n    } @else {\n      <button type=\"button\" [disabled]=\"disabled\" [class]=\"cls\">\n        @if (icon) {\n          <vsp-icon [name]=\"icon\" [size]=\"16\" />\n        }\n        <span [style.flex]=\"sub ? 'none' : 1\">{{ label }}<ng-content /></span>\n        @if (badge != null) {\n          <span class=\"ui-nav-badge\">{{ badge }}</span>\n        }\n      </button>\n    }`,\n})\nexport class VspNavItem {\n  @Input() icon?: string;\n  @Input() label?: string;\n  @Input() active = false;\n  @Input() badge?: string | number;\n  @Input() sub = false;\n  @Input() href?: string;\n  @Input() disabled = false;\n  get cls(): string {\n    return 'ui-nav-item' + (this.active ? ' on' : '') + (this.disabled ? ' disabled' : '');\n  }\n}\n\n/* ===================== Nav group ===================== */\n\n/** A collapsible sidebar group; nested `vsp-nav-item`s project into the body. */\n@Component({\n  selector: 'vsp-nav-group',\n  imports: [VspIcon],\n  template: `<div [class]=\"open ? 'ui-nav-group open' : 'ui-nav-group'\">\n    <button\n      type=\"button\"\n      [class]=\"open ? 'ui-nav-item open' : 'ui-nav-item'\"\n      (click)=\"open = !open\"\n    >\n      @if (icon) {\n        <vsp-icon [name]=\"icon\" [size]=\"16\" />\n      }\n      <span>{{ label }}</span>\n      <svg\n        class=\"ui-nav-chev\"\n        viewBox=\"0 0 24 24\"\n        width=\"16\"\n        height=\"16\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M9 18l6-6-6-6\" />\n      </svg>\n    </button>\n    <div class=\"ui-nav-sub\">\n      <div>\n        <div class=\"ui-nav\" style=\"padding-top: 2px\"><ng-content /></div>\n      </div>\n    </div>\n  </div>`,\n})\nexport class VspNavGroup {\n  @Input() icon?: string;\n  @Input() label?: string;\n  @Input() set defaultOpen(v: boolean) {\n    this.open = v;\n  }\n  open = false;\n}\n\n/* ===================== Input affix ===================== */\n\n/** Text input wrapped with an optional leading icon, prefix, and trailing unit. */\n@Component({\n  selector: 'vsp-input-affix',\n  imports: [VspIcon],\n  template: `<div [class]=\"wrapClass ? 'ui-affix ' + wrapClass : 'ui-affix'\">\n    @if (leadingIcon) {\n      <vsp-icon [name]=\"leadingIcon\" [size]=\"16\" />\n    }\n    @if (prefix) {\n      <span class=\"unit\">{{ prefix }}</span>\n    }\n    <input\n      [value]=\"value\"\n      [attr.placeholder]=\"placeholder\"\n      [attr.type]=\"type\"\n      [disabled]=\"disabled\"\n      [attr.name]=\"name\"\n      [attr.id]=\"inputId\"\n      [attr.inputmode]=\"inputmode\"\n      [attr.autocomplete]=\"autocomplete\"\n      [attr.min]=\"min\"\n      [attr.max]=\"max\"\n      [attr.step]=\"step\"\n      [attr.readonly]=\"readonly ? '' : null\"\n      [attr.required]=\"required ? '' : null\"\n      [attr.aria-label]=\"ariaLabel\"\n      (input)=\"onInput($event)\"\n    />\n    @if (unit) {\n      <span class=\"unit\">{{ unit }}</span>\n    }\n  </div>`,\n})\nexport class VspInputAffix {\n  @Input() value = '';\n  @Output() valueChange = new EventEmitter<string>();\n  @Input() leadingIcon?: string;\n  @Input() prefix?: string;\n  @Input() unit?: string;\n  @Input() wrapClass?: string;\n  @Input() placeholder?: string;\n  @Input() type = 'text';\n  @Input() disabled = false;\n  /** Common pass-through input attributes (React spreads the full set). */\n  @Input() name?: string;\n  @Input() inputId?: string;\n  @Input() inputmode?: string;\n  @Input() autocomplete?: string;\n  @Input() min?: string | number;\n  @Input() max?: string | number;\n  @Input() step?: string | number;\n  @Input() readonly = false;\n  @Input() required = false;\n  @Input() ariaLabel?: string;\n  onInput(e: Event): void {\n    this.value = (e.target as HTMLInputElement).value;\n    this.valueChange.emit(this.value);\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { VspIcon } from './icon.component';\nimport { VspSkeleton } from './feedback.component';\n\n/** A stack of shimmer rows shown while a block's data is loading. */\n@Component({\n  selector: 'vsp-block-skeleton',\n  imports: [VspSkeleton],\n  template: `<div style=\"padding: 14px; display: grid; gap: 16px\">\n    @for (i of rowList; track i) {\n      <div style=\"display: flex; align-items: center; gap: 12px\">\n        <vsp-skeleton [w]=\"32\" [h]=\"32\" [r]=\"9\" />\n        <vsp-skeleton [w]=\"30 + ((i * 13) % 35) + '%'\" [h]=\"12\" />\n        <div style=\"flex: 1\"></div>\n        <vsp-skeleton [w]=\"68\" [h]=\"12\" />\n      </div>\n    }\n  </div>`,\n})\nexport class VspBlockSkeleton {\n  @Input() rows = 4;\n  get rowList(): number[] {\n    return Array.from({ length: this.rows }, (_, i) => i);\n  }\n}\n\n/** Default empty placeholder; overridden by a projected `[slot=empty]` node. */\n@Component({\n  selector: 'vsp-block-empty',\n  imports: [VspIcon],\n  template: `<div class=\"ui-empty\">\n    <vsp-icon name=\"inbox\" [size]=\"26\" />\n    <div class=\"ui-empty-title\">{{ title }}</div>\n    @if (desc) {\n      <div class=\"ui-empty-desc\">{{ desc }}</div>\n    }\n  </div>`,\n})\nexport class VspBlockEmpty {\n  @Input() title = '';\n  @Input() desc?: string;\n}\n","import { Component, Input } from '@angular/core';\nimport { VspBadge, type BadgeTone } from './badge.component';\nimport { VspIcon } from './icon.component';\nimport { VspBlockSkeleton, VspBlockEmpty } from './block-state.component';\n\n/** A titled section wrapping its content in a Vespera `card`. */\n@Component({\n  selector: 'vsp-block',\n  template: `<div>\n    @if (title) {\n      <div style=\"margin-bottom: 12px\">\n        <div style=\"font-size: 16px; font-weight: 700; letter-spacing: -0.01em\">{{ title }}</div>\n        @if (desc) {\n          <div style=\"font-size: 13px; margin-top: 3px; color: var(--text-dim)\">{{ desc }}</div>\n        }\n      </div>\n    }\n    <div class=\"card\"><ng-content /></div>\n  </div>`,\n})\nexport class VspBlock {\n  @Input() title?: string;\n  @Input() desc?: string;\n}\n\n/* ===================== System status ===================== */\n\nexport type ServiceStatus = 'operational' | 'degraded' | 'maintenance' | 'down';\nexport interface Service {\n  name: string;\n  status: ServiceStatus;\n  uptime: number;\n}\nconst STATUS_TONE: Record<ServiceStatus, BadgeTone> = {\n  operational: 'pos',\n  degraded: 'warn',\n  maintenance: 'info',\n  down: 'neg',\n};\nconst DEFAULT_SERVICES: Service[] = [\n  { name: 'API gateway', status: 'operational', uptime: 99.98 },\n  { name: 'Database', status: 'operational', uptime: 99.95 },\n  { name: 'Webhooks', status: 'degraded', uptime: 98.2 },\n  { name: 'Auth service', status: 'operational', uptime: 100 },\n  { name: 'Billing', status: 'maintenance', uptime: 99.8 },\n];\n\n/** Live service health with 30-day uptime bars. */\n@Component({\n  selector: 'vsp-system-status-block',\n  imports: [VspBlock, VspBadge, VspBlockSkeleton, VspBlockEmpty],\n  template: `<vsp-block title=\"System status\" desc=\"Live service health with 30-day uptime bars.\">\n    <div\n      style=\"display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border)\"\n    >\n      <span\n        style=\"width: 8px; height: 8px; border-radius: 99px\"\n        [style.background]=\"accent\"\n        [style.boxShadow]=\"'0 0 8px ' + accent\"\n      ></span>\n      <b style=\"font-size: 13.5px\">{{\n        allOk ? 'All systems operational' : 'Partial degradation'\n      }}</b>\n      <div style=\"flex: 1\"></div>\n      <span class=\"eyebrow\">Updated 30s ago</span>\n    </div>\n    @if (loading) {\n      <vsp-block-skeleton />\n    } @else if (services.length === 0) {\n      <div #emptyWrap style=\"display: contents\"><ng-content select=\"[slot=empty]\" /></div>\n      @if (!emptyWrap.children.length) {\n        <vsp-block-empty title=\"No services\" desc=\"No monitored services yet.\" />\n      }\n    } @else {\n      <div style=\"padding: 14px; padding-top: 4px; padding-bottom: 8px\">\n        @for (s of services; track s.name) {\n          <div class=\"ui-row\" style=\"align-items: center\">\n            <div style=\"width: 150px; flex-shrink: 0\">\n              <div style=\"font-weight: 600; font-size: 13.5px\">{{ s.name }}</div>\n            </div>\n            <div style=\"flex: 1; display: flex; gap: 2px; align-items: flex-end; height: 26px\">\n              @for (i of bars; track i) {\n                <span\n                  style=\"flex: 1; border-radius: 2px\"\n                  [style.height]=\"isBad(s, i) ? '60%' : '100%'\"\n                  [style.background]=\"barBg(s, i)\"\n                ></span>\n              }\n            </div>\n            <span\n              class=\"mono tnum\"\n              style=\"width: 56px; text-align: right; font-size: 12px; color: var(--text-dim)\"\n              >{{ s.uptime }}%</span\n            >\n            <vsp-badge [tone]=\"tone(s.status)\" [dot]=\"true\">{{ s.status }}</vsp-badge>\n          </div>\n        }\n      </div>\n    }\n  </vsp-block>`,\n})\nexport class VspSystemStatusBlock {\n  @Input() services: Service[] = DEFAULT_SERVICES;\n  @Input() loading = false;\n  bars = Array.from({ length: 44 }, (_, i) => i);\n\n  get allOk(): boolean {\n    return this.services.every((s) => s.status === 'operational');\n  }\n  get accent(): string {\n    return this.allOk ? 'var(--success)' : 'var(--warning)';\n  }\n  tone(s: ServiceStatus): BadgeTone {\n    return STATUS_TONE[s];\n  }\n  isBad(s: Service, i: number): boolean {\n    return (\n      (s.status === 'degraded' && i > 38 && i < 42) || (s.status === 'maintenance' && i === 43)\n    );\n  }\n  barBg(s: Service, i: number): string {\n    if (!this.isBad(s, i)) return 'color-mix(in oklab, var(--success) 70%, transparent)';\n    return s.status === 'degraded' ? 'var(--warning)' : 'var(--accent)';\n  }\n}\n\n/* ===================== Audit log ===================== */\n\nexport interface AuditEntry {\n  who: string;\n  action: string;\n  tag: string;\n  time: string;\n  /** Icon name (see `vsp-icon`). */\n  icon: string;\n}\nconst DEFAULT_AUDIT: AuditEntry[] = [\n  {\n    who: 'Avery Quinn',\n    action: 'updated billing settings',\n    tag: 'Settings',\n    time: '2 min ago',\n    icon: 'settings',\n  },\n  {\n    who: 'Maya Okafor',\n    action: 'upgraded to Enterprise',\n    tag: 'Billing',\n    time: '38 min ago',\n    icon: 'arrowUp',\n  },\n  {\n    who: 'System',\n    action: 'rotated production API key',\n    tag: 'Security',\n    time: '1 hr ago',\n    icon: 'shield',\n  },\n  { who: 'Leo Vega', action: 'invited 4 members', tag: 'Team', time: '3 hr ago', icon: 'users' },\n  {\n    who: 'Billing',\n    action: 'flagged failed payment · Cobalt',\n    tag: 'Billing',\n    time: '5 hr ago',\n    icon: 'bell',\n  },\n];\n\n/** A chronological trail of privileged actions, as a timeline. */\n@Component({\n  selector: 'vsp-audit-log-block',\n  imports: [VspBlock, VspBadge, VspIcon, VspBlockSkeleton, VspBlockEmpty],\n  template: `<vsp-block title=\"Audit log\" desc=\"A chronological trail of every privileged action.\">\n    <div\n      style=\"display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border)\"\n    >\n      <vsp-icon name=\"clock\" [size]=\"17\" />\n      <b style=\"font-size: 13.5px\">Recent activity</b>\n      <div style=\"flex: 1\"></div>\n      <button type=\"button\" class=\"btn btn-ghost btn-sm\">\n        <vsp-icon name=\"download\" [size]=\"15\" />\n        Export log\n      </button>\n    </div>\n    @if (loading) {\n      <vsp-block-skeleton />\n    } @else if (entries.length === 0) {\n      <div #emptyWrap style=\"display: contents\"><ng-content select=\"[slot=empty]\" /></div>\n      @if (!emptyWrap.children.length) {\n        <vsp-block-empty title=\"No activity\" desc=\"Privileged actions will show here.\" />\n      }\n    } @else {\n      <div style=\"padding: 14px\">\n        <div style=\"position: relative; padding-left: 8px\">\n          @for (e of entries; track i; let i = $index) {\n            <div\n              style=\"display: flex; gap: 14px; position: relative\"\n              [style.paddingBottom]=\"i < entries.length - 1 ? '20px' : '0'\"\n            >\n              @if (i < entries.length - 1) {\n                <span\n                  style=\"position: absolute; left: 15px; top: 32px; bottom: 0; width: 1.5px; background: var(--border)\"\n                ></span>\n              }\n              <span\n                style=\"width: 32px; height: 32px; border-radius: 9px; flex-shrink: 0; display: grid; place-items: center; background: var(--surface-3); border: 1px solid var(--border); color: var(--text-dim); z-index: 1\"\n              >\n                <vsp-icon [name]=\"e.icon\" [size]=\"16\" />\n              </span>\n              <div style=\"flex: 1; padding-top: 5px\">\n                <div style=\"font-size: 13.5px\">\n                  <b style=\"font-weight: 700\">{{ e.who }}</b>\n                  <span style=\"color: var(--text-dim)\"> {{ e.action }}</span>\n                </div>\n                <div style=\"display: flex; align-items: center; gap: 8px; margin-top: 5px\">\n                  <vsp-badge tone=\"muted\">{{ e.tag }}</vsp-badge>\n                  <span class=\"eyebrow\">{{ e.time }}</span>\n                </div>\n              </div>\n            </div>\n          }\n        </div>\n      </div>\n    }\n  </vsp-block>`,\n})\nexport class VspAuditLogBlock {\n  @Input() entries: AuditEntry[] = DEFAULT_AUDIT;\n  @Input() loading = false;\n}\n","import { Component, Input } from '@angular/core';\nimport { VspBlock } from './blocks.component';\nimport { VspBadge, type BadgeTone } from './badge.component';\nimport { VspAvatar } from './media.component';\nimport { VspTabs } from './nav.component';\nimport { VspTooltip } from './tooltip.component';\nimport { VspSelect } from './select.component';\nimport { VspDropdownMenu, type MenuItem } from './anchored.component';\nimport { VspIcon } from './icon.component';\nimport { VspBlockSkeleton, VspBlockEmpty } from './block-state.component';\nimport { toast } from './toast.component';\n\nexport type OrderColumn = 'customer' | 'item' | 'status' | 'amount';\nconst ALL_ORDER_COLUMNS: OrderColumn[] = ['customer', 'item', 'status', 'amount'];\n\n/* ===================== Orders ===================== */\n\nexport type OrderState = 'fulfilled' | 'processing' | 'pending' | 'refunded';\nexport interface Order {\n  id: string;\n  company: string;\n  hue: number;\n  item: string;\n  state: OrderState;\n  amount: number;\n}\nconst ORDER_TONE: Record<OrderState, BadgeTone> = {\n  fulfilled: 'pos',\n  processing: 'info',\n  pending: 'warn',\n  refunded: 'neg',\n};\nconst DEFAULT_ORDERS: Order[] = [\n  {\n    id: 'ORD-90210',\n    company: 'Northwind',\n    hue: 220,\n    item: 'Annual license',\n    state: 'fulfilled',\n    amount: 2400,\n  },\n  {\n    id: 'ORD-90211',\n    company: 'Halcyon',\n    hue: 150,\n    item: 'Seat add-on',\n    state: 'processing',\n    amount: 320,\n  },\n  {\n    id: 'ORD-90212',\n    company: 'Vertex',\n    hue: 280,\n    item: 'Pro upgrade',\n    state: 'pending',\n    amount: 980,\n  },\n  {\n    id: 'ORD-90213',\n    company: 'Cobalt',\n    hue: 12,\n    item: 'API overage',\n    state: 'refunded',\n    amount: 140,\n  },\n  {\n    id: 'ORD-90214',\n    company: 'Beacon',\n    hue: 95,\n    item: 'Support plan',\n    state: 'fulfilled',\n    amount: 3120,\n  },\n  {\n    id: 'ORD-90215',\n    company: 'Lumen',\n    hue: 320,\n    item: 'Onboarding',\n    state: 'processing',\n    amount: 1500,\n  },\n];\nconst ROW_MENU: MenuItem[] = [\n  { label: 'View order', icon: 'eye' },\n  { label: 'Refund', icon: 'refresh' },\n  { sep: true },\n  { label: 'Cancel', icon: 'x', danger: true },\n];\n\n/** Operational table: tab filters, bulk selection, status badges, row menu. */\n@Component({\n  selector: 'vsp-orders-block',\n  imports: [\n    VspBlock,\n    VspBadge,\n    VspAvatar,\n    VspTabs,\n    VspDropdownMenu,\n    VspIcon,\n    VspBlockSkeleton,\n    VspBlockEmpty,\n  ],\n  template: `<vsp-block\n    title=\"Orders\"\n    desc=\"Operational table with tab filters, bulk selection, inline status and a row action menu.\"\n  >\n    <div\n      style=\"display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border)\"\n    >\n      <vsp-tabs [(value)]=\"tab\" [tabs]=\"tabs\" />\n      <div style=\"flex: 1\"></div>\n      @if (sel.size > 0) {\n        <vsp-badge tone=\"info\">{{ sel.size }} selected</vsp-badge>\n        <button type=\"button\" class=\"btn btn-ghost btn-sm\">\n          <vsp-icon name=\"download\" [size]=\"15\" />Export\n        </button>\n        <button type=\"button\" class=\"btn btn-ghost btn-sm\">\n          <vsp-icon name=\"check\" [size]=\"15\" />Fulfill\n        </button>\n      } @else {\n        <button type=\"button\" class=\"btn btn-ghost btn-sm\">\n          <vsp-icon name=\"filter\" [size]=\"15\" />Filter\n        </button>\n        <button type=\"button\" class=\"btn btn-primary btn-sm\">\n          <vsp-icon name=\"plus\" [size]=\"15\" />New order\n        </button>\n      }\n    </div>\n    @if (loading) {\n      <vsp-block-skeleton />\n    } @else if (rows.length === 0) {\n      <div #emptyWrap style=\"display: contents\"><ng-content select=\"[slot=empty]\" /></div>\n      @if (!emptyWrap.children.length) {\n        <vsp-block-empty\n          title=\"No orders\"\n          [desc]=\"\n            tab === 'all' ? 'New orders will appear here.' : 'No ' + tab + ' orders right now.'\n          \"\n        />\n      }\n    } @else {\n      <div style=\"overflow-x: auto\">\n        <table class=\"ui-table\" style=\"min-width: 720px\">\n          <thead>\n            <tr>\n              <th style=\"width: 44px\">\n                <span\n                  [class]=\"'ui-check' + (allSel ? ' on' : '')\"\n                  role=\"checkbox\"\n                  [attr.aria-checked]=\"allSel\"\n                  (click)=\"toggleAll()\"\n                >\n                  <vsp-icon name=\"check\" [size]=\"14\" />\n                </span>\n              </th>\n              <th><span class=\"eyebrow\">Order</span></th>\n              @if (col('customer')) {\n                <th><span class=\"eyebrow\">Customer</span></th>\n              }\n              @if (col('item')) {\n                <th><span class=\"eyebrow\">Item</span></th>\n              }\n              @if (col('status')) {\n                <th><span class=\"eyebrow\">Status</span></th>\n              }\n              @if (col('amount')) {\n                <th style=\"text-align: right\"><span class=\"eyebrow\">Amount</span></th>\n              }\n              <th style=\"width: 44px\"></th>\n            </tr>\n          </thead>\n          <tbody>\n            @for (o of rows; track o.id) {\n              <tr\n                [style.background]=\"\n                  sel.has(o.id) ? 'color-mix(in oklab, var(--accent) 7%, transparent)' : null\n                \"\n              >\n                <td>\n                  <span\n                    [class]=\"'ui-check' + (sel.has(o.id) ? ' on' : '')\"\n                    role=\"checkbox\"\n                    [attr.aria-checked]=\"sel.has(o.id)\"\n                    (click)=\"toggle(o.id)\"\n                  >\n                    <vsp-icon name=\"check\" [size]=\"14\" />\n                  </span>\n                </td>\n                <td class=\"mono\" style=\"font-weight: 600\">{{ o.id }}</td>\n                @if (col('customer')) {\n                  <td>\n                    <div style=\"display: flex; align-items: center; gap: 10px\">\n                      <vsp-avatar [name]=\"o.company\" [hue]=\"o.hue\" [size]=\"28\" />\n                      <span style=\"font-weight: 500\">{{ o.company }}</span>\n                    </div>\n                  </td>\n                }\n                @if (col('item')) {\n                  <td style=\"color: var(--text-dim)\">{{ o.item }}</td>\n                }\n                @if (col('status')) {\n                  <td>\n                    <vsp-badge [tone]=\"orderTone(o.state)\" [dot]=\"true\">{{ o.state }}</vsp-badge>\n                  </td>\n                }\n                @if (col('amount')) {\n                  <td class=\"tnum\" style=\"text-align: right; font-weight: 700\">\n                    \\${{ o.amount.toLocaleString() }}\n                  </td>\n                }\n                <td>\n                  <vsp-dropdown-menu [items]=\"rowMenu\">\n                    <button\n                      slot=\"trigger\"\n                      type=\"button\"\n                      class=\"vsp-icon-btn\"\n                      style=\"width: 30px; height: 30px; border: 0; background: transparent\"\n                      aria-label=\"Row actions\"\n                    >\n                      <vsp-icon name=\"more\" [size]=\"18\" />\n                    </button>\n                  </vsp-dropdown-menu>\n                </td>\n              </tr>\n            }\n          </tbody>\n        </table>\n      </div>\n    }\n  </vsp-block>`,\n})\nexport class VspOrdersBlock {\n  @Input() orders: Order[] = DEFAULT_ORDERS;\n  @Input() columns: OrderColumn[] = ALL_ORDER_COLUMNS;\n  @Input() loading = false;\n  tab = 'all';\n  sel = new Set<string>();\n  rowMenu = ROW_MENU;\n\n  col(c: OrderColumn): boolean {\n    return this.columns.includes(c);\n  }\n\n  get tabs() {\n    return [\n      { value: 'all', label: 'All', count: this.orders.length },\n      { value: 'processing', label: 'Processing' },\n      { value: 'pending', label: 'Pending' },\n      { value: 'refunded', label: 'Refunded' },\n    ];\n  }\n  get rows(): Order[] {\n    return this.orders.filter((o) => this.tab === 'all' || o.state === this.tab);\n  }\n  get allSel(): boolean {\n    return this.rows.length > 0 && this.rows.every((r) => this.sel.has(r.id));\n  }\n  orderTone(s: OrderState): BadgeTone {\n    return ORDER_TONE[s];\n  }\n  toggleAll(): void {\n    const n = new Set(this.sel);\n    if (this.allSel) this.rows.forEach((r) => n.delete(r.id));\n    else this.rows.forEach((r) => n.add(r.id));\n    this.sel = n;\n  }\n  toggle(id: string): void {\n    const n = new Set(this.sel);\n    if (n.has(id)) n.delete(id);\n    else n.add(id);\n    this.sel = n;\n  }\n}\n\n/* ===================== Team & roles ===================== */\n\nexport interface TeamMember {\n  id: number;\n  name: string;\n  email: string;\n  hue: number;\n  role: string;\n}\nconst DEFAULT_MEMBERS: TeamMember[] = [\n  { id: 0, name: 'Avery Quinn', email: 'avery@vespera.dev', hue: 250, role: 'Owner' },\n  { id: 1, name: 'Maya Okafor', email: 'maya@northwind.com', hue: 220, role: 'Admin' },\n  { id: 2, name: 'Leo Vega', email: 'leo@halcyon.com', hue: 150, role: 'Editor' },\n  { id: 3, name: 'Noor Haddad', email: 'noor@beacon.com', hue: 40, role: 'Viewer' },\n];\nconst MEMBER_MENU: MenuItem[] = [\n  { label: 'Resend invite', icon: 'mail' },\n  { label: 'Transfer ownership', icon: 'shield' },\n  { sep: true },\n  { label: 'Remove', icon: 'x', danger: true },\n];\n\n/** Member list with inline role selects and a per-row action menu. */\n@Component({\n  selector: 'vsp-team-roles-block',\n  imports: [\n    VspBlock,\n    VspBadge,\n    VspAvatar,\n    VspSelect,\n    VspDropdownMenu,\n    VspIcon,\n    VspBlockSkeleton,\n    VspBlockEmpty,\n  ],\n  template: `<vsp-block\n    title=\"Team & roles\"\n    desc=\"Manage members and permissions with inline role selects.\"\n  >\n    <div\n      style=\"display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border)\"\n    >\n      <vsp-icon name=\"users\" [size]=\"17\" />\n      <b style=\"font-size: 13.5px\">Members</b>\n      <vsp-badge tone=\"muted\">{{ members.length }}</vsp-badge>\n      <div style=\"flex: 1\"></div>\n      <button type=\"button\" class=\"btn btn-primary btn-sm\">\n        <vsp-icon name=\"mail\" [size]=\"15\" />Invite\n      </button>\n    </div>\n    @if (loading) {\n      <vsp-block-skeleton />\n    } @else if (members.length === 0) {\n      <div #emptyWrap style=\"display: contents\"><ng-content select=\"[slot=empty]\" /></div>\n      @if (!emptyWrap.children.length) {\n        <vsp-block-empty title=\"No members\" desc=\"Invite teammates to collaborate here.\" />\n      }\n    } @else {\n      <div style=\"padding: 14px; padding-top: 4px; padding-bottom: 4px\">\n        @for (m of members; track m.id) {\n          <div class=\"ui-row\">\n            <vsp-avatar [name]=\"m.name\" [hue]=\"m.hue\" [size]=\"38\" />\n            <div style=\"flex: 1; min-width: 0\">\n              <div style=\"font-weight: 600; font-size: 13.5px\">{{ m.name }}</div>\n              <div class=\"mono\" style=\"font-size: 11.5px; color: var(--text-faint)\">\n                {{ m.email }}\n              </div>\n            </div>\n            @if (m.role === 'Owner') {\n              <vsp-badge tone=\"info\">Owner</vsp-badge>\n            } @else {\n              <div style=\"width: 130px\">\n                <vsp-select\n                  [value]=\"m.role\"\n                  [options]=\"roleOptions\"\n                  (valueChange)=\"setRole(m.id, $event)\"\n                />\n              </div>\n            }\n            <vsp-dropdown-menu [items]=\"memberMenu\">\n              <button\n                slot=\"trigger\"\n                type=\"button\"\n                class=\"vsp-icon-btn\"\n                style=\"width: 32px; height: 32px\"\n                aria-label=\"Member actions\"\n              >\n                <vsp-icon name=\"more\" [size]=\"18\" />\n              </button>\n            </vsp-dropdown-menu>\n          </div>\n        }\n      </div>\n    }\n  </vsp-block>`,\n})\nexport class VspTeamRolesBlock {\n  @Input() members: TeamMember[] = DEFAULT_MEMBERS.map((m) => ({ ...m }));\n  @Input() loading = false;\n  memberMenu = MEMBER_MENU;\n  roleOptions = ['Admin', 'Editor', 'Viewer'];\n\n  setRole(id: number, role: string | number | null): void {\n    this.members = this.members.map((y) => (y.id === id ? { ...y, role: String(role) } : y));\n  }\n}\n\n/* ===================== API keys ===================== */\n\nexport interface ApiKey {\n  id: number;\n  name: string;\n  token: string;\n  /** Full secret shown when revealed. */\n  secret: string;\n  created: string;\n  last: string;\n}\nconst DEFAULT_KEYS: ApiKey[] = [\n  {\n    id: 1,\n    name: 'Production',\n    token: 'vsp_live_8f2a…d91c',\n    secret: 'vsp_live_8f2a39c4e7b1d91c',\n    created: 'Jan 14, 2026',\n    last: '2m ago',\n  },\n  {\n    id: 2,\n    name: 'Staging',\n    token: 'vsp_test_4b7e…02fa',\n    secret: 'vsp_test_4b7e1d9a55c302fa',\n    created: 'Mar 02, 2026',\n    last: '3d ago',\n  },\n  {\n    id: 3,\n    name: 'CI / CD',\n    token: 'vsp_live_19cc…7a4b',\n    secret: 'vsp_live_19cc8e2f0b6d7a4b',\n    created: 'Apr 21, 2026',\n    last: '12h ago',\n  },\n];\n\n/** Reveal, copy, and revoke API credentials; secrets stay masked by default. */\n@Component({\n  selector: 'vsp-api-keys-block',\n  imports: [VspBlock, VspTooltip, VspIcon, VspBlockSkeleton, VspBlockEmpty],\n  template: `<vsp-block\n    title=\"API keys\"\n    desc=\"Reveal, copy, and revoke credentials. Secrets stay masked by default.\"\n  >\n    <div\n      style=\"display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border)\"\n    >\n      <vsp-icon name=\"bolt\" [size]=\"17\" />\n      <b style=\"font-size: 13.5px\">Secret keys</b>\n      <div style=\"flex: 1\"></div>\n      <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"created()\">\n        <vsp-icon name=\"plus\" [size]=\"15\" />Create key\n      </button>\n    </div>\n    @if (loading) {\n      <vsp-block-skeleton />\n    } @else if (keys.length === 0) {\n      <div #emptyWrap style=\"display: contents\"><ng-content select=\"[slot=empty]\" /></div>\n      @if (!emptyWrap.children.length) {\n        <vsp-block-empty title=\"No API keys\" desc=\"Create a key to start making requests.\" />\n      }\n    } @else {\n      <div style=\"padding: 14px; padding-top: 4px; padding-bottom: 4px\">\n        @for (k of keys; track k.id) {\n          <div class=\"ui-row\">\n            <div style=\"min-width: 96px\">\n              <div style=\"font-weight: 600; font-size: 13.5px\">{{ k.name }}</div>\n              <div class=\"eyebrow\" style=\"margin-top: 2px\">{{ k.created }}</div>\n            </div>\n            <code\n              class=\"mono\"\n              style=\"flex: 1; font-size: 12.5px; color: var(--text-dim); background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 7px 11px; letter-spacing: 0.02em\"\n              >{{ revealed.has(k.id) ? k.secret : k.token }}</code\n            >\n            <vsp-tooltip [label]=\"revealed.has(k.id) ? 'Hide' : 'Reveal'\">\n              <button\n                type=\"button\"\n                class=\"vsp-icon-btn\"\n                style=\"width: 34px; height: 34px\"\n                [attr.aria-label]=\"revealed.has(k.id) ? 'Hide secret' : 'Reveal secret'\"\n                (click)=\"toggleReveal(k.id)\"\n              >\n                <vsp-icon name=\"eye\" [size]=\"16\" />\n              </button>\n            </vsp-tooltip>\n            <vsp-tooltip label=\"Copy\">\n              <button\n                type=\"button\"\n                class=\"vsp-icon-btn\"\n                style=\"width: 34px; height: 34px\"\n                aria-label=\"Copy secret\"\n                (click)=\"copied()\"\n              >\n                <vsp-icon name=\"doc\" [size]=\"16\" />\n              </button>\n            </vsp-tooltip>\n            <span class=\"eyebrow\" style=\"width: 66px; text-align: right\">{{ k.last }}</span>\n            <button type=\"button\" class=\"btn btn-subtle btn-sm\" (click)=\"revoke(k.id)\">\n              Revoke\n            </button>\n          </div>\n        }\n      </div>\n    }\n  </vsp-block>`,\n})\nexport class VspApiKeysBlock {\n  @Input() keys: ApiKey[] = DEFAULT_KEYS.map((k) => ({ ...k }));\n  @Input() loading = false;\n  revealed = new Set<number>();\n\n  toggleReveal(id: number): void {\n    const n = new Set(this.revealed);\n    if (n.has(id)) n.delete(id);\n    else n.add(id);\n    this.revealed = n;\n  }\n  created(): void {\n    toast({ tone: 'pos', title: 'API key created' });\n  }\n  copied(): void {\n    toast({ title: 'Copied to clipboard' });\n  }\n  revoke(id: number): void {\n    this.keys = this.keys.filter((y) => y.id !== id);\n    toast({ tone: 'neg', title: 'Key revoked' });\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\nimport { VspBlock } from './blocks.component';\nimport { VspBadge, type BadgeTone } from './badge.component';\nimport { VspAvatar } from './media.component';\n\nexport interface KanbanCard {\n  id: string;\n  title: string;\n  tag: string;\n  tone: BadgeTone;\n}\nexport interface KanbanColumn {\n  name: string;\n  /** CSS colour for the column's status dot. */\n  tone: string;\n  cards: KanbanCard[];\n}\ninterface DragState {\n  card: KanbanCard;\n  from: number;\n  origIndex: number;\n  w: number;\n  offX: number;\n  offY: number;\n}\ninterface DropTarget {\n  col: number;\n  index: number;\n}\n\nconst DEFAULT_COLUMNS: KanbanColumn[] = [\n  {\n    name: 'Triage',\n    tone: 'var(--text-faint)',\n    cards: [\n      { id: 'k1', title: 'Cobalt payment failed', tag: 'Billing', tone: 'neg' },\n      { id: 'k2', title: 'Verify SSO config', tag: 'Security', tone: 'warn' },\n    ],\n  },\n  {\n    name: 'In progress',\n    tone: 'var(--accent)',\n    cards: [\n      { id: 'k3', title: 'Migrate Halcyon seats', tag: 'Accounts', tone: 'info' },\n      { id: 'k4', title: 'Q2 expansion review', tag: 'Revenue', tone: 'info' },\n      { id: 'k5', title: 'Webhook retry logic', tag: 'Product', tone: 'warn' },\n    ],\n  },\n  {\n    name: 'Done',\n    tone: 'var(--success)',\n    cards: [\n      { id: 'k6', title: 'Ship usage billing', tag: 'Product', tone: 'pos' },\n      { id: 'k7', title: 'Reconcile invoices', tag: 'Finance', tone: 'pos' },\n    ],\n  },\n];\n\n/** A lightweight kanban — drag cards to reorder or move between columns. */\n@Component({\n  selector: 'vsp-kanban-block',\n  imports: [VspBlock, VspBadge, VspAvatar],\n  template: `<vsp-block\n    title=\"Operations board\"\n    desc=\"A lightweight kanban — drag a card to reorder it or move it between columns.\"\n  >\n    <div style=\"padding: 14px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px\">\n      @for (col of cols; track col.name; let ci = $index) {\n        <div #colEl>\n          <div\n            style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 12px; padding: 0 2px\"\n          >\n            <span\n              style=\"width: 8px; height: 8px; border-radius: 99px\"\n              [style.background]=\"col.tone\"\n            ></span>\n            <b style=\"font-size: 12.5px\">{{ col.name }}</b>\n            <span class=\"mono\" style=\"font-size: 11px; color: var(--text-faint)\">{{\n              col.cards.length\n            }}</span>\n          </div>\n          <div style=\"display: flex; flex-direction: column; gap: 10px; min-height: 64px\">\n            @for (card of items(col); track card.id; let i = $index) {\n              @if (showPh(ci) && target!.index === i) {\n                <div\n                  style=\"border: 1.6px dashed color-mix(in oklab, var(--accent) 50%, var(--border)); background: color-mix(in oklab, var(--accent) 8%, transparent); border-radius: var(--r-md); height: 56px\"\n                ></div>\n              }\n              <div\n                data-kcard\n                class=\"card\"\n                style=\"padding: 13px; cursor: grab; touch-action: none\"\n                (pointerdown)=\"startDrag($event, card, ci)\"\n              >\n                <div\n                  style=\"font-size: 13px; font-weight: 600; margin-bottom: 9px; line-height: 1.4\"\n                >\n                  {{ card.title }}\n                </div>\n                <div style=\"display: flex; align-items: center; justify-content: space-between\">\n                  <vsp-badge [tone]=\"card.tone\">{{ card.tag }}</vsp-badge>\n                  <vsp-avatar name=\"A Q\" [hue]=\"250\" [size]=\"22\" />\n                </div>\n              </div>\n            }\n            @if (showPh(ci) && target!.index >= items(col).length) {\n              <div\n                style=\"border: 1.6px dashed color-mix(in oklab, var(--accent) 50%, var(--border)); background: color-mix(in oklab, var(--accent) 8%, transparent); border-radius: var(--r-md); height: 56px\"\n              ></div>\n            }\n            @if (items(col).length === 0 && !showPh(ci)) {\n              <div\n                style=\"border: 1.5px dashed var(--border); border-radius: var(--r-sm); padding: 18px 0; text-align: center; font-size: 12px; color: var(--text-faint)\"\n              >\n                Drop here\n              </div>\n            }\n          </div>\n        </div>\n      }\n    </div>\n    @if (drag) {\n      <div\n        [style.left.px]=\"pt.x - drag.offX\"\n        [style.top.px]=\"pt.y - drag.offY\"\n        [style.width.px]=\"drag.w\"\n        style=\"position: fixed; z-index: 600; pointer-events: none; transform: rotate(2.5deg) scale(1.03); opacity: 0.96\"\n      >\n        <div\n          class=\"card\"\n          style=\"padding: 13px; box-shadow: var(--shadow-lg); border-color: color-mix(in oklab, var(--accent) 40%, var(--border))\"\n        >\n          <div style=\"font-size: 13px; font-weight: 600; margin-bottom: 9px; line-height: 1.4\">\n            {{ drag.card.title }}\n          </div>\n          <div style=\"display: flex; align-items: center; justify-content: space-between\">\n            <vsp-badge [tone]=\"drag.card.tone\">{{ drag.card.tag }}</vsp-badge>\n            <vsp-avatar name=\"A Q\" [hue]=\"250\" [size]=\"22\" />\n          </div>\n        </div>\n      </div>\n    }\n  </vsp-block>`,\n})\nexport class VspKanbanBlock {\n  @Input() columns: KanbanColumn[] = DEFAULT_COLUMNS;\n  @Output() change = new EventEmitter<KanbanColumn[]>();\n  @ViewChildren('colEl') colEls!: QueryList<ElementRef<HTMLElement>>;\n\n  cols: KanbanColumn[] = DEFAULT_COLUMNS.map((c) => ({ ...c, cards: [...c.cards] }));\n  drag: DragState | null = null;\n  pt = { x: 0, y: 0 };\n  target: DropTarget | null = null;\n\n  private dragData: DragState | null = null;\n  private targetData: DropTarget | null = null;\n\n  ngOnInit(): void {\n    this.cols = this.columns.map((c) => ({ ...c, cards: [...c.cards] }));\n  }\n\n  items(col: KanbanColumn): KanbanCard[] {\n    return col.cards.filter((c) => !(this.drag && c.id === this.drag.card.id));\n  }\n  showPh(ci: number): boolean {\n    return !!this.drag && !!this.target && this.target.col === ci;\n  }\n\n  startDrag(e: PointerEvent, card: KanbanCard, ci: number): void {\n    if (e.button !== 0) return;\n    const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n    const origIndex = this.cols[ci].cards.findIndex((c) => c.id === card.id);\n    const d: DragState = {\n      card,\n      from: ci,\n      origIndex,\n      w: rect.width,\n      offX: e.clientX - rect.left,\n      offY: e.clientY - rect.top,\n    };\n    const home = { col: ci, index: origIndex };\n    this.dragData = d;\n    this.targetData = home;\n    this.drag = d;\n    this.pt = { x: e.clientX, y: e.clientY };\n    this.target = home;\n    e.preventDefault();\n    document.body.style.userSelect = 'none';\n    document.body.style.cursor = 'grabbing';\n    window.addEventListener('pointermove', this.onMove);\n    window.addEventListener('pointerup', this.onUp);\n  }\n\n  private onMove = (e: PointerEvent): void => {\n    const d = this.dragData;\n    if (!d) return;\n    this.pt = { x: e.clientX, y: e.clientY };\n    let found: DropTarget | null = null;\n    this.colEls.forEach((ref, ci) => {\n      const el = ref.nativeElement;\n      const r = el.getBoundingClientRect();\n      if (\n        e.clientX >= r.left &&\n        e.clientX <= r.right &&\n        e.clientY >= r.top - 60 &&\n        e.clientY <= r.bottom + 80\n      ) {\n        const cards = Array.from(el.querySelectorAll('[data-kcard]'));\n        let idx = cards.length;\n        for (let i = 0; i < cards.length; i++) {\n          const cr = cards[i].getBoundingClientRect();\n          if (e.clientY < cr.top + cr.height / 2) {\n            idx = i;\n            break;\n          }\n        }\n        found = { col: ci, index: idx };\n      }\n    });\n    if (!found) found = { col: d.from, index: d.origIndex };\n    this.targetData = found;\n    this.target = found;\n  };\n\n  private onUp = (): void => {\n    const dd = this.dragData;\n    const tg = this.targetData;\n    if (dd && tg) {\n      const next = this.cols.map((c) => ({\n        ...c,\n        cards: c.cards.filter((x) => x.id !== dd.card.id),\n      }));\n      next[tg.col].cards.splice(tg.index, 0, dd.card);\n      this.cols = next;\n      this.change.emit(next);\n    }\n    this.dragData = null;\n    this.targetData = null;\n    this.drag = null;\n    this.target = null;\n    document.body.style.userSelect = '';\n    document.body.style.cursor = '';\n    window.removeEventListener('pointermove', this.onMove);\n    window.removeEventListener('pointerup', this.onUp);\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["niceNum","smoothPath","MONTHS"],"mappings":"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"}