@vespera-ui/angular 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1817,9 +1817,338 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
1817
1817
  type: Input
1818
1818
  }] } });
1819
1819
 
1820
+ function smoothPath(pts) {
1821
+ if (pts.length < 2)
1822
+ return '';
1823
+ let d = `M ${pts[0][0]} ${pts[0][1]}`;
1824
+ for (let i = 0; i < pts.length - 1; i++) {
1825
+ const [x0, y0] = pts[i];
1826
+ const [x1, y1] = pts[i + 1];
1827
+ const cx = (x0 + x1) / 2;
1828
+ d += ` C ${cx} ${y0} ${cx} ${y1} ${x1} ${y1}`;
1829
+ }
1830
+ return d;
1831
+ }
1832
+ let sparkUid = 0;
1833
+ class VspSparkline {
1834
+ data = [];
1835
+ color = 'var(--accent)';
1836
+ w = 110;
1837
+ h = 34;
1838
+ fill = true;
1839
+ gid = 'spk' + ++sparkUid;
1840
+ get pts() {
1841
+ const min = Math.min(...this.data);
1842
+ const max = Math.max(...this.data);
1843
+ const rng = max - min || 1;
1844
+ return this.data.map((v, i) => [
1845
+ (i / (this.data.length - 1)) * this.w,
1846
+ this.h - 3 - ((v - min) / rng) * (this.h - 6),
1847
+ ]);
1848
+ }
1849
+ get d() {
1850
+ return smoothPath(this.pts);
1851
+ }
1852
+ get areaD() {
1853
+ return `${this.d} L ${this.w} ${this.h} L 0 ${this.h} Z`;
1854
+ }
1855
+ get last() {
1856
+ return this.pts[this.pts.length - 1] ?? [0, 0];
1857
+ }
1858
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspSparkline, deps: [], target: i0.ɵɵFactoryTarget.Component });
1859
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VspSparkline, isStandalone: true, selector: "vsp-sparkline", inputs: { data: "data", color: "color", w: "w", h: "h", fill: "fill" }, ngImport: i0, template: `<svg
1860
+ [attr.width]="w"
1861
+ [attr.height]="h"
1862
+ [attr.viewBox]="'0 0 ' + w + ' ' + h"
1863
+ style="display: block; overflow: visible"
1864
+ >
1865
+ @if (fill) {
1866
+ <defs>
1867
+ <linearGradient [id]="gid" x1="0" x2="0" y1="0" y2="1">
1868
+ <stop offset="0" [attr.stop-color]="color" stop-opacity="0.28" />
1869
+ <stop offset="1" [attr.stop-color]="color" stop-opacity="0" />
1870
+ </linearGradient>
1871
+ </defs>
1872
+ <path [attr.d]="areaD" [attr.fill]="'url(#' + gid + ')'" />
1873
+ }
1874
+ <path [attr.d]="d" fill="none" [attr.stroke]="color" stroke-width="2" stroke-linecap="round" />
1875
+ <circle [attr.cx]="last[0]" [attr.cy]="last[1]" r="2.6" [attr.fill]="color" />
1876
+ </svg>`, isInline: true });
1877
+ }
1878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspSparkline, decorators: [{
1879
+ type: Component,
1880
+ args: [{
1881
+ selector: 'vsp-sparkline',
1882
+ template: `<svg
1883
+ [attr.width]="w"
1884
+ [attr.height]="h"
1885
+ [attr.viewBox]="'0 0 ' + w + ' ' + h"
1886
+ style="display: block; overflow: visible"
1887
+ >
1888
+ @if (fill) {
1889
+ <defs>
1890
+ <linearGradient [id]="gid" x1="0" x2="0" y1="0" y2="1">
1891
+ <stop offset="0" [attr.stop-color]="color" stop-opacity="0.28" />
1892
+ <stop offset="1" [attr.stop-color]="color" stop-opacity="0" />
1893
+ </linearGradient>
1894
+ </defs>
1895
+ <path [attr.d]="areaD" [attr.fill]="'url(#' + gid + ')'" />
1896
+ }
1897
+ <path [attr.d]="d" fill="none" [attr.stroke]="color" stroke-width="2" stroke-linecap="round" />
1898
+ <circle [attr.cx]="last[0]" [attr.cy]="last[1]" r="2.6" [attr.fill]="color" />
1899
+ </svg>`,
1900
+ }]
1901
+ }], propDecorators: { data: [{
1902
+ type: Input
1903
+ }], color: [{
1904
+ type: Input
1905
+ }], w: [{
1906
+ type: Input
1907
+ }], h: [{
1908
+ type: Input
1909
+ }], fill: [{
1910
+ type: Input
1911
+ }] } });
1912
+ class VspDonut {
1913
+ data = [];
1914
+ size = 168;
1915
+ thickness = 22;
1916
+ get total() {
1917
+ return this.data.reduce((s, d) => s + d.value, 0) || 1;
1918
+ }
1919
+ get r() {
1920
+ return (this.size - this.thickness) / 2;
1921
+ }
1922
+ get c() {
1923
+ return this.size / 2;
1924
+ }
1925
+ get circ() {
1926
+ return 2 * Math.PI * this.r;
1927
+ }
1928
+ get segs() {
1929
+ let acc = 0;
1930
+ return this.data.map((d) => {
1931
+ const len = (d.value / this.total) * this.circ;
1932
+ const seg = { color: d.color, dash: `${len - 2.5} ${this.circ - len + 2.5}`, offset: -acc };
1933
+ acc += len;
1934
+ return seg;
1935
+ });
1936
+ }
1937
+ pct(v) {
1938
+ return Math.round((v / this.total) * 100);
1939
+ }
1940
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspDonut, deps: [], target: i0.ɵɵFactoryTarget.Component });
1941
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VspDonut, isStandalone: true, selector: "vsp-donut", inputs: { data: "data", size: "size", thickness: "thickness" }, ngImport: i0, template: `<div style="display: flex; align-items: center; gap: 22px">
1942
+ <svg [attr.width]="size" [attr.height]="size" style="transform: rotate(-90deg); flex-shrink: 0">
1943
+ <circle
1944
+ [attr.cx]="c"
1945
+ [attr.cy]="c"
1946
+ [attr.r]="r"
1947
+ fill="none"
1948
+ stroke="var(--surface-3)"
1949
+ [attr.stroke-width]="thickness"
1950
+ />
1951
+ @for (s of segs; track $index) {
1952
+ <circle
1953
+ [attr.cx]="c"
1954
+ [attr.cy]="c"
1955
+ [attr.r]="r"
1956
+ fill="none"
1957
+ [attr.stroke]="s.color"
1958
+ [attr.stroke-width]="thickness"
1959
+ [attr.stroke-dasharray]="s.dash"
1960
+ [attr.stroke-dashoffset]="s.offset"
1961
+ stroke-linecap="round"
1962
+ />
1963
+ }
1964
+ </svg>
1965
+ <div style="display: flex; flex-direction: column; gap: 9px; flex: 1">
1966
+ @for (d of data; track $index) {
1967
+ <div style="display: flex; align-items: center; gap: 9px; font-size: 12.5px">
1968
+ <i
1969
+ [style.background]="d.color"
1970
+ style="width: 9px; height: 9px; border-radius: 3px; flex-shrink: 0"
1971
+ ></i>
1972
+ <span style="color: var(--text-dim); flex: 1">{{ d.label }}</span>
1973
+ <span class="mono tnum" style="font-weight: 600">{{ pct(d.value) }}%</span>
1974
+ </div>
1975
+ }
1976
+ </div>
1977
+ </div>`, isInline: true });
1978
+ }
1979
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspDonut, decorators: [{
1980
+ type: Component,
1981
+ args: [{
1982
+ selector: 'vsp-donut',
1983
+ template: `<div style="display: flex; align-items: center; gap: 22px">
1984
+ <svg [attr.width]="size" [attr.height]="size" style="transform: rotate(-90deg); flex-shrink: 0">
1985
+ <circle
1986
+ [attr.cx]="c"
1987
+ [attr.cy]="c"
1988
+ [attr.r]="r"
1989
+ fill="none"
1990
+ stroke="var(--surface-3)"
1991
+ [attr.stroke-width]="thickness"
1992
+ />
1993
+ @for (s of segs; track $index) {
1994
+ <circle
1995
+ [attr.cx]="c"
1996
+ [attr.cy]="c"
1997
+ [attr.r]="r"
1998
+ fill="none"
1999
+ [attr.stroke]="s.color"
2000
+ [attr.stroke-width]="thickness"
2001
+ [attr.stroke-dasharray]="s.dash"
2002
+ [attr.stroke-dashoffset]="s.offset"
2003
+ stroke-linecap="round"
2004
+ />
2005
+ }
2006
+ </svg>
2007
+ <div style="display: flex; flex-direction: column; gap: 9px; flex: 1">
2008
+ @for (d of data; track $index) {
2009
+ <div style="display: flex; align-items: center; gap: 9px; font-size: 12.5px">
2010
+ <i
2011
+ [style.background]="d.color"
2012
+ style="width: 9px; height: 9px; border-radius: 3px; flex-shrink: 0"
2013
+ ></i>
2014
+ <span style="color: var(--text-dim); flex: 1">{{ d.label }}</span>
2015
+ <span class="mono tnum" style="font-weight: 600">{{ pct(d.value) }}%</span>
2016
+ </div>
2017
+ }
2018
+ </div>
2019
+ </div>`,
2020
+ }]
2021
+ }], propDecorators: { data: [{
2022
+ type: Input
2023
+ }], size: [{
2024
+ type: Input
2025
+ }], thickness: [{
2026
+ type: Input
2027
+ }] } });
2028
+ class VspStatCard {
2029
+ label;
2030
+ value;
2031
+ delta;
2032
+ deltaDir = 'up';
2033
+ spark;
2034
+ sparkColor = 'var(--accent)';
2035
+ get deltaCls() {
2036
+ return 'badge ' + (this.deltaDir === 'up' ? 'badge-pos' : 'badge-neg');
2037
+ }
2038
+ get arrow() {
2039
+ return this.deltaDir === 'up' ? 'M12 19V5M5 12l7-7 7 7' : 'M12 5v14M5 12l7 7 7-7';
2040
+ }
2041
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspStatCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
2042
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VspStatCard, isStandalone: true, selector: "vsp-stat-card", inputs: { label: "label", value: "value", delta: "delta", deltaDir: "deltaDir", spark: "spark", sparkColor: "sparkColor" }, ngImport: i0, template: `<div
2043
+ class="card card-pad vsp-rise"
2044
+ style="display: flex; flex-direction: column; gap: 14px"
2045
+ >
2046
+ <div style="display: flex; align-items: center; justify-content: space-between">
2047
+ <div style="display: flex; align-items: center; gap: 10px">
2048
+ <span
2049
+ 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)"
2050
+ >
2051
+ <ng-content select="[slot=icon]" />
2052
+ </span>
2053
+ <span class="eyebrow">{{ label }}</span>
2054
+ </div>
2055
+ @if (delta != null) {
2056
+ <span [class]="deltaCls">
2057
+ <svg
2058
+ viewBox="0 0 24 24"
2059
+ width="11"
2060
+ height="11"
2061
+ fill="none"
2062
+ stroke="currentColor"
2063
+ stroke-width="2"
2064
+ stroke-linecap="round"
2065
+ stroke-linejoin="round"
2066
+ >
2067
+ <path [attr.d]="arrow" />
2068
+ </svg>
2069
+ {{ delta }}
2070
+ </span>
2071
+ }
2072
+ </div>
2073
+ <div style="display: flex; align-items: flex-end; justify-content: space-between; gap: 12px">
2074
+ <div
2075
+ class="tnum"
2076
+ style="font-size: 30px; font-weight: 800; letter-spacing: -0.02em; line-height: 1"
2077
+ >
2078
+ {{ value }}
2079
+ </div>
2080
+ @if (spark) {
2081
+ <vsp-sparkline [data]="spark" [color]="sparkColor" />
2082
+ }
2083
+ </div>
2084
+ </div>`, isInline: true, dependencies: [{ kind: "component", type: VspSparkline, selector: "vsp-sparkline", inputs: ["data", "color", "w", "h", "fill"] }] });
2085
+ }
2086
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspStatCard, decorators: [{
2087
+ type: Component,
2088
+ args: [{
2089
+ selector: 'vsp-stat-card',
2090
+ imports: [VspSparkline],
2091
+ template: `<div
2092
+ class="card card-pad vsp-rise"
2093
+ style="display: flex; flex-direction: column; gap: 14px"
2094
+ >
2095
+ <div style="display: flex; align-items: center; justify-content: space-between">
2096
+ <div style="display: flex; align-items: center; gap: 10px">
2097
+ <span
2098
+ 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)"
2099
+ >
2100
+ <ng-content select="[slot=icon]" />
2101
+ </span>
2102
+ <span class="eyebrow">{{ label }}</span>
2103
+ </div>
2104
+ @if (delta != null) {
2105
+ <span [class]="deltaCls">
2106
+ <svg
2107
+ viewBox="0 0 24 24"
2108
+ width="11"
2109
+ height="11"
2110
+ fill="none"
2111
+ stroke="currentColor"
2112
+ stroke-width="2"
2113
+ stroke-linecap="round"
2114
+ stroke-linejoin="round"
2115
+ >
2116
+ <path [attr.d]="arrow" />
2117
+ </svg>
2118
+ {{ delta }}
2119
+ </span>
2120
+ }
2121
+ </div>
2122
+ <div style="display: flex; align-items: flex-end; justify-content: space-between; gap: 12px">
2123
+ <div
2124
+ class="tnum"
2125
+ style="font-size: 30px; font-weight: 800; letter-spacing: -0.02em; line-height: 1"
2126
+ >
2127
+ {{ value }}
2128
+ </div>
2129
+ @if (spark) {
2130
+ <vsp-sparkline [data]="spark" [color]="sparkColor" />
2131
+ }
2132
+ </div>
2133
+ </div>`,
2134
+ }]
2135
+ }], propDecorators: { label: [{
2136
+ type: Input
2137
+ }], value: [{
2138
+ type: Input
2139
+ }], delta: [{
2140
+ type: Input
2141
+ }], deltaDir: [{
2142
+ type: Input
2143
+ }], spark: [{
2144
+ type: Input
2145
+ }], sparkColor: [{
2146
+ type: Input
2147
+ }] } });
2148
+
1820
2149
  /**
1821
2150
  * Generated bundle index. Do not edit.
1822
2151
  */
