@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
|
-
|
|
341
|
-
|
|
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
|
@@ -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