@vespera-ui/angular 0.3.0 → 0.4.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.
@@ -2146,9 +2146,301 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2146
2146
  type: Input
2147
2147
  }] } });
2148
2148
 
2149
+ class VspNumberStepper {
2150
+ value = 0;
2151
+ valueChange = new EventEmitter();
2152
+ min;
2153
+ max;
2154
+ step = 1;
2155
+ unit;
2156
+ set(v) {
2157
+ let n = v;
2158
+ if (this.min != null && n < this.min)
2159
+ n = this.min;
2160
+ if (this.max != null && n > this.max)
2161
+ n = this.max;
2162
+ this.value = n;
2163
+ this.valueChange.emit(n);
2164
+ }
2165
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspNumberStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
2166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VspNumberStepper, isStandalone: true, selector: "vsp-number-stepper", inputs: { value: "value", min: "min", max: "max", step: "step", unit: "unit" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `<div class="ui-stepper">
2167
+ <button
2168
+ type="button"
2169
+ aria-label="Decrease"
2170
+ [disabled]="min != null && value <= min"
2171
+ (click)="set(value - step)"
2172
+ >
2173
+
2174
+ </button>
2175
+ <span class="val"
2176
+ >{{ value }}
2177
+ @if (unit) {
2178
+ <i>{{ unit }}</i>
2179
+ }
2180
+ </span>
2181
+ <button
2182
+ type="button"
2183
+ aria-label="Increase"
2184
+ [disabled]="max != null && value >= max"
2185
+ (click)="set(value + step)"
2186
+ >
2187
+ +
2188
+ </button>
2189
+ </div>`, isInline: true });
2190
+ }
2191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspNumberStepper, decorators: [{
2192
+ type: Component,
2193
+ args: [{
2194
+ selector: 'vsp-number-stepper',
2195
+ template: `<div class="ui-stepper">
2196
+ <button
2197
+ type="button"
2198
+ aria-label="Decrease"
2199
+ [disabled]="min != null && value <= min"
2200
+ (click)="set(value - step)"
2201
+ >
2202
+
2203
+ </button>
2204
+ <span class="val"
2205
+ >{{ value }}
2206
+ @if (unit) {
2207
+ <i>{{ unit }}</i>
2208
+ }
2209
+ </span>
2210
+ <button
2211
+ type="button"
2212
+ aria-label="Increase"
2213
+ [disabled]="max != null && value >= max"
2214
+ (click)="set(value + step)"
2215
+ >
2216
+ +
2217
+ </button>
2218
+ </div>`,
2219
+ }]
2220
+ }], propDecorators: { value: [{
2221
+ type: Input
2222
+ }], valueChange: [{
2223
+ type: Output
2224
+ }], min: [{
2225
+ type: Input
2226
+ }], max: [{
2227
+ type: Input
2228
+ }], step: [{
2229
+ type: Input
2230
+ }], unit: [{
2231
+ type: Input
2232
+ }] } });
2233
+ class VspCopyButton {
2234
+ text = '';
2235
+ label = 'Copy';
2236
+ size = 'sm';
2237
+ done = false;
2238
+ get cls() {
2239
+ return 'btn btn-ghost' + (this.size === 'sm' ? ' btn-sm' : '');
2240
+ }
2241
+ async copy() {
2242
+ try {
2243
+ await navigator.clipboard?.writeText(this.text);
2244
+ }
2245
+ catch {
2246
+ /* clipboard unavailable */
2247
+ }
2248
+ this.done = true;
2249
+ setTimeout(() => (this.done = false), 1400);
2250
+ }
2251
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspCopyButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
2252
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VspCopyButton, isStandalone: true, selector: "vsp-copy-button", inputs: { text: "text", label: "label", size: "size" }, ngImport: i0, template: `<button type="button" [class]="cls" (click)="copy()">
2253
+ @if (done) {
2254
+ <span style="color: var(--success); display: inline-flex">
2255
+ <svg
2256
+ viewBox="0 0 24 24"
2257
+ width="15"
2258
+ height="15"
2259
+ fill="none"
2260
+ stroke="currentColor"
2261
+ stroke-width="2"
2262
+ stroke-linecap="round"
2263
+ stroke-linejoin="round"
2264
+ >
2265
+ <path d="M20 6L9 17l-5-5" />
2266
+ </svg> </span
2267
+ >Copied
2268
+ } @else {
2269
+ <svg
2270
+ viewBox="0 0 24 24"
2271
+ width="15"
2272
+ height="15"
2273
+ fill="none"
2274
+ stroke="currentColor"
2275
+ stroke-width="2"
2276
+ stroke-linecap="round"
2277
+ stroke-linejoin="round"
2278
+ >
2279
+ <path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6" />
2280
+ </svg>
2281
+ {{ label }}
2282
+ }
2283
+ </button>`, isInline: true });
2284
+ }
2285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspCopyButton, decorators: [{
2286
+ type: Component,
2287
+ args: [{
2288
+ selector: 'vsp-copy-button',
2289
+ template: `<button type="button" [class]="cls" (click)="copy()">
2290
+ @if (done) {
2291
+ <span style="color: var(--success); display: inline-flex">
2292
+ <svg
2293
+ viewBox="0 0 24 24"
2294
+ width="15"
2295
+ height="15"
2296
+ fill="none"
2297
+ stroke="currentColor"
2298
+ stroke-width="2"
2299
+ stroke-linecap="round"
2300
+ stroke-linejoin="round"
2301
+ >
2302
+ <path d="M20 6L9 17l-5-5" />
2303
+ </svg> </span
2304
+ >Copied
2305
+ } @else {
2306
+ <svg
2307
+ viewBox="0 0 24 24"
2308
+ width="15"
2309
+ height="15"
2310
+ fill="none"
2311
+ stroke="currentColor"
2312
+ stroke-width="2"
2313
+ stroke-linecap="round"
2314
+ stroke-linejoin="round"
2315
+ >
2316
+ <path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6" />
2317
+ </svg>
2318
+ {{ label }}
2319
+ }
2320
+ </button>`,
2321
+ }]
2322
+ }], propDecorators: { text: [{
2323
+ type: Input
2324
+ }], label: [{
2325
+ type: Input
2326
+ }], size: [{
2327
+ type: Input
2328
+ }] } });
2329
+ class VspInlineEdit {
2330
+ value = '';
2331
+ placeholder = 'Empty';
2332
+ save = new EventEmitter();
2333
+ editing = false;
2334
+ draft = '';
2335
+ start() {
2336
+ this.draft = this.value;
2337
+ this.editing = true;
2338
+ }
2339
+ commit() {
2340
+ this.editing = false;
2341
+ if (this.draft !== this.value)
2342
+ this.save.emit(this.draft);
2343
+ }
2344
+ cancel() {
2345
+ this.draft = this.value;
2346
+ this.editing = false;
2347
+ }
2348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component });
2349
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VspInlineEdit, isStandalone: true, selector: "vsp-inline-edit", inputs: { value: "value", placeholder: "placeholder" }, outputs: { save: "save" }, ngImport: i0, template: `@if (editing) {
2350
+ <input
2351
+ #inp
2352
+ autofocus
2353
+ class="ui-input"
2354
+ [value]="draft"
2355
+ style="height: 32px; max-width: 240px"
2356
+ (input)="draft = inp.value"
2357
+ (blur)="commit()"
2358
+ (keydown.enter)="commit()"
2359
+ (keydown.escape)="cancel()"
2360
+ />
2361
+ } @else {
2362
+ <span
2363
+ class="ui-inline"
2364
+ role="button"
2365
+ tabindex="0"
2366
+ (click)="start()"
2367
+ (keydown.enter)="start()"
2368
+ >
2369
+ <span [style.color]="value ? 'var(--text)' : 'var(--text-faint)'">{{
2370
+ value || placeholder
2371
+ }}</span>
2372
+ <span class="pen" style="display: inline-flex">
2373
+ <svg
2374
+ viewBox="0 0 24 24"
2375
+ width="14"
2376
+ height="14"
2377
+ fill="none"
2378
+ stroke="currentColor"
2379
+ stroke-width="2"
2380
+ stroke-linecap="round"
2381
+ stroke-linejoin="round"
2382
+ >
2383
+ <path d="M12 20h9M16.5 3.5a2.12 2.12 0 013 3L7 19l-4 1 1-4z" />
2384
+ </svg>
2385
+ </span>
2386
+ </span>
2387
+ }`, isInline: true });
2388
+ }
2389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VspInlineEdit, decorators: [{
2390
+ type: Component,
2391
+ args: [{
2392
+ selector: 'vsp-inline-edit',
2393
+ template: `@if (editing) {
2394
+ <input
2395
+ #inp
2396
+ autofocus
2397
+ class="ui-input"
2398
+ [value]="draft"
2399
+ style="height: 32px; max-width: 240px"
2400
+ (input)="draft = inp.value"
2401
+ (blur)="commit()"
2402
+ (keydown.enter)="commit()"
2403
+ (keydown.escape)="cancel()"
2404
+ />
2405
+ } @else {
2406
+ <span
2407
+ class="ui-inline"
2408
+ role="button"
2409
+ tabindex="0"
2410
+ (click)="start()"
2411
+ (keydown.enter)="start()"
2412
+ >
2413
+ <span [style.color]="value ? 'var(--text)' : 'var(--text-faint)'">{{
2414
+ value || placeholder
2415
+ }}</span>
2416
+ <span class="pen" style="display: inline-flex">
2417
+ <svg
2418
+ viewBox="0 0 24 24"
2419
+ width="14"
2420
+ height="14"
2421
+ fill="none"
2422
+ stroke="currentColor"
2423
+ stroke-width="2"
2424
+ stroke-linecap="round"
2425
+ stroke-linejoin="round"
2426
+ >
2427
+ <path d="M12 20h9M16.5 3.5a2.12 2.12 0 013 3L7 19l-4 1 1-4z" />
2428
+ </svg>
2429
+ </span>
2430
+ </span>
2431
+ }`,
2432
+ }]
2433
+ }], propDecorators: { value: [{
2434
+ type: Input
2435
+ }], placeholder: [{
2436
+ type: Input
2437
+ }], save: [{
2438
+ type: Output
2439
+ }] } });
2440
+
2149
2441
  /**
2150
2442
  * Generated bundle index. Do not edit.
2151
2443
  */