1823
2152
 
1824
- export { VspAccordion, VspAlert, VspAvatar, VspAvatarGroup, VspBadge, VspBanner, VspBreadcrumb, VspButton, VspCard, VspCardHead, VspCheckbox, VspCircularProgress, VspDescriptionList, VspDivider, VspEmptyState, VspField, VspIconButton, VspInput, VspKbd, VspNativeSelect, VspPagination, VspProgress, VspRadio, VspRadioGroup, VspSegmented, VspSkeleton, VspSlider, VspSpinner, VspStat, VspStepper, VspSwitch, VspTabs, VspTag, VspTextarea, VspTimeline };
2153
+ export { VspAccordion, VspAlert, VspAvatar, VspAvatarGroup, VspBadge, VspBanner, VspBreadcrumb, VspButton, VspCard, VspCardHead, VspCheckbox, VspCircularProgress, VspDescriptionList, VspDivider, VspDonut, VspEmptyState, VspField, VspIconButton, VspInput, VspKbd, VspNativeSelect, VspPagination, VspProgress, VspRadio, VspRadioGroup, VspSegmented, VspSkeleton, VspSlider, VspSparkline, VspSpinner, VspStat, VspStatCard, VspStepper, VspSwitch, VspTabs, VspTag, VspTextarea, VspTimeline };
1825
2154
  //# sourceMappingURL=vespera-ui-angular.mjs.map
