@joanroucoux/cairn-ui 0.6.1 → 0.6.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"joanroucoux-cairn-ui.mjs","sources":["../../../projects/ui/src/lib/action-bar/action-bar.ts","../../../projects/ui/src/lib/alert/alert.ts","../../../projects/ui/src/lib/amount/format-amount.ts","../../../projects/ui/src/lib/amount/amount.ts","../../../projects/ui/src/lib/async/async.ts","../../../projects/ui/src/lib/avatar/avatar.ts","../../../projects/ui/src/lib/back-link/back-link.ts","../../../projects/ui/src/lib/badge/badge.ts","../../../projects/ui/src/lib/button/button.ts","../../../projects/ui/src/lib/card/card.ts","../../../projects/ui/src/lib/control/control.ts","../../../projects/ui/src/lib/input/input.ts","../../../projects/ui/src/lib/choice-chips/choice-chips.ts","../../../projects/ui/src/lib/delta/delta.ts","../../../projects/ui/src/lib/dialog/dialog.ts","../../../projects/ui/src/lib/donut/internal/donut-geometry.ts","../../../projects/ui/src/lib/donut/internal/donut-slices.ts","../../../projects/ui/src/lib/donut/donut.ts","../../../projects/ui/src/lib/external-link/external-link.ts","../../../projects/ui/src/lib/fact/fact.ts","../../../projects/ui/src/lib/field/field.ts","../../../projects/ui/src/lib/filter-chips/filter-chips.ts","../../../projects/ui/src/lib/line-chart/internal/chart-axis.ts","../../../projects/ui/src/lib/line-chart/internal/chart-interaction.ts","../../../projects/ui/src/lib/line-chart/internal/chart-layout.ts","../../../projects/ui/src/lib/line-chart/internal/chart-scale.ts","../../../projects/ui/src/lib/line-chart/internal/start-label.ts","../../../projects/ui/src/lib/line-chart/internal/transition.ts","../../../projects/ui/src/lib/line-chart/internal/viewport.ts","../../../projects/ui/src/lib/line-chart/line-chart.ts","../../../projects/ui/src/lib/menu/menu.ts","../../../projects/ui/src/lib/meter/meter.ts","../../../projects/ui/src/lib/nav-item/nav-item.ts","../../../projects/ui/src/lib/row/row.ts","../../../projects/ui/src/lib/segmented/segmented.ts","../../../projects/ui/src/lib/select/select.ts","../../../projects/ui/src/lib/skeleton/skeleton.ts","../../../projects/ui/src/lib/stat/stat.ts","../../../projects/ui/src/lib/switch/switch.ts","../../../projects/ui/src/lib/tab-bar/tab-bar.ts","../../../projects/ui/src/lib/table/table.ts","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/joanroucoux-cairn-ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n/**\n * Bar of actions fixed above the tab bar on iPhone: the primary actions of a detail screen, within\n * thumb reach. It sits 52px plus the safe area above the bottom edge, so it clears `ui-tab-bar`, and\n * it is hidden from `64rem`, where the same actions live in the page itself. Its children share the\n * width equally.\n *\n * @example\n * <ui-action-bar>\n * <button ui-button variant=\"outline\" size=\"tall\">Sell</button>\n * <button ui-button size=\"tall\">Buy</button>\n * </ui-action-bar>\n */\n@Component({\n selector: 'ui-action-bar',\n template: '<ng-content />',\n host: {\n class:\n 'fixed inset-x-0 bottom-[calc(52px+env(safe-area-inset-bottom))] z-40 grid grid-flow-col auto-cols-fr gap-2 bg-(--background) px-(--gutter) py-3 shadow-[0_-1px_0_var(--hairline)] lg:hidden',\n },\n})\nexport class UiActionBar {}\n","import { Component, computed, input } from '@angular/core';\n\nexport const ALERT_VARIANTS = ['error', 'warning'] as const;\nexport type AlertVariant = (typeof ALERT_VARIANTS)[number];\n\nconst BASE_CLASSES = 'flex items-start gap-2.5 text-left text-label';\n\nconst VARIANT_CLASSES: Record<AlertVariant, string> = {\n error: 'rounded-control bg-(--card) px-3.5 py-3 shadow-[inset_0_0_0_1px_var(--border)]',\n warning: 'text-(--foreground)',\n};\n\n/**\n * Inline message explaining a failure or a consequence: an icon, an optional heading and a text.\n *\n * @example\n * <ui-alert heading=\"Sign-in failed\">Try again.</ui-alert>\n */\n@Component({\n selector: 'ui-alert',\n template: `\n @if (variant() === 'warning') {\n <svg\n aria-hidden=\"true\"\n class=\"mt-px block flex-none stroke-(--negative)\"\n fill=\"none\"\n height=\"18\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n } @else {\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none stroke-(--negative)\"\n fill=\"none\"\n height=\"18\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n [class.mt-px]=\"heading()\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" />\n <line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\n </svg>\n }\n <div class=\"flex flex-col gap-0.5\">\n @if (heading()) {\n <span class=\"font-medium\">{{ heading() }}</span>\n }\n <span class=\"text-pretty\" [class.text-(--muted-foreground)]=\"heading()\"><ng-content /></span>\n </div>\n `,\n host: {\n '[class]': 'classes()',\n '[attr.role]': \"variant() === 'warning' ? 'status' : 'alert'\",\n },\n})\nexport class UiAlert {\n readonly variant = input<AlertVariant>('error');\n readonly heading = input<string>();\n\n protected readonly classes = computed(() => `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()]}`);\n}\n","const MINUS = '−';\nconst EM_DASH = '—';\nconst BULLETS = '••••';\n\nexport type AmountFormatOptions = {\n locale: string;\n currency?: string;\n signed?: boolean;\n fractionDigits?: number;\n};\n\n/** Formats a number or an amount for the locale, with a missing value as an em dash and masking behind four bullets. */\nexport function formatAmount(value: number | null | undefined, options: AmountFormatOptions, masked = false): string {\n if (value === null || value === undefined || Number.isNaN(value)) {\n return EM_DASH;\n }\n const digits = options.fractionDigits ?? 2;\n const format = new Intl.NumberFormat(options.locale, {\n ...(options.currency ? { style: 'currency', currency: options.currency } : {}),\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n const magnitude = Math.abs(value);\n const parts = format.formatToParts(magnitude);\n\n if (masked) {\n let replaced = false;\n return parts\n .map((part) => {\n if (['integer', 'group', 'decimal', 'fraction'].includes(part.type)) {\n if (replaced) {\n return '';\n }\n replaced = true;\n return BULLETS;\n }\n return part.value;\n })\n .join('');\n }\n\n const text = parts.map((part) => part.value).join('');\n const isZero = Number(format.format(magnitude).replace(/[^\\d]/g, '')) === 0;\n if (!options.signed || isZero) {\n return value < 0 && !isZero ? `${MINUS}${text}` : text;\n }\n return `${value > 0 ? '+' : MINUS}${text}`;\n}\n","import {\n Component,\n InjectionToken,\n LOCALE_ID,\n type Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { formatAmount } from './format-amount';\n\n/** App-wide \"amounts are hidden\" state. Defaults to never masked; the app overrides it. */\nexport const UI_AMOUNT_MASKED = new InjectionToken<Signal<boolean>>('UI_AMOUNT_MASKED', {\n providedIn: 'root',\n factory: () => signal(false),\n});\n\n/** Available figure styles. `AmountNumeric` is derived from this tuple. */\nexport const AMOUNT_NUMERICS = ['tabular', 'proportional'] as const;\nexport type AmountNumeric = (typeof AMOUNT_NUMERICS)[number];\n\n/** Available masking behaviors. `AmountMasking` is derived from this tuple. */\nexport const AMOUNT_MASKINGS = ['dots', 'hide'] as const;\nexport type AmountMasking = (typeof AMOUNT_MASKINGS)[number];\n\n/**\n * A number or an amount of money, formatted for the locale and masked when the app hides amounts.\n *\n * @example\n * <ui-amount [value]=\"total\" currency=\"EUR\" numeric=\"proportional\" />\n * <ui-amount [value]=\"dayChange\" currency=\"EUR\" signed whenMasked=\"hide\" />\n */\n@Component({\n selector: 'ui-amount',\n template: '{{ text() }}',\n host: {\n '[class]': 'classes()',\n '[attr.hidden]': 'hidden() || null',\n },\n})\nexport class UiAmount {\n readonly value = input<number | null | undefined>();\n readonly currency = input<string>();\n readonly locale = input<string>(inject(LOCALE_ID));\n readonly signed = input(false, { transform: booleanAttribute });\n readonly fractionDigits = input(2);\n readonly numeric = input<AmountNumeric>('tabular');\n readonly whenMasked = input<AmountMasking>('dots');\n\n readonly #masked = inject(UI_AMOUNT_MASKED);\n\n protected readonly hidden = computed(() => this.#masked() && this.whenMasked() === 'hide');\n\n protected readonly text = computed(() =>\n formatAmount(\n this.value(),\n {\n locale: this.locale(),\n currency: this.currency(),\n signed: this.signed(),\n fractionDigits: this.fractionDigits(),\n },\n this.#masked(),\n ),\n );\n\n protected readonly classes = computed(() => {\n const missing = this.value() === null || this.value() === undefined;\n\n return [\n 'whitespace-nowrap',\n this.numeric() === 'tabular' ? 'tabular-nums' : '',\n missing ? 'text-(--subtle-foreground)' : '',\n ]\n .filter(Boolean)\n .join(' ');\n });\n}\n","import { Component, booleanAttribute, computed, input, output } from '@angular/core';\n\n/** Available async block states. `AsyncState` is derived from this tuple. */\nexport const ASYNC_STATES = ['loading', 'error', 'empty', 'ready'] as const;\nexport type AsyncState = (typeof ASYNC_STATES)[number];\n\n/** Looks of the error block. `AsyncVariant` is derived from this tuple. */\nexport const ASYNC_VARIANTS = ['elevated', 'plain', 'emphasis', 'inline'] as const;\nexport type AsyncVariant = (typeof ASYNC_VARIANTS)[number];\n\n/** Alignments of the error block; `auto` is centred from 64rem. `AsyncAlign` is derived from this tuple. */\nexport const ASYNC_ALIGNS = ['start', 'center', 'auto'] as const;\nexport type AsyncAlign = (typeof ASYNC_ALIGNS)[number];\n\nconst RETRY_BASE_CLASSES =\n 'relative inline-flex items-center justify-center rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,opacity] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) text-label';\n\nconst RETRY_OUTLINE_CLASSES =\n 'bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow)';\n\nconst RETRY_PRIMARY_CLASSES = 'bg-(--primary) text-(--primary-foreground) hover:bg-(--primary-to)';\n\nconst RETRY_BLOCK_CLASSES = 'min-h-(--row-min) gap-2 pl-3 pr-4';\n\nconst RETRY_INLINE_CLASSES = 'h-11 pointer-fine:h-8 flex-none gap-1.5 pl-2.5 pr-3';\n\nconst ELEVATED_SURFACE_CLASSES = 'rounded-control bg-(--elevated)';\n\nconst CARD_SURFACE_CLASSES = 'rounded-container bg-(--card) shadow-[inset_0_0_0_1px_var(--border)]';\n\ntype BlockSpec = {\n surface: string;\n gap: string;\n padding: Record<AsyncAlign, string>;\n title: string;\n message: Record<AsyncAlign, string>;\n retryMargin: Record<AsyncAlign, string>;\n retry: string;\n};\n\nconst BLOCK_SPECS: Record<Exclude<AsyncVariant, 'inline'>, BlockSpec> = {\n elevated: {\n surface: ELEVATED_SURFACE_CLASSES,\n gap: 'gap-1',\n padding: { start: 'p-4', center: 'px-4 py-10', auto: 'p-4 lg:py-10' },\n title: 'text-body font-medium',\n message: { start: 'text-label', center: 'text-label', auto: 'text-label' },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n plain: {\n surface: '',\n gap: 'gap-1',\n padding: { start: 'px-4 py-5', center: 'px-4 py-12', auto: 'px-4 py-5 lg:py-12' },\n title: 'text-body leading-[normal] font-medium',\n message: {\n start: 'text-label leading-[normal]',\n center: 'text-label leading-[normal]',\n auto: 'text-label leading-[normal]',\n },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n emphasis: {\n surface: '',\n gap: 'gap-3',\n padding: { start: 'px-4 py-6', center: 'px-4 py-14', auto: 'px-4 py-6 lg:py-14' },\n title: 'text-title font-semibold',\n message: {\n start: 'text-label',\n center: 'text-body leading-[normal]',\n auto: 'text-label lg:text-body lg:leading-[normal]',\n },\n retryMargin: { start: 'mt-1', center: 'mt-2', auto: 'mt-1 lg:mt-2' },\n retry: RETRY_PRIMARY_CLASSES,\n },\n};\n\nconst ALIGN_CLASSES: Record<AsyncAlign, string> = {\n start: 'items-start',\n center: 'items-center text-center',\n auto: 'items-start lg:items-center lg:text-center',\n};\n\nconst INLINE_BOX_CLASSES = 'flex-row items-center justify-between gap-3 pt-1.5 pr-1.5 pb-2 pl-2.5';\n\n/**\n * The three states of a block that depends on a service call, next to the ready content.\n *\n * @example\n * <ui-async [state]=\"totalState()\" errorTitle=\"Total could not be loaded\" errorMessage=\"The server did not answer.\" retryLabel=\"Retry\" (retry)=\"reload()\">\n * <span asyncLoading><ui-skeleton shape=\"figure\" /></span>\n * <span asyncEmpty>Add a holding to see your total.</span>\n * <span>{{ total() }}</span>\n * </ui-async>\n */\n@Component({\n selector: 'ui-async',\n template: `\n @switch (state()) {\n @case ('loading') {\n <ng-content select=\"[asyncLoading]\" />\n }\n @case ('error') {\n <div aria-live=\"polite\" role=\"alert\" [class]=\"boxClasses()\">\n @if (variant() === 'inline') {\n <span class=\"text-label text-(--muted-foreground)\">{{ errorMessage() }}</span>\n } @else {\n @if (variant() === 'emphasis') {\n <h2 [class]=\"titleClasses()\">{{ errorTitle() }}</h2>\n } @else {\n <span [class]=\"titleClasses()\">{{ errorTitle() }}</span>\n }\n <span class=\"text-(--muted-foreground)\" [class]=\"messageClasses()\">{{ errorMessage() }}</span>\n }\n <button type=\"button\" [class]=\"retryButtonClasses()\" (click)=\"retry.emit()\">\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none fill-none stroke-current\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n [attr.height]=\"iconSize()\"\n [attr.width]=\"iconSize()\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n {{ retryLabel() }}\n </button>\n </div>\n }\n @case ('empty') {\n <ng-content select=\"[asyncEmpty]\" />\n }\n @default {\n <ng-content />\n }\n }\n `,\n host: {\n '[attr.aria-busy]': \"state() === 'loading' || null\",\n '[class.flex]': 'filling()',\n '[class.flex-col]': 'filling()',\n },\n})\nexport class UiAsync {\n readonly state = input.required<AsyncState>();\n readonly errorTitle = input<string>();\n readonly errorMessage = input<string>();\n readonly retryLabel = input<string>();\n readonly variant = input<AsyncVariant>('elevated');\n readonly align = input<AsyncAlign>('start');\n readonly card = input(false, { transform: booleanAttribute });\n readonly fill = input(false, { transform: booleanAttribute });\n readonly retry = output<void>();\n\n protected readonly filling = computed(() => this.fill() && this.state() === 'error');\n\n protected readonly iconSize = computed(() => (this.variant() === 'inline' ? 16 : 18));\n\n readonly #spec = computed(() => {\n const variant = this.variant();\n\n return variant === 'inline' ? null : BLOCK_SPECS[variant];\n });\n\n protected readonly boxClasses = computed(() => {\n const spec = this.#spec();\n const fill = this.fill() ? ' flex-1 justify-center' : '';\n\n if (spec === null) {\n return `flex ${INLINE_BOX_CLASSES}${this.card() ? ` ${CARD_SURFACE_CLASSES}` : ''}${this.fill() ? ' flex-1' : ''}`;\n }\n\n const surface = this.card() ? CARD_SURFACE_CLASSES : spec.surface;\n\n return `flex flex-col ${surface} ${spec.gap} ${ALIGN_CLASSES[this.align()]} ${spec.padding[this.align()]}${fill}`;\n });\n\n protected readonly titleClasses = computed(() => this.#spec()?.title ?? '');\n\n protected readonly messageClasses = computed(() => this.#spec()?.message[this.align()] ?? '');\n\n protected readonly retryButtonClasses = computed(() => {\n const spec = this.#spec();\n\n if (spec === null) {\n return `${RETRY_BASE_CLASSES} ${RETRY_OUTLINE_CLASSES} ${RETRY_INLINE_CLASSES}`;\n }\n\n return `${RETRY_BASE_CLASSES} ${spec.retry} ${RETRY_BLOCK_CLASSES} ${spec.retryMargin[this.align()]}`;\n });\n}\n","import { Component, Directive, computed, input } from '@angular/core';\n\n/** Available avatar sizes. `AvatarSize` is derived from this tuple. */\nexport const AVATAR_SIZES = ['sm', 'md', 'lg', 'auto'] as const;\nexport type AvatarSize = (typeof AVATAR_SIZES)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center justify-center rounded-pill bg-(--muted) font-medium tabular-nums';\n\nconst SIZE_CLASSES: Record<AvatarSize, string> = {\n sm: 'size-8 text-caption',\n md: 'size-[34px] text-label',\n lg: 'size-14 text-title',\n auto: 'size-[34px] text-label lg:size-8 lg:text-caption',\n};\n\n/**\n * Initials in a disc, standing in for a person. Single-user application: there is exactly one.\n *\n * @example\n * <ui-avatar initials=\"JR\" label=\"My account\" />\n */\n@Component({\n selector: 'ui-avatar',\n template: '<span aria-hidden=\"true\">{{ initials() }}</span>',\n host: {\n role: 'img',\n '[attr.aria-label]': 'label()',\n '[class]': 'classes()',\n },\n})\nexport class UiAvatar {\n readonly initials = input.required<string>();\n readonly label = input.required<string>();\n readonly size = input<AvatarSize>('md');\n\n protected readonly classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}`);\n}\n\n/**\n * Round hit area around a `ui-avatar` that links somewhere: 44px on touch, 40px from 64rem, with a\n * glow on hover and the press scale. The avatar itself keeps its own size.\n *\n * @example\n * <a uiAvatarLink routerLink=\"/profile\"><ui-avatar initials=\"JR\" label=\"Profile\" size=\"auto\" /></a>\n */\n@Directive({\n selector: 'a[uiAvatarLink], button[uiAvatarLink]',\n host: {\n class:\n 'rounded-pill grid size-11 lg:size-10 place-items-center cursor-pointer select-none touch-manipulation transition-[transform,background-color] duration-(--duration-press) ease-out hover:bg-(--glow) active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)',\n },\n})\nexport class UiAvatarLink {}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available back link sizes. `BackLinkSize` is derived from this tuple. */\nexport const BACK_LINK_SIZES = ['md', 'sm', 'header'] as const;\nexport type BackLinkSize = (typeof BACK_LINK_SIZES)[number];\n\nconst BASE_CLASSES =\n 'inline-flex items-center gap-0.5 rounded-control text-body font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,color] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-(--ring)';\n\nconst SIZE_CLASSES: Record<BackLinkSize, string> = {\n md: 'h-11 pr-3 pl-1 text-(--foreground) focus-visible:outline-offset-2',\n sm: 'h-9 pr-2 pl-0.5 text-(--muted-foreground) hover:bg-(--glow) hover:text-(--foreground) focus-visible:outline-offset-2',\n header: 'h-11 pr-3 pl-1 text-(--foreground) focus-visible:-outline-offset-2',\n};\n\nconst CHEVRON: Record<BackLinkSize, number> = { md: 22, sm: 22, header: 24 };\n\n/**\n * Link back to the parent screen: a chevron and the name of the destination.\n *\n * @example\n * <a ui-back-link routerLink=\"/accounts\">Accounts</a>\n */\n@Component({\n selector: 'a[ui-back-link]',\n template: `\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n [attr.height]=\"chevron()\"\n [attr.width]=\"chevron()\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n <ng-content />\n `,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiBackLink {\n readonly size = input<BackLinkSize>('md');\n\n protected readonly chevron = computed(() => CHEVRON[this.size()]);\n protected readonly classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}`);\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available badge variants. `BadgeVariant` is derived from this tuple. */\nexport const BADGE_VARIANTS = ['neutral', 'outline'] as const;\nexport type BadgeVariant = (typeof BADGE_VARIANTS)[number];\n\nexport const BADGE_SIZES = ['md', 'sm'] as const;\nexport type BadgeSize = (typeof BADGE_SIZES)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center rounded-pill text-caption font-medium';\n\nconst SIZE_CLASSES: Record<BadgeSize, string> = {\n md: 'h-6 px-2.5',\n sm: 'h-[22px] px-2',\n};\n\nconst VARIANT_CLASSES: Record<BadgeVariant, string> = {\n neutral: 'bg-(--muted) text-(--foreground)',\n outline: 'shadow-[inset_0_0_0_1px_var(--border)] text-(--foreground)',\n};\n\n/**\n * Small status descriptor for counts, states or labels, such as an instrument's asset class.\n *\n * @example\n * <ui-badge>ETF</ui-badge>\n */\n@Component({\n selector: 'ui-badge',\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiBadge {\n readonly variant = input<BadgeVariant>('neutral');\n readonly size = input<BadgeSize>('md');\n\n protected readonly classes = computed(\n () => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${VARIANT_CLASSES[this.variant()]}`,\n );\n}\n","import { Component, DestroyRef, ElementRef, booleanAttribute, computed, inject, input } from '@angular/core';\n\n/** Available button variants. `ButtonVariant` is derived from this tuple. */\nexport const BUTTON_VARIANTS = [\n 'primary',\n 'outline',\n 'ghost',\n 'destructive',\n 'quiet',\n 'quiet-destructive',\n 'outline-destructive',\n 'quiet-glow',\n 'tonal',\n] as const;\nexport type ButtonVariant = (typeof BUTTON_VARIANTS)[number];\n\n/** Available button sizes. */\nexport const BUTTON_SIZES = [\n 'compact',\n 'slim',\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'xxl',\n 'tall',\n 'block',\n 'icon',\n 'icon-sm',\n] as const;\nexport type ButtonSize = (typeof BUTTON_SIZES)[number];\n\nconst BASE_CLASSES =\n 'relative inline-flex items-center justify-center rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,opacity] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-(--ring) disabled:pointer-events-none disabled:opacity-40 aria-disabled:not-aria-busy:opacity-40';\n\nconst RING_OUTSIDE = 'focus-visible:outline-offset-2';\nconst RING_INSIDE = 'focus-visible:-outline-offset-2';\nconst OUTLINE = 'bg-(--card) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow) active:bg-(--soft)';\n\nconst VARIANT_CLASSES: Record<ButtonVariant, string> = {\n primary: `${RING_OUTSIDE} bg-(--primary) text-(--primary-foreground) hover:bg-(--primary-to)`,\n outline: `${RING_OUTSIDE} ${OUTLINE} text-(--foreground)`,\n ghost: `${RING_OUTSIDE} bg-transparent text-(--foreground) hover:bg-(--glow) active:bg-(--soft)`,\n destructive: `${RING_OUTSIDE} bg-(--destructive) text-(--destructive-foreground)`,\n tonal: `${RING_OUTSIDE} bg-(--muted) text-(--foreground) lg:bg-transparent lg:hover:bg-(--glow)`,\n 'quiet-glow': `${RING_INSIDE} bg-transparent text-(--muted-foreground) hover:bg-(--glow) hover:text-(--foreground)`,\n quiet: `${RING_INSIDE} bg-transparent text-(--muted-foreground) hover:bg-(--soft) hover:text-(--foreground) active:bg-(--soft)`,\n 'quiet-destructive': `${RING_INSIDE} bg-transparent text-(--muted-foreground) hover:bg-(--glow) hover:text-(--negative) active:bg-(--soft)`,\n 'outline-destructive': `${RING_OUTSIDE} ${OUTLINE} text-(--negative)`,\n};\n\nconst SIZE_CLASSES: Record<ButtonSize, string> = {\n compact:\n 'h-8 lg:h-7 gap-1.5 px-2.5 lg:px-2 text-label before:absolute before:-inset-x-1 before:-inset-y-1.5 lg:before:hidden',\n slim: 'h-11 lg:h-8 gap-1.5 px-2.5 text-label',\n xs: 'h-8 gap-1.5 px-2.5 text-label',\n sm: 'h-9 gap-2 px-3 text-label',\n md: 'min-h-(--row-min) gap-2 px-4 text-label has-[>svg:first-child]:pl-3',\n lg: 'h-11 gap-2 px-[18px] text-label',\n xl: 'h-[50px] gap-2 px-6 text-body',\n xxl: 'h-[52px] lg:h-11 gap-2.5 px-6 lg:px-5 text-body lg:has-[>svg:first-child]:pl-4',\n tall: 'h-12 lg:h-10 gap-2 px-4 text-body',\n block: 'h-[50px] lg:h-11 gap-2 px-4 text-body',\n icon: 'size-(--row-min) gap-2 p-0',\n 'icon-sm': 'size-11 pointer-fine:size-9 gap-2 p-0',\n};\n\n/**\n * Styled native button or anchor, applied as an attribute so the host keeps every native behavior.\n *\n * @example\n * <button ui-button variant=\"destructive\">Delete</button>\n * <button ui-button size=\"icon\" variant=\"ghost\" aria-label=\"More actions\">...</button>\n */\n@Component({\n selector: 'button[ui-button], a[ui-button]',\n template: `\n @if (loading()) {\n <span\n aria-hidden=\"true\"\n class=\"rounded-pill size-4 border-2 border-current border-r-transparent motion-safe:animate-spin\"\n ></span>\n }\n <ng-content />\n `,\n host: {\n '[class]': 'classes()',\n '[attr.aria-busy]': 'inactive() || null',\n '[attr.aria-disabled]': 'inactive() || null',\n },\n})\nexport class UiButton {\n readonly variant = input<ButtonVariant>('primary');\n readonly size = input<ButtonSize>('md');\n readonly loading = input(false, { transform: booleanAttribute });\n readonly busy = input(false, { transform: booleanAttribute });\n\n protected readonly inactive = computed(() => this.loading() || this.busy());\n\n protected readonly classes = computed(\n () =>\n `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()]} ${SIZE_CLASSES[this.size()]}${this.inactive() ? ' pointer-events-none opacity-70' : ''}`,\n );\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const guard = (event: Event): void => {\n if (this.inactive()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n host.addEventListener('click', guard, { capture: true });\n inject(DestroyRef).onDestroy(() => host.removeEventListener('click', guard, { capture: true }));\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available card variants. `CardVariant` is derived from this tuple. */\nexport const CARD_VARIANTS = ['default', 'elevated'] as const;\nexport type CardVariant = (typeof CARD_VARIANTS)[number];\n\n/** Available card paddings. `CardPadding` is derived from this tuple. */\nexport const CARD_PADDINGS = ['none', 'sm', 'md', 'list', 'rows'] as const;\nexport type CardPadding = (typeof CARD_PADDINGS)[number];\n\n/** Where the card surface (fill, border, radius) and its padding apply. `CardSurface` is derived from this tuple. */\nexport const CARD_SURFACES = ['always', 'lg', 'max-lg'] as const;\nexport type CardSurface = (typeof CARD_SURFACES)[number];\n\nconst BASE_CLASSES = 'block';\n\nconst VARIANT_CLASSES: Record<CardVariant, Record<CardSurface, string>> = {\n default: {\n always: 'rounded-container bg-(--card) shadow-[inset_0_0_0_1px_var(--border)] text-(--card-foreground)',\n lg: 'lg:rounded-container lg:bg-(--card) lg:shadow-[inset_0_0_0_1px_var(--border)] lg:text-(--card-foreground)',\n 'max-lg':\n 'max-lg:rounded-container max-lg:bg-(--card) max-lg:shadow-[inset_0_0_0_1px_var(--border)] max-lg:text-(--card-foreground)',\n },\n elevated: {\n always: 'rounded-container bg-(--elevated) shadow-[inset_0_0_0_1px_var(--hairline)] text-(--foreground)',\n lg: 'lg:rounded-container lg:bg-(--elevated) lg:shadow-[inset_0_0_0_1px_var(--hairline)] lg:text-(--foreground)',\n 'max-lg':\n 'max-lg:rounded-container max-lg:bg-(--elevated) max-lg:shadow-[inset_0_0_0_1px_var(--hairline)] max-lg:text-(--foreground)',\n },\n};\n\nconst PADDING_CLASSES: Record<CardPadding, Record<CardSurface, string>> = {\n none: {\n always: 'p-0',\n lg: 'lg:p-0',\n 'max-lg': 'max-lg:p-0',\n },\n sm: {\n always: 'p-3',\n lg: 'lg:p-3',\n 'max-lg': 'max-lg:p-3',\n },\n md: {\n always: 'p-(--inset-card)',\n lg: 'lg:p-(--inset-card)',\n 'max-lg': 'max-lg:p-(--inset-card)',\n },\n list: {\n always: 'px-2 py-3',\n lg: 'lg:px-2 lg:py-3',\n 'max-lg': 'max-lg:px-2 max-lg:py-3',\n },\n rows: {\n always: 'px-(--inset-card) py-1',\n lg: 'lg:px-(--inset-card) lg:py-1',\n 'max-lg': 'max-lg:px-(--inset-card) max-lg:py-1',\n },\n};\n\n/**\n * Surface that groups related content: a summary block, a table, a side panel. `surface` limits the\n * fill, border, radius and padding to one side of `64rem`, for a block that is a card on a desktop and\n * plain on an iPhone, or the reverse.\n *\n * @example\n * <ui-card variant=\"elevated\" padding=\"sm\">Total</ui-card>\n * <ui-card surface=\"max-lg\">Card on an iPhone, plain on a desktop</ui-card>\n */\n@Component({\n selector: 'ui-card',\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiCard {\n readonly variant = input<CardVariant>('default');\n readonly padding = input<CardPadding>('md');\n readonly surface = input<CardSurface>('always');\n\n protected readonly classes = computed(\n () =>\n `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()][this.surface()]} ${PADDING_CLASSES[this.padding()][this.surface()]}`,\n );\n}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/**\n * The part of a validation error this library reads. Angular's own `ValidationError` satisfies it,\n * which is how a Signal Forms error reaches a field without this package depending on\n * `@angular/forms`.\n */\nexport type UiControlError = { readonly message?: string };\n\n/** What a styled control offers the field wrapped around it. */\nexport type UiControl = {\n readonly errors: Signal<readonly UiControlError[]>;\n readonly touched: Signal<boolean>;\n};\n\n/**\n * Resolves to the styled control projected into a field.\n *\n * Angular's `[formField]` directive fills any input named `errors` or `touched` on the directives\n * sitting on its host element, so a control declaring them receives its own validation state with\n * nothing written at the call site. This token is how the field finds whichever control was\n * projected into it.\n */\nexport const UI_CONTROL = new InjectionToken<UiControl>('UI_CONTROL');\n","import { Directive, computed, forwardRef, input } from '@angular/core';\n\nimport { UI_CONTROL, type UiControl, type UiControlError } from '../control/control';\n\n/** Available control sizes. `md` is the 44/40px touch target; `lg` and `xl` are the 48px sheet and sign-in fields. */\nexport const CONTROL_SIZES = ['sm', 'md', 'lg', 'xl'] as const;\nexport type ControlSize = (typeof CONTROL_SIZES)[number];\n\nexport const CONTROL_BASE_CLASSES =\n 'w-full rounded-control px-3 text-body text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] transition-shadow duration-(--duration-fast) ease-out placeholder:text-(--muted-foreground) focus-visible:shadow-[inset_0_0_0_2px_var(--ring)] aria-invalid:shadow-[inset_0_0_0_2px_var(--negative)] disabled:cursor-not-allowed disabled:opacity-50';\n\nexport const CONTROL_SURFACES = ['background', 'card'] as const;\nexport type ControlSurface = (typeof CONTROL_SURFACES)[number];\n\nexport const CONTROL_SURFACE_CLASSES: Record<ControlSurface, string> = {\n background: 'bg-(--background)',\n card: 'bg-(--card)',\n};\n\nexport const CONTROL_SIZE_CLASSES: Record<ControlSize, string> = {\n sm: 'h-9',\n md: 'min-h-(--row-min)',\n lg: 'min-h-12 lg:min-h-(--row-min)',\n xl: 'h-12 lg:h-11',\n};\n\nconst SEARCH_CLASSES = '[&::-webkit-search-cancel-button]:appearance-none';\n\n/**\n * Styled native text input. A directive (not a wrapper component) so the host\n * stays a plain <input>: every forms flavor (ngModel, reactive, signal forms)\n * and every native attribute keep working without any plumbing.\n *\n * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around\n * it can show the message without any binding here.\n *\n * @example\n * <input uiInput type=\"email\" placeholder=\"you@example.com\" />\n */\n@Directive({\n selector: 'input[uiInput]',\n host: {\n '[class]': 'classes()',\n },\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiInput) }],\n})\nexport class UiInput implements UiControl {\n readonly size = input<ControlSize>('md');\n readonly surface = input<ControlSurface>('background');\n readonly errors = input<readonly UiControlError[]>([]);\n readonly touched = input(false);\n\n protected readonly classes = computed(\n () =>\n `${CONTROL_BASE_CLASSES} ${SEARCH_CLASSES} ${CONTROL_SURFACE_CLASSES[this.surface()]} ${CONTROL_SIZE_CLASSES[this.size()]}`,\n );\n}\n\n/**\n * Styled native textarea. Lives beside the input because it shares every one of its\n * classes; it takes no size, since a textarea grows from a floor instead of sitting\n * at a fixed height.\n *\n * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around\n * it can show the message without any binding here.\n *\n * @example\n * <textarea uiTextarea maxlength=\"280\"></textarea>\n */\n@Directive({\n selector: 'textarea[uiTextarea]',\n host: {\n class: `${CONTROL_BASE_CLASSES} bg-(--background) min-h-24 py-2`,\n },\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiTextarea) }],\n})\nexport class UiTextarea implements UiControl {\n readonly errors = input<readonly UiControlError[]>([]);\n readonly touched = input(false);\n}\n","import {\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n viewChildren,\n} from '@angular/core';\n\nimport { UI_CONTROL, type UiControl, type UiControlError } from '../control/control';\nimport { CONTROL_SURFACE_CLASSES, type ControlSurface } from '../input/input';\n\nexport type ChoiceChipOption = {\n value: string;\n label: string;\n};\n\nconst CHIP_CLASSES =\n 'h-10 px-3.5 pointer-fine:h-8 pointer-fine:px-3 rounded-pill text-label font-medium cursor-pointer transition-transform duration-(--duration-press) ease-out active:scale-(--press-scale) disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)';\n\nconst SELECTED_CLASSES = 'bg-(--primary) text-(--primary-foreground)';\n\nconst UNSELECTED_CLASSES = 'text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)]';\n\nconst nextId = (() => {\n let count = 0;\n\n return (): string => `ui-choice-chips-${++count}`;\n})();\n\n/**\n * Exclusive choice among a handful of named options, shown as wrapping pills: an account envelope,\n * a category, a frequency. Binds to Signal Forms with `[formField]`.\n *\n * @example\n * <ui-choice-chips label=\"Envelope\" [options]=\"envelopes\" [(value)]=\"envelope\" />\n *\n * @example\n * <ui-choice-chips label=\"Envelope\" [options]=\"envelopes\" [formField]=\"form.envelope\" />\n */\n@Component({\n selector: 'ui-choice-chips',\n template: `\n <div\n class=\"flex flex-col gap-1.5\"\n role=\"radiogroup\"\n [attr.aria-invalid]=\"invalid() || null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-required]=\"required() || null\"\n (focusout)=\"onFocusOut($event)\"\n >\n @if (label()) {\n <span class=\"text-label leading-[17px] font-medium text-(--muted-foreground)\" [id]=\"labelId\">{{\n label()\n }}</span>\n }\n\n <div class=\"flex flex-wrap gap-1.5\">\n @for (option of options(); track option.value; let index = $index) {\n <button\n #radio\n role=\"radio\"\n type=\"button\"\n [attr.aria-checked]=\"option.value === value()\"\n [attr.tabindex]=\"tabIndexFor(option.value)\"\n [class]=\"chipClasses(option.value)\"\n [disabled]=\"disabled()\"\n (click)=\"select(option.value)\"\n (keydown)=\"onKeydown($event, index)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n `,\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiChoiceChips) }],\n})\nexport class UiChoiceChips implements UiControl {\n readonly options = input.required<ChoiceChipOption[]>();\n readonly value = model.required<string>();\n readonly label = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n readonly surface = input<ControlSurface>('background');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly errors = input<readonly UiControlError[]>([]);\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly touched = input(false);\n readonly touch = output<void>();\n\n protected readonly labelId = nextId();\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly radios = viewChildren<ElementRef<HTMLButtonElement>>('radio');\n\n protected readonly labelledBy = computed(() => this.ariaLabelledby() ?? (this.label() ? this.labelId : null));\n\n protected chipClasses(optionValue: string): string {\n const state =\n optionValue === this.value()\n ? SELECTED_CLASSES\n : `${CONTROL_SURFACE_CLASSES[this.surface()]} ${UNSELECTED_CLASSES}`;\n\n return `${CHIP_CLASSES} ${state}`;\n }\n\n protected tabIndexFor(optionValue: string): number {\n const opts = this.options();\n const tabStopValue = opts.some((option) => option.value === this.value()) ? this.value() : opts[0]?.value;\n\n return optionValue === tabStopValue ? 0 : -1;\n }\n\n protected select(optionValue: string): void {\n this.value.set(optionValue);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n if (!this.#host.nativeElement.contains(event.relatedTarget as Node | null)) {\n this.touch.emit();\n }\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const opts = this.options();\n const target = {\n ArrowRight: index + 1,\n ArrowDown: index + 1,\n ArrowLeft: index - 1,\n ArrowUp: index - 1,\n Home: 0,\n End: opts.length - 1,\n }[event.key];\n\n if (target === undefined) {\n return;\n }\n event.preventDefault();\n\n const nextIndex = ((target % opts.length) + opts.length) % opts.length;\n\n this.value.set(opts[nextIndex]!.value);\n this.radios()[nextIndex]!.nativeElement.focus();\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available delta emphases. `DeltaEmphasis` is derived from this tuple. */\nexport const DELTA_EMPHASES = ['text', 'pill'] as const;\nexport type DeltaEmphasis = (typeof DELTA_EMPHASES)[number];\n\n/** Type sizes. `DeltaSize` is derived from this tuple. */\nexport const DELTA_SIZES = ['label', 'inherit'] as const;\nexport type DeltaSize = (typeof DELTA_SIZES)[number];\n\n/** Font weights. `DeltaWeight` is derived from this tuple. */\nexport const DELTA_WEIGHTS = ['medium', 'regular'] as const;\nexport type DeltaWeight = (typeof DELTA_WEIGHTS)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center gap-1 tabular-nums';\n\nconst SIZE_CLASSES: Record<DeltaSize, string> = {\n label: 'text-label',\n inherit: '',\n};\n\nconst WEIGHT_CLASSES: Record<DeltaWeight, string> = {\n medium: 'font-medium',\n regular: 'font-normal',\n};\n\nconst PILL_CLASSES = 'h-6 rounded-pill px-2';\n\ntype Sign = 'positive' | 'negative' | 'neutral' | 'unknown';\n\nconst TEXT_CLASSES: Record<Sign, string> = {\n positive: 'text-(--positive)',\n negative: 'text-(--negative)',\n neutral: 'text-(--muted-foreground)',\n unknown: 'text-(--subtle-foreground)',\n};\n\nconst PILL_BACKGROUND_CLASS = 'bg-(--soft)';\n\n/**\n * Signed amount whose sign carries meaning: a gain, a loss, or an unknown.\n *\n * A null value is not a zero: a holding with no cost basis exists, and showing 0 would falsely\n * claim a known gain of zero. Color never carries the sign on its own: the projected text must\n * already contain a + or a minus sign.\n *\n * @example\n * <ui-delta [value]=\"holding.dayChangeEur\" unknownLabel=\"Not available\">\n * {{ holding.dayChangeEur | signedMoney }}\n * </ui-delta>\n */\n@Component({\n selector: 'ui-delta',\n template: `\n @if (sign() === 'unknown') {\n <span aria-hidden=\"true\">&mdash;</span>\n <span class=\"sr-only\">{{ unknownLabel() }}</span>\n } @else {\n <ng-content />\n }\n `,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiDelta {\n readonly value = input.required<number | null | undefined>();\n readonly unknownLabel = input.required<string>();\n readonly emphasis = input<DeltaEmphasis>('text');\n readonly size = input<DeltaSize>('label');\n readonly weight = input<DeltaWeight>('medium');\n\n protected readonly sign = computed<Sign>(() => {\n const value = this.value();\n\n if (value === null || value === undefined) {\n return 'unknown';\n }\n if (value > 0) {\n return 'positive';\n }\n if (value < 0) {\n return 'negative';\n }\n return 'neutral';\n });\n\n protected readonly classes = computed(() => {\n const sign = this.sign();\n const background = this.emphasis() === 'pill' ? `${PILL_CLASSES} ${PILL_BACKGROUND_CLASS}` : 'bg-transparent';\n\n return `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${WEIGHT_CLASSES[this.weight()]} ${TEXT_CLASSES[sign]} ${background}`;\n });\n}\n","import {\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\n/** Named dialog widths; any other CSS length is accepted as is. `DialogWidth` is derived from this tuple. */\nexport const DIALOG_WIDTHS = ['md', 'lg'] as const;\nexport type DialogWidth = (typeof DIALOG_WIDTHS)[number];\n\nconst WIDTH_VALUES: Record<DialogWidth, string> = {\n md: '28rem',\n lg: '560px',\n};\n\n/** Spacing presets. `DialogLayout` is derived from this tuple. */\nexport const DIALOG_LAYOUTS = ['trade', 'form', 'list', 'confirm'] as const;\nexport type DialogLayout = (typeof DIALOG_LAYOUTS)[number];\n\ntype LayoutClasses = {\n dialog: string;\n header: string;\n title: string;\n cross: string;\n icon: string;\n handle: string;\n body: string;\n footer: string;\n};\n\nconst LAYOUTS: Record<DialogLayout, LayoutClasses> = {\n trade: {\n dialog: '',\n header: 'items-start lg:pt-6',\n title: 'pt-1 lg:pt-0',\n cross: 'lg:-mt-1.5',\n icon: 'lg:size-5',\n handle: 'pt-[7.5px]',\n body: 'pt-3 pb-4 lg:pt-5 lg:pb-5',\n footer: 'max-lg:pb-[calc(8px+env(safe-area-inset-bottom))] lg:pb-6',\n },\n form: {\n dialog: '',\n header: 'items-center lg:pt-6',\n title: '',\n cross: '',\n icon: 'lg:size-[22px]',\n handle: 'pt-[7.5px]',\n body: 'pt-2 pb-5 lg:pt-4 lg:pb-5',\n footer: 'max-lg:pb-[calc(12px+env(safe-area-inset-bottom))] lg:pb-5',\n },\n list: {\n dialog: 'max-lg:h-[calc(100dvh-58px)] lg:mt-24 lg:mb-auto lg:max-h-[min(760px,calc(100dvh-96px-32px))]',\n header: 'items-center lg:pt-5',\n title: '',\n cross: '',\n icon: 'lg:size-[22px]',\n handle: 'pt-[7.5px]',\n body: 'pt-2 pb-4 lg:pt-4 lg:pb-5',\n footer: 'pt-3 shadow-[0_-1px_0_var(--hairline)] max-lg:pb-[calc(8px+env(safe-area-inset-bottom))] lg:pt-4 lg:pb-4',\n },\n confirm: {\n dialog: '',\n header: 'items-center pt-3 lg:pt-6',\n title: '',\n cross: '',\n icon: 'lg:size-[22px]',\n handle: 'pt-[11.5px]',\n body: 'pt-3 pb-5 lg:pt-3 lg:pb-6',\n footer: 'max-lg:pb-[calc(8px+env(safe-area-inset-bottom))] lg:pb-6',\n },\n};\n\nconst nextId = (() => {\n let count = 0;\n\n return () => `ui-dialog-${++count}`;\n})();\n\n/**\n * Modal dialog on the native <dialog>: a bottom sheet under `64rem`, centered above it.\n *\n * @example\n * <ui-dialog heading=\"Buy\" description=\"Ferrari\" closeLabel=\"Close\" width=\"528px\" [open]=\"buying()\" (dismissed)=\"buying.set(false)\">\n * <p>Body</p>\n * <button dialogActions ui-button variant=\"outline\" class=\"max-lg:hidden\" (click)=\"buying.set(false)\">Cancel</button>\n * <button dialogActions ui-button>Buy 40 shares</button>\n * </ui-dialog>\n */\n@Component({\n selector: 'ui-dialog',\n host: { '(pointerdown)': 'onPointerDown($event)', '(click)': 'onClick($event)' },\n template: `\n <dialog\n #dlg\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-labelledby]=\"headingId\"\n [attr.role]=\"layout() === 'confirm' ? 'alertdialog' : 'dialog'\"\n [class]=\"classes()\"\n [style.--dialog-width]=\"widthValue()\"\n (close)=\"onNativeClose()\"\n >\n <div aria-hidden=\"true\" class=\"flex h-5 justify-center lg:hidden\" data-dialog-handle [class]=\"spec().handle\">\n <span class=\"rounded-pill h-[5px] w-9 bg-(--border)\"></span>\n </div>\n\n <div data-dialog-header [class]=\"headerClasses()\">\n <div class=\"flex min-w-0 flex-1 flex-col\" [class]=\"titleClasses()\">\n <h2 class=\"text-title font-semibold\" [id]=\"headingId\">{{ heading() }}</h2>\n\n @if (description()) {\n <p\n class=\"text-label text-(--muted-foreground)\"\n [class.truncate]=\"truncateDescription()\"\n [id]=\"descriptionId\"\n >\n {{ description() }}\n </p>\n }\n </div>\n\n @if (closeLabel()) {\n <button type=\"button\" [attr.aria-label]=\"closeLabel()\" [class]=\"crossClasses()\" (click)=\"dlg.close()\">\n <svg\n aria-hidden=\"true\"\n class=\"block size-[22px] fill-none stroke-current stroke-[1.75]\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n [class]=\"iconClasses()\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n </div>\n\n <div\n class=\"min-h-0 flex-1 overflow-y-auto px-4 outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) lg:px-6\"\n data-dialog-body\n [attr.aria-labelledby]=\"scrollable() ? headingId : null\"\n [attr.role]=\"scrollable() ? 'region' : null\"\n [attr.tabindex]=\"scrollable() ? 0 : null\"\n [id]=\"bodyId\"\n >\n <!-- empty:hidden keeps a body-less dialog from carrying the body's vertical padding. -->\n <div class=\"flex flex-col gap-4 empty:hidden\" [class]=\"spec().body\">\n <ng-content />\n </div>\n </div>\n\n <div data-dialog-footer [class]=\"footerClasses()\">\n <ng-content select=\"[dialogActions]\" />\n </div>\n </dialog>\n `,\n styles: `\n dialog {\n --dialog-ease: var(--ease-sheet);\n transition:\n opacity var(--duration-base) var(--dialog-ease),\n transform var(--duration-base) var(--dialog-ease),\n overlay var(--duration-base) allow-discrete,\n display var(--duration-base) allow-discrete;\n opacity: 1;\n transform: translateY(0);\n }\n\n dialog:not([open]) {\n opacity: 0;\n transform: translateY(100%);\n transition-duration: var(--duration-exit);\n }\n\n @starting-style {\n dialog[open] {\n opacity: 0;\n transform: translateY(100%);\n }\n }\n\n @media (min-width: 64rem) {\n dialog {\n --dialog-ease: var(--ease-out);\n transform: scale(1);\n }\n\n dialog:not([open]) {\n transform: scale(var(--enter-scale));\n }\n\n @starting-style {\n dialog[open] {\n transform: scale(var(--enter-scale));\n }\n }\n }\n\n dialog::backdrop {\n transition: opacity var(--duration-base) var(--ease-out);\n opacity: 1;\n }\n\n dialog:not([open])::backdrop {\n opacity: 0;\n transition-duration: var(--duration-exit);\n }\n\n @starting-style {\n dialog[open]::backdrop {\n opacity: 0;\n }\n }\n `,\n})\nexport class UiDialog {\n readonly heading = input.required<string>();\n readonly description = input<string>();\n readonly closeLabel = input<string>();\n readonly layout = input<DialogLayout>('trade');\n readonly truncateDescription = input(false, { transform: booleanAttribute });\n readonly width = input<DialogWidth | (string & {})>('lg');\n readonly open = input(false, { transform: booleanAttribute });\n readonly dismissed = output<void>();\n\n protected readonly headingId = nextId();\n protected readonly descriptionId = `${this.headingId}-description`;\n protected readonly bodyId = `${this.headingId}-body`;\n protected readonly scrollable = signal(false);\n\n protected readonly describedBy = computed(() => {\n if (this.description()) {\n return this.descriptionId;\n }\n\n return this.layout() === 'confirm' ? this.bodyId : null;\n });\n\n protected readonly widthValue = computed(() => {\n const width = this.width();\n\n return Object.hasOwn(WIDTH_VALUES, width) ? WIDTH_VALUES[width as DialogWidth] : width;\n });\n\n protected readonly spec = computed(() => LAYOUTS[this.layout()]);\n\n protected readonly headerClasses = computed(\n () =>\n `flex gap-2 pl-4 lg:gap-3 lg:pl-6 ${this.spec().header} ${this.closeLabel() ? 'pr-2 lg:pr-4' : 'pr-4 lg:pr-6'}`,\n );\n\n protected readonly titleClasses = computed(() => this.spec().title);\n\n protected readonly crossClasses = computed(\n () =>\n `rounded-pill lg:rounded-control grid size-11 flex-none cursor-pointer place-items-center text-(--muted-foreground) transition-[transform,background-color,color] duration-(--duration-press) ease-out outline-none focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-(--ring) active:scale-(--press-scale) active:bg-(--soft) lg:size-9 lg:hover:bg-(--glow) lg:hover:text-(--foreground) ${this.spec().cross}`,\n );\n\n protected readonly iconClasses = computed(() => this.spec().icon);\n\n protected readonly footerClasses = computed(\n () =>\n `max-lg:[&>[ui-button]]:text-body flex justify-end gap-2 px-4 empty:hidden max-lg:flex-col-reverse max-lg:[&>[ui-button]]:h-[50px] max-lg:[&>[ui-button]]:w-full lg:px-6 ${this.spec().footer}`,\n );\n\n protected readonly classes = computed(\n () =>\n `open:flex w-full flex-col overflow-hidden m-auto mt-auto max-h-[calc(100dvh-2rem)] max-lg:mb-0 max-lg:max-w-none max-lg:rounded-b-none lg:max-w-(--dialog-width) rounded-container bg-(--card) text-(--foreground) shadow-[0_0_0_1px_var(--border),0_24px_64px_rgb(0_0_0/0.24)] max-lg:shadow-[0_-1px_0_var(--border),0_-12px_32px_rgb(0_0_0/0.16)] backdrop:bg-black/[0.36] ${this.spec().dialog}`,\n );\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const body = this.#host.nativeElement.querySelector('[data-dialog-body]') as HTMLElement;\n const observer = new ResizeObserver(() => this.scrollable.set(body.scrollHeight > body.clientHeight));\n\n observer.observe(body);\n observer.observe(body.firstElementChild as Element);\n destroyRef.onDestroy(() => observer.disconnect());\n });\n\n afterRenderEffect(() => {\n // viewChild.required can't target a #private field (NG1053); safe because the template has exactly one <dialog>.\n const dialog = this.#host.nativeElement.querySelector('dialog') as HTMLDialogElement;\n\n if (this.open() && !dialog.open) {\n dialog.showModal();\n } else if (!this.open() && dialog.open) {\n dialog.close();\n }\n });\n }\n\n #pressedOnBackdrop = false;\n\n protected onPointerDown(event: MouseEvent): void {\n this.#pressedOnBackdrop = event.target === this.#dialog && this.#outside(event);\n }\n\n protected onClick(event: MouseEvent): void {\n if (this.#pressedOnBackdrop && event.target === this.#dialog && this.#outside(event)) {\n this.#dialog.close();\n }\n this.#pressedOnBackdrop = false;\n }\n\n get #dialog(): HTMLDialogElement {\n return this.#host.nativeElement.querySelector('dialog') as HTMLDialogElement;\n }\n\n #outside(event: MouseEvent): boolean {\n const rect = this.#dialog.getBoundingClientRect();\n\n return (\n event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom\n );\n }\n\n protected onNativeClose(): void {\n // The owner already knows about a close it asked for; only a close it did not ask for is news.\n if (this.open()) {\n this.dismissed.emit();\n }\n }\n}\n","import type { RankedSlice } from './donut-slices';\n\nexport type PositionedSlice = RankedSlice & { dash: string; offset: string };\n\nexport const RADIUS = 78;\nexport const RING_WIDTH = 30;\nexport const ACTIVE_RING_WIDTH = 38;\nexport const CIRCUMFERENCE = 2 * Math.PI * RADIUS;\n\nconst GAP = 2;\n\nexport function positionSlices(slices: RankedSlice[]): PositionedSlice[] {\n let travelled = 0;\n\n return slices.map((slice) => {\n const length = slice.share * CIRCUMFERENCE;\n const drawn = Math.max(0, length - GAP);\n const positioned = {\n ...slice,\n dash: `${drawn.toFixed(2)} ${(CIRCUMFERENCE - drawn).toFixed(2)}`,\n offset: (-travelled).toFixed(2),\n };\n travelled += length;\n\n return positioned;\n });\n}\n","export type DonutSlice = {\n id: string;\n label: string;\n value: number;\n sublabel?: string;\n};\n\nexport type Ramp = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type SharedSlice = DonutSlice & { share: number };\n\nexport type RankedSlice = DonutSlice & { share: number; ramp: Ramp; members: string[] };\n\nconst MAX_RAMP = 6;\nconst OTHERS_ID = 'others';\n\nexport function shareSlices(slices: DonutSlice[]): SharedSlice[] {\n const positive = slices.filter((slice) => slice.value > 0).sort((a, b) => b.value - a.value);\n const total = positive.reduce((sum, slice) => sum + slice.value, 0);\n\n return positive.map((slice) => ({ ...slice, share: slice.value / total }));\n}\n\nexport function rankSlices(slices: DonutSlice[], othersLabel: string): RankedSlice[] {\n const shared = shareSlices(slices);\n\n const toRanked = (slice: SharedSlice, ramp: Ramp, members: string[] = []): RankedSlice => ({\n ...slice,\n ramp,\n members,\n });\n\n if (shared.length <= MAX_RAMP) {\n return shared.map((slice, index) => toRanked(slice, (index + 1) as Ramp));\n }\n\n const kept = shared.slice(0, MAX_RAMP - 1);\n const rest = shared.slice(MAX_RAMP - 1);\n const othersValue = rest.reduce((sum, slice) => sum + slice.value, 0);\n const othersShare = rest.reduce((sum, slice) => sum + slice.share, 0);\n\n return [\n ...kept.map((slice, index) => toRanked(slice, (index + 1) as Ramp)),\n toRanked(\n { id: OTHERS_ID, label: othersLabel, value: othersValue, share: othersShare },\n MAX_RAMP,\n rest.map((slice) => slice.label),\n ),\n ];\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, output, signal } from '@angular/core';\n\nimport { ACTIVE_RING_WIDTH, RADIUS, RING_WIDTH, positionSlices } from './internal/donut-geometry';\nimport { type DonutSlice, type Ramp, type RankedSlice, rankSlices, shareSlices } from './internal/donut-slices';\n\nexport type { DonutSlice };\n\nconst identityValue = (value: number): string => `${value}`;\nconst identityShare = (share: number): string => `${Math.round(share * 100)}%`;\n\nconst ROW_CLASSES =\n 'flex w-full items-center gap-3 min-h-14 px-2 py-1 [font-variant-numeric:var(--numeric)] rounded-control text-left transition-colors duration-(--duration-fast) ease-out hover:bg-(--glow) active:bg-(--soft) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst RAMP_DOT_CLASSES: Record<Ramp, string> = {\n 1: 'bg-(--ramp-1)',\n 2: 'bg-(--ramp-2)',\n 3: 'bg-(--ramp-3)',\n 4: 'bg-(--ramp-4)',\n 5: 'bg-(--ramp-5)',\n 6: 'bg-(--ramp-6)',\n};\n\n/**\n * A ring chart with a legend: slices rank from largest to smallest on a grey ramp, and hovering,\n * focusing or activating a legend row highlights its slice and centres it in the ring.\n *\n * @example\n * <ui-donut [slices]=\"byAssetClass()\" label=\"Par classe d'actif\" othersLabel=\"Autres\" [valueFormat]=\"formatEur\" [shareFormat]=\"formatShare\" (sliceSelect)=\"goToHoldings($event)\" />\n */\n@Component({\n selector: 'ui-donut',\n template: `\n <div class=\"relative size-[232px] flex-none sm:size-60\">\n <svg class=\"block h-full w-full -rotate-90\" role=\"img\" viewBox=\"0 0 200 200\" [attr.aria-label]=\"ariaLabel()\">\n <circle\n class=\"stroke-(--muted)\"\n cx=\"100\"\n cy=\"100\"\n fill=\"none\"\n [attr.r]=\"radius\"\n [attr.stroke-width]=\"ringWidth\"\n />\n @for (slice of positioned(); track slice.id) {\n <circle\n class=\"cursor-pointer transition-[stroke-width] duration-(--duration-fast) ease-out\"\n cx=\"100\"\n cy=\"100\"\n data-slice\n fill=\"none\"\n [attr.r]=\"radius\"\n [attr.stroke-dasharray]=\"slice.dash\"\n [attr.stroke-dashoffset]=\"slice.offset\"\n [style.stroke]=\"strokeColor(slice)\"\n [style.stroke-width.px]=\"strokeWidth(slice)\"\n (click)=\"select(slice)\"\n (pointerenter)=\"highlight(slice.id)\"\n (pointerleave)=\"clearHighlight(slice.id)\"\n />\n }\n </svg>\n\n @if (active(); as slice) {\n <div\n class=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center px-12 text-center\"\n data-testid=\"donut-centre\"\n >\n <span class=\"text-label max-w-full truncate font-medium whitespace-nowrap text-(--muted-foreground)\">{{\n slice.label\n }}</span>\n <span class=\"text-heading font-semibold tracking-(--tracking-display)\">{{ shareFormat()(slice.share) }}</span>\n <span class=\"text-caption tracking-normal text-(--muted-foreground) [font-variant-numeric:var(--numeric)]\">{{\n valueFormat()(slice.value)\n }}</span>\n </div>\n }\n </div>\n\n <div class=\"flex w-full min-w-0 flex-1 flex-col sm:w-auto\" data-testid=\"donut-legend\">\n @for (slice of ranked(); track slice.id) {\n @if (hrefFor(slice.id); as href) {\n <a\n [attr.href]=\"href\"\n [class]=\"rowClasses(slice)\"\n (blur)=\"clearHighlight(slice.id)\"\n (click)=\"follow($event, slice)\"\n (focus)=\"highlight(slice.id)\"\n (pointerenter)=\"highlight(slice.id)\"\n (pointerleave)=\"clearHighlight(slice.id)\"\n >\n <ng-container *ngTemplateOutlet=\"rowContent; context: { $implicit: slice }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"rowClasses(slice)\"\n (blur)=\"clearHighlight(slice.id)\"\n (click)=\"select(slice)\"\n (focus)=\"highlight(slice.id)\"\n (pointerenter)=\"highlight(slice.id)\"\n (pointerleave)=\"clearHighlight(slice.id)\"\n >\n <ng-container *ngTemplateOutlet=\"rowContent; context: { $implicit: slice }\" />\n </button>\n }\n }\n </div>\n\n <ng-template #rowContent let-slice>\n <span [class]=\"dotClasses(slice)\"></span>\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"text-body truncate font-medium\">{{ slice.label }}</span>\n <span class=\"text-caption truncate tracking-(--tracking-caption) text-(--subtle-foreground)\">{{\n subLabel(slice)\n }}</span>\n </span>\n <span class=\"flex flex-none flex-col items-end whitespace-nowrap\">\n <span class=\"text-body font-medium\">{{ shareFormat()(slice.share) }}</span>\n <span class=\"text-caption tracking-normal text-(--muted-foreground)\">{{ valueFormat()(slice.value) }}</span>\n </span>\n </ng-template>\n `,\n imports: [NgTemplateOutlet],\n host: {\n class: 'flex flex-col items-center gap-3 sm:flex-row sm:items-center sm:gap-8',\n },\n})\nexport class UiDonut {\n readonly slices = input.required<DonutSlice[]>();\n readonly label = input.required<string>();\n readonly othersLabel = input.required<string>();\n readonly valueFormat = input<(value: number) => string>(identityValue);\n readonly shareFormat = input<(share: number) => string>(identityShare);\n\n readonly legendHref = input<((id: string) => string | null) | undefined>();\n\n readonly sliceSelect = output<DonutSlice['id']>();\n\n protected readonly activeId = signal<string | null>(null);\n\n protected readonly ranked = computed(() => rankSlices(this.slices(), this.othersLabel()));\n protected readonly positioned = computed(() => positionSlices(this.ranked()));\n\n protected readonly active = computed<RankedSlice | null>(() => {\n const ranked = this.ranked();\n const id = this.activeId();\n\n return ranked.find((slice) => slice.id === id) ?? ranked[0] ?? null;\n });\n\n protected readonly ariaLabel = computed(() => {\n const detail = shareSlices(this.slices())\n .map((slice) => `${slice.label} ${this.shareFormat()(slice.share)}`)\n .join(', ');\n\n return detail ? `${this.label()} : ${detail}` : this.label();\n });\n\n protected readonly radius = RADIUS;\n protected readonly ringWidth = RING_WIDTH;\n\n protected strokeColor(slice: RankedSlice): string {\n return `var(--ramp-${slice.ramp})`;\n }\n\n protected strokeWidth(slice: RankedSlice): number {\n return this.isActive(slice) ? ACTIVE_RING_WIDTH : RING_WIDTH;\n }\n\n protected dotClasses(slice: RankedSlice): string {\n return `size-3 flex-none rounded-pill shadow-[inset_0_0_0_1px_var(--border)] ${RAMP_DOT_CLASSES[slice.ramp]}`;\n }\n\n protected rowClasses(slice: RankedSlice): string {\n return `${ROW_CLASSES}${this.isActive(slice) ? ' bg-(--soft)' : ''}`;\n }\n\n protected subLabel(slice: RankedSlice): string {\n return slice.members.length > 0 ? slice.members.join(', ') : (slice.sublabel ?? '');\n }\n\n protected isActive(slice: RankedSlice): boolean {\n return this.active()?.id === slice.id;\n }\n\n protected highlight(id: string): void {\n this.activeId.set(id);\n }\n\n protected clearHighlight(id: string): void {\n if (this.activeId() === id) {\n this.activeId.set(null);\n }\n }\n\n protected hrefFor(id: string): string | null {\n return this.legendHref()?.(id) ?? null;\n }\n\n protected follow(event: MouseEvent, slice: RankedSlice): void {\n if (event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n event.preventDefault();\n this.select(slice);\n }\n\n protected select(slice: RankedSlice): void {\n this.activeId.set(slice.id);\n this.sliceSelect.emit(slice.id);\n }\n}\n","import { Component } from '@angular/core';\n\n/**\n * Link to another site: the label followed by an external-link icon. A 44px target on touch,\n * an underline on hover with a mouse.\n *\n * @example\n * <a ui-external-link href=\"https://example.com\" target=\"_blank\" rel=\"noopener\">Page on example.com</a>\n */\n@Component({\n selector: 'a[ui-external-link]',\n template: `\n <ng-content />\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"14\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n >\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n `,\n host: {\n class:\n 'inline-flex min-h-11 items-center gap-1.5 rounded-[4px] text-label leading-[17px] font-medium lg:min-h-0 hover:underline underline-offset-3 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) [&>svg]:flex-none',\n },\n})\nexport class UiExternalLink {}\n","import { Component, Directive, booleanAttribute, computed, input } from '@angular/core';\n\n/** Available fact row sizes. `FactSize` is derived from this tuple. */\nexport const FACT_SIZES = ['md', 'sm', 'auto'] as const;\nexport type FactSize = (typeof FACT_SIZES)[number];\n\n/** Colour of the line under a fact value. `stale` flags an out-of-date figure. */\nexport const FACT_SUB_TONES = ['subtle', 'stale'] as const;\nexport type FactSubTone = (typeof FACT_SUB_TONES)[number];\n\nconst SIZE_CLASSES: Record<FactSize, { row: string; value: string }> = {\n md: { row: 'py-3 [&:not(:first-child)]:shadow-[inset_0_1px_0_var(--hairline)]', value: 'text-body' },\n sm: { row: 'py-2.5', value: 'text-label' },\n auto: {\n row: 'py-3 lg:py-2.5 max-lg:[&:not(:first-child)]:shadow-[inset_0_1px_0_var(--hairline)]',\n value: 'text-body lg:text-label',\n },\n};\n\nconst SUB_TONE_CLASSES: Record<FactSubTone, string> = {\n subtle: 'text-(--subtle-foreground)',\n stale: 'text-(--stale)',\n};\n\n/**\n * The list that holds `div[ui-fact]` rows, as a native description list.\n *\n * @example\n * <dl uiFacts>\n * <div ui-fact label=\"Quantity\">500</div>\n * <div ui-fact label=\"Price\" sub=\"24/09 · Yahoo\">28,64 €</div>\n * </dl>\n */\n@Directive({\n selector: 'dl[uiFacts]',\n host: { '[class]': 'classes()' },\n})\nexport class UiFacts {\n readonly ruled = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(\n () => `m-0 flex flex-col${this.ruled() ? ' shadow-[inset_0_1px_0_var(--hairline)]' : ''}`,\n );\n}\n\n/**\n * One fact of a `dl[uiFacts]`: a label on the left, its value on the right, an optional sub-line\n * under the value, and a hairline above every row but the first at the `md` size (the `sm` desktop list is separated by space only). The projected content is the value.\n *\n * @example\n * <div ui-fact label=\"Price\" sub=\"24/09 · Yahoo\" subTone=\"stale\">28,64 €</div>\n */\n@Component({\n selector: 'div[ui-fact]',\n template: `\n <dt class=\"text-label text-(--muted-foreground)\">{{ label() }}</dt>\n <dd class=\"m-0 flex flex-col items-end text-right\">\n <span [class]=\"valueClasses()\"><ng-content /></span>\n @if (sub()) {\n <span [class]=\"subClasses()\">{{ sub() }}</span>\n }\n </dd>\n `,\n host: { '[class]': 'classes()' },\n})\nexport class UiFact {\n readonly label = input.required<string>();\n readonly sub = input<string>();\n readonly subTone = input<FactSubTone>('subtle');\n readonly size = input<FactSize>('md');\n\n protected readonly classes = computed(\n () => `flex items-baseline justify-between gap-4 ${SIZE_CLASSES[this.size()].row}`,\n );\n protected readonly valueClasses = computed(() => `${SIZE_CLASSES[this.size()].value} tabular-nums`);\n protected readonly subClasses = computed(() => `text-caption ${SUB_TONE_CLASSES[this.subTone()]}`);\n}\n","import {\n Component,\n Directive,\n ElementRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n} from '@angular/core';\n\nimport { UI_CONTROL } from '../control/control';\n\nconst nextId = (() => {\n let count = 0;\n\n return (): string => `ui-field-${++count}`;\n})();\n\n/**\n * Marks an element, typically an 18px svg icon, as the leading content of a `ui-field`: it sits\n * inside the control's left edge and the control's text is inset to clear it. Decorative, so hidden\n * from assistive technologies.\n *\n * @example\n * <ui-field label=\"Search\" labelHidden>\n * <svg uiFieldLeading width=\"18\" height=\"18\" viewBox=\"0 0 24 24\">...</svg>\n * <input uiInput type=\"search\" />\n * </ui-field>\n */\n@Directive({\n selector: '[uiFieldLeading]',\n host: {\n class: 'pointer-events-none absolute left-3 flex text-(--muted-foreground)',\n 'aria-hidden': 'true',\n },\n})\nexport class UiFieldLeading {}\n\n/**\n * Marks an element, typically an icon button, as the trailing action of a `ui-field`: it sits on the\n * control's right edge, square to the control's height, and the control's text is padded to clear it.\n *\n * @example\n * <ui-field label=\"Password\">\n * <input uiInput type=\"password\" size=\"xl\" />\n * <button uiFieldTrailing type=\"button\" aria-label=\"Show the password\" [attr.aria-pressed]=\"shown()\">...</button>\n * </ui-field>\n *\n * A toggle such as this one should carry `aria-pressed`. The slot shares the right edge with `unit`:\n * set one or the other, not both.\n */\n@Directive({\n selector: '[uiFieldTrailing]',\n host: {\n class:\n 'absolute right-0 grid h-full aspect-square place-items-center rounded-control cursor-pointer text-(--muted-foreground) hover:text-(--foreground) focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-(--ring)',\n },\n})\nexport class UiFieldTrailing {}\n\n/**\n * Label, control, hint and error as one unit. The control stays a plain native element:\n * the field finds it in its own projected content and wires the ARIA attributes onto it.\n *\n * The message comes from the caller's `error`, or, where none is set, from the projected control's\n * own validation state once it is touched.\n *\n * @example\n * <ui-field label=\"Quantity\" hint=\"Leave empty if unknown\">\n * <input uiInput type=\"number\" [formField]=\"form.quantity\" />\n * </ui-field>\n *\n * @example\n * <ui-field label=\"ISIN or name\" [error]=\"blank() ? 'Enter an ISIN' : undefined\">\n * <input uiInput type=\"search\" />\n * </ui-field>\n *\n * @example\n * <ui-field label=\"Search holdings\" labelHidden>\n * <input uiInput type=\"search\" placeholder=\"Instrument or account\" />\n * </ui-field>\n */\n@Component({\n selector: 'ui-field',\n template: `\n <div class=\"group flex flex-col gap-1.5\">\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -- htmlFor is wired at runtime, once the projected control's id is known -->\n <label [class]=\"labelClasses()\"\n >{{ label() }}\n @if (optional()) {\n {{ ' ' }}<span class=\"font-normal text-(--subtle-foreground)\">{{ optional() }}</span>\n }\n </label>\n\n <div [class]=\"rowClasses()\">\n <ng-content select=\"[uiFieldLeading]\" />\n <ng-content />\n <ng-content select=\"[uiFieldTrailing]\" />\n @if (unit()) {\n <span class=\"text-label pointer-events-none absolute right-3 text-(--subtle-foreground)\">{{ unit() }}</span>\n }\n </div>\n\n @if (hint()) {\n <span class=\"text-label text-(--muted-foreground)\" [id]=\"hintId\">{{ hint() }}</span>\n }\n\n @if (message()) {\n <p class=\"text-label font-medium text-(--negative)\" role=\"alert\" [id]=\"errorId\">{{ message() }}</p>\n }\n </div>\n `,\n})\nexport class UiField {\n readonly label = input.required<string>();\n readonly labelHidden = input(false, { transform: booleanAttribute });\n readonly hint = input<string>();\n readonly error = input<string>();\n readonly unit = input<string>();\n readonly optional = input<string>();\n readonly invalid = input(false, { transform: booleanAttribute });\n\n readonly #id = nextId();\n protected readonly hintId = `${this.#id}-hint`;\n protected readonly errorId = `${this.#id}-error`;\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly control = contentChild(UI_CONTROL);\n protected readonly leading = contentChild(UiFieldLeading);\n\n protected readonly trailing = contentChild(UiFieldTrailing);\n\n protected readonly rowClasses = computed(\n () =>\n `relative flex items-center${this.leading() ? ' [&>input]:pl-[38px]' : ''}${this.trailing() ? ' [&>input]:pr-12 lg:[&>input]:pr-11' : ''}`,\n );\n\n protected readonly labelClasses = computed(() =>\n this.labelHidden() ? 'sr-only' : 'text-label leading-[17px] font-medium text-(--muted-foreground)',\n );\n\n /**\n * The caller's own `error` wins: it is the only way to report something the control does not\n * know about, such as a search box refusing an empty query.\n */\n protected readonly message = computed(() => {\n const explicit = this.error();\n\n if (explicit) {\n return explicit;\n }\n\n const control = this.control();\n\n if (!control?.touched()) {\n return undefined;\n }\n\n return control.errors().find((error) => error.message)?.message;\n });\n\n constructor() {\n let markedByField = false;\n\n afterRenderEffect(() => {\n // querySelector, not viewChild.required, so the \"no control found\" guard below stays reachable and testable.\n const control = this.#host.nativeElement.querySelector<HTMLElement>('input, select, textarea');\n\n if (!control) {\n return;\n }\n\n control.id ||= this.#id;\n this.#host.nativeElement.querySelector('label')!.htmlFor = control.id;\n\n const describedBy = [this.hint() ? this.hintId : null, this.message() ? this.errorId : null].filter(Boolean);\n\n if (describedBy.length > 0) {\n control.setAttribute('aria-describedby', describedBy.join(' '));\n } else {\n control.removeAttribute('aria-describedby');\n }\n\n if (this.message() || this.invalid()) {\n control.setAttribute('aria-invalid', 'true');\n markedByField = true;\n } else if (markedByField) {\n control.removeAttribute('aria-invalid');\n markedByField = false;\n }\n });\n }\n}\n","import { Component, input, model } from '@angular/core';\n\nexport type FilterChipOption = {\n value: string;\n label: string;\n count?: number | string | null;\n};\n\nconst CHIP_CLASSES =\n 'flex-none flex h-11 items-center rounded-pill border-0 bg-transparent p-0 font-[inherit] cursor-pointer transition-transform duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) pointer-fine:h-8 pointer-fine:focus-visible:outline-offset-2';\n\nconst PILL_CLASSES =\n 'flex h-[34px] items-center gap-1.5 rounded-pill px-3.5 text-label font-medium whitespace-nowrap pointer-fine:h-8 pointer-fine:px-3 pointer-fine:group-hover/chip:shadow-[inset_0_0_0_1px_var(--muted-foreground)]';\n\nconst SELECTED_PILL_CLASSES = 'bg-(--primary) text-(--primary-foreground)';\n\nconst UNSELECTED_PILL_CLASSES = 'bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)]';\n\n/**\n * A row of single-choice filter pills, each with an optional count, that narrows a list in place:\n * an asset class, a status. On touch it scrolls on one line, bleeding to the screen edges; with a\n * fine pointer it wraps.\n *\n * @example\n * <ui-filter-chips ariaLabel=\"Filter by class\" [options]=\"classes()\" [(value)]=\"selectedClass\" />\n */\n@Component({\n selector: 'ui-filter-chips',\n template: `\n @for (option of options(); track option.value) {\n <button\n class=\"group/chip\"\n type=\"button\"\n [attr.aria-pressed]=\"option.value === value()\"\n [class]=\"chipClasses\"\n (click)=\"value.set(option.value)\"\n >\n <span data-chip [class]=\"pillClasses(option.value)\"\n >{{ option.label }}\n @if (option.count !== undefined && option.count !== null) {\n &ngsp;<span class=\"[font-variant-numeric:var(--numeric)]\" data-count [class]=\"countClasses(option.value)\">{{\n option.count\n }}</span>\n }\n </span>\n </button>\n }\n `,\n host: {\n role: 'group',\n class:\n 'flex gap-2 overflow-x-auto [scrollbar-width:none] -mt-1 -mx-(--gutter) px-(--gutter) pointer-fine:m-0 pointer-fine:flex-wrap pointer-fine:overflow-visible pointer-fine:p-0',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class UiFilterChips {\n readonly options = input.required<FilterChipOption[]>();\n readonly value = model.required<string>();\n readonly ariaLabel = input.required<string>();\n\n protected readonly chipClasses = CHIP_CLASSES;\n\n protected pillClasses(optionValue: string): string {\n return `${PILL_CLASSES} ${optionValue === this.value() ? SELECTED_PILL_CLASSES : UNSELECTED_PILL_CLASSES}`;\n }\n\n protected countClasses(optionValue: string): string {\n return optionValue === this.value() ? 'text-(--primary-foreground)' : 'text-(--subtle-foreground)';\n }\n}\n","import type { PlottedPoint } from './chart-scale';\n\nexport const axisTicks = <T extends PlottedPoint>(points: readonly T[], maxTicks = 5): T[] => {\n if (points.length <= maxTicks) {\n return [...points];\n }\n\n const count = Math.max(3, Math.min(maxTicks, points.length));\n const step = (points.length - 1) / (count - 1);\n\n const indexes = new Set<number>();\n\n for (let tick = 0; tick < count; tick++) {\n indexes.add(Math.round(tick * step));\n }\n\n return [...indexes].sort((a, b) => a - b).map((index) => points[index] as T);\n};\n\nexport const isCoreTick = (index: number, count: number): boolean => {\n if (count <= 3) {\n return true;\n }\n\n const middle = Math.floor((count - 1) / 2);\n\n return index === 0 || index === count - 1 || index === middle;\n};\n","import type { PlottedPoint } from './chart-scale';\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max);\n\nexport const nearestPointIndex = (points: readonly PlottedPoint[], x: number): number => {\n let nearest = 0;\n let nearestDistance = Infinity;\n\n points.forEach((point, index) => {\n const distance = Math.abs(point.x - x);\n\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearest = index;\n }\n });\n\n return nearest;\n};\n\nexport type KeyNavigation = { index: number | null; preventDefault: boolean };\n\nexport const navigateIndex = (key: string, current: number | null, last: number): KeyNavigation | null => {\n switch (key) {\n case 'ArrowRight':\n return { index: clamp((current ?? -1) + 1, 0, last), preventDefault: true };\n case 'ArrowLeft':\n return { index: clamp((current ?? last + 1) - 1, 0, last), preventDefault: true };\n case 'Home':\n return { index: 0, preventDefault: true };\n case 'End':\n return { index: last, preventDefault: true };\n case 'Escape':\n return { index: null, preventDefault: false };\n default:\n return null;\n }\n};\n","export const START_LABEL_HEIGHT = 16;\n\nconst AXIS_ROW = 17;\n\nexport const TOOLTIP_SIZES = ['compact', 'large'] as const;\nexport type TooltipSize = (typeof TOOLTIP_SIZES)[number];\n\nexport const TOOLTIP_CLASSES: Record<TooltipSize, { box: string; value: string; delta: string }> = {\n compact: { box: '-top-3 px-2.5', value: 'text-label', delta: 'text-caption' },\n large: { box: 'top-0 px-3', value: 'text-body', delta: 'text-label' },\n};\n\nconst PLOT_PADDING_RATIO = 16 / 240;\nconst SPARKLINE_PADDING = 4;\nconst START_LABEL_BASELINE_OFFSET = 4;\nconst TOOLTIP_OFFSET = 14;\nconst TOOLTIP_FLIP_RATIO = 0.55;\n\nexport const plotHeightFor = (height: number, sparkline: boolean, axisGap: number | 'auto', wide: boolean): number =>\n sparkline ? height : Math.max(height - resolveGap(axisGap, wide) - AXIS_ROW, 1);\n\nexport const plotPaddingFor = (plotHeight: number, sparkline: boolean): number =>\n sparkline ? SPARKLINE_PADDING : plotHeight * PLOT_PADDING_RATIO;\n\nexport const startLabelBaseline = (boxBottom: number): number => boxBottom - START_LABEL_BASELINE_OFFSET;\n\nexport const tooltipPlacement = (ratio: number): string => {\n const flipped = ratio > TOOLTIP_FLIP_RATIO;\n\n return `left: calc(${ratio * 100}% ${flipped ? '-' : '+'} ${TOOLTIP_OFFSET}px); transform: ${flipped ? 'translateX(-100%)' : 'none'}`;\n};\n\nexport const deltaTone = (delta: number): string =>\n delta > 0 ? 'text-(--positive)' : delta < 0 ? 'text-(--negative)' : 'text-(--muted-foreground)';\n\nexport const DEFAULT_WIDTH = 640;\nexport const DEFAULT_HEIGHT = 240;\n\nexport const identityValue = (value: number): string => `${value}`;\nexport const identityDelta = (delta: number): string => `${delta > 0 ? '+' : ''}${delta}`;\nexport const identityTime = (time: number): string => new Date(time).toISOString();\n\nexport type AxisTicks = 3 | 5 | 'auto';\n\nexport const parseAxisTicks = (value: AxisTicks | string): AxisTicks =>\n value === 'auto' ? 'auto' : (Number(value) as 3 | 5);\n\nconst resolveGap = (gap: number | 'auto', wide: boolean): number => (gap === 'auto' ? (wide ? 16 : 12) : gap);\n\nconst resolveTooltip = (size: TooltipSize | 'auto', wide: boolean): TooltipSize =>\n size === 'auto' ? (wide ? 'large' : 'compact') : size;\n\nexport const tooltipClassesFor = (size: TooltipSize | 'auto', wide: boolean): (typeof TOOLTIP_CLASSES)[TooltipSize] =>\n TOOLTIP_CLASSES[resolveTooltip(size, wide)];\n","import { scaleLinear } from 'd3-scale';\nimport { curveMonotoneX, line } from 'd3-shape';\n\nexport type ChartPoint = {\n t: number;\n v: number;\n};\n\nexport type PlottedPoint = ChartPoint & { x: number; y: number };\n\nexport type ChartGeometry = {\n line: string;\n end: { x: number; y: number };\n start: { y: number };\n points: PlottedPoint[];\n plotBottom: number;\n plotTop: number;\n};\n\nexport type GeometryPadding = { x?: number; top?: number; bottom?: number };\n\nexport const CURVE = curveMonotoneX;\n\nexport const buildGeometry = (\n points: ChartPoint[],\n width: number,\n height: number,\n padding: GeometryPadding = {},\n): ChartGeometry | null => {\n if (points.length === 0) {\n return null;\n }\n\n const { x: paddingX = 4, top: paddingTop = 4, bottom: paddingBottom = 4 } = padding;\n const plotTop = paddingTop;\n const plotBottom = height - paddingBottom;\n\n const times = points.map((point) => point.t);\n const values = points.map((point) => point.v);\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n\n const x = scaleLinear()\n .domain([Math.min(...times), Math.max(...times)])\n .range([paddingX, width - paddingX]);\n\n const y =\n minValue === maxValue\n ? () => (plotTop + plotBottom) / 2\n : scaleLinear().domain([minValue, maxValue]).range([plotBottom, plotTop]);\n\n const toX = (point: ChartPoint): number => (points.length === 1 ? paddingX : x(point.t));\n\n const lineGenerator = line<ChartPoint>()\n .x(toX)\n .y((point) => y(point.v))\n .curve(CURVE);\n\n const first = points[0] as ChartPoint;\n const last = points.at(-1) as ChartPoint;\n\n return {\n line: lineGenerator(points) as string,\n end: { x: toX(last), y: y(last.v) },\n start: { y: y(first.v) },\n points: points.map((point) => ({ ...point, x: toX(point), y: y(point.v) })),\n plotBottom,\n plotTop,\n };\n};\n","import type { PlottedPoint } from './chart-scale';\n\nexport type StartLabelBox = { width: number; height: number };\nexport type StartLabelSize = { width: number; height: number };\nexport type StartLabelPlacement = { x: number; y: number; anchor: 'start' | 'end' };\n\nconst LINE_GAP = 6;\nconst COLLISION_MARGIN = 6;\nconst EDGE_TOLERANCE = 3;\n\ntype Slot = { anchor: 'start' | 'end'; x: number; y: number; top: number; bottom: number };\n\nconst candidateSlots = (startY: number, box: StartLabelBox, label: StartLabelSize): Slot[] => {\n const aboveTop = startY - LINE_GAP - label.height;\n const aboveBottom = startY - LINE_GAP;\n const belowTop = startY + LINE_GAP;\n const belowBottom = startY + LINE_GAP + label.height;\n\n const slots: Slot[] = [\n { anchor: 'end', x: box.width, y: aboveBottom, top: aboveTop, bottom: aboveBottom },\n { anchor: 'end', x: box.width, y: belowBottom, top: belowTop, bottom: belowBottom },\n { anchor: 'start', x: 0, y: aboveBottom, top: aboveTop, bottom: aboveBottom },\n { anchor: 'start', x: 0, y: belowBottom, top: belowTop, bottom: belowBottom },\n { anchor: 'end', x: box.width, y: label.height, top: 0, bottom: label.height },\n { anchor: 'start', x: 0, y: label.height, top: 0, bottom: label.height },\n { anchor: 'end', x: box.width, y: box.height, top: box.height - label.height, bottom: box.height },\n { anchor: 'start', x: 0, y: box.height, top: box.height - label.height, bottom: box.height },\n ];\n\n return slots.filter((slot) => slot.top >= -EDGE_TOLERANCE && slot.bottom <= box.height + EDGE_TOLERANCE);\n};\n\nconst hitsFor = (slot: Slot, label: StartLabelSize, points: readonly PlottedPoint[]): number => {\n const left = slot.anchor === 'end' ? slot.x - label.width : slot.x;\n const right = slot.anchor === 'end' ? slot.x : slot.x + label.width;\n const top = slot.top - COLLISION_MARGIN;\n const bottom = slot.bottom + COLLISION_MARGIN;\n\n return points.filter((point) => point.x >= left && point.x <= right && point.y >= top && point.y <= bottom).length;\n};\n\nexport const placeStartLabel = (\n points: readonly PlottedPoint[],\n startY: number,\n box: StartLabelBox,\n label: StartLabelSize,\n): StartLabelPlacement => {\n let best: { slot: Slot; hits: number } | null = null;\n\n for (const slot of candidateSlots(startY, box, label)) {\n const hits = hitsFor(slot, label, points);\n\n if (!best || hits < best.hits) {\n best = { slot, hits };\n }\n if (hits === 0) {\n break;\n }\n }\n\n if (!best) {\n return { anchor: 'end', x: box.width, y: label.height };\n }\n\n const { anchor, x, y } = best.slot;\n\n return { anchor, x, y };\n};\n","import type { ChartGeometry, PlottedPoint } from './chart-scale';\n\nexport const TRANSITION_SAMPLES = 120;\nexport const TRANSITION_DURATION = 260;\n\nexport const easeOutQuint = (t: number): number => 1 - (1 - t) ** 5;\n\nexport const prefersReducedMotion = (): boolean =>\n typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n\nconst monotoneTangents = (xs: readonly number[], ys: readonly number[]): number[] => {\n const n = xs.length;\n const slopes: number[] = [];\n\n for (let i = 0; i < n - 1; i++) {\n const dx = xs[i + 1]! - xs[i]!;\n\n slopes.push(dx === 0 ? 0 : (ys[i + 1]! - ys[i]!) / dx);\n }\n\n const tangents = new Array<number>(n).fill(0);\n tangents[0] = slopes[0]!;\n tangents[n - 1] = slopes[n - 2]!;\n\n for (let i = 1; i < n - 1; i++) {\n const a = slopes[i - 1]!;\n const b = slopes[i]!;\n\n tangents[i] = a * b <= 0 ? 0 : (a + b) / 2;\n }\n\n for (let i = 0; i < n - 1; i++) {\n const slope = slopes[i]!;\n\n if (slope === 0) {\n tangents[i] = 0;\n tangents[i + 1] = 0;\n continue;\n }\n\n const a = tangents[i]! / slope;\n const b = tangents[i + 1]! / slope;\n const s = a * a + b * b;\n\n if (s > 9) {\n const t = 3 / Math.sqrt(s);\n\n tangents[i] = t * a * slope;\n tangents[i + 1] = t * b * slope;\n }\n }\n\n return tangents;\n};\n\nconst sampleMonotone = (points: readonly PlottedPoint[], sampleXs: readonly number[]): number[] => {\n const xs = points.map((point) => point.x);\n const ys = points.map((point) => point.y);\n const tangents = monotoneTangents(xs, ys);\n\n let segment = 0;\n\n return sampleXs.map((x) => {\n while (segment < xs.length - 2 && x > xs[segment + 1]!) {\n segment++;\n }\n\n const x0 = xs[segment]!;\n const x1 = xs[segment + 1]!;\n const dx = x1 - x0;\n const f = dx === 0 ? 0 : (x - x0) / dx;\n const f2 = f * f;\n const f3 = f2 * f;\n const y0 = ys[segment]!;\n const y1 = ys[segment + 1]!;\n const m0 = tangents[segment]!;\n const m1 = tangents[segment + 1]!;\n\n return (2 * f3 - 3 * f2 + 1) * y0 + (f3 - 2 * f2 + f) * m0 * dx + (-2 * f3 + 3 * f2) * y1 + (f3 - f2) * m1 * dx;\n });\n};\n\nconst buildPolyline = (xs: readonly number[], ys: readonly number[]): string =>\n xs.map((x, index) => `${index === 0 ? 'M' : 'L'}${x.toFixed(2)},${ys[index]!.toFixed(2)}`).join(' ');\n\nexport const interpolateLine = (from: ChartGeometry, to: ChartGeometry, progress: number): string => {\n const left = to.points[0]!.x;\n const right = to.points.at(-1)!.x;\n const samples = Array.from(\n { length: TRANSITION_SAMPLES },\n (_, index) => left + ((right - left) * index) / (TRANSITION_SAMPLES - 1),\n );\n const fromYs = sampleMonotone(from.points, samples);\n const toYs = sampleMonotone(to.points, samples);\n\n return buildPolyline(\n samples,\n fromYs.map((fromY, index) => fromY + (toYs[index]! - fromY) * progress),\n );\n};\n","import { DestroyRef, type Signal, inject, signal } from '@angular/core';\n\nconst WIDE_QUERY = '(min-width: 64rem)';\n\nexport const wideViewport = (): Signal<boolean> => {\n const query = typeof matchMedia === 'function' ? matchMedia(WIDE_QUERY) : null;\n const wide = signal(query?.matches ?? false);\n const onChange = (event: { matches: boolean }): void => wide.set(event.matches);\n\n if (query) {\n query.onchange = onChange;\n inject(DestroyRef).onDestroy(() => (query.onchange = null));\n }\n\n return wide;\n};\n","import {\n Component,\n DestroyRef,\n type ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { axisTicks, isCoreTick } from './internal/chart-axis';\nimport { navigateIndex, nearestPointIndex } from './internal/chart-interaction';\nimport {\n type AxisTicks,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n START_LABEL_HEIGHT,\n deltaTone,\n identityDelta,\n identityTime,\n identityValue,\n parseAxisTicks,\n plotHeightFor,\n plotPaddingFor,\n startLabelBaseline,\n tooltipClassesFor,\n tooltipPlacement,\n} from './internal/chart-layout';\nimport { type ChartGeometry, type ChartPoint, type PlottedPoint, buildGeometry } from './internal/chart-scale';\nimport { placeStartLabel } from './internal/start-label';\nimport { TRANSITION_DURATION, easeOutQuint, interpolateLine, prefersReducedMotion } from './internal/transition';\nimport { wideViewport } from './internal/viewport';\n\nexport type { AxisTicks, ChartPoint };\nexport type { TooltipSize } from './internal/chart-layout';\n\ntype PlotRef = ElementRef<SVGSVGElement>;\n\n/**\n * Value over time: a monotone curve with a dashed line at the starting value and a tooltip.\n *\n * @example\n * <ui-line-chart [points]=\"points\" label=\"Net worth over one month\" startLabel=\"Since\" [valueFormat]=\"formatEur\" />\n */\n@Component({\n selector: 'ui-line-chart',\n template: `\n <div class=\"relative h-full\">\n <svg\n #svgRef\n class=\"block h-full w-full touch-pan-y overflow-visible\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [attr.height]=\"effectiveHeight()\"\n [attr.tabindex]=\"sparkline() ? null : 0\"\n [attr.viewBox]=\"'0 0 ' + effectiveWidth() + ' ' + effectiveHeight()\"\n [attr.width]=\"effectiveWidth()\"\n (keydown)=\"onKeydown($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (pointermove)=\"onPointerMove($event)\"\n >\n @if (geometry(); as geometry) {\n <path\n class=\"stroke-(--foreground)\"\n data-chart-line\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [attr.d]=\"displayLine()\"\n [attr.stroke-width]=\"sparkline() ? 1.5 : 2\"\n />\n\n @if (!sparkline()) {\n <line\n class=\"stroke-(--border)\"\n data-chart-start-line\n stroke-dasharray=\"3 4\"\n stroke-width=\"1\"\n x1=\"0\"\n [attr.x2]=\"effectiveWidth()\"\n [attr.y1]=\"geometry.start.y\"\n [attr.y2]=\"geometry.start.y\"\n />\n\n @if (startLabelInfo(); as info) {\n <text\n class=\"text-caption fill-(--subtle-foreground) tabular-nums\"\n data-chart-start-label\n [attr.text-anchor]=\"info.placement.anchor\"\n [attr.x]=\"info.placement.x\"\n [attr.y]=\"info.placement.y\"\n >\n {{ info.label }}\n </text>\n }\n\n <circle\n class=\"fill-(--foreground) stroke-(--card) [paint-order:stroke]\"\n data-chart-end\n r=\"4\"\n stroke-width=\"6\"\n [attr.cx]=\"geometry.end.x\"\n [attr.cy]=\"geometry.end.y\"\n />\n\n @for (\n tick of ticks();\n track tick.t;\n let index = $index;\n let count = $count;\n let first = $first;\n let last = $last\n ) {\n <text\n class=\"text-caption fill-(--subtle-foreground) tabular-nums\"\n data-chart-axis-tick\n [attr.text-anchor]=\"first ? 'start' : last ? 'end' : 'middle'\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"effectiveHeight() - 4\"\n [class.hidden]=\"axisTicks() === 3 && !isCoreTick(index, count)\"\n [class.max-sm:hidden]=\"axisTicks() === 'auto' && !isCoreTick(index, count)\"\n >\n {{ axisFormat()(tick.t) }}\n </text>\n }\n\n @if (active(); as point) {\n <line\n class=\"stroke-(--border)\"\n data-chart-crosshair\n stroke-width=\"1\"\n y1=\"0\"\n [attr.x1]=\"point.x\"\n [attr.x2]=\"point.x\"\n [attr.y2]=\"plotHeight()\"\n />\n <circle\n class=\"fill-(--foreground) stroke-(--card) [paint-order:stroke]\"\n data-chart-active\n r=\"5\"\n stroke-width=\"6\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n />\n }\n }\n }\n </svg>\n\n @if (active(); as point) {\n <div\n class=\"rounded-container pointer-events-none absolute bg-(--elevated) py-2 whitespace-nowrap [font-variant-numeric:var(--numeric)] shadow-[0_4px_16px_rgb(0_0_0/0.12),inset_0_0_0_1px_var(--border)]\"\n data-testid=\"chart-tooltip\"\n role=\"status\"\n [class]=\"tooltipClasses().box\"\n [style]=\"tooltipStyle(point)\"\n >\n <p class=\"font-medium text-(--foreground)\" [class]=\"tooltipClasses().value\">\n {{ tooltipFormat()?.(point) ?? valueFormat()(point.v) }}\n </p>\n @if (tooltipDelta()) {\n <p data-chart-delta [class]=\"deltaClasses(point)\">{{ deltaFormat()(deltaFor(point)) }}</p>\n }\n <p class=\"text-caption text-(--subtle-foreground)\" data-chart-date>{{ timeFormat()(point.t) }}</p>\n </div>\n }\n @if (points().length > 0) {\n <div class=\"sr-only\">\n <table>\n <caption [textContent]=\"label()\"></caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ timeColumnLabel() }}</th>\n <th scope=\"col\">{{ valueColumnLabel() }}</th>\n </tr>\n </thead>\n <tbody>\n @for (point of points(); track point.t) {\n <tr>\n <td>{{ timeFormat()(point.t) }}</td>\n <td>{{ valueFormat()(point.v) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n `,\n host: {\n class: 'block h-full',\n },\n})\nexport class UiLineChart {\n readonly points = input.required<ChartPoint[]>();\n readonly label = input.required<string>();\n readonly valueFormat = input<(value: number) => string>(identityValue);\n readonly tooltipFormat = input<(point: ChartPoint) => string>();\n readonly deltaFormat = input<(delta: number) => string>(identityDelta);\n readonly timeFormat = input<(time: number) => string>(identityTime);\n readonly axisFormat = input<(time: number) => string>(identityTime);\n readonly startLabel = input('');\n readonly timeColumnLabel = input('Time');\n readonly valueColumnLabel = input('Value');\n readonly sparkline = input(false, { transform: booleanAttribute });\n readonly tooltip = input<'compact' | 'large' | 'auto'>('compact');\n readonly tooltipDelta = input(true, { transform: booleanAttribute });\n readonly axisGap = input<number | 'auto'>(12);\n readonly axisTicks = input<AxisTicks, AxisTicks | string>('auto', { transform: parseAxisTicks });\n\n #destroyRef = inject(DestroyRef);\n #wide = wideViewport();\n #frame: number | null = null;\n #hasRenderedOnce = false;\n #previousGeometry: ChartGeometry | null = null;\n\n protected readonly isCoreTick = isCoreTick;\n protected readonly svgRef = viewChild.required<PlotRef>('svgRef');\n protected readonly activeIndex = signal<number | null>(null);\n protected readonly animatedLine = signal<string | null>(null);\n protected readonly measuredSize = signal<{ width: number; height: number } | null>(null);\n\n protected readonly effectiveWidth = computed(() => this.measuredSize()?.width ?? DEFAULT_WIDTH);\n protected readonly effectiveHeight = computed(() => this.measuredSize()?.height ?? DEFAULT_HEIGHT);\n\n protected readonly plotHeight = computed(() =>\n plotHeightFor(this.effectiveHeight(), this.sparkline(), this.axisGap(), this.#wide()),\n );\n\n protected readonly tooltipStyle = (point: PlottedPoint): string => tooltipPlacement(point.x / this.effectiveWidth());\n\n protected readonly tooltipClasses = computed(() => tooltipClassesFor(this.tooltip(), this.#wide()));\n\n protected readonly geometry = computed(() => {\n const plotHeight = this.plotHeight();\n const padding = plotPaddingFor(plotHeight, this.sparkline());\n\n return buildGeometry(this.points(), this.effectiveWidth(), plotHeight, { x: 0, top: padding, bottom: padding });\n });\n\n protected readonly displayLine = computed(() => this.animatedLine() ?? this.geometry()!.line);\n\n protected readonly ticks = computed(() => axisTicks(this.geometry()!.points));\n\n protected readonly active = computed<PlottedPoint | null>(() => {\n const geometry = this.geometry();\n const index = this.activeIndex();\n\n return geometry && index !== null ? (geometry.points[index] as PlottedPoint) : null;\n });\n\n protected readonly startLabelInfo = computed(() => {\n const text = this.startLabel();\n const geometry = this.geometry();\n\n if (!text || !geometry) {\n return null;\n }\n\n const label = `${text} ${this.valueFormat()(geometry.points[0]!.v)}`;\n const size = { width: label.length * 0.56 * 12 + 8, height: START_LABEL_HEIGHT };\n const placement = placeStartLabel(\n geometry.points,\n geometry.start.y,\n { width: this.effectiveWidth(), height: this.plotHeight() },\n size,\n );\n\n return { label, placement: { ...placement, y: startLabelBaseline(placement.y) } };\n });\n\n #renderRef = afterNextRender(() => this.#observeSize());\n\n constructor() {\n effect(() => {\n const geometry = this.geometry();\n const previous = this.#previousGeometry;\n\n if (previous === geometry) {\n return;\n }\n\n this.#previousGeometry = geometry;\n this.#cancelAnimation();\n\n if (!this.#hasRenderedOnce) {\n this.#hasRenderedOnce = true;\n return;\n }\n\n if (!previous || !geometry) {\n this.animatedLine.set(null);\n return;\n }\n\n if (prefersReducedMotion()) {\n this.animatedLine.set(null);\n return;\n }\n\n this.#animate(previous, geometry);\n });\n\n this.#destroyRef.onDestroy(() => this.#cancelAnimation());\n }\n\n #observeSize(): void {\n this.#destroyRef.onDestroy(() => this.#renderRef.destroy());\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const element = this.svgRef().nativeElement;\n\n const observer = new ResizeObserver(([entry]) => {\n if (entry) {\n const { width, height } = entry.contentRect;\n\n this.measuredSize.set({ width, height });\n }\n });\n\n observer.observe(element);\n this.#destroyRef.onDestroy(() => observer.disconnect());\n }\n\n #cancelAnimation(): void {\n cancelAnimationFrame(this.#frame ?? 0);\n this.#frame = null;\n }\n\n #animate(from: ChartGeometry, to: ChartGeometry): void {\n if (from.points.length < 2 || to.points.length < 2) {\n this.animatedLine.set(null);\n return;\n }\n\n const startTime = performance.now();\n\n const step = (now: number): void => {\n const t = Math.min(1, (now - startTime) / TRANSITION_DURATION);\n\n this.animatedLine.set(t < 1 ? interpolateLine(from, to, easeOutQuint(t)) : null);\n this.#frame = t < 1 ? requestAnimationFrame(step) : null;\n };\n\n this.#frame = requestAnimationFrame(step);\n }\n\n protected deltaFor(point: PlottedPoint): number {\n return point.v - this.points()[0]!.v;\n }\n\n protected deltaClasses(point: PlottedPoint): string {\n return `${this.tooltipClasses().delta} ${deltaTone(this.deltaFor(point))}`;\n }\n\n protected onPointerMove(event: PointerEvent): void {\n const geometry = this.geometry();\n\n if (this.sparkline() || !geometry || geometry.points.length === 0) {\n return;\n }\n\n const rect = this.svgRef().nativeElement.getBoundingClientRect();\n const ratio = rect.width === 0 ? 1 : this.effectiveWidth() / rect.width;\n const x = (event.clientX - rect.left) * ratio;\n\n this.activeIndex.set(nearestPointIndex(geometry.points, x));\n }\n\n protected onPointerLeave(): void {\n this.activeIndex.set(null);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const geometry = this.geometry();\n\n if (this.sparkline() || !geometry || geometry.points.length === 0) {\n return;\n }\n\n const navigation = navigateIndex(event.key, this.activeIndex(), geometry.points.length - 1);\n\n if (!navigation) {\n return;\n }\n\n if (navigation.preventDefault) {\n event.preventDefault();\n }\n\n this.activeIndex.set(navigation.index);\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\n\nconst MENU_CLASSES =\n 'm-0 min-w-44 p-1 rounded-container bg-(--elevated) shadow-[0_8px_24px_rgb(0_0_0/0.16),inset_0_0_0_1px_var(--border)] text-(--foreground) transition-[opacity,transform,overlay,display] transition-discrete duration-(--duration-fast) ease-out starting:open:opacity-0 starting:open:scale-(--enter-scale) opacity-0 scale-(--enter-scale) open:opacity-100 open:scale-100';\n\nconst SHEET_CLASSES =\n 'max-lg:fixed max-lg:inset-x-4 max-lg:top-auto max-lg:w-auto max-lg:bottom-[calc(76px+env(safe-area-inset-bottom))] max-lg:min-w-0 max-lg:p-1.5 max-lg:bg-(--card) max-lg:shadow-[0_12px_32px_rgb(0_0_0/0.2),inset_0_0_0_1px_var(--border)] max-lg:backdrop:bg-[rgb(0_0_0/0.36)] max-lg:transition-[opacity,translate,overlay,display] max-lg:scale-100 max-lg:translate-y-4 max-lg:open:translate-y-0 max-lg:starting:open:scale-100 max-lg:starting:open:translate-y-4';\n\nconst SHEET_ITEM_CLASSES =\n 'flex w-full items-center gap-3 lg:pointer-fine:gap-2.5 min-h-12 lg:min-h-11 lg:pointer-fine:min-h-9 px-3 lg:pointer-fine:px-2.5 rounded-[calc(var(--radius-container)-6px)] lg:rounded-[calc(var(--radius-container)-4px)] text-body lg:pointer-fine:text-label hover:bg-(--glow) focus-visible:bg-(--glow) active:bg-(--soft) outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) [:where(&>svg)]:size-5 [:where(&>svg)]:flex-none lg:[:where(&>svg)]:size-[18px] lg:pointer-fine:[:where(&>svg)]:size-4';\n\nconst ITEM_CLASSES =\n 'flex w-full items-center gap-3 pointer-fine:gap-2.5 min-h-11 pointer-fine:min-h-9 px-3 pointer-fine:px-2.5 rounded-[calc(var(--radius-container)-4px)] text-body pointer-fine:text-label hover:bg-(--glow) focus-visible:bg-(--glow) active:bg-(--soft) outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) [:where(&>svg)]:size-[18px] [:where(&>svg)]:flex-none pointer-fine:[:where(&>svg)]:size-4';\n\nconst nextId = (() => {\n let count = 0;\n\n return () => `ui-menu-${++count}`;\n})();\n\n/**\n * One action of a `ui-menu`; `destructive` paints it in `--negative`.\n *\n * @example\n * <button uiMenuItem destructive (click)=\"remove()\">Delete the line</button>\n */\n@Directive({\n selector: 'button[uiMenuItem]',\n host: {\n role: 'menuitem',\n tabindex: '-1',\n '[class]': 'classes()',\n '(click)': 'onClick()',\n },\n})\nexport class UiMenuItem {\n readonly destructive = input(false, { transform: booleanAttribute });\n\n readonly #host = inject<ElementRef<HTMLButtonElement>>(ElementRef).nativeElement;\n readonly #menu = inject(UiMenu);\n\n protected readonly classes = computed(\n () => `${this.#menu.sheet() ? SHEET_ITEM_CLASSES : ITEM_CLASSES}${this.destructive() ? ' text-(--negative)' : ''}`,\n );\n\n focus(): void {\n this.#host.focus();\n }\n\n hasFocus(): boolean {\n return this.#host === document.activeElement;\n }\n\n protected onClick(): void {\n this.#menu.close();\n }\n}\n\n/**\n * Secondary actions menu, opened from its trigger through the native Popover API. With `sheet`, below\n * 64rem it opens as a bottom action sheet above the tab bar instead of beside its trigger, and\n * `heading` names what the actions apply to. `width` fixes the outer popover width in pixels (the sheet\n * always spans the screen below 64rem); without it the menu fits its content.\n *\n * @example\n * <button ui-button size=\"icon\" aria-label=\"More\" [uiMenuTrigger]=\"menu\">...</button>\n * <ui-menu #menu label=\"Line actions\">\n * <button uiMenuItem (click)=\"edit()\">Edit</button>\n * <button uiMenuItem destructive (click)=\"remove()\">Delete the line</button>\n * </ui-menu>\n */\n@Component({\n selector: 'ui-menu',\n template: `\n @if (sheet() && heading()) {\n <div aria-hidden=\"true\" class=\"text-label px-3 pt-2 pb-1.5 leading-[17px] text-(--muted-foreground) lg:hidden\">\n {{ heading() }}\n </div>\n }\n <ng-content />\n `,\n host: {\n role: 'menu',\n popover: 'auto',\n '[id]': 'menuId',\n '[style.--ui-menu-width]': 'widthVar()',\n '[class]': 'classes()',\n '[attr.aria-label]': 'label()',\n '(toggle)': 'onToggle($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class UiMenu {\n readonly label = input.required<string>();\n readonly sheet = input(false, { transform: booleanAttribute });\n readonly heading = input<string>();\n readonly width = input<number | undefined, unknown>(undefined, { transform: numberAttribute });\n\n readonly menuId = nextId();\n readonly isOpen = signal(false);\n\n protected readonly hasWidth = computed(() => Number.isFinite(this.width()));\n protected readonly widthVar = computed(() => (this.hasWidth() ? `${this.width()}px` : null));\n protected readonly classes = computed(() => {\n const width = !this.hasWidth() ? '' : this.sheet() ? ' lg:w-(--ui-menu-width)' : ' w-(--ui-menu-width)';\n return `${MENU_CLASSES}${this.sheet() ? ` ${SHEET_CLASSES}` : ''}${width}`;\n });\n protected readonly items = contentChildren(UiMenuItem);\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n #trigger: HTMLElement | null = null;\n\n open(trigger: HTMLElement): void {\n this.#trigger = trigger;\n this.isOpen.set(true);\n if (typeof this.#host.showPopover === 'function') {\n this.#host.showPopover();\n }\n if (this.#isSheet()) {\n this.#host.style.position = '';\n this.#host.style.top = '';\n this.#host.style.left = '';\n } else {\n this.#position(trigger);\n }\n this.items()[0]?.focus();\n }\n\n close(): void {\n const wasOpen = this.isOpen();\n\n this.#applyClosed();\n\n if (wasOpen && typeof this.#host.hidePopover === 'function') {\n this.#host.hidePopover();\n }\n }\n\n #applyClosed(): void {\n this.isOpen.set(false);\n this.#trigger?.focus();\n this.#trigger = null;\n }\n\n protected onToggle(event: Event): void {\n if ((event as ToggleEvent).newState === 'closed') {\n this.#applyClosed();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Tab' || event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n\n const items = this.items();\n const currentIndex = items.findIndex((item) => item.hasFocus());\n const lastIndex = items.length - 1;\n\n let nextIndex: number | undefined;\n switch (event.key) {\n case 'ArrowDown':\n nextIndex = currentIndex >= lastIndex ? 0 : currentIndex + 1;\n break;\n case 'ArrowUp':\n nextIndex = currentIndex <= 0 ? lastIndex : currentIndex - 1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = lastIndex;\n break;\n }\n\n if (nextIndex === undefined) {\n return;\n }\n event.preventDefault();\n items[nextIndex]?.focus();\n }\n\n #isSheet(): boolean {\n return this.sheet() && typeof window.matchMedia === 'function' && !window.matchMedia('(min-width: 64rem)').matches;\n }\n\n #position(trigger: HTMLElement): void {\n const margin = 8;\n const triggerRect = trigger.getBoundingClientRect();\n const menuRect = this.#host.getBoundingClientRect();\n const fitsBelow = window.innerHeight - triggerRect.bottom >= menuRect.height + margin;\n\n const top = fitsBelow ? triggerRect.bottom + 4 : Math.max(margin, triggerRect.top - menuRect.height - 4);\n const left = Math.min(\n Math.max(triggerRect.right - menuRect.width, margin),\n window.innerWidth - menuRect.width - margin,\n );\n\n this.#host.style.position = 'fixed';\n this.#host.style.top = `${Math.min(top, window.innerHeight - menuRect.height - margin)}px`;\n this.#host.style.left = `${left}px`;\n this.#host.style.transformOrigin = fitsBelow ? 'top right' : 'bottom right';\n }\n}\n\n/**\n * Opens a `ui-menu` from a trigger element and wires `aria-haspopup`, `aria-expanded` and\n * `aria-controls` on it.\n *\n * @example\n * <button ui-button size=\"icon\" aria-label=\"More\" [uiMenuTrigger]=\"menu\">...</button>\n */\n@Directive({\n selector: '[uiMenuTrigger]',\n host: {\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'uiMenuTrigger().isOpen()',\n '[attr.aria-controls]': 'uiMenuTrigger().menuId',\n '(click)': 'toggle()',\n },\n})\nexport class UiMenuTrigger {\n readonly uiMenuTrigger = input.required<UiMenu>();\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n protected toggle(): void {\n const menu = this.uiMenuTrigger();\n\n if (menu.isOpen()) {\n menu.close();\n } else {\n menu.open(this.#host);\n }\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Track thicknesses. `MeterSize` is derived from this tuple. */\nexport const METER_SIZES = ['md', 'sm'] as const;\nexport type MeterSize = (typeof METER_SIZES)[number];\n\nconst TRACK_CLASSES: Record<MeterSize, string> = {\n md: 'h-1.5',\n sm: 'h-1',\n};\n\n/** Ramp step used to paint the fill. `MeterTone` is derived from this tuple. */\nexport const METER_TONES = [1, 2, 3, 4, 5, 6] as const;\nexport type MeterTone = (typeof METER_TONES)[number];\n\nconst TONE_CLASSES: Record<MeterTone, string> = {\n 1: 'bg-(--ramp-1)',\n 2: 'bg-(--ramp-2)',\n 3: 'bg-(--ramp-3)',\n 4: 'bg-(--ramp-4)',\n 5: 'bg-(--ramp-5)',\n 6: 'bg-(--ramp-6)',\n};\n\n/**\n * Proportion of a whole, drawn as a single bar. One bar per category, never a stacked\n * strip: without hue to separate segments, length has to do the work alone.\n *\n * @example\n * <ui-meter [value]=\"0.463\" label=\"Funds\" valueText=\"46.3% - 128,656.00 EUR\" [tone]=\"1\" />\n */\n@Component({\n selector: 'ui-meter',\n template: `\n <div\n class=\"rounded-pill w-full overflow-hidden bg-(--muted)\"\n role=\"meter\"\n [attr.aria-label]=\"label()\"\n [attr.aria-valuemax]=\"1\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuetext]=\"valueText()\"\n [class]=\"trackClasses()\"\n >\n <div data-testid=\"meter-fill\" [class]=\"fillClasses()\" [style.width.%]=\"percent()\"></div>\n </div>\n `,\n})\nexport class UiMeter {\n readonly value = input.required<number>();\n readonly label = input.required<string>();\n readonly valueText = input.required<string>();\n readonly tone = input<MeterTone>(1);\n readonly size = input<MeterSize>('md');\n\n protected readonly trackClasses = computed(() => TRACK_CLASSES[this.size()]);\n\n protected readonly percent = computed(() => Math.min(100, Math.max(0, this.value() * 100)));\n\n protected readonly fillClasses = computed(() => `h-full rounded-pill ${TONE_CLASSES[this.tone()]}`);\n}\n","import { Component, booleanAttribute, computed, input } from '@angular/core';\n\nconst BASE_CLASSES =\n 'flex items-center gap-3 h-10 px-3 rounded-control text-label leading-normal font-medium transition-colors duration-(--duration-press) hover:bg-(--glow) hover:text-(--foreground) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst ACTIVE_CLASSES = 'bg-(--soft) text-(--foreground)';\n\nconst IDLE_CLASSES = 'text-(--muted-foreground) active:bg-(--soft)';\n\n/**\n * One destination of the sidebar navigation (Portfolio, Holdings, Allocation, Accounts).\n *\n * @example\n * <a ui-nav-item [active]=\"url === '/'\" routerLink=\"/\">\n * <lucide-icon navIcon name=\"house\" />\n * Portfolio\n * </a>\n */\n@Component({\n selector: 'a[ui-nav-item]',\n template: '<ng-content select=\"[navIcon]\" /><ng-content />',\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': \"active() ? 'page' : null\",\n },\n})\nexport class UiNavItem {\n readonly active = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() => `${BASE_CLASSES} ${this.active() ? ACTIVE_CLASSES : IDLE_CLASSES}`);\n}\n","import { Component, Directive, booleanAttribute, computed, input } from '@angular/core';\n\nexport const ROW_SIZES = ['md', 'lg', 'xl', 'card', 'dense'] as const;\nexport type RowSize = (typeof ROW_SIZES)[number];\n\nexport const ROW_PADDINGS = ['md', 'sm', 'none'] as const;\nexport type RowPadding = (typeof ROW_PADDINGS)[number];\n\nexport const ROW_GAPS = ['default', 'sm'] as const;\nexport type RowGap = (typeof ROW_GAPS)[number];\n\nconst SIZE_CLASSES: Record<RowSize, string> = {\n md: 'min-h-14',\n lg: 'min-h-15',\n xl: 'min-h-18 pointer-fine:min-h-17',\n card: 'min-h-17',\n dense: 'min-h-14 lg:min-h-12',\n};\n\nconst SIZE_GAPS: Record<RowSize, string> = { md: 'gap-2.5', lg: 'gap-2.5', xl: 'gap-3', card: 'gap-2', dense: 'gap-3' };\n\nconst PADDING_CLASSES: Record<RowPadding, string> = { md: 'px-2.5', sm: 'px-2', none: 'px-0' };\n\nconst BASE_CLASSES =\n 'flex w-full items-center py-1.5 rounded-control text-left select-none touch-manipulation transition-colors duration-(--duration-press) hover:bg-(--glow) active:bg-(--soft) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst SELECTED_CLASSES = 'bg-(--soft)';\n\n/**\n * Clickable row of a list: a holding, an envelope, an account.\n *\n * @example\n * <a ui-row [selected]=\"holding.id === openId()\" [routerLink]=\"['/holdings', holding.id]\">\n * {{ holding.name }}\n * </a>\n */\n@Component({\n selector: 'a[ui-row], button[ui-row]',\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': \"selected() ? 'true' : null\",\n },\n})\nexport class UiRow {\n readonly selected = input(false, { transform: booleanAttribute });\n readonly size = input<RowSize>('md');\n readonly padding = input<RowPadding>('md');\n readonly gap = input<RowGap>('default');\n\n protected readonly classes = computed(\n () =>\n `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${this.gap() === 'sm' ? 'gap-2' : SIZE_GAPS[this.size()]} ${PADDING_CLASSES[this.padding()]}${this.selected() ? ` ${SELECTED_CLASSES}` : ''}`,\n );\n}\n\n/**\n * Lays out a `ui-row` with a trailing action beside it, such as a \"more\" icon button: the row takes\n * the room the action leaves and the action keeps its own size.\n *\n * @example\n * <div uiRowItem>\n * <a ui-row size=\"xl\" padding=\"sm\" routerLink=\"/accounts/1\">...</a>\n * <button ui-button variant=\"quiet\" size=\"icon-sm\" aria-label=\"Account actions\">...</button>\n * </div>\n */\n@Directive({\n selector: '[uiRowItem]',\n host: {\n class:\n 'flex items-center gap-1 [&>[ui-row]]:w-auto [&>[ui-row]]:min-w-0 [&>[ui-row]]:flex-1 [&>:not([ui-row])]:flex-none',\n },\n})\nexport class UiRowItem {}\n\n/**\n * Non-interactive row of a list, separated from the next by a hairline: a passkey with its delete\n * button, a device, a setting. It is a 72px row (68px from 64rem) with a 12px gap; put it on an\n * `li` or a `div`. Use `ui-row` instead when the whole row is a link or an action.\n *\n * @example\n * <ul>\n * <li uiListRow>\n * <span class=\"flex-1\">MacBook Air</span>\n * <button ui-button variant=\"quiet-destructive\" size=\"icon-sm\" aria-label=\"Delete MacBook Air\">...</button>\n * </li>\n * </ul>\n */\n@Directive({\n selector: '[uiListRow]',\n host: { '[class]': 'classes()' },\n})\nexport class UiListRow {\n readonly ruled = input(true, { transform: booleanAttribute });\n\n protected readonly classes = computed(\n () =>\n `flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17${this.ruled() ? ' shadow-[inset_0_-1px_0_var(--hairline)]' : ''}`,\n );\n}\n","import { Component, ElementRef, booleanAttribute, computed, input, model, viewChildren } from '@angular/core';\n\nconst nextId = (() => {\n let count = 0;\n\n return () => `ui-segmented-${++count}`;\n})();\n\nexport type SegmentedOption = {\n value: string;\n label: string;\n};\n\nconst OPTION_CLASSES =\n \"relative z-10 flex-1 cursor-pointer px-3 text-label font-medium transition-colors after:absolute after:inset-x-0 after:top-1/2 after:h-(--row-min) after:-translate-y-1/2 after:content-[''] focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) active:scale-(--press-scale)\";\n\nexport const SEGMENTED_SIZES = ['md', 'sm'] as const;\nexport type SegmentedSize = (typeof SEGMENTED_SIZES)[number];\n\nconst SIZE_CLASSES: Record<SegmentedSize, string> = {\n md: 'h-10 pointer-fine:h-8',\n sm: 'h-10 pointer-fine:h-[30px]',\n};\n\nconst SELECTED_CLASSES = 'text-(--foreground)';\n\nconst UNSELECTED_CLASSES = 'text-(--muted-foreground) hover:text-(--foreground)';\n\n/**\n * Exclusive choice within a small, known set: a time range, a unit, a mode. The selected option's\n * background is a single thumb that slides under it in `transform`, instead of being redrawn.\n *\n * @example\n * <ui-segmented [options]=\"ranges\" label=\"Time range\" [(value)]=\"range\" />\n */\n@Component({\n selector: 'ui-segmented',\n template: `\n <div [class]=\"showLabel() ? 'flex flex-col gap-1.5' : ''\">\n @if (showLabel()) {\n <span class=\"text-label leading-[17px] font-medium text-(--muted-foreground)\" [id]=\"labelId\">{{\n label()\n }}</span>\n }\n <div\n class=\"rounded-control relative grid bg-(--muted) p-0.5\"\n role=\"radiogroup\"\n [attr.aria-label]=\"showLabel() ? null : label()\"\n [attr.aria-labelledby]=\"showLabel() ? labelId : null\"\n [style.grid-template-columns]=\"'repeat(' + options().length + ', 1fr)'\"\n >\n @if (thumbIndex(); as index) {\n <span\n aria-hidden=\"true\"\n class=\"absolute top-0.5 bottom-0.5 left-0.5 rounded-[calc(var(--radius-control)-2px)] bg-(--card) shadow-[0_1px_2px_rgb(0_0_0/0.08),inset_0_0_0_1px_var(--border)] transition-transform duration-(--duration-fast) ease-out\"\n data-thumb\n [style.transform]=\"'translateX(' + (index - 1) * 100 + '%)'\"\n [style.width]=\"'calc((100% - 4px) / ' + options().length + ')'\"\n ></span>\n }\n\n @for (option of options(); track option.value) {\n <button\n #radio\n role=\"radio\"\n type=\"button\"\n [attr.aria-checked]=\"option.value === value()\"\n [attr.tabindex]=\"tabIndexFor(option.value)\"\n [class]=\"optionClasses(option.value)\"\n (click)=\"select(option.value)\"\n (keydown)=\"onKeydown($event)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n `,\n})\nexport class UiSegmented {\n readonly options = input.required<SegmentedOption[]>();\n readonly label = input.required<string>();\n readonly showLabel = input(false, { transform: booleanAttribute });\n\n protected readonly labelId = nextId();\n readonly value = model.required<string>();\n readonly size = input<SegmentedSize>('md');\n\n protected readonly radios = viewChildren<ElementRef<HTMLButtonElement>>('radio');\n\n protected readonly thumbIndex = computed(() => {\n const index = this.options().findIndex((option) => option.value === this.value());\n\n return index === -1 ? 0 : index + 1;\n });\n\n protected optionClasses(optionValue: string): string {\n return `${OPTION_CLASSES} ${SIZE_CLASSES[this.size()]} ${optionValue === this.value() ? SELECTED_CLASSES : UNSELECTED_CLASSES}`;\n }\n\n protected tabIndexFor(optionValue: string): number {\n const opts = this.options();\n const tabStopValue = opts.some((option) => option.value === this.value()) ? this.value() : opts[0]?.value;\n\n return optionValue === tabStopValue ? 0 : -1;\n }\n\n protected select(optionValue: string): void {\n this.value.set(optionValue);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const delta = { ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 }[event.key];\n if (delta === undefined) {\n return;\n }\n event.preventDefault();\n\n const opts = this.options();\n const currentIndex = opts.findIndex((option) => option.value === this.value());\n const nextIndex = (currentIndex + delta + opts.length) % opts.length;\n const next = opts[nextIndex]!;\n\n this.value.set(next.value);\n this.radios()[nextIndex]?.nativeElement.focus();\n }\n}\n","import { Directive, computed, forwardRef, input } from '@angular/core';\n\nimport { UI_CONTROL, type UiControl, type UiControlError } from '../control/control';\nimport { CONTROL_BASE_CLASSES, CONTROL_SIZE_CLASSES, type ControlSize } from '../input/input';\n\nconst SELECT_CLASSES =\n 'cursor-pointer appearance-none pr-10 bg-(image:--chevron-down) bg-no-repeat bg-[position:right_0.75rem_center] bg-[size:1.125rem]';\n\n// Spelled out prefix included: Tailwind scans for literal strings, so a prefix applied in code\n// emits nothing.\nconst PICKER_CLASSES = [\n 'pointer-fine:supports-[appearance:base-select]:[appearance:base-select]',\n 'pointer-fine:supports-[appearance:base-select]:items-center',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:cursor-pointer',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:rounded-control',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:px-2.5',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:py-2',\n 'pointer-fine:supports-[appearance:base-select]:[&_option:hover]:bg-(--soft)',\n 'pointer-fine:supports-[appearance:base-select]:[&_option:focus]:bg-(--soft)',\n 'pointer-fine:supports-[appearance:base-select]:[&_option:checked]:font-medium',\n '[&::picker-icon]:hidden',\n '[&::picker(select)]:[appearance:base-select]',\n '[&::picker(select)]:my-1.5',\n '[&::picker(select)]:rounded-control',\n '[&::picker(select)]:border',\n '[&::picker(select)]:border-(--border)',\n '[&::picker(select)]:bg-(--card)',\n '[&::picker(select)]:[position-try-fallbacks:none]',\n '[&::picker(select)]:overflow-y-auto',\n '[&::picker(select)]:p-1',\n '[&::picker(select)]:text-(--card-foreground)',\n].join(' ');\n\n/**\n * Styled native select, drop-down list included where the browser allows it. It stays a native\n * `<select>`: keyboard, typeahead and semantics come from the platform, not from a rebuilt listbox.\n *\n * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around\n * it can show the message without any binding here.\n *\n * @example\n * <select uiSelect><option value=\"pea\">PEA</option></select>\n */\n@Directive({\n selector: 'select[uiSelect]',\n host: {\n '[class]': 'classes()',\n },\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiSelect) }],\n})\nexport class UiSelect implements UiControl {\n readonly size = input<ControlSize>('md');\n readonly errors = input<readonly UiControlError[]>([]);\n readonly touched = input(false);\n\n protected readonly classes = computed(\n () =>\n `${CONTROL_BASE_CLASSES} bg-(--background) ${SELECT_CLASSES} ${PICKER_CLASSES} ${CONTROL_SIZE_CLASSES[this.size()]}`,\n );\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available skeleton shapes. `SkeletonShape` is derived from this tuple. */\nexport const SKELETON_SHAPES = ['text', 'figure', 'row', 'chart', 'ring', 'dot'] as const;\nexport type SkeletonShape = (typeof SKELETON_SHAPES)[number];\n\nconst LAST_LINE_WIDTH = '62%';\n\nconst PULSE_ANIMATION = 'cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate';\n\nconst BAR_CLASSES = 'block rounded-control bg-(--muted)';\n\n/**\n * Decorative, pulsing placeholder for content that is still loading, at the shape of the content\n * it stands in for.\n *\n * @example\n * <ui-skeleton shape=\"figure\" />\n * <ui-skeleton [lines]=\"3\" />\n */\n@Component({\n selector: 'ui-skeleton',\n template: `\n @switch (shape()) {\n @case ('figure') {\n <span class=\"${BAR_CLASSES} h-10 w-65\" [style.animation]=\"animation\"></span>\n }\n @case ('row') {\n <span class=\"flex h-14 items-center justify-between gap-4\">\n <span class=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <span class=\"${BAR_CLASSES} h-4 w-3/5\" [style.animation]=\"animation\"></span>\n <span class=\"${BAR_CLASSES} h-3 w-20\" [style.animation]=\"animation\"></span>\n </span>\n <span class=\"${BAR_CLASSES} h-4 w-[90px] flex-none\" [style.animation]=\"animation\"></span>\n </span>\n }\n @case ('chart') {\n <span class=\"rounded-control min-h-50 w-full flex-1 bg-(--muted)\" [style.animation]=\"animation\"></span>\n }\n @case ('dot') {\n <span class=\"rounded-pill size-3 bg-(--muted)\" [style.animation]=\"animation\"></span>\n }\n @case ('ring') {\n <span\n class=\"rounded-pill shadow-[inset_0_0_0_30px_var(--muted)]\"\n [style.animation]=\"animation\"\n [style.height.px]=\"size()\"\n [style.width.px]=\"size()\"\n ></span>\n }\n @default {\n @for (line of bars(); track $index) {\n <span\n class=\"${BAR_CLASSES}\"\n [style.animation]=\"animation\"\n [style.height.px]=\"height()\"\n [style.width]=\"line\"\n ></span>\n }\n }\n }\n `,\n host: {\n 'aria-hidden': 'true',\n class: 'flex flex-col gap-2',\n },\n styles: `\n @keyframes cairn-pulse {\n from {\n opacity: 1;\n }\n to {\n opacity: 0.45;\n }\n }\n `,\n})\nexport class UiSkeleton {\n readonly shape = input<SkeletonShape>('text');\n readonly lines = input(1);\n readonly height = input(12);\n readonly size = input(232);\n\n protected readonly animation = PULSE_ANIMATION;\n\n protected readonly bars = computed(() => {\n const count = Math.max(1, this.lines());\n\n return Array.from({ length: count }, (_, index) => (index === count - 1 && count > 1 ? LAST_LINE_WIDTH : '100%'));\n });\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available stat sizes. `StatSize` is derived from this tuple. */\nexport const STAT_SIZES = ['hero', 'tile'] as const;\nexport type StatSize = (typeof STAT_SIZES)[number];\n\nconst VALUE_CLASSES: Record<StatSize, string> = {\n hero: 'text-display font-semibold tracking-(--tracking-display) text-(--foreground)',\n tile: 'text-title font-semibold tabular-nums text-(--foreground)',\n};\n\nconst LABEL_CLASSES: Record<StatSize, string> = {\n hero: 'text-label font-medium text-(--muted-foreground)',\n tile: 'text-label font-normal text-(--muted-foreground)',\n};\n\nconst STACK_CLASSES: Record<StatSize, string> = {\n hero: 'flex flex-col gap-1',\n tile: 'flex flex-col gap-0.5',\n};\n\n/**\n * Label, figure and a named period of change, at two sizes: a `hero` for a screen's single\n * headline number, or a smaller `tile` repeated in a grid. The figure itself, its delta and its\n * caption are all projected, so the component carries no formatting and no currency of its own.\n *\n * The `hero` size never sets `tabular-nums` on the figure: a lone headline number reads better\n * with its digits at their natural width, unlike a column of aligned figures.\n *\n * @example\n * <ui-stat label=\"Net worth\" size=\"hero\">\n * <span uiStatValue>128,656 EUR</span>\n * <ui-delta uiStatDelta [value]=\"dayChange()\" unknownLabel=\"Not available\">+316.54 EUR</ui-delta>\n * <span uiStatCaption>today</span>\n * </ui-stat>\n */\n@Component({\n selector: 'ui-stat',\n template: `\n <div class=\"flex items-start justify-between gap-4\">\n <div [class]=\"stackClasses()\">\n <dl [class]=\"stackClasses()\">\n <dt [class]=\"labelClasses()\">{{ label() }}</dt>\n <dd [class]=\"valueClasses()\">\n <ng-content select=\"[uiStatValue]\" />\n </dd>\n </dl>\n\n <div class=\"text-label flex flex-wrap items-center gap-x-1.5 gap-y-1 text-(--muted-foreground)\">\n <ng-content select=\"[uiStatDelta]\" />\n <ng-content select=\"[uiStatCaption]\" />\n </div>\n </div>\n\n <ng-content select=\"[uiStatAside]\" />\n </div>\n `,\n})\nexport class UiStat {\n readonly label = input.required<string>();\n readonly size = input<StatSize>('tile');\n\n protected readonly labelClasses = computed(() => LABEL_CLASSES[this.size()]);\n\n protected readonly stackClasses = computed(() => STACK_CLASSES[this.size()]);\n\n protected readonly valueClasses = computed(() => VALUE_CLASSES[this.size()]);\n}\n","import { Directive } from '@angular/core';\n\nconst CLASSES =\n \"relative shrink-0 w-[51px] h-[31px] pointer-fine:w-10 pointer-fine:h-6 appearance-none cursor-pointer rounded-pill bg-(--muted) checked:bg-(--primary) transition-colors duration-(--duration-fast) ease-out disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) before:absolute before:inset-x-0 before:top-1/2 before:-translate-y-1/2 before:h-(--row-min) before:content-[''] after:absolute after:top-0.5 after:left-0.5 after:size-[27px] pointer-fine:after:size-5 after:rounded-pill after:bg-(--card) after:shadow-[0_1px_3px_rgb(0_0_0/0.2)] after:transition-transform after:duration-(--duration-fast) after:ease-out after:content-[''] checked:after:translate-x-[20px] pointer-fine:checked:after:translate-x-4\";\n\n/**\n * Native checkbox styled as an iOS-style switch, exposed to assistive technology as `role=\"switch\"`.\n * 51 by 31 on touch, 40 by 24 with a mouse.\n *\n * @example\n * <input type=\"checkbox\" uiSwitch [checked]=\"hidden()\" (change)=\"toggle()\" aria-label=\"Hide amounts\" />\n */\n@Directive({\n selector: 'input[type=checkbox][uiSwitch]',\n host: {\n role: 'switch',\n '[class]': 'classes',\n },\n})\nexport class UiSwitch {\n protected readonly classes = CLASSES;\n}\n","import { Component, booleanAttribute, computed, input } from '@angular/core';\n\nconst TAB_CLASSES =\n 'flex h-[52px] flex-col items-center justify-center gap-[3px] touch-manipulation select-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst INACTIVE_TAB_CLASSES = 'font-medium text-(--muted-foreground)';\n\nconst ACTIVE_TAB_CLASSES = 'font-semibold text-(--foreground)';\n\n/**\n * Bottom navigation bar for iPhone: 52px of tabs plus the home indicator's safe area.\n *\n * @example\n * <nav ui-tab-bar>\n * <a ui-tab [active]=\"url === '/'\" routerLink=\"/\"><lucide-icon tabIcon name=\"house\" />Portfolio</a>\n * </nav>\n */\n@Component({\n selector: 'nav[ui-tab-bar]',\n template: '<ng-content />',\n host: {\n class:\n 'grid grid-flow-col auto-cols-fr items-stretch bg-(--background)/90 backdrop-blur [@media(prefers-reduced-transparency:reduce)]:bg-(--background) shadow-[inset_0_1px_0_var(--hairline)] pb-[env(safe-area-inset-bottom)]',\n },\n})\nexport class UiTabBar {}\n\n/**\n * One destination of `ui-tab-bar`.\n *\n * @example\n * <a ui-tab active routerLink=\"/\"><lucide-icon tabIcon name=\"house\" />Portfolio</a>\n */\n@Component({\n selector: 'a[ui-tab]',\n template: `\n <span class=\"size-6\" data-tab-icon><ng-content select=\"[tabIcon]\" /></span>\n <span class=\"text-caption leading-none\" data-tab-label><ng-content /></span>\n `,\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': \"active() ? 'page' : null\",\n },\n})\nexport class UiTab {\n readonly active = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(\n () => `${TAB_CLASSES} ${this.active() ? ACTIVE_TAB_CLASSES : INACTIVE_TAB_CLASSES}`,\n );\n}\n","import { Component, Directive, booleanAttribute, computed, input } from '@angular/core';\n\n/** Breakpoints a secondary column can be held back until. */\nexport const CELL_BREAKPOINTS = ['md', 'lg'] as const;\nexport type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];\n\n/** Body row heights. */\nexport const TABLE_ROWS = ['48', '52', '60'] as const;\nexport type TableRow = (typeof TABLE_ROWS)[number];\n\nconst ROW_CLASSES: Record<TableRow, string> = {\n '48': '[--table-row:3rem]',\n '52': '[--table-row:3.25rem]',\n '60': '[--table-row:3.75rem]',\n};\n\nconst FROM_CLASSES: Record<CellBreakpoint, string> = {\n md: 'hidden md:table-cell',\n lg: 'hidden lg:table-cell',\n};\n\nconst TH_CLASSES =\n 'h-[calc(var(--table-head)+var(--table-head-gap))] border-b-(length:--table-head-gap) border-transparent px-2 align-middle text-caption font-medium text-(--subtle-foreground) shadow-(--table-rule)';\nconst TD_CLASSES = 'h-(--table-row) px-2 align-middle text-body';\nconst NUMERIC_CLASSES = 'text-right tabular-nums whitespace-nowrap';\nconst TEXTUAL_CLASSES = 'text-left';\nconst PRIMARY_CLASSES = 'w-full max-w-0';\n\n/**\n * Styled native table. The rows and cells stay plain <tr> and <td>. `row` sets the height of every\n * body row, `rule` draws or drops the hairline under the header, `spaced` leaves 4px between the\n * header and the first row.\n *\n * @example\n * <table uiTable row=\"60\" [rule]=\"false\">\n */\n@Directive({\n selector: 'table[uiTable]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiTable {\n readonly row = input<TableRow>('48');\n readonly rule = input(true, { transform: booleanAttribute });\n readonly spaced = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n [\n 'w-full border-separate border-spacing-0',\n ROW_CLASSES[this.row()],\n this.rule() ? '[--table-rule:inset_0_-1px_0_var(--hairline)]' : '[--table-rule:none]',\n this.spaced() ? '[--table-head-gap:0.25rem]' : '[--table-head-gap:0px]',\n ].join(' '),\n );\n}\n\n/** Body of one group of rows: leaves a 4px tail after its last row. */\n@Directive({\n selector: 'tbody[uiGroup]',\n host: { class: 'after:table-row after:h-1 after:content-[\"\"]' },\n})\nexport class UiGroup {}\n\n/**\n * Body or group row. An ordinary row glows on hover and takes the soft fill when `selected`; an\n * `interactive` row (one that opens something) also presses to the soft fill. A row with no action keeps a\n * plain name: `<td uiTd primary class=\"truncate font-medium\">`.\n * `group` marks the row that holds a group band: it carries no hover state.\n *\n * @example\n * <tr uiTr [selected]=\"open\">...\n * <tr uiTr group><td ui-group-cell name=\"Brokerage\">...\n */\n@Directive({\n selector: 'tr[uiTr]',\n host: {\n '[class]': 'classes()',\n '[attr.aria-selected]': 'selected() ? \"true\" : null',\n },\n})\nexport class UiTr {\n readonly group = input(false, { transform: booleanAttribute });\n readonly selected = input(false, { transform: booleanAttribute });\n readonly interactive = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() => {\n if (this.group()) {\n return '';\n }\n return [\n 'relative [&>td:first-child]:rounded-l-control [&>td:last-child]:rounded-r-control',\n this.selected() ? '[&>td]:bg-(--soft)' : '',\n 'hover:[&>td]:bg-(--glow)',\n this.interactive() ? 'active:[&>td]:bg-(--soft)' : '',\n ]\n .filter(Boolean)\n .join(' ');\n });\n}\n\nconst cellClasses = (\n base: string,\n numeric: boolean,\n primary: boolean,\n from: CellBreakpoint | null,\n secondary: boolean,\n): string => {\n const breakpoint = from ?? (secondary ? 'lg' : null);\n return [\n base,\n numeric ? NUMERIC_CLASSES : TEXTUAL_CLASSES,\n primary ? PRIMARY_CLASSES : '',\n breakpoint ? FROM_CLASSES[breakpoint] : '',\n ]\n .filter(Boolean)\n .join(' ');\n};\n\n/**\n * Column header, centred in its 36px. `numeric` right-aligns and lines the digits up; `secondary`\n * (or `from`) holds a column back until the viewport is wide enough for it; `primary` makes it\n * the column that absorbs the free width and truncates; `tall` is a 40px header; `width` fixes the column width and keeps it from shrinking.\n *\n * @example\n * <th uiTh numeric secondary width=\"108px\">Quantity</th>\n */\n@Directive({\n selector: 'th[uiTh]',\n host: {\n '[class]': 'classes()',\n '[style.width]': 'width()',\n '[style.min-width]': 'width()',\n },\n})\nexport class UiTh {\n readonly width = input<string | null>(null);\n readonly numeric = input(false, { transform: booleanAttribute });\n readonly primary = input(false, { transform: booleanAttribute });\n readonly secondary = input(false, { transform: booleanAttribute });\n readonly tall = input(false, { transform: booleanAttribute });\n readonly from = input<CellBreakpoint | null>(null);\n\n protected readonly classes = computed(() =>\n cellClasses(\n `${this.tall() ? '[--table-head:2.5rem]' : '[--table-head:2.25rem]'} ${TH_CLASSES}`,\n this.numeric(),\n this.primary(),\n this.from(),\n this.secondary(),\n ),\n );\n}\n\n/** Body cell. Same inputs as `UiTh` (bar `tall` and `width`), and they must be set on both to match. */\n@Directive({\n selector: 'td[uiTd]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiTd {\n readonly numeric = input(false, { transform: booleanAttribute });\n readonly primary = input(false, { transform: booleanAttribute });\n readonly secondary = input(false, { transform: booleanAttribute });\n readonly from = input<CellBreakpoint | null>(null);\n\n protected readonly classes = computed(() =>\n cellClasses(TD_CLASSES, this.numeric(), this.primary(), this.from(), this.secondary()),\n );\n}\n\n/** Group band sizes. */\nexport const GROUP_SIZES = ['md', 'lg'] as const;\nexport type GroupSize = (typeof GROUP_SIZES)[number];\n\n/**\n * The band that opens a group of rows: name in 600 (a heading), meta beside it, the projected\n * total pinned to the right. Spans the whole row through `colspan`.\n *\n * @example\n * <tr uiTr group><td ui-group-cell colspan=\"4\" name=\"Brokerage\" meta=\"Savings plan\">...total...</td></tr>\n */\n@Component({\n selector: 'td[ui-group-cell]',\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n <div\n class=\"rounded-control flex items-center justify-between gap-4 bg-(--muted) px-2\"\n [class]=\"size() === 'lg' ? 'min-h-12' : 'min-h-11'\"\n >\n <div class=\"flex min-w-0 items-baseline gap-3\">\n <h2 class=\"text-body m-0 font-semibold whitespace-nowrap outline-none\" data-group-heading tabindex=\"-1\">\n {{ name() }}\n </h2>\n @if (meta()) {\n <span class=\"text-label truncate text-(--muted-foreground)\">{{ meta() }}</span>\n }\n </div>\n <span class=\"font-semibold whitespace-nowrap tabular-nums\"><ng-content /></span>\n </div>\n `,\n})\nexport class UiGroupCell {\n readonly name = input.required<string>();\n readonly meta = input<string>();\n readonly size = input<GroupSize>('md');\n\n protected readonly hostClasses = computed(\n () => `px-0 ${this.size() === 'lg' ? 'pt-3' : 'pt-2.5'} pb-1 align-middle text-body`,\n );\n}\n\n/**\n * Makes a link or button the way into its row. By default an invisible layer stretches over the\n * whole row, so the row is one target for the pointer, the keyboard and a screen reader, and its\n * focus ring wraps the row. With `[stretch]=\"false\"` only the name is the\n * target: it underlines on hover and takes its own ring. `current` marks the open line.\n *\n * @example\n * <td uiTd primary><a uiRowLink href=\"/lines/42\">Ferrari</a></td>\n * <td uiTd primary><a uiRowLink [stretch]=\"false\" href=\"/accounts/3\">Brokerage</a></td>\n */\n@Directive({\n selector: 'a[uiRowLink], button[uiRowLink]',\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': 'current() ? \"true\" : null',\n },\n})\nexport class UiRowLink {\n readonly stretch = input(true, { transform: booleanAttribute });\n readonly current = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n this.stretch()\n ? 'block max-w-full truncate rounded-control text-left font-medium outline-none after:absolute after:inset-0 after:rounded-control after:content-[\"\"] focus-visible:after:outline-2 focus-visible:after:-outline-offset-2 focus-visible:after:outline-(--ring)'\n : 'block max-w-full truncate rounded-sm text-left font-medium underline-offset-[3px] outline-none hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)',\n );\n}\n\n/** A control in another cell of a stretched-link row: lifts it above the layer that covers the row. */\n@Directive({\n selector: '[uiRowAction]',\n host: { class: 'relative z-1' },\n})\nexport class UiRowAction {}\n\n/** Tones of a subtitle: subtle (default), `--stale` at 500, or the color of the cell. */\nexport const SUB_TONES = ['subtle', 'stale', 'inherit'] as const;\nexport type SubTone = (typeof SUB_TONES)[number];\n\nconst SUB_TONE_CLASSES: Record<SubTone, string> = {\n subtle: 'font-normal text-(--subtle-foreground)',\n stale: 'font-medium text-(--stale)',\n inherit: 'font-normal',\n};\n\n/**\n * A second line under a cell's main text. `narrow` shows it only under 1024px, where it carries\n * the quantity, average cost and quote that were held back. Its amounts go through `ui-amount`\n * so they mask.\n *\n * @example\n * <span uiCellSub narrow>10 × 421.26 € · cost 388.10 €</span>\n * <span uiCellSub tone=\"stale\">Quote of 24/09</span>\n */\n@Directive({\n selector: '[uiCellSub]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiCellSub {\n readonly narrow = input(false, { transform: booleanAttribute });\n readonly tone = input<SubTone>('subtle');\n\n protected readonly classes = computed(\n () =>\n `${this.narrow() ? 'lg:hidden ' : ''}block truncate text-caption tabular-nums ${SUB_TONE_CLASSES[this.tone()]}`,\n );\n}\n","/*\n * Public API surface of the ui library.\n */\n\nexport { UiActionBar } from './lib/action-bar/action-bar';\nexport { ALERT_VARIANTS, UiAlert, type AlertVariant } from './lib/alert/alert';\nexport {\n AMOUNT_MASKINGS,\n AMOUNT_NUMERICS,\n UI_AMOUNT_MASKED,\n UiAmount,\n type AmountMasking,\n type AmountNumeric,\n} from './lib/amount/amount';\nexport { type AmountFormatOptions, formatAmount } from './lib/amount/format-amount';\nexport {\n ASYNC_ALIGNS,\n ASYNC_STATES,\n ASYNC_VARIANTS,\n UiAsync,\n type AsyncAlign,\n type AsyncState,\n type AsyncVariant,\n} from './lib/async/async';\nexport { AVATAR_SIZES, UiAvatar, UiAvatarLink, type AvatarSize } from './lib/avatar/avatar';\nexport { BACK_LINK_SIZES, UiBackLink, type BackLinkSize } from './lib/back-link/back-link';\nexport { BADGE_SIZES, BADGE_VARIANTS, UiBadge, type BadgeSize, type BadgeVariant } from './lib/badge/badge';\nexport { BUTTON_SIZES, BUTTON_VARIANTS, UiButton, type ButtonSize, type ButtonVariant } from './lib/button/button';\nexport {\n CARD_PADDINGS,\n CARD_SURFACES,\n CARD_VARIANTS,\n UiCard,\n type CardPadding,\n type CardSurface,\n type CardVariant,\n} from './lib/card/card';\nexport { type ChoiceChipOption, UiChoiceChips } from './lib/choice-chips/choice-chips';\nexport { type UiControlError } from './lib/control/control';\nexport {\n DELTA_EMPHASES,\n DELTA_SIZES,\n DELTA_WEIGHTS,\n UiDelta,\n type DeltaEmphasis,\n type DeltaSize,\n type DeltaWeight,\n} from './lib/delta/delta';\nexport { DIALOG_LAYOUTS, DIALOG_WIDTHS, UiDialog, type DialogLayout, type DialogWidth } from './lib/dialog/dialog';\nexport { type DonutSlice, UiDonut } from './lib/donut/donut';\nexport { UiExternalLink } from './lib/external-link/external-link';\nexport { FACT_SIZES, FACT_SUB_TONES, UiFact, UiFacts, type FactSize, type FactSubTone } from './lib/fact/fact';\nexport { UiField, UiFieldLeading, UiFieldTrailing } from './lib/field/field';\nexport { type FilterChipOption, UiFilterChips } from './lib/filter-chips/filter-chips';\nexport {\n CONTROL_SIZES,\n CONTROL_SURFACES,\n UiInput,\n UiTextarea,\n type ControlSize,\n type ControlSurface,\n} from './lib/input/input';\nexport { type AxisTicks, type ChartPoint, type TooltipSize, UiLineChart } from './lib/line-chart/line-chart';\nexport { UiMenu, UiMenuItem, UiMenuTrigger } from './lib/menu/menu';\nexport { METER_SIZES, METER_TONES, UiMeter, type MeterSize, type MeterTone } from './lib/meter/meter';\nexport { UiNavItem } from './lib/nav-item/nav-item';\nexport {\n ROW_GAPS,\n ROW_PADDINGS,\n ROW_SIZES,\n UiListRow,\n UiRow,\n UiRowItem,\n type RowGap,\n type RowPadding,\n type RowSize,\n} from './lib/row/row';\nexport { SEGMENTED_SIZES, UiSegmented, type SegmentedOption, type SegmentedSize } from './lib/segmented/segmented';\nexport { UiSelect } from './lib/select/select';\nexport { SKELETON_SHAPES, UiSkeleton, type SkeletonShape } from './lib/skeleton/skeleton';\nexport { STAT_SIZES, UiStat, type StatSize } from './lib/stat/stat';\nexport { UiSwitch } from './lib/switch/switch';\nexport { UiTab, UiTabBar } from './lib/tab-bar/tab-bar';\nexport {\n CELL_BREAKPOINTS,\n GROUP_SIZES,\n SUB_TONES,\n TABLE_ROWS,\n UiCellSub,\n UiGroup,\n UiGroupCell,\n UiRowAction,\n UiRowLink,\n UiTable,\n UiTd,\n UiTh,\n UiTr,\n type CellBreakpoint,\n type GroupSize,\n type SubTone,\n type TableRow,\n} from './lib/table/table';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BASE_CLASSES","VARIANT_CLASSES","SIZE_CLASSES","PADDING_CLASSES","CHIP_CLASSES","SELECTED_CLASSES","UNSELECTED_CLASSES","nextId","PILL_CLASSES","identityValue","ROW_CLASSES","SUB_TONE_CLASSES"],"mappings":"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"}
1
+ {"version":3,"file":"joanroucoux-cairn-ui.mjs","sources":["../../../projects/ui/src/lib/action-bar/action-bar.ts","../../../projects/ui/src/lib/alert/alert.ts","../../../projects/ui/src/lib/amount/format-amount.ts","../../../projects/ui/src/lib/amount/amount.ts","../../../projects/ui/src/lib/async/async.ts","../../../projects/ui/src/lib/avatar/avatar.ts","../../../projects/ui/src/lib/back-link/back-link.ts","../../../projects/ui/src/lib/badge/badge.ts","../../../projects/ui/src/lib/button/button.ts","../../../projects/ui/src/lib/card/card.ts","../../../projects/ui/src/lib/control/control.ts","../../../projects/ui/src/lib/input/input.ts","../../../projects/ui/src/lib/choice-chips/choice-chips.ts","../../../projects/ui/src/lib/delta/delta.ts","../../../projects/ui/src/lib/dialog/dialog.ts","../../../projects/ui/src/lib/donut/internal/donut-geometry.ts","../../../projects/ui/src/lib/donut/internal/donut-slices.ts","../../../projects/ui/src/lib/donut/donut.ts","../../../projects/ui/src/lib/external-link/external-link.ts","../../../projects/ui/src/lib/fact/fact.ts","../../../projects/ui/src/lib/field/field.ts","../../../projects/ui/src/lib/filter-chips/filter-chips.ts","../../../projects/ui/src/lib/line-chart/internal/chart-axis.ts","../../../projects/ui/src/lib/line-chart/internal/chart-interaction.ts","../../../projects/ui/src/lib/line-chart/internal/chart-layout.ts","../../../projects/ui/src/lib/line-chart/internal/chart-scale.ts","../../../projects/ui/src/lib/line-chart/internal/start-label.ts","../../../projects/ui/src/lib/line-chart/internal/transition.ts","../../../projects/ui/src/lib/line-chart/internal/viewport.ts","../../../projects/ui/src/lib/line-chart/line-chart.ts","../../../projects/ui/src/lib/menu/menu.ts","../../../projects/ui/src/lib/meter/meter.ts","../../../projects/ui/src/lib/nav-item/nav-item.ts","../../../projects/ui/src/lib/row/row.ts","../../../projects/ui/src/lib/segmented/segmented.ts","../../../projects/ui/src/lib/select/select.ts","../../../projects/ui/src/lib/skeleton/skeleton.ts","../../../projects/ui/src/lib/stat/stat.ts","../../../projects/ui/src/lib/switch/switch.ts","../../../projects/ui/src/lib/tab-bar/tab-bar.ts","../../../projects/ui/src/lib/table/table.ts","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/joanroucoux-cairn-ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n/**\n * Bar of actions fixed above the tab bar on iPhone: the primary actions of a detail screen, within\n * thumb reach. It sits 52px plus the safe area above the bottom edge, so it clears `ui-tab-bar`, and\n * it is hidden from `64rem`, where the same actions live in the page itself. Its children share the\n * width equally.\n *\n * @example\n * <ui-action-bar>\n * <button ui-button variant=\"outline\" size=\"tall\">Sell</button>\n * <button ui-button size=\"tall\">Buy</button>\n * </ui-action-bar>\n */\n@Component({\n selector: 'ui-action-bar',\n template: '<ng-content />',\n host: {\n class:\n 'fixed inset-x-0 bottom-[calc(52px+env(safe-area-inset-bottom))] z-40 grid grid-flow-col auto-cols-fr gap-2 bg-(--background) px-(--gutter) py-3 shadow-[0_-1px_0_var(--hairline)] lg:hidden',\n },\n})\nexport class UiActionBar {}\n","import { Component, computed, input } from '@angular/core';\n\nexport const ALERT_VARIANTS = ['error', 'warning'] as const;\nexport type AlertVariant = (typeof ALERT_VARIANTS)[number];\n\nconst BASE_CLASSES = 'flex items-start gap-2.5 text-left text-label';\n\nconst VARIANT_CLASSES: Record<AlertVariant, string> = {\n error: 'rounded-control bg-(--card) px-3.5 py-3 shadow-[inset_0_0_0_1px_var(--border)]',\n warning: 'text-(--foreground)',\n};\n\n/**\n * Inline message explaining a failure or a consequence: an icon, an optional heading and a text.\n *\n * @example\n * <ui-alert heading=\"Sign-in failed\">Try again.</ui-alert>\n */\n@Component({\n selector: 'ui-alert',\n template: `\n @if (variant() === 'warning') {\n <svg\n aria-hidden=\"true\"\n class=\"mt-px block flex-none stroke-(--negative)\"\n fill=\"none\"\n height=\"18\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n } @else {\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none stroke-(--negative)\"\n fill=\"none\"\n height=\"18\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n [class.mt-px]=\"heading()\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" />\n <line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\n </svg>\n }\n <div class=\"flex flex-col gap-0.5\">\n @if (heading()) {\n <span class=\"font-medium\">{{ heading() }}</span>\n }\n <span class=\"text-pretty\" [class.text-(--muted-foreground)]=\"heading()\"><ng-content /></span>\n </div>\n `,\n host: {\n '[class]': 'classes()',\n '[attr.role]': \"variant() === 'warning' ? 'status' : 'alert'\",\n },\n})\nexport class UiAlert {\n readonly variant = input<AlertVariant>('error');\n readonly heading = input<string>();\n\n protected readonly classes = computed(() => `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()]}`);\n}\n","const MINUS = '−';\nconst EM_DASH = '—';\nconst BULLETS = '••••';\n\nexport type AmountFormatOptions = {\n locale: string;\n currency?: string;\n signed?: boolean;\n fractionDigits?: number;\n};\n\n/** Formats a number or an amount for the locale, with a missing value as an em dash and masking behind four bullets. */\nexport function formatAmount(value: number | null | undefined, options: AmountFormatOptions, masked = false): string {\n if (value === null || value === undefined || Number.isNaN(value)) {\n return EM_DASH;\n }\n const digits = options.fractionDigits ?? 2;\n const format = new Intl.NumberFormat(options.locale, {\n ...(options.currency ? { style: 'currency', currency: options.currency } : {}),\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n const magnitude = Math.abs(value);\n const parts = format.formatToParts(magnitude);\n\n if (masked) {\n let replaced = false;\n return parts\n .map((part) => {\n if (['integer', 'group', 'decimal', 'fraction'].includes(part.type)) {\n if (replaced) {\n return '';\n }\n replaced = true;\n return BULLETS;\n }\n return part.value;\n })\n .join('');\n }\n\n const text = parts.map((part) => part.value).join('');\n const isZero = Number(format.format(magnitude).replace(/[^\\d]/g, '')) === 0;\n if (!options.signed || isZero) {\n return value < 0 && !isZero ? `${MINUS}${text}` : text;\n }\n return `${value > 0 ? '+' : MINUS}${text}`;\n}\n","import {\n Component,\n InjectionToken,\n LOCALE_ID,\n type Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { formatAmount } from './format-amount';\n\n/** App-wide \"amounts are hidden\" state. Defaults to never masked; the app overrides it. */\nexport const UI_AMOUNT_MASKED = new InjectionToken<Signal<boolean>>('UI_AMOUNT_MASKED', {\n providedIn: 'root',\n factory: () => signal(false),\n});\n\n/** Available figure styles. `AmountNumeric` is derived from this tuple. */\nexport const AMOUNT_NUMERICS = ['tabular', 'proportional'] as const;\nexport type AmountNumeric = (typeof AMOUNT_NUMERICS)[number];\n\n/** Available masking behaviors. `AmountMasking` is derived from this tuple. */\nexport const AMOUNT_MASKINGS = ['dots', 'hide'] as const;\nexport type AmountMasking = (typeof AMOUNT_MASKINGS)[number];\n\n/**\n * A number or an amount of money, formatted for the locale and masked when the app hides amounts.\n *\n * @example\n * <ui-amount [value]=\"total\" currency=\"EUR\" numeric=\"proportional\" />\n * <ui-amount [value]=\"dayChange\" currency=\"EUR\" signed whenMasked=\"hide\" />\n */\n@Component({\n selector: 'ui-amount',\n template: '{{ text() }}',\n host: {\n '[class]': 'classes()',\n '[attr.hidden]': 'hidden() || null',\n },\n})\nexport class UiAmount {\n readonly value = input<number | null | undefined>();\n readonly currency = input<string>();\n readonly locale = input<string>(inject(LOCALE_ID));\n readonly signed = input(false, { transform: booleanAttribute });\n readonly fractionDigits = input(2);\n readonly numeric = input<AmountNumeric>('tabular');\n readonly whenMasked = input<AmountMasking>('dots');\n\n readonly #masked = inject(UI_AMOUNT_MASKED);\n\n protected readonly hidden = computed(() => this.#masked() && this.whenMasked() === 'hide');\n\n protected readonly text = computed(() =>\n formatAmount(\n this.value(),\n {\n locale: this.locale(),\n currency: this.currency(),\n signed: this.signed(),\n fractionDigits: this.fractionDigits(),\n },\n this.#masked(),\n ),\n );\n\n protected readonly classes = computed(() => {\n const missing = this.value() === null || this.value() === undefined;\n\n return [\n 'whitespace-nowrap',\n this.numeric() === 'tabular' ? 'tabular-nums' : '',\n missing ? 'text-(--subtle-foreground)' : '',\n ]\n .filter(Boolean)\n .join(' ');\n });\n}\n","import { Component, booleanAttribute, computed, input, output } from '@angular/core';\n\n/** Available async block states. `AsyncState` is derived from this tuple. */\nexport const ASYNC_STATES = ['loading', 'error', 'empty', 'ready'] as const;\nexport type AsyncState = (typeof ASYNC_STATES)[number];\n\n/** Looks of the error block. `AsyncVariant` is derived from this tuple. */\nexport const ASYNC_VARIANTS = ['elevated', 'plain', 'emphasis', 'inline'] as const;\nexport type AsyncVariant = (typeof ASYNC_VARIANTS)[number];\n\n/** Alignments of the error block; `auto` is centred from 64rem. `AsyncAlign` is derived from this tuple. */\nexport const ASYNC_ALIGNS = ['start', 'center', 'auto'] as const;\nexport type AsyncAlign = (typeof ASYNC_ALIGNS)[number];\n\nconst RETRY_BASE_CLASSES =\n 'relative inline-flex items-center justify-center rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,opacity] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) text-label';\n\nconst RETRY_OUTLINE_CLASSES =\n 'bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow)';\n\nconst RETRY_PRIMARY_CLASSES = 'bg-(--primary) text-(--primary-foreground) hover:bg-(--primary-to)';\n\nconst RETRY_BLOCK_CLASSES = 'min-h-(--row-min) gap-2 pl-3 pr-4';\n\nconst RETRY_INLINE_CLASSES = 'h-11 pointer-fine:h-8 flex-none gap-1.5 pl-2.5 pr-3';\n\nconst ELEVATED_SURFACE_CLASSES = 'rounded-control bg-(--elevated)';\n\nconst CARD_SURFACE_CLASSES = 'rounded-container bg-(--card) shadow-[inset_0_0_0_1px_var(--border)]';\n\ntype BlockSpec = {\n surface: string;\n gap: string;\n padding: Record<AsyncAlign, string>;\n title: string;\n message: Record<AsyncAlign, string>;\n retryMargin: Record<AsyncAlign, string>;\n retry: string;\n};\n\nconst BLOCK_SPECS: Record<Exclude<AsyncVariant, 'inline'>, BlockSpec> = {\n elevated: {\n surface: ELEVATED_SURFACE_CLASSES,\n gap: 'gap-1',\n padding: { start: 'p-4', center: 'px-4 py-10', auto: 'p-4 lg:py-10' },\n title: 'text-body font-medium',\n message: { start: 'text-label', center: 'text-label', auto: 'text-label' },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n plain: {\n surface: '',\n gap: 'gap-1',\n padding: { start: 'px-4 py-5', center: 'px-4 py-12', auto: 'px-4 py-5 lg:py-12' },\n title: 'text-body leading-[normal] font-medium',\n message: {\n start: 'text-label leading-[normal]',\n center: 'text-label leading-[normal]',\n auto: 'text-label leading-[normal]',\n },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n emphasis: {\n surface: '',\n gap: 'gap-3',\n padding: { start: 'px-4 py-6', center: 'px-4 py-14', auto: 'px-4 py-6 lg:py-14' },\n title: 'text-title font-semibold',\n message: {\n start: 'text-label',\n center: 'text-body leading-[normal]',\n auto: 'text-label lg:text-body lg:leading-[normal]',\n },\n retryMargin: { start: 'mt-1', center: 'mt-2', auto: 'mt-1 lg:mt-2' },\n retry: RETRY_PRIMARY_CLASSES,\n },\n};\n\nconst ALIGN_CLASSES: Record<AsyncAlign, string> = {\n start: 'items-start',\n center: 'items-center text-center',\n auto: 'items-start lg:items-center lg:text-center',\n};\n\nconst INLINE_BOX_CLASSES = 'flex-row items-center justify-between gap-3 pt-1.5 pr-1.5 pb-2 pl-2.5';\n\n/**\n * The three states of a block that depends on a service call, next to the ready content.\n *\n * @example\n * <ui-async [state]=\"totalState()\" errorTitle=\"Total could not be loaded\" errorMessage=\"The server did not answer.\" retryLabel=\"Retry\" (retry)=\"reload()\">\n * <span asyncLoading><ui-skeleton shape=\"figure\" /></span>\n * <span asyncEmpty>Add a holding to see your total.</span>\n * <span>{{ total() }}</span>\n * </ui-async>\n */\n@Component({\n selector: 'ui-async',\n template: `\n @switch (state()) {\n @case ('loading') {\n <ng-content select=\"[asyncLoading]\" />\n }\n @case ('error') {\n <div aria-live=\"polite\" role=\"alert\" [class]=\"boxClasses()\">\n @if (variant() === 'inline') {\n <span class=\"text-label text-(--muted-foreground)\">{{ errorMessage() }}</span>\n } @else {\n @if (variant() === 'emphasis') {\n <h2 [class]=\"titleClasses()\">{{ errorTitle() }}</h2>\n } @else {\n <span [class]=\"titleClasses()\">{{ errorTitle() }}</span>\n }\n <span class=\"text-(--muted-foreground)\" [class]=\"messageClasses()\">{{ errorMessage() }}</span>\n }\n <button type=\"button\" [class]=\"retryButtonClasses()\" (click)=\"retry.emit()\">\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none fill-none stroke-current\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n [attr.height]=\"iconSize()\"\n [attr.width]=\"iconSize()\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n {{ retryLabel() }}\n </button>\n </div>\n }\n @case ('empty') {\n <ng-content select=\"[asyncEmpty]\" />\n }\n @default {\n <ng-content />\n }\n }\n `,\n host: {\n '[attr.aria-busy]': \"state() === 'loading' || null\",\n '[class.flex]': 'filling()',\n '[class.flex-col]': 'filling()',\n },\n})\nexport class UiAsync {\n readonly state = input.required<AsyncState>();\n readonly errorTitle = input<string>();\n readonly errorMessage = input<string>();\n readonly retryLabel = input<string>();\n readonly variant = input<AsyncVariant>('elevated');\n readonly align = input<AsyncAlign>('start');\n readonly card = input(false, { transform: booleanAttribute });\n readonly fill = input(false, { transform: booleanAttribute });\n readonly retry = output<void>();\n\n protected readonly filling = computed(() => this.fill() && this.state() === 'error');\n\n protected readonly iconSize = computed(() => (this.variant() === 'inline' ? 16 : 18));\n\n readonly #spec = computed(() => {\n const variant = this.variant();\n\n return variant === 'inline' ? null : BLOCK_SPECS[variant];\n });\n\n protected readonly boxClasses = computed(() => {\n const spec = this.#spec();\n const fill = this.fill() ? ' flex-1 justify-center' : '';\n\n if (spec === null) {\n return `flex ${INLINE_BOX_CLASSES}${this.card() ? ` ${CARD_SURFACE_CLASSES}` : ''}${this.fill() ? ' flex-1' : ''}`;\n }\n\n const surface = this.card() ? CARD_SURFACE_CLASSES : spec.surface;\n\n return `flex flex-col ${surface} ${spec.gap} ${ALIGN_CLASSES[this.align()]} ${spec.padding[this.align()]}${fill}`;\n });\n\n protected readonly titleClasses = computed(() => this.#spec()?.title ?? '');\n\n protected readonly messageClasses = computed(() => this.#spec()?.message[this.align()] ?? '');\n\n protected readonly retryButtonClasses = computed(() => {\n const spec = this.#spec();\n\n if (spec === null) {\n return `${RETRY_BASE_CLASSES} ${RETRY_OUTLINE_CLASSES} ${RETRY_INLINE_CLASSES}`;\n }\n\n return `${RETRY_BASE_CLASSES} ${spec.retry} ${RETRY_BLOCK_CLASSES} ${spec.retryMargin[this.align()]}`;\n });\n}\n","import { Component, Directive, computed, input } from '@angular/core';\n\n/** Available avatar sizes. `AvatarSize` is derived from this tuple. */\nexport const AVATAR_SIZES = ['sm', 'md', 'lg', 'auto'] as const;\nexport type AvatarSize = (typeof AVATAR_SIZES)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center justify-center rounded-pill bg-(--muted) font-medium tabular-nums';\n\nconst SIZE_CLASSES: Record<AvatarSize, string> = {\n sm: 'size-8 text-caption',\n md: 'size-[34px] text-label',\n lg: 'size-14 text-title',\n auto: 'size-[34px] text-label lg:size-8 lg:text-caption',\n};\n\n/**\n * Initials in a disc, standing in for a person. Single-user application: there is exactly one.\n *\n * @example\n * <ui-avatar initials=\"JR\" label=\"My account\" />\n */\n@Component({\n selector: 'ui-avatar',\n template: '<span aria-hidden=\"true\">{{ initials() }}</span>',\n host: {\n role: 'img',\n '[attr.aria-label]': 'label()',\n '[class]': 'classes()',\n },\n})\nexport class UiAvatar {\n readonly initials = input.required<string>();\n readonly label = input.required<string>();\n readonly size = input<AvatarSize>('md');\n\n protected readonly classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}`);\n}\n\n/**\n * Round hit area around a `ui-avatar` that links somewhere: 44px on touch, 40px from 64rem, with a\n * glow on hover and the press scale. The avatar itself keeps its own size.\n *\n * @example\n * <a uiAvatarLink routerLink=\"/profile\"><ui-avatar initials=\"JR\" label=\"Profile\" size=\"auto\" /></a>\n */\n@Directive({\n selector: 'a[uiAvatarLink], button[uiAvatarLink]',\n host: {\n class:\n 'rounded-pill grid size-11 lg:size-10 place-items-center cursor-pointer select-none touch-manipulation transition-[transform,background-color] duration-(--duration-press) ease-out hover:bg-(--glow) active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)',\n },\n})\nexport class UiAvatarLink {}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available back link sizes. `BackLinkSize` is derived from this tuple. */\nexport const BACK_LINK_SIZES = ['md', 'sm', 'header'] as const;\nexport type BackLinkSize = (typeof BACK_LINK_SIZES)[number];\n\nconst BASE_CLASSES =\n 'inline-flex items-center gap-0.5 rounded-control text-body font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,color] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-(--ring)';\n\nconst SIZE_CLASSES: Record<BackLinkSize, string> = {\n md: 'h-11 pr-3 pl-1 text-(--foreground) focus-visible:outline-offset-2',\n sm: 'h-9 pr-2 pl-0.5 text-(--muted-foreground) hover:bg-(--glow) hover:text-(--foreground) focus-visible:outline-offset-2',\n header: 'h-11 pr-3 pl-1 text-(--foreground) focus-visible:-outline-offset-2',\n};\n\nconst CHEVRON: Record<BackLinkSize, number> = { md: 22, sm: 22, header: 24 };\n\n/**\n * Link back to the parent screen: a chevron and the name of the destination.\n *\n * @example\n * <a ui-back-link routerLink=\"/accounts\">Accounts</a>\n */\n@Component({\n selector: 'a[ui-back-link]',\n template: `\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n [attr.height]=\"chevron()\"\n [attr.width]=\"chevron()\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n <ng-content />\n `,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiBackLink {\n readonly size = input<BackLinkSize>('md');\n\n protected readonly chevron = computed(() => CHEVRON[this.size()]);\n protected readonly classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}`);\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available badge variants. `BadgeVariant` is derived from this tuple. */\nexport const BADGE_VARIANTS = ['neutral', 'outline'] as const;\nexport type BadgeVariant = (typeof BADGE_VARIANTS)[number];\n\nexport const BADGE_SIZES = ['md', 'sm'] as const;\nexport type BadgeSize = (typeof BADGE_SIZES)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center rounded-pill text-caption font-medium';\n\nconst SIZE_CLASSES: Record<BadgeSize, string> = {\n md: 'h-6 px-2.5',\n sm: 'h-[22px] px-2',\n};\n\nconst VARIANT_CLASSES: Record<BadgeVariant, string> = {\n neutral: 'bg-(--muted) text-(--foreground)',\n outline: 'shadow-[inset_0_0_0_1px_var(--border)] text-(--foreground)',\n};\n\n/**\n * Small status descriptor for counts, states or labels, such as an instrument's asset class.\n *\n * @example\n * <ui-badge>ETF</ui-badge>\n */\n@Component({\n selector: 'ui-badge',\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiBadge {\n readonly variant = input<BadgeVariant>('neutral');\n readonly size = input<BadgeSize>('md');\n\n protected readonly classes = computed(\n () => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${VARIANT_CLASSES[this.variant()]}`,\n );\n}\n","import { Component, DestroyRef, ElementRef, booleanAttribute, computed, inject, input } from '@angular/core';\n\n/** Available button variants. `ButtonVariant` is derived from this tuple. */\nexport const BUTTON_VARIANTS = [\n 'primary',\n 'outline',\n 'ghost',\n 'destructive',\n 'quiet',\n 'quiet-destructive',\n 'outline-destructive',\n 'quiet-glow',\n 'tonal',\n] as const;\nexport type ButtonVariant = (typeof BUTTON_VARIANTS)[number];\n\n/** Available button sizes. */\nexport const BUTTON_SIZES = [\n 'compact',\n 'slim',\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'xxl',\n 'tall',\n 'block',\n 'icon',\n 'icon-sm',\n] as const;\nexport type ButtonSize = (typeof BUTTON_SIZES)[number];\n\nconst BASE_CLASSES =\n 'relative inline-flex items-center justify-center rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,opacity] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-(--ring) disabled:pointer-events-none disabled:opacity-40 aria-disabled:not-aria-busy:opacity-40';\n\nconst RING_OUTSIDE = 'focus-visible:outline-offset-2';\nconst RING_INSIDE = 'focus-visible:-outline-offset-2';\nconst OUTLINE = 'bg-(--card) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow) active:bg-(--soft)';\n\nconst VARIANT_CLASSES: Record<ButtonVariant, string> = {\n primary: `${RING_OUTSIDE} bg-(--primary) text-(--primary-foreground) hover:bg-(--primary-to)`,\n outline: `${RING_OUTSIDE} ${OUTLINE} text-(--foreground)`,\n ghost: `${RING_OUTSIDE} bg-transparent text-(--foreground) hover:bg-(--glow) active:bg-(--soft)`,\n destructive: `${RING_OUTSIDE} bg-(--destructive) text-(--destructive-foreground)`,\n tonal: `${RING_OUTSIDE} bg-(--muted) text-(--foreground) lg:bg-transparent lg:hover:bg-(--glow)`,\n 'quiet-glow': `${RING_INSIDE} bg-transparent text-(--muted-foreground) hover:bg-(--glow) hover:text-(--foreground)`,\n quiet: `${RING_INSIDE} bg-transparent text-(--muted-foreground) hover:bg-(--soft) hover:text-(--foreground) active:bg-(--soft)`,\n 'quiet-destructive': `${RING_INSIDE} bg-transparent text-(--muted-foreground) hover:bg-(--glow) hover:text-(--negative) active:bg-(--soft)`,\n 'outline-destructive': `${RING_OUTSIDE} ${OUTLINE} text-(--negative)`,\n};\n\nconst SIZE_CLASSES: Record<ButtonSize, string> = {\n compact:\n 'h-8 lg:h-7 gap-1.5 px-2.5 lg:px-2 text-label before:absolute before:-inset-x-1 before:-inset-y-1.5 lg:before:hidden',\n slim: 'h-11 lg:h-8 gap-1.5 px-2.5 text-label',\n xs: 'h-8 gap-1.5 px-2.5 text-label',\n sm: 'h-9 gap-2 px-3 text-label',\n md: 'min-h-(--row-min) gap-2 px-4 text-label has-[>svg:first-child]:pl-3',\n lg: 'h-11 gap-2 px-[18px] text-label',\n xl: 'h-[50px] gap-2 px-6 text-body',\n xxl: 'h-[52px] lg:h-11 gap-2.5 px-6 lg:px-5 text-body lg:has-[>svg:first-child]:pl-4',\n tall: 'h-12 lg:h-10 gap-2 px-4 text-body',\n block: 'h-[50px] lg:h-11 gap-2 px-4 text-body',\n icon: 'size-(--row-min) gap-2 p-0',\n 'icon-sm': 'size-11 pointer-fine:size-9 gap-2 p-0',\n};\n\n/**\n * Styled native button or anchor, applied as an attribute so the host keeps every native behavior.\n *\n * @example\n * <button ui-button variant=\"destructive\">Delete</button>\n * <button ui-button size=\"icon\" variant=\"ghost\" aria-label=\"More actions\">...</button>\n */\n@Component({\n selector: 'button[ui-button], a[ui-button]',\n template: `\n @if (loading()) {\n <span\n aria-hidden=\"true\"\n class=\"rounded-pill size-4 border-2 border-current border-r-transparent motion-safe:animate-spin\"\n ></span>\n }\n <ng-content />\n `,\n host: {\n '[class]': 'classes()',\n '[attr.aria-busy]': 'inactive() || null',\n '[attr.aria-disabled]': 'inactive() || null',\n },\n})\nexport class UiButton {\n readonly variant = input<ButtonVariant>('primary');\n readonly size = input<ButtonSize>('md');\n readonly loading = input(false, { transform: booleanAttribute });\n readonly busy = input(false, { transform: booleanAttribute });\n\n protected readonly inactive = computed(() => this.loading() || this.busy());\n\n protected readonly classes = computed(\n () =>\n `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()]} ${SIZE_CLASSES[this.size()]}${this.inactive() ? ' pointer-events-none opacity-70' : ''}`,\n );\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const guard = (event: Event): void => {\n if (this.inactive()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n host.addEventListener('click', guard, { capture: true });\n inject(DestroyRef).onDestroy(() => host.removeEventListener('click', guard, { capture: true }));\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available card variants. `CardVariant` is derived from this tuple. */\nexport const CARD_VARIANTS = ['default', 'elevated'] as const;\nexport type CardVariant = (typeof CARD_VARIANTS)[number];\n\n/** Available card paddings. `CardPadding` is derived from this tuple. */\nexport const CARD_PADDINGS = ['none', 'sm', 'md', 'list', 'rows'] as const;\nexport type CardPadding = (typeof CARD_PADDINGS)[number];\n\n/** Where the card surface (fill, border, radius) and its padding apply. `CardSurface` is derived from this tuple. */\nexport const CARD_SURFACES = ['always', 'lg', 'max-lg'] as const;\nexport type CardSurface = (typeof CARD_SURFACES)[number];\n\nconst BASE_CLASSES = 'block';\n\nconst VARIANT_CLASSES: Record<CardVariant, Record<CardSurface, string>> = {\n default: {\n always: 'rounded-container bg-(--card) shadow-[inset_0_0_0_1px_var(--border)] text-(--card-foreground)',\n lg: 'lg:rounded-container lg:bg-(--card) lg:shadow-[inset_0_0_0_1px_var(--border)] lg:text-(--card-foreground)',\n 'max-lg':\n 'max-lg:rounded-container max-lg:bg-(--card) max-lg:shadow-[inset_0_0_0_1px_var(--border)] max-lg:text-(--card-foreground)',\n },\n elevated: {\n always: 'rounded-container bg-(--elevated) shadow-[inset_0_0_0_1px_var(--hairline)] text-(--foreground)',\n lg: 'lg:rounded-container lg:bg-(--elevated) lg:shadow-[inset_0_0_0_1px_var(--hairline)] lg:text-(--foreground)',\n 'max-lg':\n 'max-lg:rounded-container max-lg:bg-(--elevated) max-lg:shadow-[inset_0_0_0_1px_var(--hairline)] max-lg:text-(--foreground)',\n },\n};\n\nconst PADDING_CLASSES: Record<CardPadding, Record<CardSurface, string>> = {\n none: {\n always: 'p-0',\n lg: 'lg:p-0',\n 'max-lg': 'max-lg:p-0',\n },\n sm: {\n always: 'p-3',\n lg: 'lg:p-3',\n 'max-lg': 'max-lg:p-3',\n },\n md: {\n always: 'p-(--inset-card)',\n lg: 'lg:p-(--inset-card)',\n 'max-lg': 'max-lg:p-(--inset-card)',\n },\n list: {\n always: 'px-2 py-3',\n lg: 'lg:px-2 lg:py-3',\n 'max-lg': 'max-lg:px-2 max-lg:py-3',\n },\n rows: {\n always: 'px-(--inset-card) py-1',\n lg: 'lg:px-(--inset-card) lg:py-1',\n 'max-lg': 'max-lg:px-(--inset-card) max-lg:py-1',\n },\n};\n\n/**\n * Surface that groups related content: a summary block, a table, a side panel. `surface` limits the\n * fill, border, radius and padding to one side of `64rem`, for a block that is a card on a desktop and\n * plain on an iPhone, or the reverse.\n *\n * @example\n * <ui-card variant=\"elevated\" padding=\"sm\">Total</ui-card>\n * <ui-card surface=\"max-lg\">Card on an iPhone, plain on a desktop</ui-card>\n */\n@Component({\n selector: 'ui-card',\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiCard {\n readonly variant = input<CardVariant>('default');\n readonly padding = input<CardPadding>('md');\n readonly surface = input<CardSurface>('always');\n\n protected readonly classes = computed(\n () =>\n `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()][this.surface()]} ${PADDING_CLASSES[this.padding()][this.surface()]}`,\n );\n}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/**\n * The part of a validation error this library reads. Angular's own `ValidationError` satisfies it,\n * which is how a Signal Forms error reaches a field without this package depending on\n * `@angular/forms`.\n */\nexport type UiControlError = { readonly message?: string };\n\n/** What a styled control offers the field wrapped around it. */\nexport type UiControl = {\n readonly errors: Signal<readonly UiControlError[]>;\n readonly touched: Signal<boolean>;\n};\n\n/**\n * Resolves to the styled control projected into a field.\n *\n * Angular's `[formField]` directive fills any input named `errors` or `touched` on the directives\n * sitting on its host element, so a control declaring them receives its own validation state with\n * nothing written at the call site. This token is how the field finds whichever control was\n * projected into it.\n */\nexport const UI_CONTROL = new InjectionToken<UiControl>('UI_CONTROL');\n","import { Directive, computed, forwardRef, input } from '@angular/core';\n\nimport { UI_CONTROL, type UiControl, type UiControlError } from '../control/control';\n\n/** Available control sizes. `md` is the 44/40px touch target; `lg` and `xl` are the 48px sheet and sign-in fields. */\nexport const CONTROL_SIZES = ['sm', 'md', 'lg', 'xl'] as const;\nexport type ControlSize = (typeof CONTROL_SIZES)[number];\n\nexport const CONTROL_BASE_CLASSES =\n 'w-full rounded-control px-3 text-body text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] transition-shadow duration-(--duration-fast) ease-out placeholder:text-(--muted-foreground) focus-visible:shadow-[inset_0_0_0_2px_var(--ring)] aria-invalid:shadow-[inset_0_0_0_2px_var(--negative)] disabled:cursor-not-allowed disabled:opacity-50';\n\nexport const CONTROL_SURFACES = ['background', 'card'] as const;\nexport type ControlSurface = (typeof CONTROL_SURFACES)[number];\n\nexport const CONTROL_SURFACE_CLASSES: Record<ControlSurface, string> = {\n background: 'bg-(--background)',\n card: 'bg-(--card)',\n};\n\nexport const CONTROL_SIZE_CLASSES: Record<ControlSize, string> = {\n sm: 'h-9',\n md: 'min-h-(--row-min)',\n lg: 'min-h-12 lg:min-h-(--row-min)',\n xl: 'h-12 lg:h-11',\n};\n\nconst SEARCH_CLASSES = '[&::-webkit-search-cancel-button]:appearance-none';\n\n/**\n * Styled native text input. A directive (not a wrapper component) so the host\n * stays a plain <input>: every forms flavor (ngModel, reactive, signal forms)\n * and every native attribute keep working without any plumbing.\n *\n * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around\n * it can show the message without any binding here.\n *\n * @example\n * <input uiInput type=\"email\" placeholder=\"you@example.com\" />\n */\n@Directive({\n selector: 'input[uiInput]',\n host: {\n '[class]': 'classes()',\n },\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiInput) }],\n})\nexport class UiInput implements UiControl {\n readonly size = input<ControlSize>('md');\n readonly surface = input<ControlSurface>('background');\n readonly errors = input<readonly UiControlError[]>([]);\n readonly touched = input(false);\n\n protected readonly classes = computed(\n () =>\n `${CONTROL_BASE_CLASSES} ${SEARCH_CLASSES} ${CONTROL_SURFACE_CLASSES[this.surface()]} ${CONTROL_SIZE_CLASSES[this.size()]}`,\n );\n}\n\n/**\n * Styled native textarea. Lives beside the input because it shares every one of its\n * classes; it takes no size, since a textarea grows from a floor instead of sitting\n * at a fixed height.\n *\n * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around\n * it can show the message without any binding here.\n *\n * @example\n * <textarea uiTextarea maxlength=\"280\"></textarea>\n */\n@Directive({\n selector: 'textarea[uiTextarea]',\n host: {\n class: `${CONTROL_BASE_CLASSES} bg-(--background) min-h-24 py-2`,\n },\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiTextarea) }],\n})\nexport class UiTextarea implements UiControl {\n readonly errors = input<readonly UiControlError[]>([]);\n readonly touched = input(false);\n}\n","import {\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n viewChildren,\n} from '@angular/core';\n\nimport { UI_CONTROL, type UiControl, type UiControlError } from '../control/control';\nimport { CONTROL_SURFACE_CLASSES, type ControlSurface } from '../input/input';\n\nexport type ChoiceChipOption = {\n value: string;\n label: string;\n};\n\nconst CHIP_CLASSES =\n 'h-10 px-3.5 pointer-fine:h-8 pointer-fine:px-3 rounded-pill text-label font-medium cursor-pointer transition-transform duration-(--duration-press) ease-out active:scale-(--press-scale) disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)';\n\nconst SELECTED_CLASSES = 'bg-(--primary) text-(--primary-foreground)';\n\nconst UNSELECTED_CLASSES = 'text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)]';\n\nconst nextId = (() => {\n let count = 0;\n\n return (): string => `ui-choice-chips-${++count}`;\n})();\n\n/**\n * Exclusive choice among a handful of named options, shown as wrapping pills: an account envelope,\n * a category, a frequency. Binds to Signal Forms with `[formField]`.\n *\n * @example\n * <ui-choice-chips label=\"Envelope\" [options]=\"envelopes\" [(value)]=\"envelope\" />\n *\n * @example\n * <ui-choice-chips label=\"Envelope\" [options]=\"envelopes\" [formField]=\"form.envelope\" />\n */\n@Component({\n selector: 'ui-choice-chips',\n template: `\n <div\n class=\"flex flex-col gap-1.5\"\n role=\"radiogroup\"\n [attr.aria-invalid]=\"invalid() || null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-required]=\"required() || null\"\n (focusout)=\"onFocusOut($event)\"\n >\n @if (label()) {\n <span class=\"text-label leading-[17px] font-medium text-(--muted-foreground)\" [id]=\"labelId\">{{\n label()\n }}</span>\n }\n\n <div class=\"flex flex-wrap gap-1.5\">\n @for (option of options(); track option.value; let index = $index) {\n <button\n #radio\n role=\"radio\"\n type=\"button\"\n [attr.aria-checked]=\"option.value === value()\"\n [attr.tabindex]=\"tabIndexFor(option.value)\"\n [class]=\"chipClasses(option.value)\"\n [disabled]=\"disabled()\"\n (click)=\"select(option.value)\"\n (keydown)=\"onKeydown($event, index)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n `,\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiChoiceChips) }],\n})\nexport class UiChoiceChips implements UiControl {\n readonly options = input.required<ChoiceChipOption[]>();\n readonly value = model.required<string>();\n readonly label = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n readonly surface = input<ControlSurface>('background');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly errors = input<readonly UiControlError[]>([]);\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly touched = input(false);\n readonly touch = output<void>();\n\n protected readonly labelId = nextId();\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly radios = viewChildren<ElementRef<HTMLButtonElement>>('radio');\n\n protected readonly labelledBy = computed(() => this.ariaLabelledby() ?? (this.label() ? this.labelId : null));\n\n protected chipClasses(optionValue: string): string {\n const state =\n optionValue === this.value()\n ? SELECTED_CLASSES\n : `${CONTROL_SURFACE_CLASSES[this.surface()]} ${UNSELECTED_CLASSES}`;\n\n return `${CHIP_CLASSES} ${state}`;\n }\n\n protected tabIndexFor(optionValue: string): number {\n const opts = this.options();\n const tabStopValue = opts.some((option) => option.value === this.value()) ? this.value() : opts[0]?.value;\n\n return optionValue === tabStopValue ? 0 : -1;\n }\n\n protected select(optionValue: string): void {\n this.value.set(optionValue);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n if (!this.#host.nativeElement.contains(event.relatedTarget as Node | null)) {\n this.touch.emit();\n }\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const opts = this.options();\n const target = {\n ArrowRight: index + 1,\n ArrowDown: index + 1,\n ArrowLeft: index - 1,\n ArrowUp: index - 1,\n Home: 0,\n End: opts.length - 1,\n }[event.key];\n\n if (target === undefined) {\n return;\n }\n event.preventDefault();\n\n const nextIndex = ((target % opts.length) + opts.length) % opts.length;\n\n this.value.set(opts[nextIndex]!.value);\n this.radios()[nextIndex]!.nativeElement.focus();\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available delta emphases. `DeltaEmphasis` is derived from this tuple. */\nexport const DELTA_EMPHASES = ['text', 'pill'] as const;\nexport type DeltaEmphasis = (typeof DELTA_EMPHASES)[number];\n\n/** Type sizes. `DeltaSize` is derived from this tuple. */\nexport const DELTA_SIZES = ['label', 'inherit'] as const;\nexport type DeltaSize = (typeof DELTA_SIZES)[number];\n\n/** Font weights. `DeltaWeight` is derived from this tuple. */\nexport const DELTA_WEIGHTS = ['medium', 'regular'] as const;\nexport type DeltaWeight = (typeof DELTA_WEIGHTS)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center gap-1 tabular-nums';\n\nconst SIZE_CLASSES: Record<DeltaSize, string> = {\n label: 'text-label',\n inherit: '',\n};\n\nconst WEIGHT_CLASSES: Record<DeltaWeight, string> = {\n medium: 'font-medium',\n regular: 'font-normal',\n};\n\nconst PILL_CLASSES = 'h-6 rounded-pill px-2';\n\ntype Sign = 'positive' | 'negative' | 'neutral' | 'unknown';\n\nconst TEXT_CLASSES: Record<Sign, string> = {\n positive: 'text-(--positive)',\n negative: 'text-(--negative)',\n neutral: 'text-(--muted-foreground)',\n unknown: 'text-(--subtle-foreground)',\n};\n\nconst PILL_BACKGROUND_CLASS = 'bg-(--soft)';\n\n/**\n * Signed amount whose sign carries meaning: a gain, a loss, or an unknown.\n *\n * A null value is not a zero: a holding with no cost basis exists, and showing 0 would falsely\n * claim a known gain of zero. Color never carries the sign on its own: the projected text must\n * already contain a + or a minus sign.\n *\n * @example\n * <ui-delta [value]=\"holding.dayChangeEur\" unknownLabel=\"Not available\">\n * {{ holding.dayChangeEur | signedMoney }}\n * </ui-delta>\n */\n@Component({\n selector: 'ui-delta',\n template: `\n @if (sign() === 'unknown') {\n <span aria-hidden=\"true\">&mdash;</span>\n <span class=\"sr-only\">{{ unknownLabel() }}</span>\n } @else {\n <ng-content />\n }\n `,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiDelta {\n readonly value = input.required<number | null | undefined>();\n readonly unknownLabel = input.required<string>();\n readonly emphasis = input<DeltaEmphasis>('text');\n readonly size = input<DeltaSize>('label');\n readonly weight = input<DeltaWeight>('medium');\n\n protected readonly sign = computed<Sign>(() => {\n const value = this.value();\n\n if (value === null || value === undefined) {\n return 'unknown';\n }\n if (value > 0) {\n return 'positive';\n }\n if (value < 0) {\n return 'negative';\n }\n return 'neutral';\n });\n\n protected readonly classes = computed(() => {\n const sign = this.sign();\n const background = this.emphasis() === 'pill' ? `${PILL_CLASSES} ${PILL_BACKGROUND_CLASS}` : 'bg-transparent';\n\n return `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${WEIGHT_CLASSES[this.weight()]} ${TEXT_CLASSES[sign]} ${background}`;\n });\n}\n","import {\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\n/** Named dialog widths; any other CSS length is accepted as is. `DialogWidth` is derived from this tuple. */\nexport const DIALOG_WIDTHS = ['md', 'lg'] as const;\nexport type DialogWidth = (typeof DIALOG_WIDTHS)[number];\n\nconst WIDTH_VALUES: Record<DialogWidth, string> = {\n md: '28rem',\n lg: '560px',\n};\n\n/** Spacing presets. `DialogLayout` is derived from this tuple. */\nexport const DIALOG_LAYOUTS = ['trade', 'form', 'list', 'confirm'] as const;\nexport type DialogLayout = (typeof DIALOG_LAYOUTS)[number];\n\ntype LayoutClasses = {\n dialog: string;\n header: string;\n title: string;\n cross: string;\n icon: string;\n handle: string;\n body: string;\n footer: string;\n};\n\nconst LAYOUTS: Record<DialogLayout, LayoutClasses> = {\n trade: {\n dialog: '',\n header: 'items-start lg:pt-6',\n title: 'pt-1 lg:pt-0',\n cross: 'lg:-mt-1.5',\n icon: 'lg:size-5',\n handle: 'pt-[7.5px]',\n body: 'pt-3 pb-4 lg:pt-5 lg:pb-5',\n footer: 'max-lg:pb-[calc(8px+env(safe-area-inset-bottom))] lg:pb-6',\n },\n form: {\n dialog: '',\n header: 'items-center lg:pt-6',\n title: '',\n cross: '',\n icon: 'lg:size-[22px]',\n handle: 'pt-[7.5px]',\n body: 'pt-2 pb-5 lg:pt-4 lg:pb-5',\n footer: 'max-lg:pb-[calc(12px+env(safe-area-inset-bottom))] lg:pb-5',\n },\n list: {\n dialog: 'max-lg:h-[calc(100dvh-58px)] lg:mt-24 lg:mb-auto lg:max-h-[min(760px,calc(100dvh-96px-32px))]',\n header: 'items-center lg:pt-5',\n title: '',\n cross: '',\n icon: 'lg:size-[22px]',\n handle: 'pt-[7.5px]',\n body: 'pt-2 pb-4 lg:pt-4 lg:pb-5',\n footer: 'pt-3 shadow-[0_-1px_0_var(--hairline)] max-lg:pb-[calc(8px+env(safe-area-inset-bottom))] lg:pt-4 lg:pb-4',\n },\n confirm: {\n dialog: '',\n header: 'items-center pt-3 lg:pt-6',\n title: '',\n cross: '',\n icon: 'lg:size-[22px]',\n handle: 'pt-[11.5px]',\n body: 'pt-3 pb-5 lg:pt-3 lg:pb-6',\n footer: 'max-lg:pb-[calc(8px+env(safe-area-inset-bottom))] lg:pb-6',\n },\n};\n\nconst nextId = (() => {\n let count = 0;\n\n return () => `ui-dialog-${++count}`;\n})();\n\n/**\n * Modal dialog on the native <dialog>: a bottom sheet under `64rem`, centered above it.\n *\n * @example\n * <ui-dialog heading=\"Buy\" description=\"Ferrari\" closeLabel=\"Close\" width=\"528px\" [open]=\"buying()\" (dismissed)=\"buying.set(false)\">\n * <p>Body</p>\n * <button dialogActions ui-button variant=\"outline\" class=\"max-lg:hidden\" (click)=\"buying.set(false)\">Cancel</button>\n * <button dialogActions ui-button>Buy 40 shares</button>\n * </ui-dialog>\n */\n@Component({\n selector: 'ui-dialog',\n host: { '(pointerdown)': 'onPointerDown($event)', '(click)': 'onClick($event)' },\n template: `\n <dialog\n #dlg\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-labelledby]=\"headingId\"\n [attr.role]=\"layout() === 'confirm' ? 'alertdialog' : 'dialog'\"\n [class]=\"classes()\"\n [style.--dialog-width]=\"widthValue()\"\n (close)=\"onNativeClose()\"\n >\n <div aria-hidden=\"true\" class=\"flex h-5 justify-center lg:hidden\" data-dialog-handle [class]=\"spec().handle\">\n <span class=\"rounded-pill h-[5px] w-9 bg-(--border)\"></span>\n </div>\n\n <div data-dialog-header [class]=\"headerClasses()\">\n <div class=\"flex min-w-0 flex-1 flex-col\" [class]=\"titleClasses()\">\n <h2 class=\"text-title font-semibold\" [id]=\"headingId\">{{ heading() }}</h2>\n\n @if (description()) {\n <p\n class=\"text-label text-(--muted-foreground)\"\n [class.truncate]=\"truncateDescription()\"\n [id]=\"descriptionId\"\n >\n {{ description() }}\n </p>\n }\n </div>\n\n @if (closeLabel()) {\n <button type=\"button\" [attr.aria-label]=\"closeLabel()\" [class]=\"crossClasses()\" (click)=\"dlg.close()\">\n <svg\n aria-hidden=\"true\"\n class=\"block size-[22px] fill-none stroke-current stroke-[1.75]\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n [class]=\"iconClasses()\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n </div>\n\n <div\n class=\"min-h-0 flex-1 overflow-y-auto px-4 outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) lg:px-6\"\n data-dialog-body\n [attr.aria-labelledby]=\"scrollable() ? headingId : null\"\n [attr.role]=\"scrollable() ? 'region' : null\"\n [attr.tabindex]=\"scrollable() ? 0 : null\"\n [id]=\"bodyId\"\n >\n <!-- empty:hidden keeps a body-less dialog from carrying the body's vertical padding. -->\n <div class=\"flex flex-col gap-4 empty:hidden\" [class]=\"spec().body\">\n <ng-content />\n </div>\n </div>\n\n <div data-dialog-footer [class]=\"footerClasses()\">\n <ng-content select=\"[dialogActions]\" />\n </div>\n </dialog>\n `,\n styles: `\n dialog {\n --dialog-ease: var(--ease-sheet);\n transition:\n opacity var(--duration-base) var(--dialog-ease),\n transform var(--duration-base) var(--dialog-ease),\n overlay var(--duration-base) allow-discrete,\n display var(--duration-base) allow-discrete;\n opacity: 1;\n transform: translateY(0);\n }\n\n dialog:not([open]) {\n opacity: 0;\n transform: translateY(100%);\n transition-duration: var(--duration-exit);\n }\n\n @starting-style {\n dialog[open] {\n opacity: 0;\n transform: translateY(100%);\n }\n }\n\n @media (min-width: 64rem) {\n dialog {\n --dialog-ease: var(--ease-out);\n transform: scale(1);\n }\n\n dialog:not([open]) {\n transform: scale(var(--enter-scale));\n }\n\n @starting-style {\n dialog[open] {\n transform: scale(var(--enter-scale));\n }\n }\n }\n\n dialog::backdrop {\n transition: opacity var(--duration-base) var(--ease-out);\n opacity: 1;\n }\n\n dialog:not([open])::backdrop {\n opacity: 0;\n transition-duration: var(--duration-exit);\n }\n\n @starting-style {\n dialog[open]::backdrop {\n opacity: 0;\n }\n }\n `,\n})\nexport class UiDialog {\n readonly heading = input.required<string>();\n readonly description = input<string>();\n readonly closeLabel = input<string>();\n readonly layout = input<DialogLayout>('trade');\n readonly truncateDescription = input(false, { transform: booleanAttribute });\n readonly width = input<DialogWidth | (string & {})>('lg');\n readonly open = input(false, { transform: booleanAttribute });\n readonly dismissed = output<void>();\n\n protected readonly headingId = nextId();\n protected readonly descriptionId = `${this.headingId}-description`;\n protected readonly bodyId = `${this.headingId}-body`;\n protected readonly scrollable = signal(false);\n\n protected readonly describedBy = computed(() => {\n if (this.description()) {\n return this.descriptionId;\n }\n\n return this.layout() === 'confirm' ? this.bodyId : null;\n });\n\n protected readonly widthValue = computed(() => {\n const width = this.width();\n\n return Object.hasOwn(WIDTH_VALUES, width) ? WIDTH_VALUES[width as DialogWidth] : width;\n });\n\n protected readonly spec = computed(() => LAYOUTS[this.layout()]);\n\n protected readonly headerClasses = computed(\n () =>\n `flex gap-2 pl-4 lg:gap-3 lg:pl-6 ${this.spec().header} ${this.closeLabel() ? 'pr-2 lg:pr-4' : 'pr-4 lg:pr-6'}`,\n );\n\n protected readonly titleClasses = computed(() => this.spec().title);\n\n protected readonly crossClasses = computed(\n () =>\n `rounded-pill lg:rounded-control grid size-11 flex-none cursor-pointer place-items-center text-(--muted-foreground) transition-[transform,background-color,color] duration-(--duration-press) ease-out outline-none focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-(--ring) active:scale-(--press-scale) active:bg-(--soft) lg:size-9 lg:hover:bg-(--glow) lg:hover:text-(--foreground) ${this.spec().cross}`,\n );\n\n protected readonly iconClasses = computed(() => this.spec().icon);\n\n protected readonly footerClasses = computed(\n () =>\n `max-lg:[&>[ui-button]]:text-body flex justify-end gap-2 px-4 empty:hidden max-lg:flex-col-reverse max-lg:[&>[ui-button]]:h-[50px] max-lg:[&>[ui-button]]:w-full lg:px-6 ${this.spec().footer}`,\n );\n\n protected readonly classes = computed(\n () =>\n `open:flex w-full flex-col overflow-hidden m-auto mt-auto max-h-[calc(100dvh-2rem)] max-lg:mb-0 max-lg:max-w-none max-lg:rounded-b-none lg:max-w-(--dialog-width) rounded-container bg-(--card) text-(--foreground) shadow-[0_0_0_1px_var(--border),0_24px_64px_rgb(0_0_0/0.24)] max-lg:shadow-[0_-1px_0_var(--border),0_-12px_32px_rgb(0_0_0/0.16)] backdrop:bg-black/[0.36] ${this.spec().dialog}`,\n );\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const body = this.#host.nativeElement.querySelector('[data-dialog-body]') as HTMLElement;\n const observer = new ResizeObserver(() => this.scrollable.set(body.scrollHeight > body.clientHeight));\n\n observer.observe(body);\n observer.observe(body.firstElementChild as Element);\n destroyRef.onDestroy(() => observer.disconnect());\n });\n\n afterRenderEffect(() => {\n // viewChild.required can't target a #private field (NG1053); safe because the template has exactly one <dialog>.\n const dialog = this.#host.nativeElement.querySelector('dialog') as HTMLDialogElement;\n\n if (this.open() && !dialog.open) {\n dialog.showModal();\n } else if (!this.open() && dialog.open) {\n dialog.close();\n }\n });\n }\n\n #pressedOnBackdrop = false;\n\n protected onPointerDown(event: MouseEvent): void {\n this.#pressedOnBackdrop = event.target === this.#dialog && this.#outside(event);\n }\n\n protected onClick(event: MouseEvent): void {\n if (this.#pressedOnBackdrop && event.target === this.#dialog && this.#outside(event)) {\n this.#dialog.close();\n }\n this.#pressedOnBackdrop = false;\n }\n\n get #dialog(): HTMLDialogElement {\n return this.#host.nativeElement.querySelector('dialog') as HTMLDialogElement;\n }\n\n #outside(event: MouseEvent): boolean {\n const rect = this.#dialog.getBoundingClientRect();\n\n return (\n event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom\n );\n }\n\n protected onNativeClose(): void {\n // The owner already knows about a close it asked for; only a close it did not ask for is news.\n if (this.open()) {\n this.dismissed.emit();\n }\n }\n}\n","import type { RankedSlice } from './donut-slices';\n\nexport type PositionedSlice = RankedSlice & { dash: string; offset: string };\n\nexport const RADIUS = 78;\nexport const RING_WIDTH = 30;\nexport const ACTIVE_RING_WIDTH = 38;\nexport const CIRCUMFERENCE = 2 * Math.PI * RADIUS;\n\nconst GAP = 2;\n\nexport function positionSlices(slices: RankedSlice[]): PositionedSlice[] {\n let travelled = 0;\n\n return slices.map((slice) => {\n const length = slice.share * CIRCUMFERENCE;\n const drawn = Math.max(0, length - GAP);\n const positioned = {\n ...slice,\n dash: `${drawn.toFixed(2)} ${(CIRCUMFERENCE - drawn).toFixed(2)}`,\n offset: (-travelled).toFixed(2),\n };\n travelled += length;\n\n return positioned;\n });\n}\n","export type DonutSlice = {\n id: string;\n label: string;\n value: number;\n sublabel?: string;\n};\n\nexport type Ramp = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type SharedSlice = DonutSlice & { share: number };\n\nexport type RankedSlice = DonutSlice & { share: number; ramp: Ramp; members: string[] };\n\nconst MAX_RAMP = 6;\nconst OTHERS_ID = 'others';\n\nexport function shareSlices(slices: DonutSlice[]): SharedSlice[] {\n const positive = slices.filter((slice) => slice.value > 0).sort((a, b) => b.value - a.value);\n const total = positive.reduce((sum, slice) => sum + slice.value, 0);\n\n return positive.map((slice) => ({ ...slice, share: slice.value / total }));\n}\n\nexport function rankSlices(slices: DonutSlice[], othersLabel: string): RankedSlice[] {\n const shared = shareSlices(slices);\n\n const toRanked = (slice: SharedSlice, ramp: Ramp, members: string[] = []): RankedSlice => ({\n ...slice,\n ramp,\n members,\n });\n\n if (shared.length <= MAX_RAMP) {\n return shared.map((slice, index) => toRanked(slice, (index + 1) as Ramp));\n }\n\n const kept = shared.slice(0, MAX_RAMP - 1);\n const rest = shared.slice(MAX_RAMP - 1);\n const othersValue = rest.reduce((sum, slice) => sum + slice.value, 0);\n const othersShare = rest.reduce((sum, slice) => sum + slice.share, 0);\n\n return [\n ...kept.map((slice, index) => toRanked(slice, (index + 1) as Ramp)),\n toRanked(\n { id: OTHERS_ID, label: othersLabel, value: othersValue, share: othersShare },\n MAX_RAMP,\n rest.map((slice) => slice.label),\n ),\n ];\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, output, signal } from '@angular/core';\n\nimport { ACTIVE_RING_WIDTH, RADIUS, RING_WIDTH, positionSlices } from './internal/donut-geometry';\nimport { type DonutSlice, type Ramp, type RankedSlice, rankSlices, shareSlices } from './internal/donut-slices';\n\nexport type { DonutSlice };\n\nconst identityValue = (value: number): string => `${value}`;\nconst identityShare = (share: number): string => `${Math.round(share * 100)}%`;\n\nconst ROW_CLASSES =\n 'flex w-full items-center gap-3 min-h-14 px-2 py-1 [font-variant-numeric:var(--numeric)] rounded-control text-left transition-colors duration-(--duration-fast) ease-out hover:bg-(--glow) active:bg-(--soft) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst RAMP_DOT_CLASSES: Record<Ramp, string> = {\n 1: 'bg-(--ramp-1)',\n 2: 'bg-(--ramp-2)',\n 3: 'bg-(--ramp-3)',\n 4: 'bg-(--ramp-4)',\n 5: 'bg-(--ramp-5)',\n 6: 'bg-(--ramp-6)',\n};\n\n/**\n * A ring chart with a legend: slices rank from largest to smallest on a grey ramp, and hovering,\n * focusing or activating a legend row highlights its slice and centres it in the ring.\n *\n * @example\n * <ui-donut [slices]=\"byAssetClass()\" label=\"Par classe d'actif\" othersLabel=\"Autres\" [valueFormat]=\"formatEur\" [shareFormat]=\"formatShare\" (sliceSelect)=\"goToHoldings($event)\" />\n */\n@Component({\n selector: 'ui-donut',\n template: `\n <div class=\"relative size-[232px] flex-none sm:size-60\">\n <svg class=\"block h-full w-full -rotate-90\" role=\"img\" viewBox=\"0 0 200 200\" [attr.aria-label]=\"ariaLabel()\">\n <circle\n class=\"stroke-(--muted)\"\n cx=\"100\"\n cy=\"100\"\n fill=\"none\"\n [attr.r]=\"radius\"\n [attr.stroke-width]=\"ringWidth\"\n />\n @for (slice of positioned(); track slice.id) {\n <circle\n class=\"cursor-pointer transition-[stroke-width] duration-(--duration-fast) ease-out\"\n cx=\"100\"\n cy=\"100\"\n data-slice\n fill=\"none\"\n [attr.r]=\"radius\"\n [attr.stroke-dasharray]=\"slice.dash\"\n [attr.stroke-dashoffset]=\"slice.offset\"\n [style.stroke]=\"strokeColor(slice)\"\n [style.stroke-width.px]=\"strokeWidth(slice)\"\n (click)=\"select(slice)\"\n (pointerenter)=\"highlight(slice.id)\"\n (pointerleave)=\"clearHighlight(slice.id)\"\n />\n }\n </svg>\n\n @if (active(); as slice) {\n <div\n class=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center px-12 text-center\"\n data-testid=\"donut-centre\"\n >\n <span class=\"text-label max-w-full truncate font-medium whitespace-nowrap text-(--muted-foreground)\">{{\n slice.label\n }}</span>\n <span class=\"text-heading font-semibold tracking-(--tracking-display)\">{{ shareFormat()(slice.share) }}</span>\n <span class=\"text-caption tracking-normal text-(--muted-foreground) [font-variant-numeric:var(--numeric)]\">{{\n valueFormat()(slice.value)\n }}</span>\n </div>\n }\n </div>\n\n <div class=\"flex w-full min-w-0 flex-1 flex-col sm:w-auto\" data-testid=\"donut-legend\">\n @for (slice of ranked(); track slice.id) {\n @if (hrefFor(slice.id); as href) {\n <a\n [attr.href]=\"href\"\n [class]=\"rowClasses(slice)\"\n (blur)=\"clearHighlight(slice.id)\"\n (click)=\"follow($event, slice)\"\n (focus)=\"highlight(slice.id)\"\n (pointerenter)=\"highlight(slice.id)\"\n (pointerleave)=\"clearHighlight(slice.id)\"\n >\n <ng-container *ngTemplateOutlet=\"rowContent; context: { $implicit: slice }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"rowClasses(slice)\"\n (blur)=\"clearHighlight(slice.id)\"\n (click)=\"select(slice)\"\n (focus)=\"highlight(slice.id)\"\n (pointerenter)=\"highlight(slice.id)\"\n (pointerleave)=\"clearHighlight(slice.id)\"\n >\n <ng-container *ngTemplateOutlet=\"rowContent; context: { $implicit: slice }\" />\n </button>\n }\n }\n </div>\n\n <ng-template #rowContent let-slice>\n <span [class]=\"dotClasses(slice)\"></span>\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"text-body truncate font-medium\">{{ slice.label }}</span>\n <span class=\"text-caption truncate tracking-(--tracking-caption) text-(--subtle-foreground)\">{{\n subLabel(slice)\n }}</span>\n </span>\n <span class=\"flex flex-none flex-col items-end whitespace-nowrap\">\n <span class=\"text-body font-medium\">{{ shareFormat()(slice.share) }}</span>\n <span class=\"text-caption tracking-normal text-(--muted-foreground)\">{{ valueFormat()(slice.value) }}</span>\n </span>\n </ng-template>\n `,\n imports: [NgTemplateOutlet],\n host: {\n class: 'flex flex-col items-center gap-3 sm:flex-row sm:items-center sm:gap-8',\n },\n})\nexport class UiDonut {\n readonly slices = input.required<DonutSlice[]>();\n readonly label = input.required<string>();\n readonly othersLabel = input.required<string>();\n readonly valueFormat = input<(value: number) => string>(identityValue);\n readonly shareFormat = input<(share: number) => string>(identityShare);\n\n readonly legendHref = input<((id: string) => string | null) | undefined>();\n\n readonly sliceSelect = output<DonutSlice['id']>();\n\n protected readonly activeId = signal<string | null>(null);\n\n protected readonly ranked = computed(() => rankSlices(this.slices(), this.othersLabel()));\n protected readonly positioned = computed(() => positionSlices(this.ranked()));\n\n protected readonly active = computed<RankedSlice | null>(() => {\n const ranked = this.ranked();\n const id = this.activeId();\n\n return ranked.find((slice) => slice.id === id) ?? ranked[0] ?? null;\n });\n\n protected readonly ariaLabel = computed(() => {\n const detail = shareSlices(this.slices())\n .map((slice) => `${slice.label} ${this.shareFormat()(slice.share)}`)\n .join(', ');\n\n return detail ? `${this.label()} : ${detail}` : this.label();\n });\n\n protected readonly radius = RADIUS;\n protected readonly ringWidth = RING_WIDTH;\n\n protected strokeColor(slice: RankedSlice): string {\n return `var(--ramp-${slice.ramp})`;\n }\n\n protected strokeWidth(slice: RankedSlice): number {\n return this.isActive(slice) ? ACTIVE_RING_WIDTH : RING_WIDTH;\n }\n\n protected dotClasses(slice: RankedSlice): string {\n return `size-3 flex-none rounded-pill shadow-[inset_0_0_0_1px_var(--border)] ${RAMP_DOT_CLASSES[slice.ramp]}`;\n }\n\n protected rowClasses(slice: RankedSlice): string {\n return `${ROW_CLASSES}${this.isActive(slice) ? ' bg-(--soft)' : ''}`;\n }\n\n protected subLabel(slice: RankedSlice): string {\n return slice.members.length > 0 ? slice.members.join(', ') : (slice.sublabel ?? '');\n }\n\n protected isActive(slice: RankedSlice): boolean {\n return this.active()?.id === slice.id;\n }\n\n protected highlight(id: string): void {\n this.activeId.set(id);\n }\n\n protected clearHighlight(id: string): void {\n if (this.activeId() === id) {\n this.activeId.set(null);\n }\n }\n\n protected hrefFor(id: string): string | null {\n return this.legendHref()?.(id) ?? null;\n }\n\n protected follow(event: MouseEvent, slice: RankedSlice): void {\n if (event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n event.preventDefault();\n this.select(slice);\n }\n\n protected select(slice: RankedSlice): void {\n this.activeId.set(slice.id);\n this.sliceSelect.emit(slice.id);\n }\n}\n","import { Component } from '@angular/core';\n\n/**\n * Link to another site: the label followed by an external-link icon. A 44px target on touch,\n * an underline on hover with a mouse.\n *\n * @example\n * <a ui-external-link href=\"https://example.com\" target=\"_blank\" rel=\"noopener\">Page on example.com</a>\n */\n@Component({\n selector: 'a[ui-external-link]',\n template: `\n <ng-content />\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"14\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n >\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n `,\n host: {\n class:\n 'inline-flex min-h-11 items-center gap-1.5 rounded-[4px] text-label leading-[17px] font-medium lg:min-h-0 hover:underline underline-offset-3 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) [&>svg]:flex-none',\n },\n})\nexport class UiExternalLink {}\n","import { Component, Directive, booleanAttribute, computed, input } from '@angular/core';\n\n/** Available fact row sizes. `FactSize` is derived from this tuple. */\nexport const FACT_SIZES = ['md', 'sm', 'auto'] as const;\nexport type FactSize = (typeof FACT_SIZES)[number];\n\n/** Colour of the line under a fact value. `stale` flags an out-of-date figure. */\nexport const FACT_SUB_TONES = ['subtle', 'stale'] as const;\nexport type FactSubTone = (typeof FACT_SUB_TONES)[number];\n\nconst SIZE_CLASSES: Record<FactSize, { row: string; value: string }> = {\n md: { row: 'py-3 [&:not(:first-child)]:shadow-[inset_0_1px_0_var(--hairline)]', value: 'text-body' },\n sm: { row: 'py-2.5', value: 'text-label' },\n auto: {\n row: 'py-3 lg:py-2.5 max-lg:[&:not(:first-child)]:shadow-[inset_0_1px_0_var(--hairline)]',\n value: 'text-body lg:text-label',\n },\n};\n\nconst SUB_TONE_CLASSES: Record<FactSubTone, string> = {\n subtle: 'text-(--subtle-foreground)',\n stale: 'text-(--stale)',\n};\n\n/**\n * The list that holds `div[ui-fact]` rows, as a native description list.\n *\n * @example\n * <dl uiFacts>\n * <div ui-fact label=\"Quantity\">500</div>\n * <div ui-fact label=\"Price\" sub=\"24/09 · Yahoo\">28,64 €</div>\n * </dl>\n */\n@Directive({\n selector: 'dl[uiFacts]',\n host: { '[class]': 'classes()' },\n})\nexport class UiFacts {\n readonly ruled = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n this.ruled() ? 'm-0 flex flex-col shadow-[inset_0_1px_0_var(--hairline)]' : 'm-0 flex flex-col',\n );\n}\n\n/**\n * One fact of a `dl[uiFacts]`: a label on the left, its value on the right, an optional sub-line\n * under the value, and a hairline above every row but the first at the `md` size (the `sm` desktop list is separated by space only). The projected content is the value.\n *\n * @example\n * <div ui-fact label=\"Price\" sub=\"24/09 · Yahoo\" subTone=\"stale\">28,64 €</div>\n */\n@Component({\n selector: 'div[ui-fact]',\n template: `\n <dt class=\"text-label text-(--muted-foreground)\">{{ label() }}</dt>\n <dd class=\"m-0 flex flex-col items-end text-right\">\n <span [class]=\"valueClasses()\"><ng-content /></span>\n @if (sub()) {\n <span [class]=\"subClasses()\">{{ sub() }}</span>\n }\n </dd>\n `,\n host: { '[class]': 'classes()' },\n})\nexport class UiFact {\n readonly label = input.required<string>();\n readonly sub = input<string>();\n readonly subTone = input<FactSubTone>('subtle');\n readonly size = input<FactSize>('md');\n\n protected readonly classes = computed(\n () => `flex items-baseline justify-between gap-4 ${SIZE_CLASSES[this.size()].row}`,\n );\n protected readonly valueClasses = computed(() => `${SIZE_CLASSES[this.size()].value} tabular-nums`);\n protected readonly subClasses = computed(() => `text-caption ${SUB_TONE_CLASSES[this.subTone()]}`);\n}\n","import {\n Component,\n Directive,\n ElementRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n} from '@angular/core';\n\nimport { UI_CONTROL } from '../control/control';\n\nconst nextId = (() => {\n let count = 0;\n\n return (): string => `ui-field-${++count}`;\n})();\n\n/**\n * Marks an element, typically an 18px svg icon, as the leading content of a `ui-field`: it sits\n * inside the control's left edge and the control's text is inset to clear it. Decorative, so hidden\n * from assistive technologies.\n *\n * @example\n * <ui-field label=\"Search\" labelHidden>\n * <svg uiFieldLeading width=\"18\" height=\"18\" viewBox=\"0 0 24 24\">...</svg>\n * <input uiInput type=\"search\" />\n * </ui-field>\n */\n@Directive({\n selector: '[uiFieldLeading]',\n host: {\n class: 'pointer-events-none absolute left-3 flex text-(--muted-foreground)',\n 'aria-hidden': 'true',\n },\n})\nexport class UiFieldLeading {}\n\n/**\n * Marks an element, typically an icon button, as the trailing action of a `ui-field`: it sits on the\n * control's right edge, square to the control's height, and the control's text is padded to clear it.\n *\n * @example\n * <ui-field label=\"Password\">\n * <input uiInput type=\"password\" size=\"xl\" />\n * <button uiFieldTrailing type=\"button\" aria-label=\"Show the password\" [attr.aria-pressed]=\"shown()\">...</button>\n * </ui-field>\n *\n * A toggle such as this one should carry `aria-pressed`. The slot shares the right edge with `unit`:\n * set one or the other, not both.\n */\n@Directive({\n selector: '[uiFieldTrailing]',\n host: {\n class:\n 'absolute right-0 grid h-full aspect-square place-items-center rounded-control cursor-pointer text-(--muted-foreground) hover:text-(--foreground) focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-(--ring)',\n },\n})\nexport class UiFieldTrailing {}\n\n/**\n * Label, control, hint and error as one unit. The control stays a plain native element:\n * the field finds it in its own projected content and wires the ARIA attributes onto it.\n *\n * The message comes from the caller's `error`, or, where none is set, from the projected control's\n * own validation state once it is touched.\n *\n * @example\n * <ui-field label=\"Quantity\" hint=\"Leave empty if unknown\">\n * <input uiInput type=\"number\" [formField]=\"form.quantity\" />\n * </ui-field>\n *\n * @example\n * <ui-field label=\"ISIN or name\" [error]=\"blank() ? 'Enter an ISIN' : undefined\">\n * <input uiInput type=\"search\" />\n * </ui-field>\n *\n * @example\n * <ui-field label=\"Search holdings\" labelHidden>\n * <input uiInput type=\"search\" placeholder=\"Instrument or account\" />\n * </ui-field>\n */\n@Component({\n selector: 'ui-field',\n template: `\n <div class=\"group flex flex-col gap-1.5\">\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -- htmlFor is wired at runtime, once the projected control's id is known -->\n <label [class]=\"labelClasses()\"\n >{{ label() }}\n @if (optional()) {\n {{ ' ' }}<span class=\"font-normal text-(--subtle-foreground)\">{{ optional() }}</span>\n }\n </label>\n\n <div [class]=\"rowClasses()\">\n <ng-content select=\"[uiFieldLeading]\" />\n <ng-content />\n <ng-content select=\"[uiFieldTrailing]\" />\n @if (unit()) {\n <span class=\"text-label pointer-events-none absolute right-3 text-(--subtle-foreground)\">{{ unit() }}</span>\n }\n </div>\n\n @if (hint()) {\n <span class=\"text-label text-(--muted-foreground)\" [id]=\"hintId\">{{ hint() }}</span>\n }\n\n @if (message()) {\n <p class=\"text-label font-medium text-(--negative)\" role=\"alert\" [id]=\"errorId\">{{ message() }}</p>\n }\n </div>\n `,\n})\nexport class UiField {\n readonly label = input.required<string>();\n readonly labelHidden = input(false, { transform: booleanAttribute });\n readonly hint = input<string>();\n readonly error = input<string>();\n readonly unit = input<string>();\n readonly optional = input<string>();\n readonly invalid = input(false, { transform: booleanAttribute });\n\n readonly #id = nextId();\n protected readonly hintId = `${this.#id}-hint`;\n protected readonly errorId = `${this.#id}-error`;\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly control = contentChild(UI_CONTROL);\n protected readonly leading = contentChild(UiFieldLeading);\n\n protected readonly trailing = contentChild(UiFieldTrailing);\n\n protected readonly rowClasses = computed(() =>\n [\n 'relative flex items-center',\n this.leading() ? '[&>input]:pl-[38px]' : '',\n this.trailing() ? '[&>input]:pr-12 lg:[&>input]:pr-11' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n protected readonly labelClasses = computed(() =>\n this.labelHidden() ? 'sr-only' : 'text-label leading-[17px] font-medium text-(--muted-foreground)',\n );\n\n /**\n * The caller's own `error` wins: it is the only way to report something the control does not\n * know about, such as a search box refusing an empty query.\n */\n protected readonly message = computed(() => {\n const explicit = this.error();\n\n if (explicit) {\n return explicit;\n }\n\n const control = this.control();\n\n if (!control?.touched()) {\n return undefined;\n }\n\n return control.errors().find((error) => error.message)?.message;\n });\n\n constructor() {\n let markedByField = false;\n\n afterRenderEffect(() => {\n // querySelector, not viewChild.required, so the \"no control found\" guard below stays reachable and testable.\n const control = this.#host.nativeElement.querySelector<HTMLElement>('input, select, textarea');\n\n if (!control) {\n return;\n }\n\n control.id ||= this.#id;\n this.#host.nativeElement.querySelector('label')!.htmlFor = control.id;\n\n const describedBy = [this.hint() ? this.hintId : null, this.message() ? this.errorId : null].filter(Boolean);\n\n if (describedBy.length > 0) {\n control.setAttribute('aria-describedby', describedBy.join(' '));\n } else {\n control.removeAttribute('aria-describedby');\n }\n\n if (this.message() || this.invalid()) {\n control.setAttribute('aria-invalid', 'true');\n markedByField = true;\n } else if (markedByField) {\n control.removeAttribute('aria-invalid');\n markedByField = false;\n }\n });\n }\n}\n","import { Component, input, model } from '@angular/core';\n\nexport type FilterChipOption = {\n value: string;\n label: string;\n count?: number | string | null;\n};\n\nconst CHIP_CLASSES =\n 'flex-none flex h-11 items-center rounded-pill border-0 bg-transparent p-0 font-[inherit] cursor-pointer transition-transform duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) pointer-fine:h-8 pointer-fine:focus-visible:outline-offset-2';\n\nconst PILL_CLASSES =\n 'flex h-[34px] items-center gap-1.5 rounded-pill px-3.5 text-label font-medium whitespace-nowrap pointer-fine:h-8 pointer-fine:px-3 pointer-fine:group-hover/chip:shadow-[inset_0_0_0_1px_var(--muted-foreground)]';\n\nconst SELECTED_PILL_CLASSES = 'bg-(--primary) text-(--primary-foreground)';\n\nconst UNSELECTED_PILL_CLASSES = 'bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)]';\n\n/**\n * A row of single-choice filter pills, each with an optional count, that narrows a list in place:\n * an asset class, a status. On touch it scrolls on one line, bleeding to the screen edges; with a\n * fine pointer it wraps.\n *\n * @example\n * <ui-filter-chips ariaLabel=\"Filter by class\" [options]=\"classes()\" [(value)]=\"selectedClass\" />\n */\n@Component({\n selector: 'ui-filter-chips',\n template: `\n @for (option of options(); track option.value) {\n <button\n class=\"group/chip\"\n type=\"button\"\n [attr.aria-pressed]=\"option.value === value()\"\n [class]=\"chipClasses\"\n (click)=\"value.set(option.value)\"\n >\n <span data-chip [class]=\"pillClasses(option.value)\"\n >{{ option.label }}\n @if (option.count !== undefined && option.count !== null) {\n &ngsp;<span class=\"[font-variant-numeric:var(--numeric)]\" data-count [class]=\"countClasses(option.value)\">{{\n option.count\n }}</span>\n }\n </span>\n </button>\n }\n `,\n host: {\n role: 'group',\n class:\n 'flex gap-2 overflow-x-auto [scrollbar-width:none] -mt-1 -mx-(--gutter) px-(--gutter) pointer-fine:m-0 pointer-fine:flex-wrap pointer-fine:overflow-visible pointer-fine:p-0',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class UiFilterChips {\n readonly options = input.required<FilterChipOption[]>();\n readonly value = model.required<string>();\n readonly ariaLabel = input.required<string>();\n\n protected readonly chipClasses = CHIP_CLASSES;\n\n protected pillClasses(optionValue: string): string {\n return `${PILL_CLASSES} ${optionValue === this.value() ? SELECTED_PILL_CLASSES : UNSELECTED_PILL_CLASSES}`;\n }\n\n protected countClasses(optionValue: string): string {\n return optionValue === this.value() ? 'text-(--primary-foreground)' : 'text-(--subtle-foreground)';\n }\n}\n","import type { PlottedPoint } from './chart-scale';\n\nexport const axisTicks = <T extends PlottedPoint>(points: readonly T[], maxTicks = 5): T[] => {\n if (points.length <= maxTicks) {\n return [...points];\n }\n\n const count = Math.max(3, Math.min(maxTicks, points.length));\n const step = (points.length - 1) / (count - 1);\n\n const indexes = new Set<number>();\n\n for (let tick = 0; tick < count; tick++) {\n indexes.add(Math.round(tick * step));\n }\n\n return [...indexes].sort((a, b) => a - b).map((index) => points[index] as T);\n};\n\nexport const isCoreTick = (index: number, count: number): boolean => {\n if (count <= 3) {\n return true;\n }\n\n const middle = Math.floor((count - 1) / 2);\n\n return index === 0 || index === count - 1 || index === middle;\n};\n","import type { PlottedPoint } from './chart-scale';\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max);\n\nexport const nearestPointIndex = (points: readonly PlottedPoint[], x: number): number => {\n let nearest = 0;\n let nearestDistance = Infinity;\n\n points.forEach((point, index) => {\n const distance = Math.abs(point.x - x);\n\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearest = index;\n }\n });\n\n return nearest;\n};\n\nexport type KeyNavigation = { index: number | null; preventDefault: boolean };\n\nexport const navigateIndex = (key: string, current: number | null, last: number): KeyNavigation | null => {\n switch (key) {\n case 'ArrowRight':\n return { index: clamp((current ?? -1) + 1, 0, last), preventDefault: true };\n case 'ArrowLeft':\n return { index: clamp((current ?? last + 1) - 1, 0, last), preventDefault: true };\n case 'Home':\n return { index: 0, preventDefault: true };\n case 'End':\n return { index: last, preventDefault: true };\n case 'Escape':\n return { index: null, preventDefault: false };\n default:\n return null;\n }\n};\n","export const START_LABEL_HEIGHT = 16;\n\nconst AXIS_ROW = 17;\n\nexport const TOOLTIP_SIZES = ['compact', 'large'] as const;\nexport type TooltipSize = (typeof TOOLTIP_SIZES)[number];\n\nexport const TOOLTIP_CLASSES: Record<TooltipSize, { box: string; value: string; delta: string }> = {\n compact: { box: '-top-3 px-2.5', value: 'text-label', delta: 'text-caption' },\n large: { box: 'top-0 px-3', value: 'text-body', delta: 'text-label' },\n};\n\nconst PLOT_PADDING_RATIO = 16 / 240;\nconst SPARKLINE_PADDING = 4;\nconst START_LABEL_BASELINE_OFFSET = 4;\nconst TOOLTIP_OFFSET = 14;\nconst TOOLTIP_FLIP_RATIO = 0.55;\n\nexport const plotHeightFor = (height: number, sparkline: boolean, axisGap: number | 'auto', wide: boolean): number =>\n sparkline ? height : Math.max(height - resolveGap(axisGap, wide) - AXIS_ROW, 1);\n\nexport const plotPaddingFor = (plotHeight: number, sparkline: boolean): number =>\n sparkline ? SPARKLINE_PADDING : plotHeight * PLOT_PADDING_RATIO;\n\nexport const startLabelBaseline = (boxBottom: number): number => boxBottom - START_LABEL_BASELINE_OFFSET;\n\nexport const tooltipPlacement = (ratio: number): string => {\n const flipped = ratio > TOOLTIP_FLIP_RATIO;\n\n return `left: calc(${ratio * 100}% ${flipped ? '-' : '+'} ${TOOLTIP_OFFSET}px); transform: ${flipped ? 'translateX(-100%)' : 'none'}`;\n};\n\nexport const deltaTone = (delta: number): string =>\n delta > 0 ? 'text-(--positive)' : delta < 0 ? 'text-(--negative)' : 'text-(--muted-foreground)';\n\nexport const DEFAULT_WIDTH = 640;\nexport const DEFAULT_HEIGHT = 240;\n\nexport const identityValue = (value: number): string => `${value}`;\nexport const identityDelta = (delta: number): string => `${delta > 0 ? '+' : ''}${delta}`;\nexport const identityTime = (time: number): string => new Date(time).toISOString();\n\nexport type AxisTicks = 3 | 5 | 'auto';\n\nexport const parseAxisTicks = (value: AxisTicks | string): AxisTicks =>\n value === 'auto' ? 'auto' : (Number(value) as 3 | 5);\n\nconst resolveGap = (gap: number | 'auto', wide: boolean): number => (gap === 'auto' ? (wide ? 16 : 12) : gap);\n\nconst resolveTooltip = (size: TooltipSize | 'auto', wide: boolean): TooltipSize =>\n size === 'auto' ? (wide ? 'large' : 'compact') : size;\n\nexport const tooltipClassesFor = (size: TooltipSize | 'auto', wide: boolean): (typeof TOOLTIP_CLASSES)[TooltipSize] =>\n TOOLTIP_CLASSES[resolveTooltip(size, wide)];\n","import { scaleLinear } from 'd3-scale';\nimport { curveMonotoneX, line } from 'd3-shape';\n\nexport type ChartPoint = {\n t: number;\n v: number;\n};\n\nexport type PlottedPoint = ChartPoint & { x: number; y: number };\n\nexport type ChartGeometry = {\n line: string;\n end: { x: number; y: number };\n start: { y: number };\n points: PlottedPoint[];\n plotBottom: number;\n plotTop: number;\n};\n\nexport type GeometryPadding = { x?: number; top?: number; bottom?: number };\n\nexport const CURVE = curveMonotoneX;\n\nexport const buildGeometry = (\n points: ChartPoint[],\n width: number,\n height: number,\n padding: GeometryPadding = {},\n): ChartGeometry | null => {\n if (points.length === 0) {\n return null;\n }\n\n const { x: paddingX = 4, top: paddingTop = 4, bottom: paddingBottom = 4 } = padding;\n const plotTop = paddingTop;\n const plotBottom = height - paddingBottom;\n\n const times = points.map((point) => point.t);\n const values = points.map((point) => point.v);\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n\n const x = scaleLinear()\n .domain([Math.min(...times), Math.max(...times)])\n .range([paddingX, width - paddingX]);\n\n const y =\n minValue === maxValue\n ? () => (plotTop + plotBottom) / 2\n : scaleLinear().domain([minValue, maxValue]).range([plotBottom, plotTop]);\n\n const toX = (point: ChartPoint): number => (points.length === 1 ? paddingX : x(point.t));\n\n const lineGenerator = line<ChartPoint>()\n .x(toX)\n .y((point) => y(point.v))\n .curve(CURVE);\n\n const first = points[0] as ChartPoint;\n const last = points.at(-1) as ChartPoint;\n\n return {\n line: lineGenerator(points) as string,\n end: { x: toX(last), y: y(last.v) },\n start: { y: y(first.v) },\n points: points.map((point) => ({ ...point, x: toX(point), y: y(point.v) })),\n plotBottom,\n plotTop,\n };\n};\n","import type { PlottedPoint } from './chart-scale';\n\nexport type StartLabelBox = { width: number; height: number };\nexport type StartLabelSize = { width: number; height: number };\nexport type StartLabelPlacement = { x: number; y: number; anchor: 'start' | 'end' };\n\nconst LINE_GAP = 6;\nconst COLLISION_MARGIN = 6;\nconst EDGE_TOLERANCE = 3;\n\ntype Slot = { anchor: 'start' | 'end'; x: number; y: number; top: number; bottom: number };\n\nconst candidateSlots = (startY: number, box: StartLabelBox, label: StartLabelSize): Slot[] => {\n const aboveTop = startY - LINE_GAP - label.height;\n const aboveBottom = startY - LINE_GAP;\n const belowTop = startY + LINE_GAP;\n const belowBottom = startY + LINE_GAP + label.height;\n\n const slots: Slot[] = [\n { anchor: 'end', x: box.width, y: aboveBottom, top: aboveTop, bottom: aboveBottom },\n { anchor: 'end', x: box.width, y: belowBottom, top: belowTop, bottom: belowBottom },\n { anchor: 'start', x: 0, y: aboveBottom, top: aboveTop, bottom: aboveBottom },\n { anchor: 'start', x: 0, y: belowBottom, top: belowTop, bottom: belowBottom },\n { anchor: 'end', x: box.width, y: label.height, top: 0, bottom: label.height },\n { anchor: 'start', x: 0, y: label.height, top: 0, bottom: label.height },\n { anchor: 'end', x: box.width, y: box.height, top: box.height - label.height, bottom: box.height },\n { anchor: 'start', x: 0, y: box.height, top: box.height - label.height, bottom: box.height },\n ];\n\n return slots.filter((slot) => slot.top >= -EDGE_TOLERANCE && slot.bottom <= box.height + EDGE_TOLERANCE);\n};\n\nconst hitsFor = (slot: Slot, label: StartLabelSize, points: readonly PlottedPoint[]): number => {\n const left = slot.anchor === 'end' ? slot.x - label.width : slot.x;\n const right = slot.anchor === 'end' ? slot.x : slot.x + label.width;\n const top = slot.top - COLLISION_MARGIN;\n const bottom = slot.bottom + COLLISION_MARGIN;\n\n return points.filter((point) => point.x >= left && point.x <= right && point.y >= top && point.y <= bottom).length;\n};\n\nexport const placeStartLabel = (\n points: readonly PlottedPoint[],\n startY: number,\n box: StartLabelBox,\n label: StartLabelSize,\n): StartLabelPlacement => {\n let best: { slot: Slot; hits: number } | null = null;\n\n for (const slot of candidateSlots(startY, box, label)) {\n const hits = hitsFor(slot, label, points);\n\n if (!best || hits < best.hits) {\n best = { slot, hits };\n }\n if (hits === 0) {\n break;\n }\n }\n\n if (!best) {\n return { anchor: 'end', x: box.width, y: label.height };\n }\n\n const { anchor, x, y } = best.slot;\n\n return { anchor, x, y };\n};\n","import type { ChartGeometry, PlottedPoint } from './chart-scale';\n\nexport const TRANSITION_SAMPLES = 120;\nexport const TRANSITION_DURATION = 260;\n\nexport const easeOutQuint = (t: number): number => 1 - (1 - t) ** 5;\n\nexport const prefersReducedMotion = (): boolean =>\n typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n\nconst monotoneTangents = (xs: readonly number[], ys: readonly number[]): number[] => {\n const n = xs.length;\n const slopes: number[] = [];\n\n for (let i = 0; i < n - 1; i++) {\n const dx = xs[i + 1]! - xs[i]!;\n\n slopes.push(dx === 0 ? 0 : (ys[i + 1]! - ys[i]!) / dx);\n }\n\n const tangents = new Array<number>(n).fill(0);\n tangents[0] = slopes[0]!;\n tangents[n - 1] = slopes[n - 2]!;\n\n for (let i = 1; i < n - 1; i++) {\n const a = slopes[i - 1]!;\n const b = slopes[i]!;\n\n tangents[i] = a * b <= 0 ? 0 : (a + b) / 2;\n }\n\n for (let i = 0; i < n - 1; i++) {\n const slope = slopes[i]!;\n\n if (slope === 0) {\n tangents[i] = 0;\n tangents[i + 1] = 0;\n continue;\n }\n\n const a = tangents[i]! / slope;\n const b = tangents[i + 1]! / slope;\n const s = a * a + b * b;\n\n if (s > 9) {\n const t = 3 / Math.sqrt(s);\n\n tangents[i] = t * a * slope;\n tangents[i + 1] = t * b * slope;\n }\n }\n\n return tangents;\n};\n\nconst sampleMonotone = (points: readonly PlottedPoint[], sampleXs: readonly number[]): number[] => {\n const xs = points.map((point) => point.x);\n const ys = points.map((point) => point.y);\n const tangents = monotoneTangents(xs, ys);\n\n let segment = 0;\n\n return sampleXs.map((x) => {\n while (segment < xs.length - 2 && x > xs[segment + 1]!) {\n segment++;\n }\n\n const x0 = xs[segment]!;\n const x1 = xs[segment + 1]!;\n const dx = x1 - x0;\n const f = dx === 0 ? 0 : (x - x0) / dx;\n const f2 = f * f;\n const f3 = f2 * f;\n const y0 = ys[segment]!;\n const y1 = ys[segment + 1]!;\n const m0 = tangents[segment]!;\n const m1 = tangents[segment + 1]!;\n\n return (2 * f3 - 3 * f2 + 1) * y0 + (f3 - 2 * f2 + f) * m0 * dx + (-2 * f3 + 3 * f2) * y1 + (f3 - f2) * m1 * dx;\n });\n};\n\nconst buildPolyline = (xs: readonly number[], ys: readonly number[]): string =>\n xs.map((x, index) => `${index === 0 ? 'M' : 'L'}${x.toFixed(2)},${ys[index]!.toFixed(2)}`).join(' ');\n\nexport const interpolateLine = (from: ChartGeometry, to: ChartGeometry, progress: number): string => {\n const left = to.points[0]!.x;\n const right = to.points.at(-1)!.x;\n const samples = Array.from(\n { length: TRANSITION_SAMPLES },\n (_, index) => left + ((right - left) * index) / (TRANSITION_SAMPLES - 1),\n );\n const fromYs = sampleMonotone(from.points, samples);\n const toYs = sampleMonotone(to.points, samples);\n\n return buildPolyline(\n samples,\n fromYs.map((fromY, index) => fromY + (toYs[index]! - fromY) * progress),\n );\n};\n","import { DestroyRef, type Signal, inject, signal } from '@angular/core';\n\nconst WIDE_QUERY = '(min-width: 64rem)';\n\nexport const wideViewport = (): Signal<boolean> => {\n const query = typeof matchMedia === 'function' ? matchMedia(WIDE_QUERY) : null;\n const wide = signal(query?.matches ?? false);\n const onChange = (event: { matches: boolean }): void => wide.set(event.matches);\n\n if (query) {\n query.onchange = onChange;\n inject(DestroyRef).onDestroy(() => (query.onchange = null));\n }\n\n return wide;\n};\n","import {\n Component,\n DestroyRef,\n type ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { axisTicks, isCoreTick } from './internal/chart-axis';\nimport { navigateIndex, nearestPointIndex } from './internal/chart-interaction';\nimport {\n type AxisTicks,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n START_LABEL_HEIGHT,\n deltaTone,\n identityDelta,\n identityTime,\n identityValue,\n parseAxisTicks,\n plotHeightFor,\n plotPaddingFor,\n startLabelBaseline,\n tooltipClassesFor,\n tooltipPlacement,\n} from './internal/chart-layout';\nimport { type ChartGeometry, type ChartPoint, type PlottedPoint, buildGeometry } from './internal/chart-scale';\nimport { placeStartLabel } from './internal/start-label';\nimport { TRANSITION_DURATION, easeOutQuint, interpolateLine, prefersReducedMotion } from './internal/transition';\nimport { wideViewport } from './internal/viewport';\n\nexport type { AxisTicks, ChartPoint };\nexport type { TooltipSize } from './internal/chart-layout';\n\ntype PlotRef = ElementRef<SVGSVGElement>;\n\n/**\n * Value over time: a monotone curve with a dashed line at the starting value and a tooltip.\n *\n * @example\n * <ui-line-chart [points]=\"points\" label=\"Net worth over one month\" startLabel=\"Since\" [valueFormat]=\"formatEur\" />\n */\n@Component({\n selector: 'ui-line-chart',\n template: `\n <div class=\"relative h-full\">\n <svg\n #svgRef\n class=\"block h-full w-full touch-pan-y overflow-visible\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [attr.height]=\"effectiveHeight()\"\n [attr.tabindex]=\"sparkline() ? null : 0\"\n [attr.viewBox]=\"'0 0 ' + effectiveWidth() + ' ' + effectiveHeight()\"\n [attr.width]=\"effectiveWidth()\"\n (keydown)=\"onKeydown($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (pointermove)=\"onPointerMove($event)\"\n >\n @if (geometry(); as geometry) {\n <path\n class=\"stroke-(--foreground)\"\n data-chart-line\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [attr.d]=\"displayLine()\"\n [attr.stroke-width]=\"sparkline() ? 1.5 : 2\"\n />\n\n @if (!sparkline()) {\n <line\n class=\"stroke-(--border)\"\n data-chart-start-line\n stroke-dasharray=\"3 4\"\n stroke-width=\"1\"\n x1=\"0\"\n [attr.x2]=\"effectiveWidth()\"\n [attr.y1]=\"geometry.start.y\"\n [attr.y2]=\"geometry.start.y\"\n />\n\n @if (startLabelInfo(); as info) {\n <text\n class=\"text-caption fill-(--subtle-foreground) tabular-nums\"\n data-chart-start-label\n [attr.text-anchor]=\"info.placement.anchor\"\n [attr.x]=\"info.placement.x\"\n [attr.y]=\"info.placement.y\"\n >\n {{ info.label }}\n </text>\n }\n\n <circle\n class=\"fill-(--foreground) stroke-(--card) [paint-order:stroke]\"\n data-chart-end\n r=\"4\"\n stroke-width=\"6\"\n [attr.cx]=\"geometry.end.x\"\n [attr.cy]=\"geometry.end.y\"\n />\n\n @for (\n tick of ticks();\n track tick.t;\n let index = $index;\n let count = $count;\n let first = $first;\n let last = $last\n ) {\n <text\n class=\"text-caption fill-(--subtle-foreground) tabular-nums\"\n data-chart-axis-tick\n [attr.text-anchor]=\"first ? 'start' : last ? 'end' : 'middle'\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"effectiveHeight() - 4\"\n [class.hidden]=\"axisTicks() === 3 && !isCoreTick(index, count)\"\n [class.max-sm:hidden]=\"axisTicks() === 'auto' && !isCoreTick(index, count)\"\n >\n {{ axisFormat()(tick.t) }}\n </text>\n }\n\n @if (active(); as point) {\n <line\n class=\"stroke-(--border)\"\n data-chart-crosshair\n stroke-width=\"1\"\n y1=\"0\"\n [attr.x1]=\"point.x\"\n [attr.x2]=\"point.x\"\n [attr.y2]=\"plotHeight()\"\n />\n <circle\n class=\"fill-(--foreground) stroke-(--card) [paint-order:stroke]\"\n data-chart-active\n r=\"5\"\n stroke-width=\"6\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n />\n }\n }\n }\n </svg>\n\n @if (active(); as point) {\n <div\n class=\"rounded-container pointer-events-none absolute bg-(--elevated) py-2 whitespace-nowrap [font-variant-numeric:var(--numeric)] shadow-[0_4px_16px_rgb(0_0_0/0.12),inset_0_0_0_1px_var(--border)]\"\n data-testid=\"chart-tooltip\"\n role=\"status\"\n [class]=\"tooltipClasses().box\"\n [style]=\"tooltipStyle(point)\"\n >\n <p class=\"font-medium text-(--foreground)\" [class]=\"tooltipClasses().value\">\n {{ tooltipFormat()?.(point) ?? valueFormat()(point.v) }}\n </p>\n @if (tooltipDelta()) {\n <p data-chart-delta [class]=\"deltaClasses(point)\">{{ deltaFormat()(deltaFor(point)) }}</p>\n }\n <p class=\"text-caption text-(--subtle-foreground)\" data-chart-date>{{ timeFormat()(point.t) }}</p>\n </div>\n }\n @if (points().length > 0) {\n <div class=\"sr-only\">\n <table>\n <caption [textContent]=\"label()\"></caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ timeColumnLabel() }}</th>\n <th scope=\"col\">{{ valueColumnLabel() }}</th>\n </tr>\n </thead>\n <tbody>\n @for (point of points(); track point.t) {\n <tr>\n <td>{{ timeFormat()(point.t) }}</td>\n <td>{{ valueFormat()(point.v) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n `,\n host: {\n class: 'block h-full',\n },\n})\nexport class UiLineChart {\n readonly points = input.required<ChartPoint[]>();\n readonly label = input.required<string>();\n readonly valueFormat = input<(value: number) => string>(identityValue);\n readonly tooltipFormat = input<(point: ChartPoint) => string>();\n readonly deltaFormat = input<(delta: number) => string>(identityDelta);\n readonly timeFormat = input<(time: number) => string>(identityTime);\n readonly axisFormat = input<(time: number) => string>(identityTime);\n readonly startLabel = input('');\n readonly timeColumnLabel = input('Time');\n readonly valueColumnLabel = input('Value');\n readonly sparkline = input(false, { transform: booleanAttribute });\n readonly tooltip = input<'compact' | 'large' | 'auto'>('compact');\n readonly tooltipDelta = input(true, { transform: booleanAttribute });\n readonly axisGap = input<number | 'auto'>(12);\n readonly axisTicks = input<AxisTicks, AxisTicks | string>('auto', { transform: parseAxisTicks });\n\n #destroyRef = inject(DestroyRef);\n #wide = wideViewport();\n #frame: number | null = null;\n #hasRenderedOnce = false;\n #previousGeometry: ChartGeometry | null = null;\n\n protected readonly isCoreTick = isCoreTick;\n protected readonly svgRef = viewChild.required<PlotRef>('svgRef');\n protected readonly activeIndex = signal<number | null>(null);\n protected readonly animatedLine = signal<string | null>(null);\n protected readonly measuredSize = signal<{ width: number; height: number } | null>(null);\n\n protected readonly effectiveWidth = computed(() => this.measuredSize()?.width ?? DEFAULT_WIDTH);\n protected readonly effectiveHeight = computed(() => this.measuredSize()?.height ?? DEFAULT_HEIGHT);\n\n protected readonly plotHeight = computed(() =>\n plotHeightFor(this.effectiveHeight(), this.sparkline(), this.axisGap(), this.#wide()),\n );\n\n protected readonly tooltipStyle = (point: PlottedPoint): string => tooltipPlacement(point.x / this.effectiveWidth());\n\n protected readonly tooltipClasses = computed(() => tooltipClassesFor(this.tooltip(), this.#wide()));\n\n protected readonly geometry = computed(() => {\n const plotHeight = this.plotHeight();\n const padding = plotPaddingFor(plotHeight, this.sparkline());\n\n return buildGeometry(this.points(), this.effectiveWidth(), plotHeight, { x: 0, top: padding, bottom: padding });\n });\n\n protected readonly displayLine = computed(() => this.animatedLine() ?? this.geometry()!.line);\n\n protected readonly ticks = computed(() => axisTicks(this.geometry()!.points));\n\n protected readonly active = computed<PlottedPoint | null>(() => {\n const geometry = this.geometry();\n const index = this.activeIndex();\n\n return geometry && index !== null ? (geometry.points[index] as PlottedPoint) : null;\n });\n\n protected readonly startLabelInfo = computed(() => {\n const text = this.startLabel();\n const geometry = this.geometry();\n\n if (!text || !geometry) {\n return null;\n }\n\n const label = `${text} ${this.valueFormat()(geometry.points[0]!.v)}`;\n const size = { width: label.length * 0.56 * 12 + 8, height: START_LABEL_HEIGHT };\n const placement = placeStartLabel(\n geometry.points,\n geometry.start.y,\n { width: this.effectiveWidth(), height: this.plotHeight() },\n size,\n );\n\n return { label, placement: { ...placement, y: startLabelBaseline(placement.y) } };\n });\n\n #renderRef = afterNextRender(() => this.#observeSize());\n\n constructor() {\n effect(() => {\n const geometry = this.geometry();\n const previous = this.#previousGeometry;\n\n if (previous === geometry) {\n return;\n }\n\n this.#previousGeometry = geometry;\n this.#cancelAnimation();\n\n if (!this.#hasRenderedOnce) {\n this.#hasRenderedOnce = true;\n return;\n }\n\n if (!previous || !geometry) {\n this.animatedLine.set(null);\n return;\n }\n\n if (prefersReducedMotion()) {\n this.animatedLine.set(null);\n return;\n }\n\n this.#animate(previous, geometry);\n });\n\n this.#destroyRef.onDestroy(() => this.#cancelAnimation());\n }\n\n #observeSize(): void {\n this.#destroyRef.onDestroy(() => this.#renderRef.destroy());\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const element = this.svgRef().nativeElement;\n\n const observer = new ResizeObserver(([entry]) => {\n if (entry) {\n const { width, height } = entry.contentRect;\n\n this.measuredSize.set({ width, height });\n }\n });\n\n observer.observe(element);\n this.#destroyRef.onDestroy(() => observer.disconnect());\n }\n\n #cancelAnimation(): void {\n cancelAnimationFrame(this.#frame ?? 0);\n this.#frame = null;\n }\n\n #animate(from: ChartGeometry, to: ChartGeometry): void {\n if (from.points.length < 2 || to.points.length < 2) {\n this.animatedLine.set(null);\n return;\n }\n\n const startTime = performance.now();\n\n const step = (now: number): void => {\n const t = Math.min(1, (now - startTime) / TRANSITION_DURATION);\n\n this.animatedLine.set(t < 1 ? interpolateLine(from, to, easeOutQuint(t)) : null);\n this.#frame = t < 1 ? requestAnimationFrame(step) : null;\n };\n\n this.#frame = requestAnimationFrame(step);\n }\n\n protected deltaFor(point: PlottedPoint): number {\n return point.v - this.points()[0]!.v;\n }\n\n protected deltaClasses(point: PlottedPoint): string {\n return `${this.tooltipClasses().delta} ${deltaTone(this.deltaFor(point))}`;\n }\n\n protected onPointerMove(event: PointerEvent): void {\n const geometry = this.geometry();\n\n if (this.sparkline() || !geometry || geometry.points.length === 0) {\n return;\n }\n\n const rect = this.svgRef().nativeElement.getBoundingClientRect();\n const ratio = rect.width === 0 ? 1 : this.effectiveWidth() / rect.width;\n const x = (event.clientX - rect.left) * ratio;\n\n this.activeIndex.set(nearestPointIndex(geometry.points, x));\n }\n\n protected onPointerLeave(): void {\n this.activeIndex.set(null);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const geometry = this.geometry();\n\n if (this.sparkline() || !geometry || geometry.points.length === 0) {\n return;\n }\n\n const navigation = navigateIndex(event.key, this.activeIndex(), geometry.points.length - 1);\n\n if (!navigation) {\n return;\n }\n\n if (navigation.preventDefault) {\n event.preventDefault();\n }\n\n this.activeIndex.set(navigation.index);\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\n\nconst MENU_CLASSES =\n 'm-0 min-w-44 p-1 rounded-container bg-(--elevated) shadow-[0_8px_24px_rgb(0_0_0/0.16),inset_0_0_0_1px_var(--border)] text-(--foreground) transition-[opacity,transform,overlay,display] transition-discrete duration-(--duration-fast) ease-out starting:open:opacity-0 starting:open:scale-(--enter-scale) opacity-0 scale-(--enter-scale) open:opacity-100 open:scale-100';\n\nconst SHEET_CLASSES =\n 'max-lg:fixed max-lg:inset-x-4 max-lg:top-auto max-lg:w-auto max-lg:bottom-[calc(76px+env(safe-area-inset-bottom))] max-lg:min-w-0 max-lg:p-1.5 max-lg:bg-(--card) max-lg:shadow-[0_12px_32px_rgb(0_0_0/0.2),inset_0_0_0_1px_var(--border)] max-lg:backdrop:bg-[rgb(0_0_0/0.36)] max-lg:transition-[opacity,translate,overlay,display] max-lg:scale-100 max-lg:translate-y-4 max-lg:open:translate-y-0 max-lg:starting:open:scale-100 max-lg:starting:open:translate-y-4';\n\nconst SHEET_ITEM_CLASSES =\n 'flex w-full items-center gap-3 lg:pointer-fine:gap-2.5 min-h-12 lg:min-h-11 lg:pointer-fine:min-h-9 px-3 lg:pointer-fine:px-2.5 rounded-[calc(var(--radius-container)-6px)] lg:rounded-[calc(var(--radius-container)-4px)] text-body lg:pointer-fine:text-label hover:bg-(--glow) focus-visible:bg-(--glow) active:bg-(--soft) outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) [:where(&>svg)]:size-5 [:where(&>svg)]:flex-none lg:[:where(&>svg)]:size-[18px] lg:pointer-fine:[:where(&>svg)]:size-4';\n\nconst ITEM_CLASSES =\n 'flex w-full items-center gap-3 pointer-fine:gap-2.5 min-h-11 pointer-fine:min-h-9 px-3 pointer-fine:px-2.5 rounded-[calc(var(--radius-container)-4px)] text-body pointer-fine:text-label hover:bg-(--glow) focus-visible:bg-(--glow) active:bg-(--soft) outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) [:where(&>svg)]:size-[18px] [:where(&>svg)]:flex-none pointer-fine:[:where(&>svg)]:size-4';\n\nconst nextId = (() => {\n let count = 0;\n\n return () => `ui-menu-${++count}`;\n})();\n\n/**\n * One action of a `ui-menu`; `destructive` paints it in `--negative`.\n *\n * @example\n * <button uiMenuItem destructive (click)=\"remove()\">Delete the line</button>\n */\n@Directive({\n selector: 'button[uiMenuItem]',\n host: {\n role: 'menuitem',\n tabindex: '-1',\n '[class]': 'classes()',\n '(click)': 'onClick()',\n },\n})\nexport class UiMenuItem {\n readonly destructive = input(false, { transform: booleanAttribute });\n\n readonly #host = inject<ElementRef<HTMLButtonElement>>(ElementRef).nativeElement;\n readonly #menu = inject(UiMenu);\n\n protected readonly classes = computed(\n () => `${this.#menu.sheet() ? SHEET_ITEM_CLASSES : ITEM_CLASSES}${this.destructive() ? ' text-(--negative)' : ''}`,\n );\n\n focus(): void {\n this.#host.focus();\n }\n\n hasFocus(): boolean {\n return this.#host === document.activeElement;\n }\n\n protected onClick(): void {\n this.#menu.close();\n }\n}\n\n/**\n * Secondary actions menu, opened from its trigger through the native Popover API. With `sheet`, below\n * 64rem it opens as a bottom action sheet above the tab bar instead of beside its trigger, and\n * `heading` names what the actions apply to. `width` fixes the outer popover width in pixels (the sheet\n * always spans the screen below 64rem); without it the menu fits its content.\n *\n * @example\n * <button ui-button size=\"icon\" aria-label=\"More\" [uiMenuTrigger]=\"menu\">...</button>\n * <ui-menu #menu label=\"Line actions\">\n * <button uiMenuItem (click)=\"edit()\">Edit</button>\n * <button uiMenuItem destructive (click)=\"remove()\">Delete the line</button>\n * </ui-menu>\n */\n@Component({\n selector: 'ui-menu',\n template: `\n @if (sheet() && heading()) {\n <div aria-hidden=\"true\" class=\"text-label px-3 pt-2 pb-1.5 leading-[17px] text-(--muted-foreground) lg:hidden\">\n {{ heading() }}\n </div>\n }\n <ng-content />\n `,\n host: {\n role: 'menu',\n popover: 'auto',\n '[id]': 'menuId',\n '[style.--ui-menu-width]': 'widthVar()',\n '[class]': 'classes()',\n '[attr.aria-label]': 'label()',\n '(toggle)': 'onToggle($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class UiMenu {\n readonly label = input.required<string>();\n readonly sheet = input(false, { transform: booleanAttribute });\n readonly heading = input<string>();\n readonly width = input<number | undefined, unknown>(undefined, { transform: numberAttribute });\n\n readonly menuId = nextId();\n readonly isOpen = signal(false);\n\n protected readonly hasWidth = computed(() => Number.isFinite(this.width()));\n protected readonly widthVar = computed(() => (this.hasWidth() ? `${this.width()}px` : null));\n protected readonly classes = computed(() => {\n const width = !this.hasWidth() ? '' : this.sheet() ? ' lg:w-(--ui-menu-width)' : ' w-(--ui-menu-width)';\n return `${MENU_CLASSES}${this.sheet() ? ` ${SHEET_CLASSES}` : ''}${width}`;\n });\n protected readonly items = contentChildren(UiMenuItem);\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n #trigger: HTMLElement | null = null;\n\n open(trigger: HTMLElement): void {\n this.#trigger = trigger;\n this.isOpen.set(true);\n if (typeof this.#host.showPopover === 'function') {\n this.#host.showPopover();\n }\n if (this.#isSheet()) {\n this.#host.style.position = '';\n this.#host.style.top = '';\n this.#host.style.left = '';\n } else {\n this.#position(trigger);\n }\n this.items()[0]?.focus();\n }\n\n close(): void {\n const wasOpen = this.isOpen();\n\n this.#applyClosed();\n\n if (wasOpen && typeof this.#host.hidePopover === 'function') {\n this.#host.hidePopover();\n }\n }\n\n #applyClosed(): void {\n this.isOpen.set(false);\n this.#trigger?.focus();\n this.#trigger = null;\n }\n\n protected onToggle(event: Event): void {\n if ((event as ToggleEvent).newState === 'closed') {\n this.#applyClosed();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Tab' || event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n\n const items = this.items();\n const currentIndex = items.findIndex((item) => item.hasFocus());\n const lastIndex = items.length - 1;\n\n let nextIndex: number | undefined;\n switch (event.key) {\n case 'ArrowDown':\n nextIndex = currentIndex >= lastIndex ? 0 : currentIndex + 1;\n break;\n case 'ArrowUp':\n nextIndex = currentIndex <= 0 ? lastIndex : currentIndex - 1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = lastIndex;\n break;\n }\n\n if (nextIndex === undefined) {\n return;\n }\n event.preventDefault();\n items[nextIndex]?.focus();\n }\n\n #isSheet(): boolean {\n return this.sheet() && typeof window.matchMedia === 'function' && !window.matchMedia('(min-width: 64rem)').matches;\n }\n\n #position(trigger: HTMLElement): void {\n const margin = 8;\n const triggerRect = trigger.getBoundingClientRect();\n const menuRect = this.#host.getBoundingClientRect();\n const fitsBelow = window.innerHeight - triggerRect.bottom >= menuRect.height + margin;\n\n const top = fitsBelow ? triggerRect.bottom + 4 : Math.max(margin, triggerRect.top - menuRect.height - 4);\n const left = Math.min(\n Math.max(triggerRect.right - menuRect.width, margin),\n window.innerWidth - menuRect.width - margin,\n );\n\n this.#host.style.position = 'fixed';\n this.#host.style.top = `${Math.min(top, window.innerHeight - menuRect.height - margin)}px`;\n this.#host.style.left = `${left}px`;\n this.#host.style.transformOrigin = fitsBelow ? 'top right' : 'bottom right';\n }\n}\n\n/**\n * Opens a `ui-menu` from a trigger element and wires `aria-haspopup`, `aria-expanded` and\n * `aria-controls` on it.\n *\n * @example\n * <button ui-button size=\"icon\" aria-label=\"More\" [uiMenuTrigger]=\"menu\">...</button>\n */\n@Directive({\n selector: '[uiMenuTrigger]',\n host: {\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'uiMenuTrigger().isOpen()',\n '[attr.aria-controls]': 'uiMenuTrigger().menuId',\n '(click)': 'toggle()',\n },\n})\nexport class UiMenuTrigger {\n readonly uiMenuTrigger = input.required<UiMenu>();\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n protected toggle(): void {\n const menu = this.uiMenuTrigger();\n\n if (menu.isOpen()) {\n menu.close();\n } else {\n menu.open(this.#host);\n }\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Track thicknesses. `MeterSize` is derived from this tuple. */\nexport const METER_SIZES = ['md', 'sm'] as const;\nexport type MeterSize = (typeof METER_SIZES)[number];\n\nconst TRACK_CLASSES: Record<MeterSize, string> = {\n md: 'h-1.5',\n sm: 'h-1',\n};\n\n/** Ramp step used to paint the fill. `MeterTone` is derived from this tuple. */\nexport const METER_TONES = [1, 2, 3, 4, 5, 6] as const;\nexport type MeterTone = (typeof METER_TONES)[number];\n\nconst TONE_CLASSES: Record<MeterTone, string> = {\n 1: 'bg-(--ramp-1)',\n 2: 'bg-(--ramp-2)',\n 3: 'bg-(--ramp-3)',\n 4: 'bg-(--ramp-4)',\n 5: 'bg-(--ramp-5)',\n 6: 'bg-(--ramp-6)',\n};\n\n/**\n * Proportion of a whole, drawn as a single bar. One bar per category, never a stacked\n * strip: without hue to separate segments, length has to do the work alone.\n *\n * @example\n * <ui-meter [value]=\"0.463\" label=\"Funds\" valueText=\"46.3% - 128,656.00 EUR\" [tone]=\"1\" />\n */\n@Component({\n selector: 'ui-meter',\n template: `\n <div\n class=\"rounded-pill w-full overflow-hidden bg-(--muted)\"\n role=\"meter\"\n [attr.aria-label]=\"label()\"\n [attr.aria-valuemax]=\"1\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuetext]=\"valueText()\"\n [class]=\"trackClasses()\"\n >\n <div data-testid=\"meter-fill\" [class]=\"fillClasses()\" [style.width.%]=\"percent()\"></div>\n </div>\n `,\n})\nexport class UiMeter {\n readonly value = input.required<number>();\n readonly label = input.required<string>();\n readonly valueText = input.required<string>();\n readonly tone = input<MeterTone>(1);\n readonly size = input<MeterSize>('md');\n\n protected readonly trackClasses = computed(() => TRACK_CLASSES[this.size()]);\n\n protected readonly percent = computed(() => Math.min(100, Math.max(0, this.value() * 100)));\n\n protected readonly fillClasses = computed(() => `h-full rounded-pill ${TONE_CLASSES[this.tone()]}`);\n}\n","import { Component, booleanAttribute, computed, input } from '@angular/core';\n\nconst BASE_CLASSES =\n 'flex items-center gap-3 h-10 px-3 rounded-control text-label leading-normal font-medium transition-colors duration-(--duration-press) hover:bg-(--glow) hover:text-(--foreground) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst ACTIVE_CLASSES = 'bg-(--soft) text-(--foreground)';\n\nconst IDLE_CLASSES = 'text-(--muted-foreground) active:bg-(--soft)';\n\n/**\n * One destination of the sidebar navigation (Portfolio, Holdings, Allocation, Accounts).\n *\n * @example\n * <a ui-nav-item [active]=\"url === '/'\" routerLink=\"/\">\n * <lucide-icon navIcon name=\"house\" />\n * Portfolio\n * </a>\n */\n@Component({\n selector: 'a[ui-nav-item]',\n template: '<ng-content select=\"[navIcon]\" /><ng-content />',\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': \"active() ? 'page' : null\",\n },\n})\nexport class UiNavItem {\n readonly active = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() => `${BASE_CLASSES} ${this.active() ? ACTIVE_CLASSES : IDLE_CLASSES}`);\n}\n","import { Component, Directive, booleanAttribute, computed, input } from '@angular/core';\n\nexport const ROW_SIZES = ['md', 'lg', 'xl', 'card', 'dense'] as const;\nexport type RowSize = (typeof ROW_SIZES)[number];\n\nexport const ROW_PADDINGS = ['md', 'sm', 'none'] as const;\nexport type RowPadding = (typeof ROW_PADDINGS)[number];\n\nexport const ROW_GAPS = ['default', 'sm'] as const;\nexport type RowGap = (typeof ROW_GAPS)[number];\n\nconst SIZE_CLASSES: Record<RowSize, string> = {\n md: 'min-h-14',\n lg: 'min-h-15',\n xl: 'min-h-18 pointer-fine:min-h-17',\n card: 'min-h-17',\n dense: 'min-h-14 lg:min-h-12',\n};\n\nconst SIZE_GAPS: Record<RowSize, string> = { md: 'gap-2.5', lg: 'gap-2.5', xl: 'gap-3', card: 'gap-2', dense: 'gap-3' };\n\nconst PADDING_CLASSES: Record<RowPadding, string> = { md: 'px-2.5', sm: 'px-2', none: 'px-0' };\n\nconst BASE_CLASSES =\n 'flex w-full items-center py-1.5 rounded-control text-left select-none touch-manipulation transition-colors duration-(--duration-press) hover:bg-(--glow) active:bg-(--soft) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst SELECTED_CLASSES = 'bg-(--soft)';\n\n/**\n * Clickable row of a list: a holding, an envelope, an account.\n *\n * @example\n * <a ui-row [selected]=\"holding.id === openId()\" [routerLink]=\"['/holdings', holding.id]\">\n * {{ holding.name }}\n * </a>\n */\n@Component({\n selector: 'a[ui-row], button[ui-row]',\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': \"selected() ? 'true' : null\",\n },\n})\nexport class UiRow {\n readonly selected = input(false, { transform: booleanAttribute });\n readonly size = input<RowSize>('md');\n readonly padding = input<RowPadding>('md');\n readonly gap = input<RowGap>('default');\n\n protected readonly classes = computed(\n () =>\n `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${this.gap() === 'sm' ? 'gap-2' : SIZE_GAPS[this.size()]} ${PADDING_CLASSES[this.padding()]}${this.selected() ? ` ${SELECTED_CLASSES}` : ''}`,\n );\n}\n\n/**\n * Lays out a `ui-row` with a trailing action beside it, such as a \"more\" icon button: the row takes\n * the room the action leaves and the action keeps its own size.\n *\n * @example\n * <div uiRowItem>\n * <a ui-row size=\"xl\" padding=\"sm\" routerLink=\"/accounts/1\">...</a>\n * <button ui-button variant=\"quiet\" size=\"icon-sm\" aria-label=\"Account actions\">...</button>\n * </div>\n */\n@Directive({\n selector: '[uiRowItem]',\n host: {\n class:\n 'flex items-center gap-1 [&>[ui-row]]:w-auto [&>[ui-row]]:min-w-0 [&>[ui-row]]:flex-1 [&>:not([ui-row])]:flex-none',\n },\n})\nexport class UiRowItem {}\n\n/**\n * Non-interactive row of a list, separated from the next by a hairline: a passkey with its delete\n * button, a device, a setting. It is a 72px row (68px from 64rem) with a 12px gap; put it on an\n * `li` or a `div`. Use `ui-row` instead when the whole row is a link or an action.\n *\n * @example\n * <ul>\n * <li uiListRow>\n * <span class=\"flex-1\">MacBook Air</span>\n * <button ui-button variant=\"quiet-destructive\" size=\"icon-sm\" aria-label=\"Delete MacBook Air\">...</button>\n * </li>\n * </ul>\n */\n@Directive({\n selector: '[uiListRow]',\n host: { '[class]': 'classes()' },\n})\nexport class UiListRow {\n readonly ruled = input(true, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n this.ruled()\n ? 'flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17 shadow-[inset_0_-1px_0_var(--hairline)]'\n : 'flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17',\n );\n}\n","import { Component, ElementRef, booleanAttribute, computed, input, model, viewChildren } from '@angular/core';\n\nconst nextId = (() => {\n let count = 0;\n\n return () => `ui-segmented-${++count}`;\n})();\n\nexport type SegmentedOption = {\n value: string;\n label: string;\n};\n\nconst OPTION_CLASSES =\n \"relative z-10 flex-1 cursor-pointer px-3 text-label font-medium transition-colors after:absolute after:inset-x-0 after:top-1/2 after:h-(--row-min) after:-translate-y-1/2 after:content-[''] focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) active:scale-(--press-scale)\";\n\nexport const SEGMENTED_SIZES = ['md', 'sm'] as const;\nexport type SegmentedSize = (typeof SEGMENTED_SIZES)[number];\n\nconst SIZE_CLASSES: Record<SegmentedSize, string> = {\n md: 'h-10 pointer-fine:h-8',\n sm: 'h-10 pointer-fine:h-[30px]',\n};\n\nconst SELECTED_CLASSES = 'text-(--foreground)';\n\nconst UNSELECTED_CLASSES = 'text-(--muted-foreground) hover:text-(--foreground)';\n\n/**\n * Exclusive choice within a small, known set: a time range, a unit, a mode. The selected option's\n * background is a single thumb that slides under it in `transform`, instead of being redrawn.\n *\n * @example\n * <ui-segmented [options]=\"ranges\" label=\"Time range\" [(value)]=\"range\" />\n */\n@Component({\n selector: 'ui-segmented',\n template: `\n <div [class]=\"showLabel() ? 'flex flex-col gap-1.5' : ''\">\n @if (showLabel()) {\n <span class=\"text-label leading-[17px] font-medium text-(--muted-foreground)\" [id]=\"labelId\">{{\n label()\n }}</span>\n }\n <div\n class=\"rounded-control relative grid bg-(--muted) p-0.5\"\n role=\"radiogroup\"\n [attr.aria-label]=\"showLabel() ? null : label()\"\n [attr.aria-labelledby]=\"showLabel() ? labelId : null\"\n [style.grid-template-columns]=\"'repeat(' + options().length + ', 1fr)'\"\n >\n @if (thumbIndex(); as index) {\n <span\n aria-hidden=\"true\"\n class=\"absolute top-0.5 bottom-0.5 left-0.5 rounded-[calc(var(--radius-control)-2px)] bg-(--card) shadow-[0_1px_2px_rgb(0_0_0/0.08),inset_0_0_0_1px_var(--border)] transition-transform duration-(--duration-fast) ease-out\"\n data-thumb\n [style.transform]=\"'translateX(' + (index - 1) * 100 + '%)'\"\n [style.width]=\"'calc((100% - 4px) / ' + options().length + ')'\"\n ></span>\n }\n\n @for (option of options(); track option.value) {\n <button\n #radio\n role=\"radio\"\n type=\"button\"\n [attr.aria-checked]=\"option.value === value()\"\n [attr.tabindex]=\"tabIndexFor(option.value)\"\n [class]=\"optionClasses(option.value)\"\n (click)=\"select(option.value)\"\n (keydown)=\"onKeydown($event)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </div>\n `,\n})\nexport class UiSegmented {\n readonly options = input.required<SegmentedOption[]>();\n readonly label = input.required<string>();\n readonly showLabel = input(false, { transform: booleanAttribute });\n\n protected readonly labelId = nextId();\n readonly value = model.required<string>();\n readonly size = input<SegmentedSize>('md');\n\n protected readonly radios = viewChildren<ElementRef<HTMLButtonElement>>('radio');\n\n protected readonly thumbIndex = computed(() => {\n const index = this.options().findIndex((option) => option.value === this.value());\n\n return index === -1 ? 0 : index + 1;\n });\n\n protected optionClasses(optionValue: string): string {\n return `${OPTION_CLASSES} ${SIZE_CLASSES[this.size()]} ${optionValue === this.value() ? SELECTED_CLASSES : UNSELECTED_CLASSES}`;\n }\n\n protected tabIndexFor(optionValue: string): number {\n const opts = this.options();\n const tabStopValue = opts.some((option) => option.value === this.value()) ? this.value() : opts[0]?.value;\n\n return optionValue === tabStopValue ? 0 : -1;\n }\n\n protected select(optionValue: string): void {\n this.value.set(optionValue);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const delta = { ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 }[event.key];\n if (delta === undefined) {\n return;\n }\n event.preventDefault();\n\n const opts = this.options();\n const currentIndex = opts.findIndex((option) => option.value === this.value());\n const nextIndex = (currentIndex + delta + opts.length) % opts.length;\n const next = opts[nextIndex]!;\n\n this.value.set(next.value);\n this.radios()[nextIndex]?.nativeElement.focus();\n }\n}\n","import { Directive, computed, forwardRef, input } from '@angular/core';\n\nimport { UI_CONTROL, type UiControl, type UiControlError } from '../control/control';\nimport { CONTROL_BASE_CLASSES, CONTROL_SIZE_CLASSES, type ControlSize } from '../input/input';\n\nconst SELECT_CLASSES =\n 'cursor-pointer appearance-none pr-10 bg-(image:--chevron-down) bg-no-repeat bg-[position:right_0.75rem_center] bg-[size:1.125rem]';\n\n// Spelled out prefix included: Tailwind scans for literal strings, so a prefix applied in code\n// emits nothing.\nconst PICKER_CLASSES = [\n 'pointer-fine:supports-[appearance:base-select]:[appearance:base-select]',\n 'pointer-fine:supports-[appearance:base-select]:items-center',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:cursor-pointer',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:rounded-control',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:px-2.5',\n 'pointer-fine:supports-[appearance:base-select]:[&_option]:py-2',\n 'pointer-fine:supports-[appearance:base-select]:[&_option:hover]:bg-(--soft)',\n 'pointer-fine:supports-[appearance:base-select]:[&_option:focus]:bg-(--soft)',\n 'pointer-fine:supports-[appearance:base-select]:[&_option:checked]:font-medium',\n '[&::picker-icon]:hidden',\n '[&::picker(select)]:[appearance:base-select]',\n '[&::picker(select)]:my-1.5',\n '[&::picker(select)]:rounded-control',\n '[&::picker(select)]:border',\n '[&::picker(select)]:border-(--border)',\n '[&::picker(select)]:bg-(--card)',\n '[&::picker(select)]:[position-try-fallbacks:none]',\n '[&::picker(select)]:overflow-y-auto',\n '[&::picker(select)]:p-1',\n '[&::picker(select)]:text-(--card-foreground)',\n].join(' ');\n\n/**\n * Styled native select, drop-down list included where the browser allows it. It stays a native\n * `<select>`: keyboard, typeahead and semantics come from the platform, not from a rebuilt listbox.\n *\n * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around\n * it can show the message without any binding here.\n *\n * @example\n * <select uiSelect><option value=\"pea\">PEA</option></select>\n */\n@Directive({\n selector: 'select[uiSelect]',\n host: {\n '[class]': 'classes()',\n },\n providers: [{ provide: UI_CONTROL, useExisting: forwardRef(() => UiSelect) }],\n})\nexport class UiSelect implements UiControl {\n readonly size = input<ControlSize>('md');\n readonly errors = input<readonly UiControlError[]>([]);\n readonly touched = input(false);\n\n protected readonly classes = computed(\n () =>\n `${CONTROL_BASE_CLASSES} bg-(--background) ${SELECT_CLASSES} ${PICKER_CLASSES} ${CONTROL_SIZE_CLASSES[this.size()]}`,\n );\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available skeleton shapes. `SkeletonShape` is derived from this tuple. */\nexport const SKELETON_SHAPES = ['text', 'figure', 'row', 'chart', 'ring', 'dot'] as const;\nexport type SkeletonShape = (typeof SKELETON_SHAPES)[number];\n\nconst LAST_LINE_WIDTH = '62%';\n\nconst PULSE_ANIMATION = 'cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate';\n\nconst BAR_CLASSES = 'block rounded-control bg-(--muted)';\n\n/**\n * Decorative, pulsing placeholder for content that is still loading, at the shape of the content\n * it stands in for.\n *\n * @example\n * <ui-skeleton shape=\"figure\" />\n * <ui-skeleton [lines]=\"3\" />\n */\n@Component({\n selector: 'ui-skeleton',\n template: `\n @switch (shape()) {\n @case ('figure') {\n <span class=\"${BAR_CLASSES} h-10 w-65\" [style.animation]=\"animation\"></span>\n }\n @case ('row') {\n <span class=\"flex h-14 items-center justify-between gap-4\">\n <span class=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <span class=\"${BAR_CLASSES} h-4 w-3/5\" [style.animation]=\"animation\"></span>\n <span class=\"${BAR_CLASSES} h-3 w-20\" [style.animation]=\"animation\"></span>\n </span>\n <span class=\"${BAR_CLASSES} h-4 w-[90px] flex-none\" [style.animation]=\"animation\"></span>\n </span>\n }\n @case ('chart') {\n <span class=\"rounded-control min-h-50 w-full flex-1 bg-(--muted)\" [style.animation]=\"animation\"></span>\n }\n @case ('dot') {\n <span class=\"rounded-pill size-3 bg-(--muted)\" [style.animation]=\"animation\"></span>\n }\n @case ('ring') {\n <span\n class=\"rounded-pill shadow-[inset_0_0_0_30px_var(--muted)]\"\n [style.animation]=\"animation\"\n [style.height.px]=\"size()\"\n [style.width.px]=\"size()\"\n ></span>\n }\n @default {\n @for (line of bars(); track $index) {\n <span\n class=\"${BAR_CLASSES}\"\n [style.animation]=\"animation\"\n [style.height.px]=\"height()\"\n [style.width]=\"line\"\n ></span>\n }\n }\n }\n `,\n host: {\n 'aria-hidden': 'true',\n class: 'flex flex-col gap-2',\n },\n styles: `\n @keyframes cairn-pulse {\n from {\n opacity: 1;\n }\n to {\n opacity: 0.45;\n }\n }\n `,\n})\nexport class UiSkeleton {\n readonly shape = input<SkeletonShape>('text');\n readonly lines = input(1);\n readonly height = input(12);\n readonly size = input(232);\n\n protected readonly animation = PULSE_ANIMATION;\n\n protected readonly bars = computed(() => {\n const count = Math.max(1, this.lines());\n\n return Array.from({ length: count }, (_, index) => (index === count - 1 && count > 1 ? LAST_LINE_WIDTH : '100%'));\n });\n}\n","import { Component, computed, input } from '@angular/core';\n\n/** Available stat sizes. `StatSize` is derived from this tuple. */\nexport const STAT_SIZES = ['hero', 'tile'] as const;\nexport type StatSize = (typeof STAT_SIZES)[number];\n\nconst VALUE_CLASSES: Record<StatSize, string> = {\n hero: 'text-display font-semibold tracking-(--tracking-display) text-(--foreground)',\n tile: 'text-title font-semibold tabular-nums text-(--foreground)',\n};\n\nconst LABEL_CLASSES: Record<StatSize, string> = {\n hero: 'text-label font-medium text-(--muted-foreground)',\n tile: 'text-label font-normal text-(--muted-foreground)',\n};\n\nconst STACK_CLASSES: Record<StatSize, string> = {\n hero: 'flex flex-col gap-1',\n tile: 'flex flex-col gap-0.5',\n};\n\n/**\n * Label, figure and a named period of change, at two sizes: a `hero` for a screen's single\n * headline number, or a smaller `tile` repeated in a grid. The figure itself, its delta and its\n * caption are all projected, so the component carries no formatting and no currency of its own.\n *\n * The `hero` size never sets `tabular-nums` on the figure: a lone headline number reads better\n * with its digits at their natural width, unlike a column of aligned figures.\n *\n * @example\n * <ui-stat label=\"Net worth\" size=\"hero\">\n * <span uiStatValue>128,656 EUR</span>\n * <ui-delta uiStatDelta [value]=\"dayChange()\" unknownLabel=\"Not available\">+316.54 EUR</ui-delta>\n * <span uiStatCaption>today</span>\n * </ui-stat>\n */\n@Component({\n selector: 'ui-stat',\n template: `\n <div class=\"flex items-start justify-between gap-4\">\n <div [class]=\"stackClasses()\">\n <dl [class]=\"stackClasses()\">\n <dt [class]=\"labelClasses()\">{{ label() }}</dt>\n <dd [class]=\"valueClasses()\">\n <ng-content select=\"[uiStatValue]\" />\n </dd>\n </dl>\n\n <div class=\"text-label flex flex-wrap items-center gap-x-1.5 gap-y-1 text-(--muted-foreground)\">\n <ng-content select=\"[uiStatDelta]\" />\n <ng-content select=\"[uiStatCaption]\" />\n </div>\n </div>\n\n <ng-content select=\"[uiStatAside]\" />\n </div>\n `,\n})\nexport class UiStat {\n readonly label = input.required<string>();\n readonly size = input<StatSize>('tile');\n\n protected readonly labelClasses = computed(() => LABEL_CLASSES[this.size()]);\n\n protected readonly stackClasses = computed(() => STACK_CLASSES[this.size()]);\n\n protected readonly valueClasses = computed(() => VALUE_CLASSES[this.size()]);\n}\n","import { Directive } from '@angular/core';\n\nconst CLASSES =\n \"relative shrink-0 w-[51px] h-[31px] pointer-fine:w-10 pointer-fine:h-6 appearance-none cursor-pointer rounded-pill bg-(--muted) checked:bg-(--primary) transition-colors duration-(--duration-fast) ease-out disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) before:absolute before:inset-x-0 before:top-1/2 before:-translate-y-1/2 before:h-(--row-min) before:content-[''] after:absolute after:top-0.5 after:left-0.5 after:size-[27px] pointer-fine:after:size-5 after:rounded-pill after:bg-(--card) after:shadow-[0_1px_3px_rgb(0_0_0/0.2)] after:transition-transform after:duration-(--duration-fast) after:ease-out after:content-[''] checked:after:translate-x-[20px] pointer-fine:checked:after:translate-x-4\";\n\n/**\n * Native checkbox styled as an iOS-style switch, exposed to assistive technology as `role=\"switch\"`.\n * 51 by 31 on touch, 40 by 24 with a mouse.\n *\n * @example\n * <input type=\"checkbox\" uiSwitch [checked]=\"hidden()\" (change)=\"toggle()\" aria-label=\"Hide amounts\" />\n */\n@Directive({\n selector: 'input[type=checkbox][uiSwitch]',\n host: {\n role: 'switch',\n '[class]': 'classes',\n },\n})\nexport class UiSwitch {\n protected readonly classes = CLASSES;\n}\n","import { Component, booleanAttribute, computed, input } from '@angular/core';\n\nconst TAB_CLASSES =\n 'flex h-[52px] flex-col items-center justify-center gap-[3px] touch-manipulation select-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst INACTIVE_TAB_CLASSES = 'font-medium text-(--muted-foreground)';\n\nconst ACTIVE_TAB_CLASSES = 'font-semibold text-(--foreground)';\n\n/**\n * Bottom navigation bar for iPhone: 52px of tabs plus the home indicator's safe area.\n *\n * @example\n * <nav ui-tab-bar>\n * <a ui-tab [active]=\"url === '/'\" routerLink=\"/\"><lucide-icon tabIcon name=\"house\" />Portfolio</a>\n * </nav>\n */\n@Component({\n selector: 'nav[ui-tab-bar]',\n template: '<ng-content />',\n host: {\n class:\n 'grid grid-flow-col auto-cols-fr items-stretch bg-(--background)/90 backdrop-blur [@media(prefers-reduced-transparency:reduce)]:bg-(--background) shadow-[inset_0_1px_0_var(--hairline)] pb-[env(safe-area-inset-bottom)]',\n },\n})\nexport class UiTabBar {}\n\n/**\n * One destination of `ui-tab-bar`.\n *\n * @example\n * <a ui-tab active routerLink=\"/\"><lucide-icon tabIcon name=\"house\" />Portfolio</a>\n */\n@Component({\n selector: 'a[ui-tab]',\n template: `\n <span class=\"size-6\" data-tab-icon><ng-content select=\"[tabIcon]\" /></span>\n <span class=\"text-caption leading-none\" data-tab-label><ng-content /></span>\n `,\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': \"active() ? 'page' : null\",\n },\n})\nexport class UiTab {\n readonly active = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(\n () => `${TAB_CLASSES} ${this.active() ? ACTIVE_TAB_CLASSES : INACTIVE_TAB_CLASSES}`,\n );\n}\n","import { Component, Directive, booleanAttribute, computed, input } from '@angular/core';\n\n/** Breakpoints a secondary column can be held back until. */\nexport const CELL_BREAKPOINTS = ['md', 'lg'] as const;\nexport type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];\n\n/** Body row heights. */\nexport const TABLE_ROWS = ['48', '52', '60'] as const;\nexport type TableRow = (typeof TABLE_ROWS)[number];\n\nconst ROW_CLASSES: Record<TableRow, string> = {\n '48': '[--table-row:3rem]',\n '52': '[--table-row:3.25rem]',\n '60': '[--table-row:3.75rem]',\n};\n\nconst FROM_CLASSES: Record<CellBreakpoint, string> = {\n md: 'hidden md:table-cell',\n lg: 'hidden lg:table-cell',\n};\n\nconst TH_CLASSES =\n 'h-[calc(var(--table-head)+var(--table-head-gap))] border-b-(length:--table-head-gap) border-transparent px-2 align-middle text-caption font-medium text-(--subtle-foreground) shadow-(--table-rule)';\nconst TD_CLASSES = 'h-(--table-row) px-2 align-middle text-body';\nconst NUMERIC_CLASSES = 'text-right tabular-nums whitespace-nowrap';\nconst TEXTUAL_CLASSES = 'text-left';\nconst PRIMARY_CLASSES = 'w-full max-w-0';\n\n/**\n * Styled native table. The rows and cells stay plain <tr> and <td>. `row` sets the height of every\n * body row, `rule` draws or drops the hairline under the header, `spaced` leaves 4px between the\n * header and the first row.\n *\n * @example\n * <table uiTable row=\"60\" [rule]=\"false\">\n */\n@Directive({\n selector: 'table[uiTable]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiTable {\n readonly row = input<TableRow>('48');\n readonly rule = input(true, { transform: booleanAttribute });\n readonly spaced = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n [\n 'w-full border-separate border-spacing-0',\n ROW_CLASSES[this.row()],\n this.rule() ? '[--table-rule:inset_0_-1px_0_var(--hairline)]' : '[--table-rule:none]',\n this.spaced() ? '[--table-head-gap:0.25rem]' : '[--table-head-gap:0px]',\n ].join(' '),\n );\n}\n\n/** Body of one group of rows: leaves a 4px tail after its last row. */\n@Directive({\n selector: 'tbody[uiGroup]',\n host: { class: 'after:table-row after:h-1 after:content-[\"\"]' },\n})\nexport class UiGroup {}\n\n/**\n * Body or group row. An ordinary row glows on hover and takes the soft fill when `selected`; an\n * `interactive` row (one that opens something) also presses to the soft fill. A row with no action keeps a\n * plain name: `<td uiTd primary class=\"truncate font-medium\">`.\n * `group` marks the row that holds a group band: it carries no hover state.\n *\n * @example\n * <tr uiTr [selected]=\"open\">...\n * <tr uiTr group><td ui-group-cell name=\"Brokerage\">...\n */\n@Directive({\n selector: 'tr[uiTr]',\n host: {\n '[class]': 'classes()',\n '[attr.aria-selected]': 'selected() ? \"true\" : null',\n },\n})\nexport class UiTr {\n readonly group = input(false, { transform: booleanAttribute });\n readonly selected = input(false, { transform: booleanAttribute });\n readonly interactive = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() => {\n if (this.group()) {\n return '';\n }\n return [\n 'relative [&>td:first-child]:rounded-l-control [&>td:last-child]:rounded-r-control',\n this.selected() ? '[&>td]:bg-(--soft)' : '',\n 'hover:[&>td]:bg-(--glow)',\n this.interactive() ? 'active:[&>td]:bg-(--soft)' : '',\n ]\n .filter(Boolean)\n .join(' ');\n });\n}\n\nconst cellClasses = (\n base: string,\n numeric: boolean,\n primary: boolean,\n from: CellBreakpoint | null,\n secondary: boolean,\n): string => {\n const breakpoint = from ?? (secondary ? 'lg' : null);\n return [\n base,\n numeric ? NUMERIC_CLASSES : TEXTUAL_CLASSES,\n primary ? PRIMARY_CLASSES : '',\n breakpoint ? FROM_CLASSES[breakpoint] : '',\n ]\n .filter(Boolean)\n .join(' ');\n};\n\n/**\n * Column header, centred in its 36px. `numeric` right-aligns and lines the digits up; `secondary`\n * (or `from`) holds a column back until the viewport is wide enough for it; `primary` makes it\n * the column that absorbs the free width and truncates; `tall` is a 40px header; `width` fixes the column width and keeps it from shrinking.\n *\n * @example\n * <th uiTh numeric secondary width=\"108px\">Quantity</th>\n */\n@Directive({\n selector: 'th[uiTh]',\n host: {\n '[class]': 'classes()',\n '[style.width]': 'width()',\n '[style.min-width]': 'width()',\n },\n})\nexport class UiTh {\n readonly width = input<string | null>(null);\n readonly numeric = input(false, { transform: booleanAttribute });\n readonly primary = input(false, { transform: booleanAttribute });\n readonly secondary = input(false, { transform: booleanAttribute });\n readonly tall = input(false, { transform: booleanAttribute });\n readonly from = input<CellBreakpoint | null>(null);\n\n protected readonly classes = computed(() =>\n cellClasses(\n `${this.tall() ? '[--table-head:2.5rem]' : '[--table-head:2.25rem]'} ${TH_CLASSES}`,\n this.numeric(),\n this.primary(),\n this.from(),\n this.secondary(),\n ),\n );\n}\n\n/** Body cell. Same inputs as `UiTh` (bar `tall` and `width`), and they must be set on both to match. */\n@Directive({\n selector: 'td[uiTd]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiTd {\n readonly numeric = input(false, { transform: booleanAttribute });\n readonly primary = input(false, { transform: booleanAttribute });\n readonly secondary = input(false, { transform: booleanAttribute });\n readonly from = input<CellBreakpoint | null>(null);\n\n protected readonly classes = computed(() =>\n cellClasses(TD_CLASSES, this.numeric(), this.primary(), this.from(), this.secondary()),\n );\n}\n\n/** Group band sizes. */\nexport const GROUP_SIZES = ['md', 'lg'] as const;\nexport type GroupSize = (typeof GROUP_SIZES)[number];\n\n/**\n * The band that opens a group of rows: name in 600 (a heading), meta beside it, the projected\n * total pinned to the right. Spans the whole row through `colspan`.\n *\n * @example\n * <tr uiTr group><td ui-group-cell colspan=\"4\" name=\"Brokerage\" meta=\"Savings plan\">...total...</td></tr>\n */\n@Component({\n selector: 'td[ui-group-cell]',\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n <div\n class=\"rounded-control flex items-center justify-between gap-4 bg-(--muted) px-2\"\n [class]=\"size() === 'lg' ? 'min-h-12' : 'min-h-11'\"\n >\n <div class=\"flex min-w-0 items-baseline gap-3\">\n <h2 class=\"text-body m-0 font-semibold whitespace-nowrap outline-none\" data-group-heading tabindex=\"-1\">\n {{ name() }}\n </h2>\n @if (meta()) {\n <span class=\"text-label truncate text-(--muted-foreground)\">{{ meta() }}</span>\n }\n </div>\n <span class=\"font-semibold whitespace-nowrap tabular-nums\"><ng-content /></span>\n </div>\n `,\n})\nexport class UiGroupCell {\n readonly name = input.required<string>();\n readonly meta = input<string>();\n readonly size = input<GroupSize>('md');\n\n protected readonly hostClasses = computed(\n () => `px-0 ${this.size() === 'lg' ? 'pt-3' : 'pt-2.5'} pb-1 align-middle text-body`,\n );\n}\n\n/**\n * Makes a link or button the way into its row. By default an invisible layer stretches over the\n * whole row, so the row is one target for the pointer, the keyboard and a screen reader, and its\n * focus ring wraps the row. With `[stretch]=\"false\"` only the name is the\n * target: it underlines on hover and takes its own ring. `current` marks the open line.\n *\n * @example\n * <td uiTd primary><a uiRowLink href=\"/lines/42\">Ferrari</a></td>\n * <td uiTd primary><a uiRowLink [stretch]=\"false\" href=\"/accounts/3\">Brokerage</a></td>\n */\n@Directive({\n selector: 'a[uiRowLink], button[uiRowLink]',\n host: {\n '[class]': 'classes()',\n '[attr.aria-current]': 'current() ? \"true\" : null',\n },\n})\nexport class UiRowLink {\n readonly stretch = input(true, { transform: booleanAttribute });\n readonly current = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n this.stretch()\n ? 'block max-w-full truncate rounded-control text-left font-medium outline-none after:absolute after:inset-0 after:rounded-control after:content-[\"\"] focus-visible:after:outline-2 focus-visible:after:-outline-offset-2 focus-visible:after:outline-(--ring)'\n : 'block max-w-full truncate rounded-sm text-left font-medium underline-offset-[3px] outline-none hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)',\n );\n}\n\n/** A control in another cell of a stretched-link row: lifts it above the layer that covers the row. */\n@Directive({\n selector: '[uiRowAction]',\n host: { class: 'relative z-1' },\n})\nexport class UiRowAction {}\n\n/** Tones of a subtitle: subtle (default), `--stale` at 500, or the color of the cell. */\nexport const SUB_TONES = ['subtle', 'stale', 'inherit'] as const;\nexport type SubTone = (typeof SUB_TONES)[number];\n\nconst SUB_TONE_CLASSES: Record<SubTone, string> = {\n subtle: 'font-normal text-(--subtle-foreground)',\n stale: 'font-medium text-(--stale)',\n inherit: 'font-normal',\n};\n\n/**\n * A second line under a cell's main text. `narrow` shows it only under 1024px, where it carries\n * the quantity, average cost and quote that were held back. Its amounts go through `ui-amount`\n * so they mask.\n *\n * @example\n * <span uiCellSub narrow>10 × 421.26 € · cost 388.10 €</span>\n * <span uiCellSub tone=\"stale\">Quote of 24/09</span>\n */\n@Directive({\n selector: '[uiCellSub]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiCellSub {\n readonly narrow = input(false, { transform: booleanAttribute });\n readonly tone = input<SubTone>('subtle');\n\n protected readonly classes = computed(\n () =>\n `${this.narrow() ? 'lg:hidden ' : ''}block truncate text-caption tabular-nums ${SUB_TONE_CLASSES[this.tone()]}`,\n );\n}\n","/*\n * Public API surface of the ui library.\n */\n\nexport { UiActionBar } from './lib/action-bar/action-bar';\nexport { ALERT_VARIANTS, UiAlert, type AlertVariant } from './lib/alert/alert';\nexport {\n AMOUNT_MASKINGS,\n AMOUNT_NUMERICS,\n UI_AMOUNT_MASKED,\n UiAmount,\n type AmountMasking,\n type AmountNumeric,\n} from './lib/amount/amount';\nexport { type AmountFormatOptions, formatAmount } from './lib/amount/format-amount';\nexport {\n ASYNC_ALIGNS,\n ASYNC_STATES,\n ASYNC_VARIANTS,\n UiAsync,\n type AsyncAlign,\n type AsyncState,\n type AsyncVariant,\n} from './lib/async/async';\nexport { AVATAR_SIZES, UiAvatar, UiAvatarLink, type AvatarSize } from './lib/avatar/avatar';\nexport { BACK_LINK_SIZES, UiBackLink, type BackLinkSize } from './lib/back-link/back-link';\nexport { BADGE_SIZES, BADGE_VARIANTS, UiBadge, type BadgeSize, type BadgeVariant } from './lib/badge/badge';\nexport { BUTTON_SIZES, BUTTON_VARIANTS, UiButton, type ButtonSize, type ButtonVariant } from './lib/button/button';\nexport {\n CARD_PADDINGS,\n CARD_SURFACES,\n CARD_VARIANTS,\n UiCard,\n type CardPadding,\n type CardSurface,\n type CardVariant,\n} from './lib/card/card';\nexport { type ChoiceChipOption, UiChoiceChips } from './lib/choice-chips/choice-chips';\nexport { type UiControlError } from './lib/control/control';\nexport {\n DELTA_EMPHASES,\n DELTA_SIZES,\n DELTA_WEIGHTS,\n UiDelta,\n type DeltaEmphasis,\n type DeltaSize,\n type DeltaWeight,\n} from './lib/delta/delta';\nexport { DIALOG_LAYOUTS, DIALOG_WIDTHS, UiDialog, type DialogLayout, type DialogWidth } from './lib/dialog/dialog';\nexport { type DonutSlice, UiDonut } from './lib/donut/donut';\nexport { UiExternalLink } from './lib/external-link/external-link';\nexport { FACT_SIZES, FACT_SUB_TONES, UiFact, UiFacts, type FactSize, type FactSubTone } from './lib/fact/fact';\nexport { UiField, UiFieldLeading, UiFieldTrailing } from './lib/field/field';\nexport { type FilterChipOption, UiFilterChips } from './lib/filter-chips/filter-chips';\nexport {\n CONTROL_SIZES,\n CONTROL_SURFACES,\n UiInput,\n UiTextarea,\n type ControlSize,\n type ControlSurface,\n} from './lib/input/input';\nexport { type AxisTicks, type ChartPoint, type TooltipSize, UiLineChart } from './lib/line-chart/line-chart';\nexport { UiMenu, UiMenuItem, UiMenuTrigger } from './lib/menu/menu';\nexport { METER_SIZES, METER_TONES, UiMeter, type MeterSize, type MeterTone } from './lib/meter/meter';\nexport { UiNavItem } from './lib/nav-item/nav-item';\nexport {\n ROW_GAPS,\n ROW_PADDINGS,\n ROW_SIZES,\n UiListRow,\n UiRow,\n UiRowItem,\n type RowGap,\n type RowPadding,\n type RowSize,\n} from './lib/row/row';\nexport { SEGMENTED_SIZES, UiSegmented, type SegmentedOption, type SegmentedSize } from './lib/segmented/segmented';\nexport { UiSelect } from './lib/select/select';\nexport { SKELETON_SHAPES, UiSkeleton, type SkeletonShape } from './lib/skeleton/skeleton';\nexport { STAT_SIZES, UiStat, type StatSize } from './lib/stat/stat';\nexport { UiSwitch } from './lib/switch/switch';\nexport { UiTab, UiTabBar } from './lib/tab-bar/tab-bar';\nexport {\n CELL_BREAKPOINTS,\n GROUP_SIZES,\n SUB_TONES,\n TABLE_ROWS,\n UiCellSub,\n UiGroup,\n UiGroupCell,\n UiRowAction,\n UiRowLink,\n UiTable,\n UiTd,\n UiTh,\n UiTr,\n type CellBreakpoint,\n type GroupSize,\n type SubTone,\n type TableRow,\n} from './lib/table/table';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BASE_CLASSES","VARIANT_CLASSES","SIZE_CLASSES","PADDING_CLASSES","CHIP_CLASSES","SELECTED_CLASSES","UNSELECTED_CLASSES","nextId","PILL_CLASSES","identityValue","ROW_CLASSES","SUB_TONE_CLASSES"],"mappings":"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"}