2152
2444
 
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 };
2445
+ export { VspAccordion, VspAlert, VspAvatar, VspAvatarGroup, VspBadge, VspBanner, VspBreadcrumb, VspButton, VspCard, VspCardHead, VspCheckbox, VspCircularProgress, VspCopyButton, VspDescriptionList, VspDivider, VspDonut, VspEmptyState, VspField, VspIconButton, VspInlineEdit, VspInput, VspKbd, VspNativeSelect, VspNumberStepper, VspPagination, VspProgress, VspRadio, VspRadioGroup, VspSegmented, VspSkeleton, VspSlider, VspSparkline, VspSpinner, VspStat, VspStatCard, VspStepper, VspSwitch, VspTabs, VspTag, VspTextarea, VspTimeline };
2154
2446
  //# 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/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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"}
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/extras.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","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'vsp-number-stepper',\n template: `<div class=\"ui-stepper\">\n <button\n type=\"button\"\n aria-label=\"Decrease\"\n [disabled]=\"min != null && value <= min\"\n (click)=\"set(value - step)\"\n >\n −\n </button>\n <span class=\"val\"\n >{{ value }}\n @if (unit) {\n <i>{{ unit }}</i>\n }\n </span>\n <button\n type=\"button\"\n aria-label=\"Increase\"\n [disabled]=\"max != null && value >= max\"\n (click)=\"set(value + step)\"\n >\n +\n </button>\n </div>`,\n})\nexport class VspNumberStepper {\n @Input() value = 0;\n @Output() valueChange = new EventEmitter<number>();\n @Input() min?: number;\n @Input() max?: number;\n @Input() step = 1;\n @Input() unit?: string;\n set(v: number): void {\n let n = v;\n if (this.min != null && n < this.min) n = this.min;\n if (this.max != null && n > this.max) n = this.max;\n this.value = n;\n this.valueChange.emit(n);\n }\n}\n\n@Component({\n selector: 'vsp-copy-button',\n template: `<button type=\"button\" [class]=\"cls\" (click)=\"copy()\">\n @if (done) {\n <span style=\"color: var(--success); display: inline-flex\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"15\"\n height=\"15\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg> </span\n >Copied\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n width=\"15\"\n height=\"15\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6\" />\n </svg>\n {{ label }}\n }\n </button>`,\n})\nexport class VspCopyButton {\n @Input() text = '';\n @Input() label = 'Copy';\n @Input() size = 'sm';\n done = false;\n get cls(): string {\n return 'btn btn-ghost' + (this.size === 'sm' ? ' btn-sm' : '');\n }\n async copy(): Promise<void> {\n try {\n await navigator.clipboard?.writeText(this.text);\n } catch {\n /* clipboard unavailable */\n }\n this.done = true;\n setTimeout(() => (this.done = false), 1400);\n }\n}\n\n@Component({\n selector: 'vsp-inline-edit',\n template: `@if (editing) {\n <input\n #inp\n autofocus\n class=\"ui-input\"\n [value]=\"draft\"\n style=\"height: 32px; max-width: 240px\"\n (input)=\"draft = inp.value\"\n (blur)=\"commit()\"\n (keydown.enter)=\"commit()\"\n (keydown.escape)=\"cancel()\"\n />\n } @else {\n <span\n class=\"ui-inline\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"start()\"\n (keydown.enter)=\"start()\"\n >\n <span [style.color]=\"value ? 'var(--text)' : 'var(--text-faint)'\">{{\n value || placeholder\n }}</span>\n <span class=\"pen\" style=\"display: inline-flex\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M12 20h9M16.5 3.5a2.12 2.12 0 013 3L7 19l-4 1 1-4z\" />\n </svg>\n </span>\n </span>\n }`,\n})\nexport class VspInlineEdit {\n @Input() value = '';\n @Input() placeholder = 'Empty';\n @Output() save = new EventEmitter<string>();\n editing = false;\n draft = '';\n start(): void {\n this.draft = this.value;\n this.editing = true;\n }\n commit(): void {\n this.editing = false;\n if (this.draft !== this.value) this.save.emit(this.draft);\n }\n cancel(): void {\n this.draft = this.value;\n this.editing = false;\n }\n}\n","/**\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
@@ -387,5 +387,39 @@ declare class VspStatCard {
387
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
388
  }
389
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 };
390
+ declare class VspNumberStepper {
391
+ value: number;
392
+ valueChange: EventEmitter<number>;
393
+ min?: number;
394
+ max?: number;
395
+ step: number;
396
+ unit?: string;
397
+ set(v: number): void;
398
+ static ɵfac: i0.ɵɵFactoryDeclaration<VspNumberStepper, never>;
399
+ static ɵcmp: i0.ɵɵComponentDeclaration<VspNumberStepper, "vsp-number-stepper", never, { "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "unit": { "alias": "unit"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
400
+ }
401
+ declare class VspCopyButton {
402
+ text: string;
403
+ label: string;
404
+ size: string;
405
+ done: boolean;
406
+ get cls(): string;
407
+ copy(): Promise<void>;
408
+ static ɵfac: i0.ɵɵFactoryDeclaration<VspCopyButton, never>;
409
+ static ɵcmp: i0.ɵɵComponentDeclaration<VspCopyButton, "vsp-copy-button", never, { "text": { "alias": "text"; "required": false; }; "label": { "alias": "label"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
410
+ }
411
+ declare class VspInlineEdit {
412
+ value: string;
413
+ placeholder: string;
414
+ save: EventEmitter<string>;
415
+ editing: boolean;
416
+ draft: string;
417
+ start(): void;
418
+ commit(): void;
419
+ cancel(): void;
420
+ static ɵfac: i0.ɵɵFactoryDeclaration<VspInlineEdit, never>;
421
+ static ɵcmp: i0.ɵɵComponentDeclaration<VspInlineEdit, "vsp-inline-edit", never, { "value": { "alias": "value"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; }, { "save": "save"; }, never, never, true, never>;
422
+ }
423
+
424
+ export { VspAccordion, VspAlert, VspAvatar, VspAvatarGroup, VspBadge, VspBanner, VspBreadcrumb, VspButton, VspCard, VspCardHead, VspCheckbox, VspCircularProgress, VspCopyButton, VspDescriptionList, VspDivider, VspDonut, VspEmptyState, VspField, VspIconButton, VspInlineEdit, VspInput, VspKbd, VspNativeSelect, VspNumberStepper, VspPagination, VspProgress, VspRadio, VspRadioGroup, VspSegmented, VspSkeleton, VspSlider, VspSparkline, VspSpinner, VspStat, VspStatCard, VspStepper, VspSwitch, VspTabs, VspTag, VspTextarea, VspTimeline };
391
425
  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.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Vespera design system — Angular components.",
5
5
  "license": "Apache-2.0",
6
6
  "peerDependencies": {
@@ -0,0 +1,160 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: 'vsp-number-stepper',
5
+ template: `<div class="ui-stepper">
6
+ <button
7
+ type="button"
8
+ aria-label="Decrease"
9
+ [disabled]="min != null && value <= min"
10
+ (click)="set(value - step)"
11
+ >
12
+
13
+ </button>
14
+ <span class="val"
15
+ >{{ value }}
16
+ @if (unit) {
17
+ <i>{{ unit }}</i>
18
+ }
19
+ </span>
20
+ <button
21
+ type="button"
22
+ aria-label="Increase"
23
+ [disabled]="max != null && value >= max"
24
+ (click)="set(value + step)"
25
+ >
26
+ +
27
+ </button>
28
+ </div>`,
29
+ })
30
+ export class VspNumberStepper {
31
+ @Input() value = 0;
32
+ @Output() valueChange = new EventEmitter<number>();
33
+ @Input() min?: number;
34
+ @Input() max?: number;
35
+ @Input() step = 1;
36
+ @Input() unit?: string;
37
+ set(v: number): void {
38
+ let n = v;
39
+ if (this.min != null && n < this.min) n = this.min;
40
+ if (this.max != null && n > this.max) n = this.max;
41
+ this.value = n;
42
+ this.valueChange.emit(n);
43
+ }
44
+ }
45
+
46
+ @Component({
47
+ selector: 'vsp-copy-button',
48
+ template: `<button type="button" [class]="cls" (click)="copy()">
49
+ @if (done) {
50
+ <span style="color: var(--success); display: inline-flex">
51
+ <svg
52
+ viewBox="0 0 24 24"
53
+ width="15"
54
+ height="15"
55
+ fill="none"
56
+ stroke="currentColor"
57
+ stroke-width="2"
58
+ stroke-linecap="round"
59
+ stroke-linejoin="round"
60
+ >
61
+ <path d="M20 6L9 17l-5-5" />
62
+ </svg> </span
63
+ >Copied
64
+ } @else {
65
+ <svg
66
+ viewBox="0 0 24 24"
67
+ width="15"
68
+ height="15"
69
+ fill="none"
70
+ stroke="currentColor"
71
+ stroke-width="2"
72
+ stroke-linecap="round"
73
+ stroke-linejoin="round"
74
+ >
75
+ <path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6" />
76
+ </svg>
77
+ {{ label }}
78
+ }
79
+ </button>`,
80
+ })
81
+ export class VspCopyButton {
82
+ @Input() text = '';
83
+ @Input() label = 'Copy';
84
+ @Input() size = 'sm';
85
+ done = false;
86
+ get cls(): string {
87
+ return 'btn btn-ghost' + (this.size === 'sm' ? ' btn-sm' : '');
88
+ }
89
+ async copy(): Promise<void> {
90
+ try {
91
+ await navigator.clipboard?.writeText(this.text);
92
+ } catch {
93
+ /* clipboard unavailable */
94
+ }
95
+ this.done = true;
96
+ setTimeout(() => (this.done = false), 1400);
97
+ }
98
+ }
99
+
100
+ @Component({
101
+ selector: 'vsp-inline-edit',
102
+ template: `@if (editing) {
103
+ <input
104
+ #inp
105
+ autofocus
106
+ class="ui-input"
107
+ [value]="draft"
108
+ style="height: 32px; max-width: 240px"
109
+ (input)="draft = inp.value"
110
+ (blur)="commit()"
111
+ (keydown.enter)="commit()"
112
+ (keydown.escape)="cancel()"
113
+ />
114
+ } @else {
115
+ <span
116
+ class="ui-inline"
117
+ role="button"
118
+ tabindex="0"
119
+ (click)="start()"
120
+ (keydown.enter)="start()"
121
+ >
122
+ <span [style.color]="value ? 'var(--text)' : 'var(--text-faint)'">{{
123
+ value || placeholder
124
+ }}</span>
125
+ <span class="pen" style="display: inline-flex">
126
+ <svg
127
+ viewBox="0 0 24 24"
128
+ width="14"
129
+ height="14"
130
+ fill="none"
131
+ stroke="currentColor"
132
+ stroke-width="2"
133
+ stroke-linecap="round"
134
+ stroke-linejoin="round"
135
+ >
136
+ <path d="M12 20h9M16.5 3.5a2.12 2.12 0 013 3L7 19l-4 1 1-4z" />
137
+ </svg>
138
+ </span>
139
+ </span>
140
+ }`,
141
+ })
142
+ export class VspInlineEdit {
143
+ @Input() value = '';
144
+ @Input() placeholder = 'Empty';
145
+ @Output() save = new EventEmitter<string>();
146
+ editing = false;
147
+ draft = '';
148
+ start(): void {
149
+ this.draft = this.value;
150
+ this.editing = true;
151
+ }
152
+ commit(): void {
153
+ this.editing = false;
154
+ if (this.draft !== this.value) this.save.emit(this.draft);
155
+ }
156
+ cancel(): void {
157
+ this.draft = this.value;
158
+ this.editing = false;
159
+ }
160
+ }
package/src/public-api.ts CHANGED
@@ -12,3 +12,4 @@ export * from './nav.component';
12
12
  export * from './data.component';
13
13
  export * from './structure.component';
14
14
  export * from './charts.component';
15
+ export * from './extras.component';