@@ -1 +1 @@
1
- {"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/nav.component.ts","../../src/data.component.ts","../../src/structure.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 [class]=\"cls\" [disabled]=\"disabled || loading\">\n @if (loading) {\n <span class=\"ui-spinner\" aria-hidden=\"true\"></span>\n }\n <ng-content />\n </button>`,\n})\nexport class VspButton {\n @Input() variant: ButtonVariant = 'ghost';\n @Input() size?: 'sm';\n @Input() loading = false;\n @Input() disabled = false;\n\n get cls(): string {\n return ['btn', `btn-${this.variant}`, this.size === 'sm' ? 'btn-sm' : '']\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\n@Component({\n selector: 'vsp-avatar',\n template: `<span\n class=\"vsp-avatar\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n [style.fontSize.px]=\"size * 0.38\"\n [style.background]=\"bg\"\n >{{ initials }}</span\n >`,\n})\nexport class VspAvatar {\n @Input() name = '';\n @Input() hue = 0;\n @Input() size = 34;\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 bg(): string {\n return `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}\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\" [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 [class]=\"cls\" aria-hidden=\"true\"></span>`,\n})\nexport class VspSpinner {\n @Input() size?: 'lg';\n get cls(): string {\n return this.size === 'lg' ? 'ui-spinner lg' : 'ui-spinner';\n }\n}\n\n@Component({\n selector: 'vsp-icon-button',\n template: `<button type=\"button\" class=\"vsp-icon-btn\" [attr.aria-label]=\"label\">\n <ng-content />\n </button>`,\n})\nexport class VspIconButton {\n @Input() label?: string;\n}\n\n@Component({\n selector: 'vsp-progress',\n template: `<div class=\"meter\" [style.height.px]=\"height\">\n <i [style.width.%]=\"clamped\" [style.background]=\"tone\" style=\"transition: width 0.3s\"></i>\n </div>`,\n})\nexport class VspProgress {\n @Input() value = 0;\n @Input() tone?: string;\n @Input() height = 6;\n get clamped(): number {\n return Math.min(100, this.value);\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 [class]=\"checkCls\"></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 get checkCls(): string {\n return this.checked ? 'ui-check on' : 'ui-check';\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 SelectOption = string | { value: string; label: string; sub?: string };\n\nconst val = (o: SelectOption): string => (typeof o === 'string' ? o : o.value);\nconst lbl = (o: SelectOption): string => (typeof o === 'string' ? o : o.label);\nconst subOf = (o: SelectOption): string | undefined => (typeof o === 'object' ? o.sub : undefined);\n\n@Component({\n selector: 'vsp-radio',\n template: `<label class=\"ui-opt\">\n <input\n type=\"radio\"\n [name]=\"name\"\n [value]=\"value\"\n [checked]=\"checked\"\n (change)=\"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 @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 style=\"display: flex; flex-direction: column; gap: 12px\">\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 [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: SelectOption[] = [];\n @Input() name = 'vsp-radio';\n val = val;\n lbl = lbl;\n subOf = subOf;\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 [value]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\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 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: SelectOption[] = [];\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, EventEmitter, Input, Output } from '@angular/core';\n\nexport type TabItem = string | { value: string; label: string; count?: number };\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)\" (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 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 template: `<nav style=\"display: flex; align-items: center; gap: 7px; font-size: 12.5px\">\n @for (it of items; 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 <span\n [style.color]=\"last ? 'var(--text)' : 'var(--text-dim)'\"\n [style.fontWeight]=\"last ? 600 : 500\"\n >{{ it }}</span\n >\n }\n </nav>`,\n})\nexport class VspBreadcrumb {\n @Input() items: string[] = [];\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\n@Component({\n selector: 'vsp-stepper',\n template: `<div class=\"ui-steps\">\n @for (s of steps; track $index; let i = $index) {\n @if (i > 0) {\n <div [class]=\"barCls(i)\"></div>\n }\n <div [class]=\"stepCls(i)\">\n <span class=\"ui-step-dot\">\n @if (i < current) {\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 {\n {{ i + 1 }}\n }\n </span>\n <span class=\"ui-step-label\">{{ s }}</span>\n </div>\n }\n </div>`,\n})\nexport class VspStepper {\n @Input() steps: string[] = [];\n @Input() current = 0;\n barCls(i: number): string {\n return 'ui-step-bar' + (i <= this.current ? ' done' : '');\n }\n stepCls(i: number): string {\n return 'ui-step ' + (i < this.current ? 'done' : i === this.current ? 'active' : 'pending');\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}\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=\"ui-tl\">\n @for (it of items; track $index) {\n <div class=\"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 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';\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};\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 private open = new Set<number>();\n ngOnInit(): void {\n this.open = new Set(this.defaultOpen);\n }\n toggle(i: number): void {\n const n = new Set<number>(this.multiple ? this.open : []);\n if (this.open.has(i)) n.delete(i);\n else n.add(i);\n this.open = n;\n }\n itemCls(i: number): string {\n return 'ui-acc-item' + (this.open.has(i) ? ' open' : '');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"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/nav.component.ts","../../src/data.component.ts","../../src/structure.component.ts","../../src/charts.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 [class]=\"cls\" [disabled]=\"disabled || loading\">\n @if (loading) {\n <span class=\"ui-spinner\" aria-hidden=\"true\"></span>\n }\n <ng-content />\n </button>`,\n})\nexport class VspButton {\n @Input() variant: ButtonVariant = 'ghost';\n @Input() size?: 'sm';\n @Input() loading = false;\n @Input() disabled = false;\n\n get cls(): string {\n return ['btn', `btn-${this.variant}`, this.size === 'sm' ? 'btn-sm' : '']\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\n@Component({\n selector: 'vsp-avatar',\n template: `<span\n class=\"vsp-avatar\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n [style.fontSize.px]=\"size * 0.38\"\n [style.background]=\"bg\"\n >{{ initials }}</span\n >`,\n})\nexport class VspAvatar {\n @Input() name = '';\n @Input() hue = 0;\n @Input() size = 34;\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 bg(): string {\n return `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}\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\" [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 [class]=\"cls\" aria-hidden=\"true\"></span>`,\n})\nexport class VspSpinner {\n @Input() size?: 'lg';\n get cls(): string {\n return this.size === 'lg' ? 'ui-spinner lg' : 'ui-spinner';\n }\n}\n\n@Component({\n selector: 'vsp-icon-button',\n template: `<button type=\"button\" class=\"vsp-icon-btn\" [attr.aria-label]=\"label\">\n <ng-content />\n </button>`,\n})\nexport class VspIconButton {\n @Input() label?: string;\n}\n\n@Component({\n selector: 'vsp-progress',\n template: `<div class=\"meter\" [style.height.px]=\"height\">\n <i [style.width.%]=\"clamped\" [style.background]=\"tone\" style=\"transition: width 0.3s\"></i>\n </div>`,\n})\nexport class VspProgress {\n @Input() value = 0;\n @Input() tone?: string;\n @Input() height = 6;\n get clamped(): number {\n return Math.min(100, this.value);\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 [class]=\"checkCls\"></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 get checkCls(): string {\n return this.checked ? 'ui-check on' : 'ui-check';\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 SelectOption = string | { value: string; label: string; sub?: string };\n\nconst val = (o: SelectOption): string => (typeof o === 'string' ? o : o.value);\nconst lbl = (o: SelectOption): string => (typeof o === 'string' ? o : o.label);\nconst subOf = (o: SelectOption): string | undefined => (typeof o === 'object' ? o.sub : undefined);\n\n@Component({\n selector: 'vsp-radio',\n template: `<label class=\"ui-opt\">\n <input\n type=\"radio\"\n [name]=\"name\"\n [value]=\"value\"\n [checked]=\"checked\"\n (change)=\"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 @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 style=\"display: flex; flex-direction: column; gap: 12px\">\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 [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: SelectOption[] = [];\n @Input() name = 'vsp-radio';\n val = val;\n lbl = lbl;\n subOf = subOf;\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 [value]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\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 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: SelectOption[] = [];\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, EventEmitter, Input, Output } from '@angular/core';\n\nexport type TabItem = string | { value: string; label: string; count?: number };\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)\" (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 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 template: `<nav style=\"display: flex; align-items: center; gap: 7px; font-size: 12.5px\">\n @for (it of items; 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 <span\n [style.color]=\"last ? 'var(--text)' : 'var(--text-dim)'\"\n [style.fontWeight]=\"last ? 600 : 500\"\n >{{ it }}</span\n >\n }\n </nav>`,\n})\nexport class VspBreadcrumb {\n @Input() items: string[] = [];\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\n@Component({\n selector: 'vsp-stepper',\n template: `<div class=\"ui-steps\">\n @for (s of steps; track $index; let i = $index) {\n @if (i > 0) {\n <div [class]=\"barCls(i)\"></div>\n }\n <div [class]=\"stepCls(i)\">\n <span class=\"ui-step-dot\">\n @if (i < current) {\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 {\n {{ i + 1 }}\n }\n </span>\n <span class=\"ui-step-label\">{{ s }}</span>\n </div>\n }\n </div>`,\n})\nexport class VspStepper {\n @Input() steps: string[] = [];\n @Input() current = 0;\n barCls(i: number): string {\n return 'ui-step-bar' + (i <= this.current ? ' done' : '');\n }\n stepCls(i: number): string {\n return 'ui-step ' + (i < this.current ? 'done' : i === this.current ? 'active' : 'pending');\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}\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=\"ui-tl\">\n @for (it of items; track $index) {\n <div class=\"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 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';\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};\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 private open = new Set<number>();\n ngOnInit(): void {\n this.open = new Set(this.defaultOpen);\n }\n toggle(i: number): void {\n const n = new Set<number>(this.multiple ? this.open : []);\n if (this.open.has(i)) n.delete(i);\n else n.add(i);\n this.open = n;\n }\n itemCls(i: number): string {\n return 'ui-acc-item' + (this.open.has(i) ? ' open' : '');\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}\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 <svg [attr.width]=\"size\" [attr.height]=\"size\" style=\"transform: rotate(-90deg); flex-shrink: 0\">\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) {\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 />\n }\n </svg>\n <div style=\"display: flex; flex-direction: column; gap: 9px; flex: 1\">\n @for (d of data; track $index) {\n <div style=\"display: flex; align-items: center; gap: 9px; font-size: 12.5px\">\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 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -337,5 +337,55 @@ declare class VspAccordion implements OnInit {
337
337
  static ɵcmp: i0.ɵɵComponentDeclaration<VspAccordion, "vsp-accordion", never, { "items": { "alias": "items"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; }, {}, never, never, true, never>;
338
338
  }
339
339
 
340
- export { VspAccordion, VspAlert, VspAvatar, VspAvatarGroup, VspBadge, VspBanner, VspBreadcrumb, VspButton, VspCard, VspCardHead, VspCheckbox, VspCircularProgress, VspDescriptionList, VspDivider, VspEmptyState, VspField, VspIconButton, VspInput, VspKbd, VspNativeSelect, VspPagination, VspProgress, VspRadio, VspRadioGroup, VspSegmented, VspSkeleton, VspSlider, VspSpinner, VspStat, VspStepper, VspSwitch, VspTabs, VspTag, VspTextarea, VspTimeline };
341
- export type { AccordionItem, AlertTone, BadgeTone, BannerTone, ButtonVariant, Person, SelectOption, TabItem, TimelineItem, TimelineTone };
340
+ type Pt = [number, number];
341
+ declare class VspSparkline {
342
+ data: number[];
343
+ color: string;
344
+ w: number;
345
+ h: number;
346
+ fill: boolean;
347
+ gid: string;
348
+ get pts(): Pt[];
349
+ get d(): string;
350
+ get areaD(): string;
351
+ get last(): Pt;
352
+ static ɵfac: i0.ɵɵFactoryDeclaration<VspSparkline, never>;
353
+ static ɵcmp: i0.ɵɵComponentDeclaration<VspSparkline, "vsp-sparkline", never, { "data": { "alias": "data"; "required": false; }; "color": { "alias": "color"; "required": false; }; "w": { "alias": "w"; "required": false; }; "h": { "alias": "h"; "required": false; }; "fill": { "alias": "fill"; "required": false; }; }, {}, never, never, true, never>;
354
+ }
355
+ interface DonutDatum {
356
+ label: string;
357
+ value: number;
358
+ color: string;
359
+ }
360
+ declare class VspDonut {
361
+ data: DonutDatum[];
362
+ size: number;
363
+ thickness: number;
364
+ get total(): number;
365
+ get r(): number;
366
+ get c(): number;
367
+ get circ(): number;
368
+ get segs(): {
369
+ color: string;
370
+ dash: string;
371
+ offset: number;
372
+ }[];
373
+ pct(v: number): number;
374
+ static ɵfac: i0.ɵɵFactoryDeclaration<VspDonut, never>;
375
+ static ɵcmp: i0.ɵɵComponentDeclaration<VspDonut, "vsp-donut", never, { "data": { "alias": "data"; "required": false; }; "size": { "alias": "size"; "required": false; }; "thickness": { "alias": "thickness"; "required": false; }; }, {}, never, never, true, never>;
376
+ }
377
+ declare class VspStatCard {
378
+ label?: string;
379
+ value?: string;
380
+ delta?: string;
381
+ deltaDir: 'up' | 'down';
382
+ spark?: number[];
383
+ sparkColor: string;
384
+ get deltaCls(): string;
385
+ get arrow(): string;
386
+ static ɵfac: i0.ɵɵFactoryDeclaration<VspStatCard, never>;
387
+ static ɵcmp: i0.ɵɵComponentDeclaration<VspStatCard, "vsp-stat-card", never, { "label": { "alias": "label"; "required": false; }; "value": { "alias": "value"; "required": false; }; "delta": { "alias": "delta"; "required": false; }; "deltaDir": { "alias": "deltaDir"; "required": false; }; "spark": { "alias": "spark"; "required": false; }; "sparkColor": { "alias": "sparkColor"; "required": false; }; }, {}, never, ["[slot=icon]"], true, never>;
388
+ }
389
+
390
+ export { VspAccordion, VspAlert, VspAvatar, VspAvatarGroup, VspBadge, VspBanner, VspBreadcrumb, VspButton, VspCard, VspCardHead, VspCheckbox, VspCircularProgress, VspDescriptionList, VspDivider, VspDonut, VspEmptyState, VspField, VspIconButton, VspInput, VspKbd, VspNativeSelect, VspPagination, VspProgress, VspRadio, VspRadioGroup, VspSegmented, VspSkeleton, VspSlider, VspSparkline, VspSpinner, VspStat, VspStatCard, VspStepper, VspSwitch, VspTabs, VspTag, VspTextarea, VspTimeline };
391
+ export type { AccordionItem, AlertTone, BadgeTone, BannerTone, ButtonVariant, DonutDatum, Person, SelectOption, TabItem, TimelineItem, TimelineTone };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vespera-ui/angular",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Vespera design system — Angular components.",
5
5
  "license": "Apache-2.0",
6
6
  "peerDependencies": {
@@ -0,0 +1,202 @@
1
+ import { Component, Input } from '@angular/core';
2
+
3
+ type Pt = [number, number];
4
+ function smoothPath(pts: Pt[]): string {
5
+ if (pts.length < 2) return '';
6
+ let d = `M ${pts[0]![0]} ${pts[0]![1]}`;
7
+ for (let i = 0; i < pts.length - 1; i++) {
8
+ const [x0, y0] = pts[i]!;
9
+ const [x1, y1] = pts[i + 1]!;
10
+ const cx = (x0 + x1) / 2;
11
+ d += ` C ${cx} ${y0} ${cx} ${y1} ${x1} ${y1}`;
12
+ }
13
+ return d;
14
+ }
15
+
16
+ let sparkUid = 0;
17
+
18
+ @Component({
19
+ selector: 'vsp-sparkline',
20
+ template: `<svg
21
+ [attr.width]="w"
22
+ [attr.height]="h"
23
+ [attr.viewBox]="'0 0 ' + w + ' ' + h"
24
+ style="display: block; overflow: visible"
25
+ >
26
+ @if (fill) {
27
+ <defs>
28
+ <linearGradient [id]="gid" x1="0" x2="0" y1="0" y2="1">
29
+ <stop offset="0" [attr.stop-color]="color" stop-opacity="0.28" />
30
+ <stop offset="1" [attr.stop-color]="color" stop-opacity="0" />
31
+ </linearGradient>
32
+ </defs>
33
+ <path [attr.d]="areaD" [attr.fill]="'url(#' + gid + ')'" />
34
+ }
35
+ <path [attr.d]="d" fill="none" [attr.stroke]="color" stroke-width="2" stroke-linecap="round" />
36
+ <circle [attr.cx]="last[0]" [attr.cy]="last[1]" r="2.6" [attr.fill]="color" />
37
+ </svg>`,
38
+ })
39
+ export class VspSparkline {
40
+ @Input() data: number[] = [];
41
+ @Input() color = 'var(--accent)';
42
+ @Input() w = 110;
43
+ @Input() h = 34;
44
+ @Input() fill = true;
45
+ gid = 'spk' + ++sparkUid;
46
+ get pts(): Pt[] {
47
+ const min = Math.min(...this.data);
48
+ const max = Math.max(...this.data);
49
+ const rng = max - min || 1;
50
+ return this.data.map((v, i) => [
51
+ (i / (this.data.length - 1)) * this.w,
52
+ this.h - 3 - ((v - min) / rng) * (this.h - 6),
53
+ ]);
54
+ }
55
+ get d(): string {
56
+ return smoothPath(this.pts);
57
+ }
58
+ get areaD(): string {
59
+ return `${this.d} L ${this.w} ${this.h} L 0 ${this.h} Z`;
60
+ }
61
+ get last(): Pt {
62
+ return this.pts[this.pts.length - 1] ?? [0, 0];
63
+ }
64
+ }
65
+
66
+ export interface DonutDatum {
67
+ label: string;
68
+ value: number;
69
+ color: string;
70
+ }
71
+
72
+ @Component({
73
+ selector: 'vsp-donut',
74
+ template: `<div style="display: flex; align-items: center; gap: 22px">
75
+ <svg [attr.width]="size" [attr.height]="size" style="transform: rotate(-90deg); flex-shrink: 0">
76
+ <circle
77
+ [attr.cx]="c"
78
+ [attr.cy]="c"
79
+ [attr.r]="r"
80
+ fill="none"
81
+ stroke="var(--surface-3)"
82
+ [attr.stroke-width]="thickness"
83
+ />
84
+ @for (s of segs; track $index) {
85
+ <circle
86
+ [attr.cx]="c"
87
+ [attr.cy]="c"
88
+ [attr.r]="r"
89
+ fill="none"
90
+ [attr.stroke]="s.color"
91
+ [attr.stroke-width]="thickness"
92
+ [attr.stroke-dasharray]="s.dash"
93
+ [attr.stroke-dashoffset]="s.offset"
94
+ stroke-linecap="round"
95
+ />
96
+ }
97
+ </svg>
98
+ <div style="display: flex; flex-direction: column; gap: 9px; flex: 1">
99
+ @for (d of data; track $index) {
100
+ <div style="display: flex; align-items: center; gap: 9px; font-size: 12.5px">
101
+ <i
102
+ [style.background]="d.color"
103
+ style="width: 9px; height: 9px; border-radius: 3px; flex-shrink: 0"
104
+ ></i>
105
+ <span style="color: var(--text-dim); flex: 1">{{ d.label }}</span>
106
+ <span class="mono tnum" style="font-weight: 600">{{ pct(d.value) }}%</span>
107
+ </div>
108
+ }
109
+ </div>
110
+ </div>`,
111
+ })
112
+ export class VspDonut {
113
+ @Input() data: DonutDatum[] = [];
114
+ @Input() size = 168;
115
+ @Input() thickness = 22;
116
+ get total(): number {
117
+ return this.data.reduce((s, d) => s + d.value, 0) || 1;
118
+ }
119
+ get r(): number {
120
+ return (this.size - this.thickness) / 2;
121
+ }
122
+ get c(): number {
123
+ return this.size / 2;
124
+ }
125
+ get circ(): number {
126
+ return 2 * Math.PI * this.r;
127
+ }
128
+ get segs(): { color: string; dash: string; offset: number }[] {
129
+ let acc = 0;
130
+ return this.data.map((d) => {
131
+ const len = (d.value / this.total) * this.circ;
132
+ const seg = { color: d.color, dash: `${len - 2.5} ${this.circ - len + 2.5}`, offset: -acc };
133
+ acc += len;
134
+ return seg;
135
+ });
136
+ }
137
+ pct(v: number): number {
138
+ return Math.round((v / this.total) * 100);
139
+ }
140
+ }
141
+
142
+ @Component({
143
+ selector: 'vsp-stat-card',
144
+ imports: [VspSparkline],
145
+ template: `<div
146
+ class="card card-pad vsp-rise"
147
+ style="display: flex; flex-direction: column; gap: 14px"
148
+ >
149
+ <div style="display: flex; align-items: center; justify-content: space-between">
150
+ <div style="display: flex; align-items: center; gap: 10px">
151
+ <span
152
+ 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)"
153
+ >
154
+ <ng-content select="[slot=icon]" />
155
+ </span>
156
+ <span class="eyebrow">{{ label }}</span>
157
+ </div>
158
+ @if (delta != null) {
159
+ <span [class]="deltaCls">
160
+ <svg
161
+ viewBox="0 0 24 24"
162
+ width="11"
163
+ height="11"
164
+ fill="none"
165
+ stroke="currentColor"
166
+ stroke-width="2"
167
+ stroke-linecap="round"
168
+ stroke-linejoin="round"
169
+ >
170
+ <path [attr.d]="arrow" />
171
+ </svg>
172
+ {{ delta }}
173
+ </span>
174
+ }
175
+ </div>
176
+ <div style="display: flex; align-items: flex-end; justify-content: space-between; gap: 12px">
177
+ <div
178
+ class="tnum"
179
+ style="font-size: 30px; font-weight: 800; letter-spacing: -0.02em; line-height: 1"
180
+ >
181
+ {{ value }}
182
+ </div>
183
+ @if (spark) {
184
+ <vsp-sparkline [data]="spark" [color]="sparkColor" />
185
+ }
186
+ </div>
187
+ </div>`,
188
+ })
189
+ export class VspStatCard {
190
+ @Input() label?: string;
191
+ @Input() value?: string;
192
+ @Input() delta?: string;
193
+ @Input() deltaDir: 'up' | 'down' = 'up';
194
+ @Input() spark?: number[];
195
+ @Input() sparkColor = 'var(--accent)';
196
+ get deltaCls(): string {
197
+ return 'badge ' + (this.deltaDir === 'up' ? 'badge-pos' : 'badge-neg');
198
+ }
199
+ get arrow(): string {
200
+ return this.deltaDir === 'up' ? 'M12 19V5M5 12l7-7 7 7' : 'M12 5v14M5 12l7 7 7-7';
201
+ }
202
+ }
package/src/public-api.ts CHANGED
@@ -11,3 +11,4 @@ export * from './forms.component';
11
11
  export * from './nav.component';
12
12
  export * from './data.component';
13
13
  export * from './structure.component';
14
+ export * from './charts.component';