@dataworkz/crystal 0.1.0-beta.0 → 0.1.0-beta.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +41 -13
  2. package/README.md +6 -0
  3. package/fesm2022/dataworkz-crystal-icons.mjs +31 -321
  4. package/fesm2022/dataworkz-crystal-icons.mjs.map +1 -1
  5. package/fesm2022/dataworkz-crystal-markdown.mjs +1 -1
  6. package/fesm2022/dataworkz-crystal-markdown.mjs.map +1 -1
  7. package/fesm2022/dataworkz-crystal-primeng.mjs +23 -4
  8. package/fesm2022/dataworkz-crystal-primeng.mjs.map +1 -1
  9. package/fesm2022/dataworkz-crystal.mjs +99 -70
  10. package/fesm2022/dataworkz-crystal.mjs.map +1 -1
  11. package/icons/index.d.ts +30 -96
  12. package/icons/svg/files/csv.svg +0 -1
  13. package/icons/svg/files/generic.svg +0 -1
  14. package/icons/svg/files/multimedia.svg +0 -1
  15. package/icons/svg/glyphs/agentBuilder.svg +1 -1
  16. package/icons/svg/glyphs/notesPad.svg +1 -1
  17. package/icons/svg/glyphs/panelCollapse.svg +1 -1
  18. package/icons/svg/glyphs/panelExpand.svg +1 -1
  19. package/icons/svg/glyphs/play.svg +1 -1
  20. package/icons/svg/glyphs/robot.svg +1 -1
  21. package/icons/svg/glyphs/sidebarCollapse.svg +1 -1
  22. package/icons/svg/glyphs/sidebarExpand.svg +1 -1
  23. package/icons/svg/glyphs/tagFilled.svg +1 -1
  24. package/icons/svg/glyphs/testShield.svg +1 -1
  25. package/icons/svg/storage/generic.svg +0 -1
  26. package/icons/svg/storage/legacy/microsoft-mail.svg +0 -1
  27. package/icons/svg/storage/local/microsoft-mail.svg +0 -1
  28. package/index.d.ts +86 -47
  29. package/package.json +1 -1
  30. package/primeng/index.d.ts +33 -4
  31. package/styles/base.css +4 -4
  32. package/styles/components/button.css +3 -0
  33. package/styles/components/content.css +0 -102
  34. package/styles/components/data.css +1 -1
  35. package/styles/components/form.css +3 -2
  36. package/styles/components/surface.css +2 -2
  37. package/styles/components/toast.css +1 -1
  38. package/styles/crystal-no-fonts.css +1 -2
  39. package/styles/tokens/primitives.css +1 -3
  40. package/styles/tokens/semantic-dark.css +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dataworkz-crystal.mjs","sources":["../../../../packages/crystal/src/lib/internal/image-icon.util.ts","../../../../packages/crystal/src/lib/tooltip/dw-tooltip-if-truncated.directive.ts","../../../../packages/crystal/src/lib/button/dw-button.component.ts","../../../../packages/crystal/src/lib/icon-button/dw-icon-button.component.ts","../../../../packages/crystal/src/lib/status-pill/dw-status.map.ts","../../../../packages/crystal/src/lib/status-pill/dw-status-pill.component.ts","../../../../packages/crystal/src/lib/badge/dw-badge.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-colors.ts","../../../../packages/crystal/src/lib/internal/svg-sanitizer.util.ts","../../../../packages/crystal/src/lib/icon/dw-icon-registry.ts","../../../../packages/crystal/src/lib/icon/dw-icon.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-list.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-color-picker.component.ts","../../../../packages/crystal/src/lib/overlay-anchor.util.ts","../../../../packages/crystal/src/lib/popover/dw-popover.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-color-button.component.ts","../../../../packages/crystal/src/lib/chip/dw-chip.component.ts","../../../../packages/crystal/src/lib/avatar/dw-avatar.component.ts","../../../../packages/crystal/src/lib/entity-icon/dw-entity-icon.component.ts","../../../../packages/crystal/src/lib/loading/dw-spinner.component.ts","../../../../packages/crystal/src/lib/loading/dw-skeleton.component.ts","../../../../packages/crystal/src/lib/meter/dw-meter.component.ts","../../../../packages/crystal/src/lib/check-toggle/dw-check-toggle.component.ts","../../../../packages/crystal/src/lib/empty-state/dw-empty-state.component.ts","../../../../packages/crystal/src/lib/banner/dw-banner.component.ts","../../../../packages/crystal/src/lib/layout/dw-layout.directives.ts","../../../../packages/crystal/src/lib/divider/dw-divider.component.ts","../../../../packages/crystal/src/lib/resizer/dw-resizer.component.ts","../../../../packages/crystal/src/lib/toast/dw-toast.service.ts","../../../../packages/crystal/src/lib/copy-button/dw-copy-button.component.ts","../../../../packages/crystal/src/lib/id-block/id-block.component.ts","../../../../packages/crystal/src/lib/id-block/id-block.component.html","../../../../packages/crystal/src/lib/field/dw-field-messages.ts","../../../../packages/crystal/src/lib/field/dw-field.component.ts","../../../../packages/crystal/src/lib/search-input/dw-search-input.component.ts","../../../../packages/crystal/src/lib/file-dropzone/dw-file-dropzone.component.ts","../../../../packages/crystal/src/lib/file-dropzone/dw-file-list.component.ts","../../../../packages/crystal/src/lib/menu/dw-menu.component.ts","../../../../packages/crystal/src/lib/card/dw-card.component.ts","../../../../packages/crystal/src/lib/card/dw-toggle-card.component.ts","../../../../packages/crystal/src/lib/tile/dw-tile.component.ts","../../../../packages/crystal/src/lib/section/dw-section.component.ts","../../../../packages/crystal/src/lib/tabs/dw-tabs.component.ts","../../../../packages/crystal/src/lib/tabs/dw-rail-tabs.component.ts","../../../../packages/crystal/src/lib/breadcrumb/dw-breadcrumb.component.ts","../../../../packages/crystal/src/lib/page-header/dw-page-header.component.ts","../../../../packages/crystal/src/lib/action-bar/dw-action-bar.component.ts","../../../../packages/crystal/src/lib/nav-list/dw-nav-list.component.ts","../../../../packages/crystal/src/lib/dialog/dw-dialog.component.ts","../../../../packages/crystal/src/lib/confirm-dialog/dw-confirm-dialog.component.ts","../../../../packages/crystal/src/lib/confirm-dialog/dw-confirm.service.ts","../../../../packages/crystal/src/lib/drawer/dw-drawer.component.ts","../../../../packages/crystal/src/lib/toast/dw-toast-host.component.ts","../../../../packages/crystal/src/lib/internal/table-rows.util.ts","../../../../packages/crystal/src/lib/internal/timestamp.util.ts","../../../../packages/crystal/src/lib/internal/date-format.util.ts","../../../../packages/crystal/src/lib/timestamp/dw-clock.service.ts","../../../../packages/crystal/src/lib/timestamp/dw-timestamp.component.ts","../../../../packages/crystal/src/lib/table/dw-table.component.ts","../../../../packages/crystal/src/lib/table/dw-column-picker.component.ts","../../../../packages/crystal/src/lib/theme/theme.service.ts","../../../../packages/crystal/src/lib/theme/provide-crystal.ts","../../../../packages/crystal/src/lib/theme/generated/host-theme.ts","../../../../packages/crystal/src/lib/theme/host-theme.ts","../../../../packages/crystal/src/index.ts","../../../../packages/crystal/src/dataworkz-crystal.ts"],"sourcesContent":["/**\n * True when an icon string is an image path rather than an icon-font class.\n *\n * Lives on its own (re-exported by dw-card, its public home) so the many components that need it don't import\n * dw-card: dw-badge did, while dw-card imports dw-badge, and that cycle left dw-card's `imports` undefined whenever\n * dw-badge happened to load first.\n */\nexport function isImageIcon(icon: string): boolean {\n return /[/.](svg|png|jpe?g|gif|webp)$/i.test(icon) || icon.startsWith('data:') || icon.includes('/');\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\n\n/** True when the element's text is cut off (ellipsis / clamp). */\nexport function isTruncated(el: HTMLElement): boolean {\n return el.scrollWidth > el.clientWidth + 1 || el.scrollHeight > el.clientHeight + 1;\n}\n\n/**\n * Only show the sibling `pTooltip` when the host text is truncated. Replaces\n * the `[tooltipDisabled]=\"el.scrollWidth <= el.clientWidth\"` pattern.\n *\n * ```html\n * <span class=\"dw-truncate\" [pTooltip]=\"row.name\" dwTooltipIfTruncated>{{ row.name }}</span>\n * <div [pTooltip]=\"desc\" dwTooltipIfTruncated [truncationTarget]=\"descEl\"><p #descEl class=\"dw-line-clamp-2\">…</p></div>\n * ```\n *\n * Tooltip conventions (no wrapper needed): `tooltipPosition=\"top\"` (default),\n * `[showDelay]=\"300\"`, `appendTo=\"body\"`; variants via\n * `tooltipStyleClass=\"dw-tooltip--multiline\"` / `\"dw-tooltip--error\"`.\n */\n@Directive({\n selector: '[dwTooltipIfTruncated]',\n standalone: true,\n host: {\n '(mouseenter)': 'refresh()',\n '(focusin)': 'refresh()',\n },\n})\nexport class DwTooltipIfTruncatedDirective {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltip = inject(Tooltip, { optional: true, self: true });\n\n /** Measure this element instead of the host (e.g. an inner clamped node). */\n readonly truncationTarget = input<HTMLElement | null>(null);\n\n refresh(): void {\n if (!this.tooltip) {\n return;\n }\n const target = this.truncationTarget() ?? this.host.nativeElement;\n // PrimeNG's show() reads the options object, which only the `tooltipDisabled`\n // binding updates — setting `disabled` alone never stopped the tooltip.\n const disabled = !isTruncated(target);\n this.tooltip.disabled = disabled;\n this.tooltip.setOption({ disabled });\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input, output, viewChild } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { Tooltip, TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { isTruncated } from '../tooltip/dw-tooltip-if-truncated.directive';\n\n/** `inverse` is a text / link action on a dark surface (snackbars, editor chrome). */\nexport type DwButtonVariant = 'primary' | 'secondary' | 'danger' | 'warn' | 'success' | 'inverse';\nexport type DwButtonAppearance = 'solid' | 'outlined' | 'text' | 'link';\nexport type DwButtonSize = 'sm' | 'md';\n\n/**\n * Design-system button. Renders a native `<button>` (or `<a>` when a\n * `routerLink`/`href` is given) styled by the global `.dw-btn` classes.\n *\n * ```html\n * <dw-button label=\"Save\" [loading]=\"saving\" loadingLabel=\"Saving…\" (clicked)=\"save()\" />\n * <dw-button label=\"Cancel\" variant=\"secondary\" appearance=\"outlined\" />\n * <dw-button label=\"Delete\" variant=\"danger\" icon=\"pi pi-trash\" />\n * <dw-button label=\"Open\" appearance=\"link\" routerLink=\"/agents\" />\n * ```\n */\n@Component({\n selector: 'dw-button',\n standalone: true,\n imports: [NgTemplateOutlet, RouterLink, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dw-button-host',\n '[class.dw-button-host--block]': 'block()',\n '[class.dw-button-host--truncate]': 'truncate()',\n },\n template: `\n <ng-template #content>\n @if (loading()) {\n <i class=\"pi pi-spin pi-spinner\" aria-hidden=\"true\"></i>\n } @else if (icon() && iconPos() === 'left') {\n @if (iconIsImage()) {\n <img class=\"dw-btn__img\" [src]=\"icon()\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n }\n @if (displayLabel()) {\n <span class=\"dw-btn__label\">{{ displayLabel() }}</span>\n }\n <ng-content />\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-btn__count\">{{ count() }}</span>\n }\n @if (!loading() && icon() && iconPos() === 'right') {\n @if (iconIsImage()) {\n <img class=\"dw-btn__img\" [src]=\"icon()\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n }\n @if (trailingIcon()) {\n <i [class]=\"trailingIcon()\" class=\"dw-btn__trailing\" aria-hidden=\"true\"></i>\n }\n </ng-template>\n\n <span\n class=\"dw-btn-wrap\"\n [pTooltip]=\"activeTooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [showDelay]=\"300\"\n [tooltipDisabled]=\"!activeTooltip()\"\n appendTo=\"body\"\n (mouseenter)=\"checkLabelCut()\"\n (focusin)=\"checkLabelCut()\"\n >\n @if (routerLink()) {\n <a\n [class]=\"classes()\"\n [routerLink]=\"routerLink()\"\n [queryParams]=\"queryParams()\"\n [target]=\"target() ?? undefined\"\n [attr.rel]=\"target() === '_blank' ? 'noopener noreferrer' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.tabindex]=\"isDisabled() ? -1 : null\"\n [attr.data-testid]=\"testId()\"\n (click)=\"onClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </a>\n } @else if (href()) {\n <a\n [class]=\"classes()\"\n [attr.href]=\"isDisabled() ? null : href()\"\n [attr.target]=\"target()\"\n [attr.rel]=\"target() === '_blank' ? 'noopener noreferrer' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.data-testid]=\"testId()\"\n (click)=\"onClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </a>\n } @else {\n <button\n [type]=\"type()\"\n [class]=\"classes()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() === null ? null : active()\"\n [attr.aria-busy]=\"loading() || null\"\n [attr.data-testid]=\"testId()\"\n (click)=\"onClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n }\n </span>\n `,\n})\nexport class DwButtonComponent {\n readonly label = input<string>('');\n readonly variant = input<DwButtonVariant>('primary');\n readonly appearance = input<DwButtonAppearance>('solid');\n readonly size = input<DwButtonSize>('md');\n readonly icon = input<string>('');\n readonly iconPos = input<'left' | 'right'>('left');\n readonly trailingIcon = input<string>('');\n readonly loading = input<boolean>(false);\n readonly loadingLabel = input<string>('');\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly disabled = input<boolean>(false);\n /** Tooltip shown only while the button is disabled. */\n readonly disabledReason = input<string>('');\n readonly tooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top');\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly routerLink = input<string | readonly unknown[] | null>(null);\n readonly queryParams = input<Record<string, unknown> | null>(null);\n readonly href = input<string | null>(null);\n readonly target = input<string | null>(null);\n readonly stopPropagation = input<boolean>(false);\n readonly ariaLabel = input<string | null>(null);\n /** Toggle state; renders aria-pressed when not null. */\n readonly active = input<boolean | null>(null);\n readonly count = input<number | string | null>(null);\n readonly block = input<boolean>(false);\n /**\n * Lets the button shrink with its container and cut the label with an ellipsis;\n * the tooltip then only shows while the label is actually cut off.\n */\n readonly truncate = input<boolean>(false);\n readonly rounded = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly clicked = output<MouseEvent>();\n\n /** `icon` may be a PrimeIcons class or an image path / data URI (e.g. a provider logo). */\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n readonly displayLabel = computed(() =>\n this.loading() && this.loadingLabel() ? this.loadingLabel() : this.label(),\n );\n readonly activeTooltip = computed(() =>\n this.disabled() && this.disabledReason() ? this.disabledReason() : this.tooltip(),\n );\n private readonly tip = viewChild(Tooltip);\n\n /**\n * truncate: let the tooltip open only while the label is cut off. Runs before PrimeNG's\n * own hover handler and sets the option its show() reads (toggling `tooltipDisabled`\n * mid-hover would cancel the pending show instead).\n */\n checkLabelCut(): void {\n const tip = this.tip();\n if (!this.truncate() || !tip || (this.disabled() && this.disabledReason())) {\n return;\n }\n const label = this.hostEl.nativeElement.querySelector('.dw-btn__label') as HTMLElement | null;\n tip.setOption({ disabled: !this.activeTooltip() || !label || !isTruncated(label) });\n }\n\n readonly classes = computed(() => {\n const appearance = this.appearance();\n const cls = ['dw-btn', `dw-btn--${this.variant()}`];\n if (appearance !== 'solid') {\n cls.push(`dw-btn--${appearance}`);\n }\n if (this.size() === 'sm') cls.push('dw-btn--sm');\n if (this.block()) cls.push('dw-btn--block');\n if (this.rounded()) cls.push('dw-btn--pill');\n // Icon-only (named through ariaLabel): square, like the other icon controls.\n if (this.icon() && !this.displayLabel() && (this.count() === null || this.count() === undefined)) cls.push('dw-btn--icon');\n if (this.active()) cls.push('is-active');\n if (this.isDisabled()) cls.push('is-disabled');\n return cls.join(' ');\n });\n\n onClick(event: MouseEvent): void {\n if (this.stopPropagation()) {\n event.stopPropagation();\n }\n if (this.isDisabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TooltipModule } from 'primeng/tooltip';\n\n/** `inverse` is for dark surfaces such as code-editor chrome. */\n/** `hover-outlined`: plain at rest, the outlined look on hover — for buttons sitting on a surface\n * whose own hover wash would hide the default hover (e.g. a tree row's expand toggle).\n * `toolbar`: page-header actions (run screen: Edit, Run settings, Help, Close) — a slightly\n * stronger glyph and an 8px radius. Pair with size=\"md\" for the 32px header button. */\nexport type DwIconButtonVariant = 'default' | 'accent' | 'danger' | 'outlined' | 'hover-outlined' | 'inverse' | 'toolbar';\n\n/**\n * Ghost icon-only button for row actions, close, kebab triggers.\n * `ariaLabel` is required — icon-only controls must be named.\n *\n * ```html\n * <dw-icon-button icon=\"pi pi-pencil\" ariaLabel=\"Edit\" tooltip=\"Edit\" (clicked)=\"edit(row)\" />\n * <dw-icon-button icon=\"pi pi-trash\" variant=\"danger\" ariaLabel=\"Delete\" (clicked)=\"remove(row)\" />\n * ```\n */\n@Component({\n selector: 'dw-icon-button',\n standalone: true,\n imports: [RouterLink, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-button-host' },\n template: `\n @if (routerLink()) {\n <a\n [class]=\"classes()\"\n [routerLink]=\"routerLink()\"\n [queryParams]=\"queryParams()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipStyleClass]=\"variant() === 'toolbar' ? 'dw-tooltip--toolbar' : ''\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"onClick($event)\"\n >\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"classes()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() === null ? null : active()\"\n [attr.aria-haspopup]=\"hasPopup() ? 'menu' : null\"\n [attr.aria-expanded]=\"expanded() ?? (hasPopup() ? false : null)\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipStyleClass]=\"variant() === 'toolbar' ? 'dw-tooltip--toolbar' : ''\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"onClick($event)\"\n >\n <i [class]=\"loading() ? 'pi pi-spin pi-spinner' : icon()\" aria-hidden=\"true\"></i>\n @if (attention()) {\n <span class=\"dw-icon-btn__dot\" aria-hidden=\"true\"></span>\n }\n </button>\n }\n `,\n})\nexport class DwIconButtonComponent {\n readonly icon = input.required<string>();\n readonly ariaLabel = input.required<string>();\n readonly variant = input<DwIconButtonVariant>('default');\n /** `xs` (20px) is for dense rows such as tree carets. */\n readonly size = input<'xs' | 'sm' | 'md'>('sm');\n readonly active = input<boolean | null>(null);\n /** Needs the user's attention (e.g. run settings not set): amber glyph plus an amber dot. */\n readonly attention = input<boolean>(false);\n readonly tooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top');\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n /** Row/card actions must not trigger the parent's click — on by default. */\n readonly stopPropagation = input<boolean>(true);\n readonly hasPopup = input<boolean>(false);\n /** Open state of what the button controls: a menu (with hasPopup) or a disclosure, e.g. a tree\n * row's expand toggle. Unset, a popup trigger reads as collapsed and other buttons omit it. */\n readonly expanded = input<boolean | null>(null);\n readonly routerLink = input<string | readonly unknown[] | null>(null);\n readonly queryParams = input<Record<string, unknown> | null>(null);\n readonly testId = input<string | null>(null);\n\n readonly clicked = output<MouseEvent>();\n\n readonly classes = computed(() => {\n const cls = ['dw-icon-btn'];\n if (this.size() === 'md') cls.push('dw-icon-btn--lg');\n if (this.size() === 'xs') cls.push('dw-icon-btn--xs');\n if (this.variant() !== 'default') cls.push(`dw-icon-btn--${this.variant()}`);\n if (this.active()) cls.push('is-active');\n if (this.attention()) cls.push('dw-icon-btn--attention');\n return cls.join(' ');\n });\n\n onClick(event: MouseEvent): void {\n if (this.stopPropagation()) {\n event.stopPropagation();\n }\n if (this.disabled() || this.loading()) {\n return;\n }\n this.clicked.emit(event);\n }\n}\n","export type DwTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral' | 'primary';\n\n/**\n * Central vocabulary: backend / UI status strings → design-system tone.\n * Matching is case-insensitive and ignores separators (`in-progress`,\n * `In Progress` and `IN_PROGRESS` are the same key).\n */\nexport const DW_STATUS_TONES: Readonly<Record<string, DwTone>> = {\n SUCCESS: 'success',\n SUCCEEDED: 'success',\n COMPLETED: 'success',\n COMPLETE: 'success',\n OK: 'success',\n ACTIVE: 'success',\n PARSED: 'success',\n DONE: 'success',\n ENABLED: 'success',\n\n ERROR: 'danger',\n ERRORED: 'danger',\n FAILED: 'danger',\n FAILURE: 'danger',\n TIMEOUT: 'danger',\n CANCELLED: 'danger',\n CANCELED: 'danger',\n REJECTED: 'danger',\n EXPIRED: 'danger',\n\n IN_PROGRESS: 'info',\n INPROGRESS: 'info',\n RUNNING: 'info',\n PROCESSING: 'info',\n STARTED: 'info',\n UPLOADING: 'info',\n\n PENDING: 'neutral',\n QUEUED: 'neutral',\n NOT_STARTED: 'neutral',\n NEW: 'neutral',\n SKIPPED: 'neutral',\n INACTIVE: 'neutral',\n DISABLED: 'neutral',\n DRAFT: 'neutral',\n\n UNTESTED: 'warning',\n PAUSED: 'warning',\n SUSPENDED: 'warning',\n WARNING: 'warning',\n DEPRECATED: 'warning',\n WAITING: 'warning',\n};\n\n/** Tones that represent work still happening (rendered with a pulsing dot). */\nexport const DW_IN_PROGRESS_STATUSES: ReadonlySet<string> = new Set([\n 'IN_PROGRESS',\n 'INPROGRESS',\n 'RUNNING',\n 'PROCESSING',\n 'STARTED',\n 'UPLOADING',\n]);\n\nexport function normalizeStatus(status: string | null | undefined): string {\n return (status ?? '').trim().toUpperCase().replace(/[\\s-]+/g, '_');\n}\n\nexport function toneForStatus(\n status: string | null | undefined,\n overrides?: Readonly<Record<string, DwTone>> | null,\n): DwTone {\n const key = normalizeStatus(status);\n if (overrides) {\n for (const [k, tone] of Object.entries(overrides)) {\n if (normalizeStatus(k) === key) {\n return tone;\n }\n }\n }\n return DW_STATUS_TONES[key] ?? 'neutral';\n}\n\n/** `IN_PROGRESS` → `In progress` */\nexport function humanizeStatus(status: string | null | undefined): string {\n const key = normalizeStatus(status);\n if (!key) {\n return '';\n }\n const words = key.toLowerCase().split('_').filter(Boolean);\n const text = words.join(' ');\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TooltipModule } from 'primeng/tooltip';\nimport {\n DW_IN_PROGRESS_STATUSES,\n DwTone,\n humanizeStatus,\n normalizeStatus,\n toneForStatus,\n} from './dw-status.map';\n\n/**\n * Status pill driven by the central status vocabulary (dw-status.map.ts).\n *\n * ```html\n * <dw-status-pill status=\"IN_PROGRESS\" /> <!-- info tone, pulsing dot -->\n * <dw-status-pill status=\"FAILED\" label=\"Error\" />\n * <dw-status-pill tone=\"warning\" label=\"Untested\" [dot]=\"false\" />\n * <dw-status-pill status=\"parsed\" [count]=\"12\" [selectable]=\"true\" [selected]=\"f === 'parsed'\"\n * (selectedChange)=\"f = 'parsed'\" />\n * ```\n * `status=\"none\"` renders an empty spacer that keeps column alignment.\n */\n@Component({\n selector: 'dw-status-pill',\n standalone: true,\n imports: [NgTemplateOutlet, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-status-pill-host' },\n template: `\n @if (isNone()) {\n <span class=\"dw-pill-spacer\" aria-hidden=\"true\"></span>\n } @else if (selectable()) {\n <button\n type=\"button\"\n [class]=\"classes()\"\n [attr.aria-pressed]=\"selected()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"toggle($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"body\" />\n </button>\n } @else {\n <span\n [class]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n <ng-container [ngTemplateOutlet]=\"body\" />\n </span>\n }\n\n <ng-template #body>\n @if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else if (dot()) {\n <span class=\"dw-pill__dot\" [class.dw-pill__dot--pulse]=\"isPulsing()\" aria-hidden=\"true\"></span>\n }\n <span class=\"dw-pill__label\">{{ text() }}</span>\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-pill__count\">{{ count() }}</span>\n }\n </ng-template>\n `,\n})\nexport class DwStatusPillComponent {\n readonly status = input<string | null>(null);\n /** Explicit tone wins over the status vocabulary. */\n readonly tone = input<DwTone | null>(null);\n /** Per-usage vocabulary overrides, e.g. `{ INACTIVE: 'danger' }`. */\n readonly map = input<Record<string, DwTone> | null>(null);\n readonly label = input<string>('');\n readonly dot = input<boolean>(true);\n readonly icon = input<string>('');\n readonly tooltip = input<string>('');\n readonly pulse = input<boolean | null>(null);\n readonly count = input<number | string | null>(null);\n readonly selectable = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly size = input<'sm' | 'md'>('md');\n readonly testId = input<string | null>(null);\n\n readonly selectedChange = output<boolean>();\n\n readonly isNone = computed(() => normalizeStatus(this.status()) === 'NONE' && !this.label());\n readonly resolvedTone = computed<DwTone>(() => this.tone() ?? toneForStatus(this.status(), this.map()));\n readonly text = computed(() => this.label() || humanizeStatus(this.status()));\n readonly isPulsing = computed(() => {\n const explicit = this.pulse();\n return explicit ?? DW_IN_PROGRESS_STATUSES.has(normalizeStatus(this.status()));\n });\n\n readonly classes = computed(() => {\n const cls = ['dw-pill', `dw-pill--${this.resolvedTone()}`];\n if (this.size() === 'sm') cls.push('dw-pill--sm');\n if (this.selectable()) cls.push('dw-pill--selectable');\n if (this.selected()) cls.push('is-selected');\n return cls.join(' ');\n });\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n this.selectedChange.emit(!this.selected());\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\n\n/** `workflow` / `reasoning` use the scenario-type entity tints. */\nexport type DwBadgeTone = 'neutral' | 'accent' | 'danger' | 'warning' | 'success' | 'muted' | 'workflow' | 'reasoning';\nexport type DwBadgeKind = 'count' | 'label';\n\n/**\n * Small badge — counts and short labels (Deprecated, type, category, Admin…).\n *\n * ```html\n * <dw-badge [value]=\"12\" />\n * <dw-badge value=\"Deprecated\" tone=\"muted\" tooltip=\"This agent is deprecated\" />\n * <dw-badge value=\"Required\" tone=\"accent\" kind=\"label\" />\n * <dw-badge value=\"admin\" [bordered]=\"true\" /> <!-- hairline outline, e.g. role pills -->\n * <dw-badge value=\"1 ms\" kind=\"label\" size=\"md\" /> <!-- 12px, in detail headers -->\n * <dw-badge value=\"Jira\" icon=\"assets/icons/jira.svg\" /> <!-- image path icons work too -->\n * ```\n */\n@Component({\n selector: 'dw-badge',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-label]=\"ariaLabel()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n @if (iconIsImage()) {\n <img class=\"dw-badge__img\" [src]=\"icon()\" alt=\"\" aria-hidden=\"true\" />\n } @else if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n {{ value() }}\n </span>\n `,\n})\nexport class DwBadgeComponent {\n readonly value = input<string | number | null>(null);\n readonly tone = input<DwBadgeTone>('neutral');\n /** `count` = round numeric pill, `label` = rectangular text badge. */\n readonly kind = input<DwBadgeKind | null>(null);\n /** Adds a hairline border around the badge. */\n readonly bordered = input<boolean>(false);\n /** `sm` (default) 11px text; `md` 12px, beside 13–14px detail text. */\n readonly size = input<'sm' | 'md'>('sm');\n /** PrimeIcons class, or an image path (svg/png/…). */\n readonly icon = input<string>('');\n readonly tooltip = input<string>('');\n readonly ariaLabel = input<string | null>(null);\n readonly testId = input<string | null>(null);\n\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n\n readonly resolvedKind = computed<DwBadgeKind>(\n () => this.kind() ?? (typeof this.value() === 'number' ? 'count' : 'label'),\n );\n\n readonly classes = computed(() => {\n const cls = ['dw-badge', `dw-badge--${this.tone()}`];\n if (this.resolvedKind() === 'label') cls.push('dw-badge--label');\n if (this.bordered()) cls.push('dw-badge--bordered');\n if (this.size() === 'md') cls.push('dw-badge--md');\n return cls.join(' ');\n });\n}\n","/**\n * User tag palette. Tag colours are stored by the backend as these hex\n * values; the UI resolves them to the matching --dw-tag-* token so a theme\n * can retune them. Unknown values are passed through as-is (user data).\n */\nexport const DW_TAG_PALETTE: ReadonlyArray<{ name: string; value: string; token: string }> = [\n { name: 'Red', value: '#ef4444', token: '--dw-tag-red' },\n { name: 'Orange', value: '#f97316', token: '--dw-tag-orange' },\n { name: 'Amber', value: '#f59e0b', token: '--dw-tag-amber' },\n { name: 'Yellow', value: '#eab308', token: '--dw-tag-yellow' },\n { name: 'Lime', value: '#84cc16', token: '--dw-tag-lime' },\n { name: 'Green', value: '#22c55e', token: '--dw-tag-green' },\n { name: 'Emerald', value: '#10b981', token: '--dw-tag-emerald' },\n { name: 'Teal', value: '#14b8a6', token: '--dw-tag-teal' },\n { name: 'Cyan', value: '#06b6d4', token: '--dw-tag-cyan' },\n { name: 'Sky', value: '#0ea5e9', token: '--dw-tag-sky' },\n { name: 'Blue', value: '#3b82f6', token: '--dw-tag-blue' },\n { name: 'Indigo', value: '#6366f1', token: '--dw-tag-indigo' },\n { name: 'Violet', value: '#8b5cf6', token: '--dw-tag-violet' },\n { name: 'Purple', value: '#a855f7', token: '--dw-tag-purple' },\n { name: 'Fuchsia', value: '#d946ef', token: '--dw-tag-fuchsia' },\n { name: 'Pink', value: '#ec4899', token: '--dw-tag-pink' },\n];\n\n/** Stable palette index for a label (same algorithm as the legacy tag-strip). */\nexport function hashTagIndex(label: string): number {\n let hash = 0;\n for (let i = 0; i < label.length; i++) {\n hash = (hash * 31 + label.charCodeAt(i)) | 0;\n }\n return Math.abs(hash) % DW_TAG_PALETTE.length;\n}\n\n/** CSS value for a tag dot: palette token, pass-through colour, or label hash. */\nexport function tagColorVar(color: string | null | undefined, label = ''): string {\n const value = (color ?? '').trim();\n if (value) {\n const match = DW_TAG_PALETTE.find((p) => p.value === value.toLowerCase());\n return match ? `var(${match.token})` : value;\n }\n return `var(${DW_TAG_PALETTE[hashTagIndex(label)].token})`;\n}\n","const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/** Elements that can run code, load content or restyle the page once the markup is inlined. */\nconst BLOCKED_ELEMENTS = new Set(['script', 'foreignobject', 'iframe', 'object', 'embed', 'link', 'style', 'meta', 'base']);\n\n/**\n * Makes consumer-provided SVG markup safe to inline (MIGRATION-PLAN §2.2): parses it as SVG, drops elements that\n * run code or load content (`<script>`, `<foreignObject>`, `<style>`…), every `on*` handler and every `href` that\n * isn't a same-document `#ref`, and the root's own width / height (dw-icon sizes it). Throws on markup that isn't one\n * `<svg>` element.\n */\nexport function sanitizeSvg(markup: string): string {\n if (typeof DOMParser === 'undefined' || typeof XMLSerializer === 'undefined') {\n throw new Error('sanitizeSvg needs a browser (DOMParser); register icons in the browser, not during SSR.');\n }\n const doc = new DOMParser().parseFromString(markup.trim(), 'image/svg+xml');\n const root = doc.documentElement;\n if (doc.getElementsByTagName('parsererror').length || root.localName !== 'svg' || root.namespaceURI !== SVG_NS) {\n throw new Error('Not an <svg> element.');\n }\n const elements = [root, ...Array.from(root.getElementsByTagName('*'))];\n for (const el of elements) {\n if (BLOCKED_ELEMENTS.has(el.localName.toLowerCase())) {\n el.remove();\n continue;\n }\n for (const attr of Array.from(el.attributes)) {\n const name = attr.name.toLowerCase();\n const isLink = name === 'href' || name.endsWith(':href');\n if (name.startsWith('on') || (isLink && !attr.value.trim().startsWith('#'))) {\n el.removeAttributeNode(attr);\n }\n }\n }\n root.removeAttribute('width');\n root.removeAttribute('height');\n return new XMLSerializer().serializeToString(root);\n}\n","import {\n EnvironmentProviders,\n Injectable,\n inject,\n isDevMode,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n signal,\n} from '@angular/core';\nimport { dwIconName, isGlyphName } from '@dataworkz/crystal/icons';\nimport { sanitizeSvg } from '../internal/svg-sanitizer.util';\n\n/** Icon names starting with this (any case) are crystal's: `dw…` and `dwi-…` (MIGRATION-PLAN D16). */\nexport const DW_RESERVED_ICON_PREFIX = 'dw';\n\n/**\n * The consumer's own SVG icons, by name. A consumer registers markup under any name that doesn't start with `dw`, and\n * uses it like a crystal glyph: `<dw-icon name=\"rocket\" />`, or `icon=\"rocket\"` on dw-chip, dw-nav-list items,\n * dw-rail-tabs and `dw-entity-icon kind=\"icon\"`.\n *\n * How an icon string resolves there: `dwi-<name>` is a crystal glyph; then a registered name is the consumer's SVG;\n * anything else is a CSS class (PrimeIcons `pi pi-…`).\n *\n * Markup strings only (bundle them, e.g. `import rocket from './rocket.svg?raw'`); no URLs. It's sanitized on\n * registration (no scripts, handlers, external links or `<style>`), drawn in its own colours or in currentColor.\n */\n@Injectable({ providedIn: 'root' })\nexport class DwIconRegistry {\n private readonly icons = new Map<string, string>();\n /** Bumped on every registration, so computed() in components that read the registry update (lazy features). */\n private readonly version = signal(0);\n\n /**\n * Adds an icon. Throws for a `dw…` name (crystal's) and for markup that isn't an `<svg>`. Registering a name twice\n * with different markup throws in dev mode; in production the first registration stays.\n */\n register(name: string, svg: string): void {\n const key = name.trim();\n if (!key || /\\s/.test(key)) {\n throw new Error(`DwIconRegistry: \"${name}\" is not an icon name (one word, no spaces).`);\n }\n if (key.toLowerCase().startsWith(DW_RESERVED_ICON_PREFIX)) {\n throw new Error(`DwIconRegistry: \"${key}\" starts with \"dw\", which is reserved for crystal's own icons.`);\n }\n let clean: string;\n try {\n clean = sanitizeSvg(svg);\n } catch (error) {\n throw new Error(`DwIconRegistry: \"${key}\": ${(error as Error).message}`);\n }\n const existing = this.icons.get(key);\n if (existing !== undefined) {\n if (existing !== clean && isDevMode()) {\n throw new Error(`DwIconRegistry: \"${key}\" is already registered with different markup.`);\n }\n return;\n }\n this.icons.set(key, clean);\n this.version.update((v) => v + 1);\n }\n\n /** Adds several icons (see {@link register}). */\n registerAll(icons: Readonly<Record<string, string>>): void {\n for (const [name, svg] of Object.entries(icons)) {\n this.register(name, svg);\n }\n }\n\n has(name: string | null | undefined): boolean {\n this.version();\n return !!name && this.icons.has(name);\n }\n\n /** Sanitized markup for a registered icon, sized for dw-icon; '' when unknown. */\n svg(name: string, size: number | string = '1em'): string {\n this.version();\n const markup = this.icons.get(name);\n return markup ? markup.replace('<svg', `<svg width=\"${size}\" height=\"${size}\"`) : '';\n }\n\n /** Registered names, in registration order. */\n names(): string[] {\n this.version();\n return [...this.icons.keys()];\n }\n\n /**\n * The `dw-icon` name an `icon` string stands for — a crystal glyph (`dwi-hand` → `hand`) or a registered name — or\n * null when it's a CSS class (PrimeIcons) to render as `<i class=\"…\">`.\n */\n resolve(icon: string | null | undefined): string | null {\n const glyph = dwIconName(icon);\n if (glyph) {\n return isGlyphName(glyph) ? glyph : null;\n }\n return this.has(icon) ? (icon as string) : null;\n }\n}\n\n/**\n * Registers the consumer's own icons at start-up (or when a lazy route's injector is created).\n *\n * ```ts\n * import rocketSvg from './icons/rocket.svg?raw';\n * providers: [provideCrystalIcons({ rocket: rocketSvg })]\n * ```\n */\nexport function provideCrystalIcons(icons: Readonly<Record<string, string>>): EnvironmentProviders {\n return makeEnvironmentProviders([provideEnvironmentInitializer(() => inject(DwIconRegistry).registerAll(icons))]);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { DwIconName, icon, isGlyphName } from '@dataworkz/crystal/icons';\nimport { DwIconRegistry } from './dw-icon-registry';\n\n/**\n * One of crystal's SVG glyphs (icons/svg/glyphs), or an icon the app registered with provideCrystalIcons(), drawn at\n * 1em so it follows the font size of its context; glyphs draw in `currentColor`, so they take its colour too.\n *\n * ```html\n * <dw-icon name=\"hand\" />\n * <dw-icon name=\"workflow\" size=\"16px\" class=\"dw-text-accent\" />\n * <dw-icon name=\"rocket\" /> <!-- registered by the app -->\n * ```\n */\n@Component({\n selector: 'dw-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-icon', 'aria-hidden': 'true', '[innerHTML]': 'svg()' },\n template: '',\n})\nexport class DwIconComponent {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly registry = inject(DwIconRegistry);\n\n /** A crystal glyph name, or a name registered with provideCrystalIcons(). */\n readonly name = input.required<DwIconName | (string & {})>();\n /** CSS length; defaults to the surrounding font size. */\n readonly size = input<string>('1em');\n\n readonly svg = computed<SafeHtml>(() => {\n const name = this.name();\n // Crystal's constant markup, or consumer markup sanitized when it was registered.\n const markup = isGlyphName(name) ? icon(name, this.size()) : this.registry.svg(name, this.size());\n return this.sanitizer.bypassSecurityTrustHtml(markup);\n });\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, input, output, viewChild } from '@angular/core';\nimport { Tooltip, TooltipModule } from 'primeng/tooltip';\nimport { isTruncated } from '../tooltip/dw-tooltip-if-truncated.directive';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { tagColorVar } from './dw-tag-colors';\n\n/**\n * User tag with a colour marker — a filled tag icon (default) or a dot (`marker=\"dot\"`). `color` is the stored tag colour (one of the\n * 16 palette hex values, resolved to its --dw-tag-* token) or any CSS colour.\n * Without a colour, one is derived from the label hash.\n *\n * ```html\n * <dw-tag label=\"finance\" color=\"#22c55e\" tooltip=\"team / finance\" />\n * <dw-tag label=\"draft\" [removable]=\"true\" (removed)=\"remove(tag)\" />\n * ```\n * A tooltip that just repeats the label only shows while the label is cut off (ellipsis).\n */\n@Component({\n selector: 'dw-tag',\n standalone: true,\n imports: [TooltipModule, DwIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-tag-host' },\n template: `\n <span\n class=\"dw-tag dw-tag--user\"\n [class.dw-tag--clickable]=\"clickable()\"\n [attr.role]=\"clickable() ? 'button' : null\"\n [attr.tabindex]=\"clickable() ? 0 : null\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip() || label()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (mouseenter)=\"gateTooltip()\"\n (focusin)=\"gateTooltip()\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n >\n @if (showDot()) {\n @if (marker() === 'icon') {\n <dw-icon class=\"dw-tag__icon\" name=\"tagFilled\" [style.color]=\"dotColor()\" aria-hidden=\"true\" />\n } @else {\n <span class=\"dw-tag__dot\" [style.background]=\"dotColor()\" aria-hidden=\"true\"></span>\n }\n }\n <span #labelEl class=\"dw-tag__label\">{{ label() }}</span>\n @if (removing()) {\n <i class=\"pi pi-spin pi-spinner dw-chip__remove dw-chip__remove--busy\" role=\"status\"\n [attr.aria-label]=\"'Removing ' + label()\"></i>\n } @else if (removable()) {\n <button\n type=\"button\"\n class=\"dw-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"onRemove($event)\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </span>\n `,\n})\nexport class DwTagComponent {\n readonly label = input.required<string>();\n readonly color = input<string | null>(null);\n /** Show the colour marker at all. */\n readonly showDot = input<boolean>(true);\n /** The colour marker: a filled tag icon (default) or a small square dot. */\n readonly marker = input<'icon' | 'dot'>('icon');\n readonly tooltip = input<string>('');\n readonly removable = input<boolean>(false);\n /** Removal in flight: the x becomes a small, non-clickable spinner. */\n readonly removing = input<boolean>(false);\n readonly clickable = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly removed = output<void>();\n readonly clicked = output<Event>();\n\n readonly dotColor = computed(() => tagColorVar(this.color(), this.label()));\n\n private readonly tip = viewChild(Tooltip);\n private readonly labelEl = viewChild<ElementRef<HTMLElement>>('labelEl');\n\n /** Runs before PrimeNG's own hover handler and sets the option its show() reads. */\n gateTooltip(): void {\n const tip = this.tip();\n const label = this.labelEl()?.nativeElement;\n if (!tip || !this.tooltip()) return;\n tip.setOption({ disabled: this.tooltip() === this.label() && !!label && !isTruncated(label) });\n }\n\n onClick(event: Event): void {\n if (!this.clickable()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.clicked.emit(event);\n }\n\n onRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.removed.emit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { DwTagComponent } from './dw-tag.component';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface DwTagItem {\n label: string;\n color?: string | null;\n tooltip?: string;\n id?: string | number;\n}\n\n/**\n * Row of tags with \"+N more\" overflow and an optional \"Add tags\" control.\n *\n * `addAppearance=\"icon\"` is the compact form for a narrow table column: one line, the tags\n * ellipsise as needed, and a single small outlined \"+\" button carries the hidden count\n * (\"+ 3\") — it replaces the \"+N more\" pill and emits `add`. With `[fit]=\"true\"` it shows as\n * many whole tags as the row has room for (at least one, ellipsised if it alone is too long),\n * re-fitted when the tags change or the window resizes.\n *\n * ```html\n * <dw-tag-list [tags]=\"agent.tags\" [maxVisible]=\"3\" [showAdd]=\"canEdit\"\n * (add)=\"openTags(agent)\" (moreClicked)=\"openTags(agent)\" />\n * ```\n */\n@Component({\n selector: 'dw-tag-list',\n standalone: true,\n imports: [DwTagComponent, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dw-tag-list',\n '[class.dw-tag-list--compact]': \"compact()\",\n '[class.dw-tag-list--measuring]': 'measuring()',\n },\n template: `\n @for (tag of visible(); track tag.id ?? tag.label) {\n <dw-tag\n [label]=\"tag.label\"\n [color]=\"tag.color ?? null\"\n [tooltip]=\"tag.tooltip ?? ''\"\n [removable]=\"removable()\"\n (removed)=\"removed.emit(tag)\"\n />\n }\n @if (hiddenCount() > 0 && !compact()) {\n <button\n type=\"button\"\n class=\"dw-tag dw-tag--more\"\n [attr.aria-label]=\"'Show ' + hiddenCount() + ' more tags'\"\n (click)=\"onMore($event)\"\n >\n +{{ hiddenCount() }} more\n </button>\n }\n @if (showAdd()) {\n @if (compact()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--outlined dw-icon-btn--xs dw-tag-list__add\"\n [class.dw-icon-btn--labelled]=\"hiddenCount() > 0\" [attr.aria-label]=\"compactAddLabel()\"\n [pTooltip]=\"addLabel()\" tooltipPosition=\"top\" [showDelay]=\"300\" appendTo=\"body\"\n (click)=\"onAdd($event)\">\n <i class=\"pi pi-plus\" aria-hidden=\"true\"></i>\n @if (hiddenCount() > 0) { <span class=\"dw-tag-list__add-count\">{{ hiddenCount() }}</span> }\n </button>\n } @else {\n <button type=\"button\" class=\"dw-tag dw-tag--add\" (click)=\"onAdd($event)\">\n <i class=\"pi pi-plus\" aria-hidden=\"true\"></i>\n {{ addLabel() }}\n </button>\n }\n }\n `,\n})\nexport class DwTagListComponent {\n readonly tags = input<DwTagItem[] | null>([]);\n /** 0 = show all. */\n readonly maxVisible = input<number>(0);\n readonly removable = input<boolean>(false);\n readonly showAdd = input<boolean>(false);\n readonly addLabel = input<string>('Add Tags');\n /** `pill` = dashed \"+ Add Tags\" pill; `icon` = small outlined \"+\" button (label as tooltip). */\n readonly addAppearance = input<'pill' | 'icon'>('pill');\n /** Compact only: show as many whole tags as fit (overrides `maxVisible`). */\n readonly fit = input<boolean>(false);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n /** How many tags fit (null = render them all, to measure). */\n private readonly fitCount = signal<number | null>(null);\n readonly measuring = computed(() => this.fitting() && this.fitCount() === null);\n private readonly fitting = computed(() => this.fit() && this.compact());\n\n constructor() {\n // Re-fit whenever the tags (or the mode) change: render all, measure, then trim.\n effect(() => {\n this.tags();\n if (!this.fitting()) return;\n untracked(() => this.refit());\n });\n const onResize = () => this.fitting() && this.refit();\n window.addEventListener('resize', onResize);\n inject(DestroyRef).onDestroy(() => window.removeEventListener('resize', onResize));\n }\n\n private refit(): void {\n this.fitCount.set(null);\n afterNextRender(() => this.fitCount.set(this.countFitting()), { injector: this.injector });\n }\n\n /** With every tag at its natural width, how many fit beside the + button (at least one). */\n private countFitting(): number {\n const el = this.host.nativeElement;\n const tags = Array.from(el.querySelectorAll<HTMLElement>(':scope > dw-tag'));\n const gap = parseFloat(getComputedStyle(el).columnGap) || 0;\n const plainAdd = 20; // the + button alone\n const countedAdd = 34; // + with a count (\"+ 12\")\n let used = 0;\n let n = 0;\n for (let i = 0; i < tags.length; i++) {\n const width = tags[i].getBoundingClientRect().width;\n const button = i + 1 < tags.length ? countedAdd : plainAdd;\n if (used + (n ? gap : 0) + width + gap + button > el.clientWidth) break;\n used += (n ? gap : 0) + width;\n n++;\n }\n return Math.max(1, n);\n }\n\n /** Emit the originating click so hosts can anchor popovers to it. */\n readonly add = output<MouseEvent>();\n readonly moreClicked = output<MouseEvent>();\n readonly removed = output<DwTagItem>();\n\n readonly visible = computed(() => {\n const all = this.tags() ?? [];\n if (this.fitting()) {\n const fitCount = this.fitCount();\n return fitCount === null ? all : all.slice(0, fitCount);\n }\n const max = this.maxVisible();\n return max > 0 ? all.slice(0, max) : all;\n });\n\n readonly hiddenCount = computed(() => (this.tags() ?? []).length - this.visible().length);\n /** Compact form: only when the add control is shown (it carries the hidden count). */\n readonly compact = computed(() => this.addAppearance() === 'icon' && this.showAdd());\n readonly compactAddLabel = computed(() =>\n this.hiddenCount() > 0 ? `${this.addLabel()} · ${this.hiddenCount()} more` : this.addLabel(),\n );\n\n onMore(event: MouseEvent): void {\n event.stopPropagation();\n this.moreClicked.emit(event);\n }\n\n onAdd(event: MouseEvent): void {\n event.stopPropagation();\n this.add.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DW_TAG_PALETTE, tagColorVar } from './dw-tag-colors';\n\n/**\n * Tag colour picker: the 16-colour tag palette as a radio group of swatches.\n * `value` is the stored palette hex (what the tag API takes); the swatches\n * paint with the matching --dw-tag-* token.\n *\n * ```html\n * <dw-tag-color-picker [(value)]=\"tag.color\" />\n * ```\n */\n@Component({\n selector: 'dw-tag-color-picker',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"dw-swatches\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel()\" [attr.data-testid]=\"testId()\">\n @for (color of palette; track color.value) {\n <button\n type=\"button\"\n class=\"dw-swatch\"\n role=\"radio\"\n [class.dw-swatch--selected]=\"isSelected(color.value)\"\n [attr.aria-checked]=\"isSelected(color.value)\"\n [attr.aria-label]=\"color.name\"\n [pTooltip]=\"color.name\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n [style.background-color]=\"swatchColor(color.value)\"\n (click)=\"value.set(color.value)\"\n >\n @if (isSelected(color.value)) {\n <i class=\"pi pi-check\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n </div>\n `,\n})\nexport class DwTagColorPickerComponent {\n readonly value = model<string>(DW_TAG_PALETTE[0].value);\n readonly ariaLabel = input<string>('Tag color');\n readonly testId = input<string | null>(null);\n\n readonly palette = DW_TAG_PALETTE;\n\n isSelected(color: string): boolean {\n return (this.value() ?? '').toLowerCase() === color;\n }\n\n swatchColor(color: string): string {\n return tagColorVar(color);\n }\n}\n","/**\n * Overlay anchors: a bar (e.g. the app header) marked `data-dw-overlay-anchor` makes every\n * dw-menu / dw-popover opened from inside it start just below the bar, rather than below\n * the individual trigger — so menus from a short avatar button and a full-height nav tab\n * line up on the same edge.\n */\nexport const DW_OVERLAY_ANCHOR_ATTR = 'data-dw-overlay-anchor';\n\n/** Gap between the anchor's bottom edge and the overlay: none — it hangs straight off the bar. */\nexport const DW_OVERLAY_ANCHOR_GAP = 0;\n\n/** Moves `panel` (absolutely positioned in the document) under the trigger's anchor, if it has one. */\nexport function alignUnderOverlayAnchor(panel: HTMLElement | null | undefined, trigger: unknown): void {\n if (!panel || !(trigger instanceof Element)) {\n return;\n }\n const anchor = trigger.closest(`[${DW_OVERLAY_ANCHOR_ATTR}]`);\n if (!anchor) {\n return;\n }\n const top = anchor.getBoundingClientRect().bottom + window.scrollY + DW_OVERLAY_ANCHOR_GAP;\n panel.style.marginTop = '0';\n panel.style.top = `${top}px`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n computed,\n contentChild,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { alignUnderOverlayAnchor } from '../overlay-anchor.util';\n\n/** Footer actions of a popover (right-aligned). */\n@Directive({ selector: '[dwPopoverFooter]', standalone: true, host: { class: 'dw-footer-actions' } })\nexport class DwPopoverFooterDirective {}\n\n/**\n * Click-anchored popover on top of p-popover with optional header + close\n * and footer actions.\n *\n * ```html\n * <dw-button label=\"New tenant\" (clicked)=\"pop.toggle($event)\" />\n * <dw-popover #pop header=\"Create tenant\" width=\"320px\">\n * <input pInputText [(ngModel)]=\"name\" />\n * <div dwPopoverFooter>\n * <dw-button label=\"Cancel\" variant=\"secondary\" appearance=\"text\" (clicked)=\"pop.hide()\" />\n * <dw-button label=\"Create\" (clicked)=\"create(); pop.hide()\" />\n * </div>\n * </dw-popover>\n * ```\n */\n@Component({\n selector: 'dw-popover',\n standalone: true,\n imports: [PopoverModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-popover\n #popover\n [dismissable]=\"dismissable()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [style]=\"popoverStyle()\"\n [styleClass]=\"styleClasses()\"\n [ariaLabel]=\"header() || ariaLabel()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n >\n <div class=\"dw-popover\" [style.max-height]=\"maxHeight()\">\n @if (header()) {\n <div class=\"dw-popover__header\">\n <span class=\"dw-subtitle\">{{ header() }}</span>\n @if (showClose()) {\n <button type=\"button\" class=\"dw-icon-btn\" aria-label=\"Close\" (click)=\"hide()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n }\n <div class=\"dw-popover__body\"><ng-content /></div>\n @if (footer()) {\n <div class=\"dw-popover__footer\"><ng-content select=\"[dwPopoverFooter]\" /></div>\n }\n </div>\n </p-popover>\n `,\n})\nexport class DwPopoverComponent {\n readonly header = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly showClose = input<boolean>(true);\n readonly dismissable = input<boolean>(true);\n readonly width = input<string | null>(null);\n /** Match the width of the element that opened the popover. */\n readonly matchTriggerWidth = input<boolean>(false);\n readonly maxHeight = input<string | null>(null);\n readonly appendTo = input<string | null>('body');\n readonly baseZIndex = input<number>(0);\n readonly showArrow = input<boolean>(true);\n /** No body padding: the content runs to the popover's edges (e.g. a side rail with its own\n * background); the footer keeps its own padding and a top border. */\n readonly flush = input<boolean>(false);\n readonly styleClass = input<string>('');\n\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n readonly footer = contentChild(DwPopoverFooterDirective);\n readonly isOpen = signal(false);\n private readonly popover = viewChild<Popover>('popover');\n private readonly triggerWidth = signal<number | null>(null);\n\n readonly popoverStyle = computed(() => {\n const width = this.matchTriggerWidth() && this.triggerWidth() ? `${this.triggerWidth()}px` : this.width();\n return width ? { width } : {};\n });\n\n readonly styleClasses = computed(() => {\n const cls = ['dw-popover-panel'];\n if (!this.showArrow()) cls.push('dw-popover-panel--no-arrow');\n if (this.flush()) cls.push('dw-popover-panel--flush');\n if (this.styleClass()) cls.push(this.styleClass());\n return cls.join(' ');\n });\n\n toggle(event: Event, target?: HTMLElement): void {\n this.captureTrigger(event, target);\n this.popover()?.toggle(event, target);\n }\n\n show(event: Event, target?: HTMLElement): void {\n this.captureTrigger(event, target);\n this.popover()?.show(event, target);\n }\n\n /** Re-position against the trigger after the content changed size. */\n align(): void {\n this.popover()?.align();\n this.anchorTop();\n this.centerArrow();\n }\n\n hide(): void {\n this.popover()?.hide();\n }\n\n onShow(): void {\n this.isOpen.set(true);\n this.anchorTop();\n this.centerArrow();\n // onShow fires as the panel starts to open; the trigger or the panel can still move as\n // content settles (e.g. a table row re-fitting its cells). Re-centre once laid out and\n // again after the open animation, so the arrow points at where the trigger ends up.\n requestAnimationFrame(() => this.centerArrow());\n setTimeout(() => this.centerArrow(), 150);\n this.shown.emit();\n }\n\n /**\n * PrimeNG points the arrow at the trigger's left edge (+ a fixed offset), which looks\n * off under a wide trigger such as a labelled button. Point it at the trigger's centre,\n * kept clear of the panel's rounded corners.\n */\n private anchorTop(): void {\n const popover = this.popover();\n alignUnderOverlayAnchor(popover?.container, popover?.target);\n }\n\n private centerArrow(): void {\n const popover = this.popover();\n const panel = popover?.container;\n const trigger = popover?.target as HTMLElement | null | undefined;\n if (!panel || !trigger?.getBoundingClientRect || !this.showArrow()) {\n return;\n }\n const inset = 20; // corner radius + half the arrow\n const margin = 8; // keep the panel this far inside the viewport\n let p = panel.getBoundingClientRect();\n const t = trigger.getBoundingClientRect();\n const centre = t.left + t.width / 2;\n // PrimeNG lines the panel up with the trigger's left edge, so under a small trigger the\n // centre falls inside the corner zone. Slide the panel so the arrow can sit exactly on it.\n let shift = 0;\n if (centre - p.left < inset) {\n shift = -Math.min(inset - (centre - p.left), Math.max(0, p.left - margin));\n } else if (p.right - centre < inset) {\n shift = Math.min(inset - (p.right - centre), Math.max(0, window.innerWidth - margin - p.right));\n }\n if (shift) {\n const current = parseFloat(panel.style.insetInlineStart || panel.style.left || `${p.left + window.scrollX}`);\n panel.style.insetInlineStart = `${current + shift}px`;\n p = panel.getBoundingClientRect();\n }\n const tip = Math.min(Math.max(centre - p.left, inset), p.width - inset);\n panel.style.setProperty('--p-popover-arrow-offset', '0px');\n panel.style.setProperty('--p-popover-arrow-left', `${tip}px`);\n }\n\n onHide(): void {\n this.isOpen.set(false);\n this.hidden.emit();\n }\n\n private captureTrigger(event: Event, target?: HTMLElement): void {\n const el = target ?? (event?.currentTarget as HTMLElement | null);\n if (el?.getBoundingClientRect) {\n this.triggerWidth.set(el.getBoundingClientRect().width);\n }\n }\n}\n\nexport const DW_POPOVER = [DwPopoverComponent, DwPopoverFooterDirective] as const;\n","import { ChangeDetectionStrategy, Component, computed, input, model, viewChild } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwPopoverComponent } from '../popover/dw-popover.component';\nimport { DwTagColorPickerComponent } from './dw-tag-color-picker.component';\nimport { DW_TAG_PALETTE, tagColorVar } from './dw-tag-colors';\n\n/**\n * Tag colour button: a filled tag icon in the tag's colour. When `editable`,\n * clicking opens the tag palette (dw-tag-color-picker) in a popover; picking a\n * colour updates `value` and closes it. Not editable, it reads as disabled and\n * only shows the colour (e.g. of an existing tag).\n *\n * Add `class=\"dw-input-group__addon\"` to connect it to an input in a\n * `.dw-input-group`.\n *\n * ```html\n * <div class=\"dw-input-group\">\n * <dw-tag-color-button class=\"dw-input-group__addon\" [(value)]=\"color\" />\n * <input pInputText [(ngModel)]=\"name\" />\n * </div>\n * ```\n */\n@Component({\n selector: 'dw-tag-color-button',\n standalone: true,\n imports: [TooltipModule, DwIconComponent, DwPopoverComponent, DwTagColorPickerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-tag-color-btn-host' },\n template: `\n <button\n type=\"button\"\n class=\"dw-tag-color-btn\"\n [class.dw-tag-color-btn--editable]=\"editable()\"\n [attr.aria-disabled]=\"!editable() || null\"\n [attr.aria-haspopup]=\"editable() ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"editable() ? 'Change color' : lockedTooltip()\"\n [tooltipDisabled]=\"!editable() && !lockedTooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"open($event)\"\n >\n <dw-icon class=\"dw-tag-color-btn__icon\" name=\"tagFilled\" [style.color]=\"swatch()\" aria-hidden=\"true\" />\n </button>\n <dw-popover #pop header=\"Tag color\" [showClose]=\"false\">\n <dw-tag-color-picker [value]=\"value()\" (valueChange)=\"pick($event)\" />\n </dw-popover>\n `,\n})\nexport class DwTagColorButtonComponent {\n /** Stored palette hex, as the tag API takes it. */\n readonly value = model<string>(DW_TAG_PALETTE[0].value);\n readonly editable = input<boolean>(true);\n /** Tooltip when not editable; empty shows none. */\n readonly lockedTooltip = input<string>('');\n readonly testId = input<string | null>(null);\n\n private readonly pop = viewChild.required<DwPopoverComponent>('pop');\n\n readonly swatch = computed(() => tagColorVar(this.value()));\n readonly colorName = computed(() => {\n const v = (this.value() ?? '').toLowerCase();\n return DW_TAG_PALETTE.find((c) => c.value === v)?.name ?? 'Custom';\n });\n readonly ariaLabel = computed(() =>\n this.editable() ? `Tag color: ${this.colorName()}. Change color` : `Tag color: ${this.colorName()}`,\n );\n\n open(event: Event): void {\n if (!this.editable()) return;\n this.pop().toggle(event);\n }\n\n pick(color: string): void {\n this.value.set(color);\n this.pop().hide();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, inject } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DwTone } from '../status-pill/dw-status.map';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\n\n/**\n * Filter / facet / token chip. Selectable chips render as buttons with\n * aria-pressed; removable chips get a labelled remove button.\n *\n * ```html\n * <dw-chip label=\"Errors\" icon=\"pi pi-exclamation-circle\" [selectable]=\"true\"\n * [selected]=\"filter === 'errors'\" (selectedChange)=\"toggle('errors')\" />\n * <dw-chip [label]=\"facet.label\" [removable]=\"true\" (removed)=\"clear(facet)\" />\n * <dw-chip label=\"Tokens\" value=\"1,204\" />\n * <dw-chip label=\"Tools\" icon=\"pi pi-wrench\" variant=\"subtle\" [selectable]=\"true\" /> <!-- quiet filter bar -->\n * <dw-chip label=\"vendor=northwind\" variant=\"code\" [selectable]=\"true\" /> <!-- key=value token -->\n * <dw-chip [label]=\"file.name\" [image]=\"iconSrc\"><i class=\"pi pi-check-circle dw-text-success\"></i></dw-chip>\n * ```\n * Projected content renders after the label (a trailing status icon, a spinner).\n */\n@Component({\n selector: 'dw-chip',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-chip-host' },\n template: `\n @if (selectable()) {\n <button\n type=\"button\"\n [class]=\"classes()\"\n [attr.aria-pressed]=\"selected()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"toggle($event)\"\n >\n <ng-container *ngTemplateOutlet=\"inner\" />\n </button>\n } @else {\n <span [class]=\"classes()\" [attr.data-testid]=\"testId()\">\n <ng-container *ngTemplateOutlet=\"inner\" />\n @if (removable()) {\n <button\n type=\"button\"\n class=\"dw-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"remove($event)\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </span>\n }\n\n <ng-template #inner>\n @if (image()) {\n <img class=\"dw-chip__img\" [src]=\"image()\" alt=\"\" aria-hidden=\"true\" />\n } @else if (svgIcon(); as name) {\n <dw-icon [name]=\"name\" />\n } @else if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else if (dotColor()) {\n <span class=\"dw-tag__dot\" [style.background]=\"dotColor()\" aria-hidden=\"true\"></span>\n }\n <span class=\"dw-chip__label\">{{ label() }}</span>\n @if (value() !== null && value() !== undefined && value() !== '') {\n <span class=\"dw-chip__value\">{{ value() }}</span>\n }\n <ng-content />\n </ng-template>\n `,\n imports: [NgTemplateOutlet, DwIconComponent],\n})\nexport class DwChipComponent {\n readonly label = input.required<string>();\n readonly value = input<string | number | null>(null);\n private readonly icons = inject(DwIconRegistry);\n\n /** PrimeIcons class, `dwi-<name>` for a crystal glyph, or a name registered with provideCrystalIcons(). */\n readonly icon = input<string>('');\n readonly svgIcon = computed(() => this.icons.resolve(this.icon()));\n readonly image = input<string>('');\n readonly dotColor = input<string>('');\n readonly tone = input<DwTone | null>(null);\n readonly selectable = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly removable = input<boolean>(false);\n readonly testId = input<string | null>(null);\n /** `sm` (default): compact filter chip. `md`: control height, for picking options in a form. */\n readonly size = input<'sm' | 'md'>('sm');\n /** How a selected chip shows: `tint` (light accent, default) or `filled` (a fuller tint, accent border, bold label). */\n readonly selectedStyle = input<'tint' | 'filled'>('tint');\n /**\n * `subtle`: secondary text at regular weight while unselected, for dense filter bars.\n * `code`: a key=value / identifier token — mono face, regular weight, square corners, section background.\n */\n readonly variant = input<'default' | 'subtle' | 'code'>('default');\n\n readonly selectedChange = output<boolean>();\n readonly removed = output<void>();\n\n readonly classes = computed(() => {\n const cls = ['dw-chip'];\n if (this.selectable()) cls.push('dw-chip--selectable');\n if (this.selected()) cls.push('is-selected');\n if (this.size() === 'md') cls.push('dw-chip--md');\n if (this.selectedStyle() === 'filled') cls.push('dw-chip--filled');\n if (this.variant() === 'subtle') cls.push('dw-chip--subtle');\n if (this.variant() === 'code') cls.push('dw-chip--code');\n if (this.tone()) cls.push(`dw-chip--${this.tone()}`);\n return cls.join(' ');\n });\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n this.selectedChange.emit(!this.selected());\n }\n\n remove(event: MouseEvent): void {\n event.stopPropagation();\n this.removed.emit();\n }\n}\n\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport type DwInitialsStrategy = 'words' | 'split';\n\nconst AVATAR_TINTS = ['accent', 'workflow', 'reasoning', 'orange', 'cyan', 'pink'] as const;\nexport type DwAvatarTint = 'neutral' | (typeof AVATAR_TINTS)[number];\n\n/**\n * `words`: first letter of each whitespace-separated word, max 3 (\"Jane Q Doe\" → \"JQD\").\n * `split`: split on `_ . - space`, first letters of the first two parts (\"acme_corp\" → \"AC\").\n */\nexport function initialsOf(name: string | null | undefined, strategy: DwInitialsStrategy = 'words'): string {\n const value = (name ?? '').trim();\n if (!value) {\n return '?';\n }\n if (strategy === 'split') {\n const parts = value.split(/[\\s_.-]+/).filter(Boolean);\n const letters = parts.length > 1 ? parts[0][0] + parts[1][0] : value.slice(0, 2);\n return letters.toUpperCase();\n }\n return value\n .split(/\\s+/)\n .filter(Boolean)\n .map((w) => w.charAt(0).toUpperCase())\n .join('')\n .slice(0, 3);\n}\n\n/** A stable colour per name, for callers that opt in with `[tint]=\"tintFor(name)\"`. */\nexport function tintFor(name: string | null | undefined): DwAvatarTint {\n const value = name ?? '';\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) | 0;\n }\n return AVATAR_TINTS[Math.abs(hash) % AVATAR_TINTS.length];\n}\n\n/**\n * User / tenant avatar: image or initials on a bordered rounded square, neutral\n * grey unless a `tint` is given (the backend has no avatar colours).\n *\n * ```html\n * <dw-avatar [name]=\"user.fullName\" size=\"sm\" />\n * <dw-avatar [name]=\"tenant.accountName\" initials=\"split\" [presence]=\"tenant.active\" />\n * ```\n */\n@Component({\n selector: 'dw-avatar',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"classes()\"\n role=\"img\"\n [attr.aria-label]=\"name() || 'User'\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n @if (src() && !imageFailed()) {\n <img [src]=\"src()\" alt=\"\" (error)=\"imageFailed.set(true)\" />\n } @else {\n {{ text() }}\n }\n @if (presence() !== null) {\n <span class=\"dw-avatar__presence\" [class.is-online]=\"presence()\" aria-hidden=\"true\"></span>\n }\n </span>\n `,\n})\nexport class DwAvatarComponent {\n readonly name = input<string | null>(null);\n readonly initials = input<DwInitialsStrategy>('words');\n readonly src = input<string | null>(null);\n readonly size = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n /** Colour of the tile; neutral grey by default. */\n readonly tint = input<DwAvatarTint>('neutral');\n readonly presence = input<boolean | null>(null);\n readonly tooltip = input<string>('');\n /** Darkens the tile's border while its parent button is hovered or open (account menus). */\n readonly ring = input<boolean>(false);\n\n readonly imageFailed = signal(false);\n readonly text = computed(() => initialsOf(this.name(), this.initials()));\n readonly classes = computed(() => {\n const cls = ['dw-avatar', `dw-avatar--tint-${this.tint()}`];\n if (this.size() !== 'md') cls.push(`dw-avatar--${this.size()}`);\n if (this.ring()) cls.push('dw-avatar--ring');\n return cls.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal, inject } from '@angular/core';\nimport { fileIconByExtension, getStorageIconPath, getToolIconPath, StorageIconSet } from '@dataworkz/crystal/icons';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\n\nexport type DwEntityKind = 'tool' | 'storage' | 'file' | 'image' | 'icon';\nexport type DwEntityTint = 'none' | 'neutral' | 'accent' | 'workflow' | 'reasoning' | 'orange' | 'cyan' | 'pink' | 'danger';\n\n/**\n * Entity / type icon. Resolves artwork through the shared icon utilities so\n * every screen picks the same asset for the same type.\n *\n * ```html\n * <dw-entity-icon kind=\"tool\" [type]=\"tool.typeId\" [toolId]=\"tool.id\" />\n * <dw-entity-icon kind=\"storage\" [type]=\"conn.storageType\" size=\"lg\" [framed]=\"true\" />\n * <dw-entity-icon kind=\"file\" type=\"pdf\" size=\"sm\" />\n * <dw-entity-icon kind=\"icon\" type=\"pi pi-sitemap\" tint=\"accent\" [framed]=\"true\" />\n * <dw-entity-icon kind=\"icon\" type=\"dwi-robot\" tint=\"accent\" [framed]=\"true\" /> <!-- a dw-icon glyph, in the tint colour -->\n * ```\n */\n@Component({\n selector: 'dw-entity-icon',\n standalone: true,\n imports: [DwIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.aria-hidden]': 'alt() ? null : \"true\"',\n },\n template: `\n @if (svgIcon(); as name) {\n <dw-icon [name]=\"name\" />\n } @else if (iconClass()) {\n <i [class]=\"iconClass()\" aria-hidden=\"true\"></i>\n } @else if (path() && !failed()) {\n <img [src]=\"path()\" [alt]=\"alt()\" (error)=\"failed.set(true)\" />\n }\n `,\n})\nexport class DwEntityIconComponent {\n readonly kind = input<DwEntityKind>('tool');\n /** Tool typeId, storage type, file extension, image src, or icon class / `dwi-<name>` (per `kind`). */\n readonly type = input<string | null>(null);\n readonly toolId = input<string | null>(null);\n readonly src = input<string | null>(null);\n readonly fallback = input<string | undefined>(undefined);\n readonly storageSet = input<StorageIconSet>('local');\n readonly size = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\n readonly framed = input<boolean>(false);\n readonly tint = input<DwEntityTint>('neutral');\n readonly alt = input<string>('');\n\n readonly failed = signal(false);\n\n private readonly icons = inject(DwIconRegistry);\n\n /** kind `icon` with a `dwi-<name>` glyph or a registered icon name: drawn by dw-icon, in the tile's colour. */\n readonly svgIcon = computed(() => (this.kind() === 'icon' ? this.icons.resolve(this.type()) : null));\n readonly iconClass = computed(() => (this.kind() === 'icon' && !this.svgIcon() ? this.type() ?? '' : ''));\n\n readonly path = computed(() => {\n if (this.src()) {\n return this.src() as string;\n }\n const type = this.type();\n switch (this.kind()) {\n case 'tool':\n return getToolIconPath(type, { toolId: this.toolId(), fallback: this.fallback() });\n case 'storage':\n return getStorageIconPath(type, { set: this.storageSet(), fallback: this.fallback() });\n case 'file':\n return fileIconByExtension((type ?? '').toLowerCase());\n case 'image':\n return type ?? '';\n default:\n return '';\n }\n });\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-entity-icon', `dw-entity-icon--${this.size()}`];\n if (this.framed()) {\n cls.push('dw-entity-icon--framed');\n if (this.tint() !== 'none') cls.push(`dw-entity-icon--${this.tint()}`);\n }\n return cls.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * The one spinner. Replaces `fa-spinner fa-spin`, ad-hoc `pi-spin`,\n * cosmetic `p-progressSpinner`, `.loading-state` and `.loading-overlay`.\n *\n * ```html\n * <dw-spinner size=\"sm\" /> <!-- inline -->\n * <dw-spinner mode=\"block\" label=\"Loading agents…\" /> <!-- centered in container -->\n * <dw-spinner mode=\"overlay\" label=\"Saving…\" /> <!-- covers nearest positioned parent -->\n * <dw-spinner mode=\"fullscreen\" />\n * ```\n */\n@Component({\n selector: 'dw-spinner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'status',\n 'aria-live': 'polite',\n '[attr.aria-busy]': 'true',\n },\n template: `\n <i class=\"pi pi-spin pi-spinner dw-spinner__icon\" aria-hidden=\"true\"></i>\n @if (label()) {\n <span class=\"dw-spinner__label\">{{ label() }}</span>\n } @else {\n <span class=\"dw-sr-only\">Loading</span>\n }\n `,\n})\nexport class DwSpinnerComponent {\n readonly size = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n readonly mode = input<'inline' | 'block' | 'overlay' | 'fullscreen'>('inline');\n readonly label = input<string>('');\n\n readonly hostClasses = computed(\n () => `dw-spinner dw-spinner--${this.size()} dw-spinner--${this.mode()}`,\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\n\nexport type DwSkeletonPreset = 'text' | 'circle' | 'rect' | 'rows' | 'card' | 'list';\n\n/**\n * Skeleton presets on top of p-skeleton.\n *\n * ```html\n * <dw-skeleton preset=\"text\" width=\"60%\" />\n * <dw-skeleton preset=\"circle\" size=\"32px\" />\n * <dw-skeleton preset=\"rows\" [rows]=\"6\" [columns]=\"['40%', '20%', '20%', '20%']\" [avatar]=\"true\" />\n * <dw-skeleton preset=\"list\" [rows]=\"6\" /> <!-- sidebar-style lines -->\n * <dw-skeleton preset=\"card\" />\n * ```\n */\n@Component({\n selector: 'dw-skeleton',\n standalone: true,\n imports: [SkeletonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-skeleton-host', 'aria-hidden': 'true' },\n template: `\n @switch (preset()) {\n @case ('circle') {\n <p-skeleton shape=\"circle\" [size]=\"size()\" />\n }\n @case ('rect') {\n <p-skeleton [width]=\"width()\" [height]=\"height()\" [borderRadius]=\"radius()\" />\n }\n @case ('rows') {\n <div class=\"dw-skeleton-rows\">\n @for (r of rowIndexes(); track r) {\n <div class=\"dw-skeleton-rows__row\">\n @if (avatar()) {\n <p-skeleton shape=\"circle\" size=\"28px\" />\n }\n @for (w of columns(); track $index) {\n <p-skeleton [width]=\"w\" height=\"12px\" />\n }\n </div>\n }\n </div>\n }\n @case ('list') {\n <div class=\"dw-skeleton-list\">\n @for (r of rowIndexes(); track r) {\n <div class=\"dw-skeleton-list__row\">\n <p-skeleton [width]=\"r % 2 ? '70%' : '85%'\" height=\"12px\" />\n <p-skeleton width=\"16px\" height=\"12px\" />\n </div>\n }\n </div>\n }\n @case ('card') {\n <div class=\"dw-card dw-skeleton-card\">\n <div class=\"dw-card__header\">\n <p-skeleton width=\"32px\" height=\"32px\" borderRadius=\"8px\" />\n <p-skeleton width=\"50%\" height=\"14px\" />\n </div>\n <div class=\"dw-card__body\">\n <p-skeleton width=\"100%\" height=\"12px\" />\n <p-skeleton width=\"80%\" height=\"12px\" />\n </div>\n </div>\n }\n @default {\n <p-skeleton [width]=\"width()\" [height]=\"height() || '12px'\" />\n }\n }\n `,\n})\nexport class DwSkeletonComponent {\n readonly preset = input<DwSkeletonPreset>('text');\n readonly width = input<string>('100%');\n readonly height = input<string>('');\n readonly size = input<string>('32px');\n readonly radius = input<string>('6px');\n readonly rows = input<number>(5);\n readonly columns = input<string[]>(['40%', '20%', '20%', '20%']);\n readonly avatar = input<boolean>(false);\n\n readonly rowIndexes = computed(() => Array.from({ length: Math.max(0, this.rows()) }, (_, i) => i));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * A share bar: a rounded track with a fill for `value` percent of it — e.g. a channel's share of\n * all interactions. The fill takes `color` (a CSS colour, e.g. a chart series token), the accent\n * otherwise.\n *\n * ```html\n * <dw-meter [value]=\"row.pct\" [color]=\"row.color\" [label]=\"row.channel + ' share'\" />\n * ```\n */\n@Component({\n selector: 'dw-meter',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-meter-host' },\n template: `\n <div class=\"dw-meter\" [class.dw-meter--sm]=\"size() === 'sm'\" role=\"meter\" aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"clamped()\" [attr.aria-label]=\"label() || null\">\n <div class=\"dw-meter__fill\" [style.width.%]=\"clamped()\" [style.background]=\"color() || null\"></div>\n </div>\n `,\n})\nexport class DwMeterComponent {\n /** Percent of the track to fill (clamped to 0–100). */\n readonly value = input<number>(0);\n readonly color = input<string>('');\n readonly label = input<string>('');\n readonly size = input<'md' | 'sm'>('md');\n\n readonly clamped = computed(() => {\n const v = Number(this.value());\n return Number.isFinite(v) ? Math.min(100, Math.max(0, v)) : 0;\n });\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\n/**\n * A checkbox control for toolbars: a box and its label in one quiet button that fills on hover —\n * \"Show deprecated\" beside a list's search, \"Tree view\" beside a tree's. Controlled: it shows\n * `checked` and emits the flipped value; the host decides.\n *\n * A button with role=\"checkbox\" rather than a <label>-wrapped <input>: a label-wrapped input\n * forwards a synthetic click to the input, which bubbles back to the label and double-fires.\n *\n * ```html\n * <dw-check-toggle label=\"Tree view\" [checked]=\"tree()\" (checkedChange)=\"tree.set($event)\" />\n * ```\n */\n@Component({\n selector: 'dw-check-toggle',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-check-toggle-host' },\n template: `\n <button type=\"button\" class=\"dw-check-toggle\" role=\"checkbox\" [attr.aria-checked]=\"checked()\"\n [class.is-on]=\"checked()\" [pTooltip]=\"tooltip()\" [tooltipDisabled]=\"!tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\" [showDelay]=\"300\" appendTo=\"body\"\n [attr.data-testid]=\"testId()\" (click)=\"toggle()\">\n <span class=\"dw-check-toggle__box\" aria-hidden=\"true\"></span>\n <span class=\"dw-check-toggle__label\">{{ label() }}</span>\n </button>\n `,\n})\nexport class DwCheckToggleComponent {\n readonly checked = input<boolean>(false);\n readonly label = input<string>('');\n readonly tooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('bottom');\n readonly testId = input<string | null>(null);\n\n /** The flipped value; the host sets `checked`. */\n readonly checkedChange = output<boolean>();\n\n toggle(): void {\n this.checkedChange.emit(!this.checked());\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * Empty / no-results / error state. Project CTAs into the default slot.\n *\n * ```html\n * <dw-empty-state icon=\"pi pi-inbox\" title=\"No agents yet\" text=\"Create one to get started.\">\n * <dw-button label=\"Create agent\" icon=\"pi pi-plus\" (clicked)=\"create()\" />\n * </dw-empty-state>\n * <dw-empty-state size=\"compact\" title=\"No matches\" text=\"Try a different search.\" />\n * <dw-empty-state size=\"inline\" text=\"No data\" /> <!-- chart widgets -->\n * <dw-empty-state tone=\"error\" icon=\"pi pi-times-circle\" title=\"Couldn't load preview\" />\n * ```\n * Inside a p-table `emptymessage` row use `dw-table-empty` (renders the td + colspan).\n */\n@Component({\n selector: 'dw-empty-state',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'status',\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n },\n template: `\n @if (image()) {\n <img class=\"dw-empty-state__image\" [src]=\"image()\" [style.width]=\"imageWidth()\" alt=\"\" />\n } @else if (icon() && size() !== 'inline') {\n <span class=\"dw-empty-state__icon\" aria-hidden=\"true\"><i [class]=\"icon()\"></i></span>\n }\n @if (title()) {\n <p class=\"dw-empty-state__title\">{{ title() }}</p>\n }\n @if (text()) {\n <p class=\"dw-empty-state__text\">{{ text() }}</p>\n }\n <div class=\"dw-empty-state__actions\"><ng-content /></div>\n `,\n})\nexport class DwEmptyStateComponent {\n readonly icon = input<string>('pi pi-inbox');\n readonly image = input<string>('');\n readonly imageWidth = input<string>('160px');\n readonly title = input<string>('');\n readonly text = input<string>('');\n readonly tone = input<'default' | 'error'>('default');\n readonly size = input<'default' | 'compact' | 'inline'>('default');\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-empty-state'];\n if (this.size() !== 'default') cls.push(`dw-empty-state--${this.size()}`);\n if (this.tone() === 'error') cls.push('dw-empty-state--error');\n return cls.join(' ');\n });\n}\n\n/**\n * Table-row empty state for p-table `emptymessage` templates.\n *\n * ```html\n * <ng-template pTemplate=\"emptymessage\">\n * <tr dw-table-empty [colspan]=\"columns.length + 2\" title=\"No configurations\" text=\"Add one to start.\" ></tr>\n * </ng-template>\n * ```\n */\n@Component({\n selector: 'tr[dw-table-empty]',\n standalone: true,\n host: { class: 'dw-table-empty', '[attr.title]': 'null' },\n imports: [DwEmptyStateComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <td [attr.colspan]=\"colspan()\" class=\"dw-table-empty__cell\">\n <dw-empty-state [icon]=\"icon()\" [title]=\"title()\" [text]=\"text()\" size=\"compact\">\n <ng-content />\n </dw-empty-state>\n </td>\n `,\n})\nexport class DwTableEmptyComponent {\n readonly colspan = input<number>(1);\n readonly icon = input<string>('pi pi-inbox');\n readonly title = input<string>('');\n readonly text = input<string>('');\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\n\nexport type DwSeverity = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n\nconst SEVERITY_ICONS: Record<DwSeverity, string> = {\n info: 'pi pi-info-circle',\n success: 'pi pi-check-circle',\n warning: 'pi pi-exclamation-triangle',\n danger: 'pi pi-exclamation-circle',\n neutral: 'pi pi-info-circle',\n};\n\n/**\n * Inline message / callout. Body content and actions are projected.\n *\n * ```html\n * <dw-banner severity=\"warning\" title=\"In use by 3 workflows\">\n * Removing it will break them.\n * <dw-button dwBannerActions label=\"View usage\" appearance=\"link\" />\n * </dw-banner>\n * <dw-banner severity=\"info\" text=\"Changes apply to new runs only.\" [dismissible]=\"true\" />\n * ```\n */\n@Component({\n selector: 'dw-banner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n '[class]': 'hostClasses()',\n '[attr.role]': 'severity() === \"danger\" || severity() === \"warning\" ? \"alert\" : \"status\"',\n '[hidden]': 'dismissed()',\n },\n template: `\n @if (showIcon()) {\n <i class=\"dw-banner__icon\" [class]=\"resolvedIcon()\" aria-hidden=\"true\"></i>\n }\n <div class=\"dw-banner__content\">\n @if (title()) {\n <p class=\"dw-banner__title\">{{ title() }}</p>\n }\n @if (text()) {\n <p class=\"dw-banner__text\">{{ text() }}</p>\n }\n <ng-content />\n <div class=\"dw-banner__actions\"><ng-content select=\"[dwBannerActions]\" /></div>\n </div>\n @if (dismissible()) {\n <button type=\"button\" class=\"dw-icon-btn dw-banner__close\" aria-label=\"Dismiss\" (click)=\"dismiss()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n `,\n})\nexport class DwBannerComponent {\n readonly severity = input<DwSeverity>('info');\n readonly title = input<string>('');\n readonly text = input<string>('');\n /** Override the severity icon; pass '' with showIcon=false to hide. */\n readonly icon = input<string>('');\n readonly showIcon = input<boolean>(true);\n readonly dismissible = input<boolean>(false);\n readonly size = input<'sm' | 'md'>('md');\n /** `edge` draws a 4px left accent rule instead of a full border. */\n readonly variant = input<'block' | 'edge'>('block');\n\n readonly dismissed = signal(false);\n readonly dismissedChange = output<void>();\n\n readonly resolvedIcon = computed(() => this.icon() || SEVERITY_ICONS[this.severity()]);\n readonly hostClasses = computed(() => {\n const cls = ['dw-banner', `dw-banner--${this.severity()}`];\n if (this.size() === 'sm') cls.push('dw-banner--sm');\n if (this.variant() === 'edge') cls.push('dw-banner--edge');\n return cls.join(' ');\n });\n\n dismiss(): void {\n this.dismissed.set(true);\n this.dismissedChange.emit();\n }\n}\n\n/**\n * Neutral container box (bordered / muted / accent). For messages use dw-banner.\n *\n * ```html\n * <dw-box tone=\"muted\" padding=\"compact\">…</dw-box>\n * <dw-box tone=\"muted\" [bordered]=\"false\">…</dw-box> <!-- fill only, e.g. a summary in a rail -->\n * ```\n */\n@Component({\n selector: 'dw-box',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()', '[attr.title]': 'null' },\n template: `\n @if (title()) {\n <p class=\"dw-box__title\">{{ title() }}</p>\n }\n <ng-content />\n `,\n})\nexport class DwBoxComponent {\n readonly tone = input<'default' | 'muted' | 'accent'>('default');\n readonly padding = input<'compact' | 'default' | 'none'>('default');\n readonly title = input<string>('');\n /** Off: no border, just the tone's fill. */\n readonly bordered = input<boolean>(true);\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-box'];\n if (this.tone() !== 'default') cls.push(`dw-box--${this.tone()}`);\n if (this.padding() === 'compact') cls.push('dw-box--compact');\n if (this.padding() === 'none') cls.push('dw-box--flush');\n if (!this.bordered()) cls.push('dw-box--borderless');\n return cls.join(' ');\n });\n}\n","import { Directive, computed, input } from '@angular/core';\n\n/** Gap scale in px → spacing token. */\nexport type DwGap = 0 | 2 | 4 | 6 | 8 | 10 | 12 | 16 | 20 | 24 | 32;\nexport type DwAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\nexport type DwJustify = 'start' | 'center' | 'end' | 'between' | 'around';\n\nconst GAP_TOKENS: Record<DwGap, string> = {\n 0: '0',\n 2: 'var(--dw-space-0_5)',\n 4: 'var(--dw-space-1)',\n 6: 'var(--dw-space-1_5)',\n 8: 'var(--dw-space-2)',\n 10: 'var(--dw-space-2_5)',\n 12: 'var(--dw-space-3)',\n 16: 'var(--dw-space-4)',\n 20: 'var(--dw-space-5)',\n 24: 'var(--dw-space-6)',\n 32: 'var(--dw-space-8)',\n};\n\nconst ALIGN: Record<DwAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY: Record<DwJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n};\n\nexport function gapToken(gap: DwGap | null | undefined): string | null {\n return gap === null || gap === undefined ? null : GAP_TOKENS[gap] ?? null;\n}\n\n/**\n * Vertical stack — attribute directive so it adds no DOM.\n *\n * ```html\n * <div dwStack [gap]=\"12\">…</div>\n * <section dwStack [gap]=\"8\" align=\"start\">…</section>\n * ```\n */\n@Directive({\n selector: '[dwStack]',\n standalone: true,\n host: {\n class: 'dw-stack',\n '[style.gap]': 'gapValue()',\n '[style.align-items]': 'alignValue()',\n '[style.justify-content]': 'justifyValue()',\n // `align` is also a legacy HTML attribute: left on a <div> it becomes text-align.\n '[attr.align]': 'null',\n },\n})\nexport class DwStackDirective {\n readonly gap = input<DwGap | null>(null);\n readonly align = input<DwAlign | null>(null);\n readonly justify = input<DwJustify | null>(null);\n\n readonly gapValue = computed(() => gapToken(this.gap()));\n readonly alignValue = computed(() => (this.align() ? ALIGN[this.align() as DwAlign] : null));\n readonly justifyValue = computed(() => (this.justify() ? JUSTIFY[this.justify() as DwJustify] : null));\n}\n\n/**\n * Horizontal stack (row, vertically centred by default).\n *\n * ```html\n * <div dwHstack [gap]=\"8\" justify=\"between\">…</div>\n * <span dwHstack [gap]=\"4\" [inline]=\"true\" [wrap]=\"true\">…</span>\n * ```\n */\n@Directive({\n selector: '[dwHstack]',\n standalone: true,\n host: {\n class: 'dw-hstack',\n '[class.dw-wrap]': 'wrap()',\n '[class.dw-hstack--inline]': 'inline()',\n '[style.gap]': 'gapValue()',\n '[style.align-items]': 'alignValue()',\n '[style.justify-content]': 'justifyValue()',\n // `align` is also a legacy HTML attribute: left on a <div> it becomes text-align.\n '[attr.align]': 'null',\n },\n})\nexport class DwHstackDirective {\n readonly gap = input<DwGap | null>(null);\n readonly align = input<DwAlign | null>(null);\n readonly justify = input<DwJustify | null>(null);\n readonly wrap = input<boolean>(false);\n readonly inline = input<boolean>(false);\n\n readonly gapValue = computed(() => gapToken(this.gap()));\n readonly alignValue = computed(() => (this.align() ? ALIGN[this.align() as DwAlign] : null));\n readonly justifyValue = computed(() => (this.justify() ? JUSTIFY[this.justify() as DwJustify] : null));\n}\n\n/**\n * CSS grid: fixed columns (`cols`) or responsive auto-fill (`min`).\n *\n * ```html\n * <div dwGrid [cols]=\"4\" [gap]=\"16\">…</div>\n * <div dwGrid min=\"280px\">…</div>\n * ```\n */\n@Directive({\n selector: '[dwGrid]',\n standalone: true,\n host: {\n class: 'dw-grid',\n '[style.gap]': 'gapValue()',\n '[style.grid-template-columns]': 'columns()',\n },\n})\nexport class DwGridDirective {\n readonly cols = input<number | null>(null);\n readonly min = input<string | null>(null);\n readonly gap = input<DwGap | null>(16);\n\n readonly gapValue = computed(() => gapToken(this.gap()));\n readonly columns = computed(() => {\n if (this.min()) {\n return `repeat(auto-fill, minmax(${this.min()}, 1fr))`;\n }\n const cols = this.cols();\n return cols ? `repeat(${cols}, minmax(0, 1fr))` : null;\n });\n}\n\nexport const DW_LAYOUT = [DwStackDirective, DwHstackDirective, DwGridDirective] as const;\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type DwDividerOrientation = 'horizontal' | 'vertical';\n/** Gap on either side of the line: none / 4px / 8px (vertical) or 12px (horizontal) / 16px. */\nexport type DwDividerSpacing = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * A hairline separator.\n *\n * ```html\n * <dw-divider /> <!-- between stacked blocks -->\n * <dw-divider orientation=\"vertical\" /> <!-- full height of a flex row -->\n * <dw-divider orientation=\"vertical\" length=\"20px\" spacing=\"sm\" /> <!-- toolbar / header -->\n * ```\n */\n@Component({\n selector: 'dw-divider',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n '[class]': 'classes()',\n '[style.height]': \"orientation() === 'vertical' ? length() : null\",\n '[style.width]': \"orientation() === 'horizontal' ? length() : null\",\n },\n template: '',\n})\nexport class DwDividerComponent {\n readonly orientation = input<DwDividerOrientation>('horizontal');\n readonly spacing = input<DwDividerSpacing>('md');\n /** Fixed length (e.g. `20px`); by default a horizontal line spans its container and a vertical one the row. */\n readonly length = input<string | null>(null);\n\n readonly classes = computed(() => {\n const cls = ['dw-divider', `dw-divider--space-${this.spacing()}`];\n if (this.orientation() === 'vertical') cls.push('dw-divider--vertical');\n if (this.length()) cls.push('dw-divider--fixed');\n return cls.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\n\n/** Pointer position during a drag (viewport coordinates). */\nexport interface DwResizerDrag {\n clientX: number;\n clientY: number;\n}\n\n/**\n * A drag handle for resizing a panel. It only reports where the pointer is (or a keyboard\n * nudge); the owner turns that into a size and clamps it, so the same handle works for\n * drawers, split panes and side panels.\n *\n * ```html\n * <!-- on the left edge of a right-hand panel -->\n * <dw-resizer edge=\"start\" ariaLabel=\"Resize panel\" [valueNow]=\"widthPct\" [valueMin]=\"30\" [valueMax]=\"90\"\n * (dragStart)=\"…\" (drag)=\"width = innerWidth - $event.clientX\" (nudge)=\"width = width - $event\" (dragEnd)=\"…\" />\n * ```\n *\n * `orientation=\"vertical\"` (default) is a vertical bar that resizes width; `horizontal`\n * resizes height. The owner positions it (`edge` only says which side it sits on).\n * Keyboard: ←/→ (↑/↓ when horizontal) emit `nudge` of ±16px (±64 with Shift);\n * Home / End emit `nudge` of ∓/± Infinity (the owner clamps to its limits).\n */\n@Component({\n selector: 'dw-resizer',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n tabindex: '0',\n '[class]': \"'dw-resizer dw-resizer--' + orientation() + ' dw-resizer--' + edge() + (dragging() ? ' is-dragging' : '')\",\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-valuenow]': 'valueNow()',\n '[attr.aria-valuemin]': 'valueMin()',\n '[attr.aria-valuemax]': 'valueMax()',\n '[attr.title]': 'title()',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp($event)',\n '(pointercancel)': 'onPointerUp($event)',\n '(keydown)': 'onKeydown($event)',\n },\n template: '',\n})\nexport class DwResizerComponent {\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n /** Which side of the panel the handle sits on (styling hook: `start` = left / top). */\n readonly edge = input<'start' | 'end'>('start');\n readonly ariaLabel = input<string>('Resize');\n readonly title = input<string>('Drag to resize');\n /** Current / min / max size for assistive tech (any unit, e.g. % of the viewport). */\n readonly valueNow = input<number | null>(null);\n readonly valueMin = input<number | null>(null);\n readonly valueMax = input<number | null>(null);\n\n readonly dragStart = output<void>();\n readonly drag = output<DwResizerDrag>();\n readonly dragEnd = output<void>();\n /** Keyboard step in px: negative = towards start (left / up). */\n readonly nudge = output<number>();\n\n readonly dragging = signal(false);\n\n onPointerDown(event: PointerEvent): void {\n if (event.button !== 0) return;\n this.dragging.set(true);\n (event.currentTarget as HTMLElement | null)?.setPointerCapture?.(event.pointerId);\n document.body.style.cursor = this.orientation() === 'vertical' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n event.preventDefault();\n this.dragStart.emit();\n }\n\n onPointerMove(event: PointerEvent): void {\n if (!this.dragging()) return;\n this.drag.emit({ clientX: event.clientX, clientY: event.clientY });\n }\n\n onPointerUp(event: PointerEvent): void {\n if (!this.dragging()) return;\n this.dragging.set(false);\n (event.currentTarget as HTMLElement | null)?.releasePointerCapture?.(event.pointerId);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.dragEnd.emit();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const step = event.shiftKey ? 64 : 16;\n const [back, forward] = this.orientation() === 'vertical' ? ['ArrowLeft', 'ArrowRight'] : ['ArrowUp', 'ArrowDown'];\n let delta: number | null = null;\n if (event.key === back) delta = -step;\n else if (event.key === forward) delta = step;\n else if (event.key === 'Home') delta = -Infinity;\n else if (event.key === 'End') delta = Infinity;\n if (delta === null) return;\n event.preventDefault();\n this.nudge.emit(delta);\n }\n}\n","import { Injectable, OnDestroy, signal } from '@angular/core';\n\nexport type DwToastSeverity = 'success' | 'info' | 'warning' | 'error';\n\nexport interface DwToastOptions {\n /** Auto-dismiss after ms. Defaults: success/info 3s, warning 4s, error 6s. */\n life?: number;\n /** Stay until dismissed. */\n sticky?: boolean;\n}\n\n/** One toast on the stack, as `<dw-toast-host>` renders it. */\nexport interface DwToast {\n id: string;\n severity: DwToastSeverity;\n message: string;\n createdAt: Date;\n /** Auto-dismiss delay in ms; 0 = sticky. */\n life: number;\n}\n\nconst DEFAULT_LIFE: Readonly<Record<DwToastSeverity, number>> = {\n success: 3000,\n info: 3000,\n warning: 4000,\n error: 6000,\n};\n\n/**\n * The single toast API, and the one toast stack: every screen pushes here and one\n * `<dw-toast-host>` (in the app's root component) renders it, so there is one position and one look.\n *\n * ```ts\n * this.toast.success('Agent saved');\n * this.toast.error('Could not delete workspace', { sticky: true });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class DwToastService implements OnDestroy {\n private readonly stack = signal<readonly DwToast[]>([]);\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>();\n private idCounter = 0;\n\n /** The toasts currently shown, oldest first. */\n readonly toasts = this.stack.asReadonly();\n\n success(message: string, options: DwToastOptions = {}): string {\n return this.show('success', message, options);\n }\n\n info(message: string, options: DwToastOptions = {}): string {\n return this.show('info', message, options);\n }\n\n warning(message: string, options: DwToastOptions = {}): string {\n return this.show('warning', message, options);\n }\n\n error(message: string, options: DwToastOptions = {}): string {\n return this.show('error', message, options);\n }\n\n /** Remove one toast (e.g. its close button). Unknown ids are ignored. */\n dismiss(id: string): void {\n this.clearTimer(id);\n this.stack.update((toasts) => toasts.filter((t) => t.id !== id));\n }\n\n /** Remove every toast. */\n clear(): void {\n this.timers.forEach((timer) => clearTimeout(timer));\n this.timers.clear();\n this.stack.set([]);\n }\n\n ngOnDestroy(): void {\n this.clear();\n }\n\n private show(severity: DwToastSeverity, message: string, options: DwToastOptions): string {\n const life = options.sticky ? 0 : (options.life ?? DEFAULT_LIFE[severity]);\n const toast: DwToast = { id: `dw-toast-${++this.idCounter}`, severity, message, createdAt: new Date(), life };\n this.stack.update((toasts) => [...toasts, toast]);\n if (life > 0) {\n this.timers.set(toast.id, setTimeout(() => this.dismiss(toast.id), life));\n }\n return toast.id;\n }\n\n private clearTimer(id: string): void {\n const timer = this.timers.get(id);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.timers.delete(id);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, inject, input, output, signal } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwToastService } from '../toast/dw-toast.service';\n\n/**\n * Copy-to-clipboard icon button. Replaces the ad-hoc `navigator.clipboard`\n * buttons. Inline feedback swaps the icon to a check; toast feedback uses\n * DwToastService.\n *\n * ```html\n * <dw-copy-button [text]=\"apiKey\" feedback=\"toast\" successMessage=\"API key copied\" />\n * <dw-copy-button [text]=\"json\" ariaLabel=\"Copy JSON\" />\n * ```\n */\n@Component({\n selector: 'dw-copy-button',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-button-host' },\n template: `\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [class.dw-icon-btn--lg]=\"size() === 'md'\"\n [class.is-copied]=\"copied()\"\n [class.dw-icon-btn--labelled]=\"!!label()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"copied() ? 'Copied!' : tooltip()\"\n [tooltipDisabled]=\"!tooltip() && !copied()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"copy($event)\"\n >\n <i [class]=\"copied() ? 'pi pi-check' : 'pi pi-copy'\" aria-hidden=\"true\"></i>\n @if (label()) {\n <span class=\"dw-copy-button__label\">{{ copied() ? 'Copied' : label() }}</span>\n }\n </button>\n `,\n})\nexport class DwCopyButtonComponent implements OnDestroy {\n private readonly toast = inject(DwToastService);\n\n readonly text = input<string | null | undefined>('');\n readonly feedback = input<'inline' | 'toast'>('inline');\n readonly successMessage = input<string>('Copied to clipboard');\n readonly errorMessage = input<string>('Could not copy to clipboard');\n readonly ariaLabel = input<string>('Copy to clipboard');\n readonly tooltip = input<string>('Copy');\n readonly label = input<string>('');\n readonly size = input<'sm' | 'md'>('sm');\n readonly testId = input<string | null>(null);\n\n readonly copiedChange = output<string>();\n readonly failed = output<unknown>();\n\n readonly copied = signal(false);\n private resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n async copy(event: MouseEvent): Promise<void> {\n event.stopPropagation();\n const value = this.text() ?? '';\n if (!value) {\n return;\n }\n try {\n if (!navigator.clipboard?.writeText) {\n throw new Error('Clipboard API unavailable');\n }\n await navigator.clipboard.writeText(value);\n this.markCopied();\n if (this.feedback() === 'toast') {\n this.toast.success(this.successMessage());\n }\n this.copiedChange.emit(value);\n } catch (error) {\n this.toast.error(this.errorMessage());\n this.failed.emit(error);\n }\n }\n\n ngOnDestroy(): void {\n if (this.resetTimer) {\n clearTimeout(this.resetTimer);\n }\n }\n\n private markCopied(): void {\n this.copied.set(true);\n if (this.resetTimer) {\n clearTimeout(this.resetTimer);\n }\n this.resetTimer = setTimeout(() => this.copied.set(false), 1500);\n }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, computed, input, signal } from '@angular/core';\n\n/**\n * The app-wide entity ID badge: a muted monospace ID (truncated to\n * `first8...last4` by default) that reveals a copy icon on hover and copies\n * the full ID on click, flashing a \"Copied!\" confirmation.\n *\n * Clicks never propagate, so it is safe inside clickable rows and cards.\n */\n@Component({\n selector: 'app-id-block, dw-id-block',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './id-block.component.html',\n host: { class: 'dw-id-block-host' },\n})\nexport class IdBlockComponent implements OnDestroy {\n /** The full ID. Nothing renders when empty. */\n readonly value = input<string | null | undefined>('');\n /** Shorten long IDs to `first8...last4`. The full ID is always what gets copied. */\n readonly truncate = input(true);\n\n readonly copied = signal(false);\n private resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n readonly displayValue = computed(() => {\n const id = this.value() ?? '';\n if (!this.truncate() || id.length < 12) return id;\n return `${id.slice(0, 8)}...${id.slice(-4)}`;\n });\n\n copy(event: Event): void {\n event.stopPropagation();\n const id = this.value();\n if (!id) return;\n navigator.clipboard?.writeText(id).catch(() => { /* clipboard blocked — still confirm the click */ });\n this.copied.set(true);\n if (this.resetTimer) clearTimeout(this.resetTimer);\n this.resetTimer = setTimeout(() => this.copied.set(false), 1500);\n }\n\n ngOnDestroy(): void {\n if (this.resetTimer) clearTimeout(this.resetTimer);\n }\n}\n","@if (value()) {\n<span class=\"dw-id-block\" [class.is-copied]=\"copied()\" role=\"button\" tabindex=\"0\"\n [attr.data-full-id]=\"value()\"\n [attr.aria-label]=\"'Copy ID ' + value()\"\n [title]=\"copied() ? 'Copied!' : 'Click to copy full ID'\"\n (click)=\"copy($event)\" (keydown.enter)=\"copy($event)\" (keydown.space)=\"copy($event); $event.preventDefault()\">\n <span class=\"dw-id-block__value\">{{ displayValue() }}</span>\n <span class=\"dw-id-block__icon\" aria-hidden=\"true\">\n @if (copied()) {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\" /></svg>\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" /></svg>\n }\n </span>\n <span class=\"dw-id-block__toast\" aria-live=\"polite\">{{ copied() ? 'Copied!' : '' }}</span>\n</span>\n}\n","import { ValidationErrors } from '@angular/forms';\n\ntype MessageFn = (error: unknown, label: string) => string;\n\n/**\n * Default validation messages, keyed by validator error key. Screens can\n * override any of them per field through `dw-field [errors]`.\n */\nexport const DW_FIELD_MESSAGES: Readonly<Record<string, string | MessageFn>> = {\n required: 'This field is required',\n requiredTrue: 'This field is required',\n noWhitespace: 'Spaces are not allowed',\n whitespace: 'Value cannot be only spaces',\n pattern: 'Invalid format',\n email: 'Enter a valid email address',\n invalidJson: 'Enter valid JSON',\n absoluteUrl: 'Enter an absolute URL (https://…)',\n uploadPending: 'Upload the selected file before saving',\n missingLeadingSlash: 'Path must start with “/”',\n invalidPartName: 'Invalid part name',\n invalidContentType: 'Invalid content type',\n invalidType: 'Invalid type',\n duplicate: 'This name already exists',\n min: (e) => `Minimum value is ${(e as { min: number }).min}`,\n max: (e) => `Maximum value is ${(e as { max: number }).max}`,\n minlength: (e) => `Enter at least ${(e as { requiredLength: number }).requiredLength} characters`,\n maxlength: (e) => `Enter at most ${(e as { requiredLength: number }).requiredLength} characters`,\n};\n\n/**\n * First matching message for a control's errors. Override map wins, then a\n * string error value (validators that return their own message), then the\n * defaults, then a generic fallback.\n */\nexport function fieldErrorMessage(\n errors: ValidationErrors | null | undefined,\n overrides: Readonly<Record<string, string>> | null = null,\n label = '',\n): string {\n if (!errors) {\n return '';\n }\n for (const [key, value] of Object.entries(errors)) {\n if (overrides && overrides[key]) {\n return overrides[key];\n }\n if (typeof value === 'string' && value.trim()) {\n return value;\n }\n const message = DW_FIELD_MESSAGES[key];\n if (typeof message === 'string') {\n return message;\n }\n if (typeof message === 'function') {\n return message(value, label);\n }\n }\n return 'Invalid value';\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterRenderEffect,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { AbstractControl, NgControl, NgModel, Validators } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { Subscription } from 'rxjs';\nimport { fieldErrorMessage } from './dw-field-messages';\n\nexport type DwShowErrorsWhen = 'touched' | 'dirty' | 'touchedOrDirty' | 'always';\n\nlet nextFieldId = 0;\n\n/**\n * Form field wrapper: label (+ required star, optional tag, info tooltip),\n * the projected control, help text, error message and optional counter.\n * Wires `id`, `aria-invalid`, `aria-required` and `aria-describedby` onto\n * the projected control automatically.\n *\n * ```html\n * <dw-field label=\"Name\" [control]=\"form.controls.name\" help=\"Shown to end users\" [maxLength]=\"100\">\n * <input pInputText formControlName=\"name\" />\n * </dw-field>\n *\n * <dw-field label=\"Prompt\" layout=\"inline\" info=\"Supports {{ '{{' }}variables}}\">\n * <a dwFieldActions class=\"dw-link\" (click)=\"generate()\">Generate with AI</a>\n * <textarea pTextarea [(ngModel)]=\"prompt\" #p=\"ngModel\" required></textarea>\n * </dw-field>\n *\n * <dw-field label=\"Region\" [error]=\"regionError\">…</dw-field> <!-- template-driven / manual -->\n * ```\n */\n@Component({\n selector: 'dw-field',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-testid]': 'testId()',\n },\n template: `\n @if (label()) {\n <div class=\"dw-field__label-row\" [style.width]=\"layout() === 'inline' ? labelWidth() : null\">\n <label class=\"dw-field__label\" [attr.for]=\"controlId()\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"dw-field__required\" aria-hidden=\"true\">*</span>\n }\n @if (optional()) {\n <span class=\"dw-field__optional\">(optional)</span>\n }\n @if (info()) {\n <i\n class=\"pi pi-info-circle dw-field__info\"\n tabindex=\"0\"\n role=\"img\"\n [attr.aria-label]=\"info()\"\n [pTooltip]=\"info()\"\n tooltipPosition=\"top\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n ></i>\n }\n </label>\n <span class=\"dw-field__actions\"><ng-content select=\"[dwFieldActions]\" /></span>\n </div>\n } @else if (layout() === 'inline') {\n <div class=\"dw-field__label-row\" [style.width]=\"labelWidth()\" aria-hidden=\"true\"></div>\n }\n <div class=\"dw-field__body\">\n @if (readonly()) {\n <div class=\"dw-field__readonly\" [attr.id]=\"controlId()\">{{ readonlyValue() || '—' }}</div>\n } @else {\n <div class=\"dw-field__control\">\n <ng-content />\n <ng-content select=\"[dwFieldSuffix]\" />\n </div>\n }\n @if (showError()) {\n <small class=\"dw-field__error\" role=\"alert\" [attr.id]=\"errorId\">{{ errorText() }}</small>\n <ng-content select=\"[dwFieldError]\" />\n } @else if (help() || maxLength()) {\n <div class=\"dw-field__footer\">\n @if (help()) {\n <small class=\"dw-field__help\" [attr.id]=\"helpId\">{{ help() }}</small>\n }\n @if (maxLength()) {\n <small class=\"dw-field__counter\" [class.is-over]=\"length() > maxLength()!\">\n {{ length() }}/{{ maxLength() }}\n </small>\n }\n </div>\n }\n </div>\n `,\n})\nexport class DwFieldComponent {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly label = input<string>('');\n /** Explicit control id; generated when omitted. */\n readonly for = input<string | null>(null);\n /** `null` = detect from the control's Validators.required. */\n readonly required = input<boolean | null>(null);\n readonly optional = input<boolean>(false);\n readonly info = input<string>('');\n readonly help = input<string>('');\n readonly layout = input<'stacked' | 'inline'>('stacked');\n readonly labelWidth = input<string>('160px');\n readonly control = input<AbstractControl | NgModel | NgControl | null>(null);\n /** Per-field message overrides by validator key. */\n readonly errors = input<Record<string, string> | null>(null);\n /** Manual error message (template-driven forms or server errors). */\n readonly error = input<string | null>(null);\n readonly showErrorsWhen = input<DwShowErrorsWhen>('touchedOrDirty');\n readonly maxLength = input<number | null>(null);\n readonly readonly = input<boolean>(false);\n readonly readonlyValue = input<string | number | null>(null);\n readonly disabled = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly errorId = `dw-field-error-${++nextFieldId}`;\n readonly helpId = `dw-field-help-${nextFieldId}`;\n private readonly generatedId = `dw-field-control-${nextFieldId}`;\n\n /** Bumped on every control status/value event so computeds re-evaluate. */\n private readonly tick = signal(0);\n private subscription: Subscription | null = null;\n\n readonly controlId = computed(() => this.for() ?? this.generatedId);\n\n private readonly abstractControl = computed<AbstractControl | null>(() => {\n const c = this.control();\n if (!c) {\n return null;\n }\n return c instanceof AbstractControl ? c : (c.control ?? null);\n });\n\n readonly isRequired = computed(() => {\n const explicit = this.required();\n if (explicit !== null) {\n return explicit;\n }\n this.tick();\n return !!this.abstractControl()?.hasValidator(Validators.required);\n });\n\n readonly errorText = computed(() => {\n this.tick();\n const manual = this.error();\n if (manual) {\n return manual;\n }\n return fieldErrorMessage(this.abstractControl()?.errors, this.errors(), this.label());\n });\n\n readonly showError = computed(() => {\n this.tick();\n if (this.error()) {\n return true;\n }\n const c = this.abstractControl();\n if (!c || !c.invalid) {\n return false;\n }\n switch (this.showErrorsWhen()) {\n case 'always':\n return true;\n case 'touched':\n return c.touched;\n case 'dirty':\n return c.dirty;\n default:\n return c.touched || c.dirty;\n }\n });\n\n readonly length = computed(() => {\n this.tick();\n const value = this.abstractControl()?.value;\n return typeof value === 'string' ? value.length : 0;\n });\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-field'];\n if (this.layout() === 'inline') cls.push('dw-field--inline');\n if (this.showError()) cls.push('is-invalid');\n if (this.disabled()) cls.push('is-disabled');\n return cls.join(' ');\n });\n\n constructor() {\n effect(() => {\n const c = this.abstractControl();\n this.subscription?.unsubscribe();\n this.subscription = c ? c.events.subscribe(() => this.tick.update((n) => n + 1)) : null;\n this.tick.update((n) => n + 1);\n });\n this.destroyRef.onDestroy(() => this.subscription?.unsubscribe());\n\n // Wire ids / ARIA onto the projected native control.\n afterRenderEffect(() => {\n const control = this.findControl();\n if (!control) {\n return;\n }\n if (!control.id || control.id.startsWith('dw-field-control-')) {\n control.id = this.controlId();\n }\n const describedBy = this.showError() ? this.errorId : this.help() ? this.helpId : null;\n this.setAttr(control, 'aria-describedby', describedBy);\n this.setAttr(control, 'aria-invalid', this.showError() ? 'true' : null);\n this.setAttr(control, 'aria-required', this.isRequired() ? 'true' : null);\n });\n }\n\n private findControl(): HTMLElement | null {\n return this.host.nativeElement.querySelector<HTMLElement>(\n '.dw-field__control input:not([type=hidden]), .dw-field__control textarea, .dw-field__control select, .dw-field__control [role=combobox]',\n );\n }\n\n private setAttr(el: HTMLElement, name: string, value: string | null): void {\n if (value === null) {\n el.removeAttribute(name);\n } else {\n el.setAttribute(name, value);\n }\n }\n}\n\n/**\n * Section header inside long forms (schema `section-header` fields).\n *\n * ```html\n * <dw-form-section-header title=\"Authentication\" description=\"How Dataworkz connects\" />\n * ```\n */\n@Component({\n selector: 'dw-form-section-header',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-form-section-header', '[attr.title]': 'null' },\n template: `\n <div class=\"dw-form-section-header__text\">\n <p class=\"dw-subtitle\">{{ title() }}</p>\n @if (description()) {\n <p class=\"dw-meta\">{{ description() }}</p>\n }\n </div>\n <ng-content />\n `,\n})\nexport class DwFormSectionHeaderComponent {\n readonly title = input.required<string>();\n readonly description = input<string>('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\n\n/**\n * Search box. Works with `[(value)]`, `ngModel` or a FormControl.\n *\n * ```html\n * <dw-search-input placeholder=\"Search agents…\" [(value)]=\"query\" (valueChange)=\"dt.filterGlobal($event, 'contains')\" />\n * <dw-search-input size=\"sm\" width=\"100%\" iconPosition=\"left\" [debounceMs]=\"300\" (valueChange)=\"load($event)\" />\n * <dw-search-input [clearable]=\"false\" (search)=\"runSearch($event)\" /> <!-- Enter to search -->\n * <dw-search-input [collapsible]=\"true\" width=\"320px\" (search)=\"go($event)\" /> <!-- icon until clicked -->\n * ```\n *\n * `collapsible`: shows only a search icon button; clicking it expands the\n * focused box, which collapses again on blur or Escape while empty.\n */\n@Component({\n selector: 'dw-search-input',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DwSearchInputComponent), multi: true },\n ],\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'collapsed() ? null : width()',\n },\n template: `\n @if (collapsed()) {\n <button\n type=\"button\"\n class=\"dw-icon-btn dw-icon-btn--lg dw-search__trigger\"\n [attr.aria-label]=\"ariaLabel() || placeholder() || 'Search'\"\n [attr.data-testid]=\"testId() ? testId() + '-trigger' : null\"\n [pTooltip]=\"triggerTooltip() || ariaLabel() || placeholder() || 'Search'\"\n [tooltipPosition]=\"tooltipPosition()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n [disabled]=\"isDisabled()\"\n (click)=\"expand()\"\n >\n <i class=\"pi pi-search\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n @if (iconPosition() === 'left') {\n <i class=\"pi pi-search dw-search__icon dw-search__icon--left\" aria-hidden=\"true\"></i>\n }\n <input\n #input\n type=\"text\"\n class=\"dw-input dw-search__input\"\n autocomplete=\"off\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() || placeholder() || 'Search'\"\n [attr.data-testid]=\"testId()\"\n (input)=\"onInput($any($event.target).value)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onEscape($event)\"\n (blur)=\"onBlur()\"\n />\n @if (showClear()) {\n <button type=\"button\" class=\"dw-search__clear\" aria-label=\"Clear search\" (click)=\"clear()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n } @else if (iconPosition() === 'right') {\n <i class=\"pi pi-search dw-search__icon dw-search__icon--right\" aria-hidden=\"true\"></i>\n }\n }\n `,\n})\nexport class DwSearchInputComponent implements ControlValueAccessor {\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n readonly value = model<string>('');\n readonly placeholder = input<string>('Search');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly width = input<string | null>(null);\n readonly iconPosition = input<'left' | 'right'>('right');\n readonly clearable = input<boolean>(true);\n /** Debounce for `valueChange`-driven searches; `search` (Enter) is immediate. */\n readonly debounceMs = input<number>(0);\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input<boolean>(false);\n readonly testId = input<string | null>(null);\n /** Show only a search icon until clicked (see class docs). */\n readonly collapsible = input<boolean>(false);\n /** Tooltip on the collapsed icon (falls back to `ariaLabel` / `placeholder`). */\n readonly triggerTooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('bottom');\n\n /** Debounced value stream (alias of the model change when debounceMs = 0). */\n readonly debouncedChange = output<string>();\n readonly search = output<string>();\n readonly cleared = output<void>();\n /** A collapsible search opened (true) or closed (false). */\n readonly expandedChange = output<boolean>();\n\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n private readonly cvaDisabled = signal(false);\n private timer: ReturnType<typeof setTimeout> | null = null;\n private onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n /** Open state of a collapsible search (always open otherwise). */\n readonly expanded = signal(false);\n /** Collapsible and closed: only the search icon button is shown. */\n readonly collapsed = computed(() => this.collapsible() && !this.expanded() && !this.value());\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n readonly showClear = computed(() => this.clearable() && !!this.value() && !this.isDisabled());\n readonly hostClasses = computed(() => {\n const cls = ['dw-search', `dw-search--${this.size()}`, `dw-search--icon-${this.iconPosition()}`];\n if (this.width() === '100%') cls.push('dw-search--block');\n if (this.collapsible()) cls.push(this.collapsed() ? 'dw-search--collapsed' : 'dw-search--expanded');\n return cls.join(' ');\n });\n\n constructor() {\n this.destroyRef.onDestroy(() => this.clearTimer());\n }\n\n onInput(text: string): void {\n this.value.set(text);\n this.onChange(text);\n this.emitDebounced(text);\n }\n\n onEnter(): void {\n this.clearTimer();\n this.search.emit(this.value());\n }\n\n onEscape(event: Event): void {\n if (this.value()) {\n event.stopPropagation();\n this.clear();\n } else if (this.collapsible()) {\n this.collapse();\n }\n }\n\n onBlur(): void {\n this.onTouched();\n if (this.collapsible() && !this.value()) {\n this.collapse();\n }\n }\n\n /** Opens a collapsible search and focuses its box. */\n expand(): void {\n this.expanded.set(true);\n this.expandedChange.emit(true);\n afterNextRender(() => this.focus(), { injector: this.injector });\n }\n\n collapse(): void {\n if (!this.expanded()) return;\n this.expanded.set(false);\n this.expandedChange.emit(false);\n }\n\n clear(): void {\n this.value.set('');\n this.onChange('');\n this.clearTimer();\n this.debouncedChange.emit('');\n this.cleared.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n private emitDebounced(text: string): void {\n const ms = this.debounceMs();\n if (ms <= 0) {\n this.debouncedChange.emit(text);\n return;\n }\n this.clearTimer();\n this.timer = setTimeout(() => this.debouncedChange.emit(text), ms);\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nexport type DwFileRejectReason = 'size' | 'type';\n\nexport interface DwFileRejection {\n file: File;\n reason: DwFileRejectReason;\n}\n\nexport interface DwSupportedType {\n label: string;\n icon?: string;\n}\n\n/** `5 * 1024 * 1024` → `5 MB` */\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes <= 0) {\n return '0 B';\n }\n const units = ['B', 'KB', 'MB', 'GB'];\n const i = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const value = bytes / Math.pow(1024, i);\n return `${Number.isInteger(value) ? value : value.toFixed(1)} ${units[i]}`;\n}\n\nexport function extensionOf(name: string): string {\n const dot = name.lastIndexOf('.');\n return dot >= 0 ? name.slice(dot + 1).toLowerCase() : '';\n}\n\n/**\n * Drag-and-drop / click-to-browse file picker.\n *\n * ```html\n * <dw-file-dropzone [multiple]=\"true\" [maxSize]=\"5 * 1024 * 1024\" [allowedExtensions]=\"exts\"\n * hint=\"Up to 5 MB each\" [supportedTypes]=\"types\"\n * (filesSelected)=\"queue($event)\" (rejected)=\"reject($event)\" />\n * <dw-file-dropzone variant=\"button\" accept=\".pem,.cert\" label=\"Upload certificate\" (filesSelected)=\"pick($event)\" />\n * ```\n */\n@Component({\n selector: 'dw-file-dropzone',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-file-dropzone-host' },\n template: `\n <input\n #fileInput\n type=\"file\"\n class=\"dw-sr-only\"\n tabindex=\"-1\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n (change)=\"onInputChange($event)\"\n (cancel)=\"$event.stopPropagation()\"\n />\n @if (variant() === 'button') {\n <button\n type=\"button\"\n class=\"dw-btn dw-btn--secondary dw-btn--outlined\"\n [disabled]=\"disabled()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"browse()\"\n >\n <i class=\"pi pi-upload\" aria-hidden=\"true\"></i>\n {{ label() }}\n </button>\n } @else {\n <div\n class=\"dw-dropzone\"\n [class.is-dragover]=\"dragOver()\"\n [class.is-disabled]=\"disabled()\"\n role=\"button\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.aria-label]=\"label()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"browse()\"\n (keydown.enter)=\"browse(); $event.preventDefault()\"\n (keydown.space)=\"browse(); $event.preventDefault()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <i class=\"pi pi-cloud-upload dw-dropzone__icon\" aria-hidden=\"true\"></i>\n <p class=\"dw-dropzone__title\">\n <span class=\"dw-link\">{{ label() }}</span> or drag and drop\n </p>\n @if (hint()) {\n <p class=\"dw-dropzone__hint\">{{ hint() }}</p>\n }\n @if (supportedTypes().length) {\n <div class=\"dw-dropzone__types\">\n @for (t of supportedTypes(); track t.label) {\n <span class=\"dw-tag\">\n @if (t.icon) {\n <img [src]=\"t.icon\" alt=\"\" aria-hidden=\"true\" class=\"dw-dropzone__type-icon\" />\n }\n {{ t.label }}\n </span>\n }\n </div>\n }\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- only stops clicks on projected controls from opening the file picker -->\n <div class=\"dw-dropzone__extra\" (click)=\"$event.stopPropagation()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n})\nexport class DwFileDropzoneComponent {\n readonly accept = input<string>('');\n readonly multiple = input<boolean>(false);\n /** Bytes; 0 = unlimited. */\n readonly maxSize = input<number>(0);\n /** Lower-case extensions without the dot; empty = any. */\n readonly allowedExtensions = input<readonly string[]>([]);\n readonly label = input<string>('Click to upload');\n readonly hint = input<string>('');\n readonly supportedTypes = input<readonly DwSupportedType[]>([]);\n readonly disabled = input<boolean>(false);\n readonly variant = input<'zone' | 'button'>('zone');\n readonly testId = input<string | null>(null);\n\n readonly filesSelected = output<File[]>();\n readonly rejected = output<DwFileRejection[]>();\n\n private readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n private dragDepth = 0;\n readonly dragOver = signal(false);\n\n readonly allowed = computed(() => new Set(this.allowedExtensions().map((e) => e.replace(/^\\./, '').toLowerCase())));\n\n browse(): void {\n if (!this.disabled()) {\n this.fileInput()?.nativeElement.click();\n }\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.handle(Array.from(target.files ?? []));\n target.value = ''; // allow re-selecting the same file\n }\n\n onDragEnter(event: DragEvent): void {\n event.preventDefault();\n if (this.disabled()) return;\n this.dragDepth++;\n this.dragOver.set(true);\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.dragDepth = Math.max(0, this.dragDepth - 1);\n if (this.dragDepth === 0) {\n this.dragOver.set(false);\n }\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragDepth = 0;\n this.dragOver.set(false);\n if (this.disabled()) return;\n this.handle(Array.from(event.dataTransfer?.files ?? []));\n }\n\n /** Validates and splits files into accepted / rejected, then emits. */\n handle(files: File[]): void {\n const list = this.multiple() ? files : files.slice(0, 1);\n const accepted: File[] = [];\n const rejections: DwFileRejection[] = [];\n for (const file of list) {\n const allowed = this.allowed();\n if (allowed.size && !allowed.has(extensionOf(file.name))) {\n rejections.push({ file, reason: 'type' });\n } else if (this.maxSize() > 0 && file.size > this.maxSize()) {\n rejections.push({ file, reason: 'size' });\n } else {\n accepted.push(file);\n }\n }\n if (accepted.length) this.filesSelected.emit(accepted);\n if (rejections.length) this.rejected.emit(rejections);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { formatBytes } from './dw-file-dropzone.component';\n\nexport type DwFileStatus = 'queued' | 'uploading' | 'success' | 'failed' | 'toolarge' | 'unsupported';\n\nexport interface DwFileItem {\n id?: string | number;\n name: string;\n size?: number;\n status: DwFileStatus;\n error?: string;\n icon?: string;\n}\n\nconst STATUS_ICONS: Record<DwFileStatus, string> = {\n queued: 'pi pi-clock',\n uploading: 'pi pi-spin pi-spinner',\n success: 'pi pi-check-circle',\n failed: 'pi pi-times-circle',\n toolarge: 'pi pi-exclamation-triangle',\n unsupported: 'pi pi-ban',\n};\n\n/**\n * Upload queue / selected-file list.\n *\n * ```html\n * <dw-file-list [items]=\"queue\" (remove)=\"drop($event)\" (retry)=\"upload($event)\" />\n * ```\n */\n@Component({\n selector: 'dw-file-list',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-file-list', role: 'list' },\n template: `\n @for (item of items(); track item.id ?? item.name) {\n <div class=\"dw-file-list__item\" role=\"listitem\" [class]=\"'is-' + item.status\">\n @if (item.icon) {\n <img class=\"dw-file-list__file-icon\" [src]=\"item.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i class=\"pi pi-file dw-file-list__file-icon\" aria-hidden=\"true\"></i>\n }\n <div class=\"dw-file-list__meta\">\n <span class=\"dw-file-list__name\" [title]=\"item.name\">{{ item.name }}</span>\n @if (item.error) {\n <span class=\"dw-file-list__error\">{{ item.error }}</span>\n } @else if (item.size !== undefined) {\n <span class=\"dw-file-list__size\">{{ size(item.size) }}</span>\n }\n </div>\n <i class=\"dw-file-list__status\" [class]=\"statusIcon(item.status)\" [attr.aria-label]=\"item.status\" role=\"img\"></i>\n @if (item.status === 'failed' && retryable()) {\n <button type=\"button\" class=\"dw-icon-btn\" [attr.aria-label]=\"'Retry ' + item.name\" (click)=\"retry.emit(item)\">\n <i class=\"pi pi-refresh\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (removable() && item.status !== 'uploading') {\n <button\n type=\"button\"\n class=\"dw-icon-btn dw-icon-btn--danger\"\n [attr.aria-label]=\"'Remove ' + item.name\"\n (click)=\"remove.emit(item)\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n }\n `,\n})\nexport class DwFileListComponent {\n readonly items = input<readonly DwFileItem[]>([]);\n readonly removable = input<boolean>(true);\n readonly retryable = input<boolean>(false);\n\n readonly remove = output<DwFileItem>();\n readonly retry = output<DwFileItem>();\n\n statusIcon(status: DwFileStatus): string {\n return STATUS_ICONS[status] ?? STATUS_ICONS.queued;\n }\n\n size(bytes: number): string {\n return formatBytes(bytes);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n computed,\n contentChild,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MenuItem } from 'primeng/api';\nimport { Menu, MenuModule } from 'primeng/menu';\nimport { TieredMenu, TieredMenuModule } from 'primeng/tieredmenu';\nimport { alignUnderOverlayAnchor } from '../overlay-anchor.util';\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\n/** Content shown above the items (list mode), e.g. who is signed in: `<ng-template dwMenuHeader>…</ng-template>`. */\n@Directive({ selector: 'ng-template[dwMenuHeader]', standalone: true })\nexport class DwMenuHeaderDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\nexport interface DwMenuItem<T = unknown> {\n label?: string;\n icon?: string;\n /** Receives the menu's `context` (e.g. the table row). */\n command?: (context: T, event?: unknown) => void;\n routerLink?: string | readonly unknown[];\n queryParams?: Record<string, unknown>;\n url?: string;\n target?: string;\n danger?: boolean;\n disabled?: boolean;\n /** Why the item is disabled — shown as a tooltip on hover while it is. */\n disabledReason?: string;\n /** `false` hides the item; the consumer decides, e.g. `visible: auth.hasPrivilege('x')`. */\n visible?: boolean;\n separator?: boolean;\n description?: string;\n testId?: string;\n items?: DwMenuItem<T>[];\n /** Count shown at the end of the item (e.g. unread notifications). */\n count?: number | string | null;\n}\n\n/** Marks the hidden-heading group that holds plain top-level items (see groupLooseItems). */\nexport const DW_MENU_PLAIN_GROUP = 'dw-menu-plain-group';\n\n/**\n * Popup menu (kebab / action menu) on top of p-menu.\n *\n * ```html\n * <!-- built-in kebab trigger -->\n * <dw-menu [items]=\"rowActions\" [context]=\"agent\" ariaLabel=\"Agent actions\" />\n *\n * <!-- external trigger -->\n * <dw-button label=\"Create\" trailingIcon=\"pi pi-chevron-down\" (clicked)=\"createMenu.toggle($event)\" />\n * <dw-menu #createMenu [items]=\"createItems\" trigger=\"none\" />\n * ```\n * Items with `danger: true` are styled red and separated from the rest.\n *\n * `mode=\"list\"` (default) renders an item's `items` as a labelled group;\n * `mode=\"tiered\"` opens them as a flyout submenu, so parents and their\n * siblings stay ordinary, clickable entries (e.g. the header's Data Studio).\n */\n@Component({\n selector: 'dw-menu',\n standalone: true,\n imports: [MenuModule, TieredMenuModule, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-menu-host' },\n template: `\n @if (trigger() === 'kebab') {\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [class.dw-icon-btn--lg]=\"size() === 'md'\"\n [class.dw-icon-btn--xs]=\"size() === 'xs'\"\n [class.dw-icon-btn--outlined]=\"triggerVariant() === 'outlined'\"\n [class.is-open]=\"open()\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle($event)\"\n >\n <i [class]=\"triggerIcon()\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (mode() === 'tiered') {\n <p-tieredmenu\n #tiered\n [model]=\"model()\"\n [popup]=\"true\"\n [appendTo]=\"appendTo()\"\n [styleClass]=\"'dw-menu dw-menu--tiered ' + styleClass()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n ></p-tieredmenu>\n } @else {\n <p-menu\n #menu\n [model]=\"model()\"\n [popup]=\"true\"\n [appendTo]=\"appendTo()\"\n [styleClass]=\"'dw-menu ' + styleClass()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n >\n @if (header(); as h) {\n <ng-template #start>\n <div class=\"dw-menu__header\"><ng-container [ngTemplateOutlet]=\"h.template\" /></div>\n </ng-template>\n }\n </p-menu>\n }\n `,\n})\nexport class DwMenuComponent<T = unknown> {\n readonly items = input<DwMenuItem<T>[]>([]);\n readonly context = input<T | null>(null);\n readonly trigger = input<'kebab' | 'none'>('kebab');\n readonly triggerIcon = input<string>('pi pi-ellipsis-v');\n readonly ariaLabel = input<string>('More actions');\n readonly size = input<'xs' | 'sm' | 'md'>('sm');\n /** Kebab trigger look: `outlined` (bordered, on a surface) floats clearly over row content. */\n readonly triggerVariant = input<'default' | 'outlined'>('default');\n readonly disabled = input<boolean>(false);\n readonly appendTo = input<string>('body');\n readonly styleClass = input<string>('');\n readonly testId = input<string | null>(null);\n /** `list`: child items render as a labelled group. `tiered`: they open as a flyout submenu. */\n readonly mode = input<'list' | 'tiered'>('list');\n\n readonly opened = output<void>();\n readonly closed = output<void>();\n readonly itemClick = output<DwMenuItem<T>>();\n\n readonly open = signal(false);\n readonly header = contentChild(DwMenuHeaderDirective);\n private readonly listMenu = viewChild<Menu>('menu');\n private readonly tieredMenu = viewChild<TieredMenu>('tiered');\n private readonly menu = computed<Menu | TieredMenu | undefined>(() => this.tieredMenu() ?? this.listMenu());\n\n readonly model = computed<MenuItem[]>(() => {\n const model = this.toMenuItems(this.items());\n return this.mode() === 'list' ? this.groupLooseItems(model) : model;\n });\n\n toggle(event: Event): void {\n event.stopPropagation();\n this.menu()?.toggle(event);\n }\n\n show(event: Event): void {\n this.menu()?.show(event);\n }\n\n hide(): void {\n this.menu()?.hide();\n }\n\n onShow(): void {\n // Tiered: open flyouts on hover straight away. PrimeNG only does that once the\n // menu is \"dirty\" (after a first click) and resets the flag on every show.\n const tiered = this.tieredMenu() as unknown as { dirty?: boolean } | undefined;\n if (tiered && 'dirty' in tiered) {\n tiered.dirty = true;\n }\n // PrimeNG emits onShow before it positions the panel (same call), so anchor afterwards.\n const menu = this.menu();\n queueMicrotask(() => alignUnderOverlayAnchor(menu?.container, menu?.target));\n this.open.set(true);\n this.opened.emit();\n }\n\n onHide(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n private isVisible(item: DwMenuItem<T>): boolean {\n return item.visible !== false;\n }\n\n /**\n * PrimeNG's list menu renders every top-level item as a group heading once any of them has\n * children, so a plain action beside a group (e.g. \"Export\" next to \"Get help\") became an\n * unclickable label. Wrap each run of plain top-level items in a group with a hidden heading.\n */\n private groupLooseItems(model: MenuItem[]): MenuItem[] {\n if (!model.some((m) => m.items?.length)) return model;\n const out: MenuItem[] = [];\n let loose: MenuItem[] = [];\n const flush = () => {\n if (loose.length) out.push({ label: '', automationId: DW_MENU_PLAIN_GROUP, items: loose });\n loose = [];\n };\n for (const item of model) {\n if (item.items?.length || item.separator) {\n flush();\n out.push(item);\n } else {\n loose.push(item);\n }\n }\n flush();\n return out;\n }\n\n private toMenuItems(items: DwMenuItem<T>[]): MenuItem[] {\n const visible = items.filter((i) => this.isVisible(i));\n const regular = visible.filter((i) => !i.danger);\n const danger = visible.filter((i) => i.danger);\n const ordered: DwMenuItem<T>[] =\n regular.length && danger.length && !regular[regular.length - 1].separator\n ? [...regular, { separator: true }, ...danger]\n : [...regular, ...danger];\n return ordered.map((item) => this.toMenuItem(item));\n }\n\n private toMenuItem(item: DwMenuItem<T>): MenuItem {\n if (item.separator) {\n return { separator: true };\n }\n const classes = ['dw-menu__item'];\n if (item.danger) classes.push('dw-menu-item--danger');\n const reason = item.disabled && item.disabledReason ? item.disabledReason : '';\n // A disabled item ignores the pointer (PrimeNG's .p-disabled), so a title never showed; an\n // explained one takes hover again (menu.css) and shows the reason as a real tooltip.\n if (reason) classes.push('dw-menu__item--explained');\n return {\n label: item.label,\n icon: item.icon,\n disabled: item.disabled,\n ...(reason ? { tooltipOptions: { tooltipLabel: reason, tooltipPosition: 'left', appendTo: 'body' } } : {}),\n routerLink: item.routerLink,\n queryParams: item.queryParams,\n url: item.url,\n // PrimeNG binds [target] as a property: left undefined it becomes the string \"undefined\" — a\n // named window — so every link item opened a new tab. Links open in this tab unless asked.\n target: item.target ?? '_self',\n styleClass: classes.join(' '),\n automationId: item.testId,\n ...(item.count !== undefined && item.count !== null\n ? { badge: String(item.count), badgeStyleClass: 'dw-menu__count' }\n : {}),\n ...(item.description\n ? {\n escape: false,\n label: `${escapeHtml(item.label ?? '')}<span class=\"dw-menu__description\">${escapeHtml(item.description)}</span>`,\n }\n : {}),\n items: item.items ? this.toMenuItems(item.items) : undefined,\n command: (e) => {\n this.itemClick.emit(item);\n item.command?.(this.context() as T, e?.originalEvent);\n },\n };\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwMenuComponent, DwMenuItem } from '../menu/dw-menu.component';\nimport { DwBadgeComponent, DwBadgeTone } from '../badge/dw-badge.component';\nimport { DwSkeletonComponent } from '../loading/dw-skeleton.component';\nimport { isImageIcon } from '../internal/image-icon.util';\n\nexport type DwCardVariant = 'entity' | 'option' | 'stat' | 'flat';\nexport type DwCardTint = 'neutral' | 'accent' | 'workflow' | 'reasoning' | 'orange' | 'cyan' | 'pink' | 'success' | 'danger';\n\nexport { isImageIcon };\n\n/**\n * Card for entities, templates, integrations, selectable options and stats.\n *\n * ```html\n * <dw-card [title]=\"tpl.name\" [description]=\"tpl.description\" [icon]=\"tpl.icon\" [interactive]=\"true\"\n * [menuItems]=\"actions\" [menuContext]=\"tpl\" (activate)=\"open(tpl)\">\n * <dw-tag-list dwCardTags [tags]=\"tpl.tags\" [maxVisible]=\"3\" />\n * <span dwCardFooter class=\"dw-meta\">Updated 2d ago</span>\n * </dw-card>\n *\n * <dw-card variant=\"option\" title=\"Delete agent only\" description=\"Keeps tools\" [selected]=\"mode === 'agent'\"\n * (activate)=\"mode = 'agent'\" />\n *\n * <dw-card variant=\"stat\" label=\"Runs\" [value]=\"1204\" [interactive]=\"true\" [selected]=\"filter === 'runs'\" />\n *\n * <!-- Stat with the info icon and an expand chevron at the end of the label row, a muted suffix -->\n * <dw-card variant=\"stat\" label=\"Invoices\" [value]=\"'1,341'\" valueSuffix=\"/ 1,500\" tooltip=\"…\" infoPosition=\"end\">\n * <i dwStatLabelEnd class=\"pi pi-chevron-down\"></i>\n * </dw-card>\n *\n * <!-- A stand-in stat (e.g. data with no definition): dashed, muted, monospace label -->\n * <dw-card variant=\"stat\" appearance=\"dashed\" labelStyle=\"mono\" label=\"legacy_po_mismatch\" [value]=\"8\" />\n * ```\n */\n@Component({\n selector: 'dw-card',\n standalone: true,\n imports: [NgTemplateOutlet, TooltipModule, DwMenuComponent, DwBadgeComponent, DwSkeletonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n '[class]': 'hostClasses()',\n '[attr.role]': 'role()',\n '[attr.tabindex]': 'isInteractive() ? 0 : null',\n '[attr.aria-pressed]': 'variant() === \"stat\" && isInteractive() ? selected() : null',\n '[attr.aria-checked]': 'variant() === \"option\" ? selected() : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.data-testid]': 'testId()',\n '(click)': 'onActivate($event)',\n '(keydown.enter)': 'onActivate($event)',\n '(keydown.space)': 'onActivate($event)',\n },\n template: `\n <!-- One default slot, shared by the stat and body layouts (two <ng-content>s would leave the stat one empty). -->\n <ng-template #projected><ng-content /></ng-template>\n @if (loading()) {\n <dw-skeleton [preset]=\"variant() === 'stat' ? 'text' : 'card'\" />\n } @else if (variant() === 'stat') {\n @if (icon()) {\n <span class=\"dw-entity-icon dw-stat-card__icon\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <span class=\"dw-stat-card__label\" [class.dw-mono]=\"labelStyle() === 'mono'\">\n <span class=\"dw-stat-card__label-text\">{{ label() || title() }}</span>\n @if (tooltip() && infoPosition() === 'inline') {\n <i class=\"pi pi-info-circle dw-stat-card__info\" tabindex=\"0\" [attr.aria-label]=\"tooltip()\"\n [pTooltip]=\"tooltip()\" tooltipPosition=\"top\" appendTo=\"body\"></i>\n }\n <span class=\"dw-stat-card__label-end\">@if (tooltip() && infoPosition() === 'end') {<i class=\"pi pi-info-circle dw-stat-card__info\" tabindex=\"0\" [attr.aria-label]=\"tooltip()\"\n [pTooltip]=\"tooltip()\" tooltipPosition=\"top\" appendTo=\"body\"></i>}<ng-content select=\"[dwStatLabelEnd]\" /></span>\n </span>\n <span class=\"dw-stat-card__value\">{{ value() }}@if (valueSuffix()) {<span class=\"dw-stat-card__value-suffix\">{{ valueSuffix() }}</span>}</span>\n <ng-container *ngTemplateOutlet=\"projected\" />\n } @else {\n <div\n class=\"dw-card__header\"\n [pTooltip]=\"disabled() ? disabledReason() : tooltip()\"\n [tooltipDisabled]=\"!(disabled() ? disabledReason() : tooltip())\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n @if (variant() === 'option') {\n <span class=\"dw-card__radio\" [class.is-checked]=\"selected()\" aria-hidden=\"true\"></span>\n }\n @if (icon()) {\n <span class=\"dw-entity-icon dw-card__icon\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-card__titles\">\n @if (title()) {\n <p class=\"dw-card__title dw-subtitle\">{{ title() }}</p>\n }\n @if (subtitle()) {\n <p class=\"dw-card__subtitle\">{{ subtitle() }}</p>\n }\n </div>\n <div class=\"dw-card__header-end\">\n @if (badge()) {\n <dw-badge [value]=\"badge()\" [tone]=\"badgeTone()\" kind=\"label\" />\n }\n <ng-content select=\"[dwCardHeaderEnd]\" />\n @if (menuItems().length) {\n <dw-menu [items]=\"menuItems()\" [context]=\"menuContext()\" [ariaLabel]=\"(title() || 'Card') + ' actions'\" />\n }\n </div>\n </div>\n @if (description() || hasBody()) {\n <div class=\"dw-card__body\">\n @if (description()) {\n <p class=\"dw-card__desc\" [class]=\"'dw-card__desc--clamp-' + clampLines()\">{{ description() }}</p>\n }\n <ng-content select=\"[dwCardTags]\" />\n <ng-container *ngTemplateOutlet=\"projected\" />\n </div>\n }\n <ng-content select=\"[dwCardFooter]\" />\n }\n `,\n})\nexport class DwCardComponent {\n readonly variant = input<DwCardVariant>('entity');\n /** `sm` is the dense picker tile: 12px padding and no hover lift. */\n readonly size = input<'md' | 'sm'>('md');\n readonly title = input<string>('');\n readonly subtitle = input<string>('');\n readonly description = input<string>('');\n readonly clampLines = input<1 | 2 | 3>(2);\n /** Icon-font class (`pi pi-cloud`) or image path. */\n readonly icon = input<string>('');\n readonly iconTint = input<DwCardTint>('neutral');\n readonly badge = input<string>('');\n readonly badgeTone = input<DwBadgeTone>('neutral');\n readonly tooltip = input<string>('');\n readonly interactive = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly disabledReason = input<string>('');\n readonly loading = input<boolean>(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- public API kept from dataworkz-ui; `unknown` would break consumers' typing\n readonly menuItems = input<DwMenuItem<any>[]>([]);\n readonly menuContext = input<unknown>(null);\n /** Stat variant. */\n readonly label = input<string>('');\n /** Stat variant: `caps` sets the label as an uppercase caption; `mono` in the monospace face. */\n readonly labelStyle = input<'default' | 'caps' | 'mono'>('default');\n readonly value = input<string | number | null>(null);\n /** Stat variant: muted, smaller text after the value, e.g. \"/ 1,500\" for a target. */\n readonly valueSuffix = input<string>('');\n /** Stat variant: the tooltip's info icon right after the label (default) or at the end of its row. */\n readonly infoPosition = input<'inline' | 'end'>('inline');\n /** Stat variant: `dashed` for a muted stand-in tile (dashed border, quieter surface). */\n readonly appearance = input<'default' | 'dashed'>('default');\n /** Set true when projecting default body content without a description. */\n readonly hasBody = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly activate = output<Event>();\n\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n readonly isInteractive = computed(\n () => (this.interactive() || this.variant() === 'option') && !this.disabled() && !this.loading(),\n );\n readonly role = computed(() => {\n if (this.variant() === 'option') return 'radio';\n return this.isInteractive() ? 'button' : null;\n });\n\n readonly hostClasses = computed(() => {\n const stat = this.variant() === 'stat';\n const cls = [stat ? 'dw-stat-card' : 'dw-card', `dw-card--${this.variant()}`];\n if (this.interactive() || this.variant() === 'option') cls.push('dw-card--hover');\n if (this.selected()) cls.push('is-selected');\n if (this.disabled()) cls.push('is-disabled');\n if (this.variant() === 'flat') cls.push('dw-card--flat');\n if (this.size() === 'sm') cls.push('dw-card--sm');\n if (stat && this.icon()) cls.push('dw-stat-card--with-icon');\n if (stat && this.labelStyle() === 'caps') cls.push('dw-stat-card--caps-label');\n if (stat && this.appearance() === 'dashed') cls.push('dw-stat-card--dashed');\n return cls.join(' ');\n });\n\n onActivate(event: Event): void {\n if (!this.isInteractive()) {\n return;\n }\n const target = event.target as HTMLElement | null;\n // Ignore clicks on nested interactive controls (menu trigger, links, inputs).\n if (target && target !== event.currentTarget && target.closest('button, a, input, select, textarea, [role=menu]')) {\n return;\n }\n if (event instanceof KeyboardEvent) {\n event.preventDefault();\n }\n this.activate.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, inject, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { isImageIcon } from '../internal/image-icon.util';\n\n/** Marks the switch (usually `<p-toggleswitch formControlName=…>`) shown at the card's leading edge. */\n@Directive({ selector: '[dwToggleCardControl]', standalone: true })\nexport class DwToggleCardControlDirective {}\n\n/**\n * Lazy configuration body: `<ng-template dwToggleCardBody>…</ng-template>` is only created\n * while the card is expanded (projected content would be instantiated even when hidden).\n */\n@Directive({ selector: 'ng-template[dwToggleCardBody]', standalone: true })\nexport class DwToggleCardBodyDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * Feature card that is switched on/off: switch · icon · title / description, with the\n * configuration body revealed while `expanded` is true. The consumer owns the switch so\n * it stays bound to its own form control.\n *\n * ```html\n * <dw-toggle-card title=\"Full Text Search Index\" description=\"Enable full text search\"\n * icon=\"assets/images/svgIcon/text-search.svg\" [expanded]=\"form.value.fullTextSearchIndex\"\n * [disabledReason]=\"graphDbOn ? '' : 'Requires Graph Database Storage to be enabled'\">\n * <p-toggleswitch dwToggleCardControl formControlName=\"fullTextSearchIndex\" />\n * <ng-template dwToggleCardBody>…configuration fields…</ng-template>\n * </dw-toggle-card>\n * ```\n */\n@Component({\n selector: 'dw-toggle-card',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n class: 'dw-toggle-card',\n '[class.is-expanded]': 'expanded()',\n '[class.is-disabled]': '!!disabledReason()',\n '[class.is-invalid]': 'invalid()',\n '[attr.data-testid]': 'testId()',\n },\n template: `\n <div class=\"dw-toggle-card__header\">\n <span class=\"dw-toggle-card__control\"><ng-content select=\"[dwToggleCardControl]\" /></span>\n @if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--md dw-toggle-card__icon\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-toggle-card__titles\">\n <h3 class=\"dw-toggle-card__title\">{{ title() }}</h3>\n @if (description()) {\n <p class=\"dw-toggle-card__desc\">{{ description() }}</p>\n }\n @if (disabledReason()) {\n <p class=\"dw-toggle-card__reason\">{{ disabledReason() }}</p>\n }\n </div>\n </div>\n @if (expanded() && body()) {\n <div class=\"dw-toggle-card__body\">\n <ng-container [ngTemplateOutlet]=\"body()!.template\" />\n </div>\n }\n `,\n})\nexport class DwToggleCardComponent {\n readonly title = input.required<string>();\n readonly description = input<string>('');\n /** Icon class (`pi pi-users`) or image path. */\n readonly icon = input<string>('');\n /** Show the configuration body (typically the switch's value). */\n readonly expanded = input<boolean>(false);\n /** When set, the card is dimmed and this explains why it can't be enabled. */\n readonly disabledReason = input<string>('');\n /** Flags the card when its configuration needs attention (e.g. a required field is empty). */\n readonly invalid = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly body = contentChild(DwToggleCardBodyDirective);\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n}\n\nexport const DW_TOGGLE_CARD = [DwToggleCardComponent, DwToggleCardControlDirective, DwToggleCardBodyDirective] as const;\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DwBadgeComponent } from '../badge/dw-badge.component';\nimport { DwCardComponent } from '../card/dw-card.component';\n\n/**\n * Picker tile (integration catalogue, channel picker): a small card with the icon beside the label\n * and, below, how many instances exist — the same card as Create tool's integrations. Lay several\n * out in `.dw-tile-grid`.\n *\n * ```html\n * <div class=\"dw-tile-grid\">\n * <dw-tile label=\"Snowflake\" icon=\"assets/snowflake.svg\" [count]=\"3\" (activate)=\"open('snowflake')\" />\n * <dw-tile label=\"Slack\" icon=\"pi pi-slack\" badge=\"Coming soon\" [disabled]=\"true\" />\n * </div>\n * ```\n */\n@Component({\n selector: 'dw-tile',\n standalone: true,\n imports: [DwCardComponent, DwBadgeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-tile-host' },\n template: `\n <dw-card class=\"dw-tile\" size=\"sm\" [interactive]=\"!disabled()\" [disabled]=\"disabled()\" [icon]=\"icon()\"\n [title]=\"label()\" [hasBody]=\"hasCount() || !!badge()\" [testId]=\"testId()\"\n (activate)=\"onActivate($event)\">\n <!-- The second line: the count, or the badge (e.g. \"Coming soon\") — never beside the\n label, where it would cut a longer name short. -->\n @if (hasCount()) {\n <span class=\"dw-tile__count\">\n <!-- &ngsp; keeps a real space for screen readers and copy-paste (\"3 connections\");\n the flex gap already spaces them visually, where a whitespace-only text node isn't drawn. -->\n <b class=\"dw-subtitle\">{{ count() }}</b>&ngsp;<span class=\"dw-meta\">{{ countUnit() }}</span>\n @if (badge()) {\n <dw-badge [value]=\"badge()\" tone=\"muted\" kind=\"label\" />\n }\n </span>\n } @else if (badge()) {\n <dw-badge [value]=\"badge()\" tone=\"muted\" kind=\"label\" />\n }\n </dw-card>\n `,\n})\nexport class DwTileComponent {\n readonly label = input.required<string>();\n /** PrimeIcons class or an image path / data URI. */\n readonly icon = input<string>('');\n readonly count = input<number | string | null>(null);\n /** What the count counts; singular when the count is 1. */\n readonly unit = input<string>('instance');\n /** Badge on the tile's second line, e.g. \"Coming soon\". */\n readonly badge = input<string>('');\n readonly disabled = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n /** Not emitted while disabled. */\n readonly activate = output<Event>();\n\n readonly hasCount = computed(() => this.count() !== null && this.count() !== undefined);\n readonly countUnit = computed(() => (Number(this.count()) === 1 ? this.unit() : `${this.unit()}s`));\n\n onActivate(event: Event): void {\n if (!this.disabled()) this.activate.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, output, signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DwEntityIconComponent, DwEntityTint } from '../entity-icon/dw-entity-icon.component';\n\nlet nextSectionId = 0;\n\n/**\n * Section with an optional collapsible header.\n *\n * ```html\n * <dw-section title=\"Tool calls\" [count]=\"calls.length\" [(expanded)]=\"open['calls']\">\n * <dw-copy-button dwSectionActions [text]=\"json\" />\n * …body…\n * </dw-section>\n * <dw-section title=\"Advanced\" pill=\"Advanced\" [expanded]=\"false\" [lazy]=\"true\">…</dw-section>\n * <dw-section title=\"Authentication\" [collapsible]=\"false\" variant=\"plain\">…</dw-section>\n * <dw-section title=\"Purpose\" icon=\"pi pi-info-circle\" iconTint=\"orange\" [collapsible]=\"false\">…</dw-section>\n * <dw-section title=\"About tool\" [step]=\"1\" variant=\"plain\" [collapsible]=\"false\">…</dw-section>\n * <dw-section title=\"Active\" subtitle=\"…\">\n * <dw-badge dwSectionTitleExtra [value]=\"n\" /> <!-- beside the title; dwSectionHeaderExtra ends the row -->\n * </dw-section>\n * ```\n */\n@Component({\n selector: 'dw-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n '[class]': 'hostClasses()',\n '[attr.data-testid]': 'testId()',\n },\n template: `\n <div class=\"dw-section__head\">\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"dw-section__header\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"bodyId\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <ng-container *ngTemplateOutlet=\"headerContent\" />\n </button>\n } @else {\n <div class=\"dw-section__header\">\n <ng-container *ngTemplateOutlet=\"headerContent\" />\n </div>\n }\n <div class=\"dw-section__actions\"><ng-content select=\"[dwSectionActions]\" /></div>\n </div>\n\n <ng-template #headerContent>\n @if (collapsible()) {\n <i class=\"pi pi-chevron-down dw-section__chevron\" aria-hidden=\"true\"></i>\n }\n @if (step() !== null) {\n <span class=\"dw-section__step\" aria-hidden=\"true\">{{ step() }}</span>\n }\n @if (icon() && iconTint()) {\n <dw-entity-icon class=\"dw-section__icon dw-section__icon--tinted\" kind=\"icon\" [type]=\"icon()\" size=\"sm\"\n [framed]=\"true\" [tint]=\"iconTint()!\" />\n } @else if (icon()) {\n <i [class]=\"icon()\" class=\"dw-section__icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"dw-section__titles\">\n <!-- The count sits right after the title, not after a (longer) subtitle. -->\n <span class=\"dw-section__title-row\">\n <span class=\"dw-section__title\">{{ title() }}</span>\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-count-pill\">{{ count() }}</span>\n }\n <ng-content select=\"[dwSectionTitleExtra]\" />\n </span>\n @if (subtitle()) {\n <span class=\"dw-section__subtitle\">{{ subtitle() }}</span>\n }\n </span>\n @if (pill()) {\n <span class=\"dw-badge dw-badge--neutral dw-badge--label\">{{ pill() }}</span>\n }\n <ng-content select=\"[dwSectionHeaderExtra]\" />\n </ng-template>\n\n @if (!lazy() || hasOpened()) {\n <div class=\"dw-section__body\" [id]=\"bodyId\" [hidden]=\"collapsible() && !expanded()\" role=\"region\">\n <ng-content />\n </div>\n }\n `,\n imports: [NgTemplateOutlet, DwEntityIconComponent],\n})\nexport class DwSectionComponent {\n readonly title = input.required<string>();\n readonly subtitle = input<string>('');\n readonly icon = input<string>('');\n /** Frames the icon in a tinted tile (same palette as dw-entity-icon). */\n readonly iconTint = input<DwEntityTint | null>(null);\n /** Numbered step badge before the title (multi-step forms); the body aligns under the title. */\n readonly step = input<number | null>(null);\n readonly count = input<number | string | null>(null);\n readonly pill = input<string>('');\n readonly expanded = model<boolean>(true);\n readonly collapsible = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n /** Render the body only after it is first opened. */\n readonly lazy = input<boolean>(false);\n readonly variant = input<'boxed' | 'plain' | 'caps'>('boxed');\n readonly testId = input<string | null>(null);\n\n readonly opened = output<void>();\n\n readonly bodyId = `dw-section-body-${++nextSectionId}`;\n private readonly openedOnce = signal(false);\n\n readonly hasOpened = computed(() => this.openedOnce() || this.expanded() || !this.collapsible());\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-section', `dw-section--${this.variant()}`];\n if (this.expanded() || !this.collapsible()) cls.push('is-open');\n if (this.disabled()) cls.push('is-disabled');\n if (this.step() !== null) cls.push('dw-section--stepped');\n return cls.join(' ');\n });\n\n toggle(): void {\n if (this.disabled()) {\n return;\n }\n const next = !this.expanded();\n this.expanded.set(next);\n if (next) {\n this.openedOnce.set(true);\n this.opened.emit();\n }\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n TemplateRef,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport type DwTabValue = string | number;\n\nexport interface DwTabOption<V extends DwTabValue = DwTabValue> {\n value: V;\n label: string;\n icon?: string;\n count?: number | string | null;\n /** Colour of the count: neutral (default) or `danger` for things that need attention. */\n countTone?: 'neutral' | 'danger';\n disabled?: boolean;\n tooltip?: string;\n hidden?: boolean;\n testId?: string;\n}\n\n/**\n * Lazy panel content for a tab value.\n * `<ng-template dwTabPanel=\"spec\">…</ng-template>`\n */\n@Directive({ selector: 'ng-template[dwTabPanel]', standalone: true })\nexport class DwTabPanelDirective {\n readonly value = input.required<DwTabValue>({ alias: 'dwTabPanel' });\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\nlet nextTabsId = 0;\n\n/**\n * Tabs / segmented control / pill toggle. Works with `[(value)]`, ngModel or\n * a FormControl. Projected `dwTabPanel` templates render (lazily) under the bar.\n *\n * ```html\n * <dw-tabs [options]=\"[{value:'spec',label:'Spec'},{value:'json',label:'JSON'}]\" [(value)]=\"view\" variant=\"segmented\" />\n *\n * <dw-tabs [options]=\"tabs\" [(value)]=\"active\">\n * <ng-template dwTabPanel=\"overview\">…</ng-template>\n * <ng-template dwTabPanel=\"runs\">…</ng-template>\n * </dw-tabs>\n * ```\n */\n@Component({\n selector: 'dw-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DwTabsComponent), multi: true }],\n host: { '[class]': 'hostClasses()' },\n template: `\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- tablist: arrow keys move focus between its tab buttons -->\n <div\n class=\"dw-tabs__list\"\n [class]=\"listClass()\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-orientation]=\"variant() === 'vertical' ? 'vertical' : 'horizontal'\"\n (keydown)=\"onKeydown($event)\"\n >\n @for (opt of visibleOptions(); track opt.value) {\n <button\n #tab\n type=\"button\"\n role=\"tab\"\n [class]=\"itemClass()\"\n [class.is-active]=\"opt.value === value()\"\n [id]=\"tabId(opt.value)\"\n [attr.aria-selected]=\"opt.value === value()\"\n [attr.aria-controls]=\"hasPanels() ? panelId(opt.value) : null\"\n [attr.tabindex]=\"opt.value === focusValue() ? 0 : -1\"\n [attr.data-testid]=\"opt.testId\"\n [disabled]=\"opt.disabled || isDisabled()\"\n [pTooltip]=\"opt.tooltip\"\n [tooltipDisabled]=\"!opt.tooltip\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"select(opt)\"\n >\n @if (opt.icon) {\n <i [class]=\"opt.icon\" aria-hidden=\"true\"></i>\n }\n <span>{{ opt.label }}</span>\n @if (opt.count !== null && opt.count !== undefined) {\n <span class=\"dw-tabs__count\" [class.dw-tabs__count--danger]=\"opt.countTone === 'danger'\">{{ opt.count }}</span>\n }\n </button>\n }\n </div>\n @for (panel of panels(); track panel.value()) {\n @if (panel.value() === value()) {\n <div class=\"dw-tabs__panel\" role=\"tabpanel\" [id]=\"panelId(panel.value())\" [attr.aria-labelledby]=\"tabId(panel.value())\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n `,\n})\nexport class DwTabsComponent implements ControlValueAccessor {\n readonly options = input<readonly DwTabOption[]>([]);\n readonly value = model<DwTabValue | null>(null);\n readonly variant = input<'underline' | 'segmented' | 'pill' | 'vertical'>('underline');\n readonly size = input<'sm' | 'md'>('md');\n readonly fullWidth = input<boolean>(false);\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input<boolean>(false);\n\n private readonly uid = ++nextTabsId;\n private readonly cvaDisabled = signal(false);\n private readonly tabs = viewChildren<ElementRef<HTMLButtonElement>>('tab');\n readonly panels = contentChildren(DwTabPanelDirective);\n\n private onChange: (value: DwTabValue | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly visibleOptions = computed(() => this.options().filter((o) => !o.hidden));\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n readonly hasPanels = computed(() => this.panels().length > 0);\n /** Tab that receives focus via Tab key: the active one, else the first enabled. */\n readonly focusValue = computed(() => {\n const opts = this.visibleOptions();\n const active = opts.find((o) => o.value === this.value() && !o.disabled);\n return (active ?? opts.find((o) => !o.disabled))?.value ?? null;\n });\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-tabs-host', `dw-tabs-host--${this.variant()}`];\n if (this.fullWidth()) cls.push('dw-tabs-host--full');\n return cls.join(' ');\n });\n\n readonly listClass = computed(() => {\n switch (this.variant()) {\n case 'segmented':\n return `dw-segmented${this.size() === 'sm' ? ' dw-segmented--sm' : ''}`;\n case 'pill':\n return 'dw-pill-tabs';\n case 'vertical':\n return 'dw-tabs dw-tabs--vertical';\n default:\n return `dw-tabs${this.size() === 'sm' ? ' dw-tabs--sm' : ''}`;\n }\n });\n\n readonly itemClass = computed(() => {\n switch (this.variant()) {\n case 'segmented':\n return 'dw-segmented__item';\n case 'pill':\n return 'dw-pill-tabs__item';\n default:\n return 'dw-tab';\n }\n });\n\n tabId(value: DwTabValue): string {\n return `dw-tabs-${this.uid}-tab-${value}`;\n }\n\n panelId(value: DwTabValue): string {\n return `dw-tabs-${this.uid}-panel-${value}`;\n }\n\n select(opt: DwTabOption): void {\n if (opt.disabled || this.isDisabled() || opt.value === this.value()) {\n return;\n }\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.onTouched();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const keys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n if (!keys.includes(event.key)) {\n return;\n }\n const enabled = this.visibleOptions().filter((o) => !o.disabled);\n if (!enabled.length) {\n return;\n }\n event.preventDefault();\n const current = enabled.findIndex((o) => o.value === this.value());\n let next = current < 0 ? 0 : current;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = enabled.length - 1;\n else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') next = (next - 1 + enabled.length) % enabled.length;\n else next = (next + 1) % enabled.length;\n const target = enabled[next];\n this.select(target);\n const index = this.visibleOptions().indexOf(target);\n queueMicrotask(() => this.tabs()[index]?.nativeElement.focus());\n }\n\n writeValue(value: DwTabValue | null): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: (value: DwTabValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, inject } from '@angular/core';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\n\nexport interface DwRailTab<V extends string = string> {\n value: V;\n label: string;\n /** `dwi-<name>` for an app icon, or a PrimeIcons class. */\n icon: string;\n /** Hover text; defaults to the label. */\n title?: string;\n hidden?: boolean;\n testId?: string;\n}\n\n/**\n * Vertical icon-over-label tab strip at the edge of a panel (agent editor\n * right rail, import references panel). `value` is the open tab, or null when\n * the panel is collapsed and no tab is active. A trailing control (collapse\n * toggle) goes in `[dwRailTabsEnd]`.\n *\n * ```html\n * <dw-rail-tabs [options]=\"tabs\" [value]=\"open ? tab : null\" (select)=\"openTab($event.value)\">\n * <button dwRailTabsEnd class=\"dw-rail-tabs__btn\" …>…</button>\n * </dw-rail-tabs>\n * ```\n */\n@Component({\n selector: 'dw-rail-tabs',\n standalone: true,\n imports: [DwIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-rail-tabs' },\n template: `\n <nav class=\"dw-rail-tabs__nav\" [attr.aria-label]=\"ariaLabel()\">\n @for (tab of visible(); track tab.value) {\n <button\n type=\"button\"\n class=\"dw-rail-tabs__btn\"\n [class.is-active]=\"tab.value === value()\"\n [attr.aria-pressed]=\"tab.value === value()\"\n [attr.title]=\"tab.title || tab.label\"\n [attr.data-testid]=\"tab.testId ?? null\"\n (click)=\"select.emit({ value: tab.value, event: $event })\"\n >\n @if (iconName(tab.icon); as name) {\n <dw-icon class=\"dw-rail-tabs__icon\" [name]=\"name\" size=\"20px\" />\n } @else {\n <i class=\"dw-rail-tabs__icon\" [class]=\"tab.icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"dw-rail-tabs__label\">{{ tab.label }}</span>\n </button>\n }\n <span class=\"dw-rail-tabs__spacer\"></span>\n <ng-content select=\"[dwRailTabsEnd]\" />\n </nav>\n `,\n})\nexport class DwRailTabsComponent<V extends string = string> {\n private readonly icons = inject(DwIconRegistry);\n\n readonly options = input<readonly DwRailTab<V>[]>([]);\n readonly value = input<V | null>(null);\n readonly ariaLabel = input<string>('Panel');\n\n readonly select = output<{ value: V; event: MouseEvent }>();\n\n readonly visible = computed(() => this.options().filter((t) => !t.hidden));\n\n /** dw-icon name for a `dwi-<name>` glyph or a registered icon, else null (a CSS class). */\n iconName(icon: string): string | null {\n return this.icons.resolve(icon);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { RouterLink, UrlTree } from '@angular/router';\nimport { isImageIcon } from '../internal/image-icon.util';\n\nexport interface DwBreadcrumb {\n label: string;\n icon?: string;\n /** A UrlTree carries its own query string (e.g. a previous URL parsed with `router.parseUrl`). */\n routerLink?: string | readonly unknown[] | UrlTree;\n queryParams?: Record<string, unknown>;\n href?: string;\n /** Click handler when neither routerLink nor href is set. */\n action?: () => void;\n}\n\n/**\n * The breadcrumb trail: earlier crumbs are links (router link, href, or a click handler), the\n * last is the current page. A crumb with no label yet (e.g. a name still loading) is left out,\n * so the trail never shows two separators in a row.\n *\n * ```html\n * <dw-breadcrumb [items]=\"[{ label: 'Agents', routerLink: '/agents' }, { label: agent.name }]\" />\n * ```\n */\n@Component({\n selector: 'dw-breadcrumb',\n standalone: true,\n imports: [RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-breadcrumb-host' },\n template: `\n @if (visibleItems().length) {\n <nav class=\"dw-breadcrumb\" [attr.aria-label]=\"ariaLabel()\">\n @for (crumb of visibleItems(); track $index; let last = $last) {\n @if (last) {\n <span class=\"dw-breadcrumb__current\" aria-current=\"page\">\n @if (crumb.icon && showIcons()) {\n @if (isImage(crumb.icon)) {\n <img class=\"dw-breadcrumb__img\" [src]=\"crumb.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"crumb.icon\" aria-hidden=\"true\"></i>\n }\n }\n {{ crumb.label }}\n </span>\n } @else {\n @if (crumb.routerLink) {\n <a class=\"dw-breadcrumb__link\" [routerLink]=\"crumb.routerLink\"\n [queryParams]=\"isUrlTree(crumb.routerLink) ? null : (crumb.queryParams ?? null)\">{{ crumb.label }}</a>\n } @else if (crumb.href) {\n <a class=\"dw-breadcrumb__link\" [href]=\"crumb.href\">{{ crumb.label }}</a>\n } @else if (crumb.action || clickable()) {\n <button type=\"button\" class=\"dw-breadcrumb__link dw-link\" (click)=\"onCrumbClick(crumb)\">{{ crumb.label }}</button>\n } @else {\n <span class=\"dw-breadcrumb__text\">{{ crumb.label }}</span>\n }\n <i class=\"pi pi-angle-right dw-breadcrumb__sep\" aria-hidden=\"true\"></i>\n }\n }\n </nav>\n }\n `,\n})\nexport class DwBreadcrumbComponent {\n readonly items = input<readonly DwBreadcrumb[]>([]);\n /** Render crumb icons (set false when callers pass icons meant for other surfaces). */\n readonly showIcons = input<boolean>(true);\n readonly ariaLabel = input<string>('Breadcrumb');\n /**\n * Render every earlier crumb as clickable, for hosts that handle `crumbClick` themselves. Off,\n * a crumb with no routerLink, href or action is plain text — not a link that goes nowhere.\n */\n readonly clickable = input<boolean>(false);\n\n /** A click on a crumb that has no routerLink / href (after its `action` ran). */\n readonly crumbClick = output<DwBreadcrumb>();\n\n readonly visibleItems = computed(() => this.items().filter((crumb) => !!crumb.label?.trim()));\n\n isUrlTree(link: unknown): boolean {\n return link instanceof UrlTree;\n }\n\n isImage(icon: string): boolean {\n return isImageIcon(icon);\n }\n\n onCrumbClick(crumb: DwBreadcrumb): void {\n crumb.action?.();\n this.crumbClick.emit(crumb);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { DwBreadcrumb, DwBreadcrumbComponent } from '../breadcrumb/dw-breadcrumb.component';\n\n\n/**\n * Page / panel header: breadcrumbs, back, icon, title (+ inline rename),\n * subtitle, count, deprecated badge, meta row and right-side actions.\n *\n * ```html\n * <dw-page-header title=\"My agents\" [count]=\"total\">\n * <dw-button dwPageHeaderActions label=\"Create\" icon=\"pi pi-plus\" (clicked)=\"create()\" />\n * </dw-page-header>\n *\n * <dw-page-header [breadcrumbs]=\"[{label:'LLM Configuration', action: back}, {label: cfg.name}]\"\n * icon=\"assets/images/svgIcon/llm.svg\" variant=\"panel\" [showClose]=\"true\" (close)=\"close()\" />\n *\n * <dw-page-header variant=\"list\" [flush]=\"true\" title=\"Tenant Analytics\" /> <!-- on the content edge -->\n *\n * <dw-page-header [title]=\"agent.name\" [editableTitle]=\"true\" (titleChange)=\"rename($event)\"\n * [showBack]=\"true\" (back)=\"goBack()\">\n * <dw-id-block dwPageHeaderMeta [value]=\"agent.id\" />\n * </dw-page-header>\n * ```\n */\n@Component({\n selector: 'dw-page-header',\n standalone: true,\n imports: [DwBreadcrumbComponent, SkeletonModule, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // A static title=\"…\" would also stay on the host as an HTML attribute (native browser tooltip).\n host: { '[class]': 'hostClasses()', '[attr.title]': 'null' },\n template: `\n @if (showBack()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" [attr.aria-label]=\"backLabel()\" [pTooltip]=\"backLabel()\"\n [showDelay]=\"300\" appendTo=\"body\" [attr.data-testid]=\"backTestId()\" (click)=\"back.emit()\">\n <i class=\"pi pi-arrow-left\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--framed dw-page-header__icon\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-page-header__titles\">\n <dw-breadcrumb [items]=\"breadcrumbs()\" [showIcons]=\"crumbIcons()\" (crumbClick)=\"breadcrumbClick.emit($event)\" />\n @if (loading()) {\n <p-skeleton width=\"220px\" height=\"20px\" />\n } @else if (title()) {\n <div class=\"dw-page-header__title-row\">\n @if (editing()) {\n <input\n #titleInput\n class=\"dw-input dw-page-header__title-input\"\n [value]=\"title()\"\n [attr.aria-label]=\"'Rename ' + title()\"\n (keydown.enter)=\"commit(titleInput.value)\"\n (keydown.escape)=\"cancelEdit()\"\n (blur)=\"commit(titleInput.value)\"\n />\n @if (editError()) {\n <small class=\"dw-field__error\" role=\"alert\">{{ editError() }}</small>\n }\n } @else {\n <h1 class=\"dw-page-header__title\" [class.dw-page-title]=\"variant() === 'page'\" [class.dw-title]=\"variant() !== 'page'\">\n {{ title() }}\n </h1>\n @if (editableTitle()) {\n <button type=\"button\" class=\"dw-icon-btn\" [attr.aria-label]=\"'Rename ' + title()\" (click)=\"startEdit()\">\n <i class=\"pi pi-pencil\" aria-hidden=\"true\"></i>\n </button>\n }\n }\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-count-pill\">{{ count() }}</span>\n }\n @if (deprecated()) {\n <span class=\"dw-badge dw-badge--muted dw-badge--label\" [pTooltip]=\"deprecatedTooltip()\" [tooltipDisabled]=\"!deprecatedTooltip()\" appendTo=\"body\">Deprecated</span>\n }\n <ng-content select=\"[dwPageHeaderTitleSuffix]\" />\n </div>\n }\n @if (error()) {\n <p class=\"dw-field__error\">{{ error() }}</p>\n } @else if (subtitle()) {\n <p class=\"dw-meta dw-page-header__subtitle\">{{ subtitle() }}</p>\n }\n <div class=\"dw-page-header__meta\"><ng-content select=\"[dwPageHeaderMeta]\" /></div>\n </div>\n <div class=\"dw-page-header__actions\">\n <ng-content select=\"[dwPageHeaderActions]\" />\n <ng-content />\n @if (showClose()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" aria-label=\"Close\" (click)=\"close.emit()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n `,\n})\nexport class DwPageHeaderComponent {\n readonly title = input<string>('');\n readonly subtitle = input<string>('');\n readonly count = input<number | string | null>(null);\n readonly breadcrumbs = input<readonly DwBreadcrumb[]>([]);\n /** Render breadcrumb icons (set false when callers pass icons meant for other surfaces). */\n readonly crumbIcons = input<boolean>(true);\n readonly icon = input<string>('');\n readonly iconTint = input<'neutral' | 'accent' | 'workflow' | 'reasoning'>('accent');\n readonly showBack = input<boolean>(false);\n readonly backLabel = input<string>('Back');\n /** `data-testid` for the back button. */\n readonly backTestId = input<string | null>(null);\n readonly showClose = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly error = input<string>('');\n readonly editableTitle = input<boolean>(false);\n readonly deprecated = input<boolean>(false);\n readonly deprecatedTooltip = input<string>('');\n /** `page` = 56px bordered bar with 20px title; `list` = borderless; `panel` = drawer/fullscreen panel. */\n readonly variant = input<'page' | 'list' | 'panel'>('page');\n /**\n * No padding of its own: the header sits on its container's content edge, in line with the\n * blocks below it. For a page whose container already supplies the gutter (e.g. a report body).\n */\n readonly flush = input<boolean>(false);\n\n readonly back = output<void>();\n readonly close = output<void>();\n readonly titleChange = output<string>();\n readonly breadcrumbClick = output<DwBreadcrumb>();\n\n readonly editing = signal(false);\n readonly editError = signal('');\n private readonly titleInput = viewChild<ElementRef<HTMLInputElement>>('titleInput');\n\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n readonly hostClasses = computed(\n () => `dw-page-header dw-page-header--${this.variant()}${this.flush() ? ' dw-page-header--flush' : ''}`,\n );\n\n startEdit(): void {\n this.editError.set('');\n this.editing.set(true);\n queueMicrotask(() => {\n const el = this.titleInput()?.nativeElement;\n el?.focus();\n el?.select();\n });\n }\n\n cancelEdit(): void {\n this.editError.set('');\n this.editing.set(false);\n }\n\n commit(raw: string): void {\n if (!this.editing()) {\n return;\n }\n const value = raw.trim();\n if (!value) {\n this.editError.set('Name is required');\n return;\n }\n this.editing.set(false);\n this.editError.set('');\n if (value !== this.title()) {\n this.titleChange.emit(value);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * List-screen toolbar: search + inline filters on the left, actions on the\n * right, optional second row for facet filters / chips.\n *\n * ```html\n * <dw-action-bar>\n * <dw-search-input dwActionBarStart placeholder=\"Search agents…\" [(value)]=\"q\" />\n * <app-show-deprecated-toggle dwActionBarStart [(checked)]=\"showDeprecated\" />\n * <dw-button dwActionBarEnd label=\"Import\" icon=\"pi pi-upload\" variant=\"secondary\" appearance=\"outlined\" />\n * <dw-button dwActionBarEnd label=\"Create\" icon=\"pi pi-plus\" />\n * <div dwActionBarFilters>…facets / chips…</div>\n * </dw-action-bar>\n * ```\n * Put `<span dwActionBarEnd class=\"dw-action-bar__sep\"></span>` between action groups.\n */\n@Component({\n selector: 'dw-action-bar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()', role: 'toolbar', '[attr.aria-label]': 'ariaLabel()' },\n template: `\n <div class=\"dw-action-bar__row\">\n <div class=\"dw-action-bar__start\"><ng-content select=\"[dwActionBarStart]\" /></div>\n <div class=\"dw-action-bar__end\"><ng-content select=\"[dwActionBarEnd]\" /></div>\n </div>\n <div class=\"dw-action-bar__filters\"><ng-content select=\"[dwActionBarFilters]\" /></div>\n `,\n})\nexport class DwActionBarComponent {\n readonly dense = input<boolean>(false);\n readonly bordered = input<boolean>(false);\n readonly ariaLabel = input<string>('Toolbar');\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-action-bar'];\n if (this.dense()) cls.push('dw-action-bar--dense');\n if (this.bordered()) cls.push('dw-action-bar--bordered');\n return cls.join(' ');\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n TemplateRef,\n afterNextRender,\n computed,\n contentChild,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { RouterLink } from '@angular/router';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\nimport { DwIconButtonComponent } from '../icon-button/dw-icon-button.component';\n\nexport interface DwNavItem {\n id: string;\n label: string;\n /** Icon class or image path. */\n icon?: string;\n /** Image used while active (image icons only). */\n activeIcon?: string;\n count?: number | string | null;\n badge?: string;\n /** Validation marker: `true` shows an error icon, a number also shows the error count. */\n error?: boolean | number | null;\n /** Softer validation marker: an amber warning triangle (ignored when `error` is set). */\n warning?: boolean | null;\n /** Shows a small spinner at the trailing edge while the item's data loads. */\n loading?: boolean;\n /** Right-aligned status with a dot, e.g. a setting's On / Off. */\n trail?: { label: string; tone: 'success' | 'neutral' } | null;\n /** Secondary status line under the label, e.g. a wizard section's Enabled / Disabled state. */\n status?: { label: string; tone: 'success' | 'neutral' } | null;\n /**\n * Leading status dot before the icon/label, e.g. a conversation's state: `danger` needs\n * attention, `info` + `live` is running now, `neutral` + `hollow` has nothing to do.\n * `label` is read out to screen readers.\n */\n dot?: DwNavItemDot | null;\n /** Plain secondary line under the label (no status dot), e.g. \"Workflow · Disabled\". */\n meta?: string | null;\n /** Colours a class icon by entity type (scenario workflow / reasoning) or the accent. */\n iconTint?: 'accent' | 'workflow' | 'reasoning' | null;\n /** Whole item rendered muted (e.g. a disabled-but-selectable entry). */\n muted?: boolean;\n /** Hover text while expanded (minimized rails always show the label). */\n tooltip?: string;\n routerLink?: string | readonly unknown[];\n queryParams?: Record<string, unknown>;\n disabled?: boolean;\n hidden?: boolean;\n testId?: string;\n children?: DwNavItem[];\n /**\n * Parent item that only expands/collapses its children (no navigation). It needs no children\n * yet: a lazily loaded tree marks a node collapsible, loads its children on `itemToggle` (with\n * `loading` set meanwhile) and passes them in once they are there.\n */\n collapsible?: boolean;\n /** Initial collapsed state for collapsible parents. */\n collapsed?: boolean;\n /** Arbitrary payload for the consumer (e.g. the domain object behind the item). */\n data?: unknown;\n}\n\nexport interface DwNavItemDot {\n tone: 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n /** `solid` (default), `hollow` ring, or `live` (solid with a pulsing ring). */\n variant?: 'solid' | 'hollow' | 'live';\n label?: string;\n}\n\n/**\n * A top-level item moved within its group (`reorderable`): positions among the group's visible\n * items, and those items in their new order. The list never reorders itself — the consumer applies\n * the order to `groups`.\n */\nexport interface DwNavReorder {\n group: DwNavGroup;\n groupIndex: number;\n item: DwNavItem;\n previousIndex: number;\n currentIndex: number;\n items: DwNavItem[];\n}\n\nexport interface DwNavGroup {\n id?: string;\n label?: string;\n icon?: string;\n collapsible?: boolean;\n collapsed?: boolean;\n items: DwNavItem[];\n}\n\n/**\n * Extra content under an item's label, per item — e.g. a dependency tree's tag chips:\n * `<ng-template dwNavItemExtra let-item>…{{ item.data }}…</ng-template>`. Return nothing for an\n * item that has none.\n */\n@Directive({ selector: 'ng-template[dwNavItemExtra]', standalone: true })\nexport class DwNavItemExtraDirective {\n readonly template = inject<TemplateRef<{ $implicit: DwNavItem }>>(TemplateRef);\n}\n\n/**\n * Actions at the end of each item's row — e.g. a reference tree's edit / uses / used-by buttons:\n * `<ng-template dwNavItemActions let-item>…</ng-template>`. They sit beside the item's button,\n * never inside it (no nested buttons), and a collapsible item's accordion chevron moves after\n * them, to the very end of the row. Return nothing for an item that has none.\n */\n@Directive({ selector: 'ng-template[dwNavItemActions]', standalone: true })\nexport class DwNavItemActionsDirective {\n readonly template = inject<TemplateRef<{ $implicit: DwNavItem }>>(TemplateRef);\n}\n\n/**\n * Sidebar navigation list (agents/tools rail, configuration menu, reports).\n *\n * ```html\n * <dw-nav-list [groups]=\"groups\" [activeId]=\"active\" (itemSelect)=\"go($event)\" ariaLabel=\"Agents\">\n * <div dwNavListFooter>…tags tree…</div>\n * <dw-box dwNavListBottom>…created / modified…</dw-box> <!-- pinned to the bottom, beside minimize -->\n * </dw-nav-list>\n * ```\n * Items with `routerLink` render as links (Cmd/Ctrl-click opens a new tab);\n * otherwise `itemSelect` fires. `[(minimized)]` collapses to an icon rail.\n * `[reorderable]=\"true\"` lets the user drag a group's top-level items (or move the focused one\n * with Alt+↑ / Alt+↓); each move emits `reorder` and the consumer re-orders `groups`.\n */\n@Component({\n selector: 'dw-nav-list',\n standalone: true,\n imports: [CdkDrag, CdkDropList, NgTemplateOutlet, RouterLink, TooltipModule, DwIconComponent, DwIconButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'minimized() ? null : width()',\n },\n template: `\n <!-- The rail's content. With a minimize button it scrolls on its own, above the button's\n footer row; otherwise this wrapper is display: contents and changes nothing. -->\n <div class=\"dw-nav-list__scroll\">\n <ng-content select=\"[dwNavListHeader]\" />\n <nav class=\"dw-nav-list__nav\" [attr.aria-label]=\"ariaLabel()\">\n @for (group of groups(); track group.id ?? group.label ?? $index; let gi = $index) {\n @if (gi > 0 && dividers()) {\n <hr class=\"dw-divider\" />\n }\n @if (group.label && !minimized()) {\n @if (group.collapsible) {\n <button\n type=\"button\"\n class=\"dw-rail__group dw-nav-list__group-toggle\"\n [attr.aria-expanded]=\"!isCollapsed(group, gi)\"\n [attr.data-testid]=\"group.id ? 'nav-group-' + group.id : null\"\n (click)=\"toggleGroup(group, gi)\"\n >\n @if (group.icon) {\n @if (isImage(group.icon)) {\n <img class=\"dw-nav-item__img\" [src]=\"group.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"group.icon\" aria-hidden=\"true\"></i>\n }\n }\n <span>{{ group.label }}</span>\n <i class=\"pi pi-chevron-down dw-nav-list__chevron\" [class.is-collapsed]=\"isCollapsed(group, gi)\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <div class=\"dw-rail__group\">{{ group.label }}</div>\n }\n }\n @if (!isCollapsed(group, gi)) {\n @if (reorderable() && !minimized()) {\n <!-- Reorderable: the group's top-level items drag vertically within it -->\n <ul class=\"dw-nav-list__items dw-nav-list__items--reorderable\" role=\"list\"\n cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"onDrop(group, gi, $event)\">\n @for (item of visible(group.items); track item.id) {\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- keyboard reorder for the focusable item inside -->\n <li cdkDrag cdkDragLockAxis=\"y\" cdkDragPreviewClass=\"dw-nav-list__drag-preview\"\n [cdkDragDisabled]=\"!!item.disabled\" [attr.data-nav-id]=\"item.id\"\n (keydown)=\"onReorderKey(group, gi, item, $event)\">\n <ng-container *ngTemplateOutlet=\"itemInner; context: { $implicit: item, depth: 0, lead: groupLead(group) }\" />\n </li>\n }\n </ul>\n } @else {\n <ul class=\"dw-nav-list__items\" role=\"list\">\n @for (item of visible(group.items); track item.id) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: item, depth: 0, lead: groupLead(group) }\" />\n }\n </ul>\n }\n }\n }\n </nav>\n <ng-content select=\"[dwNavListFooter]\" />\n </div>\n <!-- Always at the bottom, the full width of the rail: dwNavListBottom content (e.g. a\n created / modified card), then the minimize button at the row's end. -->\n <div class=\"dw-nav-list__bottom-row\" [class.dw-nav-list__minimize-row]=\"minimizable()\">\n <ng-content select=\"[dwNavListBottom]\" />\n @if (minimizable()) {\n <button\n type=\"button\"\n class=\"dw-icon-btn dw-nav-list__minimize\"\n [attr.aria-label]=\"minimized() ? 'Expand sidebar' : 'Collapse sidebar'\"\n [attr.aria-expanded]=\"!minimized()\"\n (click)=\"minimized.set(!minimized())\"\n >\n <!-- The panel icons the right rail uses, mirrored for a left sidebar -->\n <dw-icon [name]=\"minimized() ? 'sidebarExpand' : 'sidebarCollapse'\" size=\"16px\" />\n </button>\n }\n </div>\n\n <ng-template #itemTpl let-item let-depth=\"depth\" let-lead=\"lead\">\n <li>\n <ng-container *ngTemplateOutlet=\"itemInner; context: { $implicit: item, depth: depth, lead: lead }\" />\n </li>\n </ng-template>\n\n <!-- An item's row and its children: the <li>'s content (a reorderable list owns the <li>) -->\n <ng-template #itemInner let-item let-depth=\"depth\" let-lead=\"lead\">\n @if (itemActions(); as actions) {\n <!-- Row with actions: the item's button, its actions beside it, then the accordion -->\n <div class=\"dw-nav-list__row\" [class.is-active]=\"isActive(item)\">\n <ng-container *ngTemplateOutlet=\"itemRow; context: { $implicit: item, depth: depth, lead: lead, chevron: false }\" />\n <span class=\"dw-nav-list__actions\">\n <ng-container *ngTemplateOutlet=\"actions.template; context: { $implicit: item }\" />\n </span>\n @if (item.collapsible) {\n <dw-icon-button class=\"dw-nav-list__toggle\" size=\"xs\" icon=\"pi pi-chevron-down\"\n [class.is-collapsed]=\"isItemCollapsed(item)\" [expanded]=\"!isItemCollapsed(item)\"\n [ariaLabel]=\"(isItemCollapsed(item) ? 'Expand ' : 'Collapse ') + item.label\"\n (clicked)=\"toggleItem(item)\" />\n } @else {\n <!-- The accordion's room, so every row's actions line up in one column -->\n <span class=\"dw-nav-list__toggle dw-nav-list__toggle--spacer\" aria-hidden=\"true\"></span>\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"itemRow; context: { $implicit: item, depth: depth, lead: lead, chevron: true }\" />\n }\n @if (item.children?.length && !minimized() && !(item.collapsible && isItemCollapsed(item))) {\n <ul class=\"dw-nav-list__items\" role=\"list\">\n @for (child of visible(item.children); track child.id) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: child, depth: depth + 1, lead: lead }\" />\n }\n </ul>\n }\n </ng-template>\n\n <ng-template #itemRow let-item let-depth=\"depth\" let-lead=\"lead\" let-chevron=\"chevron\">\n @if (item.collapsible) {\n <button\n type=\"button\"\n class=\"dw-nav-item dw-nav-item--parent\"\n [class.is-muted]=\"!!item.muted\"\n [style.padding-left.px]=\"indent(depth, lead)\"\n [attr.aria-expanded]=\"!isItemCollapsed(item)\"\n [attr.data-testid]=\"item.testId\"\n [pTooltip]=\"item.tooltip\"\n [tooltipDisabled]=\"!item.tooltip\"\n [tooltipPosition]=\"tooltipPosition()\"\n appendTo=\"body\"\n (click)=\"toggleItem(item)\"\n >\n <ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\" />\n @if (chevron) {\n <i class=\"pi pi-chevron-down dw-nav-list__chevron\" [class.is-collapsed]=\"isItemCollapsed(item)\" aria-hidden=\"true\"></i>\n }\n </button>\n } @else if (item.routerLink && !item.disabled) {\n <a\n class=\"dw-nav-item\"\n [class.is-active]=\"isActive(item)\"\n [style.padding-left.px]=\"indent(depth, lead)\"\n [routerLink]=\"item.routerLink\"\n [queryParams]=\"item.queryParams ?? null\"\n [attr.aria-current]=\"isActive(item) ? 'page' : null\"\n [attr.data-testid]=\"item.testId\"\n [pTooltip]=\"minimized() ? item.label : item.tooltip\"\n [tooltipDisabled]=\"!minimized() && !item.tooltip\"\n [tooltipPosition]=\"tooltipPosition()\"\n appendTo=\"body\"\n (click)=\"onItemClick(item, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"dw-nav-item\"\n [class.is-active]=\"isActive(item)\"\n [class.is-muted]=\"!!item.muted\"\n [style.padding-left.px]=\"indent(depth, lead)\"\n [disabled]=\"item.disabled\"\n [attr.aria-current]=\"isActive(item) ? 'page' : null\"\n [attr.data-testid]=\"item.testId\"\n [pTooltip]=\"minimized() ? item.label : item.tooltip\"\n [tooltipDisabled]=\"!minimized() && !item.tooltip\"\n [tooltipPosition]=\"tooltipPosition()\"\n appendTo=\"body\"\n (click)=\"onItemClick(item, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\" />\n </button>\n }\n </ng-template>\n\n <!-- The label, with its error / warning marker right after it (not off by the count) -->\n <ng-template #labelLine let-item>\n <span class=\"dw-nav-item__head\">\n <span class=\"dw-nav-item__label\">{{ item.label }}</span>\n @if (!item.loading) {\n @if (item.error) {\n <span class=\"dw-nav-item__error\" role=\"img\"\n [attr.aria-label]=\"isCount(item.error) ? item.error + ' errors' : 'Has errors'\">\n <i class=\"pi pi-exclamation-circle\" aria-hidden=\"true\"></i>\n @if (isCount(item.error)) {\n <span aria-hidden=\"true\">({{ item.error }})</span>\n }\n </span>\n } @else if (item.warning) {\n <span class=\"dw-nav-item__error dw-nav-item__error--warning\" role=\"img\" aria-label=\"Has warnings\">\n <i class=\"pi pi-exclamation-triangle\" aria-hidden=\"true\"></i>\n </span>\n }\n }\n </span>\n </ng-template>\n\n <ng-template #itemBody let-item>\n @if (item.dot; as dot) {\n <span [class]=\"dotClass(dot)\" [attr.role]=\"dot.label ? 'img' : null\"\n [attr.aria-label]=\"dot.label || null\" [attr.aria-hidden]=\"dot.label ? null : 'true'\"\n [attr.title]=\"dot.label || null\"></span>\n }\n @if (item.icon) {\n @if (isImage(item.icon)) {\n <img class=\"dw-nav-item__img\" [src]=\"isActive(item) && item.activeIcon ? item.activeIcon : item.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else if (svgIcon(item.icon); as glyph) {\n <dw-icon class=\"dw-nav-item__icon\" [name]=\"glyph\" />\n } @else {\n <i [class]=\"item.icon\" class=\"dw-nav-item__icon\"\n [class.dw-nav-item__icon--accent]=\"item.iconTint === 'accent'\"\n [class.dw-nav-item__icon--workflow]=\"item.iconTint === 'workflow'\"\n [class.dw-nav-item__icon--reasoning]=\"item.iconTint === 'reasoning'\" aria-hidden=\"true\"></i>\n }\n }\n @if (!minimized()) {\n @if (item.status || item.meta || itemExtra()) {\n <span class=\"dw-nav-item__text\">\n <ng-container *ngTemplateOutlet=\"labelLine; context: { $implicit: item }\" />\n @if (item.status) {\n <span class=\"dw-nav-item__status\" [class]=\"'dw-nav-item__status--' + item.status.tone\">\n <span class=\"dw-nav-item__status-dot\" aria-hidden=\"true\"></span>{{ item.status.label }}\n </span>\n }\n @if (item.meta) {\n <span class=\"dw-nav-item__meta\">{{ item.meta }}</span>\n }\n @if (itemExtra(); as extra) {\n <ng-container *ngTemplateOutlet=\"extra.template; context: { $implicit: item }\" />\n }\n </span>\n } @else {\n <ng-container *ngTemplateOutlet=\"labelLine; context: { $implicit: item }\" />\n }\n @if (item.loading) {\n <i class=\"pi pi-spin pi-spinner dw-nav-item__loading\" aria-label=\"Loading\"></i>\n }\n @if (item.badge) {\n <span class=\"dw-badge dw-badge--accent dw-badge--label\">{{ item.badge }}</span>\n }\n @if (item.count !== null && item.count !== undefined && !item.loading) {\n <span class=\"dw-nav-item__count\">{{ item.count }}</span>\n }\n @if (item.trail; as trail) {\n <span class=\"dw-nav-item__trail\" [class]=\"'dw-nav-item__trail dw-nav-item__trail--' + trail.tone\">\n <span class=\"dw-nav-item__status-dot\" aria-hidden=\"true\"></span>{{ trail.label }}\n </span>\n }\n }\n </ng-template>\n `,\n})\nexport class DwNavListComponent {\n private readonly icons = inject(DwIconRegistry);\n\n /** Optional per-item content under the label (see DwNavItemExtraDirective). */\n readonly itemExtra = contentChild(DwNavItemExtraDirective);\n /** Optional per-item actions at the end of the row (see DwNavItemActionsDirective). */\n readonly itemActions = contentChild(DwNavItemActionsDirective);\n\n readonly groups = input<readonly DwNavGroup[]>([]);\n readonly activeId = input<string | null>(null);\n /** Several active items at once — e.g. every place a shared tool appears in a tree. */\n readonly activeIds = input<readonly string[] | null>(null);\n readonly width = input<string>('256px');\n readonly dividers = input<boolean>(false);\n readonly minimizable = input<boolean>(false);\n readonly minimized = model<boolean>(false);\n readonly ariaLabel = input<string>('Section navigation');\n /** Nested items hang off guide lines instead of plain indentation (reference trees). */\n readonly treeLines = input<boolean>(false);\n /**\n * The accent left border on the selected item. Only the agents list page's sidebar uses it;\n * everywhere else a selection is the plain selected fill.\n */\n readonly marker = input<boolean>(false);\n /** Where item tooltips open: beside a sidebar (right, the default) or above, e.g. in a wide panel. */\n readonly tooltipPosition = input<'right' | 'top' | 'bottom' | 'left'>('right');\n /**\n * Off by default. On, each group's top-level items can be dragged into a new order within the\n * group, or the focused one moved with Alt+↑ / Alt+↓ (not while minimized); `reorder` reports it.\n */\n readonly reorderable = input<boolean>(false);\n\n readonly itemSelect = output<DwNavItem>();\n /** Same as itemSelect, with the click — for Cmd/Ctrl-click \"open in new tab\" handling. */\n readonly itemActivate = output<{ item: DwNavItem; event: MouseEvent }>();\n readonly groupToggle = output<{ group: DwNavGroup; collapsed: boolean }>();\n readonly itemToggle = output<{ item: DwNavItem; collapsed: boolean }>();\n readonly reorder = output<DwNavReorder>();\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n private readonly itemOverrides = signal<Record<string, boolean>>({});\n\n /** Collapse state kept internally (never mutates the input objects). */\n private readonly collapsedOverrides = signal<Record<string, boolean>>({});\n\n readonly hostClasses = computed(\n () =>\n `dw-rail dw-nav-list${this.minimized() ? ' is-minimized' : ''}${this.treeLines() ? ' dw-nav-list--tree' : ''}${this.marker() ? ' dw-nav-list--marker' : ''}${this.minimizable() ? ' dw-nav-list--minimizable' : ''}`,\n );\n\n /** Classes for an item's leading status dot. */\n dotClass(dot: DwNavItemDot): string {\n const variant = dot.variant && dot.variant !== 'solid' ? ` dw-status-dot--${dot.variant}` : '';\n return `dw-status-dot dw-status-dot--${dot.tone}${variant} dw-nav-item__dot`;\n }\n\n /** dw-icon name for a `dwi-<name>` glyph or a registered icon, else null (a CSS class). */\n svgIcon(icon: string | undefined): string | null {\n return this.icons.resolve(icon);\n }\n\n isActive(item: DwNavItem): boolean {\n return item.id === this.activeId() || !!this.activeIds()?.includes(item.id);\n }\n\n /**\n * Indentation per depth; tree mode indents through the nested lists' guide lines instead.\n * `lead` lines a group's items up with its label when the group header has an icon.\n */\n indent(depth: number, lead = 0): number {\n return this.treeLines() ? 10 + lead : 10 + lead + depth * 16;\n }\n\n /** A collapsible group with an icon: its items start where the label does (16px icon + 8px gap). */\n groupLead(group: DwNavGroup): number {\n return group.collapsible && group.icon ? 24 : 0;\n }\n\n onItemClick(item: DwNavItem, event: MouseEvent): void {\n this.itemActivate.emit({ item, event });\n this.itemSelect.emit(item);\n }\n\n isImage(icon: string): boolean {\n return isImageIcon(icon);\n }\n\n isCount(error: boolean | number | null | undefined): error is number {\n return typeof error === 'number';\n }\n\n visible(items: readonly DwNavItem[] | undefined): DwNavItem[] {\n return (items ?? []).filter((i) => !i.hidden);\n }\n\n private groupKey(group: DwNavGroup, index: number): string {\n return group.id ?? group.label ?? String(index);\n }\n\n isCollapsed(group: DwNavGroup, index: number): boolean {\n if (!group.collapsible) {\n return false;\n }\n const override = this.collapsedOverrides()[this.groupKey(group, index)];\n return override ?? !!group.collapsed;\n }\n\n isItemCollapsed(item: DwNavItem): boolean {\n return this.itemOverrides()[item.id] ?? !!item.collapsed;\n }\n\n toggleItem(item: DwNavItem): void {\n const collapsed = !this.isItemCollapsed(item);\n this.itemOverrides.update((map) => ({ ...map, [item.id]: collapsed }));\n this.itemToggle.emit({ item, collapsed });\n }\n\n onDrop(group: DwNavGroup, groupIndex: number, event: CdkDragDrop<unknown>): void {\n this.emitReorder(group, groupIndex, event.previousIndex, event.currentIndex);\n }\n\n /** Alt+↑ / Alt+↓ on a reorderable item moves it one place; focus stays on it. */\n onReorderKey(group: DwNavGroup, groupIndex: number, item: DwNavItem, event: KeyboardEvent): void {\n if (!event.altKey || (event.key !== 'ArrowUp' && event.key !== 'ArrowDown')) return;\n event.preventDefault();\n const from = this.visible(group.items).findIndex((i) => i.id === item.id);\n if (!this.emitReorder(group, groupIndex, from, from + (event.key === 'ArrowUp' ? -1 : 1))) return;\n afterNextRender(\n () => {\n const row = this.host.nativeElement.querySelector(`li[data-nav-id=\"${CSS.escape(item.id)}\"] .dw-nav-item`);\n (row as HTMLElement | null)?.focus();\n },\n { injector: this.injector },\n );\n }\n\n /** Emits the move unless it goes nowhere or out of the group; true when emitted. */\n private emitReorder(group: DwNavGroup, groupIndex: number, from: number, to: number): boolean {\n const items = this.visible(group.items);\n if (from === to || from < 0 || to < 0 || from >= items.length || to >= items.length) return false;\n const next = [...items];\n const [item] = next.splice(from, 1);\n next.splice(to, 0, item);\n this.reorder.emit({ group, groupIndex, item, previousIndex: from, currentIndex: to, items: next });\n return true;\n }\n\n toggleGroup(group: DwNavGroup, index: number): void {\n const collapsed = !this.isCollapsed(group, index);\n this.collapsedOverrides.update((map) => ({ ...map, [this.groupKey(group, index)]: collapsed }));\n this.groupToggle.emit({ group, collapsed });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n computed,\n contentChild,\n input,\n model,\n output,\n} from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { isImageIcon } from '../internal/image-icon.util';\n\n/** Marks projected content as the dialog header (replaces the default title block). */\n@Directive({ selector: '[dwDialogHeader]', standalone: true })\nexport class DwDialogHeaderDirective {}\n\n/** Inline after the title on its row — a version chip, a status badge. */\n@Directive({ selector: '[dwDialogTitleSuffix]', standalone: true })\nexport class DwDialogTitleSuffixDirective {}\n\n/** Marks projected content as the dialog footer (right-aligned action row, 8px between items). */\n@Directive({ selector: '[dwDialogFooter]', standalone: true, host: { class: 'dw-footer-actions' } })\nexport class DwDialogFooterDirective {}\n\n/** `full` covers the viewport (wizards); pair it with `[showHeader]=\"false\"` and a `.dw-wizard` body. */\nexport type DwDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nlet nextDialogId = 0;\n\n/**\n * Modal dialog on top of p-dialog with the design-system sizes and header.\n *\n * ```html\n * <dw-dialog [(visible)]=\"open\" header=\"Configure parameters\" subtitle=\"Applies to new runs\" size=\"lg\" (hide)=\"reset()\">\n * …body…\n * <div dwDialogFooter>\n * <dw-button label=\"Cancel\" variant=\"secondary\" appearance=\"outlined\" (clicked)=\"open = false\" />\n * <dw-button label=\"Save\" [disabled]=\"form.invalid\" (clicked)=\"save()\" />\n * </div>\n * </dw-dialog>\n * ```\n * Import `DW_DIALOG` to get the component and its slot directives.\n */\n@Component({\n selector: 'dw-dialog',\n standalone: true,\n imports: [DialogModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"onVisibleChange($event)\"\n [modal]=\"modal()\"\n [closable]=\"closable()\"\n [closeOnEscape]=\"closeOnEscape()\"\n [focusOnShow]=\"focusOnShow()\"\n [dismissableMask]=\"dismissableMask()\"\n [draggable]=\"draggable()\"\n [resizable]=\"resizable()\"\n [maximizable]=\"maximizable()\"\n [showHeader]=\"showHeader()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [blockScroll]=\"true\"\n [role]=\"role()\"\n [style]=\"dialogStyle()\"\n [contentStyle]=\"contentStyle()\"\n [styleClass]=\"styleClasses()\"\n [closeAriaLabel]=\"'Close'\"\n (onShow)=\"show.emit()\"\n (onHide)=\"hide.emit()\"\n >\n <ng-template #header>\n <div class=\"dw-dialog__header\" [attr.id]=\"titleId\">\n @if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--framed dw-entity-icon--md\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-dialog__titles\">\n @if (headerText()) {\n <div class=\"dw-dialog__title-row\">\n <span class=\"p-dialog-title\">{{ headerText() }}</span>\n <ng-content select=\"[dwDialogTitleSuffix]\" />\n </div>\n }\n @if (subtitle()) {\n <span class=\"dw-dialog__subtitle\">{{ subtitle() }}</span>\n }\n <ng-content select=\"[dwDialogHeader]\" />\n </div>\n </div>\n </ng-template>\n\n <div class=\"dw-dialog__body\" [attr.data-testid]=\"testId()\">\n <ng-content />\n </div>\n\n @if (footerSlot()) {\n <ng-template #footer>\n <div class=\"dw-dialog__footer\">\n <ng-content select=\"[dwDialogFooter]\" />\n </div>\n </ng-template>\n }\n </p-dialog>\n `,\n})\nexport class DwDialogComponent {\n readonly visible = model<boolean>(false);\n readonly headerText = input<string>('', { alias: 'header' });\n readonly subtitle = input<string>('');\n readonly icon = input<string>('');\n readonly iconTint = input<'neutral' | 'accent' | 'warning' | 'danger'>('accent');\n readonly size = input<DwDialogSize>('md');\n /** Free-form width overrides the size scale (e.g. '70vw'). */\n readonly width = input<string | null>(null);\n readonly maxWidth = input<string>('95vw');\n readonly maxHeight = input<string | null>(null);\n readonly modal = input<boolean>(true);\n readonly closable = input<boolean>(true);\n readonly closeOnEscape = input<boolean>(true);\n /** Move focus into the dialog when it opens. Turn off for form wizards so the first\n * control is not focused and then blurred (which marks it touched and shows its error). */\n readonly focusOnShow = input<boolean>(true);\n readonly dismissableMask = input<boolean>(false);\n readonly draggable = input<boolean>(false);\n readonly resizable = input<boolean>(false);\n readonly maximizable = input<boolean>(false);\n readonly showHeader = input<boolean>(true);\n readonly appendTo = input<string | null>('body');\n readonly baseZIndex = input<number>(0);\n readonly role = input<'dialog' | 'alertdialog'>('dialog');\n readonly noPadding = input<boolean>(false);\n readonly styleClass = input<string>('');\n readonly testId = input<string | null>(null);\n\n readonly show = output<void>();\n readonly hide = output<void>();\n\n readonly footerSlot = contentChild(DwDialogFooterDirective);\n\n readonly titleId = `dw-dialog-title-${++nextDialogId}`;\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n\n readonly dialogStyle = computed(() => {\n const style: Record<string, string> = { maxWidth: this.size() === 'full' ? '100vw' : this.maxWidth() };\n if (this.width()) style['width'] = this.width() as string;\n return style;\n });\n\n readonly contentStyle = computed(() =>\n this.maxHeight() ? { maxHeight: this.maxHeight() as string, overflowY: 'auto' } : null,\n );\n\n readonly styleClasses = computed(() => {\n const cls = ['dw-dialog'];\n if (!this.width()) cls.push(`dw-dialog--${this.size()}`);\n if (this.noPadding()) cls.push('dw-dialog--flush');\n if (this.styleClass()) cls.push(this.styleClass());\n return cls.join(' ');\n });\n\n onVisibleChange(value: boolean): void {\n this.visible.set(value);\n }\n}\n\nexport const DW_DIALOG = [DwDialogComponent, DwDialogHeaderDirective, DwDialogTitleSuffixDirective, DwDialogFooterDirective] as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n} from '@angular/core';\nimport { DwDialogComponent, DwDialogFooterDirective } from '../dialog/dw-dialog.component';\nimport { DwButtonComponent } from '../button/dw-button.component';\nimport { DwSpinnerComponent } from '../loading/dw-spinner.component';\n\nexport type DwConfirmSeverity = 'danger' | 'warning' | 'primary';\n\nexport interface DwConfirmWarning {\n title?: string;\n text?: string;\n}\n\nexport interface DwConfirmSummaryRow {\n label: string;\n value: string | number | null | undefined;\n}\n\nconst SEVERITY_ICONS: Record<DwConfirmSeverity, string> = {\n danger: 'pi pi-trash',\n warning: 'pi pi-exclamation-triangle',\n primary: 'pi pi-question-circle',\n};\n\n/**\n * Confirmation dialog for destructive / irreversible actions. Replaces the\n * copied `.delete-modal-*` markup.\n *\n * ```html\n * <dw-confirm-dialog [(visible)]=\"confirmOpen\" header=\"Delete workspace\"\n * [message]=\"'Delete “' + ws.name + '”? This cannot be undone.'\"\n * acceptLabel=\"Delete\" loadingLabel=\"Deleting…\" [loading]=\"deleting\"\n * [warning]=\"{ title: 'In use', text: '3 collections use this workspace' }\"\n * (accept)=\"delete()\" />\n * ```\n * Project extra body content (radio options, dependency lists) as children.\n * For imperative use see DwConfirmService.\n */\n@Component({\n selector: 'dw-confirm-dialog',\n standalone: true,\n imports: [DwDialogComponent, DwDialogFooterDirective, DwButtonComponent, DwSpinnerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dw-dialog\n [(visible)]=\"visible\"\n [header]=\"header()\"\n [icon]=\"resolvedIcon()\"\n [iconTint]=\"iconTint()\"\n [size]=\"size()\"\n role=\"alertdialog\"\n [closable]=\"!loading() && closable()\"\n [closeOnEscape]=\"!loading()\"\n [dismissableMask]=\"!loading() && dismissableMask()\"\n styleClass=\"dw-confirm\"\n [testId]=\"testId()\"\n (hide)=\"onHide()\"\n >\n @if (message()) {\n <p class=\"dw-confirm__message\">{{ message() }}</p>\n }\n <ng-content />\n @if (checking()) {\n <dw-spinner size=\"sm\" [label]=\"checkingLabel()\" />\n }\n @if (summary().length) {\n <dl class=\"dw-kv dw-confirm__summary\">\n @for (row of summary(); track row.label) {\n <dt class=\"dw-kv__key\">{{ row.label }}</dt>\n <dd class=\"dw-kv__value\">{{ row.value ?? '—' }}</dd>\n }\n </dl>\n }\n @if (warning(); as w) {\n <div class=\"dw-confirm__warning\" role=\"note\">\n <i class=\"pi pi-exclamation-triangle\" aria-hidden=\"true\"></i>\n <div>\n @if (w.title) {\n <p class=\"dw-confirm__warning-title\">{{ w.title }}</p>\n }\n @if (w.text) {\n <p class=\"dw-confirm__warning-text\">{{ w.text }}</p>\n }\n </div>\n </div>\n }\n <div dwDialogFooter>\n <dw-button\n [label]=\"rejectLabel()\"\n variant=\"secondary\"\n appearance=\"outlined\"\n [disabled]=\"loading()\"\n [testId]=\"rejectTestId()\"\n (clicked)=\"reject()\"\n />\n @if (!hideAccept()) {\n <dw-button\n [label]=\"acceptLabel()\"\n [variant]=\"severity() === 'danger' ? 'danger' : 'primary'\"\n [icon]=\"acceptIcon()\"\n [loading]=\"loading()\"\n [loadingLabel]=\"loadingLabel()\"\n [disabled]=\"acceptDisabled() || checking()\"\n [testId]=\"acceptTestId()\"\n (clicked)=\"accept.emit()\"\n />\n }\n </div>\n </dw-dialog>\n `,\n})\nexport class DwConfirmDialogComponent {\n readonly visible = model<boolean>(false);\n readonly header = input<string>('Are you sure?');\n readonly message = input<string>('');\n readonly icon = input<string | null>(null);\n readonly severity = input<DwConfirmSeverity>('danger');\n readonly acceptLabel = input<string>('Delete');\n readonly rejectLabel = input<string>('Cancel');\n readonly acceptIcon = input<string>('');\n readonly loading = input<boolean>(false);\n readonly loadingLabel = input<string>('');\n readonly acceptDisabled = input<boolean>(false);\n /** Blocked state (e.g. dependencies must be removed first): only the reject button shows. */\n readonly hideAccept = input<boolean>(false);\n /** Async pre-check in progress (e.g. \"Loading affected tasks…\"). */\n readonly checking = input<boolean>(false);\n readonly checkingLabel = input<string>('Checking…');\n readonly warning = input<DwConfirmWarning | null>(null);\n readonly summary = input<readonly DwConfirmSummaryRow[]>([]);\n readonly closable = input<boolean>(true);\n readonly dismissableMask = input<boolean>(true);\n readonly size = input<'sm' | 'md' | 'lg'>('sm');\n readonly testId = input<string | null>(null);\n readonly acceptTestId = input<string>('confirm-accept');\n readonly rejectTestId = input<string>('confirm-reject');\n\n readonly accept = output<void>();\n /** Fired for Cancel, X, Esc and mask clicks. */\n readonly rejected = output<void>();\n\n readonly iconTint = computed<'accent' | 'warning' | 'danger'>(() =>\n this.severity() === 'primary' ? 'accent' : this.severity() === 'warning' ? 'warning' : 'danger',\n );\n readonly resolvedIcon = computed(() => this.icon() ?? SEVERITY_ICONS[this.severity()]);\n\n private acceptedOrRejected = false;\n\n reject(): void {\n this.acceptedOrRejected = true;\n this.visible.set(false);\n this.rejected.emit();\n }\n\n onHide(): void {\n // X / Esc / mask close counts as reject.\n if (!this.acceptedOrRejected) {\n this.rejected.emit();\n }\n this.acceptedOrRejected = false;\n }\n\n /** Call when the parent closes the dialog after a successful accept. */\n markAccepted(): void {\n this.acceptedOrRejected = true;\n }\n}\n","import { ChangeDetectionStrategy, Component, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n DwConfirmDialogComponent,\n DwConfirmSeverity,\n DwConfirmSummaryRow,\n DwConfirmWarning,\n} from './dw-confirm-dialog.component';\n\nexport interface DwConfirmOptions {\n header?: string;\n message: string;\n severity?: DwConfirmSeverity;\n acceptLabel?: string;\n rejectLabel?: string;\n icon?: string;\n warning?: DwConfirmWarning | null;\n summary?: DwConfirmSummaryRow[];\n /**\n * Optional async action run on accept. While it runs the dialog shows a\n * loading state; it resolves `true` on success, stays open on error.\n */\n onAccept?: () => Promise<unknown> | unknown;\n loadingLabel?: string;\n}\n\ninterface ActiveRequest extends DwConfirmOptions {\n resolve: (accepted: boolean) => void;\n}\n\n/**\n * Imperative confirmation. Requires `<dw-confirm-host />` once in the app\n * shell (layout).\n *\n * ```ts\n * if (await this.confirm.confirm({ header: 'Clear history', message: 'Remove all messages?', acceptLabel: 'Clear' })) { … }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class DwConfirmService {\n readonly request = signal<ActiveRequest | null>(null);\n readonly busy = signal(false);\n\n confirm(options: DwConfirmOptions): Promise<boolean> {\n // A new request supersedes (rejects) a pending one.\n this.request()?.resolve(false);\n return new Promise<boolean>((resolve) => {\n this.busy.set(false);\n this.request.set({ ...options, resolve });\n });\n }\n\n async accept(): Promise<void> {\n const req = this.request();\n if (!req) {\n return;\n }\n if (req.onAccept) {\n this.busy.set(true);\n try {\n await req.onAccept();\n } catch {\n this.busy.set(false);\n return; // keep the dialog open; the action reports its own error\n }\n this.busy.set(false);\n }\n this.request.set(null);\n req.resolve(true);\n }\n\n reject(): void {\n const req = this.request();\n if (!req || this.busy()) {\n return;\n }\n this.request.set(null);\n req.resolve(false);\n }\n}\n\n/** Renders DwConfirmService requests. Place once in the layout. */\n@Component({\n selector: 'dw-confirm-host',\n standalone: true,\n imports: [DwConfirmDialogComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (request(); as r) {\n <dw-confirm-dialog\n [visible]=\"true\"\n [header]=\"r.header ?? 'Are you sure?'\"\n [message]=\"r.message\"\n [severity]=\"r.severity ?? 'danger'\"\n [acceptLabel]=\"r.acceptLabel ?? 'Confirm'\"\n [rejectLabel]=\"r.rejectLabel ?? 'Cancel'\"\n [icon]=\"r.icon ?? null\"\n [warning]=\"r.warning ?? null\"\n [summary]=\"r.summary ?? []\"\n [loading]=\"service.busy()\"\n [loadingLabel]=\"r.loadingLabel ?? ''\"\n (accept)=\"service.accept()\"\n (rejected)=\"service.reject()\"\n />\n }\n `,\n})\nexport class DwConfirmHostComponent {\n readonly service = inject(DwConfirmService);\n readonly request = computed(() => this.service.request());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n computed,\n contentChild,\n input,\n model,\n signal,\n output,\n viewChild,\n} from '@angular/core';\nimport { DrawerModule } from 'primeng/drawer';\nimport { Observable, firstValueFrom, isObservable } from 'rxjs';\nimport { DwButtonAppearance, DwButtonComponent, DwButtonVariant } from '../button/dw-button.component';\nimport { DwBreadcrumb, DwBreadcrumbComponent } from '../breadcrumb/dw-breadcrumb.component';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { DwResizerComponent, DwResizerDrag } from '../resizer/dw-resizer.component';\n\n/** Replaces the default drawer header entirely. */\n@Directive({ selector: '[dwDrawerHeader]', standalone: true })\nexport class DwDrawerHeaderDirective {}\n\n/** Content shown under the header, above the scrolling body (steppers, tabs). */\n@Directive({ selector: '[dwDrawerSubheader]', standalone: true })\nexport class DwDrawerSubheaderDirective {}\n\n/** Custom footer content (left side when `actions` are also given). */\n@Directive({ selector: '[dwDrawerFooter]', standalone: true, host: { class: 'dw-footer-actions' } })\nexport class DwDrawerFooterDirective {}\n\nexport interface DwDrawerAction {\n id: string;\n label: string;\n variant?: DwButtonVariant | 'primary-outline';\n /** Overrides the appearance derived from `variant` (e.g. 'text' for a quiet Cancel). */\n appearance?: DwButtonAppearance;\n icon?: string;\n disabled?: boolean;\n disabledReason?: string;\n loading?: boolean;\n loadingLabel?: string;\n testId?: string;\n}\n\nexport type DwDrawerSize = 'sm' | 'md' | 'lg' | 'full';\nexport type DwCanClose = () => boolean | Promise<boolean> | Observable<boolean>;\n\nlet nextDrawerId = 0;\n\n/**\n * Side / bottom drawer on top of p-drawer with the design-system shell:\n * header (icon, breadcrumb, title, subtitle, back, actions, close),\n * optional sub-header, scrolling body, footer with standard actions.\n *\n * ```html\n * <dw-drawer [(visible)]=\"open\" header=\"Add LLM configuration\" icon=\"pi pi-sparkles\" size=\"lg\"\n * [actions]=\"[{id:'cancel',label:'Cancel',variant:'secondary'},{id:'save',label:'Save',loading:saving,disabled:form.invalid}]\"\n * [canClose]=\"confirmDiscard\" (action)=\"onAction($event)\" (hide)=\"reset()\">\n * <dw-button dwDrawerHeaderActions icon=\"pi pi-download\" appearance=\"text\" ariaLabel=\"Export\" />\n * …form…\n * <span dwDrawerFooter class=\"dw-meta\">Last saved 2m ago</span>\n * </dw-drawer>\n * ```\n */\n@Component({\n selector: 'dw-drawer',\n standalone: true,\n imports: [DrawerModule, DwBreadcrumbComponent, DwButtonComponent, DwResizerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-drawer\n [visible]=\"visible()\"\n (visibleChange)=\"onDrawerVisibleChange($event)\"\n [position]=\"position()\"\n [modal]=\"modal()\"\n [dismissible]=\"dismissible() && !canClose()\"\n [closeOnEscape]=\"closeOnEscape() && !canClose()\"\n [showCloseIcon]=\"false\"\n [blockScroll]=\"blockScroll()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [style]=\"drawerStyle()\"\n [styleClass]=\"styleClasses()\"\n (onShow)=\"show.emit()\"\n (onHide)=\"hide.emit()\"\n >\n <ng-template #headless>\n <div\n #shell\n class=\"dw-drawer-shell\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"showHeader() || customHeader() ? titleId : null\"\n [attr.aria-label]=\"showHeader() || customHeader() ? null : header() || null\"\n [attr.data-testid]=\"testId()\"\n (keydown.escape)=\"onEscape($event)\"\n >\n @if (resizable() && position() !== 'bottom') {\n <dw-resizer\n [edge]=\"position() === 'left' ? 'end' : 'start'\"\n ariaLabel=\"Resize drawer\"\n [valueNow]=\"widthPercent()\"\n [valueMin]=\"minPercent()\"\n [valueMax]=\"maxWidthRatio * 100\"\n (dragStart)=\"resizing.set(true)\"\n (drag)=\"onResizeDrag($event)\"\n (dragEnd)=\"resizing.set(false)\"\n (nudge)=\"onResizeNudge($event)\"\n data-testid=\"drawer-resizer\"\n />\n }\n @if (customHeader()) {\n <ng-content select=\"[dwDrawerHeader]\" />\n } @else if (showHeader()) {\n <div class=\"dw-drawer-shell__header\">\n @if (showBack()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" aria-label=\"Back\" (click)=\"back.emit()\">\n <i class=\"pi pi-arrow-left\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (icon() && !iconFramed() && !iconIsImage()) {\n <i class=\"dw-drawer-shell__icon\" [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--framed dw-entity-icon--md dw-entity-icon--accent\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-drawer-shell__titles\">\n <dw-breadcrumb [items]=\"breadcrumbs()\" [showIcons]=\"false\" (crumbClick)=\"breadcrumbClick.emit($event)\" />\n @if (header()) {\n <h2 class=\"dw-title dw-drawer-shell__title\" [id]=\"titleId\">{{ header() }}</h2>\n }\n @if (subtitle()) {\n <p class=\"dw-meta dw-drawer-shell__subtitle\">{{ subtitle() }}</p>\n }\n </div>\n <div class=\"dw-drawer-shell__header-actions\">\n <ng-content select=\"[dwDrawerHeaderActions]\" />\n @if (showCloseIcon()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" aria-label=\"Close\" data-testid=\"drawer-close\" (click)=\"requestClose()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n }\n <ng-content select=\"[dwDrawerSubheader]\" />\n <div class=\"dw-drawer-shell__body\" [class.dw-drawer-shell__body--flush]=\"flushBody()\">\n <ng-content />\n </div>\n @if (actions().length || footerSlot()) {\n <div class=\"dw-drawer-shell__footer\">\n <div class=\"dw-drawer-shell__footer-start\"><ng-content select=\"[dwDrawerFooter]\" /></div>\n @for (a of actions(); track a.id) {\n <dw-button\n [label]=\"a.label\"\n [icon]=\"a.icon ?? ''\"\n [variant]=\"a.variant === 'primary-outline' ? 'primary' : (a.variant ?? 'primary')\"\n [appearance]=\"a.appearance ?? (a.variant === 'secondary' || a.variant === 'primary-outline' ? 'outlined' : 'solid')\"\n [disabled]=\"!!a.disabled\"\n [disabledReason]=\"a.disabledReason ?? ''\"\n [loading]=\"!!a.loading\"\n [loadingLabel]=\"a.loadingLabel ?? ''\"\n [testId]=\"a.testId ?? 'drawer-action-' + a.id\"\n (clicked)=\"action.emit(a.id)\"\n />\n }\n </div>\n }\n </div>\n </ng-template>\n </p-drawer>\n `,\n})\nexport class DwDrawerComponent {\n readonly visible = model<boolean>(false);\n readonly position = input<'right' | 'bottom' | 'left'>('right');\n readonly size = input<DwDrawerSize>('md');\n /** Free-form width (right/left) or height (bottom) — overrides `size`. */\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n readonly maxWidth = input<string>('100vw');\n readonly header = input<string>('');\n readonly subtitle = input<string>('');\n readonly icon = input<string>('');\n /** False shows a font icon bare (accent colour, no tile) beside the title. */\n readonly iconFramed = input<boolean>(true);\n readonly breadcrumbs = input<readonly DwBreadcrumb[]>([]);\n readonly showBack = input<boolean>(false);\n readonly showCloseIcon = input<boolean>(true);\n /** False when the body brings its own header and close control (e.g. the probe view). */\n readonly showHeader = input<boolean>(true);\n readonly modal = input<boolean>(true);\n /** Close on mask click. */\n readonly dismissible = input<boolean>(true);\n readonly closeOnEscape = input<boolean>(true);\n readonly blockScroll = input<boolean>(false);\n readonly appendTo = input<string | null>('body');\n readonly baseZIndex = input<number>(0);\n readonly actions = input<readonly DwDrawerAction[]>([]);\n /** Guard for every close path (X, Esc). Mask close is disabled while a guard is set. */\n readonly canClose = input<DwCanClose | null>(null);\n readonly flushBody = input<boolean>(false);\n readonly styleClass = input<string>('');\n readonly testId = input<string | null>(null);\n\n readonly show = output<void>();\n readonly hide = output<void>();\n readonly back = output<void>();\n readonly action = output<string>();\n readonly breadcrumbClick = output<DwBreadcrumb>();\n\n /**\n * Drag (or keyboard) resize from the inner edge — on for every side drawer. Opens at its\n * `size` / `width`; the user can then take it between `minWidth` (default 30% of the\n * window) and 90% of the window.\n */\n readonly resizable = input<boolean>(true);\n /** Narrowest width (px) a resize can reach; default 30% of the window. The widest is 90%. */\n readonly minWidth = input<number | null>(null);\n /** Width chosen by dragging; overrides `width` / `size` until the drawer is recreated. */\n readonly resizedWidth = signal<string | null>(null);\n readonly resizing = signal(false);\n private readonly shell = viewChild<ElementRef<HTMLElement>>('shell');\n\n readonly customHeader = contentChild(DwDrawerHeaderDirective);\n readonly footerSlot = contentChild(DwDrawerFooterDirective);\n\n readonly titleId = `dw-drawer-title-${++nextDrawerId}`;\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n\n readonly drawerStyle = computed(() => {\n const style: Record<string, string> = {};\n if (this.position() === 'bottom') {\n style['height'] = this.height() ?? 'calc(100vh - var(--dw-size-topbar))';\n } else {\n const width = this.resizedWidth() ?? this.width();\n if (width) style['width'] = width;\n style['maxWidth'] = this.maxWidth();\n }\n return style;\n });\n\n readonly styleClasses = computed(() => {\n const cls = ['dw-drawer'];\n if (this.position() !== 'bottom' && !this.width() && !this.resizedWidth()) cls.push(`dw-drawer--${this.size()}`);\n if (this.resizing()) cls.push('dw-drawer--resizing');\n if (this.styleClass()) cls.push(this.styleClass());\n return cls.join(' ');\n });\n\n onDrawerVisibleChange(value: boolean): void {\n this.visible.set(value);\n }\n\n /** Widest a resize can go, as a share of the window. */\n readonly maxWidthRatio = 0.9;\n /** Narrowest default, as a share of the window (when no `minWidth` is given). */\n readonly minWidthRatio = 0.3;\n /** Current width as % of the window, for the resizer's aria-valuenow. */\n readonly widthPercent = signal<number | null>(null);\n\n minPercent(): number {\n const min = this.minWidth();\n return min === null ? this.minWidthRatio * 100 : Math.round((min / window.innerWidth) * 100);\n }\n\n onResizeDrag(pointer: DwResizerDrag): void {\n // A right drawer grows as the pointer moves left; a left drawer as it moves right.\n this.applyWidth(this.position() === 'left' ? pointer.clientX : window.innerWidth - pointer.clientX);\n }\n\n onResizeNudge(delta: number): void {\n const current = this.shell()?.nativeElement.getBoundingClientRect().width ?? 0;\n // Keys move the handle: ← widens a right drawer, → widens a left one.\n this.applyWidth(this.position() === 'left' ? current + delta : current - delta);\n }\n\n private applyWidth(width: number): void {\n const min = this.minWidth() ?? window.innerWidth * this.minWidthRatio;\n const max = window.innerWidth * this.maxWidthRatio;\n const clamped = Math.round(Math.max(Math.min(min, max), Math.min(max, width)));\n this.resizedWidth.set(`${clamped}px`);\n this.widthPercent.set(Math.round((clamped / window.innerWidth) * 100));\n }\n\n onEscape(event: Event): void {\n if (!this.canClose() || !this.closeOnEscape()) {\n return;\n }\n event.stopPropagation();\n void this.requestClose();\n }\n\n /** Closes the drawer, honouring `canClose`. Resolves whether it closed. */\n async requestClose(): Promise<boolean> {\n const guard = this.canClose();\n if (guard) {\n const result = guard();\n const allowed = isObservable(result) ? await firstValueFrom(result) : await result;\n if (!allowed) {\n return false;\n }\n }\n this.visible.set(false);\n return true;\n }\n}\n\nexport const DW_DRAWER = [\n DwDrawerComponent,\n DwDrawerHeaderDirective,\n DwDrawerSubheaderDirective,\n DwDrawerFooterDirective,\n] as const;\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DwToast, DwToastService } from './dw-toast.service';\n\nexport type DwToastPosition = 'top-center' | 'top-right' | 'bottom-center' | 'bottom-right';\n\n/**\n * Renders the DwToastService stack. Place it once, in the app's root component; every screen pushes toasts through\n * DwToastService and they all show here, with one position and one look (dataworkz-ui's toasts as they look today).\n *\n * ```html\n * <router-outlet />\n * <dw-toast-host />\n * ```\n */\n@Component({\n selector: 'dw-toast-host',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-toast-host' },\n template: `\n <div class=\"dw-toasts\" [class]=\"'dw-toasts dw-toasts--' + position()\" role=\"region\" aria-label=\"Notifications\">\n @for (toast of visible(); track toast.id) {\n <div\n class=\"dw-toast\"\n [class]=\"'dw-toast dw-toast--' + toast.severity\"\n [attr.role]=\"toast.severity === 'error' ? 'alert' : 'status'\"\n [attr.data-testid]=\"'dw-toast-' + toast.severity\"\n >\n <div class=\"dw-toast__content\">\n <span class=\"dw-toast__message\">{{ toast.message }}</span>\n <button type=\"button\" class=\"dw-toast__close\" aria-label=\"Close notification\" (click)=\"dismiss(toast)\">\n ×\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class DwToastHostComponent {\n private readonly toasts = inject(DwToastService);\n\n /** Where the stack sits. Default: centred under the top edge, as in dataworkz-ui today. */\n readonly position = input<DwToastPosition>('top-center');\n /** Most toasts shown at once; the newest win, older ones wait until these go. */\n readonly max = input<number>(5);\n\n readonly visible = computed(() => {\n const all = this.toasts.toasts();\n const max = Math.max(0, Math.floor(this.max()));\n return all.slice(Math.max(0, all.length - max));\n });\n\n dismiss(toast: DwToast): void {\n this.toasts.dismiss(toast.id);\n }\n}\n","/**\n * How many rows a paginated table can show without leaving a gap or overflowing.\n *\n * The list screens each carried their own copy of this sum, built from hard-coded pixel\n * constants — and the copies had drifted (44/45/50 here, 42/38/50 there) while the tables they\n * described are the same PrimeNG table. A row is 42px and the header 38px, so the 44/45 pair\n * lost about a row and a half: My agents showed 13 rows with 55px of white space under the last\n * one, which is what a constant does when the CSS moves and it does not.\n *\n * So: measure. The header, the paginator and a row are all on screen by the time this runs, and\n * their real heights cost one `getBoundingClientRect` each. The constants stay on only as\n * fallbacks, for the pass that lands before the table has painted.\n */\n\nexport interface TableRowFit {\n /** Used only when the element is not on screen yet. */\n rowHeight?: number;\n headerHeight?: number;\n paginatorHeight?: number;\n /** Never return fewer than this, however short the viewport. */\n minimumRows?: number;\n}\n\nconst DEFAULTS: Required<TableRowFit> = {\n rowHeight: 44,\n headerHeight: 45,\n paginatorHeight: 50,\n minimumRows: 3,\n};\n\n/**\n * A measured row height is trusted only inside this range. Outside it the reading is not a row:\n * an empty-state cell spanning the table, or a row mid-transition with no height yet.\n */\nconst PLAUSIBLE_ROW_HEIGHT = { min: 24, max: 96 };\n\nconst heightOf = (card: HTMLElement, selector: string, fallback: number): number => {\n const el = card.querySelector(selector) as HTMLElement | null;\n const height = el?.getBoundingClientRect().height || 0;\n return height > 0 ? height : fallback;\n};\n\n/**\n * Returns the row count that fills `card` from its top to the bottom of the viewport.\n *\n * `card` is the element the table lives in — its top is where the table starts, and everything\n * below it to the window's bottom edge is the budget.\n */\nexport function fitTableRows(card: HTMLElement | null | undefined, config: TableRowFit = {}): number {\n const { rowHeight, headerHeight, paginatorHeight, minimumRows } = { ...DEFAULTS, ...config };\n if (!card) return minimumRows;\n\n const header = heightOf(card, '.p-datatable-thead', headerHeight);\n const paginator = heightOf(card, '.p-paginator', paginatorHeight);\n\n // The tallest row on the page, not just the first: rows can differ (a pinned or compact first\n // row, a row with a two-line cell), and sizing the page by a short one lets the rest overflow\n // into a scrollbar beside the paginator.\n const rows = Array.from(card.querySelectorAll('.p-datatable-tbody > tr')) as HTMLElement[];\n const measuredRow = rows\n .map((r) => r.getBoundingClientRect().height)\n .filter((h) => h >= PLAUSIBLE_ROW_HEIGHT.min && h <= PLAUSIBLE_ROW_HEIGHT.max)\n .reduce((max, h) => Math.max(max, h), 0);\n const row =\n measuredRow >= PLAUSIBLE_ROW_HEIGHT.min && measuredRow <= PLAUSIBLE_ROW_HEIGHT.max\n ? measuredRow\n : rowHeight;\n\n // Height-bound table (a flex child the page sizes, e.g. \"fill the rest of the screen\"):\n // the budget is the room the rows can take — the scroll box (page padding, toolbars and a\n // horizontal scrollbar are already outside it) plus any slack left in the p-datatable\n // around it. A box that is taller than its rows has room to spare; rows taller than the\n // box overflow it. Either way the same count comes out, so re-fitting settles.\n const box = card.querySelector('.p-datatable-table-container') as HTMLElement | null;\n const table = box?.querySelector('table');\n const datatable = card.querySelector('.p-datatable') as HTMLElement | null;\n if (box && table && datatable && box.clientHeight > 0) {\n const rowsHeight = table.getBoundingClientRect().height;\n const overflowing = rowsHeight - box.clientHeight > 1;\n const roomInBox = box.clientHeight - rowsHeight > 1;\n const slack = Math.max(datatable.clientHeight - box.offsetHeight - paginator, 0);\n if (overflowing || roomInBox || slack > 1) {\n return Math.max(minimumRows, Math.floor((box.clientHeight + slack - header) / row));\n }\n }\n\n const available = window.innerHeight - card.getBoundingClientRect().top - header - paginator;\n return Math.max(minimumRows, Math.floor(available / row));\n}\n","/**\n * Backend timestamp normalization.\n *\n * `Created on` / `Modified on` are **instants** — one moment in time — so they\n * must render in the timezone of whoever is looking, not the server's. Angular's\n * `date` pipe already does that conversion, but only when the value it is given\n * actually identifies an instant. It cannot convert what carries no zone:\n *\n * - `1757000000000` (epoch millis) — an instant. Rendered correctly.\n * - `2026-09-04T10:12:33Z` / `…+05:30` / `… GMT` — an instant. Rendered correctly.\n * - `2026-09-04T10:12:33` / `2026-09-04 10:12:33` — **not** an instant. Angular\n * parses a zone-less ISO string with the *local* setters, so a UTC wall clock\n * is shown verbatim as if it were local time: a tool created at 15:42 IST\n * reads back as 10:12. That is the bug this file exists to close.\n *\n * The server stores UTC, so a zone-less timestamp is a UTC timestamp that lost\n * its suffix on the way out. Putting the `Z` back is all the pipe needs.\n *\n * Deliberately **not** normalized:\n *\n * - A bare `2026-09-04` is a *calendar date*, not an instant. It means that day\n * everywhere, and shifting it by an offset would show the previous day to\n * anyone west of UTC. Left exactly as it arrived.\n * - Anything that already names a zone. Adding a second one would double-shift.\n *\n * `toInstant` is therefore idempotent and safe to apply to a payload whose\n * format you have not pinned down — every already-correct shape passes through\n * untouched.\n */\n\n/** A timestamp as the REST API hands it over: epoch millis, a date string, or absent. */\nexport type BackendTimestamp = string | number | null | undefined;\n\n/** `YYYY-MM-DD`, then `T` or a space, then a clock — and nothing after it. The\n * trailing `$` is what excludes `…Z`, `…+05:30` and `…-0800` from matching. */\nconst ZONE_LESS_DATE_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?)$/;\n\n/** Epoch millis that arrived as a string rather than a number. */\nconst EPOCH_MILLIS = /^-?\\d+$/;\n\n/**\n * Returns `value` in a form the `date` pipe can resolve to a real instant, so it\n * renders in the viewer's own timezone.\n *\n * Only a zone-less date-time is rewritten (read as UTC). Epoch millis, values\n * that already name a zone, bare calendar dates and formats this does not model\n * are returned as they came. Empty/absent input becomes `null`, which the\n * templates render as the `—` placeholder.\n */\nexport function toInstant(value: BackendTimestamp): string | number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n\n const raw = value.trim();\n if (raw === '') return null;\n if (EPOCH_MILLIS.test(raw)) return Number(raw);\n\n const zoneLess = ZONE_LESS_DATE_TIME.exec(raw);\n if (!zoneLess) return raw;\n\n return `${zoneLess[1]}T${zoneLess[2]}Z`;\n}\n","/**\n * Display formatting for dates/timestamps.\n *\n * Accepts anything the backend hands over (epoch millis as number or string,\n * ISO strings with or without a zone) plus `Date` objects. Zone-less backend\n * timestamps are read as UTC via `toInstant`, so output is always in the\n * viewer's local timezone. Empty or unparseable input renders as `—`.\n */\nimport { BackendTimestamp, toInstant } from './timestamp.util';\n\nexport type DateLike = BackendTimestamp | Date;\n\n/** Placeholder rendered when a value is missing or unparseable. */\nexport const EMPTY_DATE = '—';\n\nconst MONTHS_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/** Parses a `DateLike` into a valid `Date`, or `null` when missing/invalid. */\nexport function toDate(value: DateLike): Date | null {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n const instant = toInstant(value);\n if (instant === null) return null;\n const d = new Date(instant);\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\n/** \"DD-Mon-YYYY\" (e.g. \"12-Dec-2023\"). */\nexport function formatDate(value: DateLike): string {\n const d = toDate(value);\n if (!d) return EMPTY_DATE;\n const day = String(d.getDate()).padStart(2, '0');\n return `${day}-${MONTHS_SHORT[d.getMonth()]}-${d.getFullYear()}`;\n}\n\n/** \"hh:mm AM/PM\" (e.g. \"09:05 PM\"). */\nexport function formatTime(value: DateLike): string {\n const d = toDate(value);\n if (!d) return EMPTY_DATE;\n const hours = d.getHours();\n const h12 = String(hours % 12 || 12).padStart(2, '0');\n const minutes = String(d.getMinutes()).padStart(2, '0');\n return `${h12}:${minutes} ${hours < 12 ? 'AM' : 'PM'}`;\n}\n\n/** \"DD-Mon-YYYY, hh:mm AM/PM\" (e.g. \"12-Dec-2023, 09:05 PM\"). */\nexport function formatDateTime(value: DateLike): string {\n if (!toDate(value)) return EMPTY_DATE;\n return `${formatDate(value)}, ${formatTime(value)}`;\n}\n\n/** A timestamp as a short label, and whether that label is relative (\"5 minutes ago\"). */\nexport interface RelativeDateTime {\n label: string;\n /** True for \"Just now\" / \"N minutes ago\" / \"N hours ago\" / \"Yesterday\". The full\n * date-time is then worth showing on hover; an absolute label already is it. */\n relative: boolean;\n}\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 60 * MINUTE_MS;\n\n/** Midnight (local) at the start of `d`'s calendar day. */\nfunction startOfDay(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\n/**\n * A past instant relative to `now`:\n * - under a minute: \"Just now\"\n * - under an hour: \"N minute(s) ago\"\n * - earlier today: \"N hour(s) ago\"\n * - any time on the previous calendar day: \"Yesterday\"\n * - anything older, or in the future: the full \"DD-Mon-YYYY, hh:mm AM/PM\"\n *\n * Calendar days are the viewer's local days. Empty or unparseable input gives `—`.\n */\nexport function formatRelativeDateTime(value: DateLike, now: Date = new Date()): RelativeDateTime {\n const d = toDate(value);\n if (!d) return { label: EMPTY_DATE, relative: false };\n const diff = now.getTime() - d.getTime();\n // A few seconds ahead is clock skew between the server and this machine, not the future.\n if (diff < -MINUTE_MS) return { label: formatDateTime(d), relative: false };\n if (diff < MINUTE_MS) return { label: 'Just now', relative: true };\n if (diff < HOUR_MS) {\n const mins = Math.floor(diff / MINUTE_MS);\n return { label: `${mins} minute${mins === 1 ? '' : 's'} ago`, relative: true };\n }\n const today = startOfDay(now);\n if (d.getTime() >= today) {\n const hours = Math.floor(diff / HOUR_MS);\n return { label: `${hours} hour${hours === 1 ? '' : 's'} ago`, relative: true };\n }\n const yesterday = startOfDay(new Date(today - 1));\n if (d.getTime() >= yesterday) return { label: 'Yesterday', relative: true };\n return { label: formatDateTime(d), relative: false };\n}\n","import { Injectable, signal } from '@angular/core';\n\n/** How often relative labels (\"5 minutes ago\") move on. */\nexport const DW_CLOCK_TICK_MS = 30_000;\n\n/**\n * One app-wide \"now\" for relative timestamps, so a page with hundreds of\n * `dw-timestamp`s runs a single timer. The timer runs only while at least one\n * consumer is attached, and outside every zone: it neither triggers app-wide\n * change detection on each tick (the `now` signal refreshes just the labels\n * that read it) nor leaves a pending periodic timer in `fakeAsync` tests.\n */\n@Injectable({ providedIn: 'root' })\nexport class DwClockService {\n private readonly _now = signal(Date.now());\n /** Epoch millis, refreshed every DW_CLOCK_TICK_MS while anything is attached. */\n readonly now = this._now.asReadonly();\n\n private consumers = 0;\n private timer: ReturnType<typeof setInterval> | null = null;\n\n /** Start following the clock; call the returned function to stop. */\n attach(): () => void {\n this.consumers++;\n // A label created now must not show an instant older than its own creation.\n this._now.set(Date.now());\n if (!this.timer) {\n this.timer = runOutsideZones(() => setInterval(() => this._now.set(Date.now()), DW_CLOCK_TICK_MS));\n }\n let attached = true;\n return () => {\n if (!attached) return;\n attached = false;\n this.consumers--;\n if (this.consumers === 0 && this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n };\n }\n\n /** Consumers currently attached (for tests). */\n get consumerCount(): number {\n return this.consumers;\n }\n}\n\n/** Run `fn` in zone.js's root zone when zone.js is loaded, so its timers are untracked. */\nfunction runOutsideZones<T>(fn: () => T): T {\n const zone = (globalThis as { Zone?: { root?: { run<R>(f: () => R): R } } }).Zone;\n return zone?.root ? zone.root.run(fn) : fn();\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, computed, inject, input } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DateLike, EMPTY_DATE, formatDateTime, formatRelativeDateTime, toDate } from '../internal/date-format.util';\nimport { DwClockService } from './dw-clock.service';\n\n/**\n * A timestamp shown the same way everywhere: \"Just now\", \"12 minutes ago\",\n * \"3 hours ago\", \"Yesterday\", then \"12-Dec-2025, 09:05 PM\" beyond yesterday.\n * A relative label shows the full date and time on hover. Relative labels keep\n * moving while the page stays open.\n *\n * Takes whatever the backend sends (epoch millis, ISO with or without a zone —\n * zone-less is read as UTC) or a Date, and shows it in the viewer's timezone.\n * Missing or unparseable values render `placeholder`.\n *\n * ```html\n * <dw-timestamp [value]=\"agent.modifiedDate\" />\n * <dw-timestamp [value]=\"row.createdAt\" format=\"absolute\" /> <!-- always the full date-time -->\n * ```\n */\n@Component({\n selector: 'dw-timestamp',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-timestamp-host' },\n template: `\n @if (date(); as d) {\n <time\n class=\"dw-timestamp\"\n [attr.datetime]=\"d.toISOString()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n tooltipPosition=\"top\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >{{ label() }}</time\n >\n } @else {\n <span class=\"dw-timestamp dw-timestamp--empty\" [attr.data-testid]=\"testId()\">{{ placeholder() }}</span>\n }\n `,\n})\nexport class DwTimestampComponent {\n private readonly clock = inject(DwClockService);\n\n /** The instant: epoch millis, an ISO string (zone-less = UTC) or a Date. */\n readonly value = input<DateLike>(null);\n /** `relative` (default): \"N minutes ago\" … \"Yesterday\", then the full date-time. `absolute`: always the full date-time. */\n readonly format = input<'relative' | 'absolute'>('relative');\n /** Shown for a missing or unparseable value. */\n readonly placeholder = input<string>(EMPTY_DATE);\n readonly testId = input<string | null>(null);\n\n readonly date = computed(() => toDate(this.value()));\n\n private readonly display = computed(() => {\n const d = this.date();\n if (!d) return { label: this.placeholder(), relative: false };\n if (this.format() === 'absolute') return { label: formatDateTime(d), relative: false };\n return formatRelativeDateTime(d, new Date(this.clock.now()));\n });\n\n readonly label = computed(() => this.display().label);\n /** The full date and time, on hover of a relative label only. */\n readonly tooltip = computed(() => {\n const d = this.date();\n return d && this.display().relative ? formatDateTime(d) : '';\n });\n\n constructor() {\n inject(DestroyRef).onDestroy(this.clock.attach());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n TemplateRef,\n afterNextRender,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SortEvent, SortMeta } from 'primeng/api';\nimport { FrozenColumn, Table, TableModule, TablePageEvent } from 'primeng/table';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwTableEmptyComponent } from '../empty-state/dw-empty-state.component';\nimport { DwTooltipIfTruncatedDirective } from '../tooltip/dw-tooltip-if-truncated.directive';\nimport { fitTableRows } from '../internal/table-rows.util';\nimport { DwIconButtonComponent } from '../icon-button/dw-icon-button.component';\nimport { DwMenuComponent, DwMenuItem } from '../menu/dw-menu.component';\nimport { DwTimestampComponent } from '../timestamp/dw-timestamp.component';\nimport { DateLike, EMPTY_DATE, formatDateTime, toDate } from '../internal/date-format.util';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public API kept from dataworkz-ui; `unknown` would break consumers' typing\nexport interface DwColumn<T = any> {\n field: string;\n header: string;\n sortable?: boolean;\n /** Field used for sorting when it differs from `field`. */\n sortField?: string;\n frozen?: boolean;\n width?: string;\n minWidth?: string;\n align?: 'left' | 'center' | 'right';\n /** Ellipsis + tooltip when the value overflows (default true for text cells). */\n truncate?: boolean;\n /**\n * `date`: the value renders as a dw-timestamp (\"2 hours ago\" … \"12-Dec-2025, 09:05 PM\"),\n * cut with an ellipsis like a text cell. Default `text`.\n */\n type?: 'text' | 'date';\n /** Date columns: `relative` (default) or always the full `absolute` date-time. */\n dateFormat?: 'relative' | 'absolute';\n /** Text style of a default cell, from the type scale: `strong` (dw-body-strong) or `meta` (dw-meta). */\n textStyle?: 'body' | 'strong' | 'meta';\n /** Shown when the value is empty (default \"—\"). */\n emptyText?: string;\n /**\n * Value of a default cell when it isn't simply `row[field]`: the text of a text cell,\n * the instant (epoch millis, ISO string or Date) of a date cell.\n */\n format?: (row: T) => string | number | Date | null | undefined;\n hidden?: boolean;\n /**\n * Take whatever width the other columns leave, and cut content instead of\n * growing the table (pair with `minWidth` to keep it readable).\n */\n fill?: boolean;\n testId?: string;\n /** Extra class(es) on the header / body cells of this column. */\n headerClass?: string;\n cellClass?: string;\n}\n\n/** Custom cell: `<ng-template dwCell=\"status\" let-row let-index=\"index\">…</ng-template>` */\n@Directive({ selector: 'ng-template[dwCell]', standalone: true })\nexport class DwCellDirective {\n readonly field = input.required<string>({ alias: 'dwCell' });\n readonly template = inject<TemplateRef<{ $implicit: unknown; index: number }>>(TemplateRef);\n}\n\n/** Row actions column: `<ng-template dwRowActions let-row>…</ng-template>` */\n/** Custom header content for a column: `<ng-template dwHeader=\"select\">…</ng-template>`. */\n@Directive({ selector: 'ng-template[dwHeader]', standalone: true })\nexport class DwHeaderDirective {\n readonly field = input.required<string>({ alias: 'dwHeader' });\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[dwRowActions]', standalone: true })\nexport class DwRowActionsDirective {\n readonly template = inject<TemplateRef<{ $implicit: unknown; index: number }>>(TemplateRef);\n}\n\n/**\n * Expanded row body: `<ng-template dwRowExpansion let-row>…</ng-template>`.\n * With `[dwRowExpansionRows]=\"true\"` the template supplies its own `<tr>` rows\n * (sub-rows aligned with the table's columns) instead of one full-width cell.\n */\n@Directive({ selector: 'ng-template[dwRowExpansion]', standalone: true })\nexport class DwRowExpansionDirective {\n readonly template = inject<TemplateRef<{ $implicit: unknown; index: number }>>(TemplateRef);\n readonly rows = input<boolean>(false, { alias: 'dwRowExpansionRows' });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public API kept from dataworkz-ui; `unknown` would break consumers' typing\nexport interface DwRowClickEvent<T = any> {\n row: T;\n event: MouseEvent;\n /** Cmd/Ctrl/Shift/middle click — callers should open in a new tab. */\n newTab: boolean;\n}\n\n/**\n * Table shell on top of p-table: sortable headers, frozen columns, truncating\n * cells with tooltips, skeleton loading, empty state, paginator (fixed or\n * viewport-fit rows), selection, row actions and row expansion.\n *\n * ```html\n * <dw-table [value]=\"items\" [columns]=\"cols\" dataKey=\"id\" [loading]=\"loading\" rows=\"fit\"\n * [filter]=\"query\" [globalFilterFields]=\"['name','createdBy']\"\n * sortField=\"createdDate\" [sortOrder]=\"-1\" emptyTitle=\"No configurations\"\n * [rowClickable]=\"true\" (rowClick)=\"open($event.row)\">\n * <ng-template dwCell=\"status\" let-row><dw-status-pill [status]=\"row.status\" /></ng-template>\n * <ng-template dwRowActions let-row>\n * <dw-icon-button icon=\"pi pi-pencil\" ariaLabel=\"Edit\" (clicked)=\"edit(row)\" />\n * <dw-menu [items]=\"rowMenu\" [context]=\"row\" />\n * </ng-template>\n * </dw-table>\n * ```\n */\n@Component({\n selector: 'dw-table',\n standalone: true,\n imports: [NgClass, NgTemplateOutlet, TableModule, SkeletonModule, TooltipModule, DwTableEmptyComponent, DwTooltipIfTruncatedDirective, DwIconButtonComponent, DwMenuComponent, DwTimestampComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-table-host', '[class.dw-table-host--framed]': 'framed()', '[class.dw-table-host--hscroll]': 'frozenDivider() && hasHScroll()', '[attr.data-testid]': 'testId()' },\n template: `\n <ng-content select=\"[dwTableHeader]\" />\n <p-table\n #table\n [value]=\"tableValue()\"\n [dataKey]=\"dataKey()\"\n [paginator]=\"paginator() && !loading() && hasRows()\"\n [rows]=\"resolvedRows()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions() ?? undefined\"\n [first]=\"first()\"\n [lazy]=\"lazy()\"\n (onPage)=\"onPage($event)\"\n (firstChange)=\"first.set($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\n [pageLinks]=\"5\"\n [sortField]=\"sortField() ?? undefined\"\n [sortOrder]=\"sortOrder()\"\n [sortMode]=\"multiSortMeta() ? 'multiple' : 'single'\"\n [multiSortMeta]=\"multiSortMeta()?.length ? multiSortMeta()! : undefined\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"filteredCount.set($event.filteredValue?.length ?? null)\"\n [customSort]=\"customSort()\"\n (sortFunction)=\"sortFunction.emit($event)\"\n [globalFilterFields]=\"globalFilterFields()\"\n [filterDelay]=\"0\"\n [selectionMode]=\"rowSelectionMode()\"\n [selection]=\"selection()\"\n (selectionChange)=\"selection.set($event)\"\n [rowSelectable]=\"primeRowSelectable()\"\n [expandedRowKeys]=\"expandedRowKeys()\"\n [scrollable]=\"true\"\n [scrollHeight]=\"scrollHeight() ?? undefined\"\n [tableStyle]=\"minWidth() ? { 'min-width': minWidth() } : undefined\"\n [rowHover]=\"true\"\n [styleClass]=\"'dw-datatable p-datatable-sm dw-datatable--paginator-' + paginatorAlign() + ' ' + (fixedLayout() ? 'dw-datatable--fixed ' : '') + (compact() ? 'dw-datatable--compact ' : '') + styleClass()\"\n >\n <!-- Sort state as a small arrow (up = ascending, down = descending), shown on the sorted column only -->\n <ng-template pTemplate=\"sorticon\" let-order>\n <i class=\"dw-table__sort pi\" [class.pi-arrow-down]=\"order === -1\" [class.pi-arrow-up]=\"order !== -1\"\n [class.is-sorted]=\"order === 1 || order === -1\" aria-hidden=\"true\"></i>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n @if (expansion()) {\n <th class=\"dw-table__expander-col\" scope=\"col\"><span class=\"dw-sr-only\">Expand</span></th>\n }\n @if (selectionMode() === 'checkbox') {\n <th class=\"dw-table__check-col\" scope=\"col\"><p-tableHeaderCheckbox ariaLabel=\"Select all rows\" /></th>\n }\n @for (col of visibleColumns(); track col.field) {\n @if (col.sortable) {\n <th\n scope=\"col\"\n [pSortableColumn]=\"col.sortField ?? col.field\"\n [ngClass]=\"[col.headerClass ?? '', col.fill ? 'dw-table__col--fill' : '']\"\n pFrozenColumn\n [frozen]=\"!!col.frozen\"\n [class.dw-table__frozen-edge]=\"col.field === frozenEdgeField()\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.minWidth ?? col.width\"\n [style.text-align]=\"col.align\"\n [attr.data-testid]=\"col.testId\"\n >\n <span class=\"dw-table__sort-head\">\n @if (headerTemplate(col.field); as htpl) {\n <ng-container *ngTemplateOutlet=\"htpl\" />\n } @else {\n {{ col.header }}\n }\n <p-sortIcon [field]=\"col.sortField ?? col.field\" />\n </span>\n </th>\n } @else {\n <th\n scope=\"col\"\n [ngClass]=\"[col.headerClass ?? '', col.fill ? 'dw-table__col--fill' : '']\"\n pFrozenColumn\n [frozen]=\"!!col.frozen\"\n [class.dw-table__frozen-edge]=\"col.field === frozenEdgeField()\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.minWidth ?? col.width\"\n [style.text-align]=\"col.align\"\n [attr.data-testid]=\"col.testId\"\n >\n @if (headerTemplate(col.field); as htpl) {\n <ng-container *ngTemplateOutlet=\"htpl\" />\n } @else {\n {{ col.header }}\n }\n </th>\n }\n @if (actionsStart() && $first) {\n <ng-container *ngTemplateOutlet=\"actionsHeaderCell\" />\n }\n }\n @if (hasActions() && !actionsStart()) {\n <ng-container *ngTemplateOutlet=\"actionsHeaderCell\" />\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-row let-index=\"rowIndex\" let-expanded=\"expanded\">\n <tr\n [class.dw-table__row--clickable]=\"rowClickable()\"\n [pSelectableRow]=\"selectionMode() === 'single' || selectionMode() === 'multiple' ? row : null\"\n [pSelectableRowDisabled]=\"!(selectionMode() === 'single' || selectionMode() === 'multiple')\"\n [attr.data-testid]=\"rowTestId() ? rowTestId()!(row) : null\"\n [ngClass]=\"rowClass() ? rowClass()!(row) : ''\"\n [attr.tabindex]=\"rowClickable() ? 0 : null\"\n (click)=\"onRowClick(row, $event)\"\n (mouseenter)=\"rowEnter.emit(row)\"\n (mouseleave)=\"rowLeave.emit(row)\"\n (auxclick)=\"onRowClick(row, $event)\"\n (keydown.enter)=\"onRowKey(row, $event)\"\n >\n @if (expansion()) {\n <td class=\"dw-table__expander-col\">\n @if (controlledExpansion()) {\n <!-- Controlled: the owner flips expandedRowKeys in response to rowToggle. -->\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [attr.aria-expanded]=\"!!expanded\"\n [attr.aria-label]=\"expanded ? 'Collapse row' : 'Expand row'\"\n (click)=\"$event.stopPropagation(); rowToggle.emit(row)\"\n >\n <ng-container *ngTemplateOutlet=\"expanderIcon; context: { $implicit: row, expanded: expanded }\" />\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [pRowToggler]=\"row\"\n [attr.aria-expanded]=\"!!expanded\"\n [attr.aria-label]=\"expanded ? 'Collapse row' : 'Expand row'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"expanderIcon; context: { $implicit: row, expanded: expanded }\" />\n </button>\n }\n </td>\n }\n @if (selectionMode() === 'checkbox') {\n <td class=\"dw-table__check-col\" (click)=\"$event.stopPropagation()\">\n <p-tableCheckbox [value]=\"row\" ariaLabel=\"Select row\" [disabled]=\"!canSelect(row)\" />\n </td>\n }\n @for (col of visibleColumns(); track col.field) {\n <td pFrozenColumn [frozen]=\"!!col.frozen\" [class.dw-table__frozen-edge]=\"col.field === frozenEdgeField()\" [style.text-align]=\"col.align\" [ngClass]=\"[col.cellClass ?? '', col.fill ? 'dw-table__col--fill' : '']\">\n @if (cellTemplate(col.field); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: row, index: index }\" />\n } @else if (col.type === 'date') {\n <div class=\"dw-table__cell-text\" [ngClass]=\"textStyleClass(col)\" [pTooltip]=\"dateTooltip(row, col)\" dwTooltipIfTruncated tooltipPosition=\"top\" [showDelay]=\"300\" appendTo=\"body\">\n <dw-timestamp [value]=\"dateValue(row, col)\" [format]=\"col.dateFormat ?? 'relative'\" [placeholder]=\"col.emptyText ?? emptyCell\" />\n </div>\n } @else if (col.truncate === false) {\n <span [ngClass]=\"textStyleClass(col)\">{{ cellText(row, col) }}</span>\n } @else {\n <div class=\"dw-table__cell-text\" [ngClass]=\"textStyleClass(col)\" [pTooltip]=\"cellText(row, col)\" dwTooltipIfTruncated tooltipPosition=\"top\" [showDelay]=\"300\" appendTo=\"body\">\n {{ cellText(row, col) }}\n </div>\n }\n </td>\n @if (actionsStart() && $first) {\n <ng-container *ngTemplateOutlet=\"actionsBodyCell; context: { $implicit: row, index: index }\" />\n }\n }\n @if (hasActions() && !actionsStart()) {\n <ng-container *ngTemplateOutlet=\"actionsBodyCell; context: { $implicit: row, index: index }\" />\n }\n </tr>\n </ng-template>\n\n <!-- The actions column: at the end (frozen right) or, with actionsPlacement=\"start\", right\n after the first column (frozen left, as on the agents list). Quick actions from the\n dwRowActions template, then the row menu's ⋮ when rowMenuItems gives the row any. -->\n <ng-template #actionsHeaderCell>\n <th scope=\"col\" class=\"dw-table__actions-col\" pFrozenColumn [frozen]=\"freezeActions()\"\n [alignFrozen]=\"actionsStart() ? 'left' : 'right'\"\n [class.dw-table__frozen-edge]=\"actionsStart() && freezeActions()\"\n [class.dw-table__frozen-edge-end]=\"!actionsStart() && freezeActions()\"\n [style.width]=\"actionsWidth()\" [style.min-width]=\"actionsWidth()\">\n {{ actionsHeader() }}\n </th>\n </ng-template>\n <ng-template #actionsBodyCell let-row let-index=\"index\">\n <td class=\"dw-table__actions-col\" pFrozenColumn [frozen]=\"freezeActions()\"\n [alignFrozen]=\"actionsStart() ? 'left' : 'right'\"\n [class.dw-table__frozen-edge]=\"actionsStart() && freezeActions()\"\n [class.dw-table__frozen-edge-end]=\"!actionsStart() && freezeActions()\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"dw-row-actions\" [class.dw-row-actions--reveal]=\"revealActions()\">\n @if (actions(); as act) {\n <ng-container *ngTemplateOutlet=\"act.template; context: { $implicit: row, index: index }\" />\n }\n @if (rowMenuItems(); as items) {\n @if (items(row).length) {\n <dw-icon-button icon=\"pi pi-ellipsis-v\" ariaLabel=\"Row actions\" [hasPopup]=\"true\"\n [testId]=\"rowMenuTestId()?.(row) ?? null\" (clicked)=\"openRowMenu(row, $event)\" />\n }\n }\n </div>\n </td>\n </ng-template>\n\n <ng-template pTemplate=\"expandedrow\" let-row let-index=\"rowIndex\">\n @if (expansion(); as exp) {\n @if (exp.rows()) {\n <ng-container *ngTemplateOutlet=\"exp.template; context: { $implicit: row, index: index }\" />\n } @else {\n <tr class=\"dw-table__expanded-row\">\n <td [attr.colspan]=\"colspan()\">\n <ng-container *ngTemplateOutlet=\"exp.template; context: { $implicit: row, index: index }\" />\n </td>\n </tr>\n }\n }\n </ng-template>\n\n <ng-template #expanderIcon let-row let-expanded=\"expanded\">\n @if (expanderLoading()?.(row)) {\n <i class=\"pi pi-spin pi-spinner\" aria-hidden=\"true\"></i>\n } @else {\n <i [class]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\" aria-hidden=\"true\"></i>\n }\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n @if (loading()) {\n @for (r of skeletonRowIndexes(); track r) {\n <tr class=\"dw-table__skeleton-row\" aria-hidden=\"true\">\n @for (c of skeletonCols(); track $index) {\n <td><p-skeleton width=\"70%\" height=\"12px\" /></td>\n }\n </tr>\n }\n } @else {\n <tr dw-table-empty [colspan]=\"colspan()\" [icon]=\"emptyIcon()\" [title]=\"emptyTitle()\" [text]=\"emptyText()\">\n <ng-content select=\"[dwTableEmptyActions]\" />\n </tr>\n }\n </ng-template>\n </p-table>\n @if (rowMenuItems()) {\n <dw-menu #rowMenu trigger=\"none\" [items]=\"rowMenuModel()\" ariaLabel=\"Row actions\" />\n }\n `,\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public API kept from dataworkz-ui; `unknown` would break consumers' typing\nexport class DwTableComponent<T = any> {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n readonly value = input<readonly T[] | null>([]);\n readonly columns = input<readonly DwColumn<T>[]>([]);\n readonly dataKey = input<string | undefined>(undefined);\n readonly loading = input<boolean>(false);\n readonly skeletonRows = input<number>(6);\n readonly paginator = input<boolean>(true);\n /** Fixed page size, or `'fit'` to fill the viewport (re-measured on resize). */\n readonly rows = input<number | 'fit'>(10);\n /** Rounded, bordered card around the table and its paginator (e.g. a list page's main table). */\n readonly framed = input<boolean>(false);\n /** Where the paginator (page report + controls) sits under the table. */\n readonly paginatorAlign = input<'left' | 'center' | 'right'>('right');\n /** Shows a rows-per-page picker in the paginator. */\n readonly rowsPerPageOptions = input<number[] | null>(null);\n readonly first = model<number>(0);\n /** Server-side paging: `value` is one page, `totalRecords` the full count, and `pageChange` asks for the next. */\n readonly lazy = input<boolean>(false);\n readonly totalRecords = input<number | null>(null);\n readonly sortField = input<string | null>(null);\n readonly sortOrder = input<1 | -1>(1);\n readonly multiSortMeta = input<SortMeta[] | null>(null);\n /**\n * A third click on a sorted column clears its sort (asc → desc → unsorted) and\n * the rows fall back to the order `value` arrived in. `sortChange` then emits\n * `{ field: null, order: 0 }` (single) or the remaining `{ multisortmeta }`\n * (`[]` once nothing is sorted). On by default.\n */\n readonly removableSort = input<boolean>(true);\n /** Delegate sorting to the `sortFunction` output (PrimeNG customSort). */\n readonly customSort = input<boolean>(false);\n readonly filter = input<string>('');\n readonly globalFilterFields = input<string[]>([]);\n readonly selectionMode = input<'single' | 'multiple' | 'checkbox' | null>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- public API kept from dataworkz-ui; `unknown` would break consumers' typing\n readonly selection = model<any>(null);\n /** Rows for which this returns false can't be selected (their checkbox is disabled). */\n readonly rowSelectable = input<((row: T) => boolean) | null>(null);\n readonly expandedRowKeys = input<Record<string, boolean>>({});\n /** The expander emits `rowToggle` and the owner updates `expandedRowKeys` (instead of p-table toggling itself). */\n readonly controlledExpansion = input<boolean>(false);\n /** Shows a spinner in a row's expander, e.g. while its expansion loads. */\n readonly expanderLoading = input<((row: T) => boolean) | null>(null);\n readonly rowClickable = input<boolean>(false);\n readonly rowTestId = input<((row: T) => string) | null>(null);\n /** Extra class(es) per body row, e.g. `row => ({ 'is-deprecated': row.deprecated })`. */\n readonly rowClass = input<((row: T) => string | string[] | Record<string, boolean> | null) | null>(null);\n readonly actionsHeader = input<string>('Actions');\n readonly actionsWidth = input<string>('100px');\n /** `start`: the actions column comes right after the first column, frozen left (agents list). */\n readonly actionsPlacement = input<'start' | 'end'>('end');\n /** A row's menu (Edit, Delete…): the actions column gets a ⋮ that opens it. */\n readonly rowMenuItems = input<((row: T) => DwMenuItem<T>[]) | null>(null);\n readonly rowMenuTestId = input<((row: T) => string) | null>(null);\n readonly freezeActions = input<boolean>(true);\n readonly revealActions = input<boolean>(false);\n readonly scrollHeight = input<string | null>(null);\n readonly minWidth = input<string | null>(null);\n /** `table-layout: fixed` so declared column widths are honoured and long text truncates. */\n readonly fixedLayout = input<boolean>(false);\n readonly emptyIcon = input<string>('pi pi-inbox');\n readonly emptyTitle = input<string>('No data');\n readonly emptyText = input<string>('');\n readonly styleClass = input<string>('');\n /** Tighter header and body cells, for small tables inside cards / widgets. */\n readonly compact = input<boolean>(false);\n /**\n * A vertical line between the sticky (frozen) columns and the ones that scroll under them —\n * after the last left-frozen column and before the frozen actions column. Shown only while the\n * table actually scrolls sideways.\n */\n readonly frozenDivider = input<boolean>(true);\n readonly testId = input<string | null>(null);\n\n readonly rowClick = output<DwRowClickEvent<T>>();\n /** Expander pressed under `controlledExpansion`. */\n readonly rowToggle = output<T>();\n /** Pointer entered / left a body row (e.g. to preview what a click would select). */\n readonly rowEnter = output<T>();\n readonly rowLeave = output<T>();\n readonly pageChange = output<TablePageEvent>();\n readonly sortChange = output<unknown>();\n readonly sortFunction = output<SortEvent>();\n\n readonly table = viewChild<Table>('table');\n /** Every frozen header / body cell (PrimeNG's pFrozenColumn). */\n private readonly frozenCells = viewChildren(FrozenColumn);\n readonly cells = contentChildren(DwCellDirective);\n readonly headers = contentChildren(DwHeaderDirective);\n readonly actions = contentChild(DwRowActionsDirective);\n readonly expansion = contentChild(DwRowExpansionDirective);\n\n private readonly fittedRows = signal(10);\n /**\n * Order of each sorted field, and whether the user flipped it from ascending\n * to descending — only then does the next click clear it (a column that\n * starts descending, or is re-sorted on a data refresh, does not).\n */\n private sortState = new Map<string, { order: number; cycled: boolean }>();\n\n readonly tableValue = computed<T[]>(() => (this.loading() ? [] : [...(this.value() ?? [])]));\n /** Rows left after the global filter (null until p-table filters). */\n readonly filteredCount = signal<number | null>(null);\n /** Anything to page through? The empty state shows no paginator (\"0 to 0 of 0\"). */\n readonly hasRows = computed(() => {\n if (this.lazy()) return (this.totalRecords() ?? 0) > 0;\n const count = this.filter() ? (this.filteredCount() ?? this.tableValue().length) : this.tableValue().length;\n return count > 0;\n });\n readonly rowSelectionMode = computed<'single' | 'multiple' | null>(() => {\n const mode = this.selectionMode();\n return mode === 'single' || mode === 'multiple' ? mode : null;\n });\n /** PrimeNG passes `{ data, index }`; adapt the row-only predicate (every row when none is set). */\n readonly primeRowSelectable = computed(() => {\n const fn = this.rowSelectable();\n return (e: { data: T; index: number }): boolean => (fn ? fn(e.data) : true);\n });\n readonly visibleColumns = computed(() => this.columns().filter((c) => !c.hidden));\n /** The last left-frozen column, which carries the frozen divider. */\n readonly frozenEdgeField = computed(() => {\n // A frozen actions column at the start carries the divider itself.\n if (this.hasActions() && this.actionsStart() && this.freezeActions()) return null;\n const frozen = this.visibleColumns().filter((c) => c.frozen);\n return frozen.length ? frozen[frozen.length - 1].field : null;\n });\n readonly hasActions = computed(() => !!this.actions() || !!this.rowMenuItems());\n readonly actionsStart = computed(() => this.actionsPlacement() === 'start');\n /** Items of the row whose ⋮ was last opened (one shared menu for all rows). */\n readonly rowMenuModel = signal<DwMenuItem<T>[]>([]);\n private readonly rowMenu = viewChild<DwMenuComponent<T>>('rowMenu');\n\n openRowMenu(row: T, event: Event): void {\n this.rowMenuModel.set(this.rowMenuItems()?.(row) ?? []);\n this.rowMenu()?.toggle(event);\n }\n\n /** Whether the rows overflow sideways (the frozen divider only shows then). */\n readonly hasHScroll = signal(false);\n readonly colspan = computed(\n () =>\n this.visibleColumns().length +\n (this.hasActions() ? 1 : 0) +\n (this.expansion() ? 1 : 0) +\n (this.selectionMode() === 'checkbox' ? 1 : 0),\n );\n readonly skeletonRowIndexes = computed(() => Array.from({ length: Math.max(0, this.skeletonRows()) }, (_, i) => i));\n readonly skeletonCols = computed(() => Array.from({ length: Math.max(1, this.colspan()) }));\n readonly resolvedRows = computed(() => (this.rows() === 'fit' ? this.fittedRows() : (this.rows() as number)));\n\n constructor() {\n effect(() => {\n const text = this.filter();\n this.table()?.filterGlobal(text, 'contains');\n });\n\n // Lazy tables only: p-table counts a local value itself (and its filtered subset).\n effect(() => {\n const table = this.table();\n if (table && this.lazy()) {\n table.totalRecords = this.totalRecords() ?? 0;\n }\n });\n\n // Track sideways overflow for the frozen divider. The scroll container may not exist yet when\n // this first runs (loading), so it is looked up on every measure; the host is observed for\n // viewport changes, and rows / columns changing re-measure once they have painted.\n effect((onCleanup) => {\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.measureHScroll());\n observer.observe(this.host.nativeElement);\n onCleanup(() => observer.disconnect());\n });\n effect(() => {\n this.tableValue();\n this.visibleColumns();\n untracked(() => afterNextRender(() => this.measureHScroll(), { injector: this.injector }));\n });\n\n // PrimeNG re-measures a frozen cell only when that cell itself resizes, so when an earlier\n // frozen column changes width (e.g. a fill column shrinks as columns are added) the later\n // ones keep a stale sticky offset and scrolled cells show through the gap. Watch them all\n // and re-place every frozen cell whenever any of them, or the table, changes size.\n effect((onCleanup) => {\n const cells = this.frozenCells();\n const tableEl = this.table()?.el?.nativeElement as HTMLElement | undefined;\n if (!cells.length || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => cells.forEach((c) => c.updateStickyPosition()));\n cells.forEach((c) => observer.observe(c.el.nativeElement));\n if (tableEl) observer.observe(tableEl);\n onCleanup(() => observer.disconnect());\n });\n // …and once the cells have rendered after a column change (shown / hidden / re-sized).\n effect(() => {\n this.visibleColumns();\n untracked(() =>\n afterNextRender(() => this.frozenCells().forEach((c) => c.updateStickyPosition()), { injector: this.injector }),\n );\n });\n\n afterNextRender(() => {\n if (this.rows() !== 'fit') {\n return;\n }\n const measure = () => this.measureFit();\n measure();\n window.addEventListener('resize', measure);\n this.destroyRef.onDestroy(() => window.removeEventListener('resize', measure));\n });\n\n // Re-fit once real rows have painted: the first pass usually runs on the loading / empty\n // table, where only the fallback row height is known, and taller rows then overflow.\n effect(() => {\n this.tableValue();\n this.loading();\n if (this.rows() === 'fit') {\n untracked(() => afterNextRender(() => this.measureFit(), { injector: this.injector }));\n }\n });\n }\n\n private measureHScroll(): void {\n const container = this.host.nativeElement.querySelector<HTMLElement>('.p-datatable-table-container');\n this.hasHScroll.set(!!container && container.scrollWidth > container.clientWidth + 1);\n }\n\n /** Fits the page size; a changed size is checked once more after it paints (rows can tip a bound table into overflow). */\n private measureFit(settle = 2): void {\n const rows = fitTableRows(this.host.nativeElement);\n if (rows !== this.fittedRows()) {\n this.fittedRows.set(rows);\n if (settle > 0) {\n afterNextRender(() => this.measureFit(settle - 1), { injector: this.injector });\n }\n }\n }\n\n canSelect(row: T): boolean {\n const fn = this.rowSelectable();\n return fn ? fn(row) : true;\n }\n\n headerTemplate(field: string): TemplateRef<unknown> | null {\n return this.headers().find((h) => h.field() === field)?.template ?? null;\n }\n\n cellTemplate(field: string): TemplateRef<{ $implicit: unknown; index: number }> | null {\n return this.cells().find((c) => c.field() === field)?.template ?? null;\n }\n\n readonly emptyCell = EMPTY_DATE;\n\n /** The raw value of a default cell: `format(row)` when given, else `row[field]`. */\n cellValue(row: T, col: DwColumn<T>): unknown {\n return col.format ? col.format(row) : this.resolve(row, col.field);\n }\n\n cellText(row: T, col: DwColumn<T>): string {\n const value = this.cellValue(row, col);\n if (value === null || value === undefined || value === '') return col.emptyText ?? this.emptyCell;\n return value instanceof Date ? formatDateTime(value) : String(value);\n }\n\n /** The instant of a date cell. */\n dateValue(row: T, col: DwColumn<T>): DateLike {\n return this.cellValue(row, col) as DateLike;\n }\n\n /** The full date-time of a date cell, shown on hover when the cell cuts it off. */\n dateTooltip(row: T, col: DwColumn<T>): string {\n const value = this.dateValue(row, col);\n return toDate(value) ? formatDateTime(value) : '';\n }\n\n textStyleClass(col: DwColumn<T>): string {\n return col.textStyle === 'strong' ? 'dw-body-strong' : col.textStyle === 'meta' ? 'dw-meta' : '';\n }\n\n onPage(event: TablePageEvent): void {\n this.first.set(event.first);\n this.pageChange.emit(event);\n }\n\n onSort(event: SortMeta | { multisortmeta?: SortMeta[] }): void {\n const multi = 'multisortmeta' in event;\n const metas = multi ? (event.multisortmeta ?? []) : [event as SortMeta];\n const removed = new Set<string>();\n const next = new Map<string, { order: number; cycled: boolean }>();\n for (const meta of metas) {\n const prev = this.sortState.get(meta.field);\n if (this.removableSort() && prev?.cycled && prev.order === -1 && meta.order === 1) {\n removed.add(meta.field);\n continue;\n }\n const cycled = prev?.order === meta.order ? prev.cycled : prev?.order === 1 && meta.order === -1;\n next.set(meta.field, { order: meta.order, cycled });\n }\n this.sortState = next;\n\n const table = this.table();\n if (!removed.size || !table) {\n this.sortChange.emit(event);\n return;\n }\n this.clearSort(table, multi, metas.filter((m) => !removed.has(m.field)));\n }\n\n onRowClick(row: T, event: MouseEvent): void {\n if (!this.rowClickable()) {\n return;\n }\n if (event.type === 'auxclick' && event.button !== 1) {\n return;\n }\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, a, input, [role=checkbox], .dw-row-actions')) {\n return;\n }\n const newTab = event.metaKey || event.ctrlKey || event.shiftKey || event.button === 1;\n this.rowClick.emit({ row, event, newTab });\n }\n\n onRowKey(row: T, event: Event): void {\n if (!this.rowClickable() || event.target !== event.currentTarget) {\n return;\n }\n this.rowClick.emit({ row, event: event as MouseEvent, newTab: false });\n }\n\n /**\n * Drops the cleared field(s) from p-table's sort (headers included). Local data\n * goes back to its original order and is re-sorted by whatever sort remains.\n */\n private clearSort(table: Table, multi: boolean, remaining: SortMeta[]): void {\n if (multi) {\n table._multiSortMeta = remaining.length ? remaining.map((m) => ({ ...m })) : null;\n } else {\n table._sortField = null;\n table._sortOrder = table.defaultSortOrder;\n }\n if (!this.lazy()) {\n table.value = [...(this.value() ?? [])];\n }\n if (remaining.length) {\n table.sortMultiple(); // re-sorts and re-emits onSort with the remaining fields\n return;\n }\n table.tableService.onSort(null);\n if (!this.lazy() && table.hasFilter()) {\n table._filter();\n }\n this.sortChange.emit(multi ? { multisortmeta: [] } : { field: null, order: 0 });\n }\n\n private resolve(row: T, path: string): unknown {\n return path.split('.').reduce<unknown>((acc, key) => (acc == null ? acc : (acc as Record<string, unknown>)[key]), row);\n }\n}\n\nexport const DW_TABLE = [DwTableComponent, DwCellDirective, DwHeaderDirective, DwRowActionsDirective, DwRowExpansionDirective] as const;\n","import { ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect';\n\n/**\n * \"Customize table\" toolbar control: picks the optional columns of a dw-table.\n *\n * ```html\n * <dw-column-picker [options]=\"customizableColumns\" [(selected)]=\"selectedColumns\"\n * (selectedChange)=\"persistColumns()\" />\n * ```\n * Options are objects; `optionLabel` names the label field (default `header`).\n */\n@Component({\n selector: 'dw-column-picker',\n standalone: true,\n imports: [FormsModule, MultiSelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-column-picker-host' },\n template: `\n <p-multiselect\n [options]=\"options()\"\n [ngModel]=\"selected()\"\n (ngModelChange)=\"onChange($event)\"\n [optionLabel]=\"optionLabel()\"\n [showToggleAll]=\"false\"\n [filter]=\"options().length > 8\"\n [showHeader]=\"options().length > 8\"\n appendTo=\"body\"\n styleClass=\"dw-column-picker\"\n placeholder=\" \"\n [attr.data-testid]=\"testId()\"\n [ariaLabel]=\"label()\"\n >\n <ng-template #selecteditems>\n <span class=\"dw-column-picker__label\">\n <i class=\"pi pi-sliders-h\" aria-hidden=\"true\"></i>\n {{ label() }}\n </span>\n </ng-template>\n <ng-template #dropdownicon><span></span></ng-template>\n </p-multiselect>\n `,\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public API kept from dataworkz-ui; `unknown` would break consumers' typing\nexport class DwColumnPickerComponent<T = any> {\n readonly options = input<T[]>([]);\n readonly selected = model<T[]>([]);\n readonly optionLabel = input<string>('header');\n readonly label = input<string>('Customize table');\n readonly testId = input<string | null>(null);\n\n /** Fires after `selected` changes from user interaction (convenient for persisting). */\n readonly changed = output<T[]>();\n\n onChange(value: T[]): void {\n this.selected.set(value ?? []);\n this.changed.emit(this.selected());\n }\n}\n","import { DOCUMENT, Injectable, InjectionToken, inject, signal } from '@angular/core';\n\nexport type DwTheme = 'light' | 'dark';\n\n/** localStorage key holding the viewer's theme choice (default for `CrystalConfig.theme.storageKey`). */\nexport const DW_THEME_STORAGE_KEY = 'dw-theme';\n\nexport interface CrystalThemeConfig {\n /**\n * Set `data-theme` on <html> at start-up and on every switch. `false` for federated elements: the host page owns\n * its <html>. Default true.\n */\n apply?: boolean;\n /** Theme used until the viewer picks one. Default 'light'. */\n initial?: DwTheme;\n /** localStorage key for the viewer's choice. Default 'dw-theme' (dataworkz-ui's key, so stored choices survive). */\n storageKey?: string;\n}\n\n/** What `provideCrystal()` configures. Theme only (MIGRATION-PLAN §3.2). */\nexport interface CrystalConfig {\n theme?: CrystalThemeConfig;\n}\n\n/** The config given to `provideCrystal()`; `{}` (all defaults) without it. */\nexport const DW_CRYSTAL_CONFIG = new InjectionToken<CrystalConfig>('DW_CRYSTAL_CONFIG', {\n providedIn: 'root',\n factory: () => ({}),\n});\n\n/**\n * Light / dark theme switch. The theme is the `data-theme` attribute on\n * <html>: semantic-dark.css re-points the --dw-* tokens under\n * [data-theme=\"dark\"] and PrimeNG's darkModeSelector follows the same\n * attribute. The choice is remembered per browser (light until chosen).\n *\n * `provideCrystal()` applies it once at start-up so a stored dark choice\n * doesn't flash light. With `theme.apply: false` (federated elements on a\n * legacy host page) it never touches <html>.\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly config = inject(DW_CRYSTAL_CONFIG).theme ?? {};\n private readonly storageKey = this.config.storageKey ?? DW_THEME_STORAGE_KEY;\n private readonly applies = this.config.apply !== false;\n\n readonly theme = signal<DwTheme>(this.readStored() ?? this.config.initial ?? 'light');\n\n /** Puts the current theme on <html> (unless `theme.apply` is false). */\n init(): void {\n this.apply(this.theme());\n }\n\n setTheme(theme: DwTheme): void {\n this.theme.set(theme);\n this.apply(theme);\n try {\n localStorage.setItem(this.storageKey, theme);\n } catch {\n // Storage can be unavailable (private mode, blocked site data): the switch still works for this page.\n }\n }\n\n toggle(): void {\n this.setTheme(this.theme() === 'dark' ? 'light' : 'dark');\n }\n\n private apply(theme: DwTheme): void {\n if (this.applies) {\n this.document.documentElement.setAttribute('data-theme', theme);\n }\n }\n\n private readStored(): DwTheme | null {\n try {\n const value = localStorage.getItem(this.storageKey);\n return value === 'dark' || value === 'light' ? value : null;\n } catch {\n return null;\n }\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { CrystalConfig, DW_CRYSTAL_CONFIG, ThemeService } from './theme.service';\n\n/**\n * Crystal's app-level setup: the theme (MIGRATION-PLAN §3.2). With `theme.apply` (the default) it puts the stored or\n * initial theme on <html> before the first render, so a dark choice doesn't flash light.\n *\n * ```ts\n * providers: [provideCrystal(), provideCrystalPrimeNG()] // an app\n * providers: [provideCrystal({ theme: { apply: false } }), provideCrystalPrimeNG()] // federated elements\n * ```\n */\nexport function provideCrystal(config: CrystalConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: DW_CRYSTAL_CONFIG, useValue: config },\n config.theme?.apply === false ? [] : provideAppInitializer(() => inject(ThemeService).init()),\n ]);\n}\n","// GENERATED by tools/generate-host-theme.mjs from libs/theme/src — do not edit.\nexport const DW_HOST_THEME_CSS = \":root {\\n --dw-primary-50: #ecf3ff;\\n --dw-primary-100: #d6e5ff;\\n --dw-primary-200: #b0ccff;\\n --dw-primary-300: #82abff;\\n --dw-primary-400: #4d84ff;\\n --dw-primary-500: #2463f5;\\n --dw-primary-600: #144ce6;\\n --dw-primary-700: #113dc2;\\n --dw-primary-800: #16359b;\\n --dw-primary-900: #19327b;\\n --dw-primary-950: #101d49;\\n --dw-neutral-0: #ffffff;\\n --dw-neutral-50: #f8fafc;\\n --dw-neutral-100: #f1f5f9;\\n --dw-neutral-200: #e2e8f0;\\n --dw-neutral-300: #cbd5e1;\\n --dw-neutral-400: #94a3b8;\\n --dw-neutral-500: #64748b;\\n --dw-neutral-600: #475569;\\n --dw-neutral-700: #334155;\\n --dw-neutral-800: #1e293b;\\n --dw-neutral-900: #0f172a;\\n --dw-neutral-950: #020617;\\n --dw-neutral-1000: #000000;\\n --dw-editor-dark-900: #1e1e1e;\\n --dw-sky-100: #e2eef7;\\n --dw-success-50: #ecfdf5;\\n --dw-success-100: #e7f7ee;\\n --dw-success-200: #b7e8cc;\\n --dw-success-300: #6ee7b7;\\n --dw-success-500: #10b981;\\n --dw-success-600: #059669;\\n --dw-success-700: #027a48;\\n --dw-success-800: #065f46;\\n --dw-warning-50: #fffbeb;\\n --dw-warning-100: #fef3c7;\\n --dw-warning-200: #fde68a;\\n --dw-warning-300: #fcd34d;\\n --dw-warning-500: #f59e0b;\\n --dw-warning-600: #d97706;\\n --dw-warning-700: #c2410c;\\n --dw-warning-800: #92400e;\\n --dw-amber-700: #b45309;\\n --dw-orange-100: #ffedd5;\\n --dw-danger-50: #fef2f2;\\n --dw-danger-100: #fee4e2;\\n --dw-danger-200: #fecdca;\\n --dw-danger-300: #fca5a5;\\n --dw-danger-500: #ef4444;\\n --dw-danger-600: #dc2626;\\n --dw-danger-700: #b91c1c;\\n --dw-danger-800: #b42318;\\n --dw-danger-900: #991b1b;\\n --dw-coolgray-100: #f2f4f7;\\n --dw-coolgray-300: #d0d5dd;\\n --dw-coolgray-600: #475467;\\n --dw-blue-50: #eef4ff;\\n --dw-blue-100: #e1effe;\\n --dw-blue-600: #2563eb;\\n --dw-blue-800: #1e429f;\\n --dw-violet-50: #f5f1ff;\\n --dw-violet-100: #edebfe;\\n --dw-violet-200: #ddd6fe;\\n --dw-violet-500: #8b5cf6;\\n --dw-violet-600: #7c3aed;\\n --dw-violet-800: #5521b5;\\n --dw-cyan-100: #d5f5f6;\\n --dw-cyan-500: #06b6d4;\\n --dw-cyan-700: #0e7490;\\n --dw-pink-100: #fce7f3;\\n --dw-pink-500: #ec4899;\\n --dw-pink-700: #be185d;\\n --dw-teal-500: #14b8a6;\\n --dw-lime-500: #84cc16;\\n --dw-indigo-500: #6366f1;\\n --dw-tag-red: #ef4444;\\n --dw-tag-orange: #f97316;\\n --dw-tag-amber: #f59e0b;\\n --dw-tag-yellow: #eab308;\\n --dw-tag-lime: #84cc16;\\n --dw-tag-green: #22c55e;\\n --dw-tag-emerald: #10b981;\\n --dw-tag-teal: #14b8a6;\\n --dw-tag-cyan: #06b6d4;\\n --dw-tag-sky: #0ea5e9;\\n --dw-tag-blue: #3b82f6;\\n --dw-tag-indigo: #6366f1;\\n --dw-tag-violet: #8b5cf6;\\n --dw-tag-purple: #a855f7;\\n --dw-tag-fuchsia: #d946ef;\\n --dw-tag-pink: #ec4899;\\n --dw-alpha-ink-05: rgba(16, 32, 64, 0.05);\\n --dw-alpha-ink-06: rgba(15, 23, 42, 0.06);\\n --dw-alpha-ink-12: rgba(15, 23, 42, 0.12);\\n --dw-alpha-ink-22: rgba(15, 23, 42, 0.22);\\n --dw-alpha-black-08: rgba(0, 0, 0, 0.08);\\n --dw-alpha-black-10: rgba(0, 0, 0, 0.1);\\n --dw-alpha-black-12: rgba(0, 0, 0, 0.12);\\n --dw-alpha-black-20: rgba(0, 0, 0, 0.2);\\n --dw-alpha-black-25: rgba(0, 0, 0, 0.25);\\n --dw-alpha-black-40: rgba(0, 0, 0, 0.4);\\n --dw-alpha-black-60: rgba(0, 0, 0, 0.6);\\n --dw-alpha-primary-15: rgba(36, 99, 245, 0.15);\\n --dw-alpha-primary-24: rgba(36, 99, 245, 0.24);\\n --dw-alpha-primary-28: rgba(36, 99, 245, 0.28);\\n --dw-alpha-primary-35: rgba(36, 99, 245, 0.35);\\n --dw-alpha-primary-55: rgba(36, 99, 245, 0.55);\\n --dw-alpha-primary-60: rgba(36, 99, 245, 0.6);\\n --dw-alpha-danger-25: rgba(185, 28, 28, 0.25);\\n --dw-alpha-danger-30: rgba(185, 28, 28, 0.3);\\n --dw-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\\n --dw-font-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace;\\n --dw-font-size-10: 10px;\\n --dw-font-size-11: 11px;\\n --dw-font-size-12: 12px;\\n --dw-font-size-13: 13px;\\n --dw-font-size-14: 14px;\\n --dw-font-size-16: 16px;\\n --dw-font-size-18: 18px;\\n --dw-font-size-20: 20px;\\n --dw-font-size-24: 24px;\\n --dw-line-height-14: 14px;\\n --dw-line-height-16: 16px;\\n --dw-line-height-20: 20px;\\n --dw-line-height-24: 24px;\\n --dw-line-height-28: 28px;\\n --dw-font-weight-regular: 400;\\n --dw-font-weight-medium: 500;\\n --dw-font-weight-semibold: 600;\\n --dw-font-weight-bold: 700;\\n --dw-space-0: 0;\\n --dw-space-0_5: 2px;\\n --dw-space-1: 4px;\\n --dw-space-1_5: 6px;\\n --dw-space-2: 8px;\\n --dw-space-2_5: 10px;\\n --dw-space-3: 12px;\\n --dw-space-4: 16px;\\n --dw-space-5: 20px;\\n --dw-space-6: 24px;\\n --dw-space-7: 28px;\\n --dw-space-8: 32px;\\n --dw-space-10: 40px;\\n --dw-space-12: 48px;\\n --dw-radius-xs: 2px;\\n --dw-radius-sm: 4px;\\n --dw-radius-md: 6px;\\n --dw-radius-lg: 8px;\\n --dw-radius-xl: 12px;\\n --dw-radius-pill: 16px;\\n --dw-radius-full: 9999px;\\n --dw-radius-round: 50%;\\n --dw-dur-micro: 120ms;\\n --dw-dur-enter: 190ms;\\n --dw-dur-pop: 240ms;\\n --dw-dur-loop: 1700ms;\\n --dw-ease: cubic-bezier(0.2, 0.6, 0.2, 1);\\n --dw-ease-inout: cubic-bezier(0.4, 0, 0.2, 1);\\n --dw-z-base: 1;\\n --dw-z-sticky: 10;\\n --dw-z-header: 100;\\n --dw-z-dropdown: 1000;\\n --dw-z-overlay: 1100;\\n --dw-z-modal: 1200;\\n --dw-z-toast: 1300;\\n --dw-size-control-sm: 28px;\\n --dw-size-control: 32px;\\n --dw-size-control-lg: 36px;\\n --dw-size-icon-btn: 28px;\\n --dw-size-topbar: 48px;\\n --dw-size-sidebar: 248px;\\n --dw-size-table-header: 38px;\\n --dw-size-table-row: 42px;\\n --dw-width-dialog-sm: 400px;\\n --dw-width-dialog-md: 560px;\\n --dw-width-dialog-lg: 760px;\\n --dw-width-dialog-xl: 960px;\\n --dw-width-drawer-sm: 500px;\\n --dw-width-drawer-md: 720px;\\n --dw-width-drawer-lg: 950px;\\n}\\n:root,\\n[data-theme='light'] {\\n color-scheme: light;\\n --dw-text: var(--dw-neutral-700);\\n --dw-text-strong: var(--dw-neutral-800);\\n --dw-text-label: var(--dw-neutral-600);\\n --dw-text-secondary: var(--dw-neutral-500);\\n --dw-text-muted: var(--dw-neutral-400);\\n --dw-text-inverse: var(--dw-neutral-0);\\n --dw-text-link: var(--dw-primary-600);\\n --dw-text-link-hover: var(--dw-primary-700);\\n --dw-surface: var(--dw-neutral-0);\\n --dw-surface-ground: var(--dw-sky-100);\\n --dw-surface-rail: var(--dw-neutral-50);\\n --dw-surface-section: var(--dw-neutral-50);\\n --dw-surface-hover: var(--dw-neutral-50);\\n --dw-surface-pressed: var(--dw-neutral-100);\\n --dw-surface-selected: var(--dw-primary-50);\\n --dw-surface-disabled: var(--dw-neutral-100);\\n --dw-surface-inverse: var(--dw-neutral-800);\\n --dw-surface-editor-dark: var(--dw-editor-dark-900);\\n --dw-code-text: var(--dw-pink-500);\\n --dw-scrim: var(--dw-alpha-black-40);\\n --dw-border: var(--dw-neutral-200);\\n --dw-border-subtle: var(--dw-neutral-100);\\n --dw-attention-fg: var(--dw-amber-700);\\n --dw-border-strong: var(--dw-neutral-300);\\n --dw-border-hover: var(--dw-neutral-400);\\n --dw-border-accent: var(--dw-primary-200);\\n --dw-accent: var(--dw-primary-500);\\n --dw-accent-hover: var(--dw-primary-600);\\n --dw-accent-active: var(--dw-primary-700);\\n --dw-accent-tint: var(--dw-primary-50);\\n --dw-accent-tint-strong: var(--dw-primary-100);\\n --dw-accent-text: var(--dw-primary-700);\\n --dw-accent-subtle: var(--dw-primary-200);\\n --dw-accent-soft: var(--dw-primary-400);\\n --dw-fill-subtle: var(--dw-neutral-200);\\n --dw-fill-muted: var(--dw-neutral-300);\\n --dw-fill-strong: var(--dw-neutral-500);\\n --dw-shadow-color: var(--dw-neutral-1000);\\n --dw-focus-border: var(--dw-primary-500);\\n --dw-focus-ring: 0 0 0 3px var(--dw-alpha-primary-24);\\n --dw-focus-ring-danger: 0 0 0 3px var(--dw-alpha-danger-30);\\n --dw-focus-border-ring: inset 0 0 0 0.5px var(--dw-focus-border);\\n --dw-focus-border-ring-danger: inset 0 0 0 0.5px var(--dw-danger-solid);\\n --dw-status-success-fg: var(--dw-success-700);\\n --dw-status-success-bg: var(--dw-success-100);\\n --dw-status-success-border: var(--dw-success-200);\\n --dw-status-success-solid: var(--dw-success-500);\\n --dw-status-warning-fg: var(--dw-warning-800);\\n --dw-status-warning-bg: var(--dw-warning-50);\\n --dw-status-warning-border: var(--dw-warning-200);\\n --dw-status-warning-solid: var(--dw-warning-500);\\n --dw-status-danger-fg: var(--dw-danger-700);\\n --dw-status-danger-bg: var(--dw-danger-100);\\n --dw-status-danger-border: var(--dw-danger-200);\\n --dw-status-danger-solid: var(--dw-danger-700);\\n --dw-status-success-on-inverse: var(--dw-success-300);\\n --dw-status-danger-on-inverse: var(--dw-danger-300);\\n --dw-status-info-fg: var(--dw-primary-700);\\n --dw-status-info-bg: var(--dw-primary-50);\\n --dw-status-info-border: var(--dw-primary-200);\\n --dw-status-info-solid: var(--dw-primary-500);\\n --dw-status-neutral-fg: var(--dw-coolgray-600);\\n --dw-status-neutral-bg: var(--dw-coolgray-100);\\n --dw-status-neutral-border: var(--dw-coolgray-300);\\n --dw-status-neutral-solid: var(--dw-neutral-400);\\n --dw-status-paused-fg: var(--dw-warning-800);\\n --dw-status-paused-bg: var(--dw-warning-100);\\n --dw-danger: var(--dw-danger-700);\\n --dw-danger-hover: var(--dw-danger-900);\\n --dw-danger-tint: var(--dw-danger-50);\\n --dw-danger-solid: var(--dw-danger-700);\\n --dw-danger-fill: var(--dw-danger-700);\\n --dw-entity-workflow-bg: var(--dw-blue-50);\\n --dw-entity-workflow-fg: var(--dw-blue-600);\\n --dw-entity-reasoning-bg: var(--dw-violet-50);\\n --dw-entity-reasoning-fg: var(--dw-violet-600);\\n --dw-entity-unknown-bg: var(--dw-neutral-100);\\n --dw-entity-unknown-fg: var(--dw-neutral-500);\\n --dw-icon-tint-orange: var(--dw-warning-50);\\n --dw-icon-tint-cyan: var(--dw-cyan-100);\\n --dw-icon-tint-pink: var(--dw-pink-100);\\n --dw-icon-tint-cyan-fg: var(--dw-cyan-700);\\n --dw-icon-tint-pink-fg: var(--dw-pink-700);\\n --dw-tree-spine: var(--dw-neutral-300);\\n --dw-deco-violet: var(--dw-violet-500);\\n --dw-deco-violet-subtle: var(--dw-violet-200);\\n --dw-deco-violet-fg: var(--dw-violet-800);\\n --dw-deco-cyan: var(--dw-cyan-500);\\n --dw-deco-pink: var(--dw-pink-500);\\n --dw-deco-teal: var(--dw-teal-500);\\n --dw-deco-lime: var(--dw-lime-500);\\n --dw-deco-indigo: var(--dw-indigo-500);\\n --dw-btn-primary-grad: linear-gradient(135deg, var(--dw-primary-400), var(--dw-primary-600));\\n --dw-btn-primary-grad-hover: linear-gradient(135deg, var(--dw-primary-500), var(--dw-primary-700));\\n --dw-btn-primary-grad-active: linear-gradient(135deg, var(--dw-primary-600), var(--dw-primary-800));\\n --dw-btn-primary-shadow: 0 4px 12px -5px var(--dw-alpha-primary-55);\\n --dw-btn-primary-shadow-hover: 0 6px 16px -6px var(--dw-alpha-primary-60);\\n --dw-btn-primary-focus-ring: 0 0 0 2px var(--dw-neutral-0), 0 0 0 4px var(--dw-alpha-primary-35);\\n --dw-btn-secondary-grad: linear-gradient(135deg, var(--dw-neutral-50), var(--dw-neutral-200));\\n --dw-btn-secondary-grad-hover: linear-gradient(135deg, var(--dw-neutral-100), var(--dw-neutral-300));\\n --dw-shadow-xs: 0 1px 2px var(--dw-alpha-ink-05);\\n --dw-shadow-sm: 0 1px 2px var(--dw-alpha-ink-06);\\n --dw-shadow-md: 0 4px 12px var(--dw-alpha-black-10);\\n --dw-shadow-card-hover: 0 6px 16px -6px var(--dw-alpha-primary-28), 0 2px 6px var(--dw-alpha-ink-06);\\n --dw-shadow-popover: 0 4px 12px var(--dw-alpha-black-10);\\n --dw-shadow-menu: 0 4px 16px var(--dw-alpha-black-10);\\n --dw-shadow-modal: 0 20px 60px var(--dw-alpha-black-25);\\n --dw-shadow-drawer: -4px 0 24px var(--dw-alpha-black-12);\\n --dw-shadow-header: 0 1px 0 var(--dw-neutral-200);\\n --dw-shadow-inset: inset 0 1px 2px var(--dw-alpha-ink-12);\\n --dw-scrollbar-thumb: var(--dw-neutral-300);\\n --dw-scrollbar-thumb-hover: var(--dw-neutral-400);\\n --dw-scrollbar-track: transparent;\\n --dw-skeleton-base: var(--dw-neutral-100);\\n --dw-skeleton-shine: var(--dw-neutral-50);\\n --dw-chart-1: var(--dw-primary-500);\\n --dw-chart-2: var(--dw-violet-500);\\n --dw-chart-3: var(--dw-success-500);\\n --dw-chart-4: var(--dw-warning-500);\\n --dw-chart-5: var(--dw-cyan-500);\\n --dw-chart-6: var(--dw-pink-500);\\n --dw-chart-7: var(--dw-teal-500);\\n --dw-chart-8: var(--dw-danger-500);\\n --dw-chart-grid: var(--dw-neutral-200);\\n --dw-chart-axis: var(--dw-neutral-500);\\n --dw-radius-control: var(--dw-radius-md);\\n --dw-radius-card: var(--dw-radius-lg);\\n --dw-radius-overlay: var(--dw-radius-lg);\\n --dw-radius-modal: var(--dw-radius-xl);\\n}\\n[data-theme='dark'] {\\n color-scheme: dark;\\n --dw-text: var(--dw-neutral-200);\\n --dw-text-strong: var(--dw-neutral-50);\\n --dw-text-label: var(--dw-neutral-300);\\n --dw-text-secondary: var(--dw-neutral-400);\\n --dw-text-muted: var(--dw-neutral-500);\\n --dw-text-inverse: var(--dw-neutral-0);\\n --dw-text-link: var(--dw-primary-300);\\n --dw-text-link-hover: var(--dw-primary-200);\\n --dw-surface: var(--dw-neutral-900);\\n --dw-surface-ground: var(--dw-neutral-950);\\n --dw-surface-rail: color-mix(in srgb, var(--dw-neutral-900) 60%, var(--dw-neutral-950));\\n --dw-surface-section: color-mix(in srgb, var(--dw-neutral-800) 55%, var(--dw-neutral-900));\\n --dw-surface-hover: color-mix(in srgb, var(--dw-neutral-800) 60%, var(--dw-neutral-900));\\n --dw-surface-pressed: var(--dw-neutral-800);\\n --dw-surface-selected: color-mix(in srgb, var(--dw-primary-500) 18%, var(--dw-neutral-900));\\n --dw-surface-disabled: var(--dw-neutral-800);\\n --dw-surface-inverse: var(--dw-neutral-700);\\n --dw-scrim: var(--dw-alpha-black-60);\\n --dw-border: var(--dw-neutral-800);\\n --dw-border-subtle: color-mix(in srgb, var(--dw-neutral-800) 60%, var(--dw-neutral-900));\\n --dw-border-strong: var(--dw-neutral-700);\\n --dw-border-hover: var(--dw-neutral-600);\\n --dw-border-accent: var(--dw-primary-800);\\n --dw-accent: var(--dw-primary-500);\\n --dw-accent-hover: var(--dw-primary-400);\\n --dw-accent-active: var(--dw-primary-300);\\n --dw-accent-tint: color-mix(in srgb, var(--dw-primary-500) 16%, transparent);\\n --dw-accent-tint-strong: color-mix(in srgb, var(--dw-primary-500) 28%, transparent);\\n --dw-accent-text: var(--dw-primary-300);\\n --dw-accent-subtle: var(--dw-primary-800);\\n --dw-accent-soft: var(--dw-primary-300);\\n --dw-fill-subtle: var(--dw-neutral-800);\\n --dw-fill-muted: var(--dw-neutral-700);\\n --dw-fill-strong: var(--dw-neutral-500);\\n --dw-focus-border: var(--dw-primary-400);\\n --dw-status-success-fg: var(--dw-success-300);\\n --dw-status-success-bg: color-mix(in srgb, var(--dw-success-500) 16%, transparent);\\n --dw-status-success-border: color-mix(in srgb, var(--dw-success-500) 40%, transparent);\\n --dw-status-warning-fg: var(--dw-warning-300);\\n --dw-attention-fg: var(--dw-warning-300);\\n --dw-status-warning-bg: color-mix(in srgb, var(--dw-warning-500) 16%, transparent);\\n --dw-status-warning-border: color-mix(in srgb, var(--dw-warning-500) 40%, transparent);\\n --dw-status-danger-fg: var(--dw-danger-300);\\n --dw-status-danger-solid: var(--dw-danger-300);\\n --dw-status-danger-bg: color-mix(in srgb, var(--dw-danger-500) 16%, transparent);\\n --dw-status-danger-border: color-mix(in srgb, var(--dw-danger-500) 40%, transparent);\\n --dw-status-success-on-inverse: var(--dw-success-300);\\n --dw-status-danger-on-inverse: var(--dw-danger-300);\\n --dw-status-info-fg: var(--dw-primary-300);\\n --dw-status-info-bg: color-mix(in srgb, var(--dw-primary-500) 16%, transparent);\\n --dw-status-info-border: color-mix(in srgb, var(--dw-primary-500) 40%, transparent);\\n --dw-status-neutral-fg: var(--dw-neutral-300);\\n --dw-status-neutral-bg: color-mix(in srgb, var(--dw-neutral-500) 18%, transparent);\\n --dw-status-neutral-border: color-mix(in srgb, var(--dw-neutral-500) 40%, transparent);\\n --dw-status-neutral-solid: var(--dw-neutral-500);\\n --dw-status-paused-fg: var(--dw-warning-300);\\n --dw-status-paused-bg: color-mix(in srgb, var(--dw-warning-500) 14%, transparent);\\n --dw-danger: var(--dw-danger-300);\\n --dw-danger-solid: var(--dw-danger-300);\\n --dw-danger-fill: var(--dw-danger-600);\\n --dw-danger-hover: var(--dw-danger-200);\\n --dw-danger-tint: color-mix(in srgb, var(--dw-danger-500) 14%, transparent);\\n --dw-entity-workflow-bg: color-mix(in srgb, var(--dw-blue-600) 22%, transparent);\\n --dw-entity-workflow-fg: var(--dw-primary-300);\\n --dw-entity-reasoning-bg: color-mix(in srgb, var(--dw-violet-500) 22%, transparent);\\n --dw-entity-reasoning-fg: var(--dw-violet-200);\\n --dw-entity-unknown-bg: var(--dw-neutral-800);\\n --dw-entity-unknown-fg: var(--dw-neutral-400);\\n --dw-icon-tint-orange: color-mix(in srgb, var(--dw-warning-500) 18%, transparent);\\n --dw-icon-tint-cyan: color-mix(in srgb, var(--dw-cyan-500) 18%, transparent);\\n --dw-icon-tint-pink: color-mix(in srgb, var(--dw-pink-500) 18%, transparent);\\n --dw-icon-tint-cyan-fg: var(--dw-cyan-100);\\n --dw-icon-tint-pink-fg: var(--dw-pink-100);\\n --dw-tree-spine: var(--dw-neutral-700);\\n --dw-deco-violet-subtle: var(--dw-violet-800);\\n --dw-deco-violet-fg: var(--dw-violet-200);\\n --dw-btn-primary-focus-ring: 0 0 0 2px var(--dw-neutral-900), 0 0 0 4px var(--dw-alpha-primary-55);\\n --dw-btn-secondary-grad: linear-gradient(135deg, var(--dw-neutral-800), var(--dw-neutral-700));\\n --dw-btn-secondary-grad-hover: linear-gradient(135deg, var(--dw-neutral-700), var(--dw-neutral-600));\\n --dw-shadow-xs: 0 1px 2px var(--dw-alpha-black-40);\\n --dw-shadow-sm: 0 1px 2px var(--dw-alpha-black-40);\\n --dw-shadow-md: 0 4px 12px var(--dw-alpha-black-40);\\n --dw-shadow-card-hover: 0 6px 16px -6px var(--dw-alpha-primary-35), 0 2px 6px var(--dw-alpha-black-40);\\n --dw-shadow-popover: 0 4px 16px var(--dw-alpha-black-60);\\n --dw-shadow-menu: 0 4px 16px var(--dw-alpha-black-60);\\n --dw-shadow-modal: 0 20px 60px var(--dw-alpha-black-60);\\n --dw-shadow-drawer: -4px 0 24px var(--dw-alpha-black-60);\\n --dw-shadow-header: 0 1px 0 var(--dw-neutral-800);\\n --dw-shadow-inset: inset 0 1px 2px var(--dw-alpha-black-40);\\n --dw-scrollbar-thumb: var(--dw-neutral-700);\\n --dw-scrollbar-thumb-hover: var(--dw-neutral-600);\\n --dw-skeleton-base: var(--dw-neutral-800);\\n --dw-skeleton-shine: var(--dw-neutral-700);\\n --dw-chart-grid: var(--dw-neutral-800);\\n --dw-chart-axis: var(--dw-neutral-400);\\n}\\n.dw-element,\\n.p-component,\\n.p-dialog,\\n.p-drawer,\\n.p-tooltip,\\n.p-toast,\\n.p-popover,\\n.p-menu,\\n.p-tieredmenu,\\n.p-select-overlay,\\n.p-multiselect-overlay {\\n font-family: var(--dw-font-sans);\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.p-menu.dw-menu,\\n.p-tieredmenu.dw-menu,\\n.p-popover.dw-popover-panel {\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-element :is(code, kbd, pre, samp, .dw-mono) {\\n font-family: var(--dw-font-mono);\\n}\\n.dw-page-title {\\n margin: 0;\\n font-size: var(--dw-font-size-20);\\n line-height: var(--dw-line-height-28);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-title {\\n margin: 0;\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-subtitle {\\n margin: 0;\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-body {\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-regular);\\n color: var(--dw-text);\\n}\\n.dw-body-strong {\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text);\\n}\\n.dw-label {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n margin: 0;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-label);\\n}\\n.dw-label--primary { color: var(--dw-accent-hover); }\\n.dw-label--muted { color: var(--dw-text-muted); }\\n.dw-label--success { color: var(--dw-status-success-fg); }\\n.dw-label--warn { color: var(--dw-status-warning-fg); }\\n.dw-label--danger { color: var(--dw-status-danger-fg); }\\n.dw-label-caps {\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n color: var(--dw-text-label);\\n}\\n.dw-group-label {\\n font-size: var(--dw-font-size-10);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n color: var(--dw-text-secondary);\\n}\\n.dw-meta {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-regular);\\n color: var(--dw-text-secondary);\\n}\\n.dw-meta.dw-meta--danger { color: var(--dw-status-danger-fg); }\\n.dw-meta .pi { font-size: var(--dw-font-size-12); }\\n.dw-caption {\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-secondary);\\n}\\n.dw-code {\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text);\\n}\\n.dw-uuid {\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-muted);\\n}\\n.dw-link {\\n color: var(--dw-text-link);\\n cursor: pointer;\\n background: none;\\n border: 0;\\n padding: 0;\\n font: inherit;\\n}\\n.dw-link:hover {\\n color: var(--dw-text-link-hover);\\n text-decoration: underline;\\n}\\n.dw-link--muted {\\n color: var(--dw-text-secondary);\\n}\\n.dw-link--muted:hover {\\n color: var(--dw-accent);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link) {\\n background: var(--dw-btn-primary-grad);\\n border-color: transparent;\\n box-shadow: var(--dw-btn-primary-shadow);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):hover {\\n background: var(--dw-btn-primary-grad-hover);\\n border-color: transparent;\\n box-shadow: var(--dw-btn-primary-shadow-hover);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):active {\\n background: var(--dw-btn-primary-grad-active);\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):focus-visible {\\n outline: none;\\n box-shadow: var(--dw-btn-primary-focus-ring);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):disabled,\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link).p-disabled {\\n background: var(--dw-btn-primary-grad);\\n box-shadow: none;\\n opacity: 0.6;\\n}\\n.p-button.p-button-secondary:not(.p-button-outlined):not(.p-button-text):not(.p-button-link) {\\n background: var(--dw-btn-secondary-grad);\\n border-color: var(--dw-border);\\n color: var(--dw-text);\\n box-shadow: var(--dw-shadow-sm);\\n}\\n.p-button.p-button-secondary:not(.p-button-outlined):not(.p-button-text):not(.p-button-link):not(:disabled):hover {\\n background: var(--dw-btn-secondary-grad-hover);\\n border-color: var(--dw-border-strong);\\n color: var(--dw-text);\\n}\\n.dw-btn {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n padding: 6px 11px;\\n border: 1px solid transparent;\\n border-radius: var(--dw-radius-control);\\n background: transparent;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n text-decoration: none;\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), border-color var(--dw-dur-micro), color var(--dw-dur-micro), box-shadow var(--dw-dur-enter);\\n}\\n.dw-btn:focus-visible {\\n outline: none;\\n box-shadow: var(--dw-focus-ring);\\n}\\n.dw-btn:disabled,\\n.dw-btn.is-disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n box-shadow: none !important;\\n}\\n.dw-btn--sm {\\n gap: 6px;\\n padding: 5px 10px;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-btn--icon {\\n width: var(--dw-size-control);\\n height: var(--dw-size-control);\\n padding: 0;\\n}\\n.dw-btn--icon.dw-btn--sm {\\n width: var(--dw-size-control-sm);\\n height: var(--dw-size-control-sm);\\n}\\n.dw-btn--round { border-radius: var(--dw-radius-round); }\\n.dw-btn--block { width: 100%; }\\n.dw-btn--primary {\\n background: var(--dw-btn-primary-grad);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n box-shadow: var(--dw-btn-primary-shadow);\\n}\\n.dw-btn--primary:hover:not(:disabled) {\\n background: var(--dw-btn-primary-grad-hover);\\n color: var(--dw-text-inverse);\\n box-shadow: var(--dw-btn-primary-shadow-hover);\\n}\\n.dw-btn--primary:active:not(:disabled) {\\n background: var(--dw-btn-primary-grad-active);\\n box-shadow: none;\\n}\\n.dw-btn--primary:focus-visible { box-shadow: var(--dw-btn-primary-focus-ring); }\\n.dw-btn--secondary {\\n background: var(--dw-btn-secondary-grad);\\n border-color: var(--dw-border);\\n color: var(--dw-text);\\n box-shadow: var(--dw-shadow-sm);\\n}\\n.dw-btn--secondary:hover:not(:disabled) {\\n background: var(--dw-btn-secondary-grad-hover);\\n border-color: var(--dw-border-strong);\\n}\\n.dw-btn--secondary:active:not(:disabled) {\\n background: var(--dw-btn-secondary-grad-hover);\\n border-color: var(--dw-border-hover);\\n color: var(--dw-text-strong);\\n box-shadow: var(--dw-shadow-inset);\\n}\\n.dw-btn--danger {\\n background: var(--dw-danger-fill);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n box-shadow: var(--dw-shadow-sm);\\n}\\n.dw-btn--danger:hover:not(:disabled) { background: var(--dw-danger-hover); }\\n.dw-btn--danger:active:not(:disabled) { background: var(--dw-danger-hover); }\\n.dw-btn--danger:focus-visible { box-shadow: var(--dw-focus-ring-danger); }\\n.dw-btn--inverse {\\n background: var(--dw-surface);\\n border-color: transparent;\\n color: var(--dw-text-strong);\\n box-shadow: none;\\n}\\n.dw-btn--inverse:hover:not(:disabled) { background: var(--dw-surface-hover); }\\n.dw-btn--outlined { background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--primary { border-color: var(--dw-border-accent); color: var(--dw-accent); background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--primary:hover:not(:disabled) { background: var(--dw-accent-tint); }\\n.dw-btn--outlined.dw-btn--primary:active:not(:disabled) { background: var(--dw-accent-tint-strong); }\\n.dw-btn--outlined.dw-btn--secondary { border-color: var(--dw-border); color: var(--dw-text-secondary); background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--secondary:hover:not(:disabled) { background: var(--dw-surface-hover); }\\n.dw-btn--outlined.dw-btn--secondary:active:not(:disabled) { background: var(--dw-surface-pressed); border-color: var(--dw-border-strong); }\\n.dw-btn--outlined.dw-btn--danger { border-color: var(--dw-status-danger-border); color: var(--dw-danger-solid); background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--danger:hover:not(:disabled) { background: var(--dw-danger-tint); }\\n.dw-btn--outlined.dw-btn--inverse { border-color: color-mix(in srgb, var(--dw-text-inverse) 40%, transparent); color: var(--dw-text-inverse); background: transparent; box-shadow: none; }\\n.dw-btn--outlined.dw-btn--inverse:hover:not(:disabled) { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); }\\n.dw-btn--text { background: transparent; border-color: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--primary { color: var(--dw-accent); background: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--primary:hover:not(:disabled) { background: var(--dw-accent-tint); }\\n.dw-btn--text.dw-btn--primary:active:not(:disabled) { background: var(--dw-accent-tint-strong); }\\n.dw-btn--text.dw-btn--secondary { color: var(--dw-text-secondary); background: transparent; border-color: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--secondary:hover:not(:disabled) { background: var(--dw-surface-hover); color: var(--dw-text); }\\n.dw-btn--text.dw-btn--danger { color: var(--dw-danger-solid); background: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--danger:hover:not(:disabled) { background: var(--dw-danger-tint); }\\n.dw-btn--text.dw-btn--inverse { color: var(--dw-accent-soft); background: transparent; border-color: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--inverse:hover:not(:disabled) { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); color: var(--dw-text-inverse); }\\n.dw-btn--link {\\n padding-left: var(--dw-space-1);\\n padding-right: var(--dw-space-1);\\n background: transparent;\\n border-color: transparent;\\n box-shadow: none;\\n color: var(--dw-accent);\\n}\\n.dw-btn--link.dw-btn--secondary { color: var(--dw-text); }\\n.dw-btn--link:hover:not(:disabled) { text-decoration: underline; }\\n.dw-btn--link:active:not(:disabled) { color: var(--dw-accent-active); text-decoration: underline; }\\n.dw-btn--outlined:hover:not(:disabled),\\n.dw-btn--outlined:active:not(:disabled),\\n.dw-btn--text:hover:not(:disabled),\\n.dw-btn--text:active:not(:disabled),\\n.dw-btn--link:hover:not(:disabled),\\n.dw-btn--link:active:not(:disabled) {\\n box-shadow: none;\\n}\\n.dw-btn--outlined.dw-btn--primary:hover:not(:disabled),\\n.dw-btn--text.dw-btn--primary:hover:not(:disabled) { color: var(--dw-accent); }\\n.dw-btn--outlined.dw-btn--primary:active:not(:disabled),\\n.dw-btn--text.dw-btn--primary:active:not(:disabled) { color: var(--dw-accent-active); }\\n.dw-btn--link.dw-btn--primary:hover:not(:disabled),\\n.dw-btn--link.dw-btn--primary:active:not(:disabled),\\n.dw-btn--link.dw-btn--secondary:hover:not(:disabled),\\n.dw-btn--link.dw-btn--secondary:active:not(:disabled),\\n.dw-btn--link.dw-btn--danger:hover:not(:disabled),\\n.dw-btn--link.dw-btn--danger:active:not(:disabled) {\\n background: transparent;\\n border-color: transparent;\\n}\\n.dw-btn--link.dw-btn--primary:hover:not(:disabled),\\n.dw-btn--link.dw-btn--secondary:hover:not(:disabled) { color: var(--dw-accent); }\\n.dw-btn--link.dw-btn--danger,\\n.dw-btn--link.dw-btn--danger:hover:not(:disabled) { color: var(--dw-danger-solid); }\\n.dw-btn--outlined.dw-btn--danger:active:not(:disabled),\\n.dw-btn--text.dw-btn--danger:active:not(:disabled) {\\n background: var(--dw-danger-tint);\\n color: var(--dw-danger-solid);\\n}\\n.dw-icon-btn {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n width: var(--dw-size-icon-btn);\\n height: var(--dw-size-icon-btn);\\n padding: 0;\\n border: 1px solid transparent;\\n border-radius: var(--dw-radius-md);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-14);\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), color var(--dw-dur-micro);\\n}\\n.dw-icon-btn--labelled {\\n gap: var(--dw-space-1);\\n width: auto;\\n padding: 0 var(--dw-space-2);\\n white-space: nowrap;\\n}\\n.dw-icon-btn:hover:not(:disabled) {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n}\\n.dw-icon-btn:focus-visible {\\n outline: none;\\n box-shadow: var(--dw-focus-ring);\\n}\\n.dw-icon-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.dw-icon-btn--lg { width: var(--dw-size-control); height: var(--dw-size-control); font-size: var(--dw-font-size-16); }\\n.dw-icon-btn > .pi,\\n.dw-icon-btn > i { font-size: inherit; }\\n.dw-icon-btn--xs { width: 20px; height: 20px; font-size: var(--dw-font-size-10); border-radius: var(--dw-radius-sm); }\\n.dw-icon-btn--accent:hover:not(:disabled) { background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-icon-btn--danger:hover:not(:disabled) { background: var(--dw-danger-tint); color: var(--dw-danger-solid); }\\n.dw-icon-btn--outlined { border: 1px solid var(--dw-border); background: var(--dw-surface); }\\n.dw-icon-btn--toolbar { border-radius: var(--dw-radius-lg); color: var(--dw-text-label); }\\n.dw-icon-btn--attention { position: relative; color: var(--dw-attention-fg); }\\n.dw-icon-btn__dot {\\n position: absolute;\\n top: 5px;\\n right: 5px;\\n width: 7px;\\n height: 7px;\\n border: 1.5px solid var(--dw-surface);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-status-warning-solid);\\n}\\n.dw-icon-btn--outlined:hover:not(:disabled) { border-color: var(--dw-border-strong); background: var(--dw-surface-hover); color: var(--dw-text); }\\n.dw-icon-btn--hover-outlined:hover:not(:disabled) { border-color: var(--dw-border); background: var(--dw-surface); color: var(--dw-text); }\\n.dw-icon-btn.is-open { background: var(--dw-surface-pressed); color: var(--dw-text); }\\n.dw-icon-btn--outlined.is-open { border-color: var(--dw-border-strong); background: var(--dw-surface-hover); }\\n.dw-icon-btn--hover-outlined.is-open { border-color: var(--dw-border); background: var(--dw-surface); }\\n.dw-icon-btn--inverse.is-open { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); color: var(--dw-text-inverse); }\\n.dw-icon-btn.is-active { background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-icon-btn.is-active:hover:not(:disabled) { background: var(--dw-accent-tint-strong); color: var(--dw-accent); }\\n.dw-icon-btn--inverse { color: var(--dw-text-muted); }\\n.dw-icon-btn--inverse:hover:not(:disabled),\\n.dw-icon-btn--inverse.is-active { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); color: var(--dw-text-inverse); }\\n.dw-button-host {\\n display: inline-flex;\\n vertical-align: middle;\\n}\\n.dw-button-host--block,\\n.dw-button-host--block .dw-btn-wrap {\\n display: flex;\\n width: 100%;\\n}\\n.dw-btn-wrap { display: inline-flex; }\\n.dw-button-host--truncate,\\n.dw-button-host--truncate .dw-btn-wrap,\\n.dw-button-host--truncate .dw-btn { min-width: 0; max-width: 100%; }\\n.dw-button-host--truncate .dw-btn__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-btn__img {\\n width: 16px;\\n height: 16px;\\n object-fit: contain;\\n flex-shrink: 0;\\n}\\n.dw-btn__count {\\n font-variant-numeric: tabular-nums;\\n color: inherit;\\n opacity: 0.8;\\n}\\n.dw-btn--pill { border-radius: var(--dw-radius-full); }\\n.dw-btn--warn {\\n background: var(--dw-status-warning-solid);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n}\\n.dw-btn--success {\\n background: var(--dw-status-success-solid);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n}\\n.dw-btn--outlined.dw-btn--warn,\\n.dw-btn--outlined.dw-btn--success { background: var(--dw-surface); }\\n.dw-btn--outlined.dw-btn--warn { border-color: var(--dw-status-warning-border); color: var(--dw-status-warning-fg); }\\n.dw-btn--outlined.dw-btn--success { border-color: var(--dw-status-success-border); color: var(--dw-status-success-fg); }\\n.dw-btn--text.dw-btn--secondary.is-active,\\n.dw-btn--outlined.dw-btn--secondary.is-active,\\n.dw-btn--text.dw-btn--secondary.is-active:hover:not(:disabled),\\n.dw-btn--outlined.dw-btn--secondary.is-active:hover:not(:disabled) {\\n background: var(--dw-accent-tint);\\n border-color: var(--dw-border-accent);\\n color: var(--dw-accent-text);\\n}\\na.dw-btn.is-disabled,\\na.dw-icon-btn.is-disabled { pointer-events: none; }\\n.dw-btn .pi:not(.dw-btn__trailing) { font-size: inherit; }\\n.dw-btn .dw-btn__trailing { font-size: var(--dw-font-size-10); }\\n.dw-btn-group { display: inline-flex; align-items: stretch; }\\n.dw-btn-group > :not(:first-child) { margin-left: -1px; }\\n.dw-btn-group > :not(:first-child) .dw-btn {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n}\\n.dw-btn-group > :not(:last-child) .dw-btn {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n.dw-btn-group .dw-btn:hover,\\n.dw-btn-group .dw-btn:focus-visible,\\n.dw-btn-group .dw-btn.is-active { position: relative; z-index: 1; }\\n.dw-field {\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n min-width: 0;\\n}\\n.dw-field--inline {\\n flex-direction: row;\\n align-items: center;\\n gap: var(--dw-space-3);\\n}\\n.dw-field__label {\\n margin: 0;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-label);\\n}\\n.dw-field__required {\\n margin-left: 2px;\\n color: var(--dw-danger-solid);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-field__help {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-field__error {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-status-danger-fg);\\n}\\n.dw-form-row {\\n display: grid;\\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\\n gap: var(--dw-space-4);\\n}\\n.dw-form-actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: var(--dw-space-2);\\n}\\n.dw-input {\\n width: 100%;\\n min-height: var(--dw-size-control);\\n padding: 6px var(--dw-space-3);\\n border: 1px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-control);\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n box-shadow: var(--dw-shadow-xs);\\n transition: border-color var(--dw-dur-micro), box-shadow var(--dw-dur-micro);\\n}\\n.dw-input::placeholder {\\n color: var(--dw-text-muted);\\n}\\n.dw-input:hover:not(:disabled, :focus) {\\n border-color: var(--dw-border-hover);\\n}\\n.dw-input:focus {\\n outline: none;\\n border-color: var(--dw-focus-border);\\n box-shadow: var(--dw-focus-border-ring);\\n}\\n.dw-input:disabled {\\n background: var(--dw-surface-disabled);\\n color: var(--dw-text-muted);\\n}\\ntextarea.dw-input {\\n min-height: 72px;\\n resize: vertical;\\n}\\n.p-invalid,\\n.ng-invalid.ng-touched.p-inputtext,\\n.ng-invalid.ng-dirty.p-inputtext {\\n border-color: var(--dw-danger-solid) !important;\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.p-select.p-invalid.p-focus,\\n.p-inputtext.p-invalid:focus,\\n.p-inputtext.p-invalid.p-focus,\\n.ng-invalid.ng-touched.p-inputtext:focus,\\n.ng-invalid.ng-dirty.p-inputtext:focus {\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.dw-search {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n min-width: 220px;\\n}\\n.dw-search .p-inputtext,\\n.dw-search input {\\n width: 100%;\\n padding-left: 32px;\\n}\\n.dw-search > .pi,\\n.dw-search__icon {\\n position: absolute;\\n left: 10px;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-14);\\n pointer-events: none;\\n}\\n.dw-dropzone {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-6);\\n border: 1px dashed var(--dw-border-strong);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface-section);\\n color: var(--dw-text-secondary);\\n text-align: center;\\n cursor: pointer;\\n transition: border-color var(--dw-dur-micro), background var(--dw-dur-micro);\\n}\\n.dw-dropzone:hover,\\n.dw-dropzone.is-dragover {\\n border-color: var(--dw-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\nbody .p-inputtext,\\nbody .p-select-label,\\nbody .p-multiselect-label,\\nbody .p-autocomplete-input,\\nbody .p-datepicker-input,\\nbody .p-inputnumber-input,\\nbody .p-textarea,\\nbody .p-select-option,\\nbody .p-multiselect-option,\\nbody .p-treeselect-label {\\n font-size: var(--dw-font-size-14);\\n}\\n.p-textarea.dw-textarea-grow {\\n field-sizing: content;\\n min-height: calc(var(--dw-textarea-rows, 3) * 1lh + 2 * var(--p-form-field-padding-y) + 2px);\\n}\\ndw-field.dw-field { display: flex; }\\ndw-field.dw-field--inline { align-items: flex-start; }\\ndw-field.dw-field--inline .dw-field__label-row { flex: none; padding-top: 10px; }\\ndw-field.dw-field--inline:has(.dw-field__control :is(.p-inputtext-sm, .p-textarea-sm, .p-select-sm, .p-multiselect-sm, .p-inputnumber-sm, .p-autocomplete-sm, .p-datepicker-sm, .dw-search--sm)) .dw-field__label-row { padding-top: 6px; }\\ndw-field.dw-field--inline .dw-field__control { min-height: var(--dw-size-control-lg); }\\ndw-field.dw-field--inline:has(.dw-field__control :is(.p-inputtext-sm, .p-textarea-sm, .p-select-sm, .p-multiselect-sm, .p-inputnumber-sm, .p-autocomplete-sm, .p-datepicker-sm, .dw-search--sm)) .dw-field__control { min-height: var(--dw-size-control-sm); }\\n.dw-field__label-row {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: var(--dw-space-2);\\n min-width: 0;\\n}\\n.dw-field__label { display: inline-flex; align-items: center; gap: var(--dw-space-1); }\\n.dw-field__optional { color: var(--dw-text-muted); font-weight: var(--dw-font-weight-regular); }\\n.dw-field__info { color: var(--dw-text-muted); font-size: var(--dw-font-size-12); cursor: help; }\\n.dw-field__info:hover,\\n.dw-field__info:focus-visible { color: var(--dw-accent); outline: none; }\\n.dw-field__actions { display: inline-flex; align-items: center; gap: var(--dw-space-2); font-size: var(--dw-font-size-12); }\\n.dw-field__actions:empty { display: none; }\\n.dw-field__body { display: flex; flex-direction: column; gap: 6px; flex: 1 1 auto; min-width: 0; }\\n.dw-field__control { position: relative; display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-field__control > :first-child:not([dwFieldSuffix]) { flex: 1 1 auto; min-width: 0; }\\n.dw-field__control > :is(p-toggleswitch, p-checkbox, p-radiobutton):first-child:not([dwFieldSuffix]) { flex: none; }\\n.dw-field__control > input,\\n.dw-field__control > textarea,\\n.dw-field__control > p-select,\\n.dw-field__control > p-multiselect,\\n.dw-field__control > p-inputnumber,\\n.dw-field__control > p-datepicker,\\n.dw-field__control > p-autocomplete { width: 100%; }\\n.dw-field__error { display: inline-flex; align-items: center; gap: var(--dw-space-1); }\\n.dw-field__error > :is(i, .pi) { display: none; }\\n.dw-field__footer { display: flex; justify-content: space-between; gap: var(--dw-space-2); }\\n.dw-field__counter { margin-left: auto; color: var(--dw-text-muted); font-size: var(--dw-font-size-11); font-variant-numeric: tabular-nums; }\\n.dw-field__counter.is-over { color: var(--dw-status-danger-fg); }\\n.dw-field__readonly {\\n min-height: var(--dw-size-control);\\n padding: 6px 0;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n overflow-wrap: anywhere;\\n}\\n.dw-field.is-invalid .dw-field__control .p-inputtext,\\n.dw-field.is-invalid .dw-field__control .dw-input,\\n.dw-field.is-invalid .dw-field__control .p-select,\\n.dw-field.is-invalid .dw-field__control .p-multiselect,\\n.dw-field.is-invalid .dw-field__control textarea {\\n border-color: var(--dw-danger-solid);\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.dw-field.is-invalid .dw-field__control .p-inputtext:focus,\\n.dw-field.is-invalid .dw-field__control .dw-input:focus,\\n.dw-field.is-invalid .dw-field__control textarea:focus,\\n.dw-field.is-invalid .dw-field__control .p-select.p-focus,\\n.dw-field.is-invalid .dw-field__control .p-multiselect.p-focus {\\n border-color: var(--dw-danger-solid) !important;\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.dw-field.is-disabled { opacity: 0.6; }\\n.dw-form-section-header {\\n display: flex;\\n align-items: flex-end;\\n justify-content: space-between;\\n gap: var(--dw-space-3);\\n padding-bottom: var(--dw-space-2);\\n margin-top: var(--dw-space-2);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-form-section-header p { margin: 0; }\\ndw-search-input.dw-search { width: 400px; max-width: 100%; min-width: min(220px, 100%); }\\ndw-search-input.dw-search--block { width: 100%; }\\n.dw-search.dw-search--collapsed { width: auto; min-width: 0; }\\n.dw-search.dw-search--expanded .dw-search__input { animation: dw-search-open var(--dw-dur-enter) var(--dw-ease); }\\n@keyframes dw-search-open {\\n from {\\n clip-path: inset(0 0 0 100%);\\n opacity: 0;\\n }\\n}\\n.dw-search__input { padding-right: 32px; }\\n.dw-search--icon-left .dw-search__input { padding-left: 32px; padding-right: 32px; }\\n.dw-search--sm .dw-search__input { min-height: var(--dw-size-control-sm); padding-top: 3px; padding-bottom: 3px; font-size: var(--dw-font-size-12); }\\n.dw-search--md .dw-search__input { min-height: 0; padding-top: 6px; padding-bottom: 6px; line-height: var(--dw-line-height-20); }\\n.dw-search--lg .dw-search__input { min-height: var(--dw-size-control-lg); }\\n.dw-search__icon { position: absolute; color: var(--dw-text-muted); font-size: var(--dw-font-size-12); pointer-events: none; }\\n.dw-search > .dw-search__icon--left { left: 11px; right: auto; }\\n.dw-search > .dw-search__icon--right { left: auto; right: 11px; }\\n.dw-search--icon-right .dw-search__input { padding-left: 11px; }\\n.dw-search__clear {\\n position: absolute;\\n right: 6px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 20px;\\n height: 20px;\\n padding: 0;\\n border: 0;\\n border-radius: var(--dw-radius-sm);\\n background: transparent;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-10);\\n cursor: pointer;\\n}\\n.dw-search__clear:hover { background: var(--dw-surface-pressed); color: var(--dw-text); }\\n.dw-search__clear:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-file-dropzone-host { display: block; }\\n.dw-dropzone.is-disabled { opacity: 0.6; cursor: not-allowed; }\\n.dw-dropzone:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-dropzone__icon { color: var(--dw-accent); font-size: var(--dw-font-size-24); }\\n.dw-dropzone__title { margin: 0; color: var(--dw-text); font-size: var(--dw-font-size-14); }\\n.dw-dropzone__hint { margin: 0; font-size: var(--dw-font-size-12); }\\n.dw-dropzone__types { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--dw-space-1); }\\n.dw-dropzone__type-icon { width: 12px; height: 12px; }\\n.dw-dropzone__extra:empty { display: none; }\\n.dw-file-list { display: flex; flex-direction: column; gap: var(--dw-space-1); }\\n.dw-file-list__item {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-2) var(--dw-space-3);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface);\\n}\\n.dw-file-list__file-icon { flex: none; width: 18px; height: 18px; color: var(--dw-text-muted); }\\n.dw-file-list__meta { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }\\n.dw-file-list__name { overflow: hidden; color: var(--dw-text); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-medium); text-overflow: ellipsis; white-space: nowrap; }\\n.dw-file-list__size { color: var(--dw-text-secondary); font-size: var(--dw-font-size-11); }\\n.dw-file-list__error { color: var(--dw-status-danger-fg); font-size: var(--dw-font-size-11); }\\n.dw-file-list__status { flex: none; font-size: var(--dw-font-size-14); color: var(--dw-text-muted); }\\n.dw-file-list__item.is-success .dw-file-list__status { color: var(--dw-status-success-solid); }\\n.dw-file-list__item.is-uploading .dw-file-list__status { color: var(--dw-accent); }\\n.dw-file-list__item.is-failed .dw-file-list__status,\\n.dw-file-list__item.is-unsupported .dw-file-list__status { color: var(--dw-status-danger-solid); }\\n.dw-file-list__item.is-toolarge .dw-file-list__status { color: var(--dw-status-warning-solid); }\\n.dw-repeat-row {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 64px;\\n align-items: center;\\n gap: var(--dw-space-2);\\n}\\n.p-select.dw-select-readonly.p-disabled {\\n background: var(--dw-surface-pressed);\\n opacity: 1;\\n cursor: default;\\n}\\n.p-select.dw-select-readonly.p-disabled .p-select-label {\\n color: var(--dw-text);\\n opacity: 1;\\n}\\n.p-select.dw-select-readonly.p-disabled .p-select-dropdown {\\n display: none;\\n}\\np-slider {\\n display: block;\\n width: 100%;\\n}\\n.p-select-sm .p-select-label,\\n.p-multiselect-sm .p-multiselect-label {\\n line-height: var(--dw-line-height-16);\\n}\\n.p-textarea.p-textarea-sm,\\n.p-inputtext.p-inputtext-sm {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-input-group { display: flex; align-items: stretch; min-width: 0; }\\n.dw-input-group > :not(.dw-input-group__addon) { flex: 1 1 auto; min-width: 0; }\\n.dw-input-group > .dw-input-group__addon:first-child > button {\\n border-inline-end-width: 0;\\n border-start-end-radius: 0;\\n border-end-end-radius: 0;\\n}\\n.dw-input-group > .dw-input-group__addon:first-child + * .p-inputtext,\\n.dw-input-group > .dw-input-group__addon:first-child + .p-inputtext {\\n border-start-start-radius: 0;\\n border-end-start-radius: 0;\\n}\\n.dw-input-reveal { position: relative; min-width: 0; }\\n.dw-input-reveal > input { width: 100%; padding-inline-end: calc(var(--dw-space-2) + 28px); }\\n.dw-input-reveal > dw-icon-button {\\n position: absolute;\\n inset-inline-end: var(--dw-space-1);\\n top: 50%;\\n transform: translateY(-50%);\\n}\\n.p-datepicker-panel:not(.p-datepicker-panel-inline) { min-width: 0 !important; }\\n.p-datepicker-panel .p-datepicker-calendar-container { min-height: 328px; }\\n.p-overlay:has(> .p-overlay-content > .p-select-overlay) { width: 0; }\\n.p-select-overlay .p-select-option { min-width: 0; }\\n.p-select-overlay .p-select-option > [data-pc-section=\\\"optionlabel\\\"] {\\n min-width: 0;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.dw-check {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n}\\n.dw-check > label { margin: 0; cursor: pointer; }\\n:is(p-radiobutton, p-checkbox, p-toggleswitch) + label { margin-bottom: 0; cursor: pointer; }\\n.p-select-sm .p-select-option,\\n.p-multiselect-sm .p-multiselect-option,\\n.dw-select-panel--sm .p-select-option,\\n.dw-select-panel--sm .p-multiselect-option {\\n padding: 5px 10px;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.p-select-sm .p-select-empty-message,\\n.p-multiselect-sm .p-multiselect-empty-message,\\n.dw-select-panel--sm .p-select-empty-message,\\n.dw-select-panel--sm .p-multiselect-empty-message {\\n padding: 5px 10px;\\n font-size: var(--dw-font-size-12);\\n}\\np-toggleswitch.dw-switch--sm,\\n.p-toggleswitch.dw-switch--sm {\\n --p-toggleswitch-width: 2rem;\\n --p-toggleswitch-height: 1.125rem;\\n --p-toggleswitch-handle-size: 0.75rem;\\n --p-toggleswitch-gap: 0.1875rem;\\n}\\np-toggleswitch.dw-switch--xs,\\n.p-toggleswitch.dw-switch--xs {\\n --p-toggleswitch-width: 1.75rem;\\n --p-toggleswitch-height: 1rem;\\n --p-toggleswitch-handle-size: 0.75rem;\\n --p-toggleswitch-gap: 0.125rem;\\n --p-toggleswitch-background: var(--dw-fill-muted);\\n --p-toggleswitch-hover-background: var(--dw-fill-muted);\\n --p-toggleswitch-checked-background: var(--dw-accent-hover);\\n --p-toggleswitch-checked-hover-background: var(--dw-accent-hover);\\n --p-toggleswitch-border-width: 0;\\n --p-toggleswitch-shadow: none;\\n}\\n.dw-switch--xs .p-toggleswitch-handle { box-shadow: 0 1px 2px var(--dw-alpha-black-20); }\\n.dw-var-field {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-1_5);\\n padding: var(--dw-space-3) var(--dw-space-5);\\n}\\n.dw-var-list > .dw-var-field + .dw-var-field { border-top: 1px solid var(--dw-border-subtle); }\\n.dw-var-field__label { display: flex; align-items: baseline; gap: var(--dw-space-2); min-width: 0; line-height: normal; }\\n.dw-var-field__name {\\n min-width: 0;\\n overflow: hidden;\\n color: var(--dw-text-strong);\\n font-size: var(--dw-font-size-13);\\n font-weight: var(--dw-font-weight-semibold);\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.dw-var-field__label .dw-badge--label { padding: 0 5px; line-height: var(--dw-line-height-16); }\\n.dw-var-field__fixed {\\n display: inline-flex;\\n align-items: center;\\n gap: 3px;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-11);\\n}\\n.dw-var-field__fixed .pi { font-size: var(--dw-font-size-10); }\\n.dw-var-field__default {\\n display: flex;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-var-field__default b {\\n min-width: 0;\\n overflow: hidden;\\n color: var(--dw-text);\\n font-weight: var(--dw-font-weight-medium);\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\nbody .dw-var-field .p-inputtext,\\nbody .dw-var-field .p-textarea { width: 100%; padding: 7px 11px; line-height: var(--dw-line-height-20); }\\nbody .dw-var-field .p-inputtext::placeholder,\\nbody .dw-var-field .p-textarea::placeholder { color: var(--dw-text-secondary); }\\nbody .dw-var-field .p-inputtext:disabled,\\nbody .dw-var-field .p-textarea:disabled {\\n background: var(--dw-surface-section);\\n color: var(--dw-text-secondary);\\n opacity: 1;\\n}\\nbody .dw-var-field .p-textarea {\\n resize: vertical;\\n font-size: var(--dw-font-size-13);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-var-field p-toggleswitch { align-self: flex-start; margin: 2px 0; }\\n.dw-check-toggle-host { display: inline-flex; flex: none; }\\n.dw-check-toggle {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-2) 10px;\\n border: 0;\\n border-radius: var(--dw-radius-md);\\n background: none;\\n color: var(--dw-text-label);\\n font: inherit;\\n font-size: var(--dw-font-size-12);\\n white-space: nowrap;\\n cursor: pointer;\\n user-select: none;\\n}\\n.dw-check-toggle:hover { background: var(--dw-surface-pressed); color: var(--dw-text-strong); }\\n.dw-check-toggle:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-check-toggle__box {\\n position: relative;\\n flex: none;\\n width: 16px;\\n height: 16px;\\n border: 1.5px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface);\\n transition: background-color var(--dw-dur-micro) var(--dw-ease), border-color var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-check-toggle:hover .dw-check-toggle__box { border-color: var(--dw-border-hover); }\\n.dw-check-toggle.is-on .dw-check-toggle__box { border-color: var(--dw-accent); background: var(--dw-accent); }\\n.dw-check-toggle.is-on .dw-check-toggle__box::after {\\n content: '';\\n position: absolute;\\n top: 1.5px;\\n left: 4.5px;\\n width: 4px;\\n height: 8px;\\n border: solid var(--dw-surface);\\n border-width: 0 1.75px 1.75px 0;\\n transform: rotate(45deg);\\n}\\n.dw-check-toggle.is-on .dw-check-toggle__label { color: var(--dw-text-strong); font-weight: var(--dw-font-weight-medium); }\\n.dw-datepicker--compact .p-datepicker-header { padding: 0 0 var(--dw-space-2); }\\n.dw-datepicker--compact .p-datepicker-title,\\n.dw-datepicker--compact .p-datepicker-select-month,\\n.dw-datepicker--compact .p-datepicker-select-year { font-size: var(--dw-font-size-14); font-weight: var(--dw-font-weight-semibold); }\\n.dw-datepicker--compact .p-datepicker-weekday { font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-medium); color: var(--dw-text-muted); }\\n.dw-datepicker--compact .p-datepicker-day-cell { padding: 1px; }\\n.dw-datepicker--compact .p-datepicker-day { width: 32px; height: 32px; font-size: var(--dw-font-size-12); }\\n.dw-datepicker--compact .p-datepicker-time-picker { padding: var(--dw-space-2) 0 0; gap: var(--dw-space-1); font-size: var(--dw-font-size-14); }\\n.dw-datepicker--compact .p-datepicker-time-picker .p-button { width: 24px; height: 24px; }\\n.config-form-container { display: flex; flex-direction: column; height: 100%; margin: 0; background-color: var(--dw-surface); }\\n.config-form-body {\\n display: flex;\\n flex: 1;\\n flex-direction: column;\\n gap: var(--dw-space-4);\\n overflow-y: auto;\\n padding: var(--dw-space-5) var(--dw-space-6);\\n}\\n.config-form-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: var(--dw-space-3);\\n min-height: 64px;\\n padding: var(--dw-space-3) var(--dw-space-6);\\n border-top: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.config-form-footer__actions { display: flex; align-items: center; gap: var(--dw-space-2); margin-left: auto; }\\n.config-form-footer__divider { width: 1px; height: 20px; margin: 0 var(--dw-space-1); background: var(--dw-border); }\\n.config-form-body .toggle-field { display: flex; align-items: center; min-height: var(--dw-size-control); }\\n.config-form-body .toggle-label { margin: 0; cursor: pointer; }\\n.config-form-host { display: flex; flex: 1; flex-direction: column; min-height: 0; }\\n.dw-pill {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 2px var(--dw-space-2);\\n border: 1px solid var(--dw-status-neutral-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-status-neutral-bg);\\n color: var(--dw-status-neutral-fg);\\n font-size: var(--dw-font-size-12);\\n line-height: 18px;\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n}\\n.dw-pill--primary,\\n.dw-pill--info {\\n background: var(--dw-status-info-bg);\\n border-color: var(--dw-status-info-border);\\n color: var(--dw-status-info-fg);\\n}\\n.dw-pill--success {\\n background: var(--dw-status-success-bg);\\n border-color: var(--dw-status-success-border);\\n color: var(--dw-status-success-fg);\\n}\\n.dw-pill--warn,\\n.dw-pill--warning {\\n background: var(--dw-status-warning-bg);\\n border-color: var(--dw-status-warning-border);\\n color: var(--dw-status-warning-fg);\\n}\\n.dw-pill--danger {\\n background: var(--dw-status-danger-bg);\\n border-color: var(--dw-status-danger-border);\\n color: var(--dw-status-danger-fg);\\n}\\n.dw-pill--neutral {\\n background: var(--dw-status-neutral-bg);\\n border-color: var(--dw-status-neutral-border);\\n color: var(--dw-status-neutral-fg);\\n}\\n.dw-pill__dot,\\n.dw-status-dot {\\n flex: none;\\n width: 6px;\\n height: 6px;\\n border-radius: var(--dw-radius-round);\\n background: currentColor;\\n}\\n.dw-status-dot--success { --dw-status-dot-color: var(--dw-status-success-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--warning { --dw-status-dot-color: var(--dw-status-warning-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--danger { --dw-status-dot-color: var(--dw-status-danger-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--info { --dw-status-dot-color: var(--dw-status-info-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--neutral { --dw-status-dot-color: var(--dw-status-neutral-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot.dw-status-dot--hollow {\\n background: transparent;\\n box-shadow: inset 0 0 0 1.5px var(--dw-status-dot-color, currentColor);\\n}\\n.dw-status-dot.dw-status-dot--live { position: relative; }\\n.dw-status-dot.dw-status-dot--live::after {\\n content: '';\\n position: absolute;\\n inset: -4px;\\n border-radius: inherit;\\n background: var(--dw-status-dot-color, currentColor);\\n opacity: 0;\\n animation: dw-status-dot-ping var(--dw-dur-loop) ease-out infinite;\\n}\\n@keyframes dw-status-dot-ping {\\n 0% { transform: scale(0.4); opacity: 0.45; }\\n 100% { transform: scale(1.4); opacity: 0; }\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .dw-status-dot.dw-status-dot--live::after { animation: none; }\\n}\\n.dw-tag {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n max-width: 100%;\\n padding: 2px var(--dw-space-2);\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-semibold);\\n white-space: nowrap;\\n}\\n.dw-tag--accent {\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-tag--add {\\n border: 1px dashed var(--dw-border-strong);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-tag--add:hover {\\n border-color: var(--dw-accent);\\n color: var(--dw-accent);\\n}\\n.dw-chip {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 3px 6px 3px 10px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n}\\n.dw-chip.dw-chip--subtle { color: var(--dw-text-secondary); font-weight: var(--dw-font-weight-regular); }\\n.dw-chip.dw-chip--code {\\n padding: 1px var(--dw-space-2);\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface-section);\\n font-family: var(--dw-font-mono);\\n font-weight: var(--dw-font-weight-regular);\\n}\\n.dw-chip.dw-chip--code.dw-chip--selectable:hover:not(.is-selected) { background: var(--dw-surface-pressed); }\\n.dw-chip > .pi,\\n.dw-pill > .pi { font-size: 1em; }\\n.dw-chip.is-selected,\\n.dw-chip--accent {\\n border-color: var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-chip__remove {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 14px;\\n height: 14px;\\n padding: 0;\\n border: 0;\\n border-radius: var(--dw-radius-sm);\\n background: transparent;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-10);\\n cursor: pointer;\\n}\\n.dw-chip__remove:hover {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n}\\n.dw-chip__remove > .pi { font-size: inherit; }\\n.dw-chip__remove.dw-chip__remove--busy { cursor: default; pointer-events: none; }\\n.dw-chip__remove.dw-chip__remove--busy::before { font-size: var(--dw-font-size-10); }\\n.dw-badge {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-1);\\n min-width: 18px;\\n height: 18px;\\n padding: 0 6px;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n line-height: 1;\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-badge--accent {\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-badge--danger {\\n background: var(--dw-status-danger-bg);\\n color: var(--dw-status-danger-fg);\\n}\\n.dw-status-pill-host { display: inline-flex; max-width: 100%; }\\n.dw-pill--sm { padding: 1px 6px; font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-16); }\\n.dw-pill__label { overflow: hidden; text-overflow: ellipsis; }\\n.dw-pill__count { font-weight: var(--dw-font-weight-semibold); font-variant-numeric: tabular-nums; }\\n.dw-pill-spacer { display: inline-block; width: 1px; height: 18px; }\\n.dw-pill--selectable {\\n cursor: pointer;\\n transition: box-shadow var(--dw-dur-micro), border-color var(--dw-dur-micro);\\n}\\n.dw-pill--selectable:hover { border-color: currentColor; }\\n.dw-pill--selectable.is-selected { box-shadow: 0 0 0 2px var(--dw-surface), 0 0 0 3px currentColor; }\\n.dw-pill--selectable:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-pill__dot--pulse { animation: dw-pulse var(--dw-dur-loop) var(--dw-ease-inout) infinite; }\\n@keyframes dw-pulse {\\n 0%, 100% { opacity: 1; transform: scale(1); }\\n 50% { opacity: 0.35; transform: scale(0.8); }\\n}\\n.dw-badge__img { width: 12px; height: 12px; flex-shrink: 0; object-fit: contain; }\\n.dw-badge--label {\\n height: auto;\\n padding: 1px 6px;\\n border-radius: var(--dw-radius-sm);\\n font-weight: var(--dw-font-weight-medium);\\n line-height: var(--dw-line-height-16);\\n white-space: nowrap;\\n}\\n.dw-badge.dw-badge--md { min-width: 18px; height: 18px; font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-regular); }\\n.dw-badge--label.dw-badge--md { height: auto; padding: 1px var(--dw-space-2); font-weight: var(--dw-font-weight-medium); }\\n.dw-badge.dw-badge--bordered { border: 1px solid var(--dw-border); }\\n.dw-badge--label.dw-badge--bordered { padding: 0 5px; }\\n.dw-badge--label.dw-badge--md.dw-badge--bordered { padding: 0 7px; }\\n.dw-badge--neutral { background: var(--dw-surface-pressed); color: var(--dw-text-secondary); }\\n.dw-badge--muted { background: var(--dw-surface-pressed); color: var(--dw-text-muted); border: 1px solid var(--dw-border); }\\n.dw-badge--warning { background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-badge--success { background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-badge--workflow { background: var(--dw-entity-workflow-bg); color: var(--dw-entity-workflow-fg); }\\n.dw-badge--reasoning { background: var(--dw-entity-reasoning-bg); color: var(--dw-entity-reasoning-fg); }\\n.dw-badge i { font-size: var(--dw-font-size-10); }\\n.dw-tag-host { display: inline-flex; max-width: 100%; min-width: 0; }\\n.dw-tag--user {\\n max-width: 100%;\\n border: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-weight: var(--dw-font-weight-medium);\\n}\\n.dw-tag__dot {\\n flex: none;\\n width: 8px;\\n height: 8px;\\n border-radius: 2px;\\n}\\n.dw-tag .dw-tag__icon { display: inline-flex; flex: none; font-size: var(--dw-font-size-12); line-height: 1; }\\n.dw-tag__label { overflow: hidden; text-overflow: ellipsis; }\\n.dw-tag-options .p-autocomplete-list { padding: 0; }\\n.dw-tag-options .p-autocomplete-option { padding-block: var(--dw-space-1); }\\n.dw-tag--clickable { cursor: pointer; }\\n.dw-tag--clickable:hover { border-color: var(--dw-border-strong); }\\n.dw-tag--clickable:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-tag-list {\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n}\\n.dw-tag-list--compact { flex-wrap: nowrap; }\\n.dw-tag-list--compact > dw-tag { flex: 0 1 auto; min-width: 0; }\\n.dw-tag-list--compact .dw-tag--user { min-width: 0; }\\n.dw-tag-list--compact .dw-tag__label { min-width: 0; white-space: nowrap; }\\n.dw-tag-list__add { flex-shrink: 0; }\\n.dw-tag-list--compact.dw-tag-list--measuring { overflow: hidden; }\\n.dw-tag-list--compact.dw-tag-list--measuring > dw-tag { flex-shrink: 0; }\\n.dw-tag-list__add.dw-icon-btn--labelled { gap: 2px; width: auto; padding: 0 var(--dw-space-1); font-size: var(--dw-font-size-11); font-weight: var(--dw-font-weight-medium); }\\n.dw-tag-list__add > .pi { font-size: var(--dw-font-size-10); }\\n.dw-tag--more {\\n border: 1px solid var(--dw-border);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-tag--more:hover { color: var(--dw-accent); border-color: var(--dw-border-accent); }\\n.dw-chip-host { display: inline-flex; max-width: 100%; }\\n.dw-chip--selectable { cursor: pointer; padding-right: 10px; }\\n.dw-chip--selectable:hover { border-color: var(--dw-border-strong); }\\n.dw-chip--selectable:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-chip.dw-chip--md {\\n gap: var(--dw-space-2);\\n min-height: var(--dw-size-control);\\n padding: 0 var(--dw-space-4);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-chip.dw-chip--filled.is-selected {\\n border-color: var(--dw-accent);\\n background: var(--dw-accent-tint-strong);\\n color: var(--dw-accent-text);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-chip__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-chip__value { color: var(--dw-text-secondary); font-weight: var(--dw-font-weight-semibold); font-variant-numeric: tabular-nums; }\\n.dw-chip__img { width: 14px; height: 14px; object-fit: contain; }\\n.dw-chip.dw-chip--danger { border-color: var(--dw-status-danger-border); background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-chip.dw-chip--warning { border-color: var(--dw-status-warning-border); background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-chip.dw-chip--success { border-color: var(--dw-status-success-border); background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-chip.dw-chip--info,\\n.dw-chip.dw-chip--primary { border-color: var(--dw-status-info-border); background: var(--dw-status-info-bg); color: var(--dw-status-info-fg); }\\n.dw-swatches {\\n display: grid;\\n grid-template-columns: repeat(8, var(--dw-size-control-sm));\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-1);\\n}\\n.dw-swatch {\\n display: grid;\\n place-items: center;\\n width: var(--dw-size-control-sm);\\n height: var(--dw-size-control-sm);\\n padding: 0;\\n border: none;\\n border-radius: var(--dw-radius-full);\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-12);\\n cursor: pointer;\\n transition: transform var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-swatch:hover { transform: scale(1.08); }\\n.dw-swatch--selected,\\n.dw-swatch:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--dw-surface), 0 0 0 4px var(--dw-accent); }\\n.dw-tag-color-btn-host { display: inline-flex; flex: none; }\\n.dw-tag-color-btn {\\n display: inline-grid;\\n place-items: center;\\n width: var(--dw-size-control);\\n min-height: var(--dw-size-control-sm);\\n padding: 0;\\n border: 1px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface-pressed);\\n font-size: var(--dw-font-size-14);\\n cursor: pointer;\\n}\\n.dw-tag-color-btn__icon { display: inline-flex; line-height: 1; }\\n.dw-tag-color-btn--editable:hover { background: var(--dw-fill-subtle); }\\n.dw-tag-color-btn:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-tag-color-btn[aria-disabled=\\\"true\\\"] { background: var(--dw-surface-disabled); cursor: not-allowed; }\\n.dw-tag-color-btn[aria-disabled=\\\"true\\\"] .dw-tag-color-btn__icon { opacity: 0.45; }\\n.dw-card {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n min-width: 0;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-xs);\\n}\\n.dw-card__header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n padding: var(--dw-space-4) var(--dw-space-4) 0;\\n}\\n.dw-card__header:last-child { padding-bottom: var(--dw-space-4); }\\n.dw-card__title {\\n min-width: 0;\\n}\\n.dw-card__desc {\\n margin: 0;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-card__body {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-4);\\n flex: 1 1 auto;\\n}\\n.dw-card__footer {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-4);\\n border-top: 1px solid var(--dw-border);\\n}\\n.dw-card--hover {\\n cursor: pointer;\\n transition: border-color var(--dw-dur-enter) var(--dw-ease), box-shadow var(--dw-dur-enter) var(--dw-ease), transform var(--dw-dur-enter) var(--dw-ease);\\n}\\n.dw-card--hover:hover {\\n border-color: var(--dw-border-strong);\\n box-shadow: var(--dw-shadow-card-hover);\\n transform: translateY(-2px);\\n}\\n.dw-card--option.dw-card--hover:hover { transform: none; }\\n.dw-card--hover:focus-visible {\\n outline: none;\\n border-color: var(--dw-accent);\\n box-shadow: var(--dw-focus-ring);\\n}\\n.dw-card.is-selected,\\n.dw-card--selected {\\n border-color: var(--dw-accent);\\n background: var(--dw-surface-selected);\\n}\\n.dw-card--flat { box-shadow: none; }\\n.dw-card--sm .dw-card__header { gap: var(--dw-space-2); padding: var(--dw-space-3) var(--dw-space-3) 0; }\\n.dw-card--sm .dw-card__header:last-child { padding-bottom: var(--dw-space-3); }\\n.dw-card--sm .dw-card__body { gap: var(--dw-space-1); padding: var(--dw-space-2) var(--dw-space-3) var(--dw-space-3); }\\n.dw-card--sm.dw-card--hover:hover { transform: none; }\\n.dw-stat-card {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-1);\\n padding: var(--dw-space-4);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n}\\n.dw-stat-card__label {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-stat-card--with-icon {\\n display: grid;\\n grid-template-columns: auto 1fr;\\n align-items: center;\\n column-gap: var(--dw-space-3);\\n}\\n.dw-stat-card--with-icon > :not(.dw-stat-card__icon) { grid-column: 2; }\\n.dw-stat-card__icon { grid-row: 1 / span 3; }\\n.dw-stat-card__icon img { width: 20px; height: 20px; object-fit: contain; }\\n.pi.dw-stat-card__info {\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n cursor: help;\\n}\\n.dw-stat-card__value {\\n font-size: var(--dw-font-size-20);\\n line-height: var(--dw-line-height-28);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-stat-card__label-text { min-width: 0; }\\n.dw-stat-card__label-end {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n flex-shrink: 0;\\n margin-left: auto;\\n}\\n.dw-stat-card__label-end:empty { display: none; }\\n.dw-stat-card__value-suffix {\\n margin-left: var(--dw-space-1);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-muted);\\n}\\n.dw-stat-card.dw-stat-card--dashed {\\n border-style: dashed;\\n border-color: var(--dw-border-strong);\\n background: var(--dw-surface-hover);\\n}\\n.dw-stat-card.dw-card--sm { gap: var(--dw-space-0_5); padding: var(--dw-space-2) var(--dw-space-3); }\\n.dw-stat-card.dw-card--sm .dw-stat-card__value {\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-stat-card--caps-label .dw-stat-card__label {\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n}\\n.dw-tile-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));\\n gap: var(--dw-space-3);\\n}\\n.dw-tile-host {\\n display: flex;\\n min-width: 0;\\n}\\n.dw-tile-host > .dw-tile {\\n flex: 1;\\n min-width: 0;\\n}\\n.dw-tile__count {\\n display: inline-flex;\\n align-items: baseline;\\n gap: 6px;\\n}\\n.dw-tile__count b {\\n font-variant-numeric: tabular-nums;\\n}\\n.dw-box {\\n padding: var(--dw-space-4);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n}\\n.dw-box--muted {\\n border-color: var(--dw-border);\\n background: var(--dw-surface-section);\\n}\\n.dw-box--accent {\\n border-color: var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n}\\n.dw-box--compact { padding: var(--dw-space-3); }\\n.dw-section {\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n}\\n.dw-section__header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n width: 100%;\\n padding: var(--dw-space-3) var(--dw-space-4);\\n border: 0;\\n background: transparent;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-semibold);\\n text-align: left;\\n cursor: pointer;\\n}\\n.dw-section__chevron {\\n margin-left: auto;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n transition: transform var(--dw-dur-enter) var(--dw-ease);\\n}\\n.dw-section.is-open .dw-section__chevron { transform: rotate(180deg); }\\n.dw-section__body {\\n padding: 0 var(--dw-space-4) var(--dw-space-4);\\n}\\n.dw-divider {\\n display: block;\\n flex-shrink: 0;\\n align-self: stretch;\\n height: 1px;\\n margin: var(--dw-space-3) 0;\\n border: 0;\\n background: var(--dw-border);\\n}\\n.dw-divider--vertical {\\n display: inline-block;\\n align-self: stretch;\\n width: 1px;\\n height: auto;\\n margin: 0 var(--dw-space-2);\\n}\\n.dw-divider--vertical.dw-divider--fixed { align-self: center; }\\n.dw-divider--space-none { margin: 0; }\\n.dw-divider--space-sm { margin: var(--dw-space-1) 0; }\\n.dw-divider--space-lg { margin: var(--dw-space-4) 0; }\\n.dw-divider--vertical.dw-divider--space-none { margin: 0; }\\n.dw-divider--vertical.dw-divider--space-sm { margin: 0 var(--dw-space-1); }\\n.dw-divider--vertical.dw-divider--space-lg { margin: 0 var(--dw-space-4); }\\n.dw-empty-state {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-10) var(--dw-space-6);\\n text-align: center;\\n color: var(--dw-text-secondary);\\n}\\n.dw-empty-state__icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 48px;\\n height: 48px;\\n margin-bottom: var(--dw-space-2);\\n border-radius: var(--dw-radius-xl);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent);\\n font-size: var(--dw-font-size-20);\\n}\\n.dw-empty-state__title {\\n margin: 0;\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-empty-state__text {\\n max-width: 48ch;\\n margin: 0;\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-empty-state--compact { padding: var(--dw-space-6) var(--dw-space-4); }\\n.dw-banner {\\n display: flex;\\n align-items: flex-start;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3);\\n border: 1px solid var(--dw-status-info-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-status-info-bg);\\n color: var(--dw-status-info-fg);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-banner--success { border-color: var(--dw-status-success-border); background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-banner--warning { border-color: var(--dw-status-warning-border); background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-banner--danger { border-color: var(--dw-status-danger-border); background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-banner--neutral { border-color: var(--dw-border); background: var(--dw-surface-section); color: var(--dw-text-secondary); }\\n.dw-avatar {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n width: 32px;\\n height: 32px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n overflow: hidden;\\n}\\n.dw-avatar--sm { width: 24px; height: 24px; border-radius: var(--dw-radius-md); font-size: var(--dw-font-size-10); }\\n.dw-avatar--lg { width: 40px; height: 40px; border-radius: var(--dw-radius-xl); font-size: var(--dw-font-size-14); }\\n.dw-entity-icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n width: 32px;\\n height: 32px;\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-entity-icon--accent { background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-entity-icon--workflow { background: var(--dw-entity-workflow-bg); color: var(--dw-entity-workflow-fg); }\\n.dw-entity-icon--reasoning { background: var(--dw-entity-reasoning-bg); color: var(--dw-entity-reasoning-fg); }\\n.dw-entity-icon--orange { background: var(--dw-icon-tint-orange); color: var(--dw-status-warning-fg); }\\n.dw-entity-icon--cyan { background: var(--dw-icon-tint-cyan); color: var(--dw-icon-tint-cyan-fg); }\\n.dw-entity-icon--pink { background: var(--dw-icon-tint-pink); color: var(--dw-icon-tint-pink-fg); }\\n.dw-entity-icon--danger { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-avatar { position: relative; overflow: visible; }\\n.dw-avatar img { width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }\\n.dw-avatar--xs { width: 20px; height: 20px; border-radius: var(--dw-radius-sm); font-size: var(--dw-font-size-10); }\\n.dw-avatar--tint-neutral { background: var(--dw-surface-pressed); color: var(--dw-text-label); }\\n.dw-avatar--tint-accent { background: var(--dw-accent-tint); color: var(--dw-accent-text); }\\n.dw-avatar--tint-workflow { background: var(--dw-entity-workflow-bg); color: var(--dw-entity-workflow-fg); }\\n.dw-avatar--tint-reasoning { background: var(--dw-entity-reasoning-bg); color: var(--dw-entity-reasoning-fg); }\\n.dw-avatar--tint-orange { background: var(--dw-icon-tint-orange); color: var(--dw-status-warning-fg); }\\n.dw-avatar--tint-cyan { background: var(--dw-icon-tint-cyan); color: var(--dw-icon-tint-cyan-fg); }\\n.dw-avatar--tint-pink { background: var(--dw-icon-tint-pink); color: var(--dw-icon-tint-pink-fg); }\\n.dw-avatar--ring { transition: border-color var(--dw-dur-micro); }\\nbutton:hover > dw-avatar .dw-avatar--ring,\\nbutton[aria-expanded='true'] > dw-avatar .dw-avatar--ring {\\n border-color: var(--dw-border-hover);\\n}\\n.dw-avatar__presence {\\n position: absolute;\\n right: -3px;\\n bottom: -3px;\\n width: 12px;\\n height: 12px;\\n border: 2px solid var(--dw-surface);\\n border-radius: var(--dw-radius-round);\\n background: var(--dw-status-neutral-solid);\\n}\\n.dw-avatar__presence.is-online { background: var(--dw-status-success-solid); }\\n.dw-avatar--xs .dw-avatar__presence { right: -2px; bottom: -2px; width: 10px; height: 10px; }\\n.dw-avatar--lg .dw-avatar__presence { width: 14px; height: 14px; }\\ndw-entity-icon.dw-entity-icon { background: transparent; }\\ndw-entity-icon.dw-entity-icon--framed { background: var(--dw-surface-pressed); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--accent { background: var(--dw-accent-tint); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--workflow { background: var(--dw-entity-workflow-bg); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--reasoning { background: var(--dw-entity-reasoning-bg); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--orange { background: var(--dw-icon-tint-orange); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--cyan { background: var(--dw-icon-tint-cyan); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--pink { background: var(--dw-icon-tint-pink); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--danger { background: var(--dw-status-danger-bg); }\\n.dw-entity-icon img { width: 100%; height: 100%; object-fit: contain; }\\n.dw-entity-icon--xs { width: 14px; height: 14px; font-size: var(--dw-font-size-12); }\\n.dw-entity-icon--sm { width: 18px; height: 18px; font-size: var(--dw-font-size-14); }\\n.dw-entity-icon--md { width: 24px; height: 24px; font-size: var(--dw-font-size-16); }\\n.dw-entity-icon--lg { width: 32px; height: 32px; font-size: var(--dw-font-size-20); }\\n.dw-entity-icon--xs > .pi,\\n.dw-entity-icon--sm > .pi { font-size: inherit; }\\n.dw-entity-icon--xl { width: 40px; height: 40px; font-size: var(--dw-font-size-20); }\\n.dw-entity-icon--framed { padding: 6px; border-radius: var(--dw-radius-lg); }\\n.dw-entity-icon--framed.dw-entity-icon--xs { width: 20px; height: 20px; padding: 4px; font-size: var(--dw-font-size-11); border-radius: var(--dw-radius-sm); }\\n.dw-entity-icon--framed.dw-entity-icon--sm { width: 28px; height: 28px; padding: 5px; }\\n.dw-entity-icon--framed.dw-entity-icon--md { width: 32px; height: 32px; }\\n.dw-entity-icon--framed.dw-entity-icon--lg { width: 40px; height: 40px; padding: 8px; }\\n.dw-entity-icon--framed.dw-entity-icon--xl { width: 48px; height: 48px; padding: 10px; border-radius: var(--dw-radius-xl); }\\n.dw-entity-icon--neutral { background: var(--dw-surface-pressed); color: var(--dw-text-secondary); }\\n.dw-empty-state__image { max-width: 100%; height: auto; }\\n.dw-empty-state__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--dw-space-2); margin-top: var(--dw-space-2); }\\n.dw-empty-state__actions:empty { display: none; }\\n.dw-empty-state--inline { padding: var(--dw-space-4); font-size: var(--dw-font-size-12); }\\n.dw-empty-state--inline .dw-empty-state__title { font-size: var(--dw-font-size-14); }\\n.dw-empty-state--error .dw-empty-state__icon { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-solid); }\\n.dw-empty-state--error .dw-empty-state__title { color: var(--dw-status-danger-fg); }\\n.dw-table-empty__cell { padding: 0 !important; }\\ndw-banner.dw-banner[hidden] { display: none; }\\n.dw-banner__icon {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n height: 1lh;\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-banner__content { flex: 1 1 auto; min-width: 0; }\\n.dw-banner__title { margin: 0 0 2px; font-weight: var(--dw-font-weight-semibold); }\\n.dw-banner__text { margin: 0; }\\n.dw-banner__actions { display: flex; flex-wrap: wrap; gap: var(--dw-space-2); margin-top: var(--dw-space-2); }\\n.dw-banner__actions:empty { display: none; }\\n.dw-banner__close { margin: -4px -4px 0 0; color: inherit; }\\n.dw-banner--sm { padding: 6px var(--dw-space-2); font-size: var(--dw-font-size-11); }\\n.dw-banner--edge { border-width: 0 0 0 4px; border-radius: var(--dw-radius-sm); }\\n.dw-banner--md .dw-banner__title,\\n.dw-banner .dw-banner__title { font-size: var(--dw-font-size-12); }\\ndw-box.dw-box { display: block; }\\n.dw-box--flush { padding: 0; }\\n.dw-box.dw-box--borderless { border-color: transparent; }\\n.dw-box__title { margin: 0 0 var(--dw-space-2); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-semibold); color: var(--dw-text); }\\ndw-card.dw-card,\\ndw-card.dw-stat-card { outline: none; }\\ndw-card.dw-card:focus-visible,\\ndw-card.dw-stat-card:focus-visible { border-color: var(--dw-accent); box-shadow: var(--dw-focus-ring); }\\n.dw-card__titles { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }\\n.dw-card__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-card--option .dw-card__title { white-space: normal; overflow-wrap: anywhere; }\\n.dw-card__subtitle { margin: 0; overflow: hidden; color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); line-height: var(--dw-line-height-16); text-overflow: ellipsis; white-space: nowrap; }\\n.dw-card__header-end { display: inline-flex; align-items: center; gap: var(--dw-space-1); margin-left: auto; flex: none; }\\n.dw-card__icon { flex: none; }\\n.dw-card__icon img { width: 20px; height: 20px; object-fit: contain; }\\n.dw-card__desc--clamp-1,\\n.dw-card__desc--clamp-2,\\n.dw-card__desc--clamp-3 { display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }\\n.dw-card__desc--clamp-1 { -webkit-line-clamp: 1; }\\n.dw-card__desc--clamp-2 { -webkit-line-clamp: 2; }\\n.dw-card__desc--clamp-3 { -webkit-line-clamp: 3; }\\n.dw-card.is-disabled,\\n.dw-stat-card.is-disabled { opacity: 0.6; cursor: not-allowed; transform: none; box-shadow: none; }\\n.dw-card--option .dw-card__header { padding-bottom: var(--dw-space-3); }\\n.dw-card--option .dw-card__body { padding-top: 0; padding-left: 44px; }\\n.dw-card__radio {\\n flex: none;\\n width: 16px;\\n height: 16px;\\n border: 1px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-round);\\n background: var(--dw-surface);\\n}\\n.dw-card__radio.is-checked {\\n border: 5px solid var(--dw-accent);\\n}\\ndw-card.dw-stat-card { cursor: default; }\\ndw-card.dw-stat-card.dw-card--hover { cursor: pointer; transition: border-color var(--dw-dur-micro), background var(--dw-dur-micro); }\\ndw-card.dw-stat-card.dw-card--hover:hover { border-color: var(--dw-border-strong); }\\ndw-card.dw-stat-card.is-selected { border-color: var(--dw-accent); background: var(--dw-surface-selected); }\\ndw-section.dw-section { display: block; }\\n.dw-section__head { display: flex; align-items: center; gap: var(--dw-space-2); padding-right: var(--dw-space-3); }\\n.dw-section__head .dw-section__header { flex: 1 1 auto; min-width: 0; }\\n.dw-section__actions { display: inline-flex; align-items: center; gap: var(--dw-space-1); }\\n.dw-section__actions:empty { display: none; }\\n.dw-section__header:disabled { cursor: not-allowed; opacity: 0.6; }\\n.dw-section__header:focus-visible { outline: none; box-shadow: inset var(--dw-focus-ring); border-radius: var(--dw-radius-card); }\\ndiv.dw-section__header { cursor: default; }\\n.dw-section__chevron { margin-left: 0; transform: rotate(-90deg); }\\n.dw-section.is-open .dw-section__chevron { transform: rotate(0deg); }\\n.dw-section__icon { color: var(--dw-text-secondary); }\\n.dw-section__header { align-items: flex-start; }\\n.dw-section__header > .dw-section__chevron,\\n.dw-section__header > i.dw-section__icon {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n height: var(--dw-line-height-20);\\n}\\n.dw-section__titles { display: flex; flex-direction: column; min-width: 0; }\\n.dw-section__title-row { display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-section__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-section__subtitle { color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-regular); }\\n.dw-section--plain { border: 0; background: transparent; }\\n.dw-section--plain .dw-section__header { padding-left: 0; padding-right: 0; }\\n.dw-section--plain .dw-section__body { padding-left: 0; padding-right: 0; }\\n.dw-section__step {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n margin-right: var(--dw-space-2);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-accent);\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-section--stepped .dw-section__header { font-size: var(--dw-font-size-16); line-height: var(--dw-line-height-24); }\\n.dw-section--stepped .dw-section__body { padding-left: calc(32px + var(--dw-space-4)); }\\n.dw-section--stepped.dw-section--plain .dw-section__body { padding-left: calc(32px + var(--dw-space-4)); }\\n.dw-section--caps .dw-section__title { color: var(--dw-text-label); font-size: var(--dw-font-size-12); letter-spacing: 0.5px; text-transform: uppercase; }\\n.dw-section--caps .dw-section__header { padding: var(--dw-space-2) 14px; }\\n.dw-section--caps .dw-section__body { padding: 10px 14px; border-top: 1px solid var(--dw-border); }\\n.dw-wizard {\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n background: var(--dw-surface-rail);\\n}\\n.dw-wizard__header {\\n display: grid;\\n flex-shrink: 0;\\n grid-template-columns: 1fr auto 1fr;\\n align-items: center;\\n gap: var(--dw-space-4);\\n height: 52px;\\n padding: 0 var(--dw-space-6);\\n border-bottom: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.dw-wizard__title {\\n color: var(--dw-text-strong);\\n font-size: var(--dw-font-size-16);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-wizard__close { justify-self: end; }\\n.dw-wizard__header .p-stepper { background: transparent; }\\n.dw-wizard__header .p-step-list { margin: 0; padding: 0; border: 0; background: transparent; }\\n.dw-wizard__header .p-step { flex: 0 0 auto; }\\n.dw-wizard__header .p-stepper-separator { width: 48px; flex: 0 0 auto; }\\n.dw-wizard__body { display: flex; flex: 1 1 auto; min-height: 0; }\\n.dw-wizard__nav {\\n flex-shrink: 0;\\n width: 280px;\\n padding: var(--dw-space-6) var(--dw-space-2);\\n border-right: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n overflow-y: auto;\\n}\\n.dw-wizard__content { flex: 1 1 auto; min-width: 0; padding: var(--dw-space-8) var(--dw-space-12); overflow-y: auto; }\\n.dw-wizard__footer {\\n display: flex;\\n flex-shrink: 0;\\n align-items: center;\\n gap: var(--dw-space-3);\\n height: 62px;\\n padding: 0 var(--dw-space-8);\\n border-top: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.dw-toggle-card {\\n display: block;\\n padding: var(--dw-space-5) var(--dw-space-6);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-sm);\\n transition: border-color var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-toggle-card:hover { border-color: var(--dw-border-strong); }\\n.dw-toggle-card.is-invalid { border-color: var(--dw-status-danger-border); }\\n.dw-toggle-card__header { display: flex; align-items: flex-start; gap: var(--dw-space-4); }\\n.dw-toggle-card__control { display: inline-flex; flex-shrink: 0; align-items: center; height: var(--dw-line-height-20); }\\n.dw-toggle-card__icon { flex-shrink: 0; }\\n.dw-toggle-card__titles { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\\n.dw-toggle-card__title {\\n margin: 0;\\n color: var(--dw-text-strong);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-toggle-card__desc { margin: 0; color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-toggle-card__reason { margin: 0; color: var(--dw-status-warning-fg); font-size: var(--dw-font-size-12); }\\n.dw-toggle-card.is-disabled .dw-toggle-card__icon,\\n.dw-toggle-card.is-disabled .dw-toggle-card__title,\\n.dw-toggle-card.is-disabled .dw-toggle-card__desc { opacity: 0.6; }\\n.dw-toggle-card__body {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-5);\\n margin-top: var(--dw-space-5);\\n padding-top: var(--dw-space-5);\\n border-top: 1px solid var(--dw-border);\\n}\\n.p-splitter.dw-splitter { height: 100%; border: none; border-radius: 0; background: transparent; }\\n.p-splitter.dw-splitter > .p-splitterpanel { display: flex; min-width: 0; min-height: 0; overflow: hidden; }\\n.p-splitter.dw-splitter > .p-splitterpanel > * { flex: 1 1 auto; height: 100%; min-width: 0; min-height: 0; }\\n.p-splitter.dw-splitter > .p-splitter-gutter { position: relative; background: transparent; cursor: col-resize; }\\n.p-splitter.dw-splitter > .p-splitter-gutter::before {\\n content: '';\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 50%;\\n width: 1px;\\n background: var(--dw-border);\\n transform: translateX(-50%);\\n}\\n.p-splitter.dw-splitter > .p-splitter-gutter:hover::before,\\n.p-splitter.dw-splitter > .p-splitter-gutter.p-splitter-gutter-resizing::before { width: 2px; background: var(--dw-accent); }\\n.p-splitter.dw-splitter .p-splitter-gutter-handle { background: transparent; }\\n.p-splitter.dw-splitter--rail-start > .p-splitter-gutter {\\n background: linear-gradient(to right, var(--dw-surface-rail) 50%, transparent 50%);\\n}\\n.dw-table {\\n width: 100%;\\n border-collapse: separate;\\n border-spacing: 0;\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-table th {\\n height: var(--dw-size-table-header);\\n padding: 0 var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n background: var(--dw-surface-section);\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n text-align: left;\\n white-space: nowrap;\\n}\\n.dw-table td {\\n height: var(--dw-size-table-row);\\n padding: var(--dw-space-2) var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n vertical-align: middle;\\n}\\n.dw-table tbody tr:hover td {\\n background: var(--dw-surface-hover);\\n}\\n.dw-table--compact td { height: auto; padding: 6px var(--dw-space-3); }\\n.dw-kv {\\n display: grid;\\n grid-template-columns: minmax(120px, max-content) 1fr;\\n align-items: baseline;\\n gap: var(--dw-space-2) var(--dw-space-4);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-kv__key { color: var(--dw-text-secondary); }\\n.dw-kv__value { color: var(--dw-text); min-width: 0; overflow-wrap: anywhere; }\\n.dw-kv-list { display: flex; flex-direction: column; width: 100%; }\\n.dw-kv-list__row { display: flex; align-items: flex-start; gap: var(--dw-space-2); padding: 5px 0; border-bottom: 1px solid var(--dw-surface-pressed); }\\n.dw-kv-list__row:last-child { border-bottom: none; }\\n.dw-kv-list__key {\\n width: 110px;\\n flex-shrink: 0;\\n padding-top: 2px;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-kv-list__value {\\n display: flex;\\n flex: 1;\\n align-items: flex-start;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n}\\n.dw-kv-list--sm .dw-kv-list__value { font-size: var(--dw-font-size-13); }\\n.dw-kv-list__action { flex-shrink: 0; opacity: 0; transition: opacity var(--dw-dur-micro) var(--dw-ease); }\\n.dw-kv-list__row:hover .dw-kv-list__action,\\n.dw-kv-list__action:focus-within { opacity: 1; }\\n.p-datatable .p-datatable-thead > tr > th {\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text-label);\\n white-space: nowrap;\\n}\\n.dw-row-actions {\\n display: inline-flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: var(--dw-space-1);\\n}\\n.dw-row-actions--reveal {\\n opacity: 0;\\n transition: opacity var(--dw-dur-micro);\\n}\\ntr:hover .dw-row-actions--reveal,\\ntr:focus-within .dw-row-actions--reveal,\\n.dw-card:hover .dw-row-actions--reveal {\\n opacity: 1;\\n}\\n.dw-count-pill {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 22px;\\n padding: 1px var(--dw-space-2);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\nbody .p-tree .p-tree-node-content.p-tree-node-selected,\\nbody .p-treetable .p-treetable-tbody > tr.p-treetable-row-selected {\\n background: var(--dw-surface-selected);\\n color: var(--dw-accent-text);\\n}\\n.dw-tree-spine {\\n border-left: 1px solid var(--dw-tree-spine);\\n}\\n.dw-skeleton {\\n height: 20px;\\n border-radius: var(--dw-radius-sm);\\n background: linear-gradient(90deg, var(--dw-skeleton-base) 25%, var(--dw-skeleton-shine) 50%, var(--dw-skeleton-base) 75%);\\n background-size: 200% 100%;\\n animation: dw-skeleton-shimmer 1.5s ease-in-out infinite;\\n}\\n@keyframes dw-skeleton-shimmer {\\n 0% { background-position: 200% 0; }\\n 100% { background-position: -200% 0; }\\n}\\n.dw-busy-line {\\n position: relative;\\n overflow: hidden;\\n}\\n.dw-busy-line::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: -40%;\\n width: 40%;\\n height: 2px;\\n background: var(--dw-accent);\\n animation: dw-busy-line var(--dw-dur-loop) var(--dw-ease-inout) infinite;\\n}\\n@keyframes dw-busy-line {\\n to { left: 100%; }\\n}\\n.dw-spinner {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-spinner__icon { color: var(--dw-accent); }\\n.dw-spinner--xs .dw-spinner__icon { font-size: 10px; }\\n.dw-spinner--sm .dw-spinner__icon { font-size: 14px; }\\n.dw-spinner--md .dw-spinner__icon { font-size: 20px; }\\n.dw-spinner--lg .dw-spinner__icon { font-size: 32px; }\\n.dw-spinner--block {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n width: 100%;\\n min-height: 120px;\\n padding: var(--dw-space-6);\\n}\\n.dw-spinner--overlay,\\n.dw-spinner--fullscreen {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n inset: 0;\\n z-index: var(--dw-z-overlay);\\n background: color-mix(in srgb, var(--dw-surface) 75%, transparent);\\n}\\n.dw-spinner--overlay { position: absolute; }\\n.dw-spinner--fullscreen { position: fixed; z-index: var(--dw-z-modal); }\\n.dw-skeleton-host { display: block; }\\n.dw-skeleton-rows,\\n.dw-skeleton-list {\\n display: flex;\\n flex-direction: column;\\n}\\n.dw-skeleton-rows__row {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-4);\\n height: var(--dw-size-table-row);\\n padding: 0 var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-skeleton-list { gap: var(--dw-space-3); padding: var(--dw-space-2) 10px; }\\n.dw-skeleton-list__row { display: flex; justify-content: space-between; gap: var(--dw-space-3); }\\n.dw-table-host { display: flex; flex-direction: column; min-height: 0; min-width: 0; }\\n.dw-table-host.dw-table-host--framed {\\n overflow: hidden;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface);\\n}\\n.dw-table-host > .p-datatable.dw-datatable { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }\\n.dw-table-host > .p-datatable.dw-datatable > .p-datatable-table-container { flex: 1 1 auto; min-height: 0; }\\n.dw-table__cell-text {\\n display: inline-block;\\n max-width: 100%;\\n min-width: 0;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n vertical-align: middle;\\n}\\n.dw-table__col--fill { width: 100%; max-width: 0; }\\n.dw-table__actions-col { text-align: right; white-space: nowrap; }\\n.dw-table__check-col,\\n.dw-table__expander-col { width: 44px; text-align: center; }\\n.dw-table__sort-head {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n max-width: 100%;\\n vertical-align: middle;\\n}\\n.p-datatable.dw-datatable p-sorticon {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n}\\n.p-datatable.dw-datatable p-sorticon:empty,\\n.p-datatable.dw-datatable p-sorticon:not(:has(.is-sorted)) { display: none; }\\n.p-datatable.dw-datatable .p-datatable-sort-icon { display: inline-flex; align-items: center; }\\n.dw-table__sort { display: none; }\\n.dw-table__sort.is-sorted {\\n display: block;\\n color: inherit;\\n font-size: var(--dw-font-size-10);\\n}\\n.p-datatable.dw-datatable .p-sortable-column-badge.p-badge {\\n min-width: 14px;\\n height: 14px;\\n padding: 0 3px;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-border);\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-10);\\n font-weight: var(--dw-font-weight-semibold);\\n font-variant-numeric: tabular-nums;\\n line-height: 1;\\n}\\n.dw-table__row--clickable { cursor: pointer; }\\n.dw-table__row--clickable:focus-visible { outline: none; box-shadow: inset var(--dw-focus-ring); }\\n.dw-table__expanded-row > td { background: var(--dw-surface-section); }\\n.dw-table__skeleton-row > td { height: var(--dw-size-table-row); }\\n.p-datatable.dw-datatable .p-datatable-tbody > tr > td { border-color: var(--dw-border); }\\n.p-datatable.dw-datatable--compact .p-datatable-thead > tr > th,\\n.p-datatable.dw-datatable--compact .p-datatable-tbody > tr > td { padding: 6px var(--dw-space-3); }\\n.dw-meter-host { display: block; min-width: 0; }\\n.dw-meter {\\n position: relative;\\n height: 10px;\\n overflow: hidden;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n}\\n.dw-meter--sm { height: 6px; }\\n.dw-meter__fill {\\n height: 100%;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-accent);\\n transition: width var(--dw-dur-enter) var(--dw-ease);\\n}\\n.p-datatable.dw-datatable .p-datatable-tbody > tr > td.p-datatable-frozen-column { z-index: 1; }\\n.p-datatable.dw-datatable .p-datatable-thead > tr > th.p-datatable-frozen-column { z-index: 2; }\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-left + :is(th, td).p-datatable-frozen-column-left::before,\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-right:has(+ :is(th, td).p-datatable-frozen-column-right)::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n width: 1px;\\n background: inherit;\\n pointer-events: none;\\n}\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-left + :is(th, td).p-datatable-frozen-column-left::before { left: -1px; }\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-right:has(+ :is(th, td).p-datatable-frozen-column-right)::after { right: -1px; }\\n.dw-table-host--hscroll .p-datatable.dw-datatable :is(th, td).dw-table__frozen-edge { box-shadow: inset -1px 0 0 var(--dw-border); }\\n.dw-table-host--hscroll .p-datatable.dw-datatable :is(th, td).dw-table__frozen-edge-end { box-shadow: inset 1px 0 0 var(--dw-border); }\\n.p-datatable.dw-datatable .p-datatable-tbody > tr > td.dw-table-empty__cell { border-bottom-width: 0; }\\n.p-datatable .p-datatable-tbody > tr.dw-table-empty,\\n.p-datatable.p-datatable-hoverable .p-datatable-tbody > tr.dw-table-empty:hover,\\n.p-datatable.p-datatable-hoverable .p-datatable-tbody > tr.dw-table-empty:hover > td { background: transparent; cursor: default; }\\n.p-datatable.dw-datatable .p-datatable-tbody > tr:focus-within .dw-row-actions--reveal { opacity: 1; }\\n.p-datatable.dw-datatable .p-paginator {\\n justify-content: flex-end;\\n border: 0;\\n border-radius: 0;\\n font-size: var(--dw-font-size-12);\\n}\\n.p-datatable.dw-datatable .p-paginator-content { justify-content: flex-end; }\\n.p-datatable.dw-datatable--paginator-left .p-paginator,\\n.p-datatable.dw-datatable--paginator-left .p-paginator-content { justify-content: flex-start; }\\n.p-datatable.dw-datatable--paginator-center .p-paginator,\\n.p-datatable.dw-datatable--paginator-center .p-paginator-content { justify-content: center; }\\n.p-datatable.dw-datatable .p-paginator-current { height: auto; margin-right: var(--dw-space-2); padding: 0; color: var(--dw-text-secondary); }\\n.p-datatable.dw-datatable .p-paginator .p-paginator-page { font-size: var(--dw-font-size-12); }\\n.p-datatable.dw-datatable .p-paginator .p-select { height: 28px; align-items: center; font-size: var(--dw-font-size-12); }\\n.dw-tree { margin: 0; padding: 0; list-style: none; }\\n.dw-tree .dw-tree { padding-left: var(--dw-space-4); margin-left: 7px; border-left: 1px solid var(--dw-tree-spine); }\\n.dw-tree__item { position: relative; }\\n.dw-tree__row {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n min-height: 28px;\\n padding: 2px var(--dw-space-2);\\n border-radius: var(--dw-radius-sm);\\n color: var(--dw-text);\\n cursor: pointer;\\n}\\n.dw-tree__row:hover { background: var(--dw-surface-hover); }\\n.dw-tree__row.is-selected { background: var(--dw-surface-selected); color: var(--dw-accent-text); }\\n.dw-tree__row:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.p-datatable.dw-datatable--fixed .p-datatable-table { table-layout: fixed; }\\n.p-datatable.dw-datatable--fixed .p-datatable-tbody > tr > td:not([colspan]) { overflow: hidden; }\\n.p-datatable.dw-datatable--fixed .p-datatable-thead > tr > th { overflow: hidden; text-overflow: ellipsis; }\\n.p-multiselect.dw-column-picker {\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-control);\\n background: var(--dw-surface);\\n box-shadow: none;\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), border-color var(--dw-dur-micro);\\n}\\n.p-multiselect.dw-column-picker:not(.p-disabled):hover { background: var(--dw-surface-hover); border-color: var(--dw-border); }\\n.p-multiselect.dw-column-picker.p-multiselect-open { background: var(--dw-surface-pressed); border-color: var(--dw-border-strong); }\\n.p-multiselect.dw-column-picker .p-multiselect-label { display: flex; align-items: center; padding: 6px 11px; line-height: var(--dw-line-height-20); }\\n.p-multiselect.dw-column-picker .p-multiselect-label-empty { opacity: 1; visibility: visible; }\\n.dw-column-picker__label {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-secondary);\\n}\\n.p-multiselect.dw-column-picker .p-multiselect-dropdown { display: none; }\\n.dw-timestamp-host {\\n display: inline;\\n min-width: 0;\\n}\\n.dw-timestamp {\\n white-space: nowrap;\\n}\\n.p-dialog.dw-dialog--sm { width: min(var(--dw-width-dialog-sm), 92vw); }\\n.p-dialog.dw-dialog--md { width: min(var(--dw-width-dialog-md), 92vw); }\\n.p-dialog.dw-dialog--lg { width: min(var(--dw-width-dialog-lg), 92vw); }\\n.p-dialog.dw-dialog--xl { width: min(var(--dw-width-dialog-xl), 94vw); }\\n.p-dialog.dw-dialog--full {\\n width: 100vw;\\n height: 100vh;\\n max-height: 100vh;\\n margin: 0;\\n border: 0;\\n border-radius: 0;\\n}\\n.p-dialog.dw-dialog--full .p-dialog-content { height: 100%; padding: 0; overflow: hidden; }\\n.p-dialog.dw-dialog--full .dw-dialog__body { height: 100%; }\\n.p-dialog .p-dialog-title {\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.p-dialog .p-dialog-footer {\\n gap: var(--dw-space-2);\\n}\\n.dw-confirm__message {\\n margin: 0;\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n color: var(--dw-text);\\n}\\n.dw-confirm__warning {\\n display: flex;\\n align-items: flex-start;\\n gap: var(--dw-space-2);\\n margin-top: var(--dw-space-3);\\n padding: var(--dw-space-3);\\n border: 1px solid var(--dw-status-danger-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-status-danger-bg);\\n color: var(--dw-status-danger-fg);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.p-drawer.dw-drawer--sm { width: min(var(--dw-width-drawer-sm), 100vw); }\\n.p-drawer.dw-drawer--md { width: min(var(--dw-width-drawer-md), 100vw); }\\n.p-drawer.dw-drawer--lg { width: min(var(--dw-width-drawer-lg), 100vw); }\\n.p-drawer.dw-drawer--full { width: 100vw; }\\nbody .p-drawer-right {\\n box-shadow: var(--dw-shadow-drawer);\\n}\\n.p-drawer .p-drawer-title {\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-drawer-shell {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n min-height: 0;\\n}\\n.dw-resizer {\\n position: absolute;\\n z-index: 4;\\n touch-action: none;\\n outline: none;\\n}\\n.dw-resizer--vertical { top: 0; width: 10px; height: 100%; cursor: col-resize; }\\n.dw-resizer--vertical.dw-resizer--start { left: -5px; }\\n.dw-resizer--vertical.dw-resizer--end { right: -5px; }\\n.dw-resizer--horizontal { left: 0; width: 100%; height: 10px; cursor: row-resize; }\\n.dw-resizer--horizontal.dw-resizer--start { top: -5px; }\\n.dw-resizer--horizontal.dw-resizer--end { bottom: -5px; }\\n.dw-resizer::before {\\n content: '';\\n position: absolute;\\n background: transparent;\\n transition: background var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-resizer--vertical::before { top: 0; left: 4px; width: 2px; height: 100%; }\\n.dw-resizer--horizontal::before { top: 4px; left: 0; width: 100%; height: 2px; }\\n.dw-resizer:hover::before,\\n.dw-resizer:focus-visible::before,\\n.dw-resizer.is-dragging::before { background: var(--dw-accent); }\\n.dw-resizer::after {\\n --dw-resizer-dot: var(--dw-text-muted);\\n content: '';\\n position: absolute;\\n border-radius: var(--dw-radius-full);\\n background-color: var(--dw-surface);\\n background-image: radial-gradient(circle, var(--dw-resizer-dot) 1px, transparent 1.4px);\\n background-position: center;\\n pointer-events: none;\\n}\\n.dw-resizer--vertical::after { top: 50%; left: 2px; width: 6px; height: 28px; transform: translateY(-50%); background-size: 6px 5px; }\\n.dw-resizer--horizontal::after { top: 2px; left: 50%; width: 28px; height: 6px; transform: translateX(-50%); background-size: 5px 6px; }\\n.dw-resizer:hover::after,\\n.dw-resizer:focus-visible::after,\\n.dw-resizer.is-dragging::after { --dw-resizer-dot: var(--dw-accent); }\\n.p-drawer.dw-drawer--resizing { transition: none; user-select: none; }\\n.dw-drawer-shell__header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n padding: var(--dw-space-4) var(--dw-space-5);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-drawer-shell__body {\\n flex: 1 1 auto;\\n min-height: 0;\\n overflow: auto;\\n padding: var(--dw-space-5);\\n}\\n.dw-drawer-shell__footer {\\n display: flex;\\n justify-content: flex-end;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-5);\\n border-top: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.p-menu { --p-menu-item-icon-color: var(--p-menu-item-color); --p-menu-item-icon-focus-color: var(--p-menu-item-focus-color); }\\n.p-tieredmenu { --p-tieredmenu-item-icon-color: var(--p-tieredmenu-item-color); --p-tieredmenu-item-icon-focus-color: var(--p-tieredmenu-item-focus-color); }\\n.p-contextmenu { --p-contextmenu-item-icon-color: var(--p-contextmenu-item-color); --p-contextmenu-item-icon-focus-color: var(--p-contextmenu-item-focus-color); }\\n:not(.dw-menu-item--danger) > .p-menu-item-content:hover .p-menu-item-icon:not(.pi-trash):not(.pi-trash-fill):not(.fa-trash):not(.fa-trash-alt):not(.delete-icon),\\n:not(.dw-menu-item--danger) > .p-tieredmenu-item-content:hover .p-tieredmenu-item-icon:not(.pi-trash):not(.pi-trash-fill):not(.fa-trash):not(.fa-trash-alt):not(.delete-icon),\\n:not(.dw-menu-item--danger) > .p-contextmenu-item-content:hover .p-contextmenu-item-icon:not(.pi-trash):not(.pi-trash-fill):not(.fa-trash):not(.fa-trash-alt):not(.delete-icon) {\\n color: var(--dw-accent) !important;\\n}\\n.p-disabled.dw-menu__item--explained { pointer-events: auto; cursor: not-allowed; }\\n.dw-menu-item--danger .p-menu-item-icon,\\n.dw-menu-item--danger .p-menu-item-label,\\n.dw-menu-item--danger .p-menu-item-link,\\n.dw-menu-item--danger .p-tieredmenu-item-icon,\\n.dw-menu-item--danger .p-tieredmenu-item-label,\\n.dw-menu-item--danger .p-tieredmenu-item-link,\\n.dc-menu-danger .p-menu-item-icon,\\n.dc-menu-danger .p-menu-item-link,\\n.p-menu-item-content:has(.pi-trash, .pi-trash-fill, .fa-trash, .fa-trash-alt):hover .p-menu-item-label,\\n.p-menu-item-content:hover .pi-trash,\\n.p-menu-item-content:hover .pi-trash-fill,\\n.p-menu-item-content:hover .fa-trash,\\n.p-menu-item-content:hover .fa-trash-alt,\\n.p-menu-item-content:hover .delete-icon,\\n.p-tieredmenu-item-content:hover .pi-trash,\\n.p-contextmenu-item-content:hover .pi-trash {\\n color: var(--dw-danger) !important;\\n}\\n.dw-menu-item--danger .p-menu-item-content:hover,\\n.dw-menu-item--danger .p-tieredmenu-item-content:hover,\\n.p-menu-item-content:has(.pi-trash, .pi-trash-fill, .fa-trash, .fa-trash-alt):hover {\\n background: var(--dw-danger-tint) !important;\\n}\\n.pi-trash:hover,\\n.pi-trash-fill:hover,\\n.fa-trash:hover,\\n.fa-trash-alt:hover,\\n.delete-icon:hover {\\n color: var(--dw-danger-solid);\\n}\\n.p-toast .p-toast-message {\\n border-radius: var(--dw-radius-card);\\n box-shadow: var(--dw-shadow-popover);\\n}\\n.p-toast .p-toast-message-success {\\n border: 1px solid var(--dw-status-success-border);\\n background: var(--dw-status-success-bg);\\n color: var(--dw-status-success-fg);\\n}\\n.p-toast .p-toast-message-error {\\n border: 1px solid var(--dw-status-danger-border);\\n background: var(--dw-status-danger-bg);\\n color: var(--dw-status-danger-fg);\\n}\\n.p-toast .p-toast-message-warn {\\n border: 1px solid var(--dw-status-warning-border);\\n background: var(--dw-status-warning-bg);\\n color: var(--dw-status-warning-fg);\\n}\\n.p-toast .p-toast-message-info {\\n border: 1px solid var(--dw-status-info-border);\\n background: var(--dw-status-info-bg);\\n color: var(--dw-status-info-fg);\\n}\\n.p-toast .p-toast-message-success .p-toast-message-icon,\\n.p-toast .p-toast-message-success .p-toast-close-button { color: var(--dw-status-success-solid); }\\n.p-toast .p-toast-message-error .p-toast-message-icon,\\n.p-toast .p-toast-message-error .p-toast-close-button { color: var(--dw-status-danger-solid); }\\n.p-toast .p-toast-message-warn .p-toast-message-icon,\\n.p-toast .p-toast-message-warn .p-toast-close-button { color: var(--dw-status-warning-solid); }\\n.p-toast .p-toast-message-info .p-toast-message-icon,\\n.p-toast .p-toast-message-info .p-toast-close-button { color: var(--dw-status-info-solid); }\\n.p-tooltip .p-tooltip-text {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-dialog__header { display: flex; align-items: center; gap: var(--dw-space-3); min-width: 0; }\\n.dw-dialog__titles { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\\n.dw-dialog__title-row { display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-dialog__subtitle { color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); line-height: var(--dw-line-height-16); }\\n.dw-dialog__footer { display: flex; justify-content: flex-end; align-items: center; gap: var(--dw-space-3); width: 100%; }\\n.dw-footer-actions { display: flex; align-items: center; gap: var(--dw-space-2); }\\n.p-dialog.dw-dialog--flush .p-dialog-content { padding: 0; }\\n.dw-entity-icon--warning { background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-entity-icon--success { background: var(--dw-status-success-bg); color: var(--dw-status-success-solid); }\\n.dw-entity-icon--danger { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-solid); }\\n.p-dialog.dw-confirm .p-dialog-content { display: flex; flex-direction: column; gap: var(--dw-space-3); }\\n.dw-confirm__warning-title { margin: 0 0 2px; font-weight: var(--dw-font-weight-semibold); }\\n.dw-confirm__warning-text { margin: 0; }\\n.dw-confirm__summary { margin: 0; padding: var(--dw-space-3); border-radius: var(--dw-radius-md); background: var(--dw-surface-section); }\\n.dw-confirm__summary dd { margin: 0; }\\n.p-drawer.dw-drawer { box-shadow: var(--dw-shadow-drawer); }\\n.p-drawer.dw-drawer.p-drawer-bottom { border-radius: var(--dw-radius-xl) var(--dw-radius-xl) 0 0; }\\n.dw-drawer-shell__header .dw-drawer-shell__icon { flex-shrink: 0; font-size: var(--dw-font-size-18); color: var(--dw-accent); }\\n.p-drawer.dw-drawer--panel {\\n border: 0;\\n border-left: 1px solid var(--dw-border);\\n box-shadow: -8px 0 24px -6px var(--dw-alpha-ink-12);\\n}\\n.dw-drawer--panel .dw-drawer-shell__header { gap: var(--dw-space-2); }\\n.dw-drawer--panel .dw-drawer-shell__title { color: var(--dw-text-strong); line-height: normal; }\\n.dw-drawer--panel .dw-drawer-shell__titles > dw-breadcrumb:empty { display: none; }\\n.dw-drawer--panel .dw-drawer-shell__header-actions { margin-left: var(--dw-space-1); }\\n.dw-drawer--panel .dw-drawer-shell__header-actions .dw-icon-btn--lg {\\n width: var(--dw-size-icon-btn);\\n height: var(--dw-size-icon-btn);\\n border-radius: var(--dw-radius-sm);\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-drawer--panel .dw-drawer-shell__body { padding: var(--dw-space-2) 0; }\\n.dw-drawer--panel .dw-drawer-shell__footer .dw-btn {\\n padding: 6px 13px;\\n border-radius: var(--dw-radius-lg);\\n font-size: var(--dw-font-size-13);\\n}\\n.dw-drawer--panel .dw-drawer-shell__footer .dw-btn--text.dw-btn--secondary { padding: 6px 14px; color: var(--dw-text); }\\n.dw-drawer--panel .dw-drawer-shell__footer .dw-btn--text.dw-btn--secondary:hover:not(:disabled) { background: var(--dw-surface-pressed); }\\n.dw-drawer-shell__titles { display: flex; flex-direction: column; gap: 2px; flex: 1 1 auto; min-width: 0; }\\n.dw-drawer-shell__title { margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-drawer-shell__subtitle { margin: 0; }\\n.dw-drawer-shell__header-actions { display: inline-flex; align-items: center; gap: var(--dw-space-1); margin-left: auto; }\\n.dw-drawer-shell__body--flush { display: flex; flex-direction: column; padding: 0; overflow: hidden; }\\n.dw-drawer-shell__footer { align-items: center; }\\n.dw-drawer-shell__footer-start { display: flex; align-items: center; gap: var(--dw-space-2); margin-right: auto; color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-drawer-shell__footer-start:empty { display: none; }\\n.dw-popover { display: flex; flex-direction: column; gap: var(--dw-space-3); overflow: auto; }\\n.dw-popover__header { display: flex; align-items: center; justify-content: space-between; gap: var(--dw-space-2); }\\n.dw-popover__footer { display: flex; justify-content: flex-end; gap: var(--dw-space-2); }\\n.p-popover.dw-popover-panel--no-arrow::before,\\n.p-popover.dw-popover-panel--no-arrow::after { display: none; }\\n.p-popover.dw-popover-panel--flush .p-popover-content { padding: 0; overflow: hidden; border-radius: inherit; }\\n.dw-popover-panel--flush .dw-popover { gap: 0; }\\n.dw-popover-panel--flush .dw-popover__footer {\\n padding: var(--dw-space-2) var(--dw-space-3);\\n border-top: 1px solid var(--dw-border);\\n}\\n.p-tooltip.dw-tooltip--multiline { max-width: 360px; }\\n.p-tooltip.dw-tooltip--toolbar { --p-tooltip-gutter: 8px; }\\n.p-tooltip.dw-tooltip--toolbar .p-tooltip-arrow { display: none; }\\n.p-tooltip.dw-tooltip--toolbar .p-tooltip-text {\\n padding: 6px 9px;\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-neutral-700);\\n color: var(--dw-neutral-0);\\n font-weight: var(--dw-font-weight-semibold);\\n white-space: nowrap;\\n box-shadow: 0 6px 18px var(--dw-alpha-ink-22);\\n}\\n.p-tooltip.dw-tooltip--multiline .p-tooltip-text { white-space: pre-line; }\\n.p-tooltip.dw-tooltip--error .p-tooltip-text { background: var(--dw-status-danger-fg); color: var(--dw-text-inverse); }\\n.p-tooltip.dw-tooltip--error .p-tooltip-arrow { border-top-color: var(--dw-status-danger-fg); }\\n.p-tooltip.dw-tooltip--code { width: min(520px, calc(100vw - 48px)); max-width: min(520px, calc(100vw - 48px)); z-index: 5000; }\\n.p-tooltip.dw-tooltip--code .p-tooltip-text {\\n display: block;\\n width: 100%;\\n max-width: none;\\n max-height: 320px;\\n padding: var(--dw-space-3) var(--dw-space-3);\\n overflow: auto;\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n white-space: pre-wrap;\\n overflow-wrap: anywhere;\\n}\\n.p-dialog.dw-confirm .dw-dialog__body { display: flex; flex-direction: column; gap: var(--dw-space-3); }\\n.p-dialog .p-dialog-close-button.p-button {\\n width: var(--dw-size-control);\\n height: var(--dw-size-control);\\n padding: 0;\\n border: 1px solid transparent;\\n border-radius: var(--dw-radius-md);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n}\\n.p-dialog .p-dialog-close-button.p-button:not(:disabled):hover {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n}\\n.dw-page-header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n min-height: 56px;\\n padding: var(--dw-space-3) var(--dw-space-5);\\n border-bottom: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.dw-page-header__titles {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n min-width: 0;\\n}\\n.dw-page-header__actions {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n margin-left: auto;\\n}\\n.dw-action-bar {\\n display: flex;\\n align-items: center;\\n flex-wrap: wrap;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-5);\\n background: var(--dw-surface);\\n}\\n.dw-action-bar__spacer { flex: 1 1 auto; }\\n.dw-breadcrumb-host { display: block; min-width: 0; }\\n.dw-breadcrumb {\\n display: flex;\\n align-items: center;\\n flex-wrap: wrap;\\n gap: 6px;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-breadcrumb__link {\\n color: var(--dw-accent);\\n text-decoration: none;\\n cursor: pointer;\\n}\\n.dw-breadcrumb__link:hover { color: var(--dw-accent-hover); text-decoration: underline; }\\n.dw-breadcrumb__sep { color: var(--dw-text-muted); }\\n.dw-breadcrumb__text { color: var(--dw-text-secondary); }\\n.dw-breadcrumb__current { color: var(--dw-text); font-weight: var(--dw-font-weight-medium); }\\n.dw-tabs {\\n display: flex;\\n align-items: stretch;\\n gap: var(--dw-space-4);\\n padding-inline: var(--dw-tabs-inset, 0);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-tab {\\n position: relative;\\n padding: var(--dw-space-2) 0;\\n border: 0;\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-tab:hover { color: var(--dw-text); }\\n.dw-tab.is-active {\\n color: var(--dw-accent);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-tab.is-active::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: -1px;\\n height: 2px;\\n background: var(--dw-accent);\\n}\\n.dw-segmented {\\n display: inline-flex;\\n align-items: center;\\n gap: 2px;\\n padding: 2px;\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface-pressed);\\n}\\n.dw-segmented__item {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 4px 10px;\\n border: 0;\\n border-radius: var(--dw-radius-sm);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), color var(--dw-dur-micro);\\n}\\n.dw-segmented__item:hover { color: var(--dw-text); }\\n.dw-segmented__item.is-active {\\n background: var(--dw-surface);\\n color: var(--dw-text-strong);\\n font-weight: var(--dw-font-weight-semibold);\\n box-shadow: 0 0 0 1px var(--dw-border-strong), var(--dw-shadow-sm);\\n}\\n.dw-pill-tabs {\\n display: inline-flex;\\n flex-wrap: wrap;\\n gap: var(--dw-space-1);\\n}\\n.dw-pill-tabs__item {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 4px 12px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-pill-tabs__item:hover { border-color: var(--dw-border-strong); color: var(--dw-text); }\\n.dw-pill-tabs__item.is-active {\\n border-color: var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-rail {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n padding: var(--dw-space-3) var(--dw-space-2);\\n border-right: 1px solid var(--dw-border);\\n background: var(--dw-surface-rail);\\n}\\n.dw-rail__group {\\n padding: var(--dw-space-3) 10px 6px;\\n font-size: var(--dw-font-size-10);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n color: var(--dw-text-secondary);\\n}\\n.dw-nav-item {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: 7px 10px;\\n border: 0;\\n border-radius: var(--dw-radius-md);\\n background: transparent;\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n text-align: left;\\n cursor: pointer;\\n}\\n.dw-nav-item:hover {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-strong);\\n}\\n.dw-nav-item.is-active,\\n.dw-nav-item.active {\\n background: var(--dw-surface-selected);\\n color: var(--dw-accent-hover);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-nav-list--marker .dw-nav-item.is-active,\\n.dw-selected-marker { box-shadow: inset 3px 0 0 var(--dw-accent); }\\n.dw-nav-list--marker .dw-nav-item.is-active:focus-visible { box-shadow: inset 3px 0 0 var(--dw-accent), var(--dw-focus-ring); }\\n.dw-nav-item__count {\\n margin-left: auto;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-tabs-host { display: block; min-width: 0; }\\n.dw-tabs-host--segmented,\\n.dw-tabs-host--pill { display: inline-block; }\\n.dw-tabs-host--full,\\n.dw-tabs-host--full .dw-segmented { display: flex; width: 100%; }\\n.dw-tabs-host--full > .dw-tabs { flex: 1 1 auto; }\\n.dw-tabs-host--full .dw-segmented__item { flex: 1 1 0; justify-content: center; }\\n.dw-tab { display: inline-flex; align-items: center; gap: 6px; }\\n.dw-tab:disabled,\\n.dw-segmented__item:disabled,\\n.dw-pill-tabs__item:disabled { opacity: 0.5; cursor: not-allowed; }\\n.dw-tab:focus-visible,\\n.dw-segmented__item:focus-visible,\\n.dw-pill-tabs__item:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); border-radius: var(--dw-radius-sm); }\\n.dw-tabs--sm { gap: var(--dw-space-3); }\\n.dw-tabs--sm .dw-tab { padding: 6px 0; font-size: var(--dw-font-size-12); }\\n.dw-segmented--sm .dw-segmented__item { padding: 2px 8px; font-size: var(--dw-font-size-11); }\\n.dw-tabs__count { min-width: 18px; padding: 0 6px; border-radius: var(--dw-radius-full); background: var(--dw-surface-pressed); color: var(--dw-text-secondary); font-size: var(--dw-font-size-11); font-weight: var(--dw-font-weight-semibold); line-height: 18px; text-align: center; }\\n.is-active > .dw-tabs__count { background: var(--dw-accent-tint); color: var(--dw-accent-text); }\\n.dw-tabs__count.dw-tabs__count--danger { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-tabs__panel { padding-top: var(--dw-space-4); }\\n.dw-tabs-host--segmented .dw-tabs__panel,\\n.dw-tabs-host--pill .dw-tabs__panel { padding-top: var(--dw-space-3); }\\n.dw-tabs--vertical { flex-direction: column; gap: 2px; border-bottom: 0; }\\n.dw-tabs--vertical .dw-tab { justify-content: flex-start; padding: 7px 10px; border-radius: var(--dw-radius-md); }\\n.dw-tabs--vertical .dw-tab:hover { background: var(--dw-surface-pressed); }\\n.dw-tabs--vertical .dw-tab.is-active { background: var(--dw-surface-selected); }\\n.dw-tabs--vertical .dw-tab.is-active::after { display: none; }\\ndw-page-header.dw-page-header { flex-wrap: wrap; }\\n.dw-page-header--list { min-height: 0; padding: var(--dw-space-3) var(--dw-space-5) 0; border-bottom: 0; background: transparent; }\\n.dw-page-header--panel { min-height: 64px; }\\n.dw-page-header.dw-page-header--flush { padding: 0; }\\n.dw-page-header__titles { flex: 1 1 auto; }\\n.dw-page-header__title-row { display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-page-header__title { margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-page-header__title-input { max-width: 420px; font-size: var(--dw-font-size-16); font-weight: var(--dw-font-weight-semibold); }\\n.dw-page-header__subtitle { margin: 0; }\\n.dw-page-header__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--dw-space-3); color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-page-header__meta:empty { display: none; }\\n.dw-page-header__icon img { width: 100%; height: 100%; object-fit: contain; }\\n.dw-breadcrumb__link { padding: 0; border: 0; background: none; font: inherit; }\\n.dw-breadcrumb i { font-size: var(--dw-font-size-11); }\\ndw-action-bar.dw-action-bar { display: flex; flex-direction: column; align-items: stretch; gap: var(--dw-space-2); }\\n.dw-action-bar__row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--dw-space-2); }\\n.dw-action-bar__start,\\n.dw-action-bar__end { display: flex; align-items: center; flex-wrap: wrap; gap: var(--dw-space-2); min-width: 0; }\\n.dw-action-bar__start { flex: 1 1 auto; }\\n.dw-action-bar__end { margin-left: auto; }\\n.dw-action-bar__filters { display: flex; align-items: center; flex-wrap: wrap; gap: var(--dw-space-2); }\\n.dw-action-bar__filters:empty { display: none; }\\n.dw-action-bar__sep { align-self: stretch; width: 1px; margin: 4px 2px; background: var(--dw-border); }\\n.dw-action-bar--dense { padding: var(--dw-space-2) var(--dw-space-4); }\\n.dw-action-bar--bordered { border-bottom: 1px solid var(--dw-border); }\\n@media (max-width: 768px) {\\n .dw-action-bar__start { flex-basis: 100%; }\\n .dw-action-bar__start dw-search-input { width: 100%; }\\n}\\ndw-nav-list.dw-nav-list { position: relative; display: flex; flex-direction: column; overflow-y: auto; transition: width var(--dw-dur-enter) var(--dw-ease); }\\ndw-nav-list.dw-nav-list.is-minimized { width: 60px; align-items: center; }\\n.dw-nav-list__items { display: flex; flex-direction: column; gap: 2px; margin: 0; padding: 0; list-style: none; }\\n.dw-nav-list__items--reorderable > li { cursor: grab; }\\n.dw-nav-list__items--reorderable > li.cdk-drag-placeholder { opacity: 0.4; }\\n.dw-nav-list__items--reorderable.cdk-drop-list-dragging > li:not(.cdk-drag-placeholder),\\n.dw-nav-list__items--reorderable > li.cdk-drag-animating { transition: transform 200ms ease; }\\n.dw-nav-list__drag-preview {\\n list-style: none;\\n cursor: grabbing;\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-popover);\\n}\\n.dw-nav-list__nav { display: flex; flex-direction: column; gap: 2px; }\\n.dw-nav-list__group-toggle { display: flex; align-items: center; gap: var(--dw-space-2); width: 100%; border: 0; background: transparent; text-align: left; cursor: pointer; }\\n.pi.dw-nav-list__chevron { margin-left: auto; font-size: var(--dw-font-size-10); transition: transform var(--dw-dur-enter) var(--dw-ease); }\\n.dw-nav-list__chevron.is-collapsed { transform: rotate(-90deg); }\\na.dw-nav-item { text-decoration: none; }\\n.dw-nav-item { width: 100%; }\\n.dw-nav-item:disabled { opacity: 0.5; cursor: not-allowed; }\\n.dw-nav-item:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-nav-item__icon { width: 16px; color: var(--dw-text-secondary); text-align: center; }\\n.dw-nav-item.is-active .dw-nav-item__icon { color: var(--dw-accent); }\\n.dw-nav-item__icon--accent { color: var(--dw-accent); }\\n.dw-nav-item__icon--workflow { color: var(--dw-entity-workflow-fg); }\\n.dw-nav-item__icon--reasoning { color: var(--dw-entity-reasoning-fg); }\\n.dw-nav-item.is-muted .dw-nav-item__label { color: var(--dw-text-muted); }\\n.dw-nav-item__img { width: 16px; height: 16px; object-fit: contain; }\\n.dw-nav-item__label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-nav-item.is-active .dw-nav-item__count { color: var(--dw-accent-hover); }\\n.dw-nav-item__text { display: flex; flex: 1 1 auto; flex-direction: column; gap: 2px; min-width: 0; }\\n.dw-nav-item:has(> .dw-nav-item__text) { align-items: flex-start; }\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__icon,\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__img,\\n.dw-nav-item:has(> .dw-nav-item__text) > dw-icon.dw-nav-item__icon {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n height: var(--dw-line-height-20);\\n}\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__img { padding-block: 2px; }\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__count { line-height: var(--dw-line-height-20); }\\n.dw-nav-item__head { display: flex; flex: 1 1 auto; align-items: center; gap: var(--dw-space-1); min-width: 0; }\\n.dw-nav-item__head > .dw-nav-item__label { flex: 0 1 auto; }\\n.dw-nav-item__text > .dw-nav-item__head { flex: none; }\\n.dw-nav-item__error {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n gap: var(--dw-space-1);\\n color: var(--dw-status-danger-fg);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-nav-item__error .pi { font-size: var(--dw-font-size-12); }\\n.dw-nav-item__error--warning,\\n.dw-nav-item__error--warning .pi { color: var(--dw-status-warning-solid); }\\n.dw-nav-item__loading { margin-left: auto; color: var(--dw-text-muted); font-size: var(--dw-font-size-12); }\\n.dw-nav-item__trail {\\n display: inline-flex;\\n flex-shrink: 0;\\n align-items: center;\\n gap: var(--dw-space-1);\\n margin-left: auto;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-11);\\n}\\n.dw-nav-item__trail--success { color: var(--dw-status-success-fg); }\\n.dw-nav-item__trail--success .dw-nav-item__status-dot { background: var(--dw-status-success-fg); }\\ndw-icon.dw-nav-item__icon { font-size: var(--dw-font-size-16); }\\n.dw-nav-item__status {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-14);\\n}\\n.dw-nav-item__meta { color: var(--dw-text-muted); font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-14); }\\n.dw-nav-item__status-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--dw-text-muted); }\\n.dw-status-dot.dw-nav-item__dot { width: 7px; height: 7px; }\\n.dw-nav-item__status--success { color: var(--dw-status-success-fg); }\\n.dw-nav-item__status--success .dw-nav-item__status-dot { background: var(--dw-status-success-fg); }\\n.dw-nav-list--tree {\\n --dw-tree-line: var(--dw-border-strong);\\n --dw-tree-mid: 17px;\\n --dw-tree-elbow: 10px;\\n}\\n.dw-nav-list--tree .dw-nav-list__nav > .dw-nav-list__items { margin-left: var(--dw-space-2); }\\n.dw-nav-list--tree .dw-nav-list__items .dw-nav-list__items { margin-left: 18px; }\\n.dw-nav-list--tree .dw-nav-list__items > li { position: relative; padding-left: var(--dw-tree-elbow); }\\n.dw-nav-list--tree .dw-nav-list__items > li::before {\\n content: '';\\n position: absolute;\\n left: 0;\\n top: -2px;\\n bottom: 0;\\n border-left: 1px solid var(--dw-tree-line);\\n}\\n.dw-nav-list--tree .dw-nav-list__items > li:last-child::before { bottom: auto; height: calc(var(--dw-tree-mid) + 2px); }\\n.dw-nav-list--tree .dw-nav-list__items > li::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n top: var(--dw-tree-mid);\\n width: var(--dw-tree-elbow);\\n border-top: 1px solid var(--dw-tree-line);\\n}\\n.dw-nav-list.is-minimized .dw-nav-item {\\n justify-content: center;\\n width: 40px;\\n padding-right: 0;\\n padding-left: 0 !important;\\n}\\n.dw-nav-list__scroll { display: contents; }\\ndw-nav-list.dw-nav-list--minimizable { overflow: hidden; padding-bottom: 0; }\\n.dw-nav-list--minimizable > .dw-nav-list__scroll {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n gap: 2px;\\n min-height: 0;\\n overflow-y: auto;\\n padding-bottom: var(--dw-space-2);\\n}\\n.dw-nav-list--minimizable.is-minimized > .dw-nav-list__scroll { align-items: center; align-self: stretch; }\\n.dw-nav-list__minimize-row {\\n display: flex;\\n flex: none;\\n align-self: stretch;\\n justify-content: flex-end;\\n padding: var(--dw-space-2) 0;\\n border-top: 1px solid var(--dw-border);\\n}\\n.dw-nav-list.is-minimized .dw-nav-list__minimize-row { justify-content: center; }\\n.dw-nav-list__bottom-row { display: flex; flex: none; align-items: flex-end; gap: var(--dw-space-2); align-self: stretch; }\\n.dw-nav-list__bottom-row:empty { display: none; }\\n.dw-nav-list__bottom-row > :not(.dw-nav-list__minimize) { flex: 1 1 auto; min-width: 0; }\\n.dw-nav-list.is-minimized .dw-nav-list__bottom-row > :not(.dw-nav-list__minimize) { display: none; }\\n.dw-menu .p-menu-item-label,\\n.dw-menu .p-tieredmenu-item-label { display: inline-flex; flex-direction: column; }\\n.p-menu-submenu-label[data-automationid=\\\"dw-menu-plain-group\\\"] { display: none; }\\n.dw-menu__description { color: var(--dw-text-secondary); font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-14); }\\n.dw-menu .p-badge.dw-menu__count {\\n min-width: 20px;\\n height: 20px;\\n margin-left: auto;\\n padding: 0 var(--dw-space-2);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: 20px;\\n}\\n.dw-menu .p-menu-item-link { gap: var(--dw-space-2); }\\n.dw-menu__header {\\n margin: calc(-1 * var(--dw-space-1)) calc(-1 * var(--dw-space-1)) var(--dw-space-1);\\n padding: var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-menu-host { display: inline-flex; }\\n.dw-breadcrumb__img { width: 20px; height: 20px; object-fit: contain; vertical-align: middle; }\\n.dw-nav-item--parent { justify-content: flex-start; }\\n.dw-nav-list__row {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n padding-right: var(--dw-space-1);\\n border-radius: var(--dw-radius-md);\\n}\\n.dw-nav-list__row:hover { background: var(--dw-surface-pressed); }\\n.dw-nav-list__row.is-active { background: var(--dw-surface-selected); }\\n.dw-nav-list--marker .dw-nav-list__row.is-active { box-shadow: inset 3px 0 0 var(--dw-accent); }\\n.dw-nav-list__row > .dw-nav-item { flex: 1 1 auto; min-width: 0; width: auto; }\\n.dw-nav-list__row > .dw-nav-item:hover,\\n.dw-nav-list__row > .dw-nav-item.is-active { background: transparent; box-shadow: none; }\\n.dw-nav-list__actions { display: inline-flex; flex: none; align-items: center; gap: var(--dw-space-1); }\\n.dw-nav-list__actions:empty { display: none; }\\n.dw-nav-list__toggle { flex: none; }\\n.dw-nav-list__toggle--spacer { width: 20px; }\\n.dw-nav-list__toggle .pi { transition: transform var(--dw-dur-enter) var(--dw-ease); }\\n.dw-nav-list__toggle.is-collapsed .pi { transform: rotate(-90deg); }\\n.dw-steps {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n margin: 0;\\n padding: var(--dw-space-3) var(--dw-space-6);\\n border-bottom: 1px solid var(--dw-border);\\n list-style: none;\\n}\\n.dw-steps__item {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-medium);\\n}\\n.dw-steps__no {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 24px;\\n height: 24px;\\n border: 1px solid var(--dw-border-strong);\\n border-radius: 50%;\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-steps__item.is-active { color: var(--dw-text-link); }\\n.dw-steps__item.is-active .dw-steps__no { border-color: var(--dw-accent); background: var(--dw-accent-tint); }\\n.dw-steps__item.is-done { color: var(--dw-text); }\\n.dw-steps__item.is-done .dw-steps__no { border-color: var(--dw-accent); background: var(--dw-accent); color: var(--dw-text-inverse); }\\n.dw-steps__sep { flex: 0 0 48px; height: 1px; background: var(--dw-border-strong); }\\n.dw-rail-tabs { display: flex; flex-shrink: 0; width: 64px; }\\n.dw-rail-tabs__nav {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: var(--dw-space-1);\\n width: 100%;\\n padding: var(--dw-space-4) 0;\\n}\\n.dw-rail-tabs__btn {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-1);\\n width: 64px;\\n min-height: 60px;\\n padding: var(--dw-space-2) 6px;\\n border: none;\\n border-radius: var(--dw-radius-lg);\\n background: transparent;\\n color: var(--dw-text);\\n cursor: pointer;\\n transition: background-color var(--dw-dur-micro) var(--dw-ease), color var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-rail-tabs__btn:hover { background: var(--dw-surface-pressed); }\\n.dw-rail-tabs__btn:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-rail-tabs__btn.is-active { background: var(--dw-accent-tint); color: var(--dw-text-link); }\\n.dw-rail-tabs__icon { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; font-size: var(--dw-font-size-20); }\\n.dw-rail-tabs__label {\\n max-width: 52px;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n font-weight: var(--dw-font-weight-medium);\\n line-height: var(--dw-line-height-14);\\n text-align: center;\\n white-space: normal;\\n word-break: keep-all;\\n}\\n.dw-rail-tabs__btn.is-active .dw-rail-tabs__label { color: var(--dw-text-link); }\\n.dw-rail-tabs__spacer { flex: 1; }\\n.dw-rail-tabs__btn--compact { min-height: 40px; }\\n.dw-prose {\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: 1.6;\\n overflow-wrap: anywhere;\\n}\\n.dw-prose > :first-child { margin-top: 0; }\\n.dw-prose > :last-child { margin-bottom: 0; }\\n.dw-prose p { margin: 0 0 var(--dw-space-2); }\\n.dw-prose h1,\\n.dw-prose h2,\\n.dw-prose h3,\\n.dw-prose h4 { margin: var(--dw-space-4) 0 var(--dw-space-2); }\\n.dw-prose ul,\\n.dw-prose ol { margin: 0 0 var(--dw-space-2); padding-left: var(--dw-space-5); }\\n.dw-prose li { margin-bottom: var(--dw-space-1); }\\n.dw-prose a { color: var(--dw-text-link); text-decoration: underline; }\\n.dw-prose blockquote {\\n margin: 0 0 var(--dw-space-2);\\n padding: var(--dw-space-1) var(--dw-space-3);\\n border-left: 3px solid var(--dw-border-strong);\\n color: var(--dw-text-secondary);\\n}\\n.dw-prose code {\\n padding: 1px 4px;\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface-pressed);\\n font-size: 0.92em;\\n}\\n.dw-prose pre,\\n.dw-code-block {\\n margin: 0 0 var(--dw-space-2);\\n padding: var(--dw-space-3);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface-section);\\n color: var(--dw-text);\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-12);\\n line-height: 1.6;\\n overflow: auto;\\n}\\n.dw-prose pre code { padding: 0; background: transparent; }\\n.dw-prose table {\\n width: 100%;\\n margin: 0 0 var(--dw-space-2);\\n border-collapse: collapse;\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-prose th,\\n.dw-prose td {\\n padding: 6px var(--dw-space-2);\\n border: 1px solid var(--dw-border);\\n text-align: left;\\n}\\n.dw-prose th { background: var(--dw-surface-section); font-weight: var(--dw-font-weight-semibold); }\\n.pi.pi-brain::before {\\n content: '';\\n display: inline-block;\\n width: 1em;\\n height: 1em;\\n background-color: currentColor;\\n -webkit-mask: url(\\\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08A3 3 0 0 1 2.5 12.5a3 3 0 0 1 1.58-2.66A2.5 2.5 0 0 1 4.5 5.5a2.5 2.5 0 0 1 5-3z'/><path d='M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08A3 3 0 0 0 21.5 12.5a3 3 0 0 0-1.58-2.66A2.5 2.5 0 0 0 19.5 5.5a2.5 2.5 0 0 0-5-3z'/></svg>\\\") no-repeat center / contain;\\n mask: url(\\\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08A3 3 0 0 1 2.5 12.5a3 3 0 0 1 1.58-2.66A2.5 2.5 0 0 1 4.5 5.5a2.5 2.5 0 0 1 5-3z'/><path d='M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08A3 3 0 0 0 21.5 12.5a3 3 0 0 0-1.58-2.66A2.5 2.5 0 0 0 19.5 5.5a2.5 2.5 0 0 0-5-3z'/></svg>\\\") no-repeat center / contain;\\n vertical-align: -0.125em;\\n}\\n.dw-id-block-host {\\n display: inline-flex;\\n min-width: 0;\\n}\\n.dw-id-block {\\n display: inline-flex;\\n align-items: center;\\n gap: 3px;\\n min-width: 0;\\n color: var(--dw-text-muted);\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-11);\\n cursor: pointer;\\n transition: color var(--dw-dur-micro);\\n}\\n.dw-id-block:hover,\\n.dw-id-block:focus-visible {\\n color: var(--dw-text-secondary);\\n outline: none;\\n}\\n.dw-id-block__value {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n.dw-id-block__icon {\\n display: none;\\n flex-shrink: 0;\\n}\\n.dw-id-block:hover .dw-id-block__icon,\\n.dw-id-block:focus-visible .dw-id-block__icon,\\n.dw-id-block.is-copied .dw-id-block__icon {\\n display: inline-flex;\\n}\\n.dw-id-block.is-copied .dw-id-block__icon { color: var(--dw-status-success-solid); }\\n.dw-id-block__toast {\\n color: var(--dw-status-success-fg);\\n font-family: var(--dw-font-sans);\\n font-size: var(--dw-font-size-10);\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n}\\n.dw-id-block__toast:empty { display: none; }\\n.dw-id-block.is-copied .dw-id-block__toast {\\n animation: dw-fade-out 1.2s forwards;\\n}\\n@keyframes dw-fade-out {\\n 0%, 70% { opacity: 1; }\\n 100% { opacity: 0; }\\n}\\n.dw-code-block-host { display: block; min-width: 0; }\\n.dw-code-block__bar { display: flex; align-items: center; justify-content: space-between; gap: var(--dw-space-2); margin-bottom: var(--dw-space-1); }\\n.dw-code-block { margin: 0; white-space: pre; }\\n.dw-code-block:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-code-block--wrap { white-space: pre-wrap; overflow-wrap: anywhere; }\\ndw-markdown.dw-prose { display: block; }\\n.dw-prose--compact { font-size: var(--dw-font-size-12); line-height: 1.5; }\\n.dw-prose--compact p { margin-bottom: var(--dw-space-1); }\\n.dw-rag-cite-chip {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 22px;\\n height: 22px;\\n padding: 0 6px;\\n margin: 0 2px;\\n border-radius: var(--dw-radius-sm);\\n border: 1px solid var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: var(--dw-line-height-20);\\n text-decoration: none;\\n vertical-align: middle;\\n}\\na.dw-rag-cite-chip:hover {\\n background: var(--dw-accent-tint-strong);\\n text-decoration: none;\\n}\\n.dw-icon { display: inline-flex; flex-shrink: 0; align-items: center; justify-content: center; line-height: 0; vertical-align: -0.125em; }\\n.dw-icon svg { display: block; }\\n.dw-msg { display: flex; gap: 10px; }\\n.dw-msg + .dw-msg { margin-top: 14px; }\\n.dw-msg__avatar {\\n display: inline-flex;\\n flex-shrink: 0;\\n align-items: center;\\n justify-content: center;\\n width: 30px;\\n height: 30px;\\n margin-top: 2px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-msg__main { flex: 1; min-width: 0; }\\n.dw-msg__head { display: flex; align-items: center; gap: 6px; margin-bottom: var(--dw-space-1); }\\n.dw-msg__author { color: var(--dw-text); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-semibold); }\\n.dw-msg__role { color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-msg__bubble {\\n padding: 10px 14px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-md) var(--dw-radius-md) var(--dw-radius-md) 2px;\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n white-space: pre-wrap;\\n overflow-wrap: anywhere;\\n}\\n.dw-msg--user .dw-msg__avatar { border-color: var(--dw-border-accent); background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-msg--user .dw-msg__bubble { border-color: var(--dw-border-accent); background: var(--dw-accent-tint); color: var(--dw-accent-text); }\\n.dw-msg--agent .dw-msg__avatar { border-color: var(--dw-status-success-border); background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-composer {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-3) var(--dw-space-2);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-xl);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-sm);\\n transition: border-color var(--dw-dur-micro) var(--dw-ease), box-shadow var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-composer:focus-within { border-color: var(--dw-border-accent); box-shadow: var(--dw-focus-ring); }\\n.dw-composer__input {\\n width: 100%;\\n min-height: 84px;\\n max-height: 220px;\\n padding: 0;\\n border: 0;\\n outline: none;\\n resize: none;\\n background: transparent;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-composer__input::placeholder { color: var(--dw-text-muted); }\\n.dw-composer__toolbar { display: flex; align-items: center; gap: var(--dw-space-2); }\\n.dw-composer__spacer { flex: 1; }\\n.dw-composer__hint {\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-toast-host { display: contents; }\\n.dw-toasts {\\n position: fixed;\\n z-index: 9999;\\n width: 50%;\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-12);\\n pointer-events: none;\\n}\\n.dw-toasts--top-center { top: 0; right: 25%; }\\n.dw-toasts--top-right { top: 0; right: var(--dw-space-4); width: min(400px, 90%); }\\n.dw-toasts--bottom-center { bottom: 0; right: 25%; }\\n.dw-toasts--bottom-right { bottom: 0; right: var(--dw-space-4); width: min(400px, 90%); }\\n.dw-toast {\\n display: block;\\n width: 100%;\\n min-height: 35px;\\n margin: 10px;\\n padding: 10px;\\n border-radius: 60px;\\n font-size: 1em;\\n text-align: center;\\n opacity: 0.85;\\n pointer-events: auto;\\n animation: dw-toast-in 0.3s ease-out;\\n}\\n.dw-toast--success { background-color: var(--dw-status-success-fg); }\\n.dw-toast--error { background-color: var(--dw-status-danger-solid); }\\n.dw-toast--warning { background-color: var(--dw-status-warning-solid); }\\n.dw-toast--info { background-color: var(--dw-status-warning-border); }\\n.dw-toast__content {\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n}\\n.dw-toast__message {\\n flex: 1;\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-14);\\n line-height: 1.4;\\n text-align: center;\\n white-space: normal;\\n overflow-wrap: break-word;\\n word-break: break-word;\\n}\\n.dw-toast__close {\\n position: absolute;\\n top: 50%;\\n right: 5px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 20px;\\n height: 20px;\\n padding: 0;\\n border: none;\\n background: none;\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-18);\\n font-weight: var(--dw-font-weight-bold);\\n cursor: pointer;\\n opacity: 0.8;\\n transform: translateY(-50%);\\n transition: opacity 0.2s ease;\\n}\\n.dw-toast__close:hover { opacity: 1; }\\n.dw-toast__close:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); opacity: 1; }\\n@keyframes dw-toast-in {\\n from { opacity: 0; transform: translateY(-10px); }\\n to { opacity: 0.85; transform: translateY(0); }\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .dw-toast { animation: none; }\\n}\\n@media (max-width: 1024px) {\\n .dw-toasts--top-center, .dw-toasts--bottom-center { right: 20%; width: 60%; }\\n}\\n@media (max-width: 768px) {\\n .dw-toasts--top-center, .dw-toasts--bottom-center { right: 10%; width: 80%; }\\n}\\n@media (max-width: 480px) {\\n .dw-toasts--top-center, .dw-toasts--bottom-center { right: 5%; left: 5%; width: 90%; }\\n}\\n@media print {\\n .dw-toasts { display: none; }\\n}\\n.dw-stack {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-stack-gap, var(--dw-space-2));\\n min-width: 0;\\n}\\n.dw-hstack {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n gap: var(--dw-stack-gap, var(--dw-space-2));\\n min-width: 0;\\n}\\n.dw-inline-stack {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-stack-gap, var(--dw-space-1));\\n}\\n.dw-grid {\\n display: grid;\\n gap: var(--dw-stack-gap, var(--dw-space-4));\\n grid-template-columns: repeat(var(--dw-grid-cols, 12), minmax(0, 1fr));\\n}\\n.dw-grid--cols-1 { --dw-grid-cols: 1; }\\n.dw-grid--cols-2 { --dw-grid-cols: 2; }\\n.dw-grid--cols-3 { --dw-grid-cols: 3; }\\n.dw-grid--cols-4 { --dw-grid-cols: 4; }\\n.dw-grid--auto { grid-template-columns: repeat(auto-fill, minmax(var(--dw-grid-min, 280px), 1fr)); }\\n.dw-span-full { grid-column: 1 / -1; }\\n.dw-span-2 { grid-column: span 2; }\\n.dw-span-3 { grid-column: span 3; }\\n.dw-span-4 { grid-column: span 4; }\\n.dw-span-6 { grid-column: span 6; }\\n.dw-span-8 { grid-column: span 8; }\\n.dw-span-12 { grid-column: span 12; }\\n@media (max-width: 768px) {\\n .dw-grid--cols-2,\\n .dw-grid--cols-3,\\n .dw-grid--cols-4 { --dw-grid-cols: 1; }\\n .dw-grid > [class*='dw-span-'] { grid-column: 1 / -1; }\\n}\\n.dw-gap-0 { --dw-stack-gap: 0; gap: 0; }\\n.dw-gap-1 { --dw-stack-gap: var(--dw-space-1); gap: var(--dw-space-1); }\\n.dw-gap-2 { --dw-stack-gap: var(--dw-space-2); gap: var(--dw-space-2); }\\n.dw-gap-3 { --dw-stack-gap: var(--dw-space-3); gap: var(--dw-space-3); }\\n.dw-gap-4 { --dw-stack-gap: var(--dw-space-4); gap: var(--dw-space-4); }\\n.dw-gap-5 { --dw-stack-gap: var(--dw-space-5); gap: var(--dw-space-5); }\\n.dw-gap-6 { --dw-stack-gap: var(--dw-space-6); gap: var(--dw-space-6); }\\n.dw-gap-8 { --dw-stack-gap: var(--dw-space-8); gap: var(--dw-space-8); }\\n.dw-wrap { flex-wrap: wrap; }\\n.dw-nowrap { flex-wrap: nowrap; }\\n.dw-grow { flex: 1 1 auto; min-width: 0; }\\n.dw-shrink-0 { flex-shrink: 0; }\\n.dw-align-start { align-items: flex-start; }\\n.dw-align-center { align-items: center; }\\n.dw-align-end { align-items: flex-end; }\\n.dw-align-stretch { align-items: stretch; }\\n.dw-align-baseline { align-items: baseline; }\\n.dw-justify-start { justify-content: flex-start; }\\n.dw-justify-center { justify-content: center; }\\n.dw-justify-end { justify-content: flex-end; }\\n.dw-justify-between { justify-content: space-between; }\\n.dw-self-start { align-self: flex-start; }\\n.dw-self-center { align-self: center; }\\n.dw-self-end { align-self: flex-end; }\\n.dw-ml-auto { margin-left: auto; }\\n.dw-w-full { width: 100%; }\\n.dw-h-full { height: 100%; }\\n.dw-min-w-0 { min-width: 0; }\\n.dw-min-h-0 { min-height: 0; }\\n.dw-hidden { display: none !important; }\\n.dw-block { display: block; }\\n.dw-sticky-top {\\n position: sticky;\\n top: 0;\\n z-index: var(--dw-z-sticky);\\n}\\n.dw-relative { position: relative; }\\n.dw-overflow-auto { overflow: auto; }\\n.dw-overflow-hidden { overflow: hidden; }\\n.dw-truncate {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n min-width: 0;\\n}\\n.dw-line-clamp-2 {\\n display: -webkit-box;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n overflow: hidden;\\n}\\n.dw-line-clamp-3 {\\n display: -webkit-box;\\n -webkit-line-clamp: 3;\\n -webkit-box-orient: vertical;\\n overflow: hidden;\\n}\\n.dw-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border: 0;\\n}\\n.dw-m-0 { margin: 0; }\\n.dw-mt-0 { margin-top: 0; }\\n.dw-mb-0 { margin-bottom: 0; }\\n.dw-mt-1 { margin-top: var(--dw-space-1); }\\n.dw-mt-2 { margin-top: var(--dw-space-2); }\\n.dw-mt-3 { margin-top: var(--dw-space-3); }\\n.dw-mt-4 { margin-top: var(--dw-space-4); }\\n.dw-mt-6 { margin-top: var(--dw-space-6); }\\n.dw-mb-1 { margin-bottom: var(--dw-space-1); }\\n.dw-mb-2 { margin-bottom: var(--dw-space-2); }\\n.dw-mb-3 { margin-bottom: var(--dw-space-3); }\\n.dw-mb-4 { margin-bottom: var(--dw-space-4); }\\n.dw-mb-6 { margin-bottom: var(--dw-space-6); }\\n.dw-ml-1 { margin-left: var(--dw-space-1); }\\n.dw-ml-2 { margin-left: var(--dw-space-2); }\\n.dw-mr-1 { margin-right: var(--dw-space-1); }\\n.dw-mr-2 { margin-right: var(--dw-space-2); }\\n.dw-mr-4 { margin-right: var(--dw-space-4); }\\n.dw-p-0 { padding: 0; }\\n.dw-p-2 { padding: var(--dw-space-2); }\\n.dw-p-3 { padding: var(--dw-space-3); }\\n.dw-p-4 { padding: var(--dw-space-4); }\\n.dw-p-5 { padding: var(--dw-space-5); }\\n.dw-p-6 { padding: var(--dw-space-6); }\\n.dw-px-4 { padding-left: var(--dw-space-4); padding-right: var(--dw-space-4); }\\n.dw-py-2 { padding-top: var(--dw-space-2); padding-bottom: var(--dw-space-2); }\\n.dw-pt-1 { padding-top: var(--dw-space-1); }\\n.dw-text-10 { font-size: var(--dw-font-size-10); line-height: var(--dw-line-height-14); }\\n.dw-text-11 { font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-14); }\\n.dw-text-12 { font-size: var(--dw-font-size-12); line-height: var(--dw-line-height-16); }\\n.dw-text-14 { font-size: var(--dw-font-size-14); line-height: var(--dw-line-height-20); }\\n.dw-text-16 { font-size: var(--dw-font-size-16); line-height: var(--dw-line-height-24); }\\n.dw-text-20 { font-size: var(--dw-font-size-20); line-height: var(--dw-line-height-28); }\\n.pi.dw-text-10 { font-size: var(--dw-font-size-10); }\\n.pi.dw-text-11 { font-size: var(--dw-font-size-11); }\\n.pi.dw-text-12 { font-size: var(--dw-font-size-12); }\\n.pi.dw-text-14 { font-size: var(--dw-font-size-14); }\\n.pi.dw-text-16 { font-size: var(--dw-font-size-16); }\\n.pi.dw-text-20 { font-size: var(--dw-font-size-20); }\\n.dw-fw-400 { font-weight: var(--dw-font-weight-regular); }\\n.dw-fw-500 { font-weight: var(--dw-font-weight-medium); }\\n.dw-fw-600 { font-weight: var(--dw-font-weight-semibold); }\\n.dw-fw-700 { font-weight: var(--dw-font-weight-bold); }\\n.dw-text-primary { color: var(--dw-text); }\\n.dw-text-secondary { color: var(--dw-text-secondary); }\\n.dw-text-muted { color: var(--dw-text-muted); }\\n.dw-text-accent { color: var(--dw-accent); }\\n.dw-text-danger { color: var(--dw-status-danger-fg); }\\n.dw-text-success { color: var(--dw-status-success-fg); }\\n.dw-text-warning { color: var(--dw-status-warning-fg); }\\n.dw-text-center { text-align: center; }\\n.dw-text-right { text-align: right; }\\n.dw-nowrap-text { white-space: nowrap; }\\n.dw-break-word { overflow-wrap: anywhere; }\\n.dw-hstack--inline { display: inline-flex; }\\n.dw-gap-1_5 { --dw-stack-gap: var(--dw-space-1_5); gap: var(--dw-space-1_5); }\\n.dw-gap-2_5 { --dw-stack-gap: var(--dw-space-2_5); gap: var(--dw-space-2_5); }\";\nexport const DW_HOST_FONTS_CSS = \"@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'IBM Plex Mono';font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'IBM Plex Mono';font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'IBM Plex Mono';font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,d09GMgABAAAAAD0EABIAAAAArhAAADyfAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkwbhnAchlYGYBaXOgCEWAhECYJzERAKgowYge5gC4QyAAE2AiQDiGAEIAWDJgeJaQyDWBvrm0fE26eU4G5VFW0gbKmCcWwKcB6EogZ30shAHR2cF2T////nJB0yBuMOgF8zUxNCUjsjMyQplRmS7FkSKtuDQbLmjFx7HMtlUVpCtQtNjj/DTlMv2NbAOYy2wPM7JvA003gZ1lDHE5LGX8qlC6S+5BQfNe8BC9YDqRoRv9t5L340xRn6dCmiPwF1PYpS6cNitcqAd7kiDXW4IajoQldszepHJX5l/wHf9aHcpVRIGsJMywPvgtzg4qk5MWETEnMDHpiQPDdyBriTIxp2EkFjtNl716aoJzOt/5XQzCORTPsSCBUPWfx+oG3+e3fnCXcnFmLUgYpRGNUzsRacYNaynVu7SP9cpmOsy/rbjwy3HwzA3MpXxgajHWxsY8mimxVjbEQtGGyUhCgGAywwCjMRo1A8MPrvuMMqvGu9SrzIv6bZ9zpI3eputVrKozwaTbatcRznsX/OLKFjviue8GXA1gAuvJAA2y3+E2C7gB3PP3+MOu/PtEfigCeNRtVuY3MXUIPAbQDALIGD56Z4prOkybKf5We6vqraM3+l92z9aJfT3Wg5h4MUqLrLY3/y90mWztr4gDxpOz0CDBkG5waeSIR207mmQOexsXUmUYqRPP/fPb8NOFlrBThwwBJOrsCrn0NiR7IRnAL4D4CBeYYaT03wAQ3bdua3CoVWou3Hxs570MZStFHUYazCPcLpoLLJtvk0KRZVI98iL8EYlAfrZ9bg1BnSzMAmhLi6stTC/K+5SbNSCJnxOh3abVhqlDr3r6c6tX83/0u1MuX7n02O5HtMUSZiQc4GGWZ2z2WyLtQFGdj4JBZs9GCXx1XV7gialfyct8Q0uUV3zhhFztjIJYFSZZlChQovjVW54L+4GO98y95MUNbizdJzu5noMAysAM+xSTq0/v813+y8MktAiccDoawRd95MmjcU4Ek+QaAI4ABd+aWI5IBdedcSCL1nrV611UuVHj8cUJE2o1b++f1i5ROeqf1URmsU2w1FkG4JBhFkGIQNIazZfvYuIFzDFu8Co6FYxt9X7dnbrPMSTa9oPAmmT6QEkSV4bHpen9p19/fTnm1vrK+9GAIGTCBAtL37/SwPrnwl32qa2/Sw4KKLojjgDMjLf2gBOgEoGIiBOGHQOuugAQPQTjuhQYPQWWeh227DALYBGYtYIyHQLtk05PaduSXgdzG7sxn4u5ruVpCiANUIEVUY94OGhl8KpHkcE+CURB4DjaK/tAjmUNnBaHFCi0aA3/7wk2985gMvfWDEY3e9dN0Hg/QP/a0+o3fOCYcM2ukzHLPFOqukwC3RDeCs8/Rq94FGbGF6iuGtuwvFuezbDULPQTwtsRzPgRzOKrbhOA6x3s42D+zKkRyo/Ixv7rOeig0gjmIF5E0CBz8CGrHXptFIImJtRnqMTBhJu3IAB7KKgzj40xvCDFg/Wr1uA0GcFiL5ymQAmwDSgmKgbyPj4vbT0aERMBnUctLduk5PHwfay+oHdudEWs0uaRvD03bvtMZ03jWcKA1OehcmEbw5laXkq230tKjYhoM4ht9nb25hJXPsx1Gcy4EcyiHsygEcyQrITfs0kSlIGT4rx4KYNV8f+AvjeUoVBJoTKDD0fW2lhJ4j11KCuqcJEVZ5/4hiivlXQAOaGHftWks7VNORXLa2tUDZ4K+tOAJMOZL7PS2dkP1yQJBMgBL5vejSmm9gmnSRJPCW8ByClT9kwM6yiGWsYg3RGGxM0BRFKLa6J5IaYv88bQcCCpcAblkLnX7yEYfUK+LFCkGC9huSVryAsEVRcNgpGL9q7Y9kY7kSIIgrf29jCML3ooULoORCRuIXd/edhf2abLROCUqAMBDYfWvNX9oorgQIfwkLO23SZ4k5OjUSVCqSLVm0YD4UfncqEvwcnn8q4vywKe4b7+6reNwXQeznwka6KkEJSlCCEpSgBAhbiBaBrxwlWow4NNDQxppDwuUbWwEBmiCqVb8TgeIkDHjrHIfHnn1O7o7HOCOByybyyQrE6qBQVtciEI80sU3OQOxCWflGkpI8IvJLCk2BCHkicoQhgCrlpZwJKHdxBvv+LBeVV1irmGBNxSYECUTDInALWASAPfN5PN4EmByg8P8fATQGrS8DvgKURsIAjCMhAhFERAD6u76CyVYjiIjrf8S4+i+GxF6xzIv79A8zFrlIWC2bOfpkQYolG6zY2posByk7bDhYxjE7W07YcY49Dlxfjvhs9QtF1jtw4YYrd/M8spAzMiwbU+Z21XSWfW/NNNiR0ZMz4wywgFm9wRl2hAP1iaUH+IRkMgJTJmwS5cLMhV+ISMlK/rSCUW2FNr5Kk1XmR80aDVo26zhuPWcZehm5MCnEzGOLotPKi01xFfSw8+NQunQq213d3Cr2hSqnRxUoUvP0CoBiwfJ19QtRonaWqlvKXK5+VIimkiqN36s19xotLXBC0ByHtNawjtQSMXfW6Sz1RM1zzILcYGEa3WRRatbtFvE4Ry+t+mabpaGdDss8V7JVybW+1N1Yk9Tsd2ttYnsdnY2zuymhRx/tASZ+iMuIMcETYtyUlNkRQIkFqTEQrQGmgzAnyo7GwDkmeFEkP5RpYSQjCmtOkoOXIsgsyrNLCmTlUrGIUN9cswS69WagmWmDZYdtb8ch1HW05xTiOxO4OHQNjtyJPZx4BqVeZD6VNyz8KP1nhTv5V9Tajf1aV13fztMHD/EZT6aL+a6lN3hYwbkhFwShE2MngeKfGTU4fYimY2c4OEthVyJamkbeLE5vb9wEc+JRsqyzdXXawGXf387l40Zef57FD+0L7ocAU2hlsDmyCBTJmgqbNQa35UyOxFMOdI88ElO5rRd4ENZRxCT2LCmLlFXmzSjvCg4lp8qXJt3aPL9e4/iZhF+HmP5+7PHcBezdjKu6BoNdLJJTJfX+2SmRCRroEihKokoacyxgxMMUl6vtPjFFvE/+j6RIMek2LuUdeBdewSv5ED6aT+VPyHHyjfKNiiyFjfEH6MJTiZakimCuwQpKUbniI8MMsoEUZbLm7Xin8gbzUdd7JWEANIP6PkB9C4CqFfi/9aP/4/6HA/z7B/59pUEAfDr+RPGJ6hPEJ5iPn3+c83HNx8JHtR9NAQTYClwEbgMzZoGsUViy7AxQK1kSlf/lMqhCnm4r1EqUq9pUXWbKliyDIEuO+eZZoEqSaWpM1yPdG2iGOhq9ZaPcUsstsVK9BpOatCqzWIpmf2s32zPPvfZEo4WM8FQbta987muVzXlKLFFI5UqVjaWVtYOtnb2Fo6uTs7uL5m1fL28fP082GACEgiAwOAaJQhNxeAKCTKdQmTStQQGXxxdyRB6sNF4UkkigCeQrUGSKQsVsZStVK0yWajtNoTXMS6pGiywDOmskLlnoNKFTgE4HulDAFQOufAHcLFiyoAfx4dNnEdftvYXG5XpInbgMYuSli/56wCXjfFpD6hmcsVQPxJJZwEUT/nogl4ynnyE9dhaVu1XwffxAVqiPN/L1Gu0ZykOwRT+6vgoWfwaKdxtezZfsys8kljjOWglXVET764HyEZMifS1cUhqdYzayRvjvgMNkyT61iaTycHlh+ZlFqYgzifoKR7mcTztz05UwN1V5RcUJPR0ly4HzG+ziRaZGepGRRR7IMUsSTQRUvO5jIW7yM4tslOOAW0k+Kj3c7BQXIXaiWQ/eGic9duhx0episgiiYwIfcIYKx4mW6q8H8ZJ9xeVpqQLa8+UPiCTCsGBSjcwBGQWUFSALwcAUwOgvgMaHoLwD2PwfiEE9Dic5KYWYWBsdYTUT9cM45KTJYZgqsVmNzKbqjEy2DQ3nNyCqES1dUKU8sU6ClmOV3NBAIRuXsEmUiblk4y2uMMKQuE8Q3aF3lle9cLUobXhJbGe0k2sNyhZttV38ipQ2Mg5S3cRB6aTXSidaSK3FNIl0qqt/9XWUCBMYwWkgxMQRSqyUirTtK2OkSIwWS56LIFDCaK3ac0nXrXY6rVu9lUeaAproAcZs3aJS1Eiacn55qVqUzhukt1EQJZVZpcu530ilI0U9pXje43Ps/MPPuY7sVhd8utfbLNoo52Khhcyl1M50kmpDd67OhPCFJ0pZHiitZb2WdJxoJ9c60XMuz8u9NsgiRWmloqKHSq7RK+XMSObZ372ncl1S+eyC3YxJhJuWrgMmR69EnmxDINmfLwjkGOs1eLuO8NJhw175E7lAmtXjpxFrfGyYCQMOpzNwWRiSQYw93nAAAD4/j5DIoqP1pPEhvsoig6x9XhLElC+BkbI/U2BS60Hzp8xuz9/TN0JWmRlQ71GzgIaWxBtPWAmEmOAsr07e4z0+5btE6CGnLxpWhF6QHEtuTfGL+NHTFhTlw1NIZusthdfOlKwNhmtk+/uZXcTaYWKB0665G4ZibVXpyJEYNmYHvTVaG9jSNkaswquRSz3bxcQY3of7NdaxLHfaCukWgf+Erd0wlxQ+tzgnzh/dwwbBbY/TB/yDzjjQcZw0aVHK5qN20gog5RJoO4+A/Dcc4BGV8Kkj7hOWSHdbZ7yjkO0B11Cm8f76WROri7N5xCSW7hHl3bUzRMyOiZi0ujNAMGEay+lxGCaPevw4TsfLHcYIVWNbu1yxvW5gCw1qBCV9jKPoTjAbH7m9zxgqvfFHHUqt5I5KquuWhF1u34mau5zDd6bKt3cNj0ww1+dLXv/MUNpHa5eH9kbfdrY6Pmagb0Pm8dOOsbmURoueIX4bDFxWUsq19nmBhB6PQ/1Dxpjz7BirSoEyYEDAkiVOWlKIubgYxxAlvgop82d8Iy6Acw4mv8PBM7V/LrmoZHDUDeIKOJCEI9hWG69KCDHHkb2UeX4o2FMFU4SCqO/xqsuTULnuEuGZ49GpSlZo4EcSwQPJ/k3Ypg/eS086BA2MCzstYvEnaVpgCd2U3TD1Tl5ma54eQsFeNnGVDrCqtPJorpwfZZtzX6BtyLBZU58+JJslBTyTLx3vU+c5ey5gO7NT6E9mybmgcs9//1nlfoqrU+osXsyhuH2KSMsO8wMzLxvml4D7JH12zSno1YfucpDsMoWN59ep2dHGyi+slZY6MFAg+yxwV2l8ily5ZFZ+fyq419Dliyf2zt7jv5PYF8OntfbwB5cKPbFl3hhXzwZ8Y38Ijta3/lLk6E+VULy8XZYpP/5psuqV7Qp1Fy5Ew163Q3geH+OcyZJfutIv9hS8O+mKdk69u3bC3urnSnrm2tGT3pHjU53B1SwRJXia+cVUwvOEDHNMU6o8KA04rYlB8bSVRRxHcokzb2+ewDAyq1Srw9RaybVHdVOi6LnjYLU0G4wxkV6yGtuymjXagmEkYXeEnN4n9WjRPXkUzFadUXZMs8aJKWbvFU08Gh1/FaGs/OPzEzixfbjGqvd04q9hav3/FaI4suXdmMTIRKgYlKsogPQ8CCFRMESDXJcqdAVTDZQazcvXLLH0QCVYUMaNUvuO2uV73mpn13Hbtxq4qYoMn4bqPo/Od+7VSY8ueVQmZP8Ggq6p8u0oBL0eh0Ayzjfg5vYj0terUBdYeqya9yOzHXuAr0xX3jPs8CbGfWTod2O4xPcpgoDG+3h3dy/viSYypU0nn5GIMBhBK6r7tuC6sNID3JgZYWuk9hN9Lsc9KN5sx1zSOeFJkXbjHX2JRK4ZMXtybBPYYWiXN1O+CMvqk+/Rsux1yEvNPVKyeYuoZ0tl3waNboG+zzJFtQG2M0mBpPZXvJOTkf5WnxMSxLyYjhGyuhw9L7/Gnk7Ez4cbYRmuP3bm7dUT77VHbsAkt9RrTF2Hc7MJdymXQsWOqWCXI0Gs0WEJUYb8gu1HJneoJEEUpdndBOTeY6Uc4xlbEzHA2XHW6OsC1iIOswK/wztvy9oT7p1KyQFixgXlde7cwkijYIvQN6hTy1WfzwFvYiaMT6CFnPzfQN7xdIu9qJ4EvwDgCrWj12jP3Nso3Cn+rhO070VlEbAk7amTnuNJN9de97WTvf4XINibA6a76cYTRsJIXQOr0VKr0Oc3y/ub0ya+bIif9d6cc/bGGfFSg0gfV0ZZ0xO9aqV8O7teRxkOu/PaZok0kx9WXGASgtuEXcs13B0UXqLKL0jhBqvW0wkW//tmyzIgnxQiLiX90nOFePt0ex+J1TxxRCpm0v33X7yHUU99l2+fs4z+9QVJTqbum6NgZ7LDdELXSLhcWqgZS6lZCsj1uMYyRsQTA0w4dEqDZMjEh0SBQ1zrrNKr7N5mMAavZbOIoAWDnB5YR/S2aVnvKzkRPzYhqgPqL5TT72XXl2ZNT3Dn4ac8Z4Ka7I2jjtmd6n/4wyje3v3LKJoXRmHjf525s6LaftIVo72dM40uH/tVaKxm42Wl3ETrdZmVZPW8wD2gZjxgv+ZJ/ISw7cSxqUzI8b1LHGIRO3v2MFyVmPO4umkbeaAjrA66RmBjGRpZCSQRU96pWYzCsm9SQex4ETnFKiiLhSivvdkuf1rydyESPlLxnaHh2qlm085TUA5NQD3LTr0DvwL3C5ziNQe2xuu3iy4NB45Lqb5nisfhET0Twwel0irVrnMGylCqf8VrZG4jpnapwzltwhN6d0uPM/gwk2Z3G7i4LXe5aAOvyxo1HJN5TWe/x5dDpkMTUNW5TEuvsC0BF6uodnHcCdD6W7vwBjh+6SRe80irN6SlHPLZ4Wbjml0PdKXcm8Ahog7qrFQfqjAlBRh2SVOB9TxPmWxvtpyfyxLv3CBxYsLp4FPuJ/qiDeZhuUmWmWv8ECy3VhUe55zNGAd7Lvtxz6Wvsq/6/3/XQ49buntEDPTmlU78ul9o4MpLXfBemLr81BRSV6iaOHWFvytU9sh1WbocxQQKP3RteXePl9KUZLCDO+dszIryVYXJUHodWt+z7PGKzHZie+30OL2ScjdjxJqwRcCQzcrcTcnj7hTP7mss2W0+5jfIsvgkJJ15u8A3gk/n7Z+GXTi7Oz+UOnxkkOaUc0K9TqcC5FMGyJLEuuNIeFMtz/FoVrOVlLELd0HfzN38wnRfR+v2T75vbS41vrQrbxT8oevK66RfBwZYAB+5+XJHmduy83UZjvOTkHPeblZ0RaXe2tbKyl8U1SQb812PNH+9FoL+aNWGUqDDLJLTzRieFhHWr4gtLZHL9+4AlsUT4tGSnOitGYmVM+NuNEcs18kKZXJdj/6zuMye6AkYFoXuYvu6pJ5bTP/abz9RF6vAsqkEtQEXVCoJ2FBO2PkEBXVbAoL7Xn4SuUZSLJZrZcz6mVXizXV6XWMqRrbo1aUjAiunE9QGbECpwgVVhlKCRFySr9Rhq6TUaKo4Ta9i64nNZvNbUUnpZaFGJwZ+nSSO1fRYQ7ulR8JHitAz+VrCyfDVBVc1m5yC/7eqBO5lBWuNFRlrFyJpee+KXuB5ImEb4AmvQEJDadc4YRz+rhxUBF9R3ZVZTDbzCsl0q11HCaJNeLwpCzbF9whtkF+9nWSolXv2PtbxZnjxnL0dnA+VDsQPg1TTVQ1ZP4vLAElGuaqgMlRpX7alpQYiuWWWXRGP2TwMAwKGMDDwXnO+PyY9Gqbu2R1+J1gZeDLzRbhErTTYrbcza5C1Trmv4LP42USre3H3psl3PxXvOPjDxGg8aAodhB8M53cfCk+YCAlRU+KZaxTP9+sBN3CBEo7b1VRfxejLhX7n2hX1ydtyYVMdsiXEy5o1hRgNLKtuwZ6kLQpLC5IakUqrcWlmnaicRp1+VrzshsLg84ftw/k3RmaygNhLxxqKS+PhGauvaG9tJ0k8LyrV6AQnR8IjrRSwdwGfbtX9XEgQsfdgkcHpwpTp25+eI7rneaO2Okq21uIz54sDCmT7tDslofqBjBBdXaXNTqvBrpy9OVyL3opZ1Dn6MPxQOqYLrSrdJglmW+jxhHj9R2/NWqafklwDTvA5ZD1vzdKnzorRhpMMwx364ST60VrNrB2yriT5nB1duGsm5//ZqChlmYAA0Fac/+0aO2iMsM1AADa1861Zvb9W6Q1CdWV4ATFy799VjmfCISBa8psbaRxc+Nz7m0gY9lxnn7nHOrPk5tjorTGUGFSA3B9yjv0SjAa8cqmpCvC92WGmI406K4KV8lmlqI6L5dSJQk8L2QICC8siCDzvNSrA/b0XTxzvvdTPdyDWEfRHOrGR3JMtSL00UjqvVBrRI1tO5kY6sUcI+nUOhM489mLFkpHho0vOrnhxr86sryidX6KvMDu/tHnGxxqEo7QG2rXwZp9n/J0GwyihgUC3H6wGLdlSgcVGG8aHz3ZfXMp3IHry9UOd2HDSyUKkRhQpbWGkWJ/87S6WaPmS7qrpxo6562mTfkvH+3CTiia3TY7Arl93BS61YHsz9hcLbT1waXN5wZZgemFX7sovOf7Tkvi3DSoIx1z18LYKaaKrbcPtwSnCF5sHgyFJcwgaBOe1gImkZbUjSeJt07WO76yeAexmbGjrnEvTyW/ax/eNpquooYH1Qba6DLW02ItaBlga0K/ovnzsGK1ueRT/53XOzOgsFUaMRuEXw4YWda7xpNpYWyik3kftsuSOmGAqUMmaCmvyzhpdblVZlaRoVvDCNi9km4R8cu49z0Y9BdQ86uus2G6s06QO5q1bkuaMhv1d8lMteHDpYkWrw91QSuXL3/Cof66wgKsz3FFLqCfaVjiXJy9wn7YTBa2V5D+2mVNKM3xBBwfr0kir0cEGu6PX8bCB2KC4dnmEZLcOEYlDVjtppG+PNbORZynPt9kIGJZVW/cY718ZW1dczX1pyntfXd3frlKvYY7NyV4POpRk2Nxl2JwUAKQx/WtwWDEAUvR1WgdtA/L5IOVs+8DAZOSqe5OqQz4PqJil7Ri45un85r/sBteQcg1Qtc49tPrT8f+a6fe20ilnw0dtJVMRz7ZusM4srS1bWDbrzGWbplv445AcyDF891txXVns2o/iLSNu/fE7E87dsTLit3M+utItcDCSuV1c0Y735lD3rbnnQQrFxahRlI1Bg5tYarWsYktXhSd9j2ofEUhbz2WbaFuKbNB31xkyGQI/7AdFMhXrNSWdB7wund9FYBJsekE1Us61Q0augKqt/XqBXK4WckDsNK7a2NhftVzXgrwxdKeytnJ50bfP7aAqgEmd8ZXo/DnLd2g/e94WjJvPx/m06mq8ilMA2Xjl90rryA3Jc+dYpVoCEv0npVfPjKblrtznY4IV04gaIy6ksjGWmJtKfJNnvwm4zB526fk5G881YHB0W14d2skV4H1aVSVOWiv/MJqT/hgT9U/zp++j6UO/O/6It3zzTeuPJhMNrJyO0giwFrqhwPMxqFDtVJDR2qu+XInEl3sVrSUr1M5C0McFHgMda9EIqlCKsOxVoJT9ODb2sUrKehUdJ1pPT6NtEInW0dLoGzspI81JeD5W1DyUpvGW/4gLOSa6W7bmAZiVjs6GmShySfDnP1ojhXjPPy2Xkj/y8Z+9paxTCRi3bZjE9PmsZ00aj8ieiI2iJ88+XGMqytAndm9b6Q4Ae10yVCjvzVdrz/xRigVwu0evNTe7m7n6CGp7fRt2h7qykqxUlRFkGmQpv71aDtz3ihijq90HOrMy4utBILzUatOTxhdBwrYeaVYFXWvBC5tVo6hM9Dp0JgqTKkuUpcbX/bRIuAgq+zP2cQz6V8wfS5XpZ25aMv8KRlku8qd+oREAQZLjnZNGcEM1KVH78mPly3sXxMJvauib/cd7hTXZPx0Tt4tRzM9mCEXHUf99bgJF1ajF7g7qxNH2KYToWbbWOLPHF09hxakNZr+++B77f+q0nPfSYNx+FBLVz02MOT8UhP6NgSF/Lvz+6jjXQ4qR5zBmBj1Pj9OgBa6u7faZpXx5GqOSyhocjtHWSBoK4IR8h9HKn39u0SveagaWfE+b6B4VWjDLxG228j3xe26voja/XVWtmiHAyn0vvttWUYYta/beGiWq2J1yj618uTdW94r89x7e81MGf5O/NhGM/XIfnQs//I9oYNZkRmy7z+9rl2dMkgOifw7DuXSf/Iz/opg0/5eEjzA+G5YlLttAxXxE/TKbJL7oN2X85taQvR+ysbeN7NmbqZVfxiqP0Cp31OQteA75zO4qn08pZtGmqQAzqQwgTvLpS6CDhLfRQmdqQltp4aNgu9Xcm17d29SbPb0u0hRphL+OLOG3mSRjvwPG5gbzNmnsK/4ksiN41MPvLZBjp4x/QxlCY21qf76eSv6h3wmtkWFQ49j6dVoc6lEKgXHuo9kfoOdXmGb3vGkNLkTMaF1/vxlc2JeKIg6HyMu4iaw8Z/Rry9dRPi1T1cBweZnz7QXMLgYvq7ijq8CeY9A+DykjKLX4Ep6cN0OAVS95c4daWuSuiPhoMOMnf3pKjIIkK3HoLzjGjNVjxbg85KiFmGgSd9NKiFoEGqElkYigo0AU8dORoEg6HsmfN5NTgIKgnJyZeae3Gjt4rBT3P4QXi6wTwWHn4NmgbAck9yffjs+t4o8jsz8PozzSVoC004HSRAElCY5Bx2ACoCTad9yvKU/Ys4QmfDs4wiVwKCH4n/Jx2x8pOAtZbnLqtPtJhqtbjfRUyISD6yUEdT3NXVge8PmUUthr020grqZIKauJaZMFNB9Jg8iIm2TEnkmsHtFLTaQOsyt4FJR521cJGaOVyNt3nJVjgqcVl1suOwjC2WQTS+RzdmQueqetemlGpKW6F/dOfddYnUT3hMsb2PXg7yFzEtJXM99eu+KdRA2MkDdvsD2DOCMsW8sy01ucUX3SuuUXxbXhyOi1lr4fUtw/kfcj0F9OnBbm0y2gE07UvV+no30+sNlq3WySb7JatZWUbb36717QQxBQOJ9O58OhCB5tKeOr/LmqU8T2jS/ff1G4RdPzTnzTJRkG2Yiu7KLeEjL2Pops38cPmsumHSQHMr514OHfWgjk2a4I1IbsPfLrQmSSbEtr4i9WNfh5uvbVcDePR2T1AwRkk13M563RLWMNt5JpEUvFFuaUshw4J1aRXruysZGAD2EsWP+FQ11VwT1SfMH5xdBUKb/Zo1YD64+aGd0LrTGymtFmAy9fe/HECfwLL+eas4uavqxRSC5z5EbDlY+LXjteF318xWiQcy5LahRfthaZsxeZugtxJYnghLqA5RKTyMQV/FqSJ3JExVqfPX6BxX87igcMXwhsgyYhvtNceAoqaW1JSLYDmqRMh0tj8SbdC4KM+JsFBG9dpDq5LhBRA8s5vzlcT03gK301mb5am7euJZAWDTiaCZ1Tp73gmUvIW7+68vaZIUXwdN/pUOuRpv5tTaBtTUuPNLWGlL9o3p/bDxbn2Apc5W4/U+xTo18POjF/OJRS5lMigZzlshd3NWqms5QkGwmdusYL71ofFuD4bhEt4dhvEDfh88AYPPWV0gpzADKPYGJTBils00/K9DfhZFPpuDj/t4q3PwhGbcDDNPnP7VQLruzf8SN09qq0lNFbgVRtVVr9yuY3gZdG68sxB+e/SAelHBZTWvExjaEMK5ZX5qt1uGqFBFkm0NhwTKmd3xWcKS/fWiH9vIRPd7AP335+65tiYfd2kVqjkqlmnagMXl4Tesebr6lZ1UhqIVfb+OazJbI+c6/SZuQVEuoaUlUQpKb/f9p/DCsY6jX+2ZQ128eWseecGU2QDEoI6OlZdL2iqEh4PIlNKZCQNbjQLO4yqq2oZ9VKT6/dS3AmlNwm53i6GjXfZsUTbYS87xZ44dEeA+GK2f+5wfdya+D44sLAxjs+cE21v3514zxtQG7ScoUwoZFlzw70X3m2f/UHJl3/HnivMGc6iWfix8dWBHffGgwO3tkdhMIqzdaAbZWs9D1amhJp3RwM5WvcZuRfq6qg2N2zc56iaUmPXdj9dq+dVodSE9TAHr23K+rRxI5ZRjrLO1+M0MCeILfQw1LX3YEvdL9cH6CwTV3ise7LCXRLNHOi6gP+exrzQsk7G15Z2Z7cpT1njw73jCylbAQlJzCdbDHUVLVWzcfOEnGN98X7eHaUCe7kBKJttX2rfq0XTAV6sKbCGoLWtyfj/M7K2ZJzb7Rv5TJA0PAyngtvAwFyelt7L5iNgaliMqpNWkUrNpZdNiOcrX7qYzsCOip1vORx5D3NEKm0JiUHBnvYWm5gjPkQFPShjITMLTDY4VdtC3/ka+0CBn7iD8rwkhDskRrQ3yh27NZyRyswyGdSEqpA5Zs30UJmXamn8CGYOV6hp02TDNNP1BH7MWme6KLMy8lJyZcz/1tVjQ/777jIt+sExRl21ZuyE6djhb+3QWdlLoHA3u3R5rpUv911iVVLqNmfnnZUXjyimqEmhURfvd56gJLHJwMhUiRKisk7mAFK68uBhh6BSxez5AY2BbPsVgJkAM+wCCrkR3cYlk7UPGNEMtQF81YBylfWU0LCie+WHZTAkSdyADmXoZBrGXpgytVP1EdAMcAQk8Cc5vFNuhZ6SG0wy/GV/BcLWvSMIvtuV0sbkT7E5ls0Y4iBnGRoHxK+HZqcs9NXvqBBq4vPyC3gYhUtpDIKqbhNXyQMCVCkn+Xyn0kowVDCF5tw1FqLygm7gSxQ5gAM9ExQ1gB0be7hLNDsQ7nNnM0GZR3quBYNoVcFtwBPhJERQcdlFQ2wi/OjLERDYQQUQFUYAIUHEDejCilogH5zPaVnfJxu1Oka2YCi0ejoHMJu1OmSaXj1ipX+XPc0vV6YAloiy8zc8feUWEu8ss62zRPUaqrsRhnlJ1gO7CfKtOdhRvWJlQX5leMxAX3vly8IsKLQc4Ipi7Zr2J2tI7mvVl5Bo+XhdWpUnkaHz5OazoHUwo/BMHxB7xctnt2W7YLcXYf/XloGuLsaJ36gmnvl7MqHtq8ACSszPbz9beC8R77f5p3QmjI9brk8uM7R8cNFg0lo/2mzM257g/2gPXhPv6Vr/4s0xVSDlvsb1xvshuxq6S94+i8nIgE4McT2Ln0aCj7yLqfhpq/8rPYVX/aZ6uNtOL1hUQ+MW/COz3Ah2XXVbz6mYqyfdSqq8PCbpaG9fesmevzK1rizUXD+yfq/u4m9yybfrcS+kvYfLb3RkAzKPBlAiwyQa2J19kLuz+iMzr0FOv8ZNPMtArYAqkAXvYOlIqt0yTfQJZafbL7SzBMPC6V3N5pBa+x1/FBsh0+Lhs3XP1Thf8KT4Tfhf/kv/TqgaRD+JzyZ0T5sbGm8OjBI4clsADSemYfhQqoWgxSeZAv1JnZjVKuyQYQnMxmokoPZsIR4kpxeJxyEJWE2bBY2BxNBnwcZ7wmkjoQ0SqJjNmw27h447B52D7nrMHAU74o59lESY8s+zE43SyxDrBrn3Fi1tkqIQy13K9QjiUU5tPfX4n1bM/XBVI92ZB96rCP7yKMe83hH9rEnOuJP9qnHPOGXHbnPvnh//f/3Kqq/1aR6jTdJ8Vfo3RwHCg/+3iEZxvXG8Z8BxjKYBDzxWx5gs6d5U/1NAhfSrNvxmn11ol4QryDoKc0c+fB7yaQ0B97Qa/FtivwOEbAzjwNnPVoMmkqbH/HKkVlaWINrlbus8qmuHo0IyAVVbhAnCKAsQpWL9hJCTtovU9VZeImocuVEEqTDTKjKDdLxzikWgxbMva3Y3/CI1PC0NVT/ApLm8mJQnHbuCanhfA0hP2+HGs7XACnpkGy6Z2mhQmo4oYQQDwchNTxAWyJQDqPTVtek6xvkNxPBjJumMtY0DOVzKJsfMdmhjL59amwIrba2x0ZnUDsvz3odq/R3uNZSV+41cP+nLMU5b88XdAHP/wavf/0Nhg8BzOcHdICdlALoADsbXgp6K2v09YwynSlljphmjMfvd2LLhnOrMJmvfSr6FOUB1ei3aMjOwY8iAKWJIYjNLRDXKflhn9S4miPaoAxFHEVdZemW8wKEals9x02PEhtA60Fqaoa0bgg1kJbssE0mbCiuxjCcBkTKhs31C0M10/Q12o5VEtcvlGBPCgAPSUbBWzvQvuEWXYmpuoBAOdo0RIdMxpba4KM0if/Ssx740Ix1V57sIz78zM1+sutKrO+aRZO/ZyiVAUjyOqU2yHpJSZZ4wQBqySMktOTUlleIQADohR2tSXzhS/ncvf59962w905inorxwiKRCN3gTTq5sF3QwT6ioH39jX1jKtrkN4KtfW9Utj/5+b+t51t43HEv+8u3nE0L6T7ERFNLpAcJzxSHYxIkjikWo/hUP3BuLDttp+nJjAo8FiqTr15SmqXGXyNYAvB7RoZdUsjzAOOpzm0EdoCM5EA3QDezmvg7MxhArbSHwOhMKcY9gAjCQFbYIifskFtztcVtpR9fSK+1ILfzdnprzDMI2WAnGbZdKj08PTCQnqVzL3lDZbiksBrmrPRBMpZ2IrmubBCZ/rQiBAclwvk8IrTTiBQpY7fBgJw7bxsAdCYXQcQ39QjF0NxP8CYBlAl7zAp6QQeYWZj3VfRf2PjWCGZBzVbGy5mi02N15E0sXfqg0kQ2q0u5d9Nk1vYmY2oYJByTLCu9qRYWggCASdGCRbHZYZIKF0hzla6xXk8k7gnT65T6x4YNyzxGtODWWggRD5yPn2kK7cSZexkwgdi/aDDzpXgfhshCCU/dUEFmfzKqPxBrxf59XYZPMB38GlojeeyVAYWJuX8P7qiS1BaWgiad6HUDIeGZ2MroNWHJgqMYaJw6AbHo9jBTBOuvDf4irwQdkhUuUcLHuAvH5ByY0XdcrubGSc0RUy6a4Oaq4FTfAL8Oq+k+c9bUIajCimAdIyIuPVjsNAMzc9NfPwbq/dSy5qEu1SEJ4bwF93YKpMruaXLOA2Yqb4L5642lZmain5Kozldn2qbPlbXsBkwoApvL8TEhDptED7gKnAPtNrkzjCdAoGZGlilYiIl3uaPzrSxIuXLpmmwyZPfUqrqhZXUJ5dL5WUnZZyyAbdqDbOs+pmqW46iUqOUBdlotYv3lL+stJil6qfpaX0MeoHhBX0F4jh0gu0+09cz+9MIE5ncoKQB/U3cI4xLZClnLn51pdgegcO1Q9LA7HqLGcXk4HDTk7MjxD4XNGVIbjB4kYWMIksERnwLCF3hdSEb0ZYh//9W5vL2L87PJgZNaPCci9kkjKdL5v6Klmn8kqAFAazzViLkd1yuGuzTiBkosgQIfLZomKI2A8U2KWvLURRrzpGIice7gA5esqtWLKsmMRefwbz8sPTlJXZk3Hjcyo7omHMaE5kFZF6Qw1E+DYsNNeboakVHNVdBaWpWk4zAAM0Mk7B9oBbA6ElEWtCIMrRs3xxvMOaVLmHCpaC388X1DuYJGPPKyYnnVMsAfF4ryMrF5WJ221AtnJMtw6iR3JLddg7GJRb5hgGUEshQBOGw2ObHpLetkAeaZxiyDExMF7UGGZNrBRGrUqfVtTrOKm/BOY4IpsBwziRZhAcuJYK5PkFjwuWq0J1zelhaa4kIoMKkUK3v2JaoXaV0xpFOiZujWB182PlT3p9dq1TbqkzjFrn7Xs6ChqQGZmU+3Ir7zXHGz1Rgf2OModS8XsqJn8EUOdWtrm+9ibQiteN+sCEhQ/brnLsiEDU3HpocyNeMGZ4xpdtbYcVY90/8/a5X0EmPhXXSNt0Fu68wsPPhAaAlTQOveaM1eZH4VPhoVkLnd8AV17Ob93mZZLE2r12aywVIjbtALLD/QB40IXOVxIBwYIC6CFnW21RvMCYC5Td4HvlbS97Pc0A4xKhCSJYyPowDw4XbJj6VbO9VN2/zDMIw++LwNlrbguGXcCFe9sYwi5YnoV11uAaOs0sFQf688dVsFq4GsZ+mOAnNTs5zffq2a1As6r3i1si7/shj2czEdqaM4RDhBx9gamtuRy5XTK3awTW50rgrXV4mAfVEK9u26cv042Ogdu0tueCDduYfEzfXdx4qk9zs9dHRiRbr/CGl7LcEDfSQ1y3kjJe+iWpALU4EudlOgwoXMBU1ZvfxTx82f8+1L292fC9Vb1rxNRvBcx5ag+7LZjWsaC+nHJeOY1ceIewR0E+dihbK6g5uZDMOPeHvvENTg0MFJWy+wMDwlBYY1EOy2B5JA/qnYfcxK0PIZiCvBb+UZAAj9vktcX1kBwNqereq6gVGf9S1yBXVNAPDm/vdSH3NWWwZVoQpcdM72Yl3Zk1wRjbFrYAOVjMkL8Nkes9xGi0ZU5jJTgLLG6ENgfRxyRTBi2NLl8qUr1zSEBp3R0uUOmA0nLgd7fFq2BhERCnGBFhd8HvjOtfAlgoHWjYVpzTd8jOgQEMMsuCAjkGygdUIQBmJVFhAArEcyNtdkYC8Ipq7duKmVxNR5mapUc8UuStpQPp7/Q+PGmKEu63oUAIzZfRioTIE4CCMKFnLdwiIL5QGkNdsOIpiKWOB0GEX5wuByw1Ls42MWsomvxic+7b77wDRrObjamrYlRM/rZmDNimRwqKfy18tB6dDr+Yd30sslD1DoxJW/bD8wQcIZHwO+X2jOPQgvvektF1luWkV9UaGOUAjbFN3o5inPkL+sgodpk9CR/t1RZKMvoHR1euMOcuNWLtxFrP6qe3U+ut3PTtvuNJu1dXSMBFvydq0MWvctvqxzz+Nx7Snhf3ieUcBcWV/7e9idLoGNyxvr7GWuLTBVt/DTSGc7edJ0L70RuRNtCG2rvQPsReWb4NaNNW75LDhy6+xU68VJD/iNkbxuEWEyKsqSkr4LI/7sr0H2xHALTIJTADigb0qwIJHQSJ7ZzPXMVq7XukIZZTHMrtSY9ec5P7bOxgDVqtCTrtSRpKlMSGUamWAL4lCtktQMKKilBg0AcsWksh5k53ZPqrDxW9A9AKpj4JHchtjhyGMC8bPUgAGASPTc5s14PHFxN8SLWI8NyVNCBSkcj1fmJxIS7olZx+vrCiclAlZpUgYFK9Cxj2n+6QGO50PUiOwQMuZH5Z9UYeCim93wfReOxEOf6uSwjh6bcIWTXEmMkBcAKC4wiJFEw4BZlJ0/duRSYfhT3yqDAEcSLpS5vYS5lwtDo0nrss06tlG/bmss2SWDti3j1JPH5oN10c2WwMi32pfqRRIWaG/WLL42NA7Fcf9gsD2YQBeYlgEtQDELYCyu1pBA29igamLt7Boc4VQ/G2jGkA+6sGW95E8ALyAbX4PnBQb+jcO4aw5R3HtqRutKR0o9QIA4r7+L2hYjH6mNif5KoUbkYSTMkp3sEqJnvESPUyS45iBK1KifH2XcZFOziE/dQ2lW+NcpeRhoV5kihHDI/SmLitGetDA7BeQmdNDB8XDzrGVeBlxmmfEEJPCOMVtOL4lS3DissHnoyD3vz5td6ANfVChKmXy94AbMAlij6SYTwtgtRlgEG597OXQQ90Oy83anc4Z9NN0cGYcVZdYO9zpIzCOoVFnfAsIW5sQNd5wppTwYk9rQeN0b/eNmc96lOFAaTgnmgVAX/ELAU6c3eGATNrvtMETs26URmWpI9TUcFFrXRxVJMUOBorXCIz1N5/9kKiW4nD2FTcG+jdO0yN39zHvASxcuI+t0mB0ygOhUeginC/Fw7aEhnWWYJ9cQhpcgw3BOuTx2ZGdF6QyzSMvj17FoHO/ZbYwgiHXk7jgMM8RGkJsVQCg3HIZaZIarqhGaAYthzzcdmmWASOrgpnXJXGtsHKq8PiUO7k25AEIs6EnEITGNKNeFy+4LamvzKvVx0MnF+d67279j+pbPPS/MQTDPE0Z9uKfV+OofqmfXkERAnwX9Rm9ZgRUHSO2xzgeDwHFlMLMcAwZDQwIVBXAZmzNML46xP5CP1p9UkawfswJ/UJaRdjhBQ+gWmtiaXdPVINd5cmbrUBg/udq3cJh7lAy8OQK02k9nESa8Wf+kyqX8BK9hR4YVyYZkDg3XyNTxFtzMQ+t0TyfznBDbOMmBxHas+CDpJoMUKafYw0w8SwTuIACcF4u/FAclCupJ1OmcPYPL0HaC9GrjcMH6Y157ST9j1v9XWv8dqwF/JMYvRygHu2RfrbSUbYJEqp6zC98SVMG6rx5ujs3BWUWb7I7vBB5Xlwe8W/yIWVCqQX3pVu8xLZCMJnyG0UEThz2nprIUggU3uXBnslxrJIqZ+LYwF4GKitdJj6SNBgCCJzzPKP8bXKqS00gq6V8eBNcHEGzPm1pJ5xnycCqe2ZDZEoQ22T2Gj+52I6YRxcwqD26ZgMqy1h2LjuoyRTKw4WAloQyJ5byPe4iD33ZV4laOG0GEtO+rHRhIhzUVVMjyt6x+CjxWmFDNq/5XsyYdCLs9ZBI8w0/8wmBaoCfEANYgJu/9dL2wFKcOcOFynawkxtRzeuA3ooOcDRbypOM82eNHhKIirg6MU8LjwgUFXQDj2At6k2sNVUuVRGq2kCKd52yJo5qrSij6ZHbhYRQAZkxtucZ2RYUr+7NN72z2zOLPSfQTZD4XdUpUIrxBCKsFNjGNyMFR9LbN237ZDRvrQsj+J1gphN1ijmmAQroSbBnaqPwaGrPWCXG01JuiGiEiTolLRq3BJbYqb7oq6/tgGYdIQVpP7M4tEHohogN3WeAhYP6FLUgk48WxOddi7ankUc5Dk8kNRcMith2JvueuGpwL+EZrTWrL0MEAZjPrqKhJJdjBWKxrZjth3iIA4ZoZzGG/ZnbYmzWzw96UtdCnEuE7pmtT0J1Vwz9BWvCTLeT+7hL2Fk7wNbNVpsJFcb78ciXsrb/gDt/atuxNBagSnLps8f3hPO+jcsd/yCgjx91fy5a/Q4PYwQcAAK0qPZicP4xo3EaXzUcri48csAVlDtvmY7uIZkYoM5CoXHlR+x19FAdr+vb1Jhqliv0EzmDsX9/lP8S+6jwNpsXgBsFEJ5wm5TgeA2kIlj8EegCJcK/k+LBdrUbqJAnsZ7SPjvJOXvuQn0pCLahRKwhoa2v9SjC/4wmPDNtryWt/4QdDFwm8HAiZbKcGEO8TlSPS8RwBAgIS812u1MeaEB8XESPmeMEtGCCynwx92gq1D2seDfy0S/zNBlJE1Sa2H4DpgAYYeHGdV1Abah4/36c8XAowiJZdRaN+71AiyeNt2T21Bk3TfHhiZ6Vprv334nnkQ5vXxCBaxn6YhTb6e+1J9evc2mamYxOTqjVSIyAgHjMzd0BB4+qgcQPtnO4u1gCmTY0SJqflbq1QwJfiBNAqrBufEev5tX8BJmZQe4F97WHXRBBBVJr5wpIBJkMuKWJU/R79iuthRg5/e/8HAgLF3fETd9ZXpcd+A4nJbwB4P0caAfj4CTn2v3z7t6hzJtCGAAjYF4895fRO5X2jlIqTZLSUW1YMfZ0YgyFdRURDwCagjJ05gi62SwxOiMKIKA2uPEjlwmXJM0Kh44ijF4qtKz+5CXi5lDJlSQOKbYOMCQ0ZjxOhosjEaP2IvBmJycF1Dn424LgJnBz6NLouVkQ9SDhoXeB2U+VUj2MSAecNI6QZOqTpaRH3WAwOGAZlr8Tehrww2U6ViI4AGwHwFzFKtMU+EuFcQBnbFjtUIpWZ4ciIybsk1SzcSdvybDnotvJDQBbXkRJAbPbZJsWuMzgHZ78jDjvVIXzF5q9pmgw9tpnTDzHXHaIv4n/eAzVba1bgll6bDZ9yrr4++LnavduAByD+F5DRTIKPBjQEaAcF+QbJ761q85dGMYCzvsoW8mNYBIkTixStc0+ZlwmZ6kXzEgqTStQWuK17bLaLFnjSLjU6Nci0e9EButJm/nu26VQnUIF0ubIkyzNFM51Z8rRp1cZfMZ0WDZK1aaZVRqfT3RhPywsWIGTiYjw4Xo7sC0X76vT4TY1O145Lzmdr82kKb7SbvVm2bnNNJGdUCRKB92Is0k63FYCXpK/ZjLe2XSzVMXRpry20Ap5LPq5ugPbc9jnk3zywvQhIky5DpizZcuTKk6/AFIWKFCtRqoxauQqVqlQjqJCvNxhNZovVZnc4ARCCERTbr57UuFN/UzYpG7IfJ/3fzYEjJ2JuLIqEc85LZuk4Z+ZcMEwMu+SCi+6657objjpmCGU/BRYnXqJpZrCS4GpRIDLdN1ZYZY0+/fbYa2mZIA1maEk0JH622S/0eK7k7ljpgGuWlSksZ2qrBk2aNWrVYlCb77Tr1KXDK916zdRTIphltrnmmeMt85212k8WWGSxhX5g8MgDgpNqnLKBtsTwLZ2HHnviqWeee6HWiFF1xm102hk/mvC2ei99b5tfvcLUTFi243r7l/Q/RiSWSGVGcoVS1aLWtLZpjUE1Wp3eYDSZLVabPWqqNat1vw8czhwAIRhBMZwgKZphOV4QJblRglEF1jB//24VfHc0NahALOL5wQjSFYBRDz/2Qd9ceUkVwvylD+7XdIv//VGzn00fEzU36cp+e6dimQMLi7Ou+DeHitxb32uz3FY/K97DMrmID5dMLpab6lvFv9nfJwMpDQwEcS4wUmBgEJcCyQUGAiPjzSsgxUIRRRVTXAklVVRAJZVVUbUKazLD23RvSuC8ggFWRAkFFajKR0X4E6rXHe+QEzQ1Pd06Vj4KNs/USVzLMV8/GdNe36zV/a9mEpsY9uIKN+mZnmDS+63mnWNiGPOucxhssXQqfNyfDHrbzA+saErYjFht3/SyLb7pfgNr/0BceB9hUcMAP/tarxRRAPj+e1YmCqHyPfJf5MqJtUpQYwO7x/KIeS3izL6J8s5K/cLnXjV3gi3Le+7OFAs5tmzXDneLko+TMr1aap3AKbnXLYybIygc2zDK7BMacVxEc/C1pN//yld2ZidfS/nYq070ohPrxl90suyr5h+Gg23gECXM3IEIerHaqTv1y4lHE37bUKbYSVxUIlBP1KN6tvQge/Y38soPeZVf9cBP2rz7AgA=) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\";\n","import { DW_HOST_FONTS_CSS, DW_HOST_THEME_CSS } from './generated/host-theme';\n\n/** Attribute on the one `<style>` the host theme lives in. */\nexport const DW_HOST_THEME_ATTR = 'data-dw-crystal-theme';\n\nexport interface CrystalHostThemeOptions {\n /** Embed the latin Inter / IBM Plex Mono faces. `false` when the host page already loads them. Default true. */\n fonts?: boolean;\n}\n\n/**\n * Themes a page crystal doesn't own: for components delivered as federated custom elements (MIGRATION-PLAN §3.5).\n * Prepends one `<style data-dw-crystal-theme>` ahead of the host's stylesheets (so the host wins equal-specificity\n * ties) holding the host-safe theme: tokens incl. dark, the element base, component CSS and utilities, no resets and\n * no html / body rules. Fonts are embedded, since relative URLs can't resolve from an injected `<style>`.\n *\n * Safe to call from every element: the first call installs, later ones do nothing.\n * Mark the custom-element hosts with the `dw-element` class so they get the theme font.\n *\n * ```ts\n * installCrystalHostTheme(); // in each element's bootstrap\n * installCrystalHostTheme({ fonts: false }); // the host loads Inter / IBM Plex Mono itself\n * ```\n */\nexport function installCrystalHostTheme({ fonts = true }: CrystalHostThemeOptions = {}): void {\n if (typeof document === 'undefined' || document.head.querySelector(`style[${DW_HOST_THEME_ATTR}]`)) {\n return;\n }\n const style = document.createElement('style');\n style.setAttribute(DW_HOST_THEME_ATTR, '');\n style.textContent = fonts ? `${DW_HOST_FONTS_CSS}\\n${DW_HOST_THEME_CSS}` : DW_HOST_THEME_CSS;\n document.head.prepend(style);\n}\n\n/** Removes the host theme again (e.g. a host that unloads crystal, or a test). */\nexport function removeCrystalHostTheme(): void {\n if (typeof document !== 'undefined') {\n document.head.querySelectorAll(`style[${DW_HOST_THEME_ATTR}]`).forEach((style) => style.remove());\n }\n}\n","/*\n * Public API of @dataworkz/crystal — the Dataworkz core UI (`dw-*`).\n * Spec + rollout tracker: docs/CORE-COMPONENTS.md. Other entry points: /icons, /tokens, /primeng, /markdown.\n */\nexport * from './lib/button/dw-button.component';\nexport * from './lib/icon-button/dw-icon-button.component';\nexport * from './lib/status-pill/dw-status.map';\nexport * from './lib/status-pill/dw-status-pill.component';\nexport * from './lib/badge/dw-badge.component';\nexport * from './lib/tag/dw-tag-colors';\nexport * from './lib/tag/dw-tag.component';\nexport * from './lib/tag/dw-tag-list.component';\nexport * from './lib/tag/dw-tag-color-picker.component';\nexport * from './lib/tag/dw-tag-color-button.component';\nexport * from './lib/chip/dw-chip.component';\nexport * from './lib/avatar/dw-avatar.component';\nexport * from './lib/entity-icon/dw-entity-icon.component';\nexport * from './lib/loading/dw-spinner.component';\nexport * from './lib/loading/dw-skeleton.component';\nexport * from './lib/meter/dw-meter.component';\nexport * from './lib/check-toggle/dw-check-toggle.component';\nexport * from './lib/empty-state/dw-empty-state.component';\nexport * from './lib/banner/dw-banner.component';\nexport * from './lib/layout/dw-layout.directives';\nexport * from './lib/divider/dw-divider.component';\nexport * from './lib/resizer/dw-resizer.component';\nexport * from './lib/overlay-anchor.util';\nexport * from './lib/copy-button/dw-copy-button.component';\nexport { IdBlockComponent as DwIdBlockComponent } from './lib/id-block/id-block.component';\nexport * from './lib/field/dw-field-messages';\nexport * from './lib/field/dw-field.component';\nexport * from './lib/search-input/dw-search-input.component';\nexport * from './lib/file-dropzone/dw-file-dropzone.component';\nexport * from './lib/file-dropzone/dw-file-list.component';\nexport * from './lib/menu/dw-menu.component';\nexport * from './lib/card/dw-card.component';\nexport * from './lib/card/dw-toggle-card.component';\nexport * from './lib/tile/dw-tile.component';\nexport * from './lib/section/dw-section.component';\nexport * from './lib/tabs/dw-tabs.component';\nexport * from './lib/tabs/dw-rail-tabs.component';\nexport * from './lib/breadcrumb/dw-breadcrumb.component';\nexport * from './lib/page-header/dw-page-header.component';\nexport * from './lib/action-bar/dw-action-bar.component';\nexport * from './lib/nav-list/dw-nav-list.component';\nexport * from './lib/dialog/dw-dialog.component';\nexport * from './lib/confirm-dialog/dw-confirm-dialog.component';\nexport * from './lib/confirm-dialog/dw-confirm.service';\nexport * from './lib/drawer/dw-drawer.component';\nexport * from './lib/popover/dw-popover.component';\nexport * from './lib/toast/dw-toast.service';\nexport * from './lib/toast/dw-toast-host.component';\nexport * from './lib/tooltip/dw-tooltip-if-truncated.directive';\nexport * from './lib/table/dw-table.component';\nexport * from './lib/table/dw-column-picker.component';\nexport * from './lib/icon/dw-icon.component';\nexport * from './lib/icon/dw-icon-registry';\nexport * from './lib/timestamp/dw-clock.service';\nexport * from './lib/timestamp/dw-timestamp.component';\nexport * from './lib/theme/theme.service';\nexport * from './lib/theme/provide-crystal';\nexport * from './lib/theme/host-theme';\n\n// The glyph API, as dataworkz-ui's barrel exports it today. Its home is @dataworkz/crystal/icons.\nexport { DW_ICON_NAMES, DW_ICON_PREFIX, dwIconName, icon } from '@dataworkz/crystal/icons';\nexport type { DwIconName, IconName } from '@dataworkz/crystal/icons';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","SEVERITY_ICONS","i2","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"dataworkz-crystal.mjs","sources":["../../../../packages/crystal/src/lib/internal/image-icon.util.ts","../../../../packages/crystal/src/lib/tooltip/dw-tooltip-if-truncated.directive.ts","../../../../packages/crystal/src/lib/button/dw-button.component.ts","../../../../packages/crystal/src/lib/icon-button/dw-icon-button.component.ts","../../../../packages/crystal/src/lib/status-pill/dw-status.map.ts","../../../../packages/crystal/src/lib/status-pill/dw-status-pill.component.ts","../../../../packages/crystal/src/lib/badge/dw-badge.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-colors.ts","../../../../packages/crystal/src/lib/internal/svg-sanitizer.util.ts","../../../../packages/crystal/src/lib/icon/dw-icon-registry.ts","../../../../packages/crystal/src/lib/icon/dw-icon.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-list.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-color-picker.component.ts","../../../../packages/crystal/src/lib/overlay-anchor.util.ts","../../../../packages/crystal/src/lib/popover/dw-popover.component.ts","../../../../packages/crystal/src/lib/tag/dw-tag-color-button.component.ts","../../../../packages/crystal/src/lib/chip/dw-chip.component.ts","../../../../packages/crystal/src/lib/avatar/dw-avatar.component.ts","../../../../packages/crystal/src/lib/entity-icon/dw-icon-resolvers.ts","../../../../packages/crystal/src/lib/entity-icon/dw-entity-icon.component.ts","../../../../packages/crystal/src/lib/loading/dw-spinner.component.ts","../../../../packages/crystal/src/lib/loading/dw-skeleton.component.ts","../../../../packages/crystal/src/lib/meter/dw-meter.component.ts","../../../../packages/crystal/src/lib/check-toggle/dw-check-toggle.component.ts","../../../../packages/crystal/src/lib/empty-state/dw-empty-state.component.ts","../../../../packages/crystal/src/lib/banner/dw-banner.component.ts","../../../../packages/crystal/src/lib/layout/dw-layout.directives.ts","../../../../packages/crystal/src/lib/divider/dw-divider.component.ts","../../../../packages/crystal/src/lib/resizer/dw-resizer.component.ts","../../../../packages/crystal/src/lib/toast/dw-toast.service.ts","../../../../packages/crystal/src/lib/copy-button/dw-copy-button.component.ts","../../../../packages/crystal/src/lib/id-block/id-block.component.ts","../../../../packages/crystal/src/lib/id-block/id-block.component.html","../../../../packages/crystal/src/lib/field/dw-field-messages.ts","../../../../packages/crystal/src/lib/field/dw-field.component.ts","../../../../packages/crystal/src/lib/search-input/dw-search-input.component.ts","../../../../packages/crystal/src/lib/file-dropzone/dw-file-dropzone.component.ts","../../../../packages/crystal/src/lib/file-dropzone/dw-file-list.component.ts","../../../../packages/crystal/src/lib/menu/dw-menu.component.ts","../../../../packages/crystal/src/lib/card/dw-card.component.ts","../../../../packages/crystal/src/lib/card/dw-toggle-card.component.ts","../../../../packages/crystal/src/lib/tile/dw-tile.component.ts","../../../../packages/crystal/src/lib/section/dw-section.component.ts","../../../../packages/crystal/src/lib/tabs/dw-tabs.component.ts","../../../../packages/crystal/src/lib/tabs/dw-rail-tabs.component.ts","../../../../packages/crystal/src/lib/breadcrumb/dw-breadcrumb.component.ts","../../../../packages/crystal/src/lib/page-header/dw-page-header.component.ts","../../../../packages/crystal/src/lib/action-bar/dw-action-bar.component.ts","../../../../packages/crystal/src/lib/nav-list/dw-nav-list.component.ts","../../../../packages/crystal/src/lib/dialog/dw-dialog.component.ts","../../../../packages/crystal/src/lib/confirm-dialog/dw-confirm-dialog.component.ts","../../../../packages/crystal/src/lib/confirm-dialog/dw-confirm.service.ts","../../../../packages/crystal/src/lib/drawer/dw-drawer.component.ts","../../../../packages/crystal/src/lib/toast/dw-toast-host.component.ts","../../../../packages/crystal/src/lib/internal/table-rows.util.ts","../../../../packages/crystal/src/lib/internal/timestamp.util.ts","../../../../packages/crystal/src/lib/internal/date-format.util.ts","../../../../packages/crystal/src/lib/timestamp/dw-clock.service.ts","../../../../packages/crystal/src/lib/timestamp/dw-timestamp.component.ts","../../../../packages/crystal/src/lib/table/dw-table.component.ts","../../../../packages/crystal/src/lib/table/dw-column-picker.component.ts","../../../../packages/crystal/src/lib/theme/theme.service.ts","../../../../packages/crystal/src/lib/theme/provide-crystal.ts","../../../../packages/crystal/src/lib/theme/generated/host-theme.ts","../../../../packages/crystal/src/lib/theme/host-theme.ts","../../../../packages/crystal/src/index.ts","../../../../packages/crystal/src/dataworkz-crystal.ts"],"sourcesContent":["/**\n * True when an icon string is an image path rather than an icon-font class.\n *\n * Lives on its own (re-exported by dw-card, its public home) so the many components that need it don't import\n * dw-card: dw-badge did, while dw-card imports dw-badge, and that cycle left dw-card's `imports` undefined whenever\n * dw-badge happened to load first.\n */\nexport function isImageIcon(icon: string): boolean {\n return /[/.](svg|png|jpe?g|gif|webp)$/i.test(icon) || icon.startsWith('data:') || icon.includes('/');\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\n\n/** True when the element's text is cut off (ellipsis / clamp). */\nexport function isTruncated(el: HTMLElement): boolean {\n return el.scrollWidth > el.clientWidth + 1 || el.scrollHeight > el.clientHeight + 1;\n}\n\n/**\n * Only show the sibling `pTooltip` when the host text is truncated. Replaces\n * the `[tooltipDisabled]=\"el.scrollWidth <= el.clientWidth\"` pattern.\n *\n * ```html\n * <span class=\"dw-truncate\" [pTooltip]=\"row.name\" dwTooltipIfTruncated>{{ row.name }}</span>\n * <div [pTooltip]=\"desc\" dwTooltipIfTruncated [truncationTarget]=\"descEl\"><p #descEl class=\"dw-line-clamp-2\">…</p></div>\n * ```\n *\n * Tooltip conventions (no wrapper needed): `tooltipPosition=\"top\"` (default),\n * `[showDelay]=\"300\"`, `appendTo=\"body\"`; variants via\n * `tooltipStyleClass=\"dw-tooltip--multiline\"` / `\"dw-tooltip--error\"`.\n */\n@Directive({\n selector: '[dwTooltipIfTruncated]',\n standalone: true,\n host: {\n '(mouseenter)': 'refresh()',\n '(focusin)': 'refresh()',\n },\n})\nexport class DwTooltipIfTruncatedDirective {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltip = inject(Tooltip, { optional: true, self: true });\n\n /** Measure this element instead of the host (e.g. an inner clamped node). */\n readonly truncationTarget = input<HTMLElement | null>(null);\n\n refresh(): void {\n if (!this.tooltip) {\n return;\n }\n const target = this.truncationTarget() ?? this.host.nativeElement;\n // PrimeNG's show() reads the options object, which only the `tooltipDisabled`\n // binding updates — setting `disabled` alone never stopped the tooltip.\n const disabled = !isTruncated(target);\n this.tooltip.disabled = disabled;\n this.tooltip.setOption({ disabled });\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input, output, viewChild } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { Tooltip, TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { isTruncated } from '../tooltip/dw-tooltip-if-truncated.directive';\n\n/** `inverse` is a text / link action on a dark surface (snackbars, editor chrome). */\nexport type DwButtonVariant = 'primary' | 'secondary' | 'danger' | 'warn' | 'success' | 'inverse';\nexport type DwButtonAppearance = 'solid' | 'outlined' | 'text' | 'link';\nexport type DwButtonSize = 'sm' | 'md';\n\n/**\n * Design-system button. Renders a native `<button>` (or `<a>` when a\n * `routerLink`/`href` is given) styled by the global `.dw-btn` classes.\n *\n * ```html\n * <dw-button label=\"Save\" [loading]=\"saving\" loadingLabel=\"Saving…\" (clicked)=\"save()\" />\n * <dw-button label=\"Cancel\" variant=\"secondary\" appearance=\"outlined\" />\n * <dw-button label=\"Delete\" variant=\"danger\" icon=\"pi pi-trash\" />\n * <dw-button label=\"Open\" appearance=\"link\" routerLink=\"/agents\" />\n * ```\n */\n@Component({\n selector: 'dw-button',\n standalone: true,\n imports: [NgTemplateOutlet, RouterLink, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dw-button-host',\n '[class.dw-button-host--block]': 'block()',\n '[class.dw-button-host--truncate]': 'truncate()',\n },\n template: `\n <ng-template #content>\n @if (loading()) {\n <i class=\"pi pi-spin pi-spinner\" aria-hidden=\"true\"></i>\n } @else if (icon() && iconPos() === 'left') {\n @if (iconIsImage()) {\n <img class=\"dw-btn__img\" [src]=\"icon()\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n }\n @if (displayLabel()) {\n <span class=\"dw-btn__label\">{{ displayLabel() }}</span>\n }\n <ng-content />\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-btn__count\">{{ count() }}</span>\n }\n @if (!loading() && icon() && iconPos() === 'right') {\n @if (iconIsImage()) {\n <img class=\"dw-btn__img\" [src]=\"icon()\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n }\n @if (trailingIcon()) {\n <i [class]=\"trailingIcon()\" class=\"dw-btn__trailing\" aria-hidden=\"true\"></i>\n }\n </ng-template>\n\n <span\n class=\"dw-btn-wrap\"\n [pTooltip]=\"activeTooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [showDelay]=\"300\"\n [tooltipDisabled]=\"!activeTooltip()\"\n appendTo=\"body\"\n (mouseenter)=\"checkLabelCut()\"\n (focusin)=\"checkLabelCut()\"\n >\n @if (routerLink()) {\n <a\n [class]=\"classes()\"\n [routerLink]=\"routerLink()\"\n [queryParams]=\"queryParams()\"\n [target]=\"target() ?? undefined\"\n [attr.rel]=\"target() === '_blank' ? 'noopener noreferrer' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.tabindex]=\"isDisabled() ? -1 : null\"\n [attr.data-testid]=\"testId()\"\n (click)=\"onClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </a>\n } @else if (href()) {\n <a\n [class]=\"classes()\"\n [attr.href]=\"isDisabled() ? null : href()\"\n [attr.target]=\"target()\"\n [attr.rel]=\"target() === '_blank' ? 'noopener noreferrer' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.data-testid]=\"testId()\"\n (click)=\"onClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </a>\n } @else {\n <button\n [type]=\"type()\"\n [class]=\"classes()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() === null ? null : active()\"\n [attr.aria-busy]=\"loading() || null\"\n [attr.data-testid]=\"testId()\"\n (click)=\"onClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n }\n </span>\n `,\n})\nexport class DwButtonComponent {\n readonly label = input<string>('');\n readonly variant = input<DwButtonVariant>('primary');\n readonly appearance = input<DwButtonAppearance>('solid');\n readonly size = input<DwButtonSize>('md');\n readonly icon = input<string>('');\n readonly iconPos = input<'left' | 'right'>('left');\n readonly trailingIcon = input<string>('');\n readonly loading = input<boolean>(false);\n readonly loadingLabel = input<string>('');\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly disabled = input<boolean>(false);\n /** Tooltip shown only while the button is disabled. */\n readonly disabledReason = input<string>('');\n readonly tooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top');\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly routerLink = input<string | readonly unknown[] | null>(null);\n readonly queryParams = input<Record<string, unknown> | null>(null);\n readonly href = input<string | null>(null);\n readonly target = input<string | null>(null);\n readonly stopPropagation = input<boolean>(false);\n readonly ariaLabel = input<string | null>(null);\n /** Toggle state; renders aria-pressed when not null. */\n readonly active = input<boolean | null>(null);\n readonly count = input<number | string | null>(null);\n readonly block = input<boolean>(false);\n /**\n * Lets the button shrink with its container and cut the label with an ellipsis;\n * the tooltip then only shows while the label is actually cut off.\n */\n readonly truncate = input<boolean>(false);\n readonly rounded = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly clicked = output<MouseEvent>();\n\n /** `icon` may be a PrimeIcons class or an image path / data URI (e.g. a provider logo). */\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n readonly displayLabel = computed(() =>\n this.loading() && this.loadingLabel() ? this.loadingLabel() : this.label(),\n );\n readonly activeTooltip = computed(() =>\n this.disabled() && this.disabledReason() ? this.disabledReason() : this.tooltip(),\n );\n private readonly tip = viewChild(Tooltip);\n\n /**\n * truncate: let the tooltip open only while the label is cut off. Runs before PrimeNG's\n * own hover handler and sets the option its show() reads (toggling `tooltipDisabled`\n * mid-hover would cancel the pending show instead).\n */\n checkLabelCut(): void {\n const tip = this.tip();\n if (!this.truncate() || !tip || (this.disabled() && this.disabledReason())) {\n return;\n }\n const label = this.hostEl.nativeElement.querySelector('.dw-btn__label') as HTMLElement | null;\n tip.setOption({ disabled: !this.activeTooltip() || !label || !isTruncated(label) });\n }\n\n readonly classes = computed(() => {\n const appearance = this.appearance();\n const cls = ['dw-btn', `dw-btn--${this.variant()}`];\n if (appearance !== 'solid') {\n cls.push(`dw-btn--${appearance}`);\n }\n if (this.size() === 'sm') cls.push('dw-btn--sm');\n if (this.block()) cls.push('dw-btn--block');\n if (this.rounded()) cls.push('dw-btn--pill');\n // Icon-only (named through ariaLabel): square, like the other icon controls.\n if (this.icon() && !this.displayLabel() && (this.count() === null || this.count() === undefined)) cls.push('dw-btn--icon');\n if (this.active()) cls.push('is-active');\n if (this.isDisabled()) cls.push('is-disabled');\n return cls.join(' ');\n });\n\n onClick(event: MouseEvent): void {\n if (this.stopPropagation()) {\n event.stopPropagation();\n }\n if (this.isDisabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TooltipModule } from 'primeng/tooltip';\n\n/** `inverse` is for dark surfaces such as code-editor chrome. */\n/** `hover-outlined`: plain at rest, the outlined look on hover — for buttons sitting on a surface\n * whose own hover wash would hide the default hover (e.g. a tree row's expand toggle).\n * `toolbar`: page-header actions (run screen: Edit, Run settings, Help, Close) — a slightly\n * stronger glyph and an 8px radius. Pair with size=\"md\" for the 32px header button. */\nexport type DwIconButtonVariant = 'default' | 'accent' | 'danger' | 'outlined' | 'hover-outlined' | 'inverse' | 'toolbar';\n\n/**\n * Ghost icon-only button for row actions, close, kebab triggers.\n * `ariaLabel` is required — icon-only controls must be named.\n *\n * ```html\n * <dw-icon-button icon=\"pi pi-pencil\" ariaLabel=\"Edit\" tooltip=\"Edit\" (clicked)=\"edit(row)\" />\n * <dw-icon-button icon=\"pi pi-trash\" variant=\"danger\" ariaLabel=\"Delete\" (clicked)=\"remove(row)\" />\n * ```\n */\n@Component({\n selector: 'dw-icon-button',\n standalone: true,\n imports: [RouterLink, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-button-host' },\n template: `\n @if (routerLink()) {\n <a\n [class]=\"classes()\"\n [routerLink]=\"routerLink()\"\n [queryParams]=\"queryParams()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipStyleClass]=\"variant() === 'toolbar' ? 'dw-tooltip--toolbar' : ''\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"onClick($event)\"\n >\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"classes()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() === null ? null : active()\"\n [attr.aria-haspopup]=\"hasPopup() ? 'menu' : null\"\n [attr.aria-expanded]=\"expanded() ?? (hasPopup() ? false : null)\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipStyleClass]=\"variant() === 'toolbar' ? 'dw-tooltip--toolbar' : ''\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"onClick($event)\"\n >\n <i [class]=\"loading() ? 'pi pi-spin pi-spinner' : icon()\" aria-hidden=\"true\"></i>\n @if (attention()) {\n <span class=\"dw-icon-btn__dot\" aria-hidden=\"true\"></span>\n }\n </button>\n }\n `,\n})\nexport class DwIconButtonComponent {\n readonly icon = input.required<string>();\n readonly ariaLabel = input.required<string>();\n readonly variant = input<DwIconButtonVariant>('default');\n /** `xs` (20px) is for dense rows such as tree carets. */\n readonly size = input<'xs' | 'sm' | 'md'>('sm');\n readonly active = input<boolean | null>(null);\n /** Needs the user's attention (e.g. run settings not set): amber glyph plus an amber dot. */\n readonly attention = input<boolean>(false);\n readonly tooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top');\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n /** Row/card actions must not trigger the parent's click — on by default. */\n readonly stopPropagation = input<boolean>(true);\n readonly hasPopup = input<boolean>(false);\n /** Open state of what the button controls: a menu (with hasPopup) or a disclosure, e.g. a tree\n * row's expand toggle. Unset, a popup trigger reads as collapsed and other buttons omit it. */\n readonly expanded = input<boolean | null>(null);\n readonly routerLink = input<string | readonly unknown[] | null>(null);\n readonly queryParams = input<Record<string, unknown> | null>(null);\n readonly testId = input<string | null>(null);\n\n readonly clicked = output<MouseEvent>();\n\n readonly classes = computed(() => {\n const cls = ['dw-icon-btn'];\n if (this.size() === 'md') cls.push('dw-icon-btn--lg');\n if (this.size() === 'xs') cls.push('dw-icon-btn--xs');\n if (this.variant() !== 'default') cls.push(`dw-icon-btn--${this.variant()}`);\n if (this.active()) cls.push('is-active');\n if (this.attention()) cls.push('dw-icon-btn--attention');\n return cls.join(' ');\n });\n\n onClick(event: MouseEvent): void {\n if (this.stopPropagation()) {\n event.stopPropagation();\n }\n if (this.disabled() || this.loading()) {\n return;\n }\n this.clicked.emit(event);\n }\n}\n","export type DwTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral' | 'primary';\n\n/**\n * Central vocabulary: backend / UI status strings → design-system tone.\n * Matching is case-insensitive and ignores separators (`in-progress`,\n * `In Progress` and `IN_PROGRESS` are the same key).\n */\nexport const DW_STATUS_TONES: Readonly<Record<string, DwTone>> = {\n SUCCESS: 'success',\n SUCCEEDED: 'success',\n COMPLETED: 'success',\n COMPLETE: 'success',\n OK: 'success',\n ACTIVE: 'success',\n PARSED: 'success',\n DONE: 'success',\n ENABLED: 'success',\n\n ERROR: 'danger',\n ERRORED: 'danger',\n FAILED: 'danger',\n FAILURE: 'danger',\n TIMEOUT: 'danger',\n CANCELLED: 'danger',\n CANCELED: 'danger',\n REJECTED: 'danger',\n EXPIRED: 'danger',\n\n IN_PROGRESS: 'info',\n INPROGRESS: 'info',\n RUNNING: 'info',\n PROCESSING: 'info',\n STARTED: 'info',\n UPLOADING: 'info',\n\n PENDING: 'neutral',\n QUEUED: 'neutral',\n NOT_STARTED: 'neutral',\n NEW: 'neutral',\n SKIPPED: 'neutral',\n INACTIVE: 'neutral',\n DISABLED: 'neutral',\n DRAFT: 'neutral',\n\n UNTESTED: 'warning',\n PAUSED: 'warning',\n SUSPENDED: 'warning',\n WARNING: 'warning',\n DEPRECATED: 'warning',\n WAITING: 'warning',\n};\n\n/** Tones that represent work still happening (rendered with a pulsing dot). */\nexport const DW_IN_PROGRESS_STATUSES: ReadonlySet<string> = new Set([\n 'IN_PROGRESS',\n 'INPROGRESS',\n 'RUNNING',\n 'PROCESSING',\n 'STARTED',\n 'UPLOADING',\n]);\n\nexport function normalizeStatus(status: string | null | undefined): string {\n return (status ?? '').trim().toUpperCase().replace(/[\\s-]+/g, '_');\n}\n\nexport function toneForStatus(\n status: string | null | undefined,\n overrides?: Readonly<Record<string, DwTone>> | null,\n): DwTone {\n const key = normalizeStatus(status);\n if (overrides) {\n for (const [k, tone] of Object.entries(overrides)) {\n if (normalizeStatus(k) === key) {\n return tone;\n }\n }\n }\n return DW_STATUS_TONES[key] ?? 'neutral';\n}\n\n/** `IN_PROGRESS` → `In progress` */\nexport function humanizeStatus(status: string | null | undefined): string {\n const key = normalizeStatus(status);\n if (!key) {\n return '';\n }\n const words = key.toLowerCase().split('_').filter(Boolean);\n const text = words.join(' ');\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TooltipModule } from 'primeng/tooltip';\nimport {\n DW_IN_PROGRESS_STATUSES,\n DwTone,\n humanizeStatus,\n normalizeStatus,\n toneForStatus,\n} from './dw-status.map';\n\n/**\n * Status pill driven by the central status vocabulary (dw-status.map.ts).\n *\n * ```html\n * <dw-status-pill status=\"IN_PROGRESS\" /> <!-- info tone, pulsing dot -->\n * <dw-status-pill status=\"FAILED\" label=\"Error\" />\n * <dw-status-pill tone=\"warning\" label=\"Untested\" [dot]=\"false\" />\n * <dw-status-pill status=\"parsed\" [count]=\"12\" [selectable]=\"true\" [selected]=\"f === 'parsed'\"\n * (selectedChange)=\"f = 'parsed'\" />\n * ```\n * `status=\"none\"` renders an empty spacer that keeps column alignment.\n */\n@Component({\n selector: 'dw-status-pill',\n standalone: true,\n imports: [NgTemplateOutlet, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-status-pill-host' },\n template: `\n @if (isNone()) {\n <span class=\"dw-pill-spacer\" aria-hidden=\"true\"></span>\n } @else if (selectable()) {\n <button\n type=\"button\"\n [class]=\"classes()\"\n [attr.aria-pressed]=\"selected()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"toggle($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"body\" />\n </button>\n } @else {\n <span\n [class]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n <ng-container [ngTemplateOutlet]=\"body\" />\n </span>\n }\n\n <ng-template #body>\n @if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else if (dot()) {\n <span class=\"dw-pill__dot\" [class.dw-pill__dot--pulse]=\"isPulsing()\" aria-hidden=\"true\"></span>\n }\n <span class=\"dw-pill__label\">{{ text() }}</span>\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-pill__count\">{{ count() }}</span>\n }\n </ng-template>\n `,\n})\nexport class DwStatusPillComponent {\n readonly status = input<string | null>(null);\n /** Explicit tone wins over the status vocabulary. */\n readonly tone = input<DwTone | null>(null);\n /** Per-usage vocabulary overrides, e.g. `{ INACTIVE: 'danger' }`. */\n readonly map = input<Record<string, DwTone> | null>(null);\n readonly label = input<string>('');\n readonly dot = input<boolean>(true);\n readonly icon = input<string>('');\n readonly tooltip = input<string>('');\n readonly pulse = input<boolean | null>(null);\n readonly count = input<number | string | null>(null);\n readonly selectable = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly size = input<'sm' | 'md'>('md');\n readonly testId = input<string | null>(null);\n\n readonly selectedChange = output<boolean>();\n\n readonly isNone = computed(() => normalizeStatus(this.status()) === 'NONE' && !this.label());\n readonly resolvedTone = computed<DwTone>(() => this.tone() ?? toneForStatus(this.status(), this.map()));\n readonly text = computed(() => this.label() || humanizeStatus(this.status()));\n readonly isPulsing = computed(() => {\n const explicit = this.pulse();\n return explicit ?? DW_IN_PROGRESS_STATUSES.has(normalizeStatus(this.status()));\n });\n\n readonly classes = computed(() => {\n const cls = ['dw-pill', `dw-pill--${this.resolvedTone()}`];\n if (this.size() === 'sm') cls.push('dw-pill--sm');\n if (this.selectable()) cls.push('dw-pill--selectable');\n if (this.selected()) cls.push('is-selected');\n return cls.join(' ');\n });\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n this.selectedChange.emit(!this.selected());\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\n\n/** `workflow` / `reasoning` use the scenario-type entity tints. */\nexport type DwBadgeTone = 'neutral' | 'accent' | 'danger' | 'warning' | 'success' | 'muted' | 'workflow' | 'reasoning';\nexport type DwBadgeKind = 'count' | 'label';\n\n/**\n * Small badge — counts and short labels (Deprecated, type, category, Admin…).\n *\n * ```html\n * <dw-badge [value]=\"12\" />\n * <dw-badge value=\"Deprecated\" tone=\"muted\" tooltip=\"This agent is deprecated\" />\n * <dw-badge value=\"Required\" tone=\"accent\" kind=\"label\" />\n * <dw-badge value=\"admin\" [bordered]=\"true\" /> <!-- hairline outline, e.g. role pills -->\n * <dw-badge value=\"1 ms\" kind=\"label\" size=\"md\" /> <!-- 12px, in detail headers -->\n * <dw-badge value=\"Docs\" [icon]=\"logoUrl\" /> <!-- an image URL works too -->\n * ```\n */\n@Component({\n selector: 'dw-badge',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-label]=\"ariaLabel()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n @if (iconIsImage()) {\n <img class=\"dw-badge__img\" [src]=\"icon()\" alt=\"\" aria-hidden=\"true\" />\n } @else if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n {{ value() }}\n </span>\n `,\n})\nexport class DwBadgeComponent {\n readonly value = input<string | number | null>(null);\n readonly tone = input<DwBadgeTone>('neutral');\n /** `count` = round numeric pill, `label` = rectangular text badge. */\n readonly kind = input<DwBadgeKind | null>(null);\n /** Adds a hairline border around the badge. */\n readonly bordered = input<boolean>(false);\n /** `sm` (default) 11px text; `md` 12px, beside 13–14px detail text. */\n readonly size = input<'sm' | 'md'>('sm');\n /** PrimeIcons class, or an image path (svg/png/…). */\n readonly icon = input<string>('');\n readonly tooltip = input<string>('');\n readonly ariaLabel = input<string | null>(null);\n readonly testId = input<string | null>(null);\n\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n\n readonly resolvedKind = computed<DwBadgeKind>(\n () => this.kind() ?? (typeof this.value() === 'number' ? 'count' : 'label'),\n );\n\n readonly classes = computed(() => {\n const cls = ['dw-badge', `dw-badge--${this.tone()}`];\n if (this.resolvedKind() === 'label') cls.push('dw-badge--label');\n if (this.bordered()) cls.push('dw-badge--bordered');\n if (this.size() === 'md') cls.push('dw-badge--md');\n return cls.join(' ');\n });\n}\n","/**\n * User tag palette. Tag colours are stored by the backend as these hex\n * values; the UI resolves them to the matching --dw-tag-* token so a theme\n * can retune them. Unknown values are passed through as-is (user data).\n */\nexport const DW_TAG_PALETTE: ReadonlyArray<{ name: string; value: string; token: string }> = [\n { name: 'Red', value: '#ef4444', token: '--dw-tag-red' },\n { name: 'Orange', value: '#f97316', token: '--dw-tag-orange' },\n { name: 'Amber', value: '#f59e0b', token: '--dw-tag-amber' },\n { name: 'Yellow', value: '#eab308', token: '--dw-tag-yellow' },\n { name: 'Lime', value: '#84cc16', token: '--dw-tag-lime' },\n { name: 'Green', value: '#22c55e', token: '--dw-tag-green' },\n { name: 'Emerald', value: '#10b981', token: '--dw-tag-emerald' },\n { name: 'Teal', value: '#14b8a6', token: '--dw-tag-teal' },\n { name: 'Cyan', value: '#06b6d4', token: '--dw-tag-cyan' },\n { name: 'Sky', value: '#0ea5e9', token: '--dw-tag-sky' },\n { name: 'Blue', value: '#3b82f6', token: '--dw-tag-blue' },\n { name: 'Indigo', value: '#6366f1', token: '--dw-tag-indigo' },\n { name: 'Violet', value: '#8b5cf6', token: '--dw-tag-violet' },\n { name: 'Purple', value: '#a855f7', token: '--dw-tag-purple' },\n { name: 'Fuchsia', value: '#d946ef', token: '--dw-tag-fuchsia' },\n { name: 'Pink', value: '#ec4899', token: '--dw-tag-pink' },\n];\n\n/** Stable palette index for a label (same algorithm as the legacy tag-strip). */\nexport function hashTagIndex(label: string): number {\n let hash = 0;\n for (let i = 0; i < label.length; i++) {\n hash = (hash * 31 + label.charCodeAt(i)) | 0;\n }\n return Math.abs(hash) % DW_TAG_PALETTE.length;\n}\n\n/** CSS value for a tag dot: palette token, pass-through colour, or label hash. */\nexport function tagColorVar(color: string | null | undefined, label = ''): string {\n const value = (color ?? '').trim();\n if (value) {\n const match = DW_TAG_PALETTE.find((p) => p.value === value.toLowerCase());\n return match ? `var(${match.token})` : value;\n }\n return `var(${DW_TAG_PALETTE[hashTagIndex(label)].token})`;\n}\n","const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/** Elements that can run code, load content or restyle the page once the markup is inlined. */\nconst BLOCKED_ELEMENTS = new Set(['script', 'foreignobject', 'iframe', 'object', 'embed', 'link', 'style', 'meta', 'base']);\n\n/**\n * Makes consumer-provided SVG markup safe to inline: parses it as SVG, drops elements that\n * run code or load content (`<script>`, `<foreignObject>`, `<style>`…), every `on*` handler and every `href` that\n * isn't a same-document `#ref`, and the root's own width / height (dw-icon sizes it). Throws on markup that isn't one\n * `<svg>` element.\n */\nexport function sanitizeSvg(markup: string): string {\n if (typeof DOMParser === 'undefined' || typeof XMLSerializer === 'undefined') {\n throw new Error('sanitizeSvg needs a browser (DOMParser); register icons in the browser, not during SSR.');\n }\n const doc = new DOMParser().parseFromString(markup.trim(), 'image/svg+xml');\n const root = doc.documentElement;\n if (doc.getElementsByTagName('parsererror').length || root.localName !== 'svg' || root.namespaceURI !== SVG_NS) {\n throw new Error('Not an <svg> element.');\n }\n const elements = [root, ...Array.from(root.getElementsByTagName('*'))];\n for (const el of elements) {\n if (BLOCKED_ELEMENTS.has(el.localName.toLowerCase())) {\n el.remove();\n continue;\n }\n for (const attr of Array.from(el.attributes)) {\n const name = attr.name.toLowerCase();\n const isLink = name === 'href' || name.endsWith(':href');\n if (name.startsWith('on') || (isLink && !attr.value.trim().startsWith('#'))) {\n el.removeAttributeNode(attr);\n }\n }\n }\n root.removeAttribute('width');\n root.removeAttribute('height');\n return new XMLSerializer().serializeToString(root);\n}\n","import {\n EnvironmentProviders,\n Injectable,\n inject,\n isDevMode,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n signal,\n} from '@angular/core';\nimport { dwIconName, isGlyphName } from '@dataworkz/crystal/icons';\nimport { sanitizeSvg } from '../internal/svg-sanitizer.util';\n\n/** Icon names starting with this (any case) are crystal's: `dw…` and `dwi-…`. */\nexport const DW_RESERVED_ICON_PREFIX = 'dw';\n\n/**\n * The consumer's own SVG icons, by name. A consumer registers markup under any name that doesn't start with `dw`, and\n * uses it like a crystal glyph: `<dw-icon name=\"rocket\" />`, or `icon=\"rocket\"` on dw-chip, dw-nav-list items,\n * dw-rail-tabs and `dw-entity-icon kind=\"icon\"`.\n *\n * How an icon string resolves there: `dwi-<name>` is a crystal glyph; then a registered name is the consumer's SVG;\n * anything else is a CSS class (PrimeIcons `pi pi-…`).\n *\n * Markup strings only (bundle them, e.g. `import rocket from './rocket.svg?raw'`); no URLs. It's sanitized on\n * registration (no scripts, handlers, external links or `<style>`), drawn in its own colours or in currentColor.\n */\n@Injectable({ providedIn: 'root' })\nexport class DwIconRegistry {\n private readonly icons = new Map<string, string>();\n /** Bumped on every registration, so computed() in components that read the registry update (lazy features). */\n private readonly version = signal(0);\n\n /**\n * Adds an icon. Throws for a `dw…` name (crystal's) and for markup that isn't an `<svg>`. Registering a name twice\n * with different markup throws in dev mode; in production the first registration stays.\n */\n register(name: string, svg: string): void {\n const key = name.trim();\n if (!key || /\\s/.test(key)) {\n throw new Error(`DwIconRegistry: \"${name}\" is not an icon name (one word, no spaces).`);\n }\n if (key.toLowerCase().startsWith(DW_RESERVED_ICON_PREFIX)) {\n throw new Error(`DwIconRegistry: \"${key}\" starts with \"dw\", which is reserved for crystal's own icons.`);\n }\n let clean: string;\n try {\n clean = sanitizeSvg(svg);\n } catch (error) {\n throw new Error(`DwIconRegistry: \"${key}\": ${(error as Error).message}`);\n }\n const existing = this.icons.get(key);\n if (existing !== undefined) {\n if (existing !== clean && isDevMode()) {\n throw new Error(`DwIconRegistry: \"${key}\" is already registered with different markup.`);\n }\n return;\n }\n this.icons.set(key, clean);\n this.version.update((v) => v + 1);\n }\n\n /** Adds several icons (see {@link register}). */\n registerAll(icons: Readonly<Record<string, string>>): void {\n for (const [name, svg] of Object.entries(icons)) {\n this.register(name, svg);\n }\n }\n\n has(name: string | null | undefined): boolean {\n this.version();\n return !!name && this.icons.has(name);\n }\n\n /** Sanitized markup for a registered icon, sized for dw-icon; '' when unknown. */\n svg(name: string, size: number | string = '1em'): string {\n this.version();\n const markup = this.icons.get(name);\n return markup ? markup.replace('<svg', `<svg width=\"${size}\" height=\"${size}\"`) : '';\n }\n\n /** Registered names, in registration order. */\n names(): string[] {\n this.version();\n return [...this.icons.keys()];\n }\n\n /**\n * The `dw-icon` name an `icon` string stands for — a crystal glyph (`dwi-hand` → `hand`) or a registered name — or\n * null when it's a CSS class (PrimeIcons) to render as `<i class=\"…\">`.\n */\n resolve(icon: string | null | undefined): string | null {\n const glyph = dwIconName(icon);\n if (glyph) {\n return isGlyphName(glyph) ? glyph : null;\n }\n return this.has(icon) ? (icon as string) : null;\n }\n}\n\n/**\n * Registers the consumer's own icons at start-up (or when a lazy route's injector is created).\n *\n * ```ts\n * import rocketSvg from './icons/rocket.svg?raw';\n * providers: [provideCrystalIcons({ rocket: rocketSvg })]\n * ```\n */\nexport function provideCrystalIcons(icons: Readonly<Record<string, string>>): EnvironmentProviders {\n return makeEnvironmentProviders([provideEnvironmentInitializer(() => inject(DwIconRegistry).registerAll(icons))]);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { DwIconName, icon, isGlyphName } from '@dataworkz/crystal/icons';\nimport { DwIconRegistry } from './dw-icon-registry';\n\n/**\n * One of crystal's SVG glyphs (icons/svg/glyphs), or an icon the app registered with provideCrystalIcons(), drawn at\n * 1em so it follows the font size of its context; glyphs draw in `currentColor`, so they take its colour too.\n *\n * ```html\n * <dw-icon name=\"hand\" />\n * <dw-icon name=\"workflow\" size=\"16px\" class=\"dw-text-accent\" />\n * <dw-icon name=\"rocket\" /> <!-- registered by the app -->\n * ```\n */\n@Component({\n selector: 'dw-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-icon', 'aria-hidden': 'true', '[innerHTML]': 'svg()' },\n template: '',\n})\nexport class DwIconComponent {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly registry = inject(DwIconRegistry);\n\n /** A crystal glyph name, or a name registered with provideCrystalIcons(). */\n readonly name = input.required<DwIconName | (string & {})>();\n /** CSS length; defaults to the surrounding font size. */\n readonly size = input<string>('1em');\n\n readonly svg = computed<SafeHtml>(() => {\n const name = this.name();\n // Crystal's constant markup, or consumer markup sanitized when it was registered.\n const markup = isGlyphName(name) ? icon(name, this.size()) : this.registry.svg(name, this.size());\n return this.sanitizer.bypassSecurityTrustHtml(markup);\n });\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, input, output, viewChild } from '@angular/core';\nimport { Tooltip, TooltipModule } from 'primeng/tooltip';\nimport { isTruncated } from '../tooltip/dw-tooltip-if-truncated.directive';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { tagColorVar } from './dw-tag-colors';\n\n/**\n * User tag with a colour marker — a filled tag icon (default) or a dot (`marker=\"dot\"`). `color` is the stored tag colour (one of the\n * 16 palette hex values, resolved to its --dw-tag-* token) or any CSS colour.\n * Without a colour, one is derived from the label hash.\n *\n * ```html\n * <dw-tag label=\"finance\" color=\"#22c55e\" tooltip=\"team / finance\" />\n * <dw-tag label=\"draft\" [removable]=\"true\" (removed)=\"remove(tag)\" />\n * ```\n * A tooltip that just repeats the label only shows while the label is cut off (ellipsis).\n */\n@Component({\n selector: 'dw-tag',\n standalone: true,\n imports: [TooltipModule, DwIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-tag-host' },\n template: `\n <span\n class=\"dw-tag dw-tag--user\"\n [class.dw-tag--clickable]=\"clickable()\"\n [attr.role]=\"clickable() ? 'button' : null\"\n [attr.tabindex]=\"clickable() ? 0 : null\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip() || label()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (mouseenter)=\"gateTooltip()\"\n (focusin)=\"gateTooltip()\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n >\n @if (showDot()) {\n @if (marker() === 'icon') {\n <dw-icon class=\"dw-tag__icon\" name=\"tagFilled\" [style.color]=\"dotColor()\" aria-hidden=\"true\" />\n } @else {\n <span class=\"dw-tag__dot\" [style.background]=\"dotColor()\" aria-hidden=\"true\"></span>\n }\n }\n <span #labelEl class=\"dw-tag__label\">{{ label() }}</span>\n @if (removing()) {\n <i class=\"pi pi-spin pi-spinner dw-chip__remove dw-chip__remove--busy\" role=\"status\"\n [attr.aria-label]=\"'Removing ' + label()\"></i>\n } @else if (removable()) {\n <button\n type=\"button\"\n class=\"dw-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"onRemove($event)\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </span>\n `,\n})\nexport class DwTagComponent {\n readonly label = input.required<string>();\n readonly color = input<string | null>(null);\n /** Show the colour marker at all. */\n readonly showDot = input<boolean>(true);\n /** The colour marker: a filled tag icon (default) or a small square dot. */\n readonly marker = input<'icon' | 'dot'>('icon');\n readonly tooltip = input<string>('');\n readonly removable = input<boolean>(false);\n /** Removal in flight: the x becomes a small, non-clickable spinner. */\n readonly removing = input<boolean>(false);\n readonly clickable = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly removed = output<void>();\n readonly clicked = output<Event>();\n\n readonly dotColor = computed(() => tagColorVar(this.color(), this.label()));\n\n private readonly tip = viewChild(Tooltip);\n private readonly labelEl = viewChild<ElementRef<HTMLElement>>('labelEl');\n\n /** Runs before PrimeNG's own hover handler and sets the option its show() reads. */\n gateTooltip(): void {\n const tip = this.tip();\n const label = this.labelEl()?.nativeElement;\n if (!tip || !this.tooltip()) return;\n tip.setOption({ disabled: this.tooltip() === this.label() && !!label && !isTruncated(label) });\n }\n\n onClick(event: Event): void {\n if (!this.clickable()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.clicked.emit(event);\n }\n\n onRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.removed.emit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { DwTagComponent } from './dw-tag.component';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface DwTagItem {\n label: string;\n color?: string | null;\n tooltip?: string;\n id?: string | number;\n}\n\n/**\n * Row of tags with \"+N more\" overflow and an optional \"Add tags\" control.\n *\n * `addAppearance=\"icon\"` is the compact form for a narrow table column: one line, the tags\n * ellipsise as needed, and a single small outlined \"+\" button carries the hidden count\n * (\"+ 3\") — it replaces the \"+N more\" pill and emits `add`. With `[fit]=\"true\"` it shows as\n * many whole tags as the row has room for (at least one, ellipsised if it alone is too long),\n * re-fitted when the tags change or the window resizes.\n *\n * ```html\n * <dw-tag-list [tags]=\"agent.tags\" [maxVisible]=\"3\" [showAdd]=\"canEdit\"\n * (add)=\"openTags(agent)\" (moreClicked)=\"openTags(agent)\" />\n * ```\n */\n@Component({\n selector: 'dw-tag-list',\n standalone: true,\n imports: [DwTagComponent, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dw-tag-list',\n '[class.dw-tag-list--compact]': \"compact()\",\n '[class.dw-tag-list--measuring]': 'measuring()',\n },\n template: `\n @for (tag of visible(); track tag.id ?? tag.label) {\n <dw-tag\n [label]=\"tag.label\"\n [color]=\"tag.color ?? null\"\n [tooltip]=\"tag.tooltip ?? ''\"\n [removable]=\"removable()\"\n (removed)=\"removed.emit(tag)\"\n />\n }\n @if (hiddenCount() > 0 && !compact()) {\n <button\n type=\"button\"\n class=\"dw-tag dw-tag--more\"\n [attr.aria-label]=\"'Show ' + hiddenCount() + ' more tags'\"\n (click)=\"onMore($event)\"\n >\n +{{ hiddenCount() }} more\n </button>\n }\n @if (showAdd()) {\n @if (compact()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--outlined dw-icon-btn--xs dw-tag-list__add\"\n [class.dw-icon-btn--labelled]=\"hiddenCount() > 0\" [attr.aria-label]=\"compactAddLabel()\"\n [pTooltip]=\"addLabel()\" tooltipPosition=\"top\" [showDelay]=\"300\" appendTo=\"body\"\n (click)=\"onAdd($event)\">\n <i class=\"pi pi-plus\" aria-hidden=\"true\"></i>\n @if (hiddenCount() > 0) { <span class=\"dw-tag-list__add-count\">{{ hiddenCount() }}</span> }\n </button>\n } @else {\n <button type=\"button\" class=\"dw-tag dw-tag--add\" (click)=\"onAdd($event)\">\n <i class=\"pi pi-plus\" aria-hidden=\"true\"></i>\n {{ addLabel() }}\n </button>\n }\n }\n `,\n})\nexport class DwTagListComponent {\n readonly tags = input<DwTagItem[] | null>([]);\n /** 0 = show all. */\n readonly maxVisible = input<number>(0);\n readonly removable = input<boolean>(false);\n readonly showAdd = input<boolean>(false);\n readonly addLabel = input<string>('Add Tags');\n /** `pill` = dashed \"+ Add Tags\" pill; `icon` = small outlined \"+\" button (label as tooltip). */\n readonly addAppearance = input<'pill' | 'icon'>('pill');\n /** Compact only: show as many whole tags as fit (overrides `maxVisible`). */\n readonly fit = input<boolean>(false);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n /** How many tags fit (null = render them all, to measure). */\n private readonly fitCount = signal<number | null>(null);\n readonly measuring = computed(() => this.fitting() && this.fitCount() === null);\n private readonly fitting = computed(() => this.fit() && this.compact());\n\n constructor() {\n // Re-fit whenever the tags (or the mode) change: render all, measure, then trim.\n effect(() => {\n this.tags();\n if (!this.fitting()) return;\n untracked(() => this.refit());\n });\n const onResize = () => this.fitting() && this.refit();\n window.addEventListener('resize', onResize);\n inject(DestroyRef).onDestroy(() => window.removeEventListener('resize', onResize));\n }\n\n private refit(): void {\n this.fitCount.set(null);\n afterNextRender(() => this.fitCount.set(this.countFitting()), { injector: this.injector });\n }\n\n /** With every tag at its natural width, how many fit beside the + button (at least one). */\n private countFitting(): number {\n const el = this.host.nativeElement;\n const tags = Array.from(el.querySelectorAll<HTMLElement>(':scope > dw-tag'));\n const gap = parseFloat(getComputedStyle(el).columnGap) || 0;\n const plainAdd = 20; // the + button alone\n const countedAdd = 34; // + with a count (\"+ 12\")\n let used = 0;\n let n = 0;\n for (let i = 0; i < tags.length; i++) {\n const width = tags[i].getBoundingClientRect().width;\n const button = i + 1 < tags.length ? countedAdd : plainAdd;\n if (used + (n ? gap : 0) + width + gap + button > el.clientWidth) break;\n used += (n ? gap : 0) + width;\n n++;\n }\n return Math.max(1, n);\n }\n\n /** Emit the originating click so hosts can anchor popovers to it. */\n readonly add = output<MouseEvent>();\n readonly moreClicked = output<MouseEvent>();\n readonly removed = output<DwTagItem>();\n\n readonly visible = computed(() => {\n const all = this.tags() ?? [];\n if (this.fitting()) {\n const fitCount = this.fitCount();\n return fitCount === null ? all : all.slice(0, fitCount);\n }\n const max = this.maxVisible();\n return max > 0 ? all.slice(0, max) : all;\n });\n\n readonly hiddenCount = computed(() => (this.tags() ?? []).length - this.visible().length);\n /** Compact form: only when the add control is shown (it carries the hidden count). */\n readonly compact = computed(() => this.addAppearance() === 'icon' && this.showAdd());\n readonly compactAddLabel = computed(() =>\n this.hiddenCount() > 0 ? `${this.addLabel()} · ${this.hiddenCount()} more` : this.addLabel(),\n );\n\n onMore(event: MouseEvent): void {\n event.stopPropagation();\n this.moreClicked.emit(event);\n }\n\n onAdd(event: MouseEvent): void {\n event.stopPropagation();\n this.add.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DW_TAG_PALETTE, tagColorVar } from './dw-tag-colors';\n\n/**\n * Tag colour picker: the 16-colour tag palette as a radio group of swatches.\n * `value` is the stored palette hex (what the tag API takes); the swatches\n * paint with the matching --dw-tag-* token.\n *\n * ```html\n * <dw-tag-color-picker [(value)]=\"tag.color\" />\n * ```\n */\n@Component({\n selector: 'dw-tag-color-picker',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"dw-swatches\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel()\" [attr.data-testid]=\"testId()\">\n @for (color of palette; track color.value) {\n <button\n type=\"button\"\n class=\"dw-swatch\"\n role=\"radio\"\n [class.dw-swatch--selected]=\"isSelected(color.value)\"\n [attr.aria-checked]=\"isSelected(color.value)\"\n [attr.aria-label]=\"color.name\"\n [pTooltip]=\"color.name\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n [style.background-color]=\"swatchColor(color.value)\"\n (click)=\"value.set(color.value)\"\n >\n @if (isSelected(color.value)) {\n <i class=\"pi pi-check\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n </div>\n `,\n})\nexport class DwTagColorPickerComponent {\n readonly value = model<string>(DW_TAG_PALETTE[0].value);\n readonly ariaLabel = input<string>('Tag color');\n readonly testId = input<string | null>(null);\n\n readonly palette = DW_TAG_PALETTE;\n\n isSelected(color: string): boolean {\n return (this.value() ?? '').toLowerCase() === color;\n }\n\n swatchColor(color: string): string {\n return tagColorVar(color);\n }\n}\n","/**\n * Overlay anchors: a bar (e.g. a fixed page header) marked `data-dw-overlay-anchor` makes every\n * dw-menu / dw-popover opened from inside it start just below the bar, rather than below\n * the individual trigger — so menus from a short avatar button and a full-height nav tab\n * line up on the same edge.\n */\nexport const DW_OVERLAY_ANCHOR_ATTR = 'data-dw-overlay-anchor';\n\n/** Gap between the anchor's bottom edge and the overlay: none — it hangs straight off the bar. */\nexport const DW_OVERLAY_ANCHOR_GAP = 0;\n\n/** Moves `panel` (absolutely positioned in the document) under the trigger's anchor, if it has one. */\nexport function alignUnderOverlayAnchor(panel: HTMLElement | null | undefined, trigger: unknown): void {\n if (!panel || !(trigger instanceof Element)) {\n return;\n }\n const anchor = trigger.closest(`[${DW_OVERLAY_ANCHOR_ATTR}]`);\n if (!anchor) {\n return;\n }\n const top = anchor.getBoundingClientRect().bottom + window.scrollY + DW_OVERLAY_ANCHOR_GAP;\n panel.style.marginTop = '0';\n panel.style.top = `${top}px`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n computed,\n contentChild,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { alignUnderOverlayAnchor } from '../overlay-anchor.util';\n\n/** Footer actions of a popover (right-aligned). */\n@Directive({ selector: '[dwPopoverFooter]', standalone: true, host: { class: 'dw-footer-actions' } })\nexport class DwPopoverFooterDirective {}\n\n/**\n * Click-anchored popover on top of p-popover with optional header + close\n * and footer actions.\n *\n * ```html\n * <dw-button label=\"New project\" (clicked)=\"pop.toggle($event)\" />\n * <dw-popover #pop header=\"Create project\" width=\"320px\">\n * <input pInputText [(ngModel)]=\"name\" />\n * <div dwPopoverFooter>\n * <dw-button label=\"Cancel\" variant=\"secondary\" appearance=\"text\" (clicked)=\"pop.hide()\" />\n * <dw-button label=\"Create\" (clicked)=\"create(); pop.hide()\" />\n * </div>\n * </dw-popover>\n * ```\n */\n@Component({\n selector: 'dw-popover',\n standalone: true,\n imports: [PopoverModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-popover\n #popover\n [dismissable]=\"dismissable()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [style]=\"popoverStyle()\"\n [styleClass]=\"styleClasses()\"\n [ariaLabel]=\"header() || ariaLabel()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n >\n <div class=\"dw-popover\" [style.max-height]=\"maxHeight()\">\n @if (header()) {\n <div class=\"dw-popover__header\">\n <span class=\"dw-subtitle\">{{ header() }}</span>\n @if (showClose()) {\n <button type=\"button\" class=\"dw-icon-btn\" aria-label=\"Close\" (click)=\"hide()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n }\n <div class=\"dw-popover__body\"><ng-content /></div>\n @if (footer()) {\n <div class=\"dw-popover__footer\"><ng-content select=\"[dwPopoverFooter]\" /></div>\n }\n </div>\n </p-popover>\n `,\n})\nexport class DwPopoverComponent {\n readonly header = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly showClose = input<boolean>(true);\n readonly dismissable = input<boolean>(true);\n readonly width = input<string | null>(null);\n /** Match the width of the element that opened the popover. */\n readonly matchTriggerWidth = input<boolean>(false);\n readonly maxHeight = input<string | null>(null);\n readonly appendTo = input<string | null>('body');\n readonly baseZIndex = input<number>(0);\n readonly showArrow = input<boolean>(true);\n /** No body padding: the content runs to the popover's edges (e.g. a side rail with its own\n * background); the footer keeps its own padding and a top border. */\n readonly flush = input<boolean>(false);\n readonly styleClass = input<string>('');\n\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n readonly footer = contentChild(DwPopoverFooterDirective);\n readonly isOpen = signal(false);\n private readonly popover = viewChild<Popover>('popover');\n private readonly triggerWidth = signal<number | null>(null);\n\n readonly popoverStyle = computed(() => {\n const width = this.matchTriggerWidth() && this.triggerWidth() ? `${this.triggerWidth()}px` : this.width();\n return width ? { width } : {};\n });\n\n readonly styleClasses = computed(() => {\n const cls = ['dw-popover-panel'];\n if (!this.showArrow()) cls.push('dw-popover-panel--no-arrow');\n if (this.flush()) cls.push('dw-popover-panel--flush');\n if (this.styleClass()) cls.push(this.styleClass());\n return cls.join(' ');\n });\n\n toggle(event: Event, target?: HTMLElement): void {\n this.captureTrigger(event, target);\n this.popover()?.toggle(event, target);\n }\n\n show(event: Event, target?: HTMLElement): void {\n this.captureTrigger(event, target);\n this.popover()?.show(event, target);\n }\n\n /** Re-position against the trigger after the content changed size. */\n align(): void {\n this.popover()?.align();\n this.anchorTop();\n this.centerArrow();\n }\n\n hide(): void {\n this.popover()?.hide();\n }\n\n onShow(): void {\n this.isOpen.set(true);\n this.anchorTop();\n this.centerArrow();\n // onShow fires as the panel starts to open; the trigger or the panel can still move as\n // content settles (e.g. a table row re-fitting its cells). Re-centre once laid out and\n // again after the open animation, so the arrow points at where the trigger ends up.\n requestAnimationFrame(() => this.centerArrow());\n setTimeout(() => this.centerArrow(), 150);\n this.shown.emit();\n }\n\n /**\n * PrimeNG points the arrow at the trigger's left edge (+ a fixed offset), which looks\n * off under a wide trigger such as a labelled button. Point it at the trigger's centre,\n * kept clear of the panel's rounded corners.\n */\n private anchorTop(): void {\n const popover = this.popover();\n alignUnderOverlayAnchor(popover?.container, popover?.target);\n }\n\n private centerArrow(): void {\n const popover = this.popover();\n const panel = popover?.container;\n const trigger = popover?.target as HTMLElement | null | undefined;\n if (!panel || !trigger?.getBoundingClientRect || !this.showArrow()) {\n return;\n }\n const inset = 20; // corner radius + half the arrow\n const margin = 8; // keep the panel this far inside the viewport\n let p = panel.getBoundingClientRect();\n const t = trigger.getBoundingClientRect();\n const centre = t.left + t.width / 2;\n // PrimeNG lines the panel up with the trigger's left edge, so under a small trigger the\n // centre falls inside the corner zone. Slide the panel so the arrow can sit exactly on it.\n let shift = 0;\n if (centre - p.left < inset) {\n shift = -Math.min(inset - (centre - p.left), Math.max(0, p.left - margin));\n } else if (p.right - centre < inset) {\n shift = Math.min(inset - (p.right - centre), Math.max(0, window.innerWidth - margin - p.right));\n }\n if (shift) {\n const current = parseFloat(panel.style.insetInlineStart || panel.style.left || `${p.left + window.scrollX}`);\n panel.style.insetInlineStart = `${current + shift}px`;\n p = panel.getBoundingClientRect();\n }\n const tip = Math.min(Math.max(centre - p.left, inset), p.width - inset);\n panel.style.setProperty('--p-popover-arrow-offset', '0px');\n panel.style.setProperty('--p-popover-arrow-left', `${tip}px`);\n }\n\n onHide(): void {\n this.isOpen.set(false);\n this.hidden.emit();\n }\n\n private captureTrigger(event: Event, target?: HTMLElement): void {\n const el = target ?? (event?.currentTarget as HTMLElement | null);\n if (el?.getBoundingClientRect) {\n this.triggerWidth.set(el.getBoundingClientRect().width);\n }\n }\n}\n\nexport const DW_POPOVER = [DwPopoverComponent, DwPopoverFooterDirective] as const;\n","import { ChangeDetectionStrategy, Component, computed, input, model, viewChild } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwPopoverComponent } from '../popover/dw-popover.component';\nimport { DwTagColorPickerComponent } from './dw-tag-color-picker.component';\nimport { DW_TAG_PALETTE, tagColorVar } from './dw-tag-colors';\n\n/**\n * Tag colour button: a filled tag icon in the tag's colour. When `editable`,\n * clicking opens the tag palette (dw-tag-color-picker) in a popover; picking a\n * colour updates `value` and closes it. Not editable, it reads as disabled and\n * only shows the colour (e.g. of an existing tag).\n *\n * Add `class=\"dw-input-group__addon\"` to connect it to an input in a\n * `.dw-input-group`.\n *\n * ```html\n * <div class=\"dw-input-group\">\n * <dw-tag-color-button class=\"dw-input-group__addon\" [(value)]=\"color\" />\n * <input pInputText [(ngModel)]=\"name\" />\n * </div>\n * ```\n */\n@Component({\n selector: 'dw-tag-color-button',\n standalone: true,\n imports: [TooltipModule, DwIconComponent, DwPopoverComponent, DwTagColorPickerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-tag-color-btn-host' },\n template: `\n <button\n type=\"button\"\n class=\"dw-tag-color-btn\"\n [class.dw-tag-color-btn--editable]=\"editable()\"\n [attr.aria-disabled]=\"!editable() || null\"\n [attr.aria-haspopup]=\"editable() ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"editable() ? 'Change color' : lockedTooltip()\"\n [tooltipDisabled]=\"!editable() && !lockedTooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"open($event)\"\n >\n <dw-icon class=\"dw-tag-color-btn__icon\" name=\"tagFilled\" [style.color]=\"swatch()\" aria-hidden=\"true\" />\n </button>\n <dw-popover #pop header=\"Tag color\" [showClose]=\"false\">\n <dw-tag-color-picker [value]=\"value()\" (valueChange)=\"pick($event)\" />\n </dw-popover>\n `,\n})\nexport class DwTagColorButtonComponent {\n /** Stored palette hex, as the tag API takes it. */\n readonly value = model<string>(DW_TAG_PALETTE[0].value);\n readonly editable = input<boolean>(true);\n /** Tooltip when not editable; empty shows none. */\n readonly lockedTooltip = input<string>('');\n readonly testId = input<string | null>(null);\n\n private readonly pop = viewChild.required<DwPopoverComponent>('pop');\n\n readonly swatch = computed(() => tagColorVar(this.value()));\n readonly colorName = computed(() => {\n const v = (this.value() ?? '').toLowerCase();\n return DW_TAG_PALETTE.find((c) => c.value === v)?.name ?? 'Custom';\n });\n readonly ariaLabel = computed(() =>\n this.editable() ? `Tag color: ${this.colorName()}. Change color` : `Tag color: ${this.colorName()}`,\n );\n\n open(event: Event): void {\n if (!this.editable()) return;\n this.pop().toggle(event);\n }\n\n pick(color: string): void {\n this.value.set(color);\n this.pop().hide();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, inject } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DwTone } from '../status-pill/dw-status.map';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\n\n/**\n * Filter / facet / token chip. Selectable chips render as buttons with\n * aria-pressed; removable chips get a labelled remove button.\n *\n * ```html\n * <dw-chip label=\"Errors\" icon=\"pi pi-exclamation-circle\" [selectable]=\"true\"\n * [selected]=\"filter === 'errors'\" (selectedChange)=\"toggle('errors')\" />\n * <dw-chip [label]=\"facet.label\" [removable]=\"true\" (removed)=\"clear(facet)\" />\n * <dw-chip label=\"Tokens\" value=\"1,204\" />\n * <dw-chip label=\"Tools\" icon=\"pi pi-wrench\" variant=\"subtle\" [selectable]=\"true\" /> <!-- quiet filter bar -->\n * <dw-chip label=\"vendor=northwind\" variant=\"code\" [selectable]=\"true\" /> <!-- key=value token -->\n * <dw-chip [label]=\"file.name\" [image]=\"iconSrc\"><i class=\"pi pi-check-circle dw-text-success\"></i></dw-chip>\n * ```\n * Projected content renders after the label (a trailing status icon, a spinner).\n */\n@Component({\n selector: 'dw-chip',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-chip-host' },\n template: `\n @if (selectable()) {\n <button\n type=\"button\"\n [class]=\"classes()\"\n [attr.aria-pressed]=\"selected()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"toggle($event)\"\n >\n <ng-container *ngTemplateOutlet=\"inner\" />\n </button>\n } @else {\n <span [class]=\"classes()\" [attr.data-testid]=\"testId()\">\n <ng-container *ngTemplateOutlet=\"inner\" />\n @if (removable()) {\n <button\n type=\"button\"\n class=\"dw-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"remove($event)\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </span>\n }\n\n <ng-template #inner>\n @if (image()) {\n <img class=\"dw-chip__img\" [src]=\"image()\" alt=\"\" aria-hidden=\"true\" />\n } @else if (svgIcon(); as name) {\n <dw-icon [name]=\"name\" />\n } @else if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else if (dotColor()) {\n <span class=\"dw-tag__dot\" [style.background]=\"dotColor()\" aria-hidden=\"true\"></span>\n }\n <span class=\"dw-chip__label\">{{ label() }}</span>\n @if (value() !== null && value() !== undefined && value() !== '') {\n <span class=\"dw-chip__value\">{{ value() }}</span>\n }\n <ng-content />\n </ng-template>\n `,\n imports: [NgTemplateOutlet, DwIconComponent],\n})\nexport class DwChipComponent {\n readonly label = input.required<string>();\n readonly value = input<string | number | null>(null);\n private readonly icons = inject(DwIconRegistry);\n\n /** PrimeIcons class, `dwi-<name>` for a crystal glyph, or a name registered with provideCrystalIcons(). */\n readonly icon = input<string>('');\n readonly svgIcon = computed(() => this.icons.resolve(this.icon()));\n readonly image = input<string>('');\n readonly dotColor = input<string>('');\n readonly tone = input<DwTone | null>(null);\n readonly selectable = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly removable = input<boolean>(false);\n readonly testId = input<string | null>(null);\n /** `sm` (default): compact filter chip. `md`: control height, for picking options in a form. */\n readonly size = input<'sm' | 'md'>('sm');\n /** How a selected chip shows: `tint` (light accent, default) or `filled` (a fuller tint, accent border, bold label). */\n readonly selectedStyle = input<'tint' | 'filled'>('tint');\n /**\n * `subtle`: secondary text at regular weight while unselected, for dense filter bars.\n * `code`: a key=value / identifier token — mono face, regular weight, square corners, section background.\n */\n readonly variant = input<'default' | 'subtle' | 'code'>('default');\n\n readonly selectedChange = output<boolean>();\n readonly removed = output<void>();\n\n readonly classes = computed(() => {\n const cls = ['dw-chip'];\n if (this.selectable()) cls.push('dw-chip--selectable');\n if (this.selected()) cls.push('is-selected');\n if (this.size() === 'md') cls.push('dw-chip--md');\n if (this.selectedStyle() === 'filled') cls.push('dw-chip--filled');\n if (this.variant() === 'subtle') cls.push('dw-chip--subtle');\n if (this.variant() === 'code') cls.push('dw-chip--code');\n if (this.tone()) cls.push(`dw-chip--${this.tone()}`);\n return cls.join(' ');\n });\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n this.selectedChange.emit(!this.selected());\n }\n\n remove(event: MouseEvent): void {\n event.stopPropagation();\n this.removed.emit();\n }\n}\n\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport type DwInitialsStrategy = 'words' | 'split';\n\nconst AVATAR_TINTS = ['accent', 'workflow', 'reasoning', 'orange', 'cyan', 'pink'] as const;\nexport type DwAvatarTint = 'neutral' | (typeof AVATAR_TINTS)[number];\n\n/**\n * `words`: first letter of each whitespace-separated word, max 3 (\"Jane Q Doe\" → \"JQD\").\n * `split`: split on `_ . - space`, first letters of the first two parts (\"acme_corp\" → \"AC\").\n */\nexport function initialsOf(name: string | null | undefined, strategy: DwInitialsStrategy = 'words'): string {\n const value = (name ?? '').trim();\n if (!value) {\n return '?';\n }\n if (strategy === 'split') {\n const parts = value.split(/[\\s_.-]+/).filter(Boolean);\n const letters = parts.length > 1 ? parts[0][0] + parts[1][0] : value.slice(0, 2);\n return letters.toUpperCase();\n }\n return value\n .split(/\\s+/)\n .filter(Boolean)\n .map((w) => w.charAt(0).toUpperCase())\n .join('')\n .slice(0, 3);\n}\n\n/** A stable colour per name, for callers that opt in with `[tint]=\"tintFor(name)\"`. */\nexport function tintFor(name: string | null | undefined): DwAvatarTint {\n const value = name ?? '';\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) | 0;\n }\n return AVATAR_TINTS[Math.abs(hash) % AVATAR_TINTS.length];\n}\n\n/**\n * User / account avatar: image or initials on a bordered rounded square, neutral\n * grey unless a `tint` is given (the backend has no avatar colours).\n *\n * ```html\n * <dw-avatar [name]=\"user.fullName\" size=\"sm\" />\n * <dw-avatar [name]=\"account.name\" initials=\"split\" [presence]=\"account.online\" />\n * ```\n */\n@Component({\n selector: 'dw-avatar',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"classes()\"\n role=\"img\"\n [attr.aria-label]=\"name() || 'User'\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n @if (src() && !imageFailed()) {\n <img [src]=\"src()\" alt=\"\" (error)=\"imageFailed.set(true)\" />\n } @else {\n {{ text() }}\n }\n @if (presence() !== null) {\n <span class=\"dw-avatar__presence\" [class.is-online]=\"presence()\" aria-hidden=\"true\"></span>\n }\n </span>\n `,\n})\nexport class DwAvatarComponent {\n readonly name = input<string | null>(null);\n readonly initials = input<DwInitialsStrategy>('words');\n readonly src = input<string | null>(null);\n readonly size = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n /** Colour of the tile; neutral grey by default. */\n readonly tint = input<DwAvatarTint>('neutral');\n readonly presence = input<boolean | null>(null);\n readonly tooltip = input<string>('');\n /** Darkens the tile's border while its parent button is hovered or open (e.g. an account menu). */\n readonly ring = input<boolean>(false);\n\n readonly imageFailed = signal(false);\n readonly text = computed(() => initialsOf(this.name(), this.initials()));\n readonly classes = computed(() => {\n const cls = ['dw-avatar', `dw-avatar--tint-${this.tint()}`];\n if (this.size() !== 'md') cls.push(`dw-avatar--${this.size()}`);\n if (this.ring()) cls.push('dw-avatar--ring');\n return cls.join(' ');\n });\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\n/**\n * Maps an app's own type values to crystal's icon keys, for `dw-entity-icon kind=\"tool\" | \"storage\"`. Crystal knows only\n * its artwork names (`snowflake`, `s3`…); an app whose data says e.g. `RELATIONAL_POSTGRES` tells it which icon that is.\n * Return `null` / `undefined` for \"no artwork\" (the generic or fallback icon shows).\n */\nexport interface DwIconResolvers {\n /** Your tool `type` → a tool icon key. `toolId` is the element's `toolId` input, if your mapping needs it. */\n tool?: (type: string, context: { toolId: string | null }) => string | null | undefined;\n /** Your storage `type` → a storage icon key. */\n storage?: (type: string) => string | null | undefined;\n}\n\n/** The resolvers given to `provideCrystalIconResolvers()`; none by default (`type` is then the icon key itself). */\nexport const DW_ICON_RESOLVERS = new InjectionToken<DwIconResolvers>('DW_ICON_RESOLVERS', {\n providedIn: 'root',\n factory: () => ({}),\n});\n\n/**\n * Lets `dw-entity-icon` take your own type values:\n *\n * ```ts\n * providers: [provideCrystalIconResolvers({ tool: (typeId) => myToolIconKey(typeId), storage: (t) => myStorageKey(t) })]\n * // <dw-entity-icon kind=\"tool\" [type]=\"tool.typeId\" />\n * ```\n */\nexport function provideCrystalIconResolvers(resolvers: DwIconResolvers): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: DW_ICON_RESOLVERS, useValue: resolvers }]);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal, inject } from '@angular/core';\nimport { fileIconByExtension, GENERIC_TOOL_ICON, storageIcon, StorageIconSet, toolIcon } from '@dataworkz/crystal/icons';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\nimport { DW_ICON_RESOLVERS } from './dw-icon-resolvers';\n\nexport type DwEntityKind = 'tool' | 'storage' | 'file' | 'image' | 'icon';\nexport type DwEntityTint = 'none' | 'neutral' | 'accent' | 'workflow' | 'reasoning' | 'orange' | 'cyan' | 'pink' | 'danger';\n\n/**\n * Entity / type icon: a tool, storage or file-type logo (inlined), an image, or an icon in a tinted tile.\n * For `tool` / `storage`, `type` is a crystal icon key (`snowflake`, `s3`), or your own type value when the app maps\n * it with `provideCrystalIconResolvers()`.\n *\n * ```html\n * <dw-entity-icon kind=\"tool\" type=\"snowflake\" />\n * <dw-entity-icon kind=\"storage\" type=\"s3\" size=\"lg\" [framed]=\"true\" />\n * <dw-entity-icon kind=\"file\" type=\"pdf\" size=\"sm\" />\n * <dw-entity-icon kind=\"icon\" type=\"pi pi-sitemap\" tint=\"accent\" [framed]=\"true\" />\n * <dw-entity-icon kind=\"icon\" type=\"dwi-robot\" tint=\"accent\" [framed]=\"true\" /> <!-- a dw-icon glyph, in the tint colour -->\n * ```\n */\n@Component({\n selector: 'dw-entity-icon',\n standalone: true,\n imports: [DwIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.aria-hidden]': 'alt() ? null : \"true\"',\n },\n template: `\n @if (svgIcon(); as name) {\n <dw-icon [name]=\"name\" />\n } @else if (iconClass()) {\n <i [class]=\"iconClass()\" aria-hidden=\"true\"></i>\n } @else if (path() && !failed()) {\n <img [src]=\"path()\" [alt]=\"alt()\" (error)=\"failed.set(true)\" />\n }\n `,\n})\nexport class DwEntityIconComponent {\n readonly kind = input<DwEntityKind>('tool');\n /** Tool or storage icon key (or your type, see provideCrystalIconResolvers), file extension, image src, or icon class / `dwi-<name>` (per `kind`). */\n readonly type = input<string | null>(null);\n /** Passed to your tool resolver (provideCrystalIconResolvers), for mappings that depend on the tool's id. */\n readonly toolId = input<string | null>(null);\n readonly src = input<string | null>(null);\n readonly fallback = input<string | undefined>(undefined);\n readonly storageSet = input<StorageIconSet>('local');\n readonly size = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\n readonly framed = input<boolean>(false);\n readonly tint = input<DwEntityTint>('neutral');\n readonly alt = input<string>('');\n\n readonly failed = signal(false);\n\n private readonly icons = inject(DwIconRegistry);\n private readonly resolvers = inject(DW_ICON_RESOLVERS);\n\n /** kind `icon` with a `dwi-<name>` glyph or a registered icon name: drawn by dw-icon, in the tile's colour. */\n readonly svgIcon = computed(() => (this.kind() === 'icon' ? this.icons.resolve(this.type()) : null));\n readonly iconClass = computed(() => (this.kind() === 'icon' && !this.svgIcon() ? this.type() ?? '' : ''));\n\n readonly path = computed(() => {\n if (this.src()) {\n return this.src() as string;\n }\n const type = this.type();\n switch (this.kind()) {\n case 'tool': {\n const key = this.resolvers.tool ? this.resolvers.tool(type ?? '', { toolId: this.toolId() }) : type;\n return toolIcon(key, this.fallback() ?? GENERIC_TOOL_ICON);\n }\n case 'storage': {\n const key = this.resolvers.storage ? this.resolvers.storage(type ?? '') : type;\n return storageIcon(key, { set: this.storageSet(), fallback: this.fallback() });\n }\n case 'file':\n return fileIconByExtension((type ?? '').toLowerCase());\n case 'image':\n return type ?? '';\n default:\n return '';\n }\n });\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-entity-icon', `dw-entity-icon--${this.size()}`];\n if (this.framed()) {\n cls.push('dw-entity-icon--framed');\n if (this.tint() !== 'none') cls.push(`dw-entity-icon--${this.tint()}`);\n }\n return cls.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * The one spinner. Replaces `fa-spinner fa-spin`, ad-hoc `pi-spin`,\n * cosmetic `p-progressSpinner`, `.loading-state` and `.loading-overlay`.\n *\n * ```html\n * <dw-spinner size=\"sm\" /> <!-- inline -->\n * <dw-spinner mode=\"block\" label=\"Loading agents…\" /> <!-- centered in container -->\n * <dw-spinner mode=\"overlay\" label=\"Saving…\" /> <!-- covers nearest positioned parent -->\n * <dw-spinner mode=\"fullscreen\" />\n * ```\n */\n@Component({\n selector: 'dw-spinner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'status',\n 'aria-live': 'polite',\n '[attr.aria-busy]': 'true',\n },\n template: `\n <i class=\"pi pi-spin pi-spinner dw-spinner__icon\" aria-hidden=\"true\"></i>\n @if (label()) {\n <span class=\"dw-spinner__label\">{{ label() }}</span>\n } @else {\n <span class=\"dw-sr-only\">Loading</span>\n }\n `,\n})\nexport class DwSpinnerComponent {\n readonly size = input<'xs' | 'sm' | 'md' | 'lg'>('md');\n readonly mode = input<'inline' | 'block' | 'overlay' | 'fullscreen'>('inline');\n readonly label = input<string>('');\n\n readonly hostClasses = computed(\n () => `dw-spinner dw-spinner--${this.size()} dw-spinner--${this.mode()}`,\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\n\nexport type DwSkeletonPreset = 'text' | 'circle' | 'rect' | 'rows' | 'card' | 'list';\n\n/**\n * Skeleton presets on top of p-skeleton.\n *\n * ```html\n * <dw-skeleton preset=\"text\" width=\"60%\" />\n * <dw-skeleton preset=\"circle\" size=\"32px\" />\n * <dw-skeleton preset=\"rows\" [rows]=\"6\" [columns]=\"['40%', '20%', '20%', '20%']\" [avatar]=\"true\" />\n * <dw-skeleton preset=\"list\" [rows]=\"6\" /> <!-- sidebar-style lines -->\n * <dw-skeleton preset=\"card\" />\n * ```\n */\n@Component({\n selector: 'dw-skeleton',\n standalone: true,\n imports: [SkeletonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-skeleton-host', 'aria-hidden': 'true' },\n template: `\n @switch (preset()) {\n @case ('circle') {\n <p-skeleton shape=\"circle\" [size]=\"size()\" />\n }\n @case ('rect') {\n <p-skeleton [width]=\"width()\" [height]=\"height()\" [borderRadius]=\"radius()\" />\n }\n @case ('rows') {\n <div class=\"dw-skeleton-rows\">\n @for (r of rowIndexes(); track r) {\n <div class=\"dw-skeleton-rows__row\">\n @if (avatar()) {\n <p-skeleton shape=\"circle\" size=\"28px\" />\n }\n @for (w of columns(); track $index) {\n <p-skeleton [width]=\"w\" height=\"12px\" />\n }\n </div>\n }\n </div>\n }\n @case ('list') {\n <div class=\"dw-skeleton-list\">\n @for (r of rowIndexes(); track r) {\n <div class=\"dw-skeleton-list__row\">\n <p-skeleton [width]=\"r % 2 ? '70%' : '85%'\" height=\"12px\" />\n <p-skeleton width=\"16px\" height=\"12px\" />\n </div>\n }\n </div>\n }\n @case ('card') {\n <div class=\"dw-card dw-skeleton-card\">\n <div class=\"dw-card__header\">\n <p-skeleton width=\"32px\" height=\"32px\" borderRadius=\"8px\" />\n <p-skeleton width=\"50%\" height=\"14px\" />\n </div>\n <div class=\"dw-card__body\">\n <p-skeleton width=\"100%\" height=\"12px\" />\n <p-skeleton width=\"80%\" height=\"12px\" />\n </div>\n </div>\n }\n @default {\n <p-skeleton [width]=\"width()\" [height]=\"height() || '12px'\" />\n }\n }\n `,\n})\nexport class DwSkeletonComponent {\n readonly preset = input<DwSkeletonPreset>('text');\n readonly width = input<string>('100%');\n readonly height = input<string>('');\n readonly size = input<string>('32px');\n readonly radius = input<string>('6px');\n readonly rows = input<number>(5);\n readonly columns = input<string[]>(['40%', '20%', '20%', '20%']);\n readonly avatar = input<boolean>(false);\n\n readonly rowIndexes = computed(() => Array.from({ length: Math.max(0, this.rows()) }, (_, i) => i));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * A share bar: a rounded track with a fill for `value` percent of it — e.g. a channel's share of\n * all interactions. The fill takes `color` (a CSS colour, e.g. a chart series token), the accent\n * otherwise.\n *\n * ```html\n * <dw-meter [value]=\"row.pct\" [color]=\"row.color\" [label]=\"row.channel + ' share'\" />\n * ```\n */\n@Component({\n selector: 'dw-meter',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-meter-host' },\n template: `\n <div class=\"dw-meter\" [class.dw-meter--sm]=\"size() === 'sm'\" role=\"meter\" aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"clamped()\" [attr.aria-label]=\"label() || null\">\n <div class=\"dw-meter__fill\" [style.width.%]=\"clamped()\" [style.background]=\"color() || null\"></div>\n </div>\n `,\n})\nexport class DwMeterComponent {\n /** Percent of the track to fill (clamped to 0–100). */\n readonly value = input<number>(0);\n readonly color = input<string>('');\n readonly label = input<string>('');\n readonly size = input<'md' | 'sm'>('md');\n\n readonly clamped = computed(() => {\n const v = Number(this.value());\n return Number.isFinite(v) ? Math.min(100, Math.max(0, v)) : 0;\n });\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\n/**\n * A checkbox control for toolbars: a box and its label in one quiet button that fills on hover —\n * \"Show deprecated\" beside a list's search, \"Tree view\" beside a tree's. Controlled: it shows\n * `checked` and emits the flipped value; the host decides.\n *\n * A button with role=\"checkbox\" rather than a <label>-wrapped <input>: a label-wrapped input\n * forwards a synthetic click to the input, which bubbles back to the label and double-fires.\n *\n * ```html\n * <dw-check-toggle label=\"Tree view\" [checked]=\"tree()\" (checkedChange)=\"tree.set($event)\" />\n * ```\n */\n@Component({\n selector: 'dw-check-toggle',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-check-toggle-host' },\n template: `\n <button type=\"button\" class=\"dw-check-toggle\" role=\"checkbox\" [attr.aria-checked]=\"checked()\"\n [class.is-on]=\"checked()\" [pTooltip]=\"tooltip()\" [tooltipDisabled]=\"!tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\" [showDelay]=\"300\" appendTo=\"body\"\n [attr.data-testid]=\"testId()\" (click)=\"toggle()\">\n <span class=\"dw-check-toggle__box\" aria-hidden=\"true\"></span>\n <span class=\"dw-check-toggle__label\">{{ label() }}</span>\n </button>\n `,\n})\nexport class DwCheckToggleComponent {\n readonly checked = input<boolean>(false);\n readonly label = input<string>('');\n readonly tooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('bottom');\n readonly testId = input<string | null>(null);\n\n /** The flipped value; the host sets `checked`. */\n readonly checkedChange = output<boolean>();\n\n toggle(): void {\n this.checkedChange.emit(!this.checked());\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * Empty / no-results / error state. Project CTAs into the default slot.\n *\n * ```html\n * <dw-empty-state icon=\"pi pi-inbox\" title=\"No agents yet\" text=\"Create one to get started.\">\n * <dw-button label=\"Create agent\" icon=\"pi pi-plus\" (clicked)=\"create()\" />\n * </dw-empty-state>\n * <dw-empty-state size=\"compact\" title=\"No matches\" text=\"Try a different search.\" />\n * <dw-empty-state size=\"inline\" text=\"No data\" /> <!-- chart widgets -->\n * <dw-empty-state tone=\"error\" icon=\"pi pi-times-circle\" title=\"Couldn't load preview\" />\n * ```\n * Inside a p-table `emptymessage` row use `dw-table-empty` (renders the td + colspan).\n */\n@Component({\n selector: 'dw-empty-state',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'status',\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n },\n template: `\n @if (image()) {\n <img class=\"dw-empty-state__image\" [src]=\"image()\" [style.width]=\"imageWidth()\" alt=\"\" />\n } @else if (icon() && size() !== 'inline') {\n <span class=\"dw-empty-state__icon\" aria-hidden=\"true\"><i [class]=\"icon()\"></i></span>\n }\n @if (title()) {\n <p class=\"dw-empty-state__title\">{{ title() }}</p>\n }\n @if (text()) {\n <p class=\"dw-empty-state__text\">{{ text() }}</p>\n }\n <div class=\"dw-empty-state__actions\"><ng-content /></div>\n `,\n})\nexport class DwEmptyStateComponent {\n readonly icon = input<string>('pi pi-inbox');\n readonly image = input<string>('');\n readonly imageWidth = input<string>('160px');\n readonly title = input<string>('');\n readonly text = input<string>('');\n readonly tone = input<'default' | 'error'>('default');\n readonly size = input<'default' | 'compact' | 'inline'>('default');\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-empty-state'];\n if (this.size() !== 'default') cls.push(`dw-empty-state--${this.size()}`);\n if (this.tone() === 'error') cls.push('dw-empty-state--error');\n return cls.join(' ');\n });\n}\n\n/**\n * Table-row empty state for p-table `emptymessage` templates.\n *\n * ```html\n * <ng-template pTemplate=\"emptymessage\">\n * <tr dw-table-empty [colspan]=\"columns.length + 2\" title=\"No configurations\" text=\"Add one to start.\" ></tr>\n * </ng-template>\n * ```\n */\n@Component({\n selector: 'tr[dw-table-empty]',\n standalone: true,\n host: { class: 'dw-table-empty', '[attr.title]': 'null' },\n imports: [DwEmptyStateComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <td [attr.colspan]=\"colspan()\" class=\"dw-table-empty__cell\">\n <dw-empty-state [icon]=\"icon()\" [title]=\"title()\" [text]=\"text()\" size=\"compact\">\n <ng-content />\n </dw-empty-state>\n </td>\n `,\n})\nexport class DwTableEmptyComponent {\n readonly colspan = input<number>(1);\n readonly icon = input<string>('pi pi-inbox');\n readonly title = input<string>('');\n readonly text = input<string>('');\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\n\nexport type DwSeverity = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n\nconst SEVERITY_ICONS: Record<DwSeverity, string> = {\n info: 'pi pi-info-circle',\n success: 'pi pi-check-circle',\n warning: 'pi pi-exclamation-triangle',\n danger: 'pi pi-exclamation-circle',\n neutral: 'pi pi-info-circle',\n};\n\n/**\n * Inline message / callout. Body content and actions are projected.\n *\n * ```html\n * <dw-banner severity=\"warning\" title=\"In use by 3 workflows\">\n * Removing it will break them.\n * <dw-button dwBannerActions label=\"View usage\" appearance=\"link\" />\n * </dw-banner>\n * <dw-banner severity=\"info\" text=\"Changes apply to new runs only.\" [dismissible]=\"true\" />\n * ```\n */\n@Component({\n selector: 'dw-banner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n '[class]': 'hostClasses()',\n '[attr.role]': 'severity() === \"danger\" || severity() === \"warning\" ? \"alert\" : \"status\"',\n '[hidden]': 'dismissed()',\n },\n template: `\n @if (showIcon()) {\n <i class=\"dw-banner__icon\" [class]=\"resolvedIcon()\" aria-hidden=\"true\"></i>\n }\n <div class=\"dw-banner__content\">\n @if (title()) {\n <p class=\"dw-banner__title\">{{ title() }}</p>\n }\n @if (text()) {\n <p class=\"dw-banner__text\">{{ text() }}</p>\n }\n <ng-content />\n <div class=\"dw-banner__actions\"><ng-content select=\"[dwBannerActions]\" /></div>\n </div>\n @if (dismissible()) {\n <button type=\"button\" class=\"dw-icon-btn dw-banner__close\" aria-label=\"Dismiss\" (click)=\"dismiss()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n `,\n})\nexport class DwBannerComponent {\n readonly severity = input<DwSeverity>('info');\n readonly title = input<string>('');\n readonly text = input<string>('');\n /** Override the severity icon; pass '' with showIcon=false to hide. */\n readonly icon = input<string>('');\n readonly showIcon = input<boolean>(true);\n readonly dismissible = input<boolean>(false);\n readonly size = input<'sm' | 'md'>('md');\n /** `edge` draws a 4px left accent rule instead of a full border. */\n readonly variant = input<'block' | 'edge'>('block');\n\n readonly dismissed = signal(false);\n readonly dismissedChange = output<void>();\n\n readonly resolvedIcon = computed(() => this.icon() || SEVERITY_ICONS[this.severity()]);\n readonly hostClasses = computed(() => {\n const cls = ['dw-banner', `dw-banner--${this.severity()}`];\n if (this.size() === 'sm') cls.push('dw-banner--sm');\n if (this.variant() === 'edge') cls.push('dw-banner--edge');\n return cls.join(' ');\n });\n\n dismiss(): void {\n this.dismissed.set(true);\n this.dismissedChange.emit();\n }\n}\n\n/**\n * Neutral container box (bordered / muted / accent). For messages use dw-banner.\n *\n * ```html\n * <dw-box tone=\"muted\" padding=\"compact\">…</dw-box>\n * <dw-box tone=\"muted\" [bordered]=\"false\">…</dw-box> <!-- fill only, e.g. a summary in a rail -->\n * ```\n */\n@Component({\n selector: 'dw-box',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()', '[attr.title]': 'null' },\n template: `\n @if (title()) {\n <p class=\"dw-box__title\">{{ title() }}</p>\n }\n <ng-content />\n `,\n})\nexport class DwBoxComponent {\n readonly tone = input<'default' | 'muted' | 'accent'>('default');\n readonly padding = input<'compact' | 'default' | 'none'>('default');\n readonly title = input<string>('');\n /** Off: no border, just the tone's fill. */\n readonly bordered = input<boolean>(true);\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-box'];\n if (this.tone() !== 'default') cls.push(`dw-box--${this.tone()}`);\n if (this.padding() === 'compact') cls.push('dw-box--compact');\n if (this.padding() === 'none') cls.push('dw-box--flush');\n if (!this.bordered()) cls.push('dw-box--borderless');\n return cls.join(' ');\n });\n}\n","import { Directive, computed, input } from '@angular/core';\n\n/** Gap scale in px → spacing token. */\nexport type DwGap = 0 | 2 | 4 | 6 | 8 | 10 | 12 | 16 | 20 | 24 | 32;\nexport type DwAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\nexport type DwJustify = 'start' | 'center' | 'end' | 'between' | 'around';\n\nconst GAP_TOKENS: Record<DwGap, string> = {\n 0: '0',\n 2: 'var(--dw-space-0_5)',\n 4: 'var(--dw-space-1)',\n 6: 'var(--dw-space-1_5)',\n 8: 'var(--dw-space-2)',\n 10: 'var(--dw-space-2_5)',\n 12: 'var(--dw-space-3)',\n 16: 'var(--dw-space-4)',\n 20: 'var(--dw-space-5)',\n 24: 'var(--dw-space-6)',\n 32: 'var(--dw-space-8)',\n};\n\nconst ALIGN: Record<DwAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY: Record<DwJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n};\n\nexport function gapToken(gap: DwGap | null | undefined): string | null {\n return gap === null || gap === undefined ? null : GAP_TOKENS[gap] ?? null;\n}\n\n/**\n * Vertical stack — attribute directive so it adds no DOM.\n *\n * ```html\n * <div dwStack [gap]=\"12\">…</div>\n * <section dwStack [gap]=\"8\" align=\"start\">…</section>\n * ```\n */\n@Directive({\n selector: '[dwStack]',\n standalone: true,\n host: {\n class: 'dw-stack',\n '[style.gap]': 'gapValue()',\n '[style.align-items]': 'alignValue()',\n '[style.justify-content]': 'justifyValue()',\n // `align` is also a legacy HTML attribute: left on a <div> it becomes text-align.\n '[attr.align]': 'null',\n },\n})\nexport class DwStackDirective {\n readonly gap = input<DwGap | null>(null);\n readonly align = input<DwAlign | null>(null);\n readonly justify = input<DwJustify | null>(null);\n\n readonly gapValue = computed(() => gapToken(this.gap()));\n readonly alignValue = computed(() => (this.align() ? ALIGN[this.align() as DwAlign] : null));\n readonly justifyValue = computed(() => (this.justify() ? JUSTIFY[this.justify() as DwJustify] : null));\n}\n\n/**\n * Horizontal stack (row, vertically centred by default).\n *\n * ```html\n * <div dwHstack [gap]=\"8\" justify=\"between\">…</div>\n * <span dwHstack [gap]=\"4\" [inline]=\"true\" [wrap]=\"true\">…</span>\n * ```\n */\n@Directive({\n selector: '[dwHstack]',\n standalone: true,\n host: {\n class: 'dw-hstack',\n '[class.dw-wrap]': 'wrap()',\n '[class.dw-hstack--inline]': 'inline()',\n '[style.gap]': 'gapValue()',\n '[style.align-items]': 'alignValue()',\n '[style.justify-content]': 'justifyValue()',\n // `align` is also a legacy HTML attribute: left on a <div> it becomes text-align.\n '[attr.align]': 'null',\n },\n})\nexport class DwHstackDirective {\n readonly gap = input<DwGap | null>(null);\n readonly align = input<DwAlign | null>(null);\n readonly justify = input<DwJustify | null>(null);\n readonly wrap = input<boolean>(false);\n readonly inline = input<boolean>(false);\n\n readonly gapValue = computed(() => gapToken(this.gap()));\n readonly alignValue = computed(() => (this.align() ? ALIGN[this.align() as DwAlign] : null));\n readonly justifyValue = computed(() => (this.justify() ? JUSTIFY[this.justify() as DwJustify] : null));\n}\n\n/**\n * CSS grid: fixed columns (`cols`) or responsive auto-fill (`min`).\n *\n * ```html\n * <div dwGrid [cols]=\"4\" [gap]=\"16\">…</div>\n * <div dwGrid min=\"280px\">…</div>\n * ```\n */\n@Directive({\n selector: '[dwGrid]',\n standalone: true,\n host: {\n class: 'dw-grid',\n '[style.gap]': 'gapValue()',\n '[style.grid-template-columns]': 'columns()',\n },\n})\nexport class DwGridDirective {\n readonly cols = input<number | null>(null);\n readonly min = input<string | null>(null);\n readonly gap = input<DwGap | null>(16);\n\n readonly gapValue = computed(() => gapToken(this.gap()));\n readonly columns = computed(() => {\n if (this.min()) {\n return `repeat(auto-fill, minmax(${this.min()}, 1fr))`;\n }\n const cols = this.cols();\n return cols ? `repeat(${cols}, minmax(0, 1fr))` : null;\n });\n}\n\nexport const DW_LAYOUT = [DwStackDirective, DwHstackDirective, DwGridDirective] as const;\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type DwDividerOrientation = 'horizontal' | 'vertical';\n/** Gap on either side of the line: none / 4px / 8px (vertical) or 12px (horizontal) / 16px. */\nexport type DwDividerSpacing = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * A hairline separator.\n *\n * ```html\n * <dw-divider /> <!-- between stacked blocks -->\n * <dw-divider orientation=\"vertical\" /> <!-- full height of a flex row -->\n * <dw-divider orientation=\"vertical\" length=\"20px\" spacing=\"sm\" /> <!-- toolbar / header -->\n * ```\n */\n@Component({\n selector: 'dw-divider',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n '[class]': 'classes()',\n '[style.height]': \"orientation() === 'vertical' ? length() : null\",\n '[style.width]': \"orientation() === 'horizontal' ? length() : null\",\n },\n template: '',\n})\nexport class DwDividerComponent {\n readonly orientation = input<DwDividerOrientation>('horizontal');\n readonly spacing = input<DwDividerSpacing>('md');\n /** Fixed length (e.g. `20px`); by default a horizontal line spans its container and a vertical one the row. */\n readonly length = input<string | null>(null);\n\n readonly classes = computed(() => {\n const cls = ['dw-divider', `dw-divider--space-${this.spacing()}`];\n if (this.orientation() === 'vertical') cls.push('dw-divider--vertical');\n if (this.length()) cls.push('dw-divider--fixed');\n return cls.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\n\n/** Pointer position during a drag (viewport coordinates). */\nexport interface DwResizerDrag {\n clientX: number;\n clientY: number;\n}\n\n/**\n * A drag handle for resizing a panel. It only reports where the pointer is (or a keyboard\n * nudge); the owner turns that into a size and clamps it, so the same handle works for\n * drawers, split panes and side panels.\n *\n * ```html\n * <!-- on the left edge of a right-hand panel -->\n * <dw-resizer edge=\"start\" ariaLabel=\"Resize panel\" [valueNow]=\"widthPct\" [valueMin]=\"30\" [valueMax]=\"90\"\n * (dragStart)=\"…\" (drag)=\"width = innerWidth - $event.clientX\" (nudge)=\"width = width - $event\" (dragEnd)=\"…\" />\n * ```\n *\n * `orientation=\"vertical\"` (default) is a vertical bar that resizes width; `horizontal`\n * resizes height. The owner positions it (`edge` only says which side it sits on).\n * Keyboard: ←/→ (↑/↓ when horizontal) emit `nudge` of ±16px (±64 with Shift);\n * Home / End emit `nudge` of ∓/± Infinity (the owner clamps to its limits).\n */\n@Component({\n selector: 'dw-resizer',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n tabindex: '0',\n '[class]': \"'dw-resizer dw-resizer--' + orientation() + ' dw-resizer--' + edge() + (dragging() ? ' is-dragging' : '')\",\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-valuenow]': 'valueNow()',\n '[attr.aria-valuemin]': 'valueMin()',\n '[attr.aria-valuemax]': 'valueMax()',\n '[attr.title]': 'title()',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp($event)',\n '(pointercancel)': 'onPointerUp($event)',\n '(keydown)': 'onKeydown($event)',\n },\n template: '',\n})\nexport class DwResizerComponent {\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n /** Which side of the panel the handle sits on (styling hook: `start` = left / top). */\n readonly edge = input<'start' | 'end'>('start');\n readonly ariaLabel = input<string>('Resize');\n readonly title = input<string>('Drag to resize');\n /** Current / min / max size for assistive tech (any unit, e.g. % of the viewport). */\n readonly valueNow = input<number | null>(null);\n readonly valueMin = input<number | null>(null);\n readonly valueMax = input<number | null>(null);\n\n readonly dragStart = output<void>();\n readonly drag = output<DwResizerDrag>();\n readonly dragEnd = output<void>();\n /** Keyboard step in px: negative = towards start (left / up). */\n readonly nudge = output<number>();\n\n readonly dragging = signal(false);\n\n onPointerDown(event: PointerEvent): void {\n if (event.button !== 0) return;\n this.dragging.set(true);\n (event.currentTarget as HTMLElement | null)?.setPointerCapture?.(event.pointerId);\n document.body.style.cursor = this.orientation() === 'vertical' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n event.preventDefault();\n this.dragStart.emit();\n }\n\n onPointerMove(event: PointerEvent): void {\n if (!this.dragging()) return;\n this.drag.emit({ clientX: event.clientX, clientY: event.clientY });\n }\n\n onPointerUp(event: PointerEvent): void {\n if (!this.dragging()) return;\n this.dragging.set(false);\n (event.currentTarget as HTMLElement | null)?.releasePointerCapture?.(event.pointerId);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.dragEnd.emit();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const step = event.shiftKey ? 64 : 16;\n const [back, forward] = this.orientation() === 'vertical' ? ['ArrowLeft', 'ArrowRight'] : ['ArrowUp', 'ArrowDown'];\n let delta: number | null = null;\n if (event.key === back) delta = -step;\n else if (event.key === forward) delta = step;\n else if (event.key === 'Home') delta = -Infinity;\n else if (event.key === 'End') delta = Infinity;\n if (delta === null) return;\n event.preventDefault();\n this.nudge.emit(delta);\n }\n}\n","import { Injectable, OnDestroy, signal } from '@angular/core';\n\nexport type DwToastSeverity = 'success' | 'info' | 'warning' | 'error';\n\nexport interface DwToastOptions {\n /** Auto-dismiss after ms. Defaults: success/info 3s, warning 4s, error 6s. */\n life?: number;\n /** Stay until dismissed. */\n sticky?: boolean;\n}\n\n/** One toast on the stack, as `<dw-toast-host>` renders it. */\nexport interface DwToast {\n id: string;\n severity: DwToastSeverity;\n message: string;\n createdAt: Date;\n /** Auto-dismiss delay in ms; 0 = sticky. */\n life: number;\n}\n\nconst DEFAULT_LIFE: Readonly<Record<DwToastSeverity, number>> = {\n success: 3000,\n info: 3000,\n warning: 4000,\n error: 6000,\n};\n\n/**\n * The single toast API, and the one toast stack: every screen pushes here and one\n * `<dw-toast-host>` (in the app's root component) renders it, so there is one position and one look.\n *\n * ```ts\n * this.toast.success('Agent saved');\n * this.toast.error('Could not delete the project', { sticky: true });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class DwToastService implements OnDestroy {\n private readonly stack = signal<readonly DwToast[]>([]);\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>();\n private idCounter = 0;\n\n /** The toasts currently shown, oldest first. */\n readonly toasts = this.stack.asReadonly();\n\n success(message: string, options: DwToastOptions = {}): string {\n return this.show('success', message, options);\n }\n\n info(message: string, options: DwToastOptions = {}): string {\n return this.show('info', message, options);\n }\n\n warning(message: string, options: DwToastOptions = {}): string {\n return this.show('warning', message, options);\n }\n\n error(message: string, options: DwToastOptions = {}): string {\n return this.show('error', message, options);\n }\n\n /** Remove one toast (e.g. its close button). Unknown ids are ignored. */\n dismiss(id: string): void {\n this.clearTimer(id);\n this.stack.update((toasts) => toasts.filter((t) => t.id !== id));\n }\n\n /** Remove every toast. */\n clear(): void {\n this.timers.forEach((timer) => clearTimeout(timer));\n this.timers.clear();\n this.stack.set([]);\n }\n\n ngOnDestroy(): void {\n this.clear();\n }\n\n private show(severity: DwToastSeverity, message: string, options: DwToastOptions): string {\n const life = options.sticky ? 0 : (options.life ?? DEFAULT_LIFE[severity]);\n const toast: DwToast = { id: `dw-toast-${++this.idCounter}`, severity, message, createdAt: new Date(), life };\n this.stack.update((toasts) => [...toasts, toast]);\n if (life > 0) {\n this.timers.set(toast.id, setTimeout(() => this.dismiss(toast.id), life));\n }\n return toast.id;\n }\n\n private clearTimer(id: string): void {\n const timer = this.timers.get(id);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.timers.delete(id);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, inject, input, output, signal } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwToastService } from '../toast/dw-toast.service';\n\n/**\n * Copy-to-clipboard icon button. Replaces the ad-hoc `navigator.clipboard`\n * buttons. Inline feedback swaps the icon to a check; toast feedback uses\n * DwToastService.\n *\n * ```html\n * <dw-copy-button [text]=\"apiKey\" feedback=\"toast\" successMessage=\"API key copied\" />\n * <dw-copy-button [text]=\"json\" ariaLabel=\"Copy JSON\" />\n * ```\n */\n@Component({\n selector: 'dw-copy-button',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-button-host' },\n template: `\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [class.dw-icon-btn--lg]=\"size() === 'md'\"\n [class.is-copied]=\"copied()\"\n [class.dw-icon-btn--labelled]=\"!!label()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"copied() ? 'Copied!' : tooltip()\"\n [tooltipDisabled]=\"!tooltip() && !copied()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"copy($event)\"\n >\n <i [class]=\"copied() ? 'pi pi-check' : 'pi pi-copy'\" aria-hidden=\"true\"></i>\n @if (label()) {\n <span class=\"dw-copy-button__label\">{{ copied() ? 'Copied' : label() }}</span>\n }\n </button>\n `,\n})\nexport class DwCopyButtonComponent implements OnDestroy {\n private readonly toast = inject(DwToastService);\n\n readonly text = input<string | null | undefined>('');\n readonly feedback = input<'inline' | 'toast'>('inline');\n readonly successMessage = input<string>('Copied to clipboard');\n readonly errorMessage = input<string>('Could not copy to clipboard');\n readonly ariaLabel = input<string>('Copy to clipboard');\n readonly tooltip = input<string>('Copy');\n readonly label = input<string>('');\n readonly size = input<'sm' | 'md'>('sm');\n readonly testId = input<string | null>(null);\n\n readonly copiedChange = output<string>();\n readonly failed = output<unknown>();\n\n readonly copied = signal(false);\n private resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n async copy(event: MouseEvent): Promise<void> {\n event.stopPropagation();\n const value = this.text() ?? '';\n if (!value) {\n return;\n }\n try {\n if (!navigator.clipboard?.writeText) {\n throw new Error('Clipboard API unavailable');\n }\n await navigator.clipboard.writeText(value);\n this.markCopied();\n if (this.feedback() === 'toast') {\n this.toast.success(this.successMessage());\n }\n this.copiedChange.emit(value);\n } catch (error) {\n this.toast.error(this.errorMessage());\n this.failed.emit(error);\n }\n }\n\n ngOnDestroy(): void {\n if (this.resetTimer) {\n clearTimeout(this.resetTimer);\n }\n }\n\n private markCopied(): void {\n this.copied.set(true);\n if (this.resetTimer) {\n clearTimeout(this.resetTimer);\n }\n this.resetTimer = setTimeout(() => this.copied.set(false), 1500);\n }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, computed, input, signal } from '@angular/core';\n\n/**\n * Entity ID badge: a muted monospace ID (truncated to\n * `first8...last4` by default) that reveals a copy icon on hover and copies\n * the full ID on click, flashing a \"Copied!\" confirmation.\n *\n * Clicks never propagate, so it is safe inside clickable rows and cards.\n */\n@Component({\n selector: 'app-id-block, dw-id-block',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './id-block.component.html',\n host: { class: 'dw-id-block-host' },\n})\nexport class IdBlockComponent implements OnDestroy {\n /** The full ID. Nothing renders when empty. */\n readonly value = input<string | null | undefined>('');\n /** Shorten long IDs to `first8...last4`. The full ID is always what gets copied. */\n readonly truncate = input(true);\n\n readonly copied = signal(false);\n private resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n readonly displayValue = computed(() => {\n const id = this.value() ?? '';\n if (!this.truncate() || id.length < 12) return id;\n return `${id.slice(0, 8)}...${id.slice(-4)}`;\n });\n\n copy(event: Event): void {\n event.stopPropagation();\n const id = this.value();\n if (!id) return;\n navigator.clipboard?.writeText(id).catch(() => { /* clipboard blocked — still confirm the click */ });\n this.copied.set(true);\n if (this.resetTimer) clearTimeout(this.resetTimer);\n this.resetTimer = setTimeout(() => this.copied.set(false), 1500);\n }\n\n ngOnDestroy(): void {\n if (this.resetTimer) clearTimeout(this.resetTimer);\n }\n}\n","@if (value()) {\n<span class=\"dw-id-block\" [class.is-copied]=\"copied()\" role=\"button\" tabindex=\"0\"\n [attr.data-full-id]=\"value()\"\n [attr.aria-label]=\"'Copy ID ' + value()\"\n [title]=\"copied() ? 'Copied!' : 'Click to copy full ID'\"\n (click)=\"copy($event)\" (keydown.enter)=\"copy($event)\" (keydown.space)=\"copy($event); $event.preventDefault()\">\n <span class=\"dw-id-block__value\">{{ displayValue() }}</span>\n <span class=\"dw-id-block__icon\" aria-hidden=\"true\">\n @if (copied()) {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\" /></svg>\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" /></svg>\n }\n </span>\n <span class=\"dw-id-block__toast\" aria-live=\"polite\">{{ copied() ? 'Copied!' : '' }}</span>\n</span>\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\n/** A message, or a function building one from the validator's error value and the field's label. */\nexport type DwFieldMessage = string | ((error: unknown, label: string) => string);\n\n/**\n * Default validation messages for Angular's built-in validators, keyed by error key. An app adds messages for its own\n * validators with `provideCrystalFieldMessages()`; a single field can override any of them through `dw-field [errors]`.\n */\nexport const DW_FIELD_MESSAGES: Readonly<Record<string, DwFieldMessage>> = {\n required: 'This field is required',\n requiredTrue: 'This field is required',\n email: 'Enter a valid email address',\n pattern: 'Invalid format',\n min: (e) => `Minimum value is ${(e as { min: number }).min}`,\n max: (e) => `Maximum value is ${(e as { max: number }).max}`,\n minlength: (e) => `Enter at least ${(e as { requiredLength: number }).requiredLength} characters`,\n maxlength: (e) => `Enter at most ${(e as { requiredLength: number }).requiredLength} characters`,\n};\n\n/** The app's own validator messages (provideCrystalFieldMessages), merged over the defaults; none by default. */\nexport const DW_APP_FIELD_MESSAGES = new InjectionToken<Readonly<Record<string, DwFieldMessage>>>('DW_APP_FIELD_MESSAGES', {\n providedIn: 'root',\n factory: () => ({}),\n});\n\n/**\n * Messages for the app's own validators (and replacements for the defaults), used by every dw-field:\n *\n * ```ts\n * providers: [provideCrystalFieldMessages({ phone: 'Enter a phone number', duplicate: 'This name already exists' })]\n * ```\n */\nexport function provideCrystalFieldMessages(messages: Readonly<Record<string, DwFieldMessage>>): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: DW_APP_FIELD_MESSAGES, useValue: messages }]);\n}\n\n/**\n * First matching message for a control's errors. Override map wins, then a string error value (validators that\n * return their own message), then the app's messages, then the defaults, then a generic fallback.\n */\nexport function fieldErrorMessage(\n errors: ValidationErrors | null | undefined,\n overrides: Readonly<Record<string, string>> | null = null,\n label = '',\n appMessages: Readonly<Record<string, DwFieldMessage>> = {},\n): string {\n if (!errors) {\n return '';\n }\n for (const [key, value] of Object.entries(errors)) {\n if (overrides && overrides[key]) {\n return overrides[key];\n }\n if (typeof value === 'string' && value.trim()) {\n return value;\n }\n const message = appMessages[key] ?? DW_FIELD_MESSAGES[key];\n if (typeof message === 'string') {\n return message;\n }\n if (typeof message === 'function') {\n return message(value, label);\n }\n }\n return 'Invalid value';\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterRenderEffect,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { AbstractControl, NgControl, NgModel, Validators } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { Subscription } from 'rxjs';\nimport { DW_APP_FIELD_MESSAGES, fieldErrorMessage } from './dw-field-messages';\n\nexport type DwShowErrorsWhen = 'touched' | 'dirty' | 'touchedOrDirty' | 'always';\n\nlet nextFieldId = 0;\n\n/**\n * Form field wrapper: label (+ required star, optional tag, info tooltip),\n * the projected control, help text, error message and optional counter.\n * Wires `id`, `aria-invalid`, `aria-required` and `aria-describedby` onto\n * the projected control automatically.\n *\n * ```html\n * <dw-field label=\"Name\" [control]=\"form.controls.name\" help=\"Shown to end users\" [maxLength]=\"100\">\n * <input pInputText formControlName=\"name\" />\n * </dw-field>\n *\n * <dw-field label=\"Prompt\" layout=\"inline\" info=\"Supports {{ '{{' }}variables}}\">\n * <a dwFieldActions class=\"dw-link\" (click)=\"generate()\">Generate with AI</a>\n * <textarea pTextarea [(ngModel)]=\"prompt\" #p=\"ngModel\" required></textarea>\n * </dw-field>\n *\n * <dw-field label=\"Region\" [error]=\"regionError\">…</dw-field> <!-- template-driven / manual -->\n * ```\n */\n@Component({\n selector: 'dw-field',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-testid]': 'testId()',\n },\n template: `\n @if (label()) {\n <div class=\"dw-field__label-row\" [style.width]=\"layout() === 'inline' ? labelWidth() : null\">\n <label class=\"dw-field__label\" [attr.for]=\"controlId()\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"dw-field__required\" aria-hidden=\"true\">*</span>\n }\n @if (optional()) {\n <span class=\"dw-field__optional\">(optional)</span>\n }\n @if (info()) {\n <i\n class=\"pi pi-info-circle dw-field__info\"\n tabindex=\"0\"\n role=\"img\"\n [attr.aria-label]=\"info()\"\n [pTooltip]=\"info()\"\n tooltipPosition=\"top\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n ></i>\n }\n </label>\n <span class=\"dw-field__actions\"><ng-content select=\"[dwFieldActions]\" /></span>\n </div>\n } @else if (layout() === 'inline') {\n <div class=\"dw-field__label-row\" [style.width]=\"labelWidth()\" aria-hidden=\"true\"></div>\n }\n <div class=\"dw-field__body\">\n @if (readonly()) {\n <div class=\"dw-field__readonly\" [attr.id]=\"controlId()\">{{ readonlyValue() || '—' }}</div>\n } @else {\n <div class=\"dw-field__control\">\n <ng-content />\n <ng-content select=\"[dwFieldSuffix]\" />\n </div>\n }\n @if (showError()) {\n <small class=\"dw-field__error\" role=\"alert\" [attr.id]=\"errorId\">{{ errorText() }}</small>\n <ng-content select=\"[dwFieldError]\" />\n } @else if (help() || maxLength()) {\n <div class=\"dw-field__footer\">\n @if (help()) {\n <small class=\"dw-field__help\" [attr.id]=\"helpId\">{{ help() }}</small>\n }\n @if (maxLength()) {\n <small class=\"dw-field__counter\" [class.is-over]=\"length() > maxLength()!\">\n {{ length() }}/{{ maxLength() }}\n </small>\n }\n </div>\n }\n </div>\n `,\n})\nexport class DwFieldComponent {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly appMessages = inject(DW_APP_FIELD_MESSAGES);\n\n readonly label = input<string>('');\n /** Explicit control id; generated when omitted. */\n readonly for = input<string | null>(null);\n /** `null` = detect from the control's Validators.required. */\n readonly required = input<boolean | null>(null);\n readonly optional = input<boolean>(false);\n readonly info = input<string>('');\n readonly help = input<string>('');\n readonly layout = input<'stacked' | 'inline'>('stacked');\n readonly labelWidth = input<string>('160px');\n readonly control = input<AbstractControl | NgModel | NgControl | null>(null);\n /** Per-field message overrides by validator key. */\n readonly errors = input<Record<string, string> | null>(null);\n /** Manual error message (template-driven forms or server errors). */\n readonly error = input<string | null>(null);\n readonly showErrorsWhen = input<DwShowErrorsWhen>('touchedOrDirty');\n readonly maxLength = input<number | null>(null);\n readonly readonly = input<boolean>(false);\n readonly readonlyValue = input<string | number | null>(null);\n readonly disabled = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly errorId = `dw-field-error-${++nextFieldId}`;\n readonly helpId = `dw-field-help-${nextFieldId}`;\n private readonly generatedId = `dw-field-control-${nextFieldId}`;\n\n /** Bumped on every control status/value event so computeds re-evaluate. */\n private readonly tick = signal(0);\n private subscription: Subscription | null = null;\n\n readonly controlId = computed(() => this.for() ?? this.generatedId);\n\n private readonly abstractControl = computed<AbstractControl | null>(() => {\n const c = this.control();\n if (!c) {\n return null;\n }\n return c instanceof AbstractControl ? c : (c.control ?? null);\n });\n\n readonly isRequired = computed(() => {\n const explicit = this.required();\n if (explicit !== null) {\n return explicit;\n }\n this.tick();\n return !!this.abstractControl()?.hasValidator(Validators.required);\n });\n\n readonly errorText = computed(() => {\n this.tick();\n const manual = this.error();\n if (manual) {\n return manual;\n }\n return fieldErrorMessage(this.abstractControl()?.errors, this.errors(), this.label(), this.appMessages);\n });\n\n readonly showError = computed(() => {\n this.tick();\n if (this.error()) {\n return true;\n }\n const c = this.abstractControl();\n if (!c || !c.invalid) {\n return false;\n }\n switch (this.showErrorsWhen()) {\n case 'always':\n return true;\n case 'touched':\n return c.touched;\n case 'dirty':\n return c.dirty;\n default:\n return c.touched || c.dirty;\n }\n });\n\n readonly length = computed(() => {\n this.tick();\n const value = this.abstractControl()?.value;\n return typeof value === 'string' ? value.length : 0;\n });\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-field'];\n if (this.layout() === 'inline') cls.push('dw-field--inline');\n if (this.showError()) cls.push('is-invalid');\n if (this.disabled()) cls.push('is-disabled');\n return cls.join(' ');\n });\n\n constructor() {\n effect(() => {\n const c = this.abstractControl();\n this.subscription?.unsubscribe();\n this.subscription = c ? c.events.subscribe(() => this.tick.update((n) => n + 1)) : null;\n this.tick.update((n) => n + 1);\n });\n this.destroyRef.onDestroy(() => this.subscription?.unsubscribe());\n\n // Wire ids / ARIA onto the projected native control.\n afterRenderEffect(() => {\n const control = this.findControl();\n if (!control) {\n return;\n }\n if (!control.id || control.id.startsWith('dw-field-control-')) {\n control.id = this.controlId();\n }\n const describedBy = this.showError() ? this.errorId : this.help() ? this.helpId : null;\n this.setAttr(control, 'aria-describedby', describedBy);\n this.setAttr(control, 'aria-invalid', this.showError() ? 'true' : null);\n this.setAttr(control, 'aria-required', this.isRequired() ? 'true' : null);\n });\n }\n\n private findControl(): HTMLElement | null {\n return this.host.nativeElement.querySelector<HTMLElement>(\n '.dw-field__control input:not([type=hidden]), .dw-field__control textarea, .dw-field__control select, .dw-field__control [role=combobox]',\n );\n }\n\n private setAttr(el: HTMLElement, name: string, value: string | null): void {\n if (value === null) {\n el.removeAttribute(name);\n } else {\n el.setAttribute(name, value);\n }\n }\n}\n\n/**\n * Section header inside long forms (schema `section-header` fields).\n *\n * ```html\n * <dw-form-section-header title=\"Authentication\" description=\"How Dataworkz connects\" />\n * ```\n */\n@Component({\n selector: 'dw-form-section-header',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-form-section-header', '[attr.title]': 'null' },\n template: `\n <div class=\"dw-form-section-header__text\">\n <p class=\"dw-subtitle\">{{ title() }}</p>\n @if (description()) {\n <p class=\"dw-meta\">{{ description() }}</p>\n }\n </div>\n <ng-content />\n `,\n})\nexport class DwFormSectionHeaderComponent {\n readonly title = input.required<string>();\n readonly description = input<string>('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\n\n/**\n * Search box. Works with `[(value)]`, `ngModel` or a FormControl.\n *\n * ```html\n * <dw-search-input placeholder=\"Search agents…\" [(value)]=\"query\" (valueChange)=\"dt.filterGlobal($event, 'contains')\" />\n * <dw-search-input size=\"sm\" width=\"100%\" iconPosition=\"left\" [debounceMs]=\"300\" (valueChange)=\"load($event)\" />\n * <dw-search-input [clearable]=\"false\" (search)=\"runSearch($event)\" /> <!-- Enter to search -->\n * <dw-search-input [collapsible]=\"true\" width=\"320px\" (search)=\"go($event)\" /> <!-- icon until clicked -->\n * ```\n *\n * `collapsible`: shows only a search icon button; clicking it expands the\n * focused box, which collapses again on blur or Escape while empty.\n */\n@Component({\n selector: 'dw-search-input',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DwSearchInputComponent), multi: true },\n ],\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'collapsed() ? null : width()',\n },\n template: `\n @if (collapsed()) {\n <button\n type=\"button\"\n class=\"dw-icon-btn dw-icon-btn--lg dw-search__trigger\"\n [attr.aria-label]=\"ariaLabel() || placeholder() || 'Search'\"\n [attr.data-testid]=\"testId() ? testId() + '-trigger' : null\"\n [pTooltip]=\"triggerTooltip() || ariaLabel() || placeholder() || 'Search'\"\n [tooltipPosition]=\"tooltipPosition()\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n [disabled]=\"isDisabled()\"\n (click)=\"expand()\"\n >\n <i class=\"pi pi-search\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n @if (iconPosition() === 'left') {\n <i class=\"pi pi-search dw-search__icon dw-search__icon--left\" aria-hidden=\"true\"></i>\n }\n <input\n #input\n type=\"text\"\n class=\"dw-input dw-search__input\"\n autocomplete=\"off\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() || placeholder() || 'Search'\"\n [attr.data-testid]=\"testId()\"\n (input)=\"onInput($any($event.target).value)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onEscape($event)\"\n (blur)=\"onBlur()\"\n />\n @if (showClear()) {\n <button type=\"button\" class=\"dw-search__clear\" aria-label=\"Clear search\" (click)=\"clear()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n } @else if (iconPosition() === 'right') {\n <i class=\"pi pi-search dw-search__icon dw-search__icon--right\" aria-hidden=\"true\"></i>\n }\n }\n `,\n})\nexport class DwSearchInputComponent implements ControlValueAccessor {\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n readonly value = model<string>('');\n readonly placeholder = input<string>('Search');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly width = input<string | null>(null);\n readonly iconPosition = input<'left' | 'right'>('right');\n readonly clearable = input<boolean>(true);\n /** Debounce for `valueChange`-driven searches; `search` (Enter) is immediate. */\n readonly debounceMs = input<number>(0);\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input<boolean>(false);\n readonly testId = input<string | null>(null);\n /** Show only a search icon until clicked (see class docs). */\n readonly collapsible = input<boolean>(false);\n /** Tooltip on the collapsed icon (falls back to `ariaLabel` / `placeholder`). */\n readonly triggerTooltip = input<string>('');\n readonly tooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('bottom');\n\n /** Debounced value stream (alias of the model change when debounceMs = 0). */\n readonly debouncedChange = output<string>();\n readonly search = output<string>();\n readonly cleared = output<void>();\n /** A collapsible search opened (true) or closed (false). */\n readonly expandedChange = output<boolean>();\n\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n private readonly cvaDisabled = signal(false);\n private timer: ReturnType<typeof setTimeout> | null = null;\n private onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n /** Open state of a collapsible search (always open otherwise). */\n readonly expanded = signal(false);\n /** Collapsible and closed: only the search icon button is shown. */\n readonly collapsed = computed(() => this.collapsible() && !this.expanded() && !this.value());\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n readonly showClear = computed(() => this.clearable() && !!this.value() && !this.isDisabled());\n readonly hostClasses = computed(() => {\n const cls = ['dw-search', `dw-search--${this.size()}`, `dw-search--icon-${this.iconPosition()}`];\n if (this.width() === '100%') cls.push('dw-search--block');\n if (this.collapsible()) cls.push(this.collapsed() ? 'dw-search--collapsed' : 'dw-search--expanded');\n return cls.join(' ');\n });\n\n constructor() {\n this.destroyRef.onDestroy(() => this.clearTimer());\n }\n\n onInput(text: string): void {\n this.value.set(text);\n this.onChange(text);\n this.emitDebounced(text);\n }\n\n onEnter(): void {\n this.clearTimer();\n this.search.emit(this.value());\n }\n\n onEscape(event: Event): void {\n if (this.value()) {\n event.stopPropagation();\n this.clear();\n } else if (this.collapsible()) {\n this.collapse();\n }\n }\n\n onBlur(): void {\n this.onTouched();\n if (this.collapsible() && !this.value()) {\n this.collapse();\n }\n }\n\n /** Opens a collapsible search and focuses its box. */\n expand(): void {\n this.expanded.set(true);\n this.expandedChange.emit(true);\n afterNextRender(() => this.focus(), { injector: this.injector });\n }\n\n collapse(): void {\n if (!this.expanded()) return;\n this.expanded.set(false);\n this.expandedChange.emit(false);\n }\n\n clear(): void {\n this.value.set('');\n this.onChange('');\n this.clearTimer();\n this.debouncedChange.emit('');\n this.cleared.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n private emitDebounced(text: string): void {\n const ms = this.debounceMs();\n if (ms <= 0) {\n this.debouncedChange.emit(text);\n return;\n }\n this.clearTimer();\n this.timer = setTimeout(() => this.debouncedChange.emit(text), ms);\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nexport type DwFileRejectReason = 'size' | 'type';\n\nexport interface DwFileRejection {\n file: File;\n reason: DwFileRejectReason;\n}\n\nexport interface DwSupportedType {\n label: string;\n icon?: string;\n}\n\n/** `5 * 1024 * 1024` → `5 MB` */\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes <= 0) {\n return '0 B';\n }\n const units = ['B', 'KB', 'MB', 'GB'];\n const i = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const value = bytes / Math.pow(1024, i);\n return `${Number.isInteger(value) ? value : value.toFixed(1)} ${units[i]}`;\n}\n\nexport function extensionOf(name: string): string {\n const dot = name.lastIndexOf('.');\n return dot >= 0 ? name.slice(dot + 1).toLowerCase() : '';\n}\n\n/**\n * Drag-and-drop / click-to-browse file picker.\n *\n * ```html\n * <dw-file-dropzone [multiple]=\"true\" [maxSize]=\"5 * 1024 * 1024\" [allowedExtensions]=\"exts\"\n * hint=\"Up to 5 MB each\" [supportedTypes]=\"types\"\n * (filesSelected)=\"queue($event)\" (rejected)=\"reject($event)\" />\n * <dw-file-dropzone variant=\"button\" accept=\".pem,.cert\" label=\"Upload certificate\" (filesSelected)=\"pick($event)\" />\n * ```\n */\n@Component({\n selector: 'dw-file-dropzone',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-file-dropzone-host' },\n template: `\n <input\n #fileInput\n type=\"file\"\n class=\"dw-sr-only\"\n tabindex=\"-1\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n (change)=\"onInputChange($event)\"\n (cancel)=\"$event.stopPropagation()\"\n />\n @if (variant() === 'button') {\n <button\n type=\"button\"\n class=\"dw-btn dw-btn--secondary dw-btn--outlined\"\n [disabled]=\"disabled()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"browse()\"\n >\n <i class=\"pi pi-upload\" aria-hidden=\"true\"></i>\n {{ label() }}\n </button>\n } @else {\n <div\n class=\"dw-dropzone\"\n [class.is-dragover]=\"dragOver()\"\n [class.is-disabled]=\"disabled()\"\n role=\"button\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.aria-label]=\"label()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"browse()\"\n (keydown.enter)=\"browse(); $event.preventDefault()\"\n (keydown.space)=\"browse(); $event.preventDefault()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <i class=\"pi pi-cloud-upload dw-dropzone__icon\" aria-hidden=\"true\"></i>\n <p class=\"dw-dropzone__title\">\n <span class=\"dw-link\">{{ label() }}</span> or drag and drop\n </p>\n @if (hint()) {\n <p class=\"dw-dropzone__hint\">{{ hint() }}</p>\n }\n @if (supportedTypes().length) {\n <div class=\"dw-dropzone__types\">\n @for (t of supportedTypes(); track t.label) {\n <span class=\"dw-tag\">\n @if (t.icon) {\n <img [src]=\"t.icon\" alt=\"\" aria-hidden=\"true\" class=\"dw-dropzone__type-icon\" />\n }\n {{ t.label }}\n </span>\n }\n </div>\n }\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- only stops clicks on projected controls from opening the file picker -->\n <div class=\"dw-dropzone__extra\" (click)=\"$event.stopPropagation()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n})\nexport class DwFileDropzoneComponent {\n readonly accept = input<string>('');\n readonly multiple = input<boolean>(false);\n /** Bytes; 0 = unlimited. */\n readonly maxSize = input<number>(0);\n /** Lower-case extensions without the dot; empty = any. */\n readonly allowedExtensions = input<readonly string[]>([]);\n readonly label = input<string>('Click to upload');\n readonly hint = input<string>('');\n readonly supportedTypes = input<readonly DwSupportedType[]>([]);\n readonly disabled = input<boolean>(false);\n readonly variant = input<'zone' | 'button'>('zone');\n readonly testId = input<string | null>(null);\n\n readonly filesSelected = output<File[]>();\n readonly rejected = output<DwFileRejection[]>();\n\n private readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n private dragDepth = 0;\n readonly dragOver = signal(false);\n\n readonly allowed = computed(() => new Set(this.allowedExtensions().map((e) => e.replace(/^\\./, '').toLowerCase())));\n\n browse(): void {\n if (!this.disabled()) {\n this.fileInput()?.nativeElement.click();\n }\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.handle(Array.from(target.files ?? []));\n target.value = ''; // allow re-selecting the same file\n }\n\n onDragEnter(event: DragEvent): void {\n event.preventDefault();\n if (this.disabled()) return;\n this.dragDepth++;\n this.dragOver.set(true);\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.dragDepth = Math.max(0, this.dragDepth - 1);\n if (this.dragDepth === 0) {\n this.dragOver.set(false);\n }\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragDepth = 0;\n this.dragOver.set(false);\n if (this.disabled()) return;\n this.handle(Array.from(event.dataTransfer?.files ?? []));\n }\n\n /** Validates and splits files into accepted / rejected, then emits. */\n handle(files: File[]): void {\n const list = this.multiple() ? files : files.slice(0, 1);\n const accepted: File[] = [];\n const rejections: DwFileRejection[] = [];\n for (const file of list) {\n const allowed = this.allowed();\n if (allowed.size && !allowed.has(extensionOf(file.name))) {\n rejections.push({ file, reason: 'type' });\n } else if (this.maxSize() > 0 && file.size > this.maxSize()) {\n rejections.push({ file, reason: 'size' });\n } else {\n accepted.push(file);\n }\n }\n if (accepted.length) this.filesSelected.emit(accepted);\n if (rejections.length) this.rejected.emit(rejections);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { formatBytes } from './dw-file-dropzone.component';\n\nexport type DwFileStatus = 'queued' | 'uploading' | 'success' | 'failed' | 'toolarge' | 'unsupported';\n\nexport interface DwFileItem {\n id?: string | number;\n name: string;\n size?: number;\n status: DwFileStatus;\n error?: string;\n icon?: string;\n}\n\nconst STATUS_ICONS: Record<DwFileStatus, string> = {\n queued: 'pi pi-clock',\n uploading: 'pi pi-spin pi-spinner',\n success: 'pi pi-check-circle',\n failed: 'pi pi-times-circle',\n toolarge: 'pi pi-exclamation-triangle',\n unsupported: 'pi pi-ban',\n};\n\n/**\n * Upload queue / selected-file list.\n *\n * ```html\n * <dw-file-list [items]=\"queue\" (remove)=\"drop($event)\" (retry)=\"upload($event)\" />\n * ```\n */\n@Component({\n selector: 'dw-file-list',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-file-list', role: 'list' },\n template: `\n @for (item of items(); track item.id ?? item.name) {\n <div class=\"dw-file-list__item\" role=\"listitem\" [class]=\"'is-' + item.status\">\n @if (item.icon) {\n <img class=\"dw-file-list__file-icon\" [src]=\"item.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i class=\"pi pi-file dw-file-list__file-icon\" aria-hidden=\"true\"></i>\n }\n <div class=\"dw-file-list__meta\">\n <span class=\"dw-file-list__name\" [title]=\"item.name\">{{ item.name }}</span>\n @if (item.error) {\n <span class=\"dw-file-list__error\">{{ item.error }}</span>\n } @else if (item.size !== undefined) {\n <span class=\"dw-file-list__size\">{{ size(item.size) }}</span>\n }\n </div>\n <i class=\"dw-file-list__status\" [class]=\"statusIcon(item.status)\" [attr.aria-label]=\"item.status\" role=\"img\"></i>\n @if (item.status === 'failed' && retryable()) {\n <button type=\"button\" class=\"dw-icon-btn\" [attr.aria-label]=\"'Retry ' + item.name\" (click)=\"retry.emit(item)\">\n <i class=\"pi pi-refresh\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (removable() && item.status !== 'uploading') {\n <button\n type=\"button\"\n class=\"dw-icon-btn dw-icon-btn--danger\"\n [attr.aria-label]=\"'Remove ' + item.name\"\n (click)=\"remove.emit(item)\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n }\n `,\n})\nexport class DwFileListComponent {\n readonly items = input<readonly DwFileItem[]>([]);\n readonly removable = input<boolean>(true);\n readonly retryable = input<boolean>(false);\n\n readonly remove = output<DwFileItem>();\n readonly retry = output<DwFileItem>();\n\n statusIcon(status: DwFileStatus): string {\n return STATUS_ICONS[status] ?? STATUS_ICONS.queued;\n }\n\n size(bytes: number): string {\n return formatBytes(bytes);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n computed,\n contentChild,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MenuItem } from 'primeng/api';\nimport { Menu, MenuModule } from 'primeng/menu';\nimport { TieredMenu, TieredMenuModule } from 'primeng/tieredmenu';\nimport { alignUnderOverlayAnchor } from '../overlay-anchor.util';\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\n/** Content shown above the items (list mode), e.g. who is signed in: `<ng-template dwMenuHeader>…</ng-template>`. */\n@Directive({ selector: 'ng-template[dwMenuHeader]', standalone: true })\nexport class DwMenuHeaderDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\nexport interface DwMenuItem<T = unknown> {\n label?: string;\n icon?: string;\n /** Receives the menu's `context` (e.g. the table row). */\n command?: (context: T, event?: unknown) => void;\n routerLink?: string | readonly unknown[];\n queryParams?: Record<string, unknown>;\n url?: string;\n target?: string;\n danger?: boolean;\n disabled?: boolean;\n /** Why the item is disabled — shown as a tooltip on hover while it is. */\n disabledReason?: string;\n /** `false` hides the item; the consumer decides, e.g. `visible: auth.hasPrivilege('x')`. */\n visible?: boolean;\n separator?: boolean;\n description?: string;\n testId?: string;\n items?: DwMenuItem<T>[];\n /** Count shown at the end of the item (e.g. unread notifications). */\n count?: number | string | null;\n}\n\n/** Marks the hidden-heading group that holds plain top-level items (see groupLooseItems). */\nexport const DW_MENU_PLAIN_GROUP = 'dw-menu-plain-group';\n\n/**\n * Popup menu (kebab / action menu) on top of p-menu.\n *\n * ```html\n * <!-- built-in kebab trigger -->\n * <dw-menu [items]=\"rowActions\" [context]=\"agent\" ariaLabel=\"Agent actions\" />\n *\n * <!-- external trigger -->\n * <dw-button label=\"Create\" trailingIcon=\"pi pi-chevron-down\" (clicked)=\"createMenu.toggle($event)\" />\n * <dw-menu #createMenu [items]=\"createItems\" trigger=\"none\" />\n * ```\n * Items with `danger: true` are styled red and separated from the rest.\n *\n * `mode=\"list\"` (default) renders an item's `items` as a labelled group;\n * `mode=\"tiered\"` opens them as a flyout submenu, so parents and their\n * siblings stay ordinary, clickable entries (e.g. the header's Data Studio).\n */\n@Component({\n selector: 'dw-menu',\n standalone: true,\n imports: [MenuModule, TieredMenuModule, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-menu-host' },\n template: `\n @if (trigger() === 'kebab') {\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [class.dw-icon-btn--lg]=\"size() === 'md'\"\n [class.dw-icon-btn--xs]=\"size() === 'xs'\"\n [class.dw-icon-btn--outlined]=\"triggerVariant() === 'outlined'\"\n [class.is-open]=\"open()\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-testid]=\"testId()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle($event)\"\n >\n <i [class]=\"triggerIcon()\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (mode() === 'tiered') {\n <p-tieredmenu\n #tiered\n [model]=\"model()\"\n [popup]=\"true\"\n [appendTo]=\"appendTo()\"\n [styleClass]=\"'dw-menu dw-menu--tiered ' + styleClass()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n ></p-tieredmenu>\n } @else {\n <p-menu\n #menu\n [model]=\"model()\"\n [popup]=\"true\"\n [appendTo]=\"appendTo()\"\n [styleClass]=\"'dw-menu ' + styleClass()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n >\n @if (header(); as h) {\n <ng-template #start>\n <div class=\"dw-menu__header\"><ng-container [ngTemplateOutlet]=\"h.template\" /></div>\n </ng-template>\n }\n </p-menu>\n }\n `,\n})\nexport class DwMenuComponent<T = unknown> {\n readonly items = input<DwMenuItem<T>[]>([]);\n readonly context = input<T | null>(null);\n readonly trigger = input<'kebab' | 'none'>('kebab');\n readonly triggerIcon = input<string>('pi pi-ellipsis-v');\n readonly ariaLabel = input<string>('More actions');\n readonly size = input<'xs' | 'sm' | 'md'>('sm');\n /** Kebab trigger look: `outlined` (bordered, on a surface) floats clearly over row content. */\n readonly triggerVariant = input<'default' | 'outlined'>('default');\n readonly disabled = input<boolean>(false);\n readonly appendTo = input<string>('body');\n readonly styleClass = input<string>('');\n readonly testId = input<string | null>(null);\n /** `list`: child items render as a labelled group. `tiered`: they open as a flyout submenu. */\n readonly mode = input<'list' | 'tiered'>('list');\n\n readonly opened = output<void>();\n readonly closed = output<void>();\n readonly itemClick = output<DwMenuItem<T>>();\n\n readonly open = signal(false);\n readonly header = contentChild(DwMenuHeaderDirective);\n private readonly listMenu = viewChild<Menu>('menu');\n private readonly tieredMenu = viewChild<TieredMenu>('tiered');\n private readonly menu = computed<Menu | TieredMenu | undefined>(() => this.tieredMenu() ?? this.listMenu());\n\n readonly model = computed<MenuItem[]>(() => {\n const model = this.toMenuItems(this.items());\n return this.mode() === 'list' ? this.groupLooseItems(model) : model;\n });\n\n toggle(event: Event): void {\n event.stopPropagation();\n this.menu()?.toggle(event);\n }\n\n show(event: Event): void {\n this.menu()?.show(event);\n }\n\n hide(): void {\n this.menu()?.hide();\n }\n\n onShow(): void {\n // Tiered: open flyouts on hover straight away. PrimeNG only does that once the\n // menu is \"dirty\" (after a first click) and resets the flag on every show.\n const tiered = this.tieredMenu() as unknown as { dirty?: boolean } | undefined;\n if (tiered && 'dirty' in tiered) {\n tiered.dirty = true;\n }\n // PrimeNG emits onShow before it positions the panel (same call), so anchor afterwards.\n const menu = this.menu();\n queueMicrotask(() => alignUnderOverlayAnchor(menu?.container, menu?.target));\n this.open.set(true);\n this.opened.emit();\n }\n\n onHide(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n private isVisible(item: DwMenuItem<T>): boolean {\n return item.visible !== false;\n }\n\n /**\n * PrimeNG's list menu renders every top-level item as a group heading once any of them has\n * children, so a plain action beside a group (e.g. \"Export\" next to \"Get help\") became an\n * unclickable label. Wrap each run of plain top-level items in a group with a hidden heading.\n */\n private groupLooseItems(model: MenuItem[]): MenuItem[] {\n if (!model.some((m) => m.items?.length)) return model;\n const out: MenuItem[] = [];\n let loose: MenuItem[] = [];\n const flush = () => {\n if (loose.length) out.push({ label: '', automationId: DW_MENU_PLAIN_GROUP, items: loose });\n loose = [];\n };\n for (const item of model) {\n if (item.items?.length || item.separator) {\n flush();\n out.push(item);\n } else {\n loose.push(item);\n }\n }\n flush();\n return out;\n }\n\n private toMenuItems(items: DwMenuItem<T>[]): MenuItem[] {\n const visible = items.filter((i) => this.isVisible(i));\n const regular = visible.filter((i) => !i.danger);\n const danger = visible.filter((i) => i.danger);\n const ordered: DwMenuItem<T>[] =\n regular.length && danger.length && !regular[regular.length - 1].separator\n ? [...regular, { separator: true }, ...danger]\n : [...regular, ...danger];\n return ordered.map((item) => this.toMenuItem(item));\n }\n\n private toMenuItem(item: DwMenuItem<T>): MenuItem {\n if (item.separator) {\n return { separator: true };\n }\n const classes = ['dw-menu__item'];\n if (item.danger) classes.push('dw-menu-item--danger');\n const reason = item.disabled && item.disabledReason ? item.disabledReason : '';\n // A disabled item ignores the pointer (PrimeNG's .p-disabled), so a title never showed; an\n // explained one takes hover again (menu.css) and shows the reason as a real tooltip.\n if (reason) classes.push('dw-menu__item--explained');\n return {\n label: item.label,\n icon: item.icon,\n disabled: item.disabled,\n ...(reason ? { tooltipOptions: { tooltipLabel: reason, tooltipPosition: 'left', appendTo: 'body' } } : {}),\n routerLink: item.routerLink,\n queryParams: item.queryParams,\n url: item.url,\n // PrimeNG binds [target] as a property: left undefined it becomes the string \"undefined\" — a\n // named window — so every link item opened a new tab. Links open in this tab unless asked.\n target: item.target ?? '_self',\n styleClass: classes.join(' '),\n automationId: item.testId,\n ...(item.count !== undefined && item.count !== null\n ? { badge: String(item.count), badgeStyleClass: 'dw-menu__count' }\n : {}),\n ...(item.description\n ? {\n escape: false,\n label: `${escapeHtml(item.label ?? '')}<span class=\"dw-menu__description\">${escapeHtml(item.description)}</span>`,\n }\n : {}),\n items: item.items ? this.toMenuItems(item.items) : undefined,\n command: (e) => {\n this.itemClick.emit(item);\n item.command?.(this.context() as T, e?.originalEvent);\n },\n };\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwMenuComponent, DwMenuItem } from '../menu/dw-menu.component';\nimport { DwBadgeComponent, DwBadgeTone } from '../badge/dw-badge.component';\nimport { DwSkeletonComponent } from '../loading/dw-skeleton.component';\nimport { isImageIcon } from '../internal/image-icon.util';\n\nexport type DwCardVariant = 'entity' | 'option' | 'stat' | 'flat';\nexport type DwCardTint = 'neutral' | 'accent' | 'workflow' | 'reasoning' | 'orange' | 'cyan' | 'pink' | 'success' | 'danger';\n\nexport { isImageIcon };\n\n/**\n * Card for entities, templates, integrations, selectable options and stats.\n *\n * ```html\n * <dw-card [title]=\"tpl.name\" [description]=\"tpl.description\" [icon]=\"tpl.icon\" [interactive]=\"true\"\n * [menuItems]=\"actions\" [menuContext]=\"tpl\" (activate)=\"open(tpl)\">\n * <dw-tag-list dwCardTags [tags]=\"tpl.tags\" [maxVisible]=\"3\" />\n * <span dwCardFooter class=\"dw-meta\">Updated 2d ago</span>\n * </dw-card>\n *\n * <dw-card variant=\"option\" title=\"Delete agent only\" description=\"Keeps tools\" [selected]=\"mode === 'agent'\"\n * (activate)=\"mode = 'agent'\" />\n *\n * <dw-card variant=\"stat\" label=\"Runs\" [value]=\"1204\" [interactive]=\"true\" [selected]=\"filter === 'runs'\" />\n *\n * <!-- Stat with the info icon and an expand chevron at the end of the label row, a muted suffix -->\n * <dw-card variant=\"stat\" label=\"Orders\" [value]=\"'1,341'\" valueSuffix=\"/ 1,500\" tooltip=\"…\" infoPosition=\"end\">\n * <i dwStatLabelEnd class=\"pi pi-chevron-down\"></i>\n * </dw-card>\n *\n * <!-- A stand-in stat (e.g. data with no definition): dashed, muted, monospace label -->\n * <dw-card variant=\"stat\" appearance=\"dashed\" labelStyle=\"mono\" label=\"legacy_po_mismatch\" [value]=\"8\" />\n * ```\n */\n@Component({\n selector: 'dw-card',\n standalone: true,\n imports: [NgTemplateOutlet, TooltipModule, DwMenuComponent, DwBadgeComponent, DwSkeletonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n '[class]': 'hostClasses()',\n '[attr.role]': 'role()',\n '[attr.tabindex]': 'isInteractive() ? 0 : null',\n '[attr.aria-pressed]': 'variant() === \"stat\" && isInteractive() ? selected() : null',\n '[attr.aria-checked]': 'variant() === \"option\" ? selected() : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.data-testid]': 'testId()',\n '(click)': 'onActivate($event)',\n '(keydown.enter)': 'onActivate($event)',\n '(keydown.space)': 'onActivate($event)',\n },\n template: `\n <!-- One default slot, shared by the stat and body layouts (two <ng-content>s would leave the stat one empty). -->\n <ng-template #projected><ng-content /></ng-template>\n @if (loading()) {\n <dw-skeleton [preset]=\"variant() === 'stat' ? 'text' : 'card'\" />\n } @else if (variant() === 'stat') {\n @if (icon()) {\n <span class=\"dw-entity-icon dw-stat-card__icon\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <span class=\"dw-stat-card__label\" [class.dw-mono]=\"labelStyle() === 'mono'\">\n <span class=\"dw-stat-card__label-text\">{{ label() || title() }}</span>\n @if (tooltip() && infoPosition() === 'inline') {\n <i class=\"pi pi-info-circle dw-stat-card__info\" tabindex=\"0\" [attr.aria-label]=\"tooltip()\"\n [pTooltip]=\"tooltip()\" tooltipPosition=\"top\" appendTo=\"body\"></i>\n }\n <span class=\"dw-stat-card__label-end\">@if (tooltip() && infoPosition() === 'end') {<i class=\"pi pi-info-circle dw-stat-card__info\" tabindex=\"0\" [attr.aria-label]=\"tooltip()\"\n [pTooltip]=\"tooltip()\" tooltipPosition=\"top\" appendTo=\"body\"></i>}<ng-content select=\"[dwStatLabelEnd]\" /></span>\n </span>\n <span class=\"dw-stat-card__value\">{{ value() }}@if (valueSuffix()) {<span class=\"dw-stat-card__value-suffix\">{{ valueSuffix() }}</span>}</span>\n <ng-container *ngTemplateOutlet=\"projected\" />\n } @else {\n <div\n class=\"dw-card__header\"\n [pTooltip]=\"disabled() ? disabledReason() : tooltip()\"\n [tooltipDisabled]=\"!(disabled() ? disabledReason() : tooltip())\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >\n @if (variant() === 'option') {\n <span class=\"dw-card__radio\" [class.is-checked]=\"selected()\" aria-hidden=\"true\"></span>\n }\n @if (icon()) {\n <span class=\"dw-entity-icon dw-card__icon\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-card__titles\">\n @if (title()) {\n <p class=\"dw-card__title dw-subtitle\">{{ title() }}</p>\n }\n @if (subtitle()) {\n <p class=\"dw-card__subtitle\">{{ subtitle() }}</p>\n }\n </div>\n <div class=\"dw-card__header-end\">\n @if (badge()) {\n <dw-badge [value]=\"badge()\" [tone]=\"badgeTone()\" kind=\"label\" />\n }\n <ng-content select=\"[dwCardHeaderEnd]\" />\n @if (menuItems().length) {\n <dw-menu [items]=\"menuItems()\" [context]=\"menuContext()\" [ariaLabel]=\"(title() || 'Card') + ' actions'\" />\n }\n </div>\n </div>\n @if (description() || hasBody()) {\n <div class=\"dw-card__body\">\n @if (description()) {\n <p class=\"dw-card__desc\" [class]=\"'dw-card__desc--clamp-' + clampLines()\">{{ description() }}</p>\n }\n <ng-content select=\"[dwCardTags]\" />\n <ng-container *ngTemplateOutlet=\"projected\" />\n </div>\n }\n <ng-content select=\"[dwCardFooter]\" />\n }\n `,\n})\nexport class DwCardComponent {\n readonly variant = input<DwCardVariant>('entity');\n /** `sm` is the dense picker tile: 12px padding and no hover lift. */\n readonly size = input<'md' | 'sm'>('md');\n readonly title = input<string>('');\n readonly subtitle = input<string>('');\n readonly description = input<string>('');\n readonly clampLines = input<1 | 2 | 3>(2);\n /** Icon-font class (`pi pi-cloud`) or image path. */\n readonly icon = input<string>('');\n readonly iconTint = input<DwCardTint>('neutral');\n readonly badge = input<string>('');\n readonly badgeTone = input<DwBadgeTone>('neutral');\n readonly tooltip = input<string>('');\n readonly interactive = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly disabledReason = input<string>('');\n readonly loading = input<boolean>(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- public generic default; `unknown` would break consumers' typing\n readonly menuItems = input<DwMenuItem<any>[]>([]);\n readonly menuContext = input<unknown>(null);\n /** Stat variant. */\n readonly label = input<string>('');\n /** Stat variant: `caps` sets the label as an uppercase caption; `mono` in the monospace face. */\n readonly labelStyle = input<'default' | 'caps' | 'mono'>('default');\n readonly value = input<string | number | null>(null);\n /** Stat variant: muted, smaller text after the value, e.g. \"/ 1,500\" for a target. */\n readonly valueSuffix = input<string>('');\n /** Stat variant: the tooltip's info icon right after the label (default) or at the end of its row. */\n readonly infoPosition = input<'inline' | 'end'>('inline');\n /** Stat variant: `dashed` for a muted stand-in tile (dashed border, quieter surface). */\n readonly appearance = input<'default' | 'dashed'>('default');\n /** Set true when projecting default body content without a description. */\n readonly hasBody = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly activate = output<Event>();\n\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n readonly isInteractive = computed(\n () => (this.interactive() || this.variant() === 'option') && !this.disabled() && !this.loading(),\n );\n readonly role = computed(() => {\n if (this.variant() === 'option') return 'radio';\n return this.isInteractive() ? 'button' : null;\n });\n\n readonly hostClasses = computed(() => {\n const stat = this.variant() === 'stat';\n const cls = [stat ? 'dw-stat-card' : 'dw-card', `dw-card--${this.variant()}`];\n if (this.interactive() || this.variant() === 'option') cls.push('dw-card--hover');\n if (this.selected()) cls.push('is-selected');\n if (this.disabled()) cls.push('is-disabled');\n if (this.variant() === 'flat') cls.push('dw-card--flat');\n if (this.size() === 'sm') cls.push('dw-card--sm');\n if (stat && this.icon()) cls.push('dw-stat-card--with-icon');\n if (stat && this.labelStyle() === 'caps') cls.push('dw-stat-card--caps-label');\n if (stat && this.appearance() === 'dashed') cls.push('dw-stat-card--dashed');\n return cls.join(' ');\n });\n\n onActivate(event: Event): void {\n if (!this.isInteractive()) {\n return;\n }\n const target = event.target as HTMLElement | null;\n // Ignore clicks on nested interactive controls (menu trigger, links, inputs).\n if (target && target !== event.currentTarget && target.closest('button, a, input, select, textarea, [role=menu]')) {\n return;\n }\n if (event instanceof KeyboardEvent) {\n event.preventDefault();\n }\n this.activate.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, inject, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { isImageIcon } from '../internal/image-icon.util';\n\n/** Marks the switch (usually `<p-toggleswitch formControlName=…>`) shown at the card's leading edge. */\n@Directive({ selector: '[dwToggleCardControl]', standalone: true })\nexport class DwToggleCardControlDirective {}\n\n/**\n * Lazy configuration body: `<ng-template dwToggleCardBody>…</ng-template>` is only created\n * while the card is expanded (projected content would be instantiated even when hidden).\n */\n@Directive({ selector: 'ng-template[dwToggleCardBody]', standalone: true })\nexport class DwToggleCardBodyDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * Feature card that is switched on/off: switch · icon · title / description, with the\n * configuration body revealed while `expanded` is true. The consumer owns the switch so\n * it stays bound to its own form control.\n *\n * ```html\n * <dw-toggle-card title=\"Full Text Search Index\" description=\"Enable full text search\"\n * icon=\"pi pi-search\" [expanded]=\"form.value.fullTextSearchIndex\"\n * [disabledReason]=\"graphDbOn ? '' : 'Requires Graph Database Storage to be enabled'\">\n * <p-toggleswitch dwToggleCardControl formControlName=\"fullTextSearchIndex\" />\n * <ng-template dwToggleCardBody>…configuration fields…</ng-template>\n * </dw-toggle-card>\n * ```\n */\n@Component({\n selector: 'dw-toggle-card',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n class: 'dw-toggle-card',\n '[class.is-expanded]': 'expanded()',\n '[class.is-disabled]': '!!disabledReason()',\n '[class.is-invalid]': 'invalid()',\n '[attr.data-testid]': 'testId()',\n },\n template: `\n <div class=\"dw-toggle-card__header\">\n <span class=\"dw-toggle-card__control\"><ng-content select=\"[dwToggleCardControl]\" /></span>\n @if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--md dw-toggle-card__icon\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-toggle-card__titles\">\n <h3 class=\"dw-toggle-card__title\">{{ title() }}</h3>\n @if (description()) {\n <p class=\"dw-toggle-card__desc\">{{ description() }}</p>\n }\n @if (disabledReason()) {\n <p class=\"dw-toggle-card__reason\">{{ disabledReason() }}</p>\n }\n </div>\n </div>\n @if (expanded() && body()) {\n <div class=\"dw-toggle-card__body\">\n <ng-container [ngTemplateOutlet]=\"body()!.template\" />\n </div>\n }\n `,\n})\nexport class DwToggleCardComponent {\n readonly title = input.required<string>();\n readonly description = input<string>('');\n /** Icon class (`pi pi-users`) or image path. */\n readonly icon = input<string>('');\n /** Show the configuration body (typically the switch's value). */\n readonly expanded = input<boolean>(false);\n /** When set, the card is dimmed and this explains why it can't be enabled. */\n readonly disabledReason = input<string>('');\n /** Flags the card when its configuration needs attention (e.g. a required field is empty). */\n readonly invalid = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n readonly body = contentChild(DwToggleCardBodyDirective);\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n}\n\nexport const DW_TOGGLE_CARD = [DwToggleCardComponent, DwToggleCardControlDirective, DwToggleCardBodyDirective] as const;\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DwBadgeComponent } from '../badge/dw-badge.component';\nimport { DwCardComponent } from '../card/dw-card.component';\n\n/**\n * Picker tile (integration catalogue, channel picker): a small card with the icon beside the label\n * and, below, how many instances exist — the same card as Create tool's integrations. Lay several\n * out in `.dw-tile-grid`.\n *\n * ```html\n * <div class=\"dw-tile-grid\">\n * <dw-tile label=\"Snowflake\" icon=\"pi pi-database\" [count]=\"3\" (activate)=\"open('snowflake')\" />\n * <dw-tile label=\"Slack\" icon=\"pi pi-slack\" badge=\"Coming soon\" [disabled]=\"true\" />\n * </div>\n * ```\n */\n@Component({\n selector: 'dw-tile',\n standalone: true,\n imports: [DwCardComponent, DwBadgeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-tile-host' },\n template: `\n <dw-card class=\"dw-tile\" size=\"sm\" [interactive]=\"!disabled()\" [disabled]=\"disabled()\" [icon]=\"icon()\"\n [title]=\"label()\" [hasBody]=\"hasCount() || !!badge()\" [testId]=\"testId()\"\n (activate)=\"onActivate($event)\">\n <!-- The second line: the count, or the badge (e.g. \"Coming soon\") — never beside the\n label, where it would cut a longer name short. -->\n @if (hasCount()) {\n <span class=\"dw-tile__count\">\n <!-- &ngsp; keeps a real space for screen readers and copy-paste (\"3 connections\");\n the flex gap already spaces them visually, where a whitespace-only text node isn't drawn. -->\n <b class=\"dw-subtitle\">{{ count() }}</b>&ngsp;<span class=\"dw-meta\">{{ countUnit() }}</span>\n @if (badge()) {\n <dw-badge [value]=\"badge()\" tone=\"muted\" kind=\"label\" />\n }\n </span>\n } @else if (badge()) {\n <dw-badge [value]=\"badge()\" tone=\"muted\" kind=\"label\" />\n }\n </dw-card>\n `,\n})\nexport class DwTileComponent {\n readonly label = input.required<string>();\n /** PrimeIcons class or an image path / data URI. */\n readonly icon = input<string>('');\n readonly count = input<number | string | null>(null);\n /** What the count counts; singular when the count is 1. */\n readonly unit = input<string>('instance');\n /** Badge on the tile's second line, e.g. \"Coming soon\". */\n readonly badge = input<string>('');\n readonly disabled = input<boolean>(false);\n readonly testId = input<string | null>(null);\n\n /** Not emitted while disabled. */\n readonly activate = output<Event>();\n\n readonly hasCount = computed(() => this.count() !== null && this.count() !== undefined);\n readonly countUnit = computed(() => (Number(this.count()) === 1 ? this.unit() : `${this.unit()}s`));\n\n onActivate(event: Event): void {\n if (!this.disabled()) this.activate.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, output, signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DwEntityIconComponent, DwEntityTint } from '../entity-icon/dw-entity-icon.component';\n\nlet nextSectionId = 0;\n\n/**\n * Section with an optional collapsible header.\n *\n * ```html\n * <dw-section title=\"Tool calls\" [count]=\"calls.length\" [(expanded)]=\"open['calls']\">\n * <dw-copy-button dwSectionActions [text]=\"json\" />\n * …body…\n * </dw-section>\n * <dw-section title=\"Advanced\" pill=\"Advanced\" [expanded]=\"false\" [lazy]=\"true\">…</dw-section>\n * <dw-section title=\"Authentication\" [collapsible]=\"false\" variant=\"plain\">…</dw-section>\n * <dw-section title=\"Purpose\" icon=\"pi pi-info-circle\" iconTint=\"orange\" [collapsible]=\"false\">…</dw-section>\n * <dw-section title=\"About tool\" [step]=\"1\" variant=\"plain\" [collapsible]=\"false\">…</dw-section>\n * <dw-section title=\"Active\" subtitle=\"…\">\n * <dw-badge dwSectionTitleExtra [value]=\"n\" /> <!-- beside the title; dwSectionHeaderExtra ends the row -->\n * </dw-section>\n * ```\n */\n@Component({\n selector: 'dw-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // `title` is an input here; a static title=\"…\" would also stay on the host (native browser tooltip).\n '[attr.title]': 'null',\n '[class]': 'hostClasses()',\n '[attr.data-testid]': 'testId()',\n },\n template: `\n <div class=\"dw-section__head\">\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"dw-section__header\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"bodyId\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <ng-container *ngTemplateOutlet=\"headerContent\" />\n </button>\n } @else {\n <div class=\"dw-section__header\">\n <ng-container *ngTemplateOutlet=\"headerContent\" />\n </div>\n }\n <div class=\"dw-section__actions\"><ng-content select=\"[dwSectionActions]\" /></div>\n </div>\n\n <ng-template #headerContent>\n @if (collapsible()) {\n <i class=\"pi pi-chevron-down dw-section__chevron\" aria-hidden=\"true\"></i>\n }\n @if (step() !== null) {\n <span class=\"dw-section__step\" aria-hidden=\"true\">{{ step() }}</span>\n }\n @if (icon() && iconTint()) {\n <dw-entity-icon class=\"dw-section__icon dw-section__icon--tinted\" kind=\"icon\" [type]=\"icon()\" size=\"sm\"\n [framed]=\"true\" [tint]=\"iconTint()!\" />\n } @else if (icon()) {\n <i [class]=\"icon()\" class=\"dw-section__icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"dw-section__titles\">\n <!-- The count sits right after the title, not after a (longer) subtitle. -->\n <span class=\"dw-section__title-row\">\n <span class=\"dw-section__title\">{{ title() }}</span>\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-count-pill\">{{ count() }}</span>\n }\n <ng-content select=\"[dwSectionTitleExtra]\" />\n </span>\n @if (subtitle()) {\n <span class=\"dw-section__subtitle\">{{ subtitle() }}</span>\n }\n </span>\n @if (pill()) {\n <span class=\"dw-badge dw-badge--neutral dw-badge--label\">{{ pill() }}</span>\n }\n <ng-content select=\"[dwSectionHeaderExtra]\" />\n </ng-template>\n\n @if (!lazy() || hasOpened()) {\n <div class=\"dw-section__body\" [id]=\"bodyId\" [hidden]=\"collapsible() && !expanded()\" role=\"region\">\n <ng-content />\n </div>\n }\n `,\n imports: [NgTemplateOutlet, DwEntityIconComponent],\n})\nexport class DwSectionComponent {\n readonly title = input.required<string>();\n readonly subtitle = input<string>('');\n readonly icon = input<string>('');\n /** Frames the icon in a tinted tile (same palette as dw-entity-icon). */\n readonly iconTint = input<DwEntityTint | null>(null);\n /** Numbered step badge before the title (multi-step forms); the body aligns under the title. */\n readonly step = input<number | null>(null);\n readonly count = input<number | string | null>(null);\n readonly pill = input<string>('');\n readonly expanded = model<boolean>(true);\n readonly collapsible = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n /** Render the body only after it is first opened. */\n readonly lazy = input<boolean>(false);\n readonly variant = input<'boxed' | 'plain' | 'caps'>('boxed');\n readonly testId = input<string | null>(null);\n\n readonly opened = output<void>();\n\n readonly bodyId = `dw-section-body-${++nextSectionId}`;\n private readonly openedOnce = signal(false);\n\n readonly hasOpened = computed(() => this.openedOnce() || this.expanded() || !this.collapsible());\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-section', `dw-section--${this.variant()}`];\n if (this.expanded() || !this.collapsible()) cls.push('is-open');\n if (this.disabled()) cls.push('is-disabled');\n if (this.step() !== null) cls.push('dw-section--stepped');\n return cls.join(' ');\n });\n\n toggle(): void {\n if (this.disabled()) {\n return;\n }\n const next = !this.expanded();\n this.expanded.set(next);\n if (next) {\n this.openedOnce.set(true);\n this.opened.emit();\n }\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n TemplateRef,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport type DwTabValue = string | number;\n\nexport interface DwTabOption<V extends DwTabValue = DwTabValue> {\n value: V;\n label: string;\n icon?: string;\n count?: number | string | null;\n /** Colour of the count: neutral (default) or `danger` for things that need attention. */\n countTone?: 'neutral' | 'danger';\n disabled?: boolean;\n tooltip?: string;\n hidden?: boolean;\n testId?: string;\n}\n\n/**\n * Lazy panel content for a tab value.\n * `<ng-template dwTabPanel=\"spec\">…</ng-template>`\n */\n@Directive({ selector: 'ng-template[dwTabPanel]', standalone: true })\nexport class DwTabPanelDirective {\n readonly value = input.required<DwTabValue>({ alias: 'dwTabPanel' });\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\nlet nextTabsId = 0;\n\n/**\n * Tabs / segmented control / pill toggle. Works with `[(value)]`, ngModel or\n * a FormControl. Projected `dwTabPanel` templates render (lazily) under the bar.\n *\n * ```html\n * <dw-tabs [options]=\"[{value:'spec',label:'Spec'},{value:'json',label:'JSON'}]\" [(value)]=\"view\" variant=\"segmented\" />\n *\n * <dw-tabs [options]=\"tabs\" [(value)]=\"active\">\n * <ng-template dwTabPanel=\"overview\">…</ng-template>\n * <ng-template dwTabPanel=\"runs\">…</ng-template>\n * </dw-tabs>\n * ```\n */\n@Component({\n selector: 'dw-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DwTabsComponent), multi: true }],\n host: { '[class]': 'hostClasses()' },\n template: `\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- tablist: arrow keys move focus between its tab buttons -->\n <div\n class=\"dw-tabs__list\"\n [class]=\"listClass()\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-orientation]=\"variant() === 'vertical' ? 'vertical' : 'horizontal'\"\n (keydown)=\"onKeydown($event)\"\n >\n @for (opt of visibleOptions(); track opt.value) {\n <button\n #tab\n type=\"button\"\n role=\"tab\"\n [class]=\"itemClass()\"\n [class.is-active]=\"opt.value === value()\"\n [id]=\"tabId(opt.value)\"\n [attr.aria-selected]=\"opt.value === value()\"\n [attr.aria-controls]=\"hasPanels() ? panelId(opt.value) : null\"\n [attr.tabindex]=\"opt.value === focusValue() ? 0 : -1\"\n [attr.data-testid]=\"opt.testId\"\n [disabled]=\"opt.disabled || isDisabled()\"\n [pTooltip]=\"opt.tooltip\"\n [tooltipDisabled]=\"!opt.tooltip\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n (click)=\"select(opt)\"\n >\n @if (opt.icon) {\n <i [class]=\"opt.icon\" aria-hidden=\"true\"></i>\n }\n <span>{{ opt.label }}</span>\n @if (opt.count !== null && opt.count !== undefined) {\n <span class=\"dw-tabs__count\" [class.dw-tabs__count--danger]=\"opt.countTone === 'danger'\">{{ opt.count }}</span>\n }\n </button>\n }\n </div>\n @for (panel of panels(); track panel.value()) {\n @if (panel.value() === value()) {\n <div class=\"dw-tabs__panel\" role=\"tabpanel\" [id]=\"panelId(panel.value())\" [attr.aria-labelledby]=\"tabId(panel.value())\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n `,\n})\nexport class DwTabsComponent implements ControlValueAccessor {\n readonly options = input<readonly DwTabOption[]>([]);\n readonly value = model<DwTabValue | null>(null);\n readonly variant = input<'underline' | 'segmented' | 'pill' | 'vertical'>('underline');\n readonly size = input<'sm' | 'md'>('md');\n readonly fullWidth = input<boolean>(false);\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input<boolean>(false);\n\n private readonly uid = ++nextTabsId;\n private readonly cvaDisabled = signal(false);\n private readonly tabs = viewChildren<ElementRef<HTMLButtonElement>>('tab');\n readonly panels = contentChildren(DwTabPanelDirective);\n\n private onChange: (value: DwTabValue | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly visibleOptions = computed(() => this.options().filter((o) => !o.hidden));\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n readonly hasPanels = computed(() => this.panels().length > 0);\n /** Tab that receives focus via Tab key: the active one, else the first enabled. */\n readonly focusValue = computed(() => {\n const opts = this.visibleOptions();\n const active = opts.find((o) => o.value === this.value() && !o.disabled);\n return (active ?? opts.find((o) => !o.disabled))?.value ?? null;\n });\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-tabs-host', `dw-tabs-host--${this.variant()}`];\n if (this.fullWidth()) cls.push('dw-tabs-host--full');\n return cls.join(' ');\n });\n\n readonly listClass = computed(() => {\n switch (this.variant()) {\n case 'segmented':\n return `dw-segmented${this.size() === 'sm' ? ' dw-segmented--sm' : ''}`;\n case 'pill':\n return 'dw-pill-tabs';\n case 'vertical':\n return 'dw-tabs dw-tabs--vertical';\n default:\n return `dw-tabs${this.size() === 'sm' ? ' dw-tabs--sm' : ''}`;\n }\n });\n\n readonly itemClass = computed(() => {\n switch (this.variant()) {\n case 'segmented':\n return 'dw-segmented__item';\n case 'pill':\n return 'dw-pill-tabs__item';\n default:\n return 'dw-tab';\n }\n });\n\n tabId(value: DwTabValue): string {\n return `dw-tabs-${this.uid}-tab-${value}`;\n }\n\n panelId(value: DwTabValue): string {\n return `dw-tabs-${this.uid}-panel-${value}`;\n }\n\n select(opt: DwTabOption): void {\n if (opt.disabled || this.isDisabled() || opt.value === this.value()) {\n return;\n }\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.onTouched();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const keys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n if (!keys.includes(event.key)) {\n return;\n }\n const enabled = this.visibleOptions().filter((o) => !o.disabled);\n if (!enabled.length) {\n return;\n }\n event.preventDefault();\n const current = enabled.findIndex((o) => o.value === this.value());\n let next = current < 0 ? 0 : current;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = enabled.length - 1;\n else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') next = (next - 1 + enabled.length) % enabled.length;\n else next = (next + 1) % enabled.length;\n const target = enabled[next];\n this.select(target);\n const index = this.visibleOptions().indexOf(target);\n queueMicrotask(() => this.tabs()[index]?.nativeElement.focus());\n }\n\n writeValue(value: DwTabValue | null): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: (value: DwTabValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, inject } from '@angular/core';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\n\nexport interface DwRailTab<V extends string = string> {\n value: V;\n label: string;\n /** `dwi-<name>` for an app icon, or a PrimeIcons class. */\n icon: string;\n /** Hover text; defaults to the label. */\n title?: string;\n hidden?: boolean;\n testId?: string;\n}\n\n/**\n * Vertical icon-over-label tab strip at the edge of a panel (agent editor\n * right rail, import references panel). `value` is the open tab, or null when\n * the panel is collapsed and no tab is active. A trailing control (collapse\n * toggle) goes in `[dwRailTabsEnd]`.\n *\n * ```html\n * <dw-rail-tabs [options]=\"tabs\" [value]=\"open ? tab : null\" (select)=\"openTab($event.value)\">\n * <button dwRailTabsEnd class=\"dw-rail-tabs__btn\" …>…</button>\n * </dw-rail-tabs>\n * ```\n */\n@Component({\n selector: 'dw-rail-tabs',\n standalone: true,\n imports: [DwIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-rail-tabs' },\n template: `\n <nav class=\"dw-rail-tabs__nav\" [attr.aria-label]=\"ariaLabel()\">\n @for (tab of visible(); track tab.value) {\n <button\n type=\"button\"\n class=\"dw-rail-tabs__btn\"\n [class.is-active]=\"tab.value === value()\"\n [attr.aria-pressed]=\"tab.value === value()\"\n [attr.title]=\"tab.title || tab.label\"\n [attr.data-testid]=\"tab.testId ?? null\"\n (click)=\"select.emit({ value: tab.value, event: $event })\"\n >\n @if (iconName(tab.icon); as name) {\n <dw-icon class=\"dw-rail-tabs__icon\" [name]=\"name\" size=\"20px\" />\n } @else {\n <i class=\"dw-rail-tabs__icon\" [class]=\"tab.icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"dw-rail-tabs__label\">{{ tab.label }}</span>\n </button>\n }\n <span class=\"dw-rail-tabs__spacer\"></span>\n <ng-content select=\"[dwRailTabsEnd]\" />\n </nav>\n `,\n})\nexport class DwRailTabsComponent<V extends string = string> {\n private readonly icons = inject(DwIconRegistry);\n\n readonly options = input<readonly DwRailTab<V>[]>([]);\n readonly value = input<V | null>(null);\n readonly ariaLabel = input<string>('Panel');\n\n readonly select = output<{ value: V; event: MouseEvent }>();\n\n readonly visible = computed(() => this.options().filter((t) => !t.hidden));\n\n /** dw-icon name for a `dwi-<name>` glyph or a registered icon, else null (a CSS class). */\n iconName(icon: string): string | null {\n return this.icons.resolve(icon);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { RouterLink, UrlTree } from '@angular/router';\nimport { isImageIcon } from '../internal/image-icon.util';\n\nexport interface DwBreadcrumb {\n label: string;\n icon?: string;\n /** A UrlTree carries its own query string (e.g. a previous URL parsed with `router.parseUrl`). */\n routerLink?: string | readonly unknown[] | UrlTree;\n queryParams?: Record<string, unknown>;\n href?: string;\n /** Click handler when neither routerLink nor href is set. */\n action?: () => void;\n}\n\n/**\n * The breadcrumb trail: earlier crumbs are links (router link, href, or a click handler), the\n * last is the current page. A crumb with no label yet (e.g. a name still loading) is left out,\n * so the trail never shows two separators in a row.\n *\n * ```html\n * <dw-breadcrumb [items]=\"[{ label: 'Agents', routerLink: '/agents' }, { label: agent.name }]\" />\n * ```\n */\n@Component({\n selector: 'dw-breadcrumb',\n standalone: true,\n imports: [RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-breadcrumb-host' },\n template: `\n @if (visibleItems().length) {\n <nav class=\"dw-breadcrumb\" [attr.aria-label]=\"ariaLabel()\">\n @for (crumb of visibleItems(); track $index; let last = $last) {\n @if (last) {\n <span class=\"dw-breadcrumb__current\" aria-current=\"page\">\n @if (crumb.icon && showIcons()) {\n @if (isImage(crumb.icon)) {\n <img class=\"dw-breadcrumb__img\" [src]=\"crumb.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"crumb.icon\" aria-hidden=\"true\"></i>\n }\n }\n {{ crumb.label }}\n </span>\n } @else {\n @if (crumb.routerLink) {\n <a class=\"dw-breadcrumb__link\" [routerLink]=\"crumb.routerLink\"\n [queryParams]=\"isUrlTree(crumb.routerLink) ? null : (crumb.queryParams ?? null)\">{{ crumb.label }}</a>\n } @else if (crumb.href) {\n <a class=\"dw-breadcrumb__link\" [href]=\"crumb.href\">{{ crumb.label }}</a>\n } @else if (crumb.action || clickable()) {\n <button type=\"button\" class=\"dw-breadcrumb__link dw-link\" (click)=\"onCrumbClick(crumb)\">{{ crumb.label }}</button>\n } @else {\n <span class=\"dw-breadcrumb__text\">{{ crumb.label }}</span>\n }\n <i class=\"pi pi-angle-right dw-breadcrumb__sep\" aria-hidden=\"true\"></i>\n }\n }\n </nav>\n }\n `,\n})\nexport class DwBreadcrumbComponent {\n readonly items = input<readonly DwBreadcrumb[]>([]);\n /** Render crumb icons (set false when callers pass icons meant for other surfaces). */\n readonly showIcons = input<boolean>(true);\n readonly ariaLabel = input<string>('Breadcrumb');\n /**\n * Render every earlier crumb as clickable, for hosts that handle `crumbClick` themselves. Off,\n * a crumb with no routerLink, href or action is plain text — not a link that goes nowhere.\n */\n readonly clickable = input<boolean>(false);\n\n /** A click on a crumb that has no routerLink / href (after its `action` ran). */\n readonly crumbClick = output<DwBreadcrumb>();\n\n readonly visibleItems = computed(() => this.items().filter((crumb) => !!crumb.label?.trim()));\n\n isUrlTree(link: unknown): boolean {\n return link instanceof UrlTree;\n }\n\n isImage(icon: string): boolean {\n return isImageIcon(icon);\n }\n\n onCrumbClick(crumb: DwBreadcrumb): void {\n crumb.action?.();\n this.crumbClick.emit(crumb);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { DwBreadcrumb, DwBreadcrumbComponent } from '../breadcrumb/dw-breadcrumb.component';\n\n\n/**\n * Page / panel header: breadcrumbs, back, icon, title (+ inline rename),\n * subtitle, count, deprecated badge, meta row and right-side actions.\n *\n * ```html\n * <dw-page-header title=\"Projects\" [count]=\"total\">\n * <dw-button dwPageHeaderActions label=\"Create\" icon=\"pi pi-plus\" (clicked)=\"create()\" />\n * </dw-page-header>\n *\n * <dw-page-header [breadcrumbs]=\"[{label:'Settings', action: back}, {label: item.name}]\"\n * icon=\"pi pi-cog\" variant=\"panel\" [showClose]=\"true\" (close)=\"close()\" />\n *\n * <dw-page-header variant=\"list\" [flush]=\"true\" title=\"Analytics\" /> <!-- on the content edge -->\n *\n * <dw-page-header [title]=\"agent.name\" [editableTitle]=\"true\" (titleChange)=\"rename($event)\"\n * [showBack]=\"true\" (back)=\"goBack()\">\n * <dw-id-block dwPageHeaderMeta [value]=\"agent.id\" />\n * </dw-page-header>\n * ```\n */\n@Component({\n selector: 'dw-page-header',\n standalone: true,\n imports: [DwBreadcrumbComponent, SkeletonModule, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // A static title=\"…\" would also stay on the host as an HTML attribute (native browser tooltip).\n host: { '[class]': 'hostClasses()', '[attr.title]': 'null' },\n template: `\n @if (showBack()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" [attr.aria-label]=\"backLabel()\" [pTooltip]=\"backLabel()\"\n [showDelay]=\"300\" appendTo=\"body\" [attr.data-testid]=\"backTestId()\" (click)=\"back.emit()\">\n <i class=\"pi pi-arrow-left\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--framed dw-page-header__icon\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-page-header__titles\">\n <dw-breadcrumb [items]=\"breadcrumbs()\" [showIcons]=\"crumbIcons()\" (crumbClick)=\"breadcrumbClick.emit($event)\" />\n @if (loading()) {\n <p-skeleton width=\"220px\" height=\"20px\" />\n } @else if (title()) {\n <div class=\"dw-page-header__title-row\">\n @if (editing()) {\n <input\n #titleInput\n class=\"dw-input dw-page-header__title-input\"\n [value]=\"title()\"\n [attr.aria-label]=\"'Rename ' + title()\"\n (keydown.enter)=\"commit(titleInput.value)\"\n (keydown.escape)=\"cancelEdit()\"\n (blur)=\"commit(titleInput.value)\"\n />\n @if (editError()) {\n <small class=\"dw-field__error\" role=\"alert\">{{ editError() }}</small>\n }\n } @else {\n <h1 class=\"dw-page-header__title\" [class.dw-page-title]=\"variant() === 'page'\" [class.dw-title]=\"variant() !== 'page'\">\n {{ title() }}\n </h1>\n @if (editableTitle()) {\n <button type=\"button\" class=\"dw-icon-btn\" [attr.aria-label]=\"'Rename ' + title()\" (click)=\"startEdit()\">\n <i class=\"pi pi-pencil\" aria-hidden=\"true\"></i>\n </button>\n }\n }\n @if (count() !== null && count() !== undefined) {\n <span class=\"dw-count-pill\">{{ count() }}</span>\n }\n @if (deprecated()) {\n <span class=\"dw-badge dw-badge--muted dw-badge--label\" [pTooltip]=\"deprecatedTooltip()\" [tooltipDisabled]=\"!deprecatedTooltip()\" appendTo=\"body\">Deprecated</span>\n }\n <ng-content select=\"[dwPageHeaderTitleSuffix]\" />\n </div>\n }\n @if (error()) {\n <p class=\"dw-field__error\">{{ error() }}</p>\n } @else if (subtitle()) {\n <p class=\"dw-meta dw-page-header__subtitle\">{{ subtitle() }}</p>\n }\n <div class=\"dw-page-header__meta\"><ng-content select=\"[dwPageHeaderMeta]\" /></div>\n </div>\n <div class=\"dw-page-header__actions\">\n <ng-content select=\"[dwPageHeaderActions]\" />\n <ng-content />\n @if (showClose()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" aria-label=\"Close\" (click)=\"close.emit()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n `,\n})\nexport class DwPageHeaderComponent {\n readonly title = input<string>('');\n readonly subtitle = input<string>('');\n readonly count = input<number | string | null>(null);\n readonly breadcrumbs = input<readonly DwBreadcrumb[]>([]);\n /** Render breadcrumb icons (set false when callers pass icons meant for other surfaces). */\n readonly crumbIcons = input<boolean>(true);\n readonly icon = input<string>('');\n readonly iconTint = input<'neutral' | 'accent' | 'workflow' | 'reasoning'>('accent');\n readonly showBack = input<boolean>(false);\n readonly backLabel = input<string>('Back');\n /** `data-testid` for the back button. */\n readonly backTestId = input<string | null>(null);\n readonly showClose = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly error = input<string>('');\n readonly editableTitle = input<boolean>(false);\n readonly deprecated = input<boolean>(false);\n readonly deprecatedTooltip = input<string>('');\n /** `page` = 56px bordered bar with 20px title; `list` = borderless; `panel` = drawer/fullscreen panel. */\n readonly variant = input<'page' | 'list' | 'panel'>('page');\n /**\n * No padding of its own: the header sits on its container's content edge, in line with the\n * blocks below it. For a page whose container already supplies the gutter (e.g. a report body).\n */\n readonly flush = input<boolean>(false);\n\n readonly back = output<void>();\n readonly close = output<void>();\n readonly titleChange = output<string>();\n readonly breadcrumbClick = output<DwBreadcrumb>();\n\n readonly editing = signal(false);\n readonly editError = signal('');\n private readonly titleInput = viewChild<ElementRef<HTMLInputElement>>('titleInput');\n\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n readonly hostClasses = computed(\n () => `dw-page-header dw-page-header--${this.variant()}${this.flush() ? ' dw-page-header--flush' : ''}`,\n );\n\n startEdit(): void {\n this.editError.set('');\n this.editing.set(true);\n queueMicrotask(() => {\n const el = this.titleInput()?.nativeElement;\n el?.focus();\n el?.select();\n });\n }\n\n cancelEdit(): void {\n this.editError.set('');\n this.editing.set(false);\n }\n\n commit(raw: string): void {\n if (!this.editing()) {\n return;\n }\n const value = raw.trim();\n if (!value) {\n this.editError.set('Name is required');\n return;\n }\n this.editing.set(false);\n this.editError.set('');\n if (value !== this.title()) {\n this.titleChange.emit(value);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * List-screen toolbar: search + inline filters on the left, actions on the\n * right, optional second row for facet filters / chips.\n *\n * ```html\n * <dw-action-bar>\n * <dw-search-input dwActionBarStart placeholder=\"Search agents…\" [(value)]=\"q\" />\n * <app-show-deprecated-toggle dwActionBarStart [(checked)]=\"showDeprecated\" />\n * <dw-button dwActionBarEnd label=\"Import\" icon=\"pi pi-upload\" variant=\"secondary\" appearance=\"outlined\" />\n * <dw-button dwActionBarEnd label=\"Create\" icon=\"pi pi-plus\" />\n * <div dwActionBarFilters>…facets / chips…</div>\n * </dw-action-bar>\n * ```\n * Put `<span dwActionBarEnd class=\"dw-action-bar__sep\"></span>` between action groups.\n */\n@Component({\n selector: 'dw-action-bar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()', role: 'toolbar', '[attr.aria-label]': 'ariaLabel()' },\n template: `\n <div class=\"dw-action-bar__row\">\n <div class=\"dw-action-bar__start\"><ng-content select=\"[dwActionBarStart]\" /></div>\n <div class=\"dw-action-bar__end\"><ng-content select=\"[dwActionBarEnd]\" /></div>\n </div>\n <div class=\"dw-action-bar__filters\"><ng-content select=\"[dwActionBarFilters]\" /></div>\n `,\n})\nexport class DwActionBarComponent {\n readonly dense = input<boolean>(false);\n readonly bordered = input<boolean>(false);\n readonly ariaLabel = input<string>('Toolbar');\n\n readonly hostClasses = computed(() => {\n const cls = ['dw-action-bar'];\n if (this.dense()) cls.push('dw-action-bar--dense');\n if (this.bordered()) cls.push('dw-action-bar--bordered');\n return cls.join(' ');\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n TemplateRef,\n afterNextRender,\n computed,\n contentChild,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { RouterLink } from '@angular/router';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { DwIconComponent } from '../icon/dw-icon.component';\nimport { DwIconRegistry } from '../icon/dw-icon-registry';\nimport { DwIconButtonComponent } from '../icon-button/dw-icon-button.component';\n\nexport interface DwNavItem {\n id: string;\n label: string;\n /** Icon class or image path. */\n icon?: string;\n /** Image used while active (image icons only). */\n activeIcon?: string;\n count?: number | string | null;\n badge?: string;\n /** Validation marker: `true` shows an error icon, a number also shows the error count. */\n error?: boolean | number | null;\n /** Softer validation marker: an amber warning triangle (ignored when `error` is set). */\n warning?: boolean | null;\n /** Shows a small spinner at the trailing edge while the item's data loads. */\n loading?: boolean;\n /** Right-aligned status with a dot, e.g. a setting's On / Off. */\n trail?: { label: string; tone: 'success' | 'neutral' } | null;\n /** Secondary status line under the label, e.g. a wizard section's Enabled / Disabled state. */\n status?: { label: string; tone: 'success' | 'neutral' } | null;\n /**\n * Leading status dot before the icon/label, e.g. a conversation's state: `danger` needs\n * attention, `info` + `live` is running now, `neutral` + `hollow` has nothing to do.\n * `label` is read out to screen readers.\n */\n dot?: DwNavItemDot | null;\n /** Plain secondary line under the label (no status dot), e.g. \"Workflow · Disabled\". */\n meta?: string | null;\n /** Colours a class icon by entity type (scenario workflow / reasoning) or the accent. */\n iconTint?: 'accent' | 'workflow' | 'reasoning' | null;\n /** Whole item rendered muted (e.g. a disabled-but-selectable entry). */\n muted?: boolean;\n /** Hover text while expanded (minimized rails always show the label). */\n tooltip?: string;\n routerLink?: string | readonly unknown[];\n queryParams?: Record<string, unknown>;\n disabled?: boolean;\n hidden?: boolean;\n testId?: string;\n children?: DwNavItem[];\n /**\n * Parent item that only expands/collapses its children (no navigation). It needs no children\n * yet: a lazily loaded tree marks a node collapsible, loads its children on `itemToggle` (with\n * `loading` set meanwhile) and passes them in once they are there.\n */\n collapsible?: boolean;\n /** Initial collapsed state for collapsible parents. */\n collapsed?: boolean;\n /** Arbitrary payload for the consumer (e.g. the domain object behind the item). */\n data?: unknown;\n}\n\nexport interface DwNavItemDot {\n tone: 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n /** `solid` (default), `hollow` ring, or `live` (solid with a pulsing ring). */\n variant?: 'solid' | 'hollow' | 'live';\n label?: string;\n}\n\n/**\n * A top-level item moved within its group (`reorderable`): positions among the group's visible\n * items, and those items in their new order. The list never reorders itself — the consumer applies\n * the order to `groups`.\n */\nexport interface DwNavReorder {\n group: DwNavGroup;\n groupIndex: number;\n item: DwNavItem;\n previousIndex: number;\n currentIndex: number;\n items: DwNavItem[];\n}\n\nexport interface DwNavGroup {\n id?: string;\n label?: string;\n icon?: string;\n collapsible?: boolean;\n collapsed?: boolean;\n items: DwNavItem[];\n}\n\n/**\n * Extra content under an item's label, per item — e.g. a dependency tree's tag chips:\n * `<ng-template dwNavItemExtra let-item>…{{ item.data }}…</ng-template>`. Return nothing for an\n * item that has none.\n */\n@Directive({ selector: 'ng-template[dwNavItemExtra]', standalone: true })\nexport class DwNavItemExtraDirective {\n readonly template = inject<TemplateRef<{ $implicit: DwNavItem }>>(TemplateRef);\n}\n\n/**\n * Actions at the end of each item's row — e.g. a reference tree's edit / uses / used-by buttons:\n * `<ng-template dwNavItemActions let-item>…</ng-template>`. They sit beside the item's button,\n * never inside it (no nested buttons), and a collapsible item's accordion chevron moves after\n * them, to the very end of the row. Return nothing for an item that has none.\n */\n@Directive({ selector: 'ng-template[dwNavItemActions]', standalone: true })\nexport class DwNavItemActionsDirective {\n readonly template = inject<TemplateRef<{ $implicit: DwNavItem }>>(TemplateRef);\n}\n\n/**\n * Sidebar navigation list (agents/tools rail, configuration menu, reports).\n *\n * ```html\n * <dw-nav-list [groups]=\"groups\" [activeId]=\"active\" (itemSelect)=\"go($event)\" ariaLabel=\"Agents\">\n * <div dwNavListFooter>…tags tree…</div>\n * <dw-box dwNavListBottom>…created / modified…</dw-box> <!-- pinned to the bottom, beside minimize -->\n * </dw-nav-list>\n * ```\n * Items with `routerLink` render as links (Cmd/Ctrl-click opens a new tab);\n * otherwise `itemSelect` fires. `[(minimized)]` collapses to an icon rail.\n * `[reorderable]=\"true\"` lets the user drag a group's top-level items (or move the focused one\n * with Alt+↑ / Alt+↓); each move emits `reorder` and the consumer re-orders `groups`.\n */\n@Component({\n selector: 'dw-nav-list',\n standalone: true,\n imports: [CdkDrag, CdkDropList, NgTemplateOutlet, RouterLink, TooltipModule, DwIconComponent, DwIconButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'minimized() ? null : width()',\n },\n template: `\n <!-- The rail's content. With a minimize button it scrolls on its own, above the button's\n footer row; otherwise this wrapper is display: contents and changes nothing. -->\n <div class=\"dw-nav-list__scroll\">\n <ng-content select=\"[dwNavListHeader]\" />\n <nav class=\"dw-nav-list__nav\" [attr.aria-label]=\"ariaLabel()\">\n @for (group of groups(); track group.id ?? group.label ?? $index; let gi = $index) {\n @if (gi > 0 && dividers()) {\n <hr class=\"dw-divider\" />\n }\n @if (group.label && !minimized()) {\n @if (group.collapsible) {\n <button\n type=\"button\"\n class=\"dw-rail__group dw-nav-list__group-toggle\"\n [attr.aria-expanded]=\"!isCollapsed(group, gi)\"\n [attr.data-testid]=\"group.id ? 'nav-group-' + group.id : null\"\n (click)=\"toggleGroup(group, gi)\"\n >\n @if (group.icon) {\n @if (isImage(group.icon)) {\n <img class=\"dw-nav-item__img\" [src]=\"group.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else {\n <i [class]=\"group.icon\" aria-hidden=\"true\"></i>\n }\n }\n <span>{{ group.label }}</span>\n <i class=\"pi pi-chevron-down dw-nav-list__chevron\" [class.is-collapsed]=\"isCollapsed(group, gi)\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <div class=\"dw-rail__group\">{{ group.label }}</div>\n }\n }\n @if (!isCollapsed(group, gi)) {\n @if (reorderable() && !minimized()) {\n <!-- Reorderable: the group's top-level items drag vertically within it -->\n <ul class=\"dw-nav-list__items dw-nav-list__items--reorderable\" role=\"list\"\n cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"onDrop(group, gi, $event)\">\n @for (item of visible(group.items); track item.id) {\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- keyboard reorder for the focusable item inside -->\n <li cdkDrag cdkDragLockAxis=\"y\" cdkDragPreviewClass=\"dw-nav-list__drag-preview\"\n [cdkDragDisabled]=\"!!item.disabled\" [attr.data-nav-id]=\"item.id\"\n (keydown)=\"onReorderKey(group, gi, item, $event)\">\n <ng-container *ngTemplateOutlet=\"itemInner; context: { $implicit: item, depth: 0, lead: groupLead(group) }\" />\n </li>\n }\n </ul>\n } @else {\n <ul class=\"dw-nav-list__items\" role=\"list\">\n @for (item of visible(group.items); track item.id) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: item, depth: 0, lead: groupLead(group) }\" />\n }\n </ul>\n }\n }\n }\n </nav>\n <ng-content select=\"[dwNavListFooter]\" />\n </div>\n <!-- Always at the bottom, the full width of the rail: dwNavListBottom content (e.g. a\n created / modified card), then the minimize button at the row's end. -->\n <div class=\"dw-nav-list__bottom-row\" [class.dw-nav-list__minimize-row]=\"minimizable()\">\n <ng-content select=\"[dwNavListBottom]\" />\n @if (minimizable()) {\n <button\n type=\"button\"\n class=\"dw-icon-btn dw-nav-list__minimize\"\n [attr.aria-label]=\"minimized() ? 'Expand sidebar' : 'Collapse sidebar'\"\n [attr.aria-expanded]=\"!minimized()\"\n (click)=\"minimized.set(!minimized())\"\n >\n <!-- The panel icons the right rail uses, mirrored for a left sidebar -->\n <dw-icon [name]=\"minimized() ? 'sidebarExpand' : 'sidebarCollapse'\" size=\"16px\" />\n </button>\n }\n </div>\n\n <ng-template #itemTpl let-item let-depth=\"depth\" let-lead=\"lead\">\n <li>\n <ng-container *ngTemplateOutlet=\"itemInner; context: { $implicit: item, depth: depth, lead: lead }\" />\n </li>\n </ng-template>\n\n <!-- An item's row and its children: the <li>'s content (a reorderable list owns the <li>) -->\n <ng-template #itemInner let-item let-depth=\"depth\" let-lead=\"lead\">\n @if (itemActions(); as actions) {\n <!-- Row with actions: the item's button, its actions beside it, then the accordion -->\n <div class=\"dw-nav-list__row\" [class.is-active]=\"isActive(item)\">\n <ng-container *ngTemplateOutlet=\"itemRow; context: { $implicit: item, depth: depth, lead: lead, chevron: false }\" />\n <span class=\"dw-nav-list__actions\">\n <ng-container *ngTemplateOutlet=\"actions.template; context: { $implicit: item }\" />\n </span>\n @if (item.collapsible) {\n <dw-icon-button class=\"dw-nav-list__toggle\" size=\"xs\" icon=\"pi pi-chevron-down\"\n [class.is-collapsed]=\"isItemCollapsed(item)\" [expanded]=\"!isItemCollapsed(item)\"\n [ariaLabel]=\"(isItemCollapsed(item) ? 'Expand ' : 'Collapse ') + item.label\"\n (clicked)=\"toggleItem(item)\" />\n } @else {\n <!-- The accordion's room, so every row's actions line up in one column -->\n <span class=\"dw-nav-list__toggle dw-nav-list__toggle--spacer\" aria-hidden=\"true\"></span>\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"itemRow; context: { $implicit: item, depth: depth, lead: lead, chevron: true }\" />\n }\n @if (item.children?.length && !minimized() && !(item.collapsible && isItemCollapsed(item))) {\n <ul class=\"dw-nav-list__items\" role=\"list\">\n @for (child of visible(item.children); track child.id) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: child, depth: depth + 1, lead: lead }\" />\n }\n </ul>\n }\n </ng-template>\n\n <ng-template #itemRow let-item let-depth=\"depth\" let-lead=\"lead\" let-chevron=\"chevron\">\n @if (item.collapsible) {\n <button\n type=\"button\"\n class=\"dw-nav-item dw-nav-item--parent\"\n [class.is-muted]=\"!!item.muted\"\n [style.padding-left.px]=\"indent(depth, lead)\"\n [attr.aria-expanded]=\"!isItemCollapsed(item)\"\n [attr.data-testid]=\"item.testId\"\n [pTooltip]=\"item.tooltip\"\n [tooltipDisabled]=\"!item.tooltip\"\n [tooltipPosition]=\"tooltipPosition()\"\n appendTo=\"body\"\n (click)=\"toggleItem(item)\"\n >\n <ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\" />\n @if (chevron) {\n <i class=\"pi pi-chevron-down dw-nav-list__chevron\" [class.is-collapsed]=\"isItemCollapsed(item)\" aria-hidden=\"true\"></i>\n }\n </button>\n } @else if (item.routerLink && !item.disabled) {\n <a\n class=\"dw-nav-item\"\n [class.is-active]=\"isActive(item)\"\n [style.padding-left.px]=\"indent(depth, lead)\"\n [routerLink]=\"item.routerLink\"\n [queryParams]=\"item.queryParams ?? null\"\n [attr.aria-current]=\"isActive(item) ? 'page' : null\"\n [attr.data-testid]=\"item.testId\"\n [pTooltip]=\"minimized() ? item.label : item.tooltip\"\n [tooltipDisabled]=\"!minimized() && !item.tooltip\"\n [tooltipPosition]=\"tooltipPosition()\"\n appendTo=\"body\"\n (click)=\"onItemClick(item, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"dw-nav-item\"\n [class.is-active]=\"isActive(item)\"\n [class.is-muted]=\"!!item.muted\"\n [style.padding-left.px]=\"indent(depth, lead)\"\n [disabled]=\"item.disabled\"\n [attr.aria-current]=\"isActive(item) ? 'page' : null\"\n [attr.data-testid]=\"item.testId\"\n [pTooltip]=\"minimized() ? item.label : item.tooltip\"\n [tooltipDisabled]=\"!minimized() && !item.tooltip\"\n [tooltipPosition]=\"tooltipPosition()\"\n appendTo=\"body\"\n (click)=\"onItemClick(item, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\" />\n </button>\n }\n </ng-template>\n\n <!-- The label, with its error / warning marker right after it (not off by the count) -->\n <ng-template #labelLine let-item>\n <span class=\"dw-nav-item__head\">\n <span class=\"dw-nav-item__label\">{{ item.label }}</span>\n @if (!item.loading) {\n @if (item.error) {\n <span class=\"dw-nav-item__error\" role=\"img\"\n [attr.aria-label]=\"isCount(item.error) ? item.error + ' errors' : 'Has errors'\">\n <i class=\"pi pi-exclamation-circle\" aria-hidden=\"true\"></i>\n @if (isCount(item.error)) {\n <span aria-hidden=\"true\">({{ item.error }})</span>\n }\n </span>\n } @else if (item.warning) {\n <span class=\"dw-nav-item__error dw-nav-item__error--warning\" role=\"img\" aria-label=\"Has warnings\">\n <i class=\"pi pi-exclamation-triangle\" aria-hidden=\"true\"></i>\n </span>\n }\n }\n </span>\n </ng-template>\n\n <ng-template #itemBody let-item>\n @if (item.dot; as dot) {\n <span [class]=\"dotClass(dot)\" [attr.role]=\"dot.label ? 'img' : null\"\n [attr.aria-label]=\"dot.label || null\" [attr.aria-hidden]=\"dot.label ? null : 'true'\"\n [attr.title]=\"dot.label || null\"></span>\n }\n @if (item.icon) {\n @if (isImage(item.icon)) {\n <img class=\"dw-nav-item__img\" [src]=\"isActive(item) && item.activeIcon ? item.activeIcon : item.icon\" alt=\"\" aria-hidden=\"true\" />\n } @else if (svgIcon(item.icon); as glyph) {\n <dw-icon class=\"dw-nav-item__icon\" [name]=\"glyph\" />\n } @else {\n <i [class]=\"item.icon\" class=\"dw-nav-item__icon\"\n [class.dw-nav-item__icon--accent]=\"item.iconTint === 'accent'\"\n [class.dw-nav-item__icon--workflow]=\"item.iconTint === 'workflow'\"\n [class.dw-nav-item__icon--reasoning]=\"item.iconTint === 'reasoning'\" aria-hidden=\"true\"></i>\n }\n }\n @if (!minimized()) {\n @if (item.status || item.meta || itemExtra()) {\n <span class=\"dw-nav-item__text\">\n <ng-container *ngTemplateOutlet=\"labelLine; context: { $implicit: item }\" />\n @if (item.status) {\n <span class=\"dw-nav-item__status\" [class]=\"'dw-nav-item__status--' + item.status.tone\">\n <span class=\"dw-nav-item__status-dot\" aria-hidden=\"true\"></span>{{ item.status.label }}\n </span>\n }\n @if (item.meta) {\n <span class=\"dw-nav-item__meta\">{{ item.meta }}</span>\n }\n @if (itemExtra(); as extra) {\n <ng-container *ngTemplateOutlet=\"extra.template; context: { $implicit: item }\" />\n }\n </span>\n } @else {\n <ng-container *ngTemplateOutlet=\"labelLine; context: { $implicit: item }\" />\n }\n @if (item.loading) {\n <i class=\"pi pi-spin pi-spinner dw-nav-item__loading\" aria-label=\"Loading\"></i>\n }\n @if (item.badge) {\n <span class=\"dw-badge dw-badge--accent dw-badge--label\">{{ item.badge }}</span>\n }\n @if (item.count !== null && item.count !== undefined && !item.loading) {\n <span class=\"dw-nav-item__count\">{{ item.count }}</span>\n }\n @if (item.trail; as trail) {\n <span class=\"dw-nav-item__trail\" [class]=\"'dw-nav-item__trail dw-nav-item__trail--' + trail.tone\">\n <span class=\"dw-nav-item__status-dot\" aria-hidden=\"true\"></span>{{ trail.label }}\n </span>\n }\n }\n </ng-template>\n `,\n})\nexport class DwNavListComponent {\n private readonly icons = inject(DwIconRegistry);\n\n /** Optional per-item content under the label (see DwNavItemExtraDirective). */\n readonly itemExtra = contentChild(DwNavItemExtraDirective);\n /** Optional per-item actions at the end of the row (see DwNavItemActionsDirective). */\n readonly itemActions = contentChild(DwNavItemActionsDirective);\n\n readonly groups = input<readonly DwNavGroup[]>([]);\n readonly activeId = input<string | null>(null);\n /** Several active items at once — e.g. every place a shared tool appears in a tree. */\n readonly activeIds = input<readonly string[] | null>(null);\n readonly width = input<string>('256px');\n readonly dividers = input<boolean>(false);\n readonly minimizable = input<boolean>(false);\n readonly minimized = model<boolean>(false);\n readonly ariaLabel = input<string>('Section navigation');\n /** Nested items hang off guide lines instead of plain indentation (reference trees). */\n readonly treeLines = input<boolean>(false);\n /**\n * The accent left border on the selected item, for a sidebar that wants a stronger marker;\n * otherwise a selection is the plain selected fill.\n */\n readonly marker = input<boolean>(false);\n /** Where item tooltips open: beside a sidebar (right, the default) or above, e.g. in a wide panel. */\n readonly tooltipPosition = input<'right' | 'top' | 'bottom' | 'left'>('right');\n /**\n * Off by default. On, each group's top-level items can be dragged into a new order within the\n * group, or the focused one moved with Alt+↑ / Alt+↓ (not while minimized); `reorder` reports it.\n */\n readonly reorderable = input<boolean>(false);\n\n readonly itemSelect = output<DwNavItem>();\n /** Same as itemSelect, with the click — for Cmd/Ctrl-click \"open in new tab\" handling. */\n readonly itemActivate = output<{ item: DwNavItem; event: MouseEvent }>();\n readonly groupToggle = output<{ group: DwNavGroup; collapsed: boolean }>();\n readonly itemToggle = output<{ item: DwNavItem; collapsed: boolean }>();\n readonly reorder = output<DwNavReorder>();\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n private readonly itemOverrides = signal<Record<string, boolean>>({});\n\n /** Collapse state kept internally (never mutates the input objects). */\n private readonly collapsedOverrides = signal<Record<string, boolean>>({});\n\n readonly hostClasses = computed(\n () =>\n `dw-rail dw-nav-list${this.minimized() ? ' is-minimized' : ''}${this.treeLines() ? ' dw-nav-list--tree' : ''}${this.marker() ? ' dw-nav-list--marker' : ''}${this.minimizable() ? ' dw-nav-list--minimizable' : ''}`,\n );\n\n /** Classes for an item's leading status dot. */\n dotClass(dot: DwNavItemDot): string {\n const variant = dot.variant && dot.variant !== 'solid' ? ` dw-status-dot--${dot.variant}` : '';\n return `dw-status-dot dw-status-dot--${dot.tone}${variant} dw-nav-item__dot`;\n }\n\n /** dw-icon name for a `dwi-<name>` glyph or a registered icon, else null (a CSS class). */\n svgIcon(icon: string | undefined): string | null {\n return this.icons.resolve(icon);\n }\n\n isActive(item: DwNavItem): boolean {\n return item.id === this.activeId() || !!this.activeIds()?.includes(item.id);\n }\n\n /**\n * Indentation per depth; tree mode indents through the nested lists' guide lines instead.\n * `lead` lines a group's items up with its label when the group header has an icon.\n */\n indent(depth: number, lead = 0): number {\n return this.treeLines() ? 10 + lead : 10 + lead + depth * 16;\n }\n\n /** A collapsible group with an icon: its items start where the label does (16px icon + 8px gap). */\n groupLead(group: DwNavGroup): number {\n return group.collapsible && group.icon ? 24 : 0;\n }\n\n onItemClick(item: DwNavItem, event: MouseEvent): void {\n this.itemActivate.emit({ item, event });\n this.itemSelect.emit(item);\n }\n\n isImage(icon: string): boolean {\n return isImageIcon(icon);\n }\n\n isCount(error: boolean | number | null | undefined): error is number {\n return typeof error === 'number';\n }\n\n visible(items: readonly DwNavItem[] | undefined): DwNavItem[] {\n return (items ?? []).filter((i) => !i.hidden);\n }\n\n private groupKey(group: DwNavGroup, index: number): string {\n return group.id ?? group.label ?? String(index);\n }\n\n isCollapsed(group: DwNavGroup, index: number): boolean {\n if (!group.collapsible) {\n return false;\n }\n const override = this.collapsedOverrides()[this.groupKey(group, index)];\n return override ?? !!group.collapsed;\n }\n\n isItemCollapsed(item: DwNavItem): boolean {\n return this.itemOverrides()[item.id] ?? !!item.collapsed;\n }\n\n toggleItem(item: DwNavItem): void {\n const collapsed = !this.isItemCollapsed(item);\n this.itemOverrides.update((map) => ({ ...map, [item.id]: collapsed }));\n this.itemToggle.emit({ item, collapsed });\n }\n\n onDrop(group: DwNavGroup, groupIndex: number, event: CdkDragDrop<unknown>): void {\n this.emitReorder(group, groupIndex, event.previousIndex, event.currentIndex);\n }\n\n /** Alt+↑ / Alt+↓ on a reorderable item moves it one place; focus stays on it. */\n onReorderKey(group: DwNavGroup, groupIndex: number, item: DwNavItem, event: KeyboardEvent): void {\n if (!event.altKey || (event.key !== 'ArrowUp' && event.key !== 'ArrowDown')) return;\n event.preventDefault();\n const from = this.visible(group.items).findIndex((i) => i.id === item.id);\n if (!this.emitReorder(group, groupIndex, from, from + (event.key === 'ArrowUp' ? -1 : 1))) return;\n afterNextRender(\n () => {\n const row = this.host.nativeElement.querySelector(`li[data-nav-id=\"${CSS.escape(item.id)}\"] .dw-nav-item`);\n (row as HTMLElement | null)?.focus();\n },\n { injector: this.injector },\n );\n }\n\n /** Emits the move unless it goes nowhere or out of the group; true when emitted. */\n private emitReorder(group: DwNavGroup, groupIndex: number, from: number, to: number): boolean {\n const items = this.visible(group.items);\n if (from === to || from < 0 || to < 0 || from >= items.length || to >= items.length) return false;\n const next = [...items];\n const [item] = next.splice(from, 1);\n next.splice(to, 0, item);\n this.reorder.emit({ group, groupIndex, item, previousIndex: from, currentIndex: to, items: next });\n return true;\n }\n\n toggleGroup(group: DwNavGroup, index: number): void {\n const collapsed = !this.isCollapsed(group, index);\n this.collapsedOverrides.update((map) => ({ ...map, [this.groupKey(group, index)]: collapsed }));\n this.groupToggle.emit({ group, collapsed });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n computed,\n contentChild,\n input,\n model,\n output,\n} from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { isImageIcon } from '../internal/image-icon.util';\n\n/** Marks projected content as the dialog header (replaces the default title block). */\n@Directive({ selector: '[dwDialogHeader]', standalone: true })\nexport class DwDialogHeaderDirective {}\n\n/** Inline after the title on its row — a version chip, a status badge. */\n@Directive({ selector: '[dwDialogTitleSuffix]', standalone: true })\nexport class DwDialogTitleSuffixDirective {}\n\n/** Marks projected content as the dialog footer (right-aligned action row, 8px between items). */\n@Directive({ selector: '[dwDialogFooter]', standalone: true, host: { class: 'dw-footer-actions' } })\nexport class DwDialogFooterDirective {}\n\n/** `full` covers the viewport (wizards); pair it with `[showHeader]=\"false\"` and a `.dw-wizard` body. */\nexport type DwDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nlet nextDialogId = 0;\n\n/**\n * Modal dialog on top of p-dialog with the design-system sizes and header.\n *\n * ```html\n * <dw-dialog [(visible)]=\"open\" header=\"Configure parameters\" subtitle=\"Applies to new runs\" size=\"lg\" (hide)=\"reset()\">\n * …body…\n * <div dwDialogFooter>\n * <dw-button label=\"Cancel\" variant=\"secondary\" appearance=\"outlined\" (clicked)=\"open = false\" />\n * <dw-button label=\"Save\" [disabled]=\"form.invalid\" (clicked)=\"save()\" />\n * </div>\n * </dw-dialog>\n * ```\n * Import `DW_DIALOG` to get the component and its slot directives.\n */\n@Component({\n selector: 'dw-dialog',\n standalone: true,\n imports: [DialogModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"onVisibleChange($event)\"\n [modal]=\"modal()\"\n [closable]=\"closable()\"\n [closeOnEscape]=\"closeOnEscape()\"\n [focusOnShow]=\"focusOnShow()\"\n [dismissableMask]=\"dismissableMask()\"\n [draggable]=\"draggable()\"\n [resizable]=\"resizable()\"\n [maximizable]=\"maximizable()\"\n [showHeader]=\"showHeader()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [blockScroll]=\"true\"\n [role]=\"role()\"\n [style]=\"dialogStyle()\"\n [contentStyle]=\"contentStyle()\"\n [styleClass]=\"styleClasses()\"\n [closeAriaLabel]=\"'Close'\"\n (onShow)=\"show.emit()\"\n (onHide)=\"hide.emit()\"\n >\n <ng-template #header>\n <div class=\"dw-dialog__header\" [attr.id]=\"titleId\">\n @if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--framed dw-entity-icon--md\" [class]=\"'dw-entity-icon--' + iconTint()\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-dialog__titles\">\n @if (headerText()) {\n <div class=\"dw-dialog__title-row\">\n <span class=\"p-dialog-title\">{{ headerText() }}</span>\n <ng-content select=\"[dwDialogTitleSuffix]\" />\n </div>\n }\n @if (subtitle()) {\n <span class=\"dw-dialog__subtitle\">{{ subtitle() }}</span>\n }\n <ng-content select=\"[dwDialogHeader]\" />\n </div>\n </div>\n </ng-template>\n\n <div class=\"dw-dialog__body\" [attr.data-testid]=\"testId()\">\n <ng-content />\n </div>\n\n @if (footerSlot()) {\n <ng-template #footer>\n <div class=\"dw-dialog__footer\">\n <ng-content select=\"[dwDialogFooter]\" />\n </div>\n </ng-template>\n }\n </p-dialog>\n `,\n})\nexport class DwDialogComponent {\n readonly visible = model<boolean>(false);\n readonly headerText = input<string>('', { alias: 'header' });\n readonly subtitle = input<string>('');\n readonly icon = input<string>('');\n readonly iconTint = input<'neutral' | 'accent' | 'warning' | 'danger'>('accent');\n readonly size = input<DwDialogSize>('md');\n /** Free-form width overrides the size scale (e.g. '70vw'). */\n readonly width = input<string | null>(null);\n readonly maxWidth = input<string>('95vw');\n readonly maxHeight = input<string | null>(null);\n readonly modal = input<boolean>(true);\n readonly closable = input<boolean>(true);\n readonly closeOnEscape = input<boolean>(true);\n /** Move focus into the dialog when it opens. Turn off for form wizards so the first\n * control is not focused and then blurred (which marks it touched and shows its error). */\n readonly focusOnShow = input<boolean>(true);\n readonly dismissableMask = input<boolean>(false);\n readonly draggable = input<boolean>(false);\n readonly resizable = input<boolean>(false);\n readonly maximizable = input<boolean>(false);\n readonly showHeader = input<boolean>(true);\n readonly appendTo = input<string | null>('body');\n readonly baseZIndex = input<number>(0);\n readonly role = input<'dialog' | 'alertdialog'>('dialog');\n readonly noPadding = input<boolean>(false);\n readonly styleClass = input<string>('');\n readonly testId = input<string | null>(null);\n\n readonly show = output<void>();\n readonly hide = output<void>();\n\n readonly footerSlot = contentChild(DwDialogFooterDirective);\n\n readonly titleId = `dw-dialog-title-${++nextDialogId}`;\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n\n readonly dialogStyle = computed(() => {\n const style: Record<string, string> = { maxWidth: this.size() === 'full' ? '100vw' : this.maxWidth() };\n if (this.width()) style['width'] = this.width() as string;\n return style;\n });\n\n readonly contentStyle = computed(() =>\n this.maxHeight() ? { maxHeight: this.maxHeight() as string, overflowY: 'auto' } : null,\n );\n\n readonly styleClasses = computed(() => {\n const cls = ['dw-dialog'];\n if (!this.width()) cls.push(`dw-dialog--${this.size()}`);\n if (this.noPadding()) cls.push('dw-dialog--flush');\n if (this.styleClass()) cls.push(this.styleClass());\n return cls.join(' ');\n });\n\n onVisibleChange(value: boolean): void {\n this.visible.set(value);\n }\n}\n\nexport const DW_DIALOG = [DwDialogComponent, DwDialogHeaderDirective, DwDialogTitleSuffixDirective, DwDialogFooterDirective] as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n} from '@angular/core';\nimport { DwDialogComponent, DwDialogFooterDirective } from '../dialog/dw-dialog.component';\nimport { DwButtonComponent } from '../button/dw-button.component';\nimport { DwSpinnerComponent } from '../loading/dw-spinner.component';\n\nexport type DwConfirmSeverity = 'danger' | 'warning' | 'primary';\n\nexport interface DwConfirmWarning {\n title?: string;\n text?: string;\n}\n\nexport interface DwConfirmSummaryRow {\n label: string;\n value: string | number | null | undefined;\n}\n\nconst SEVERITY_ICONS: Record<DwConfirmSeverity, string> = {\n danger: 'pi pi-trash',\n warning: 'pi pi-exclamation-triangle',\n primary: 'pi pi-question-circle',\n};\n\n/**\n * Confirmation dialog for destructive / irreversible actions. Replaces the\n * copied `.delete-modal-*` markup.\n *\n * ```html\n * <dw-confirm-dialog [(visible)]=\"confirmOpen\" header=\"Delete project\"\n * [message]=\"'Delete “' + project.name + '”? This cannot be undone.'\"\n * acceptLabel=\"Delete\" loadingLabel=\"Deleting…\" [loading]=\"deleting\"\n * [warning]=\"{ title: 'In use', text: '3 reports use this project' }\"\n * (accept)=\"delete()\" />\n * ```\n * Project extra body content (radio options, dependency lists) as children.\n * For imperative use see DwConfirmService.\n */\n@Component({\n selector: 'dw-confirm-dialog',\n standalone: true,\n imports: [DwDialogComponent, DwDialogFooterDirective, DwButtonComponent, DwSpinnerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dw-dialog\n [(visible)]=\"visible\"\n [header]=\"header()\"\n [icon]=\"resolvedIcon()\"\n [iconTint]=\"iconTint()\"\n [size]=\"size()\"\n role=\"alertdialog\"\n [closable]=\"!loading() && closable()\"\n [closeOnEscape]=\"!loading()\"\n [dismissableMask]=\"!loading() && dismissableMask()\"\n styleClass=\"dw-confirm\"\n [testId]=\"testId()\"\n (hide)=\"onHide()\"\n >\n @if (message()) {\n <p class=\"dw-confirm__message\">{{ message() }}</p>\n }\n <ng-content />\n @if (checking()) {\n <dw-spinner size=\"sm\" [label]=\"checkingLabel()\" />\n }\n @if (summary().length) {\n <dl class=\"dw-kv dw-confirm__summary\">\n @for (row of summary(); track row.label) {\n <dt class=\"dw-kv__key\">{{ row.label }}</dt>\n <dd class=\"dw-kv__value\">{{ row.value ?? '—' }}</dd>\n }\n </dl>\n }\n @if (warning(); as w) {\n <div class=\"dw-confirm__warning\" role=\"note\">\n <i class=\"pi pi-exclamation-triangle\" aria-hidden=\"true\"></i>\n <div>\n @if (w.title) {\n <p class=\"dw-confirm__warning-title\">{{ w.title }}</p>\n }\n @if (w.text) {\n <p class=\"dw-confirm__warning-text\">{{ w.text }}</p>\n }\n </div>\n </div>\n }\n <div dwDialogFooter>\n <dw-button\n [label]=\"rejectLabel()\"\n variant=\"secondary\"\n appearance=\"outlined\"\n [disabled]=\"loading()\"\n [testId]=\"rejectTestId()\"\n (clicked)=\"reject()\"\n />\n @if (!hideAccept()) {\n <dw-button\n [label]=\"acceptLabel()\"\n [variant]=\"severity() === 'danger' ? 'danger' : 'primary'\"\n [icon]=\"acceptIcon()\"\n [loading]=\"loading()\"\n [loadingLabel]=\"loadingLabel()\"\n [disabled]=\"acceptDisabled() || checking()\"\n [testId]=\"acceptTestId()\"\n (clicked)=\"accept.emit()\"\n />\n }\n </div>\n </dw-dialog>\n `,\n})\nexport class DwConfirmDialogComponent {\n readonly visible = model<boolean>(false);\n readonly header = input<string>('Are you sure?');\n readonly message = input<string>('');\n readonly icon = input<string | null>(null);\n readonly severity = input<DwConfirmSeverity>('danger');\n readonly acceptLabel = input<string>('Delete');\n readonly rejectLabel = input<string>('Cancel');\n readonly acceptIcon = input<string>('');\n readonly loading = input<boolean>(false);\n readonly loadingLabel = input<string>('');\n readonly acceptDisabled = input<boolean>(false);\n /** Blocked state (e.g. dependencies must be removed first): only the reject button shows. */\n readonly hideAccept = input<boolean>(false);\n /** Async pre-check in progress (e.g. \"Loading affected tasks…\"). */\n readonly checking = input<boolean>(false);\n readonly checkingLabel = input<string>('Checking…');\n readonly warning = input<DwConfirmWarning | null>(null);\n readonly summary = input<readonly DwConfirmSummaryRow[]>([]);\n readonly closable = input<boolean>(true);\n readonly dismissableMask = input<boolean>(true);\n readonly size = input<'sm' | 'md' | 'lg'>('sm');\n readonly testId = input<string | null>(null);\n readonly acceptTestId = input<string>('confirm-accept');\n readonly rejectTestId = input<string>('confirm-reject');\n\n readonly accept = output<void>();\n /** Fired for Cancel, X, Esc and mask clicks. */\n readonly rejected = output<void>();\n\n readonly iconTint = computed<'accent' | 'warning' | 'danger'>(() =>\n this.severity() === 'primary' ? 'accent' : this.severity() === 'warning' ? 'warning' : 'danger',\n );\n readonly resolvedIcon = computed(() => this.icon() ?? SEVERITY_ICONS[this.severity()]);\n\n private acceptedOrRejected = false;\n\n reject(): void {\n this.acceptedOrRejected = true;\n this.visible.set(false);\n this.rejected.emit();\n }\n\n onHide(): void {\n // X / Esc / mask close counts as reject.\n if (!this.acceptedOrRejected) {\n this.rejected.emit();\n }\n this.acceptedOrRejected = false;\n }\n\n /** Call when the parent closes the dialog after a successful accept. */\n markAccepted(): void {\n this.acceptedOrRejected = true;\n }\n}\n","import { ChangeDetectionStrategy, Component, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n DwConfirmDialogComponent,\n DwConfirmSeverity,\n DwConfirmSummaryRow,\n DwConfirmWarning,\n} from './dw-confirm-dialog.component';\n\nexport interface DwConfirmOptions {\n header?: string;\n message: string;\n severity?: DwConfirmSeverity;\n acceptLabel?: string;\n rejectLabel?: string;\n icon?: string;\n warning?: DwConfirmWarning | null;\n summary?: DwConfirmSummaryRow[];\n /**\n * Optional async action run on accept. While it runs the dialog shows a\n * loading state; it resolves `true` on success, stays open on error.\n */\n onAccept?: () => Promise<unknown> | unknown;\n loadingLabel?: string;\n}\n\ninterface ActiveRequest extends DwConfirmOptions {\n resolve: (accepted: boolean) => void;\n}\n\n/**\n * Imperative confirmation. Requires `<dw-confirm-host />` once in the app\n * shell (layout).\n *\n * ```ts\n * if (await this.confirm.confirm({ header: 'Clear history', message: 'Remove all messages?', acceptLabel: 'Clear' })) { … }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class DwConfirmService {\n readonly request = signal<ActiveRequest | null>(null);\n readonly busy = signal(false);\n\n confirm(options: DwConfirmOptions): Promise<boolean> {\n // A new request supersedes (rejects) a pending one.\n this.request()?.resolve(false);\n return new Promise<boolean>((resolve) => {\n this.busy.set(false);\n this.request.set({ ...options, resolve });\n });\n }\n\n async accept(): Promise<void> {\n const req = this.request();\n if (!req) {\n return;\n }\n if (req.onAccept) {\n this.busy.set(true);\n try {\n await req.onAccept();\n } catch {\n this.busy.set(false);\n return; // keep the dialog open; the action reports its own error\n }\n this.busy.set(false);\n }\n this.request.set(null);\n req.resolve(true);\n }\n\n reject(): void {\n const req = this.request();\n if (!req || this.busy()) {\n return;\n }\n this.request.set(null);\n req.resolve(false);\n }\n}\n\n/** Renders DwConfirmService requests. Place once in the layout. */\n@Component({\n selector: 'dw-confirm-host',\n standalone: true,\n imports: [DwConfirmDialogComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (request(); as r) {\n <dw-confirm-dialog\n [visible]=\"true\"\n [header]=\"r.header ?? 'Are you sure?'\"\n [message]=\"r.message\"\n [severity]=\"r.severity ?? 'danger'\"\n [acceptLabel]=\"r.acceptLabel ?? 'Confirm'\"\n [rejectLabel]=\"r.rejectLabel ?? 'Cancel'\"\n [icon]=\"r.icon ?? null\"\n [warning]=\"r.warning ?? null\"\n [summary]=\"r.summary ?? []\"\n [loading]=\"service.busy()\"\n [loadingLabel]=\"r.loadingLabel ?? ''\"\n (accept)=\"service.accept()\"\n (rejected)=\"service.reject()\"\n />\n }\n `,\n})\nexport class DwConfirmHostComponent {\n readonly service = inject(DwConfirmService);\n readonly request = computed(() => this.service.request());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n computed,\n contentChild,\n input,\n model,\n signal,\n output,\n viewChild,\n} from '@angular/core';\nimport { DrawerModule } from 'primeng/drawer';\nimport { Observable, firstValueFrom, isObservable } from 'rxjs';\nimport { DwButtonAppearance, DwButtonComponent, DwButtonVariant } from '../button/dw-button.component';\nimport { DwBreadcrumb, DwBreadcrumbComponent } from '../breadcrumb/dw-breadcrumb.component';\nimport { isImageIcon } from '../internal/image-icon.util';\nimport { DwResizerComponent, DwResizerDrag } from '../resizer/dw-resizer.component';\n\n/** Replaces the default drawer header entirely. */\n@Directive({ selector: '[dwDrawerHeader]', standalone: true })\nexport class DwDrawerHeaderDirective {}\n\n/** Content shown under the header, above the scrolling body (steppers, tabs). */\n@Directive({ selector: '[dwDrawerSubheader]', standalone: true })\nexport class DwDrawerSubheaderDirective {}\n\n/** Custom footer content (left side when `actions` are also given). */\n@Directive({ selector: '[dwDrawerFooter]', standalone: true, host: { class: 'dw-footer-actions' } })\nexport class DwDrawerFooterDirective {}\n\nexport interface DwDrawerAction {\n id: string;\n label: string;\n variant?: DwButtonVariant | 'primary-outline';\n /** Overrides the appearance derived from `variant` (e.g. 'text' for a quiet Cancel). */\n appearance?: DwButtonAppearance;\n icon?: string;\n disabled?: boolean;\n disabledReason?: string;\n loading?: boolean;\n loadingLabel?: string;\n testId?: string;\n}\n\nexport type DwDrawerSize = 'sm' | 'md' | 'lg' | 'full';\nexport type DwCanClose = () => boolean | Promise<boolean> | Observable<boolean>;\n\nlet nextDrawerId = 0;\n\n/**\n * Side / bottom drawer on top of p-drawer with the design-system shell:\n * header (icon, breadcrumb, title, subtitle, back, actions, close),\n * optional sub-header, scrolling body, footer with standard actions.\n *\n * ```html\n * <dw-drawer [(visible)]=\"open\" header=\"Add LLM configuration\" icon=\"pi pi-sparkles\" size=\"lg\"\n * [actions]=\"[{id:'cancel',label:'Cancel',variant:'secondary'},{id:'save',label:'Save',loading:saving,disabled:form.invalid}]\"\n * [canClose]=\"confirmDiscard\" (action)=\"onAction($event)\" (hide)=\"reset()\">\n * <dw-button dwDrawerHeaderActions icon=\"pi pi-download\" appearance=\"text\" ariaLabel=\"Export\" />\n * …form…\n * <span dwDrawerFooter class=\"dw-meta\">Last saved 2m ago</span>\n * </dw-drawer>\n * ```\n */\n@Component({\n selector: 'dw-drawer',\n standalone: true,\n imports: [DrawerModule, DwBreadcrumbComponent, DwButtonComponent, DwResizerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-drawer\n [visible]=\"visible()\"\n (visibleChange)=\"onDrawerVisibleChange($event)\"\n [position]=\"position()\"\n [modal]=\"modal()\"\n [dismissible]=\"dismissible() && !canClose()\"\n [closeOnEscape]=\"closeOnEscape() && !canClose()\"\n [showCloseIcon]=\"false\"\n [blockScroll]=\"blockScroll()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [style]=\"drawerStyle()\"\n [styleClass]=\"styleClasses()\"\n (onShow)=\"show.emit()\"\n (onHide)=\"hide.emit()\"\n >\n <ng-template #headless>\n <div\n #shell\n class=\"dw-drawer-shell\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"showHeader() || customHeader() ? titleId : null\"\n [attr.aria-label]=\"showHeader() || customHeader() ? null : header() || null\"\n [attr.data-testid]=\"testId()\"\n (keydown.escape)=\"onEscape($event)\"\n >\n @if (resizable() && position() !== 'bottom') {\n <dw-resizer\n [edge]=\"position() === 'left' ? 'end' : 'start'\"\n ariaLabel=\"Resize drawer\"\n [valueNow]=\"widthPercent()\"\n [valueMin]=\"minPercent()\"\n [valueMax]=\"maxWidthRatio * 100\"\n (dragStart)=\"resizing.set(true)\"\n (drag)=\"onResizeDrag($event)\"\n (dragEnd)=\"resizing.set(false)\"\n (nudge)=\"onResizeNudge($event)\"\n data-testid=\"drawer-resizer\"\n />\n }\n @if (customHeader()) {\n <ng-content select=\"[dwDrawerHeader]\" />\n } @else if (showHeader()) {\n <div class=\"dw-drawer-shell__header\">\n @if (showBack()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" aria-label=\"Back\" (click)=\"back.emit()\">\n <i class=\"pi pi-arrow-left\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (icon() && !iconFramed() && !iconIsImage()) {\n <i class=\"dw-drawer-shell__icon\" [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else if (icon()) {\n <span class=\"dw-entity-icon dw-entity-icon--framed dw-entity-icon--md dw-entity-icon--accent\" aria-hidden=\"true\">\n @if (iconIsImage()) {\n <img [src]=\"icon()\" alt=\"\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n </span>\n }\n <div class=\"dw-drawer-shell__titles\">\n <dw-breadcrumb [items]=\"breadcrumbs()\" [showIcons]=\"false\" (crumbClick)=\"breadcrumbClick.emit($event)\" />\n @if (header()) {\n <h2 class=\"dw-title dw-drawer-shell__title\" [id]=\"titleId\">{{ header() }}</h2>\n }\n @if (subtitle()) {\n <p class=\"dw-meta dw-drawer-shell__subtitle\">{{ subtitle() }}</p>\n }\n </div>\n <div class=\"dw-drawer-shell__header-actions\">\n <ng-content select=\"[dwDrawerHeaderActions]\" />\n @if (showCloseIcon()) {\n <button type=\"button\" class=\"dw-icon-btn dw-icon-btn--lg\" aria-label=\"Close\" data-testid=\"drawer-close\" (click)=\"requestClose()\">\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n }\n <ng-content select=\"[dwDrawerSubheader]\" />\n <div class=\"dw-drawer-shell__body\" [class.dw-drawer-shell__body--flush]=\"flushBody()\">\n <ng-content />\n </div>\n @if (actions().length || footerSlot()) {\n <div class=\"dw-drawer-shell__footer\">\n <div class=\"dw-drawer-shell__footer-start\"><ng-content select=\"[dwDrawerFooter]\" /></div>\n @for (a of actions(); track a.id) {\n <dw-button\n [label]=\"a.label\"\n [icon]=\"a.icon ?? ''\"\n [variant]=\"a.variant === 'primary-outline' ? 'primary' : (a.variant ?? 'primary')\"\n [appearance]=\"a.appearance ?? (a.variant === 'secondary' || a.variant === 'primary-outline' ? 'outlined' : 'solid')\"\n [disabled]=\"!!a.disabled\"\n [disabledReason]=\"a.disabledReason ?? ''\"\n [loading]=\"!!a.loading\"\n [loadingLabel]=\"a.loadingLabel ?? ''\"\n [testId]=\"a.testId ?? 'drawer-action-' + a.id\"\n (clicked)=\"action.emit(a.id)\"\n />\n }\n </div>\n }\n </div>\n </ng-template>\n </p-drawer>\n `,\n})\nexport class DwDrawerComponent {\n readonly visible = model<boolean>(false);\n readonly position = input<'right' | 'bottom' | 'left'>('right');\n readonly size = input<DwDrawerSize>('md');\n /** Free-form width (right/left) or height (bottom) — overrides `size`. */\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n readonly maxWidth = input<string>('100vw');\n readonly header = input<string>('');\n readonly subtitle = input<string>('');\n readonly icon = input<string>('');\n /** False shows a font icon bare (accent colour, no tile) beside the title. */\n readonly iconFramed = input<boolean>(true);\n readonly breadcrumbs = input<readonly DwBreadcrumb[]>([]);\n readonly showBack = input<boolean>(false);\n readonly showCloseIcon = input<boolean>(true);\n /** False when the body brings its own header and close control. */\n readonly showHeader = input<boolean>(true);\n readonly modal = input<boolean>(true);\n /** Close on mask click. */\n readonly dismissible = input<boolean>(true);\n readonly closeOnEscape = input<boolean>(true);\n readonly blockScroll = input<boolean>(false);\n readonly appendTo = input<string | null>('body');\n readonly baseZIndex = input<number>(0);\n readonly actions = input<readonly DwDrawerAction[]>([]);\n /** Guard for every close path (X, Esc). Mask close is disabled while a guard is set. */\n readonly canClose = input<DwCanClose | null>(null);\n readonly flushBody = input<boolean>(false);\n readonly styleClass = input<string>('');\n readonly testId = input<string | null>(null);\n\n readonly show = output<void>();\n readonly hide = output<void>();\n readonly back = output<void>();\n readonly action = output<string>();\n readonly breadcrumbClick = output<DwBreadcrumb>();\n\n /**\n * Drag (or keyboard) resize from the inner edge — on for every side drawer. Opens at its\n * `size` / `width`; the user can then take it between `minWidth` (default 30% of the\n * window) and 90% of the window.\n */\n readonly resizable = input<boolean>(true);\n /** Narrowest width (px) a resize can reach; default 30% of the window. The widest is 90%. */\n readonly minWidth = input<number | null>(null);\n /** Width chosen by dragging; overrides `width` / `size` until the drawer is recreated. */\n readonly resizedWidth = signal<string | null>(null);\n readonly resizing = signal(false);\n private readonly shell = viewChild<ElementRef<HTMLElement>>('shell');\n\n readonly customHeader = contentChild(DwDrawerHeaderDirective);\n readonly footerSlot = contentChild(DwDrawerFooterDirective);\n\n readonly titleId = `dw-drawer-title-${++nextDrawerId}`;\n readonly iconIsImage = computed(() => isImageIcon(this.icon()));\n\n readonly drawerStyle = computed(() => {\n const style: Record<string, string> = {};\n if (this.position() === 'bottom') {\n style['height'] = this.height() ?? 'calc(100vh - var(--dw-size-topbar))';\n } else {\n const width = this.resizedWidth() ?? this.width();\n if (width) style['width'] = width;\n style['maxWidth'] = this.maxWidth();\n }\n return style;\n });\n\n readonly styleClasses = computed(() => {\n const cls = ['dw-drawer'];\n if (this.position() !== 'bottom' && !this.width() && !this.resizedWidth()) cls.push(`dw-drawer--${this.size()}`);\n if (this.resizing()) cls.push('dw-drawer--resizing');\n if (this.styleClass()) cls.push(this.styleClass());\n return cls.join(' ');\n });\n\n onDrawerVisibleChange(value: boolean): void {\n this.visible.set(value);\n }\n\n /** Widest a resize can go, as a share of the window. */\n readonly maxWidthRatio = 0.9;\n /** Narrowest default, as a share of the window (when no `minWidth` is given). */\n readonly minWidthRatio = 0.3;\n /** Current width as % of the window, for the resizer's aria-valuenow. */\n readonly widthPercent = signal<number | null>(null);\n\n minPercent(): number {\n const min = this.minWidth();\n return min === null ? this.minWidthRatio * 100 : Math.round((min / window.innerWidth) * 100);\n }\n\n onResizeDrag(pointer: DwResizerDrag): void {\n // A right drawer grows as the pointer moves left; a left drawer as it moves right.\n this.applyWidth(this.position() === 'left' ? pointer.clientX : window.innerWidth - pointer.clientX);\n }\n\n onResizeNudge(delta: number): void {\n const current = this.shell()?.nativeElement.getBoundingClientRect().width ?? 0;\n // Keys move the handle: ← widens a right drawer, → widens a left one.\n this.applyWidth(this.position() === 'left' ? current + delta : current - delta);\n }\n\n private applyWidth(width: number): void {\n const min = this.minWidth() ?? window.innerWidth * this.minWidthRatio;\n const max = window.innerWidth * this.maxWidthRatio;\n const clamped = Math.round(Math.max(Math.min(min, max), Math.min(max, width)));\n this.resizedWidth.set(`${clamped}px`);\n this.widthPercent.set(Math.round((clamped / window.innerWidth) * 100));\n }\n\n onEscape(event: Event): void {\n if (!this.canClose() || !this.closeOnEscape()) {\n return;\n }\n event.stopPropagation();\n void this.requestClose();\n }\n\n /** Closes the drawer, honouring `canClose`. Resolves whether it closed. */\n async requestClose(): Promise<boolean> {\n const guard = this.canClose();\n if (guard) {\n const result = guard();\n const allowed = isObservable(result) ? await firstValueFrom(result) : await result;\n if (!allowed) {\n return false;\n }\n }\n this.visible.set(false);\n return true;\n }\n}\n\nexport const DW_DRAWER = [\n DwDrawerComponent,\n DwDrawerHeaderDirective,\n DwDrawerSubheaderDirective,\n DwDrawerFooterDirective,\n] as const;\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DwToast, DwToastService } from './dw-toast.service';\n\nexport type DwToastPosition = 'top-center' | 'top-right' | 'bottom-center' | 'bottom-right';\n\n/**\n * Renders the DwToastService stack. Place it once, in the app's root component; every screen pushes toasts through\n * DwToastService and they all show here, with one position and one look.\n *\n * ```html\n * <router-outlet />\n * <dw-toast-host />\n * ```\n */\n@Component({\n selector: 'dw-toast-host',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-toast-host' },\n template: `\n <div class=\"dw-toasts\" [class]=\"'dw-toasts dw-toasts--' + position()\" role=\"region\" aria-label=\"Notifications\">\n @for (toast of visible(); track toast.id) {\n <div\n class=\"dw-toast\"\n [class]=\"'dw-toast dw-toast--' + toast.severity\"\n [attr.role]=\"toast.severity === 'error' ? 'alert' : 'status'\"\n [attr.data-testid]=\"'dw-toast-' + toast.severity\"\n >\n <div class=\"dw-toast__content\">\n <span class=\"dw-toast__message\">{{ toast.message }}</span>\n <button type=\"button\" class=\"dw-toast__close\" aria-label=\"Close notification\" (click)=\"dismiss(toast)\">\n ×\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class DwToastHostComponent {\n private readonly toasts = inject(DwToastService);\n\n /** Where the stack sits. Default: centred under the top edge. */\n readonly position = input<DwToastPosition>('top-center');\n /** Most toasts shown at once; the newest win, older ones wait until these go. */\n readonly max = input<number>(5);\n\n readonly visible = computed(() => {\n const all = this.toasts.toasts();\n const max = Math.max(0, Math.floor(this.max()));\n return all.slice(Math.max(0, all.length - max));\n });\n\n dismiss(toast: DwToast): void {\n this.toasts.dismiss(toast.id);\n }\n}\n","/**\n * How many rows a paginated table can show without leaving a gap or overflowing.\n *\n * The list screens each carried their own copy of this sum, built from hard-coded pixel\n * constants — and the copies had drifted (44/45/50 here, 42/38/50 there) while the tables they\n * described are the same PrimeNG table. A row is 42px and the header 38px, so the 44/45 pair\n * lost about a row and a half of white space under the last row, which is what a constant does\n * when the CSS moves and it does not.\n *\n * So: measure. The header, the paginator and a row are all on screen by the time this runs, and\n * their real heights cost one `getBoundingClientRect` each. The constants stay on only as\n * fallbacks, for the pass that lands before the table has painted.\n */\n\nexport interface TableRowFit {\n /** Used only when the element is not on screen yet. */\n rowHeight?: number;\n headerHeight?: number;\n paginatorHeight?: number;\n /** Never return fewer than this, however short the viewport. */\n minimumRows?: number;\n}\n\nconst DEFAULTS: Required<TableRowFit> = {\n rowHeight: 44,\n headerHeight: 45,\n paginatorHeight: 50,\n minimumRows: 3,\n};\n\n/**\n * A measured row height is trusted only inside this range. Outside it the reading is not a row:\n * an empty-state cell spanning the table, or a row mid-transition with no height yet.\n */\nconst PLAUSIBLE_ROW_HEIGHT = { min: 24, max: 96 };\n\nconst heightOf = (card: HTMLElement, selector: string, fallback: number): number => {\n const el = card.querySelector(selector) as HTMLElement | null;\n const height = el?.getBoundingClientRect().height || 0;\n return height > 0 ? height : fallback;\n};\n\n/**\n * Returns the row count that fills `card` from its top to the bottom of the viewport.\n *\n * `card` is the element the table lives in — its top is where the table starts, and everything\n * below it to the window's bottom edge is the budget.\n */\nexport function fitTableRows(card: HTMLElement | null | undefined, config: TableRowFit = {}): number {\n const { rowHeight, headerHeight, paginatorHeight, minimumRows } = { ...DEFAULTS, ...config };\n if (!card) return minimumRows;\n\n const header = heightOf(card, '.p-datatable-thead', headerHeight);\n const paginator = heightOf(card, '.p-paginator', paginatorHeight);\n\n // The tallest row on the page, not just the first: rows can differ (a pinned or compact first\n // row, a row with a two-line cell), and sizing the page by a short one lets the rest overflow\n // into a scrollbar beside the paginator.\n const rows = Array.from(card.querySelectorAll('.p-datatable-tbody > tr')) as HTMLElement[];\n const measuredRow = rows\n .map((r) => r.getBoundingClientRect().height)\n .filter((h) => h >= PLAUSIBLE_ROW_HEIGHT.min && h <= PLAUSIBLE_ROW_HEIGHT.max)\n .reduce((max, h) => Math.max(max, h), 0);\n const row =\n measuredRow >= PLAUSIBLE_ROW_HEIGHT.min && measuredRow <= PLAUSIBLE_ROW_HEIGHT.max\n ? measuredRow\n : rowHeight;\n\n // Height-bound table (a flex child the page sizes, e.g. \"fill the rest of the screen\"):\n // the budget is the room the rows can take — the scroll box (page padding, toolbars and a\n // horizontal scrollbar are already outside it) plus any slack left in the p-datatable\n // around it. A box that is taller than its rows has room to spare; rows taller than the\n // box overflow it. Either way the same count comes out, so re-fitting settles.\n const box = card.querySelector('.p-datatable-table-container') as HTMLElement | null;\n const table = box?.querySelector('table');\n const datatable = card.querySelector('.p-datatable') as HTMLElement | null;\n if (box && table && datatable && box.clientHeight > 0) {\n const rowsHeight = table.getBoundingClientRect().height;\n const overflowing = rowsHeight - box.clientHeight > 1;\n const roomInBox = box.clientHeight - rowsHeight > 1;\n const slack = Math.max(datatable.clientHeight - box.offsetHeight - paginator, 0);\n if (overflowing || roomInBox || slack > 1) {\n return Math.max(minimumRows, Math.floor((box.clientHeight + slack - header) / row));\n }\n }\n\n const available = window.innerHeight - card.getBoundingClientRect().top - header - paginator;\n return Math.max(minimumRows, Math.floor(available / row));\n}\n","/**\n * Backend timestamp normalization.\n *\n * `Created on` / `Modified on` are **instants** — one moment in time — so they\n * must render in the timezone of whoever is looking, not the server's. Angular's\n * `date` pipe already does that conversion, but only when the value it is given\n * actually identifies an instant. It cannot convert what carries no zone:\n *\n * - `1757000000000` (epoch millis) — an instant. Rendered correctly.\n * - `2026-09-04T10:12:33Z` / `…+05:30` / `… GMT` — an instant. Rendered correctly.\n * - `2026-09-04T10:12:33` / `2026-09-04 10:12:33` — **not** an instant. Angular\n * parses a zone-less ISO string with the *local* setters, so a UTC wall clock\n * is shown verbatim as if it were local time: a tool created at 15:42 IST\n * reads back as 10:12. That is the bug this file exists to close.\n *\n * The server stores UTC, so a zone-less timestamp is a UTC timestamp that lost\n * its suffix on the way out. Putting the `Z` back is all the pipe needs.\n *\n * Deliberately **not** normalized:\n *\n * - A bare `2026-09-04` is a *calendar date*, not an instant. It means that day\n * everywhere, and shifting it by an offset would show the previous day to\n * anyone west of UTC. Left exactly as it arrived.\n * - Anything that already names a zone. Adding a second one would double-shift.\n *\n * `toInstant` is therefore idempotent and safe to apply to a payload whose\n * format you have not pinned down — every already-correct shape passes through\n * untouched.\n */\n\n/** A timestamp as the REST API hands it over: epoch millis, a date string, or absent. */\nexport type BackendTimestamp = string | number | null | undefined;\n\n/** `YYYY-MM-DD`, then `T` or a space, then a clock — and nothing after it. The\n * trailing `$` is what excludes `…Z`, `…+05:30` and `…-0800` from matching. */\nconst ZONE_LESS_DATE_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?)$/;\n\n/** Epoch millis that arrived as a string rather than a number. */\nconst EPOCH_MILLIS = /^-?\\d+$/;\n\n/**\n * Returns `value` in a form the `date` pipe can resolve to a real instant, so it\n * renders in the viewer's own timezone.\n *\n * Only a zone-less date-time is rewritten (read as UTC). Epoch millis, values\n * that already name a zone, bare calendar dates and formats this does not model\n * are returned as they came. Empty/absent input becomes `null`, which the\n * templates render as the `—` placeholder.\n */\nexport function toInstant(value: BackendTimestamp): string | number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n\n const raw = value.trim();\n if (raw === '') return null;\n if (EPOCH_MILLIS.test(raw)) return Number(raw);\n\n const zoneLess = ZONE_LESS_DATE_TIME.exec(raw);\n if (!zoneLess) return raw;\n\n return `${zoneLess[1]}T${zoneLess[2]}Z`;\n}\n","/**\n * Display formatting for dates/timestamps.\n *\n * Accepts anything the backend hands over (epoch millis as number or string,\n * ISO strings with or without a zone) plus `Date` objects. Zone-less backend\n * timestamps are read as UTC via `toInstant`, so output is always in the\n * viewer's local timezone. Empty or unparseable input renders as `—`.\n */\nimport { BackendTimestamp, toInstant } from './timestamp.util';\n\nexport type DateLike = BackendTimestamp | Date;\n\n/** Placeholder rendered when a value is missing or unparseable. */\nexport const EMPTY_DATE = '—';\n\nconst MONTHS_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/** Parses a `DateLike` into a valid `Date`, or `null` when missing/invalid. */\nexport function toDate(value: DateLike): Date | null {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n const instant = toInstant(value);\n if (instant === null) return null;\n const d = new Date(instant);\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\n/** \"DD-Mon-YYYY\" (e.g. \"12-Dec-2023\"). */\nexport function formatDate(value: DateLike): string {\n const d = toDate(value);\n if (!d) return EMPTY_DATE;\n const day = String(d.getDate()).padStart(2, '0');\n return `${day}-${MONTHS_SHORT[d.getMonth()]}-${d.getFullYear()}`;\n}\n\n/** \"hh:mm AM/PM\" (e.g. \"09:05 PM\"). */\nexport function formatTime(value: DateLike): string {\n const d = toDate(value);\n if (!d) return EMPTY_DATE;\n const hours = d.getHours();\n const h12 = String(hours % 12 || 12).padStart(2, '0');\n const minutes = String(d.getMinutes()).padStart(2, '0');\n return `${h12}:${minutes} ${hours < 12 ? 'AM' : 'PM'}`;\n}\n\n/** \"DD-Mon-YYYY, hh:mm AM/PM\" (e.g. \"12-Dec-2023, 09:05 PM\"). */\nexport function formatDateTime(value: DateLike): string {\n if (!toDate(value)) return EMPTY_DATE;\n return `${formatDate(value)}, ${formatTime(value)}`;\n}\n\n/** A timestamp as a short label, and whether that label is relative (\"5 minutes ago\"). */\nexport interface RelativeDateTime {\n label: string;\n /** True for \"Just now\" / \"N minutes ago\" / \"N hours ago\" / \"Yesterday\". The full\n * date-time is then worth showing on hover; an absolute label already is it. */\n relative: boolean;\n}\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 60 * MINUTE_MS;\n\n/** Midnight (local) at the start of `d`'s calendar day. */\nfunction startOfDay(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\n/**\n * A past instant relative to `now`:\n * - under a minute: \"Just now\"\n * - under an hour: \"N minute(s) ago\"\n * - earlier today: \"N hour(s) ago\"\n * - any time on the previous calendar day: \"Yesterday\"\n * - anything older, or in the future: the full \"DD-Mon-YYYY, hh:mm AM/PM\"\n *\n * Calendar days are the viewer's local days. Empty or unparseable input gives `—`.\n */\nexport function formatRelativeDateTime(value: DateLike, now: Date = new Date()): RelativeDateTime {\n const d = toDate(value);\n if (!d) return { label: EMPTY_DATE, relative: false };\n const diff = now.getTime() - d.getTime();\n // A few seconds ahead is clock skew between the server and this machine, not the future.\n if (diff < -MINUTE_MS) return { label: formatDateTime(d), relative: false };\n if (diff < MINUTE_MS) return { label: 'Just now', relative: true };\n if (diff < HOUR_MS) {\n const mins = Math.floor(diff / MINUTE_MS);\n return { label: `${mins} minute${mins === 1 ? '' : 's'} ago`, relative: true };\n }\n const today = startOfDay(now);\n if (d.getTime() >= today) {\n const hours = Math.floor(diff / HOUR_MS);\n return { label: `${hours} hour${hours === 1 ? '' : 's'} ago`, relative: true };\n }\n const yesterday = startOfDay(new Date(today - 1));\n if (d.getTime() >= yesterday) return { label: 'Yesterday', relative: true };\n return { label: formatDateTime(d), relative: false };\n}\n","import { Injectable, signal } from '@angular/core';\n\n/** How often relative labels (\"5 minutes ago\") move on. */\nexport const DW_CLOCK_TICK_MS = 30_000;\n\n/**\n * One app-wide \"now\" for relative timestamps, so a page with hundreds of\n * `dw-timestamp`s runs a single timer. The timer runs only while at least one\n * consumer is attached, and outside every zone: it neither triggers app-wide\n * change detection on each tick (the `now` signal refreshes just the labels\n * that read it) nor leaves a pending periodic timer in `fakeAsync` tests.\n */\n@Injectable({ providedIn: 'root' })\nexport class DwClockService {\n private readonly _now = signal(Date.now());\n /** Epoch millis, refreshed every DW_CLOCK_TICK_MS while anything is attached. */\n readonly now = this._now.asReadonly();\n\n private consumers = 0;\n private timer: ReturnType<typeof setInterval> | null = null;\n\n /** Start following the clock; call the returned function to stop. */\n attach(): () => void {\n this.consumers++;\n // A label created now must not show an instant older than its own creation.\n this._now.set(Date.now());\n if (!this.timer) {\n this.timer = runOutsideZones(() => setInterval(() => this._now.set(Date.now()), DW_CLOCK_TICK_MS));\n }\n let attached = true;\n return () => {\n if (!attached) return;\n attached = false;\n this.consumers--;\n if (this.consumers === 0 && this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n };\n }\n\n /** Consumers currently attached (for tests). */\n get consumerCount(): number {\n return this.consumers;\n }\n}\n\n/** Run `fn` in zone.js's root zone when zone.js is loaded, so its timers are untracked. */\nfunction runOutsideZones<T>(fn: () => T): T {\n const zone = (globalThis as { Zone?: { root?: { run<R>(f: () => R): R } } }).Zone;\n return zone?.root ? zone.root.run(fn) : fn();\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, computed, inject, input } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DateLike, EMPTY_DATE, formatDateTime, formatRelativeDateTime, toDate } from '../internal/date-format.util';\nimport { DwClockService } from './dw-clock.service';\n\n/**\n * A timestamp shown the same way everywhere: \"Just now\", \"12 minutes ago\",\n * \"3 hours ago\", \"Yesterday\", then \"12-Dec-2025, 09:05 PM\" beyond yesterday.\n * A relative label shows the full date and time on hover. Relative labels keep\n * moving while the page stays open.\n *\n * Takes whatever the backend sends (epoch millis, ISO with or without a zone —\n * zone-less is read as UTC) or a Date, and shows it in the viewer's timezone.\n * Missing or unparseable values render `placeholder`.\n *\n * ```html\n * <dw-timestamp [value]=\"agent.modifiedDate\" />\n * <dw-timestamp [value]=\"row.createdAt\" format=\"absolute\" /> <!-- always the full date-time -->\n * ```\n */\n@Component({\n selector: 'dw-timestamp',\n standalone: true,\n imports: [TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-timestamp-host' },\n template: `\n @if (date(); as d) {\n <time\n class=\"dw-timestamp\"\n [attr.datetime]=\"d.toISOString()\"\n [attr.data-testid]=\"testId()\"\n [pTooltip]=\"tooltip()\"\n [tooltipDisabled]=\"!tooltip()\"\n tooltipPosition=\"top\"\n [showDelay]=\"300\"\n appendTo=\"body\"\n >{{ label() }}</time\n >\n } @else {\n <span class=\"dw-timestamp dw-timestamp--empty\" [attr.data-testid]=\"testId()\">{{ placeholder() }}</span>\n }\n `,\n})\nexport class DwTimestampComponent {\n private readonly clock = inject(DwClockService);\n\n /** The instant: epoch millis, an ISO string (zone-less = UTC) or a Date. */\n readonly value = input<DateLike>(null);\n /** `relative` (default): \"N minutes ago\" … \"Yesterday\", then the full date-time. `absolute`: always the full date-time. */\n readonly format = input<'relative' | 'absolute'>('relative');\n /** Shown for a missing or unparseable value. */\n readonly placeholder = input<string>(EMPTY_DATE);\n readonly testId = input<string | null>(null);\n\n readonly date = computed(() => toDate(this.value()));\n\n private readonly display = computed(() => {\n const d = this.date();\n if (!d) return { label: this.placeholder(), relative: false };\n if (this.format() === 'absolute') return { label: formatDateTime(d), relative: false };\n return formatRelativeDateTime(d, new Date(this.clock.now()));\n });\n\n readonly label = computed(() => this.display().label);\n /** The full date and time, on hover of a relative label only. */\n readonly tooltip = computed(() => {\n const d = this.date();\n return d && this.display().relative ? formatDateTime(d) : '';\n });\n\n constructor() {\n inject(DestroyRef).onDestroy(this.clock.attach());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n TemplateRef,\n afterNextRender,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SortEvent, SortMeta } from 'primeng/api';\nimport { FrozenColumn, Table, TableModule, TablePageEvent } from 'primeng/table';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DwTableEmptyComponent } from '../empty-state/dw-empty-state.component';\nimport { DwTooltipIfTruncatedDirective } from '../tooltip/dw-tooltip-if-truncated.directive';\nimport { fitTableRows } from '../internal/table-rows.util';\nimport { DwIconButtonComponent } from '../icon-button/dw-icon-button.component';\nimport { DwMenuComponent, DwMenuItem } from '../menu/dw-menu.component';\nimport { DwTimestampComponent } from '../timestamp/dw-timestamp.component';\nimport { DateLike, EMPTY_DATE, formatDateTime, toDate } from '../internal/date-format.util';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public generic default; `unknown` would break consumers' typing\nexport interface DwColumn<T = any> {\n field: string;\n header: string;\n sortable?: boolean;\n /** Field used for sorting when it differs from `field`. */\n sortField?: string;\n frozen?: boolean;\n width?: string;\n minWidth?: string;\n align?: 'left' | 'center' | 'right';\n /** Ellipsis + tooltip when the value overflows (default true for text cells). */\n truncate?: boolean;\n /**\n * `date`: the value renders as a dw-timestamp (\"2 hours ago\" … \"12-Dec-2025, 09:05 PM\"),\n * cut with an ellipsis like a text cell. Default `text`.\n */\n type?: 'text' | 'date';\n /** Date columns: `relative` (default) or always the full `absolute` date-time. */\n dateFormat?: 'relative' | 'absolute';\n /** Text style of a default cell, from the type scale: `strong` (dw-body-strong) or `meta` (dw-meta). */\n textStyle?: 'body' | 'strong' | 'meta';\n /** Shown when the value is empty (default \"—\"). */\n emptyText?: string;\n /**\n * Value of a default cell when it isn't simply `row[field]`: the text of a text cell,\n * the instant (epoch millis, ISO string or Date) of a date cell.\n */\n format?: (row: T) => string | number | Date | null | undefined;\n hidden?: boolean;\n /**\n * Take whatever width the other columns leave, and cut content instead of\n * growing the table (pair with `minWidth` to keep it readable).\n */\n fill?: boolean;\n testId?: string;\n /** Extra class(es) on the header / body cells of this column. */\n headerClass?: string;\n cellClass?: string;\n}\n\n/** Custom cell: `<ng-template dwCell=\"status\" let-row let-index=\"index\">…</ng-template>` */\n@Directive({ selector: 'ng-template[dwCell]', standalone: true })\nexport class DwCellDirective {\n readonly field = input.required<string>({ alias: 'dwCell' });\n readonly template = inject<TemplateRef<{ $implicit: unknown; index: number }>>(TemplateRef);\n}\n\n/** Row actions column: `<ng-template dwRowActions let-row>…</ng-template>` */\n/** Custom header content for a column: `<ng-template dwHeader=\"select\">…</ng-template>`. */\n@Directive({ selector: 'ng-template[dwHeader]', standalone: true })\nexport class DwHeaderDirective {\n readonly field = input.required<string>({ alias: 'dwHeader' });\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[dwRowActions]', standalone: true })\nexport class DwRowActionsDirective {\n readonly template = inject<TemplateRef<{ $implicit: unknown; index: number }>>(TemplateRef);\n}\n\n/**\n * Expanded row body: `<ng-template dwRowExpansion let-row>…</ng-template>`.\n * With `[dwRowExpansionRows]=\"true\"` the template supplies its own `<tr>` rows\n * (sub-rows aligned with the table's columns) instead of one full-width cell.\n */\n@Directive({ selector: 'ng-template[dwRowExpansion]', standalone: true })\nexport class DwRowExpansionDirective {\n readonly template = inject<TemplateRef<{ $implicit: unknown; index: number }>>(TemplateRef);\n readonly rows = input<boolean>(false, { alias: 'dwRowExpansionRows' });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public generic default; `unknown` would break consumers' typing\nexport interface DwRowClickEvent<T = any> {\n row: T;\n event: MouseEvent;\n /** Cmd/Ctrl/Shift/middle click — callers should open in a new tab. */\n newTab: boolean;\n}\n\n/**\n * Table shell on top of p-table: sortable headers, frozen columns, truncating\n * cells with tooltips, skeleton loading, empty state, paginator (fixed or\n * viewport-fit rows), selection, row actions and row expansion.\n *\n * ```html\n * <dw-table [value]=\"items\" [columns]=\"cols\" dataKey=\"id\" [loading]=\"loading\" rows=\"fit\"\n * [filter]=\"query\" [globalFilterFields]=\"['name','createdBy']\"\n * sortField=\"createdDate\" [sortOrder]=\"-1\" emptyTitle=\"No configurations\"\n * [rowClickable]=\"true\" (rowClick)=\"open($event.row)\">\n * <ng-template dwCell=\"status\" let-row><dw-status-pill [status]=\"row.status\" /></ng-template>\n * <ng-template dwRowActions let-row>\n * <dw-icon-button icon=\"pi pi-pencil\" ariaLabel=\"Edit\" (clicked)=\"edit(row)\" />\n * <dw-menu [items]=\"rowMenu\" [context]=\"row\" />\n * </ng-template>\n * </dw-table>\n * ```\n */\n@Component({\n selector: 'dw-table',\n standalone: true,\n imports: [NgClass, NgTemplateOutlet, TableModule, SkeletonModule, TooltipModule, DwTableEmptyComponent, DwTooltipIfTruncatedDirective, DwIconButtonComponent, DwMenuComponent, DwTimestampComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-table-host', '[class.dw-table-host--framed]': 'framed()', '[class.dw-table-host--hscroll]': 'frozenDivider() && hasHScroll()', '[attr.data-testid]': 'testId()' },\n template: `\n <ng-content select=\"[dwTableHeader]\" />\n <p-table\n #table\n [value]=\"tableValue()\"\n [dataKey]=\"dataKey()\"\n [paginator]=\"paginator() && !loading() && hasRows()\"\n [rows]=\"resolvedRows()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions() ?? undefined\"\n [first]=\"first()\"\n [lazy]=\"lazy()\"\n (onPage)=\"onPage($event)\"\n (firstChange)=\"first.set($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\n [pageLinks]=\"5\"\n [sortField]=\"sortField() ?? undefined\"\n [sortOrder]=\"sortOrder()\"\n [sortMode]=\"multiSortMeta() ? 'multiple' : 'single'\"\n [multiSortMeta]=\"multiSortMeta()?.length ? multiSortMeta()! : undefined\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"filteredCount.set($event.filteredValue?.length ?? null)\"\n [customSort]=\"customSort()\"\n (sortFunction)=\"sortFunction.emit($event)\"\n [globalFilterFields]=\"globalFilterFields()\"\n [filterDelay]=\"0\"\n [selectionMode]=\"rowSelectionMode()\"\n [selection]=\"selection()\"\n (selectionChange)=\"selection.set($event)\"\n [rowSelectable]=\"primeRowSelectable()\"\n [expandedRowKeys]=\"expandedRowKeys()\"\n [scrollable]=\"true\"\n [scrollHeight]=\"scrollHeight() ?? undefined\"\n [tableStyle]=\"minWidth() ? { 'min-width': minWidth() } : undefined\"\n [rowHover]=\"true\"\n [styleClass]=\"'dw-datatable p-datatable-sm dw-datatable--paginator-' + paginatorAlign() + ' ' + (fixedLayout() ? 'dw-datatable--fixed ' : '') + (compact() ? 'dw-datatable--compact ' : '') + styleClass()\"\n >\n <!-- Sort state as a small arrow (up = ascending, down = descending), shown on the sorted column only -->\n <ng-template pTemplate=\"sorticon\" let-order>\n <i class=\"dw-table__sort pi\" [class.pi-arrow-down]=\"order === -1\" [class.pi-arrow-up]=\"order !== -1\"\n [class.is-sorted]=\"order === 1 || order === -1\" aria-hidden=\"true\"></i>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n @if (expansion()) {\n <th class=\"dw-table__expander-col\" scope=\"col\"><span class=\"dw-sr-only\">Expand</span></th>\n }\n @if (selectionMode() === 'checkbox') {\n <th class=\"dw-table__check-col\" scope=\"col\"><p-tableHeaderCheckbox ariaLabel=\"Select all rows\" /></th>\n }\n @for (col of visibleColumns(); track col.field) {\n @if (col.sortable) {\n <th\n scope=\"col\"\n [pSortableColumn]=\"col.sortField ?? col.field\"\n [ngClass]=\"[col.headerClass ?? '', col.fill ? 'dw-table__col--fill' : '']\"\n pFrozenColumn\n [frozen]=\"!!col.frozen\"\n [class.dw-table__frozen-edge]=\"col.field === frozenEdgeField()\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.minWidth ?? col.width\"\n [style.text-align]=\"col.align\"\n [attr.data-testid]=\"col.testId\"\n >\n <span class=\"dw-table__sort-head\">\n @if (headerTemplate(col.field); as htpl) {\n <ng-container *ngTemplateOutlet=\"htpl\" />\n } @else {\n {{ col.header }}\n }\n <p-sortIcon [field]=\"col.sortField ?? col.field\" />\n </span>\n </th>\n } @else {\n <th\n scope=\"col\"\n [ngClass]=\"[col.headerClass ?? '', col.fill ? 'dw-table__col--fill' : '']\"\n pFrozenColumn\n [frozen]=\"!!col.frozen\"\n [class.dw-table__frozen-edge]=\"col.field === frozenEdgeField()\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.minWidth ?? col.width\"\n [style.text-align]=\"col.align\"\n [attr.data-testid]=\"col.testId\"\n >\n @if (headerTemplate(col.field); as htpl) {\n <ng-container *ngTemplateOutlet=\"htpl\" />\n } @else {\n {{ col.header }}\n }\n </th>\n }\n @if (actionsStart() && $first) {\n <ng-container *ngTemplateOutlet=\"actionsHeaderCell\" />\n }\n }\n @if (hasActions() && !actionsStart()) {\n <ng-container *ngTemplateOutlet=\"actionsHeaderCell\" />\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-row let-index=\"rowIndex\" let-expanded=\"expanded\">\n <tr\n [class.dw-table__row--clickable]=\"rowClickable()\"\n [pSelectableRow]=\"selectionMode() === 'single' || selectionMode() === 'multiple' ? row : null\"\n [pSelectableRowDisabled]=\"!(selectionMode() === 'single' || selectionMode() === 'multiple')\"\n [attr.data-testid]=\"rowTestId() ? rowTestId()!(row) : null\"\n [ngClass]=\"rowClass() ? rowClass()!(row) : ''\"\n [attr.tabindex]=\"rowClickable() ? 0 : null\"\n (click)=\"onRowClick(row, $event)\"\n (mouseenter)=\"rowEnter.emit(row)\"\n (mouseleave)=\"rowLeave.emit(row)\"\n (auxclick)=\"onRowClick(row, $event)\"\n (keydown.enter)=\"onRowKey(row, $event)\"\n >\n @if (expansion()) {\n <td class=\"dw-table__expander-col\">\n @if (controlledExpansion()) {\n <!-- Controlled: the owner flips expandedRowKeys in response to rowToggle. -->\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [attr.aria-expanded]=\"!!expanded\"\n [attr.aria-label]=\"expanded ? 'Collapse row' : 'Expand row'\"\n (click)=\"$event.stopPropagation(); rowToggle.emit(row)\"\n >\n <ng-container *ngTemplateOutlet=\"expanderIcon; context: { $implicit: row, expanded: expanded }\" />\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"dw-icon-btn\"\n [pRowToggler]=\"row\"\n [attr.aria-expanded]=\"!!expanded\"\n [attr.aria-label]=\"expanded ? 'Collapse row' : 'Expand row'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"expanderIcon; context: { $implicit: row, expanded: expanded }\" />\n </button>\n }\n </td>\n }\n @if (selectionMode() === 'checkbox') {\n <td class=\"dw-table__check-col\" (click)=\"$event.stopPropagation()\">\n <p-tableCheckbox [value]=\"row\" ariaLabel=\"Select row\" [disabled]=\"!canSelect(row)\" />\n </td>\n }\n @for (col of visibleColumns(); track col.field) {\n <td pFrozenColumn [frozen]=\"!!col.frozen\" [class.dw-table__frozen-edge]=\"col.field === frozenEdgeField()\" [style.text-align]=\"col.align\" [ngClass]=\"[col.cellClass ?? '', col.fill ? 'dw-table__col--fill' : '']\">\n @if (cellTemplate(col.field); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: row, index: index }\" />\n } @else if (col.type === 'date') {\n <div class=\"dw-table__cell-text\" [ngClass]=\"textStyleClass(col)\" [pTooltip]=\"dateTooltip(row, col)\" dwTooltipIfTruncated tooltipPosition=\"top\" [showDelay]=\"300\" appendTo=\"body\">\n <dw-timestamp [value]=\"dateValue(row, col)\" [format]=\"col.dateFormat ?? 'relative'\" [placeholder]=\"col.emptyText ?? emptyCell\" />\n </div>\n } @else if (col.truncate === false) {\n <span [ngClass]=\"textStyleClass(col)\">{{ cellText(row, col) }}</span>\n } @else {\n <div class=\"dw-table__cell-text\" [ngClass]=\"textStyleClass(col)\" [pTooltip]=\"cellText(row, col)\" dwTooltipIfTruncated tooltipPosition=\"top\" [showDelay]=\"300\" appendTo=\"body\">\n {{ cellText(row, col) }}\n </div>\n }\n </td>\n @if (actionsStart() && $first) {\n <ng-container *ngTemplateOutlet=\"actionsBodyCell; context: { $implicit: row, index: index }\" />\n }\n }\n @if (hasActions() && !actionsStart()) {\n <ng-container *ngTemplateOutlet=\"actionsBodyCell; context: { $implicit: row, index: index }\" />\n }\n </tr>\n </ng-template>\n\n <!-- The actions column: at the end (frozen right) or, with actionsPlacement=\"start\", right\n after the first column (frozen left). Quick actions from the\n dwRowActions template, then the row menu's ⋮ when rowMenuItems gives the row any. -->\n <ng-template #actionsHeaderCell>\n <th scope=\"col\" class=\"dw-table__actions-col\" pFrozenColumn [frozen]=\"freezeActions()\"\n [alignFrozen]=\"actionsStart() ? 'left' : 'right'\"\n [class.dw-table__frozen-edge]=\"actionsStart() && freezeActions()\"\n [class.dw-table__frozen-edge-end]=\"!actionsStart() && freezeActions()\"\n [style.width]=\"actionsWidth()\" [style.min-width]=\"actionsWidth()\">\n {{ actionsHeader() }}\n </th>\n </ng-template>\n <ng-template #actionsBodyCell let-row let-index=\"index\">\n <td class=\"dw-table__actions-col\" pFrozenColumn [frozen]=\"freezeActions()\"\n [alignFrozen]=\"actionsStart() ? 'left' : 'right'\"\n [class.dw-table__frozen-edge]=\"actionsStart() && freezeActions()\"\n [class.dw-table__frozen-edge-end]=\"!actionsStart() && freezeActions()\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"dw-row-actions\" [class.dw-row-actions--reveal]=\"revealActions()\">\n @if (actions(); as act) {\n <ng-container *ngTemplateOutlet=\"act.template; context: { $implicit: row, index: index }\" />\n }\n @if (rowMenuItems(); as items) {\n @if (items(row).length) {\n <dw-icon-button icon=\"pi pi-ellipsis-v\" ariaLabel=\"Row actions\" [hasPopup]=\"true\"\n [testId]=\"rowMenuTestId()?.(row) ?? null\" (clicked)=\"openRowMenu(row, $event)\" />\n }\n }\n </div>\n </td>\n </ng-template>\n\n <ng-template pTemplate=\"expandedrow\" let-row let-index=\"rowIndex\">\n @if (expansion(); as exp) {\n @if (exp.rows()) {\n <ng-container *ngTemplateOutlet=\"exp.template; context: { $implicit: row, index: index }\" />\n } @else {\n <tr class=\"dw-table__expanded-row\">\n <td [attr.colspan]=\"colspan()\">\n <ng-container *ngTemplateOutlet=\"exp.template; context: { $implicit: row, index: index }\" />\n </td>\n </tr>\n }\n }\n </ng-template>\n\n <ng-template #expanderIcon let-row let-expanded=\"expanded\">\n @if (expanderLoading()?.(row)) {\n <i class=\"pi pi-spin pi-spinner\" aria-hidden=\"true\"></i>\n } @else {\n <i [class]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\" aria-hidden=\"true\"></i>\n }\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n @if (loading()) {\n @for (r of skeletonRowIndexes(); track r) {\n <tr class=\"dw-table__skeleton-row\" aria-hidden=\"true\">\n @for (c of skeletonCols(); track $index) {\n <td><p-skeleton width=\"70%\" height=\"12px\" /></td>\n }\n </tr>\n }\n } @else {\n <tr dw-table-empty [colspan]=\"colspan()\" [icon]=\"emptyIcon()\" [title]=\"emptyTitle()\" [text]=\"emptyText()\">\n <ng-content select=\"[dwTableEmptyActions]\" />\n </tr>\n }\n </ng-template>\n </p-table>\n @if (rowMenuItems()) {\n <dw-menu #rowMenu trigger=\"none\" [items]=\"rowMenuModel()\" ariaLabel=\"Row actions\" />\n }\n `,\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public generic default; `unknown` would break consumers' typing\nexport class DwTableComponent<T = any> {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n readonly value = input<readonly T[] | null>([]);\n readonly columns = input<readonly DwColumn<T>[]>([]);\n readonly dataKey = input<string | undefined>(undefined);\n readonly loading = input<boolean>(false);\n readonly skeletonRows = input<number>(6);\n readonly paginator = input<boolean>(true);\n /** Fixed page size, or `'fit'` to fill the viewport (re-measured on resize). */\n readonly rows = input<number | 'fit'>(10);\n /** Rounded, bordered card around the table and its paginator (e.g. a list page's main table). */\n readonly framed = input<boolean>(false);\n /** Where the paginator (page report + controls) sits under the table. */\n readonly paginatorAlign = input<'left' | 'center' | 'right'>('right');\n /** Shows a rows-per-page picker in the paginator. */\n readonly rowsPerPageOptions = input<number[] | null>(null);\n readonly first = model<number>(0);\n /** Server-side paging: `value` is one page, `totalRecords` the full count, and `pageChange` asks for the next. */\n readonly lazy = input<boolean>(false);\n readonly totalRecords = input<number | null>(null);\n readonly sortField = input<string | null>(null);\n readonly sortOrder = input<1 | -1>(1);\n readonly multiSortMeta = input<SortMeta[] | null>(null);\n /**\n * A third click on a sorted column clears its sort (asc → desc → unsorted) and\n * the rows fall back to the order `value` arrived in. `sortChange` then emits\n * `{ field: null, order: 0 }` (single) or the remaining `{ multisortmeta }`\n * (`[]` once nothing is sorted). On by default.\n */\n readonly removableSort = input<boolean>(true);\n /** Delegate sorting to the `sortFunction` output (PrimeNG customSort). */\n readonly customSort = input<boolean>(false);\n readonly filter = input<string>('');\n readonly globalFilterFields = input<string[]>([]);\n readonly selectionMode = input<'single' | 'multiple' | 'checkbox' | null>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- public generic default; `unknown` would break consumers' typing\n readonly selection = model<any>(null);\n /** Rows for which this returns false can't be selected (their checkbox is disabled). */\n readonly rowSelectable = input<((row: T) => boolean) | null>(null);\n readonly expandedRowKeys = input<Record<string, boolean>>({});\n /** The expander emits `rowToggle` and the owner updates `expandedRowKeys` (instead of p-table toggling itself). */\n readonly controlledExpansion = input<boolean>(false);\n /** Shows a spinner in a row's expander, e.g. while its expansion loads. */\n readonly expanderLoading = input<((row: T) => boolean) | null>(null);\n readonly rowClickable = input<boolean>(false);\n readonly rowTestId = input<((row: T) => string) | null>(null);\n /** Extra class(es) per body row, e.g. `row => ({ 'is-deprecated': row.deprecated })`. */\n readonly rowClass = input<((row: T) => string | string[] | Record<string, boolean> | null) | null>(null);\n readonly actionsHeader = input<string>('Actions');\n readonly actionsWidth = input<string>('100px');\n /** `start`: the actions column comes right after the first column, frozen left. */\n readonly actionsPlacement = input<'start' | 'end'>('end');\n /** A row's menu (Edit, Delete…): the actions column gets a ⋮ that opens it. */\n readonly rowMenuItems = input<((row: T) => DwMenuItem<T>[]) | null>(null);\n readonly rowMenuTestId = input<((row: T) => string) | null>(null);\n readonly freezeActions = input<boolean>(true);\n readonly revealActions = input<boolean>(false);\n readonly scrollHeight = input<string | null>(null);\n readonly minWidth = input<string | null>(null);\n /** `table-layout: fixed` so declared column widths are honoured and long text truncates. */\n readonly fixedLayout = input<boolean>(false);\n readonly emptyIcon = input<string>('pi pi-inbox');\n readonly emptyTitle = input<string>('No data');\n readonly emptyText = input<string>('');\n readonly styleClass = input<string>('');\n /** Tighter header and body cells, for small tables inside cards / widgets. */\n readonly compact = input<boolean>(false);\n /**\n * A vertical line between the sticky (frozen) columns and the ones that scroll under them —\n * after the last left-frozen column and before the frozen actions column. Shown only while the\n * table actually scrolls sideways.\n */\n readonly frozenDivider = input<boolean>(true);\n readonly testId = input<string | null>(null);\n\n readonly rowClick = output<DwRowClickEvent<T>>();\n /** Expander pressed under `controlledExpansion`. */\n readonly rowToggle = output<T>();\n /** Pointer entered / left a body row (e.g. to preview what a click would select). */\n readonly rowEnter = output<T>();\n readonly rowLeave = output<T>();\n readonly pageChange = output<TablePageEvent>();\n readonly sortChange = output<unknown>();\n readonly sortFunction = output<SortEvent>();\n\n readonly table = viewChild<Table>('table');\n /** Every frozen header / body cell (PrimeNG's pFrozenColumn). */\n private readonly frozenCells = viewChildren(FrozenColumn);\n readonly cells = contentChildren(DwCellDirective);\n readonly headers = contentChildren(DwHeaderDirective);\n readonly actions = contentChild(DwRowActionsDirective);\n readonly expansion = contentChild(DwRowExpansionDirective);\n\n private readonly fittedRows = signal(10);\n /**\n * Order of each sorted field, and whether the user flipped it from ascending\n * to descending — only then does the next click clear it (a column that\n * starts descending, or is re-sorted on a data refresh, does not).\n */\n private sortState = new Map<string, { order: number; cycled: boolean }>();\n\n readonly tableValue = computed<T[]>(() => (this.loading() ? [] : [...(this.value() ?? [])]));\n /** Rows left after the global filter (null until p-table filters). */\n readonly filteredCount = signal<number | null>(null);\n /** Anything to page through? The empty state shows no paginator (\"0 to 0 of 0\"). */\n readonly hasRows = computed(() => {\n if (this.lazy()) return (this.totalRecords() ?? 0) > 0;\n const count = this.filter() ? (this.filteredCount() ?? this.tableValue().length) : this.tableValue().length;\n return count > 0;\n });\n readonly rowSelectionMode = computed<'single' | 'multiple' | null>(() => {\n const mode = this.selectionMode();\n return mode === 'single' || mode === 'multiple' ? mode : null;\n });\n /** PrimeNG passes `{ data, index }`; adapt the row-only predicate (every row when none is set). */\n readonly primeRowSelectable = computed(() => {\n const fn = this.rowSelectable();\n return (e: { data: T; index: number }): boolean => (fn ? fn(e.data) : true);\n });\n readonly visibleColumns = computed(() => this.columns().filter((c) => !c.hidden));\n /** The last left-frozen column, which carries the frozen divider. */\n readonly frozenEdgeField = computed(() => {\n // A frozen actions column at the start carries the divider itself.\n if (this.hasActions() && this.actionsStart() && this.freezeActions()) return null;\n const frozen = this.visibleColumns().filter((c) => c.frozen);\n return frozen.length ? frozen[frozen.length - 1].field : null;\n });\n readonly hasActions = computed(() => !!this.actions() || !!this.rowMenuItems());\n readonly actionsStart = computed(() => this.actionsPlacement() === 'start');\n /** Items of the row whose ⋮ was last opened (one shared menu for all rows). */\n readonly rowMenuModel = signal<DwMenuItem<T>[]>([]);\n private readonly rowMenu = viewChild<DwMenuComponent<T>>('rowMenu');\n\n openRowMenu(row: T, event: Event): void {\n this.rowMenuModel.set(this.rowMenuItems()?.(row) ?? []);\n this.rowMenu()?.toggle(event);\n }\n\n /** Whether the rows overflow sideways (the frozen divider only shows then). */\n readonly hasHScroll = signal(false);\n readonly colspan = computed(\n () =>\n this.visibleColumns().length +\n (this.hasActions() ? 1 : 0) +\n (this.expansion() ? 1 : 0) +\n (this.selectionMode() === 'checkbox' ? 1 : 0),\n );\n readonly skeletonRowIndexes = computed(() => Array.from({ length: Math.max(0, this.skeletonRows()) }, (_, i) => i));\n readonly skeletonCols = computed(() => Array.from({ length: Math.max(1, this.colspan()) }));\n readonly resolvedRows = computed(() => (this.rows() === 'fit' ? this.fittedRows() : (this.rows() as number)));\n\n constructor() {\n effect(() => {\n const text = this.filter();\n this.table()?.filterGlobal(text, 'contains');\n });\n\n // Lazy tables only: p-table counts a local value itself (and its filtered subset).\n effect(() => {\n const table = this.table();\n if (table && this.lazy()) {\n table.totalRecords = this.totalRecords() ?? 0;\n }\n });\n\n // Track sideways overflow for the frozen divider. The scroll container may not exist yet when\n // this first runs (loading), so it is looked up on every measure; the host is observed for\n // viewport changes, and rows / columns changing re-measure once they have painted.\n effect((onCleanup) => {\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.measureHScroll());\n observer.observe(this.host.nativeElement);\n onCleanup(() => observer.disconnect());\n });\n effect(() => {\n this.tableValue();\n this.visibleColumns();\n untracked(() => afterNextRender(() => this.measureHScroll(), { injector: this.injector }));\n });\n\n // PrimeNG re-measures a frozen cell only when that cell itself resizes, so when an earlier\n // frozen column changes width (e.g. a fill column shrinks as columns are added) the later\n // ones keep a stale sticky offset and scrolled cells show through the gap. Watch them all\n // and re-place every frozen cell whenever any of them, or the table, changes size.\n effect((onCleanup) => {\n const cells = this.frozenCells();\n const tableEl = this.table()?.el?.nativeElement as HTMLElement | undefined;\n if (!cells.length || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => cells.forEach((c) => c.updateStickyPosition()));\n cells.forEach((c) => observer.observe(c.el.nativeElement));\n if (tableEl) observer.observe(tableEl);\n onCleanup(() => observer.disconnect());\n });\n // …and once the cells have rendered after a column change (shown / hidden / re-sized).\n effect(() => {\n this.visibleColumns();\n untracked(() =>\n afterNextRender(() => this.frozenCells().forEach((c) => c.updateStickyPosition()), { injector: this.injector }),\n );\n });\n\n afterNextRender(() => {\n if (this.rows() !== 'fit') {\n return;\n }\n const measure = () => this.measureFit();\n measure();\n window.addEventListener('resize', measure);\n this.destroyRef.onDestroy(() => window.removeEventListener('resize', measure));\n });\n\n // Re-fit once real rows have painted: the first pass usually runs on the loading / empty\n // table, where only the fallback row height is known, and taller rows then overflow.\n effect(() => {\n this.tableValue();\n this.loading();\n if (this.rows() === 'fit') {\n untracked(() => afterNextRender(() => this.measureFit(), { injector: this.injector }));\n }\n });\n }\n\n private measureHScroll(): void {\n const container = this.host.nativeElement.querySelector<HTMLElement>('.p-datatable-table-container');\n this.hasHScroll.set(!!container && container.scrollWidth > container.clientWidth + 1);\n }\n\n /** Fits the page size; a changed size is checked once more after it paints (rows can tip a bound table into overflow). */\n private measureFit(settle = 2): void {\n const rows = fitTableRows(this.host.nativeElement);\n if (rows !== this.fittedRows()) {\n this.fittedRows.set(rows);\n if (settle > 0) {\n afterNextRender(() => this.measureFit(settle - 1), { injector: this.injector });\n }\n }\n }\n\n canSelect(row: T): boolean {\n const fn = this.rowSelectable();\n return fn ? fn(row) : true;\n }\n\n headerTemplate(field: string): TemplateRef<unknown> | null {\n return this.headers().find((h) => h.field() === field)?.template ?? null;\n }\n\n cellTemplate(field: string): TemplateRef<{ $implicit: unknown; index: number }> | null {\n return this.cells().find((c) => c.field() === field)?.template ?? null;\n }\n\n readonly emptyCell = EMPTY_DATE;\n\n /** The raw value of a default cell: `format(row)` when given, else `row[field]`. */\n cellValue(row: T, col: DwColumn<T>): unknown {\n return col.format ? col.format(row) : this.resolve(row, col.field);\n }\n\n cellText(row: T, col: DwColumn<T>): string {\n const value = this.cellValue(row, col);\n if (value === null || value === undefined || value === '') return col.emptyText ?? this.emptyCell;\n return value instanceof Date ? formatDateTime(value) : String(value);\n }\n\n /** The instant of a date cell. */\n dateValue(row: T, col: DwColumn<T>): DateLike {\n return this.cellValue(row, col) as DateLike;\n }\n\n /** The full date-time of a date cell, shown on hover when the cell cuts it off. */\n dateTooltip(row: T, col: DwColumn<T>): string {\n const value = this.dateValue(row, col);\n return toDate(value) ? formatDateTime(value) : '';\n }\n\n textStyleClass(col: DwColumn<T>): string {\n return col.textStyle === 'strong' ? 'dw-body-strong' : col.textStyle === 'meta' ? 'dw-meta' : '';\n }\n\n onPage(event: TablePageEvent): void {\n this.first.set(event.first);\n this.pageChange.emit(event);\n }\n\n onSort(event: SortMeta | { multisortmeta?: SortMeta[] }): void {\n const multi = 'multisortmeta' in event;\n const metas = multi ? (event.multisortmeta ?? []) : [event as SortMeta];\n const removed = new Set<string>();\n const next = new Map<string, { order: number; cycled: boolean }>();\n for (const meta of metas) {\n const prev = this.sortState.get(meta.field);\n if (this.removableSort() && prev?.cycled && prev.order === -1 && meta.order === 1) {\n removed.add(meta.field);\n continue;\n }\n const cycled = prev?.order === meta.order ? prev.cycled : prev?.order === 1 && meta.order === -1;\n next.set(meta.field, { order: meta.order, cycled });\n }\n this.sortState = next;\n\n const table = this.table();\n if (!removed.size || !table) {\n this.sortChange.emit(event);\n return;\n }\n this.clearSort(table, multi, metas.filter((m) => !removed.has(m.field)));\n }\n\n onRowClick(row: T, event: MouseEvent): void {\n if (!this.rowClickable()) {\n return;\n }\n if (event.type === 'auxclick' && event.button !== 1) {\n return;\n }\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, a, input, [role=checkbox], .dw-row-actions')) {\n return;\n }\n const newTab = event.metaKey || event.ctrlKey || event.shiftKey || event.button === 1;\n this.rowClick.emit({ row, event, newTab });\n }\n\n onRowKey(row: T, event: Event): void {\n if (!this.rowClickable() || event.target !== event.currentTarget) {\n return;\n }\n this.rowClick.emit({ row, event: event as MouseEvent, newTab: false });\n }\n\n /**\n * Drops the cleared field(s) from p-table's sort (headers included). Local data\n * goes back to its original order and is re-sorted by whatever sort remains.\n */\n private clearSort(table: Table, multi: boolean, remaining: SortMeta[]): void {\n if (multi) {\n table._multiSortMeta = remaining.length ? remaining.map((m) => ({ ...m })) : null;\n } else {\n table._sortField = null;\n table._sortOrder = table.defaultSortOrder;\n }\n if (!this.lazy()) {\n table.value = [...(this.value() ?? [])];\n }\n if (remaining.length) {\n table.sortMultiple(); // re-sorts and re-emits onSort with the remaining fields\n return;\n }\n table.tableService.onSort(null);\n if (!this.lazy() && table.hasFilter()) {\n table._filter();\n }\n this.sortChange.emit(multi ? { multisortmeta: [] } : { field: null, order: 0 });\n }\n\n private resolve(row: T, path: string): unknown {\n return path.split('.').reduce<unknown>((acc, key) => (acc == null ? acc : (acc as Record<string, unknown>)[key]), row);\n }\n}\n\nexport const DW_TABLE = [DwTableComponent, DwCellDirective, DwHeaderDirective, DwRowActionsDirective, DwRowExpansionDirective] as const;\n","import { ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect';\n\n/**\n * \"Customize table\" toolbar control: picks the optional columns of a dw-table.\n *\n * ```html\n * <dw-column-picker [options]=\"customizableColumns\" [(selected)]=\"selectedColumns\"\n * (selectedChange)=\"persistColumns()\" />\n * ```\n * Options are objects; `optionLabel` names the label field (default `header`).\n */\n@Component({\n selector: 'dw-column-picker',\n standalone: true,\n imports: [FormsModule, MultiSelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'dw-column-picker-host' },\n template: `\n <p-multiselect\n [options]=\"options()\"\n [ngModel]=\"selected()\"\n (ngModelChange)=\"onChange($event)\"\n [optionLabel]=\"optionLabel()\"\n [showToggleAll]=\"false\"\n [filter]=\"options().length > 8\"\n [showHeader]=\"options().length > 8\"\n appendTo=\"body\"\n styleClass=\"dw-column-picker\"\n placeholder=\" \"\n [attr.data-testid]=\"testId()\"\n [ariaLabel]=\"label()\"\n >\n <ng-template #selecteditems>\n <span class=\"dw-column-picker__label\">\n <i class=\"pi pi-sliders-h\" aria-hidden=\"true\"></i>\n {{ label() }}\n </span>\n </ng-template>\n <ng-template #dropdownicon><span></span></ng-template>\n </p-multiselect>\n `,\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- public generic default; `unknown` would break consumers' typing\nexport class DwColumnPickerComponent<T = any> {\n readonly options = input<T[]>([]);\n readonly selected = model<T[]>([]);\n readonly optionLabel = input<string>('header');\n readonly label = input<string>('Customize table');\n readonly testId = input<string | null>(null);\n\n /** Fires after `selected` changes from user interaction (convenient for persisting). */\n readonly changed = output<T[]>();\n\n onChange(value: T[]): void {\n this.selected.set(value ?? []);\n this.changed.emit(this.selected());\n }\n}\n","import { DOCUMENT, Injectable, InjectionToken, inject, signal } from '@angular/core';\n\nexport type DwTheme = 'light' | 'dark';\n\n/** localStorage key holding the viewer's theme choice (default for `CrystalConfig.theme.storageKey`). */\nexport const DW_THEME_STORAGE_KEY = 'dw-theme';\n\nexport interface CrystalThemeConfig {\n /**\n * Set `data-theme` on <html> at start-up and on every switch. `false` for federated elements: the host page owns\n * its <html>. Default true.\n */\n apply?: boolean;\n /** Theme used until the viewer picks one. Default 'light'. */\n initial?: DwTheme;\n /** localStorage key for the viewer's choice. Default 'dw-theme' (kept stable, so stored choices survive upgrades). */\n storageKey?: string;\n}\n\n/** What `provideCrystal()` configures: the theme. */\nexport interface CrystalConfig {\n theme?: CrystalThemeConfig;\n}\n\n/** The config given to `provideCrystal()`; `{}` (all defaults) without it. */\nexport const DW_CRYSTAL_CONFIG = new InjectionToken<CrystalConfig>('DW_CRYSTAL_CONFIG', {\n providedIn: 'root',\n factory: () => ({}),\n});\n\n/**\n * Light / dark theme switch. The theme is the `data-theme` attribute on\n * <html>: semantic-dark.css re-points the --dw-* tokens under\n * [data-theme=\"dark\"] and PrimeNG's darkModeSelector follows the same\n * attribute. The choice is remembered per browser (light until chosen).\n *\n * `provideCrystal()` applies it once at start-up so a stored dark choice\n * doesn't flash light. With `theme.apply: false` (federated elements on a\n * page crystal doesn't own) it never touches <html>.\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly config = inject(DW_CRYSTAL_CONFIG).theme ?? {};\n private readonly storageKey = this.config.storageKey ?? DW_THEME_STORAGE_KEY;\n private readonly applies = this.config.apply !== false;\n\n readonly theme = signal<DwTheme>(this.readStored() ?? this.config.initial ?? 'light');\n\n /** Puts the current theme on <html> (unless `theme.apply` is false). */\n init(): void {\n this.apply(this.theme());\n }\n\n setTheme(theme: DwTheme): void {\n this.theme.set(theme);\n this.apply(theme);\n try {\n localStorage.setItem(this.storageKey, theme);\n } catch {\n // Storage can be unavailable (private mode, blocked site data): the switch still works for this page.\n }\n }\n\n toggle(): void {\n this.setTheme(this.theme() === 'dark' ? 'light' : 'dark');\n }\n\n private apply(theme: DwTheme): void {\n if (this.applies) {\n this.document.documentElement.setAttribute('data-theme', theme);\n }\n }\n\n private readStored(): DwTheme | null {\n try {\n const value = localStorage.getItem(this.storageKey);\n return value === 'dark' || value === 'light' ? value : null;\n } catch {\n return null;\n }\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { CrystalConfig, DW_CRYSTAL_CONFIG, ThemeService } from './theme.service';\n\n/**\n * Crystal's app-level setup: the theme. With `theme.apply` (the default) it puts the stored or\n * initial theme on <html> before the first render, so a dark choice doesn't flash light.\n *\n * ```ts\n * providers: [provideCrystal(), provideCrystalPrimeNG()] // an app\n * providers: [provideCrystal({ theme: { apply: false } }), provideCrystalPrimeNG()] // federated elements\n * ```\n */\nexport function provideCrystal(config: CrystalConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: DW_CRYSTAL_CONFIG, useValue: config },\n config.theme?.apply === false ? [] : provideAppInitializer(() => inject(ThemeService).init()),\n ]);\n}\n","// GENERATED by tools/generate-host-theme.mjs from libs/theme/src — do not edit.\nexport const DW_HOST_THEME_CSS = \":root {\\n --dw-primary-50: #ecf3ff;\\n --dw-primary-100: #d6e5ff;\\n --dw-primary-200: #b0ccff;\\n --dw-primary-300: #82abff;\\n --dw-primary-400: #4d84ff;\\n --dw-primary-500: #2463f5;\\n --dw-primary-600: #144ce6;\\n --dw-primary-700: #113dc2;\\n --dw-primary-800: #16359b;\\n --dw-primary-900: #19327b;\\n --dw-primary-950: #101d49;\\n --dw-neutral-0: #ffffff;\\n --dw-neutral-50: #f8fafc;\\n --dw-neutral-100: #f1f5f9;\\n --dw-neutral-200: #e2e8f0;\\n --dw-neutral-300: #cbd5e1;\\n --dw-neutral-400: #94a3b8;\\n --dw-neutral-500: #64748b;\\n --dw-neutral-600: #475569;\\n --dw-neutral-700: #334155;\\n --dw-neutral-800: #1e293b;\\n --dw-neutral-900: #0f172a;\\n --dw-neutral-950: #020617;\\n --dw-neutral-1000: #000000;\\n --dw-editor-dark-900: #1e1e1e;\\n --dw-sky-100: #e2eef7;\\n --dw-success-50: #ecfdf5;\\n --dw-success-100: #e7f7ee;\\n --dw-success-200: #b7e8cc;\\n --dw-success-300: #6ee7b7;\\n --dw-success-500: #10b981;\\n --dw-success-600: #059669;\\n --dw-success-700: #027a48;\\n --dw-success-800: #065f46;\\n --dw-warning-50: #fffbeb;\\n --dw-warning-100: #fef3c7;\\n --dw-warning-200: #fde68a;\\n --dw-warning-300: #fcd34d;\\n --dw-warning-500: #f59e0b;\\n --dw-warning-600: #d97706;\\n --dw-warning-700: #c2410c;\\n --dw-warning-800: #92400e;\\n --dw-amber-700: #b45309;\\n --dw-orange-100: #ffedd5;\\n --dw-danger-50: #fef2f2;\\n --dw-danger-100: #fee4e2;\\n --dw-danger-200: #fecdca;\\n --dw-danger-300: #fca5a5;\\n --dw-danger-500: #ef4444;\\n --dw-danger-600: #dc2626;\\n --dw-danger-700: #b91c1c;\\n --dw-danger-800: #b42318;\\n --dw-danger-900: #991b1b;\\n --dw-coolgray-100: #f2f4f7;\\n --dw-coolgray-300: #d0d5dd;\\n --dw-coolgray-600: #475467;\\n --dw-blue-50: #eef4ff;\\n --dw-blue-100: #e1effe;\\n --dw-blue-600: #2563eb;\\n --dw-blue-800: #1e429f;\\n --dw-violet-50: #f5f1ff;\\n --dw-violet-100: #edebfe;\\n --dw-violet-200: #ddd6fe;\\n --dw-violet-500: #8b5cf6;\\n --dw-violet-600: #7c3aed;\\n --dw-violet-800: #5521b5;\\n --dw-cyan-100: #d5f5f6;\\n --dw-cyan-500: #06b6d4;\\n --dw-cyan-700: #0e7490;\\n --dw-pink-100: #fce7f3;\\n --dw-pink-500: #ec4899;\\n --dw-pink-700: #be185d;\\n --dw-teal-500: #14b8a6;\\n --dw-lime-500: #84cc16;\\n --dw-indigo-500: #6366f1;\\n --dw-tag-red: #ef4444;\\n --dw-tag-orange: #f97316;\\n --dw-tag-amber: #f59e0b;\\n --dw-tag-yellow: #eab308;\\n --dw-tag-lime: #84cc16;\\n --dw-tag-green: #22c55e;\\n --dw-tag-emerald: #10b981;\\n --dw-tag-teal: #14b8a6;\\n --dw-tag-cyan: #06b6d4;\\n --dw-tag-sky: #0ea5e9;\\n --dw-tag-blue: #3b82f6;\\n --dw-tag-indigo: #6366f1;\\n --dw-tag-violet: #8b5cf6;\\n --dw-tag-purple: #a855f7;\\n --dw-tag-fuchsia: #d946ef;\\n --dw-tag-pink: #ec4899;\\n --dw-alpha-ink-05: rgba(16, 32, 64, 0.05);\\n --dw-alpha-ink-06: rgba(15, 23, 42, 0.06);\\n --dw-alpha-ink-12: rgba(15, 23, 42, 0.12);\\n --dw-alpha-ink-22: rgba(15, 23, 42, 0.22);\\n --dw-alpha-black-08: rgba(0, 0, 0, 0.08);\\n --dw-alpha-black-10: rgba(0, 0, 0, 0.1);\\n --dw-alpha-black-12: rgba(0, 0, 0, 0.12);\\n --dw-alpha-black-20: rgba(0, 0, 0, 0.2);\\n --dw-alpha-black-25: rgba(0, 0, 0, 0.25);\\n --dw-alpha-black-40: rgba(0, 0, 0, 0.4);\\n --dw-alpha-black-60: rgba(0, 0, 0, 0.6);\\n --dw-alpha-primary-15: rgba(36, 99, 245, 0.15);\\n --dw-alpha-primary-24: rgba(36, 99, 245, 0.24);\\n --dw-alpha-primary-28: rgba(36, 99, 245, 0.28);\\n --dw-alpha-primary-35: rgba(36, 99, 245, 0.35);\\n --dw-alpha-primary-55: rgba(36, 99, 245, 0.55);\\n --dw-alpha-primary-60: rgba(36, 99, 245, 0.6);\\n --dw-alpha-danger-25: rgba(185, 28, 28, 0.25);\\n --dw-alpha-danger-30: rgba(185, 28, 28, 0.3);\\n --dw-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\\n --dw-font-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace;\\n --dw-font-size-10: 10px;\\n --dw-font-size-11: 11px;\\n --dw-font-size-12: 12px;\\n --dw-font-size-13: 13px;\\n --dw-font-size-14: 14px;\\n --dw-font-size-16: 16px;\\n --dw-font-size-18: 18px;\\n --dw-font-size-20: 20px;\\n --dw-font-size-24: 24px;\\n --dw-line-height-14: 14px;\\n --dw-line-height-16: 16px;\\n --dw-line-height-20: 20px;\\n --dw-line-height-24: 24px;\\n --dw-line-height-28: 28px;\\n --dw-font-weight-regular: 400;\\n --dw-font-weight-medium: 500;\\n --dw-font-weight-semibold: 600;\\n --dw-font-weight-bold: 700;\\n --dw-space-0: 0;\\n --dw-space-0_5: 2px;\\n --dw-space-1: 4px;\\n --dw-space-1_5: 6px;\\n --dw-space-2: 8px;\\n --dw-space-2_5: 10px;\\n --dw-space-3: 12px;\\n --dw-space-4: 16px;\\n --dw-space-5: 20px;\\n --dw-space-6: 24px;\\n --dw-space-7: 28px;\\n --dw-space-8: 32px;\\n --dw-space-10: 40px;\\n --dw-space-12: 48px;\\n --dw-radius-xs: 2px;\\n --dw-radius-sm: 4px;\\n --dw-radius-md: 6px;\\n --dw-radius-lg: 8px;\\n --dw-radius-xl: 12px;\\n --dw-radius-pill: 16px;\\n --dw-radius-full: 9999px;\\n --dw-radius-round: 50%;\\n --dw-dur-micro: 120ms;\\n --dw-dur-enter: 190ms;\\n --dw-dur-pop: 240ms;\\n --dw-dur-loop: 1700ms;\\n --dw-ease: cubic-bezier(0.2, 0.6, 0.2, 1);\\n --dw-ease-inout: cubic-bezier(0.4, 0, 0.2, 1);\\n --dw-z-base: 1;\\n --dw-z-sticky: 10;\\n --dw-z-header: 100;\\n --dw-z-dropdown: 1000;\\n --dw-z-overlay: 1100;\\n --dw-z-modal: 1200;\\n --dw-z-toast: 1300;\\n --dw-size-control-sm: 28px;\\n --dw-size-control: 32px;\\n --dw-size-control-lg: 36px;\\n --dw-size-icon-btn: 28px;\\n --dw-size-topbar: 48px;\\n --dw-size-sidebar: 248px;\\n --dw-size-table-header: 38px;\\n --dw-size-table-row: 42px;\\n --dw-width-dialog-sm: 400px;\\n --dw-width-dialog-md: 560px;\\n --dw-width-dialog-lg: 760px;\\n --dw-width-dialog-xl: 960px;\\n --dw-width-drawer-sm: 500px;\\n --dw-width-drawer-md: 720px;\\n --dw-width-drawer-lg: 950px;\\n}\\n:root,\\n[data-theme='light'] {\\n color-scheme: light;\\n --dw-text: var(--dw-neutral-700);\\n --dw-text-strong: var(--dw-neutral-800);\\n --dw-text-label: var(--dw-neutral-600);\\n --dw-text-secondary: var(--dw-neutral-500);\\n --dw-text-muted: var(--dw-neutral-400);\\n --dw-text-inverse: var(--dw-neutral-0);\\n --dw-text-link: var(--dw-primary-600);\\n --dw-text-link-hover: var(--dw-primary-700);\\n --dw-surface: var(--dw-neutral-0);\\n --dw-surface-ground: var(--dw-sky-100);\\n --dw-surface-rail: var(--dw-neutral-50);\\n --dw-surface-section: var(--dw-neutral-50);\\n --dw-surface-hover: var(--dw-neutral-50);\\n --dw-surface-pressed: var(--dw-neutral-100);\\n --dw-surface-selected: var(--dw-primary-50);\\n --dw-surface-disabled: var(--dw-neutral-100);\\n --dw-surface-inverse: var(--dw-neutral-800);\\n --dw-surface-editor-dark: var(--dw-editor-dark-900);\\n --dw-code-text: var(--dw-pink-500);\\n --dw-scrim: var(--dw-alpha-black-40);\\n --dw-border: var(--dw-neutral-200);\\n --dw-border-subtle: var(--dw-neutral-100);\\n --dw-attention-fg: var(--dw-amber-700);\\n --dw-border-strong: var(--dw-neutral-300);\\n --dw-border-hover: var(--dw-neutral-400);\\n --dw-border-accent: var(--dw-primary-200);\\n --dw-accent: var(--dw-primary-500);\\n --dw-accent-hover: var(--dw-primary-600);\\n --dw-accent-active: var(--dw-primary-700);\\n --dw-accent-tint: var(--dw-primary-50);\\n --dw-accent-tint-strong: var(--dw-primary-100);\\n --dw-accent-text: var(--dw-primary-700);\\n --dw-accent-subtle: var(--dw-primary-200);\\n --dw-accent-soft: var(--dw-primary-400);\\n --dw-fill-subtle: var(--dw-neutral-200);\\n --dw-fill-muted: var(--dw-neutral-300);\\n --dw-fill-strong: var(--dw-neutral-500);\\n --dw-shadow-color: var(--dw-neutral-1000);\\n --dw-focus-border: var(--dw-primary-500);\\n --dw-focus-ring: 0 0 0 3px var(--dw-alpha-primary-24);\\n --dw-focus-ring-danger: 0 0 0 3px var(--dw-alpha-danger-30);\\n --dw-focus-border-ring: inset 0 0 0 0.5px var(--dw-focus-border);\\n --dw-focus-border-ring-danger: inset 0 0 0 0.5px var(--dw-danger-solid);\\n --dw-status-success-fg: var(--dw-success-700);\\n --dw-status-success-bg: var(--dw-success-100);\\n --dw-status-success-border: var(--dw-success-200);\\n --dw-status-success-solid: var(--dw-success-500);\\n --dw-status-warning-fg: var(--dw-warning-800);\\n --dw-status-warning-bg: var(--dw-warning-50);\\n --dw-status-warning-border: var(--dw-warning-200);\\n --dw-status-warning-solid: var(--dw-warning-500);\\n --dw-status-danger-fg: var(--dw-danger-700);\\n --dw-status-danger-bg: var(--dw-danger-100);\\n --dw-status-danger-border: var(--dw-danger-200);\\n --dw-status-danger-solid: var(--dw-danger-700);\\n --dw-status-success-on-inverse: var(--dw-success-300);\\n --dw-status-danger-on-inverse: var(--dw-danger-300);\\n --dw-status-info-fg: var(--dw-primary-700);\\n --dw-status-info-bg: var(--dw-primary-50);\\n --dw-status-info-border: var(--dw-primary-200);\\n --dw-status-info-solid: var(--dw-primary-500);\\n --dw-status-neutral-fg: var(--dw-coolgray-600);\\n --dw-status-neutral-bg: var(--dw-coolgray-100);\\n --dw-status-neutral-border: var(--dw-coolgray-300);\\n --dw-status-neutral-solid: var(--dw-neutral-400);\\n --dw-status-paused-fg: var(--dw-warning-800);\\n --dw-status-paused-bg: var(--dw-warning-100);\\n --dw-danger: var(--dw-danger-700);\\n --dw-danger-hover: var(--dw-danger-900);\\n --dw-danger-tint: var(--dw-danger-50);\\n --dw-danger-solid: var(--dw-danger-700);\\n --dw-danger-fill: var(--dw-danger-700);\\n --dw-entity-workflow-bg: var(--dw-blue-50);\\n --dw-entity-workflow-fg: var(--dw-blue-600);\\n --dw-entity-reasoning-bg: var(--dw-violet-50);\\n --dw-entity-reasoning-fg: var(--dw-violet-600);\\n --dw-entity-unknown-bg: var(--dw-neutral-100);\\n --dw-entity-unknown-fg: var(--dw-neutral-500);\\n --dw-icon-tint-orange: var(--dw-warning-50);\\n --dw-icon-tint-cyan: var(--dw-cyan-100);\\n --dw-icon-tint-pink: var(--dw-pink-100);\\n --dw-icon-tint-cyan-fg: var(--dw-cyan-700);\\n --dw-icon-tint-pink-fg: var(--dw-pink-700);\\n --dw-tree-spine: var(--dw-neutral-300);\\n --dw-deco-violet: var(--dw-violet-500);\\n --dw-deco-violet-subtle: var(--dw-violet-200);\\n --dw-deco-violet-fg: var(--dw-violet-800);\\n --dw-deco-cyan: var(--dw-cyan-500);\\n --dw-deco-pink: var(--dw-pink-500);\\n --dw-deco-teal: var(--dw-teal-500);\\n --dw-deco-lime: var(--dw-lime-500);\\n --dw-deco-indigo: var(--dw-indigo-500);\\n --dw-btn-primary-grad: linear-gradient(135deg, var(--dw-primary-400), var(--dw-primary-600));\\n --dw-btn-primary-grad-hover: linear-gradient(135deg, var(--dw-primary-500), var(--dw-primary-700));\\n --dw-btn-primary-grad-active: linear-gradient(135deg, var(--dw-primary-600), var(--dw-primary-800));\\n --dw-btn-primary-shadow: 0 4px 12px -5px var(--dw-alpha-primary-55);\\n --dw-btn-primary-shadow-hover: 0 6px 16px -6px var(--dw-alpha-primary-60);\\n --dw-btn-primary-focus-ring: 0 0 0 2px var(--dw-neutral-0), 0 0 0 4px var(--dw-alpha-primary-35);\\n --dw-btn-secondary-grad: linear-gradient(135deg, var(--dw-neutral-50), var(--dw-neutral-200));\\n --dw-btn-secondary-grad-hover: linear-gradient(135deg, var(--dw-neutral-100), var(--dw-neutral-300));\\n --dw-shadow-xs: 0 1px 2px var(--dw-alpha-ink-05);\\n --dw-shadow-sm: 0 1px 2px var(--dw-alpha-ink-06);\\n --dw-shadow-md: 0 4px 12px var(--dw-alpha-black-10);\\n --dw-shadow-card-hover: 0 6px 16px -6px var(--dw-alpha-primary-28), 0 2px 6px var(--dw-alpha-ink-06);\\n --dw-shadow-popover: 0 4px 12px var(--dw-alpha-black-10);\\n --dw-shadow-menu: 0 4px 16px var(--dw-alpha-black-10);\\n --dw-shadow-modal: 0 20px 60px var(--dw-alpha-black-25);\\n --dw-shadow-drawer: -4px 0 24px var(--dw-alpha-black-12);\\n --dw-shadow-header: 0 1px 0 var(--dw-neutral-200);\\n --dw-shadow-inset: inset 0 1px 2px var(--dw-alpha-ink-12);\\n --dw-scrollbar-thumb: var(--dw-neutral-300);\\n --dw-scrollbar-thumb-hover: var(--dw-neutral-400);\\n --dw-scrollbar-track: transparent;\\n --dw-skeleton-base: var(--dw-neutral-100);\\n --dw-skeleton-shine: var(--dw-neutral-50);\\n --dw-chart-1: var(--dw-primary-500);\\n --dw-chart-2: var(--dw-violet-500);\\n --dw-chart-3: var(--dw-success-500);\\n --dw-chart-4: var(--dw-warning-500);\\n --dw-chart-5: var(--dw-cyan-500);\\n --dw-chart-6: var(--dw-pink-500);\\n --dw-chart-7: var(--dw-teal-500);\\n --dw-chart-8: var(--dw-danger-500);\\n --dw-chart-grid: var(--dw-neutral-200);\\n --dw-chart-axis: var(--dw-neutral-500);\\n --dw-radius-control: var(--dw-radius-md);\\n --dw-radius-card: var(--dw-radius-lg);\\n --dw-radius-overlay: var(--dw-radius-lg);\\n --dw-radius-modal: var(--dw-radius-xl);\\n}\\n[data-theme='dark'] {\\n color-scheme: dark;\\n --dw-text: var(--dw-neutral-200);\\n --dw-text-strong: var(--dw-neutral-50);\\n --dw-text-label: var(--dw-neutral-300);\\n --dw-text-secondary: var(--dw-neutral-400);\\n --dw-text-muted: var(--dw-neutral-500);\\n --dw-text-inverse: var(--dw-neutral-0);\\n --dw-text-link: var(--dw-primary-300);\\n --dw-text-link-hover: var(--dw-primary-200);\\n --dw-surface: var(--dw-neutral-900);\\n --dw-surface-ground: var(--dw-neutral-950);\\n --dw-surface-rail: color-mix(in srgb, var(--dw-neutral-900) 60%, var(--dw-neutral-950));\\n --dw-surface-section: color-mix(in srgb, var(--dw-neutral-800) 55%, var(--dw-neutral-900));\\n --dw-surface-hover: color-mix(in srgb, var(--dw-neutral-800) 60%, var(--dw-neutral-900));\\n --dw-surface-pressed: var(--dw-neutral-800);\\n --dw-surface-selected: color-mix(in srgb, var(--dw-primary-500) 18%, var(--dw-neutral-900));\\n --dw-surface-disabled: var(--dw-neutral-800);\\n --dw-surface-inverse: var(--dw-neutral-700);\\n --dw-scrim: var(--dw-alpha-black-60);\\n --dw-border: var(--dw-neutral-800);\\n --dw-border-subtle: color-mix(in srgb, var(--dw-neutral-800) 60%, var(--dw-neutral-900));\\n --dw-border-strong: var(--dw-neutral-700);\\n --dw-border-hover: var(--dw-neutral-600);\\n --dw-border-accent: var(--dw-primary-800);\\n --dw-accent: var(--dw-primary-500);\\n --dw-accent-hover: var(--dw-primary-400);\\n --dw-accent-active: var(--dw-primary-300);\\n --dw-accent-tint: color-mix(in srgb, var(--dw-primary-500) 16%, transparent);\\n --dw-accent-tint-strong: color-mix(in srgb, var(--dw-primary-500) 28%, transparent);\\n --dw-accent-text: var(--dw-primary-300);\\n --dw-accent-subtle: var(--dw-primary-800);\\n --dw-accent-soft: var(--dw-primary-300);\\n --dw-fill-subtle: var(--dw-neutral-800);\\n --dw-fill-muted: var(--dw-neutral-700);\\n --dw-fill-strong: var(--dw-neutral-500);\\n --dw-focus-border: var(--dw-primary-400);\\n --dw-status-success-fg: var(--dw-success-300);\\n --dw-status-success-bg: color-mix(in srgb, var(--dw-success-500) 16%, transparent);\\n --dw-status-success-border: color-mix(in srgb, var(--dw-success-500) 40%, transparent);\\n --dw-status-warning-fg: var(--dw-warning-300);\\n --dw-attention-fg: var(--dw-warning-300);\\n --dw-status-warning-bg: color-mix(in srgb, var(--dw-warning-500) 16%, transparent);\\n --dw-status-warning-border: color-mix(in srgb, var(--dw-warning-500) 40%, transparent);\\n --dw-status-danger-fg: var(--dw-danger-300);\\n --dw-status-danger-solid: var(--dw-danger-300);\\n --dw-status-danger-bg: color-mix(in srgb, var(--dw-danger-500) 16%, transparent);\\n --dw-status-danger-border: color-mix(in srgb, var(--dw-danger-500) 40%, transparent);\\n --dw-status-success-on-inverse: var(--dw-success-300);\\n --dw-status-danger-on-inverse: var(--dw-danger-300);\\n --dw-status-info-fg: var(--dw-primary-300);\\n --dw-status-info-bg: color-mix(in srgb, var(--dw-primary-500) 16%, transparent);\\n --dw-status-info-border: color-mix(in srgb, var(--dw-primary-500) 40%, transparent);\\n --dw-status-neutral-fg: var(--dw-neutral-300);\\n --dw-status-neutral-bg: color-mix(in srgb, var(--dw-neutral-500) 18%, transparent);\\n --dw-status-neutral-border: color-mix(in srgb, var(--dw-neutral-500) 40%, transparent);\\n --dw-status-neutral-solid: var(--dw-neutral-500);\\n --dw-status-paused-fg: var(--dw-warning-300);\\n --dw-status-paused-bg: color-mix(in srgb, var(--dw-warning-500) 14%, transparent);\\n --dw-danger: var(--dw-danger-300);\\n --dw-danger-solid: var(--dw-danger-300);\\n --dw-danger-fill: var(--dw-danger-600);\\n --dw-danger-hover: var(--dw-danger-200);\\n --dw-danger-tint: color-mix(in srgb, var(--dw-danger-500) 14%, transparent);\\n --dw-entity-workflow-bg: color-mix(in srgb, var(--dw-blue-600) 22%, transparent);\\n --dw-entity-workflow-fg: var(--dw-primary-300);\\n --dw-entity-reasoning-bg: color-mix(in srgb, var(--dw-violet-500) 22%, transparent);\\n --dw-entity-reasoning-fg: var(--dw-violet-200);\\n --dw-entity-unknown-bg: var(--dw-neutral-800);\\n --dw-entity-unknown-fg: var(--dw-neutral-400);\\n --dw-icon-tint-orange: color-mix(in srgb, var(--dw-warning-500) 18%, transparent);\\n --dw-icon-tint-cyan: color-mix(in srgb, var(--dw-cyan-500) 18%, transparent);\\n --dw-icon-tint-pink: color-mix(in srgb, var(--dw-pink-500) 18%, transparent);\\n --dw-icon-tint-cyan-fg: var(--dw-cyan-100);\\n --dw-icon-tint-pink-fg: var(--dw-pink-100);\\n --dw-tree-spine: var(--dw-neutral-700);\\n --dw-deco-violet-subtle: var(--dw-violet-800);\\n --dw-deco-violet-fg: var(--dw-violet-200);\\n --dw-btn-primary-focus-ring: 0 0 0 2px var(--dw-neutral-900), 0 0 0 4px var(--dw-alpha-primary-55);\\n --dw-btn-secondary-grad: linear-gradient(135deg, var(--dw-neutral-800), var(--dw-neutral-700));\\n --dw-btn-secondary-grad-hover: linear-gradient(135deg, var(--dw-neutral-700), var(--dw-neutral-600));\\n --dw-shadow-xs: 0 1px 2px var(--dw-alpha-black-40);\\n --dw-shadow-sm: 0 1px 2px var(--dw-alpha-black-40);\\n --dw-shadow-md: 0 4px 12px var(--dw-alpha-black-40);\\n --dw-shadow-card-hover: 0 6px 16px -6px var(--dw-alpha-primary-35), 0 2px 6px var(--dw-alpha-black-40);\\n --dw-shadow-popover: 0 4px 16px var(--dw-alpha-black-60);\\n --dw-shadow-menu: 0 4px 16px var(--dw-alpha-black-60);\\n --dw-shadow-modal: 0 20px 60px var(--dw-alpha-black-60);\\n --dw-shadow-drawer: -4px 0 24px var(--dw-alpha-black-60);\\n --dw-shadow-header: 0 1px 0 var(--dw-neutral-800);\\n --dw-shadow-inset: inset 0 1px 2px var(--dw-alpha-black-40);\\n --dw-scrollbar-thumb: var(--dw-neutral-700);\\n --dw-scrollbar-thumb-hover: var(--dw-neutral-600);\\n --dw-skeleton-base: var(--dw-neutral-800);\\n --dw-skeleton-shine: var(--dw-neutral-700);\\n --dw-chart-grid: var(--dw-neutral-800);\\n --dw-chart-axis: var(--dw-neutral-400);\\n}\\n.dw-element,\\n.p-component,\\n.p-dialog,\\n.p-drawer,\\n.p-tooltip,\\n.p-toast,\\n.p-popover,\\n.p-menu,\\n.p-tieredmenu,\\n.p-select-overlay,\\n.p-multiselect-overlay {\\n font-family: var(--dw-font-sans);\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.p-menu.dw-menu,\\n.p-tieredmenu.dw-menu,\\n.p-popover.dw-popover-panel {\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-element :is(code, kbd, pre, samp, .dw-mono) {\\n font-family: var(--dw-font-mono);\\n}\\n.dw-page-title {\\n margin: 0;\\n font-size: var(--dw-font-size-20);\\n line-height: var(--dw-line-height-28);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-title {\\n margin: 0;\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-subtitle {\\n margin: 0;\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-body {\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-regular);\\n color: var(--dw-text);\\n}\\n.dw-body-strong {\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text);\\n}\\n.dw-label {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n margin: 0;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-label);\\n}\\n.dw-label--primary { color: var(--dw-accent-hover); }\\n.dw-label--muted { color: var(--dw-text-muted); }\\n.dw-label--success { color: var(--dw-status-success-fg); }\\n.dw-label--warn { color: var(--dw-status-warning-fg); }\\n.dw-label--danger { color: var(--dw-status-danger-fg); }\\n.dw-label-caps {\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n color: var(--dw-text-label);\\n}\\n.dw-group-label {\\n font-size: var(--dw-font-size-10);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n color: var(--dw-text-secondary);\\n}\\n.dw-meta {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-regular);\\n color: var(--dw-text-secondary);\\n}\\n.dw-meta.dw-meta--danger { color: var(--dw-status-danger-fg); }\\n.dw-meta .pi { font-size: var(--dw-font-size-12); }\\n.dw-caption {\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-secondary);\\n}\\n.dw-code {\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text);\\n}\\n.dw-uuid {\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-muted);\\n}\\n.dw-link {\\n color: var(--dw-text-link);\\n cursor: pointer;\\n background: none;\\n border: 0;\\n padding: 0;\\n font: inherit;\\n}\\n.dw-link:hover {\\n color: var(--dw-text-link-hover);\\n text-decoration: underline;\\n}\\n.dw-link--muted {\\n color: var(--dw-text-secondary);\\n}\\n.dw-link--muted:hover {\\n color: var(--dw-accent);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link) {\\n background: var(--dw-btn-primary-grad);\\n border-color: transparent;\\n box-shadow: var(--dw-btn-primary-shadow);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):hover {\\n background: var(--dw-btn-primary-grad-hover);\\n border-color: transparent;\\n box-shadow: var(--dw-btn-primary-shadow-hover);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):active {\\n background: var(--dw-btn-primary-grad-active);\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):focus-visible {\\n outline: none;\\n box-shadow: var(--dw-btn-primary-focus-ring);\\n}\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link):disabled,\\n.p-button:not(.p-button-secondary):not(.p-button-success):not(.p-button-info):not(.p-button-warn):not(.p-button-warning):not(.p-button-help):not(.p-button-danger):not(.p-button-contrast):not(.p-button-outlined):not(.p-button-text):not(.p-button-link).p-disabled {\\n background: var(--dw-btn-primary-grad);\\n box-shadow: none;\\n opacity: 0.6;\\n}\\n.p-button.p-button-secondary:not(.p-button-outlined):not(.p-button-text):not(.p-button-link) {\\n background: var(--dw-btn-secondary-grad);\\n border-color: var(--dw-border);\\n color: var(--dw-text);\\n box-shadow: var(--dw-shadow-sm);\\n}\\n.p-button.p-button-secondary:not(.p-button-outlined):not(.p-button-text):not(.p-button-link):not(:disabled):hover {\\n background: var(--dw-btn-secondary-grad-hover);\\n border-color: var(--dw-border-strong);\\n color: var(--dw-text);\\n}\\n.dw-btn {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n padding: 6px 11px;\\n border: 1px solid transparent;\\n border-radius: var(--dw-radius-control);\\n background: transparent;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n text-decoration: none;\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), border-color var(--dw-dur-micro), color var(--dw-dur-micro), box-shadow var(--dw-dur-enter);\\n}\\n.dw-btn:focus-visible {\\n outline: none;\\n box-shadow: var(--dw-focus-ring);\\n}\\n.dw-btn:disabled,\\n.dw-btn.is-disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n box-shadow: none !important;\\n}\\n.dw-btn--sm {\\n gap: 6px;\\n padding: 5px 10px;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-btn--icon {\\n width: var(--dw-size-control);\\n height: var(--dw-size-control);\\n padding: 0;\\n}\\n.dw-btn--icon.dw-btn--sm {\\n width: var(--dw-size-control-sm);\\n height: var(--dw-size-control-sm);\\n}\\n.dw-btn--round { border-radius: var(--dw-radius-round); }\\n.dw-btn--block { width: 100%; }\\n.dw-btn--primary {\\n background: var(--dw-btn-primary-grad);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n box-shadow: var(--dw-btn-primary-shadow);\\n}\\n.dw-btn--primary:hover:not(:disabled) {\\n background: var(--dw-btn-primary-grad-hover);\\n color: var(--dw-text-inverse);\\n box-shadow: var(--dw-btn-primary-shadow-hover);\\n}\\n.dw-btn--primary:active:not(:disabled) {\\n background: var(--dw-btn-primary-grad-active);\\n box-shadow: none;\\n}\\n.dw-btn--primary:focus-visible { box-shadow: var(--dw-btn-primary-focus-ring); }\\n.dw-btn--secondary {\\n background: var(--dw-btn-secondary-grad);\\n border-color: var(--dw-border);\\n color: var(--dw-text);\\n box-shadow: var(--dw-shadow-sm);\\n}\\n.dw-btn--secondary:hover:not(:disabled) {\\n background: var(--dw-btn-secondary-grad-hover);\\n border-color: var(--dw-border-strong);\\n}\\n.dw-btn--secondary:active:not(:disabled) {\\n background: var(--dw-btn-secondary-grad-hover);\\n border-color: var(--dw-border-hover);\\n color: var(--dw-text-strong);\\n box-shadow: var(--dw-shadow-inset);\\n}\\n.dw-btn--danger {\\n background: var(--dw-danger-fill);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n box-shadow: var(--dw-shadow-sm);\\n}\\n.dw-btn--danger:hover:not(:disabled) { background: var(--dw-danger-hover); }\\n.dw-btn--danger:active:not(:disabled) { background: var(--dw-danger-hover); }\\n.dw-btn--danger:focus-visible { box-shadow: var(--dw-focus-ring-danger); }\\n.dw-btn--inverse {\\n background: var(--dw-surface);\\n border-color: transparent;\\n color: var(--dw-text-strong);\\n box-shadow: none;\\n}\\n.dw-btn--inverse:hover:not(:disabled) { background: var(--dw-surface-hover); }\\n.dw-btn--outlined { background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--primary { border-color: var(--dw-border-accent); color: var(--dw-accent); background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--primary:hover:not(:disabled) { background: var(--dw-accent-tint); }\\n.dw-btn--outlined.dw-btn--primary:active:not(:disabled) { background: var(--dw-accent-tint-strong); }\\n.dw-btn--outlined.dw-btn--secondary { border-color: var(--dw-border); color: var(--dw-text-secondary); background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--secondary:hover:not(:disabled) { background: var(--dw-surface-hover); }\\n.dw-btn--outlined.dw-btn--secondary:active:not(:disabled) { background: var(--dw-surface-pressed); border-color: var(--dw-border-strong); }\\n.dw-btn--outlined.dw-btn--danger { border-color: var(--dw-status-danger-border); color: var(--dw-danger-solid); background: var(--dw-surface); box-shadow: none; }\\n.dw-btn--outlined.dw-btn--danger:hover:not(:disabled) { background: var(--dw-danger-tint); }\\n.dw-btn--outlined.dw-btn--inverse { border-color: color-mix(in srgb, var(--dw-text-inverse) 40%, transparent); color: var(--dw-text-inverse); background: transparent; box-shadow: none; }\\n.dw-btn--outlined.dw-btn--inverse:hover:not(:disabled) { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); }\\n.dw-btn--text { background: transparent; border-color: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--primary { color: var(--dw-accent); background: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--primary:hover:not(:disabled) { background: var(--dw-accent-tint); }\\n.dw-btn--text.dw-btn--primary:active:not(:disabled) { background: var(--dw-accent-tint-strong); }\\n.dw-btn--text.dw-btn--secondary { color: var(--dw-text-secondary); background: transparent; border-color: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--secondary:hover:not(:disabled) { background: var(--dw-surface-hover); color: var(--dw-text); }\\n.dw-btn--text.dw-btn--danger { color: var(--dw-danger-solid); background: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--danger:hover:not(:disabled) { background: var(--dw-danger-tint); }\\n.dw-btn--text.dw-btn--inverse { color: var(--dw-accent-soft); background: transparent; border-color: transparent; box-shadow: none; }\\n.dw-btn--text.dw-btn--inverse:hover:not(:disabled) { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); color: var(--dw-text-inverse); }\\n.dw-btn--link {\\n padding-left: var(--dw-space-1);\\n padding-right: var(--dw-space-1);\\n background: transparent;\\n border-color: transparent;\\n box-shadow: none;\\n color: var(--dw-accent);\\n}\\n.dw-btn--link.dw-btn--secondary { color: var(--dw-text); }\\n.dw-btn--link:hover:not(:disabled) { text-decoration: underline; }\\n.dw-btn--link:active:not(:disabled) { color: var(--dw-accent-active); text-decoration: underline; }\\n.dw-btn--outlined:hover:not(:disabled),\\n.dw-btn--outlined:active:not(:disabled),\\n.dw-btn--text:hover:not(:disabled),\\n.dw-btn--text:active:not(:disabled),\\n.dw-btn--link:hover:not(:disabled),\\n.dw-btn--link:active:not(:disabled) {\\n box-shadow: none;\\n}\\n.dw-btn--outlined.dw-btn--primary:hover:not(:disabled),\\n.dw-btn--text.dw-btn--primary:hover:not(:disabled) { color: var(--dw-accent); }\\n.dw-btn--outlined.dw-btn--primary:active:not(:disabled),\\n.dw-btn--text.dw-btn--primary:active:not(:disabled) { color: var(--dw-accent-active); }\\n.dw-btn--link.dw-btn--primary:hover:not(:disabled),\\n.dw-btn--link.dw-btn--primary:active:not(:disabled),\\n.dw-btn--link.dw-btn--secondary:hover:not(:disabled),\\n.dw-btn--link.dw-btn--secondary:active:not(:disabled),\\n.dw-btn--link.dw-btn--danger:hover:not(:disabled),\\n.dw-btn--link.dw-btn--danger:active:not(:disabled) {\\n background: transparent;\\n border-color: transparent;\\n}\\n.dw-btn--link.dw-btn--primary:hover:not(:disabled),\\n.dw-btn--link.dw-btn--secondary:hover:not(:disabled) { color: var(--dw-accent); }\\n.dw-btn--link.dw-btn--danger,\\n.dw-btn--link.dw-btn--danger:hover:not(:disabled) { color: var(--dw-danger-solid); }\\n.dw-btn--outlined.dw-btn--danger:active:not(:disabled),\\n.dw-btn--text.dw-btn--danger:active:not(:disabled) {\\n background: var(--dw-danger-tint);\\n color: var(--dw-danger-solid);\\n}\\n.dw-icon-btn {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n width: var(--dw-size-icon-btn);\\n height: var(--dw-size-icon-btn);\\n padding: 0;\\n border: 1px solid transparent;\\n border-radius: var(--dw-radius-md);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-14);\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), color var(--dw-dur-micro);\\n}\\n.dw-icon-btn--labelled {\\n gap: var(--dw-space-1);\\n width: auto;\\n padding: 0 var(--dw-space-2);\\n white-space: nowrap;\\n}\\n.dw-icon-btn:hover:not(:disabled) {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n}\\n.dw-icon-btn:focus-visible {\\n outline: none;\\n box-shadow: var(--dw-focus-ring);\\n}\\n.dw-icon-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.dw-icon-btn--lg { width: var(--dw-size-control); height: var(--dw-size-control); font-size: var(--dw-font-size-16); }\\n.dw-icon-btn > .pi,\\n.dw-icon-btn > i { font-size: inherit; }\\n.dw-icon-btn--xs { width: 20px; height: 20px; font-size: var(--dw-font-size-10); border-radius: var(--dw-radius-sm); }\\n.dw-icon-btn--accent:hover:not(:disabled) { background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-icon-btn--danger:hover:not(:disabled) { background: var(--dw-danger-tint); color: var(--dw-danger-solid); }\\n.dw-icon-btn--outlined { border: 1px solid var(--dw-border); background: var(--dw-surface); }\\n.dw-icon-btn--toolbar { border-radius: var(--dw-radius-lg); color: var(--dw-text-label); }\\n.dw-icon-btn--attention { position: relative; color: var(--dw-attention-fg); }\\n.dw-icon-btn__dot {\\n position: absolute;\\n top: 5px;\\n right: 5px;\\n width: 7px;\\n height: 7px;\\n border: 1.5px solid var(--dw-surface);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-status-warning-solid);\\n}\\n.dw-icon-btn--outlined:hover:not(:disabled) { border-color: var(--dw-border-strong); background: var(--dw-surface-hover); color: var(--dw-text); }\\n.dw-icon-btn--hover-outlined:hover:not(:disabled) { border-color: var(--dw-border); background: var(--dw-surface); color: var(--dw-text); }\\n.dw-icon-btn.is-open { background: var(--dw-surface-pressed); color: var(--dw-text); }\\n.dw-icon-btn--outlined.is-open { border-color: var(--dw-border-strong); background: var(--dw-surface-hover); }\\n.dw-icon-btn--hover-outlined.is-open { border-color: var(--dw-border); background: var(--dw-surface); }\\n.dw-icon-btn--inverse.is-open { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); color: var(--dw-text-inverse); }\\n.dw-icon-btn.is-active { background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-icon-btn.is-active:hover:not(:disabled) { background: var(--dw-accent-tint-strong); color: var(--dw-accent); }\\n.dw-icon-btn--danger.is-active,\\n.dw-icon-btn--danger.is-active:hover:not(:disabled) { background: var(--dw-danger-tint); color: var(--dw-danger-solid); }\\n.dw-icon-btn--inverse { color: var(--dw-text-muted); }\\n.dw-icon-btn--inverse:hover:not(:disabled),\\n.dw-icon-btn--inverse.is-active { background: color-mix(in srgb, var(--dw-text-inverse) 12%, transparent); color: var(--dw-text-inverse); }\\n.dw-button-host {\\n display: inline-flex;\\n vertical-align: middle;\\n}\\n.dw-button-host--block,\\n.dw-button-host--block .dw-btn-wrap {\\n display: flex;\\n width: 100%;\\n}\\n.dw-btn-wrap { display: inline-flex; }\\n.dw-button-host--truncate,\\n.dw-button-host--truncate .dw-btn-wrap,\\n.dw-button-host--truncate .dw-btn { min-width: 0; max-width: 100%; }\\n.dw-button-host--truncate .dw-btn__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-btn__img {\\n width: 16px;\\n height: 16px;\\n object-fit: contain;\\n flex-shrink: 0;\\n}\\n.dw-btn__count {\\n font-variant-numeric: tabular-nums;\\n color: inherit;\\n opacity: 0.8;\\n}\\n.dw-btn--pill { border-radius: var(--dw-radius-full); }\\n.dw-btn--warn {\\n background: var(--dw-status-warning-solid);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n}\\n.dw-btn--success {\\n background: var(--dw-status-success-solid);\\n border-color: transparent;\\n color: var(--dw-text-inverse);\\n}\\n.dw-btn--outlined.dw-btn--warn,\\n.dw-btn--outlined.dw-btn--success { background: var(--dw-surface); }\\n.dw-btn--outlined.dw-btn--warn { border-color: var(--dw-status-warning-border); color: var(--dw-status-warning-fg); }\\n.dw-btn--outlined.dw-btn--success { border-color: var(--dw-status-success-border); color: var(--dw-status-success-fg); }\\n.dw-btn--text.dw-btn--secondary.is-active,\\n.dw-btn--outlined.dw-btn--secondary.is-active,\\n.dw-btn--text.dw-btn--secondary.is-active:hover:not(:disabled),\\n.dw-btn--outlined.dw-btn--secondary.is-active:hover:not(:disabled) {\\n background: var(--dw-accent-tint);\\n border-color: var(--dw-border-accent);\\n color: var(--dw-accent-text);\\n}\\na.dw-btn.is-disabled,\\na.dw-icon-btn.is-disabled { pointer-events: none; }\\n.dw-btn .pi:not(.dw-btn__trailing) { font-size: inherit; }\\n.dw-btn .dw-btn__trailing { font-size: var(--dw-font-size-10); }\\n.dw-btn-group { display: inline-flex; align-items: stretch; }\\n.dw-btn-group > :not(:first-child) { margin-left: -1px; }\\n.dw-btn-group > :not(:first-child) .dw-btn {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n}\\n.dw-btn-group > :not(:last-child) .dw-btn {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n.dw-btn-group .dw-btn:hover,\\n.dw-btn-group .dw-btn:focus-visible,\\n.dw-btn-group .dw-btn.is-active { position: relative; z-index: 1; }\\n.dw-field {\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n min-width: 0;\\n}\\n.dw-field--inline {\\n flex-direction: row;\\n align-items: center;\\n gap: var(--dw-space-3);\\n}\\n.dw-field__label {\\n margin: 0;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-label);\\n}\\n.dw-field__required {\\n margin-left: 2px;\\n color: var(--dw-danger-solid);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-field__help {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-field__error {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-status-danger-fg);\\n}\\n.dw-form-row {\\n display: grid;\\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\\n gap: var(--dw-space-4);\\n}\\n.dw-form-actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: var(--dw-space-2);\\n}\\n.dw-input {\\n width: 100%;\\n min-height: var(--dw-size-control);\\n padding: 6px var(--dw-space-3);\\n border: 1px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-control);\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n box-shadow: var(--dw-shadow-xs);\\n transition: border-color var(--dw-dur-micro), box-shadow var(--dw-dur-micro);\\n}\\n.dw-input::placeholder {\\n color: var(--dw-text-muted);\\n}\\n.dw-input:hover:not(:disabled, :focus) {\\n border-color: var(--dw-border-hover);\\n}\\n.dw-input:focus {\\n outline: none;\\n border-color: var(--dw-focus-border);\\n box-shadow: var(--dw-focus-border-ring);\\n}\\n.dw-input:disabled {\\n background: var(--dw-surface-disabled);\\n color: var(--dw-text-muted);\\n}\\ntextarea.dw-input {\\n min-height: 72px;\\n resize: vertical;\\n}\\n.p-invalid,\\n.ng-invalid.ng-touched.p-inputtext,\\n.ng-invalid.ng-dirty.p-inputtext {\\n border-color: var(--dw-danger-solid) !important;\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.p-select.p-invalid.p-focus,\\n.p-inputtext.p-invalid:focus,\\n.p-inputtext.p-invalid.p-focus,\\n.ng-invalid.ng-touched.p-inputtext:focus,\\n.ng-invalid.ng-dirty.p-inputtext:focus {\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.dw-search {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n min-width: 220px;\\n}\\n.dw-search .p-inputtext,\\n.dw-search input {\\n width: 100%;\\n padding-left: 32px;\\n}\\n.dw-search > .pi,\\n.dw-search__icon {\\n position: absolute;\\n left: 10px;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-14);\\n pointer-events: none;\\n}\\n.dw-dropzone {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-6);\\n border: 1px dashed var(--dw-border-strong);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface-section);\\n color: var(--dw-text-secondary);\\n text-align: center;\\n cursor: pointer;\\n transition: border-color var(--dw-dur-micro), background var(--dw-dur-micro);\\n}\\n.dw-dropzone:hover,\\n.dw-dropzone.is-dragover {\\n border-color: var(--dw-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\nbody .p-inputtext,\\nbody .p-select-label,\\nbody .p-multiselect-label,\\nbody .p-autocomplete-input,\\nbody .p-datepicker-input,\\nbody .p-inputnumber-input,\\nbody .p-textarea,\\nbody .p-select-option,\\nbody .p-multiselect-option,\\nbody .p-treeselect-label {\\n font-size: var(--dw-font-size-14);\\n}\\n.p-textarea.dw-textarea-grow {\\n field-sizing: content;\\n min-height: calc(var(--dw-textarea-rows, 3) * 1lh + 2 * var(--p-form-field-padding-y) + 2px);\\n}\\ndw-field.dw-field { display: flex; }\\ndw-field.dw-field--inline { align-items: flex-start; }\\ndw-field.dw-field--inline .dw-field__label-row { flex: none; padding-top: 10px; }\\ndw-field.dw-field--inline:has(.dw-field__control :is(.p-inputtext-sm, .p-textarea-sm, .p-select-sm, .p-multiselect-sm, .p-inputnumber-sm, .p-autocomplete-sm, .p-datepicker-sm, .dw-search--sm)) .dw-field__label-row { padding-top: 6px; }\\ndw-field.dw-field--inline .dw-field__control { min-height: var(--dw-size-control-lg); }\\ndw-field.dw-field--inline:has(.dw-field__control :is(.p-inputtext-sm, .p-textarea-sm, .p-select-sm, .p-multiselect-sm, .p-inputnumber-sm, .p-autocomplete-sm, .p-datepicker-sm, .dw-search--sm)) .dw-field__control { min-height: var(--dw-size-control-sm); }\\n.dw-field__label-row {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: var(--dw-space-2);\\n min-width: 0;\\n}\\n.dw-field__label { display: inline-flex; align-items: center; gap: var(--dw-space-1); }\\n.dw-field__optional { color: var(--dw-text-muted); font-weight: var(--dw-font-weight-regular); }\\n.dw-field__info { color: var(--dw-text-muted); font-size: var(--dw-font-size-12); cursor: help; }\\n.dw-field__info:hover,\\n.dw-field__info:focus-visible { color: var(--dw-accent); outline: none; }\\n.dw-field__actions { display: inline-flex; align-items: center; gap: var(--dw-space-2); font-size: var(--dw-font-size-12); }\\n.dw-field__actions:empty { display: none; }\\n.dw-field__body { display: flex; flex-direction: column; gap: 6px; flex: 1 1 auto; min-width: 0; }\\n.dw-field__control { position: relative; display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-field__control > :first-child:not([dwFieldSuffix]) { flex: 1 1 auto; min-width: 0; }\\n.dw-field__control > :is(p-toggleswitch, p-checkbox, p-radiobutton):first-child:not([dwFieldSuffix]) { flex: none; }\\n.dw-field__control > input,\\n.dw-field__control > textarea,\\n.dw-field__control > p-select,\\n.dw-field__control > p-multiselect,\\n.dw-field__control > p-inputnumber,\\n.dw-field__control > p-datepicker,\\n.dw-field__control > p-autocomplete { width: 100%; }\\n.dw-field__error { display: inline-flex; align-items: center; gap: var(--dw-space-1); }\\n.dw-field__error > :is(i, .pi) { display: none; }\\n.dw-field__footer { display: flex; justify-content: space-between; gap: var(--dw-space-2); }\\n.dw-field__counter { margin-left: auto; color: var(--dw-text-muted); font-size: var(--dw-font-size-11); font-variant-numeric: tabular-nums; }\\n.dw-field__counter.is-over { color: var(--dw-status-danger-fg); }\\n.dw-field__readonly {\\n min-height: var(--dw-size-control);\\n padding: 6px 0;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n overflow-wrap: anywhere;\\n}\\n.dw-field.is-invalid .dw-field__control .p-inputtext,\\n.dw-field.is-invalid .dw-field__control .dw-input,\\n.dw-field.is-invalid .dw-field__control .p-select,\\n.dw-field.is-invalid .dw-field__control .p-multiselect,\\n.dw-field.is-invalid .dw-field__control textarea {\\n border-color: var(--dw-danger-solid);\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.dw-field.is-invalid .dw-field__control .p-inputtext:focus,\\n.dw-field.is-invalid .dw-field__control .dw-input:focus,\\n.dw-field.is-invalid .dw-field__control textarea:focus,\\n.dw-field.is-invalid .dw-field__control .p-select.p-focus,\\n.dw-field.is-invalid .dw-field__control .p-multiselect.p-focus {\\n border-color: var(--dw-danger-solid) !important;\\n box-shadow: var(--dw-focus-border-ring-danger) !important;\\n}\\n.dw-field.is-disabled { opacity: 0.6; }\\n.dw-form-section-header {\\n display: flex;\\n align-items: flex-end;\\n justify-content: space-between;\\n gap: var(--dw-space-3);\\n padding-bottom: var(--dw-space-2);\\n margin-top: var(--dw-space-2);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-form-section-header p { margin: 0; }\\ndw-search-input.dw-search { width: 400px; max-width: 100%; min-width: min(220px, 100%); }\\ndw-search-input.dw-search--block { width: 100%; }\\n.dw-search.dw-search--collapsed { width: auto; min-width: 0; }\\n.dw-search.dw-search--expanded .dw-search__input { animation: dw-search-open var(--dw-dur-enter) var(--dw-ease); }\\n@keyframes dw-search-open {\\n from {\\n clip-path: inset(0 0 0 100%);\\n opacity: 0;\\n }\\n}\\n.dw-search__input { padding-right: 32px; }\\n.dw-search--icon-left .dw-search__input { padding-left: 32px; padding-right: 32px; }\\n.dw-search--sm .dw-search__input { min-height: var(--dw-size-control-sm); padding-top: 3px; padding-bottom: 3px; font-size: var(--dw-font-size-12); }\\n.dw-search--md .dw-search__input { min-height: 0; padding-top: 6px; padding-bottom: 6px; line-height: var(--dw-line-height-20); }\\n.dw-search--lg .dw-search__input { min-height: var(--dw-size-control-lg); }\\n.dw-search__icon { position: absolute; color: var(--dw-text-muted); font-size: var(--dw-font-size-12); pointer-events: none; }\\n.dw-search > .dw-search__icon--left { left: 11px; right: auto; }\\n.dw-search > .dw-search__icon--right { left: auto; right: 11px; }\\n.dw-search--icon-right .dw-search__input { padding-left: 11px; }\\n.dw-search__clear {\\n position: absolute;\\n right: 6px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 20px;\\n height: 20px;\\n padding: 0;\\n border: 0;\\n border-radius: var(--dw-radius-sm);\\n background: transparent;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-10);\\n cursor: pointer;\\n}\\n.dw-search__clear:hover { background: var(--dw-surface-pressed); color: var(--dw-text); }\\n.dw-search__clear:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-file-dropzone-host { display: block; }\\n.dw-dropzone.is-disabled { opacity: 0.6; cursor: not-allowed; }\\n.dw-dropzone:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-dropzone__icon { color: var(--dw-accent); font-size: var(--dw-font-size-24); }\\n.dw-dropzone__title { margin: 0; color: var(--dw-text); font-size: var(--dw-font-size-14); }\\n.dw-dropzone__hint { margin: 0; font-size: var(--dw-font-size-12); }\\n.dw-dropzone__types { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--dw-space-1); }\\n.dw-dropzone__type-icon { width: 12px; height: 12px; }\\n.dw-dropzone__extra:empty { display: none; }\\n.dw-file-list { display: flex; flex-direction: column; gap: var(--dw-space-1); }\\n.dw-file-list__item {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-2) var(--dw-space-3);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface);\\n}\\n.dw-file-list__file-icon { flex: none; width: 18px; height: 18px; color: var(--dw-text-muted); }\\n.dw-file-list__meta { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }\\n.dw-file-list__name { overflow: hidden; color: var(--dw-text); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-medium); text-overflow: ellipsis; white-space: nowrap; }\\n.dw-file-list__size { color: var(--dw-text-secondary); font-size: var(--dw-font-size-11); }\\n.dw-file-list__error { color: var(--dw-status-danger-fg); font-size: var(--dw-font-size-11); }\\n.dw-file-list__status { flex: none; font-size: var(--dw-font-size-14); color: var(--dw-text-muted); }\\n.dw-file-list__item.is-success .dw-file-list__status { color: var(--dw-status-success-solid); }\\n.dw-file-list__item.is-uploading .dw-file-list__status { color: var(--dw-accent); }\\n.dw-file-list__item.is-failed .dw-file-list__status,\\n.dw-file-list__item.is-unsupported .dw-file-list__status { color: var(--dw-status-danger-solid); }\\n.dw-file-list__item.is-toolarge .dw-file-list__status { color: var(--dw-status-warning-solid); }\\n.dw-repeat-row {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 64px;\\n align-items: center;\\n gap: var(--dw-space-2);\\n}\\n.p-select.dw-select-readonly.p-disabled {\\n background: var(--dw-surface-pressed);\\n opacity: 1;\\n cursor: default;\\n}\\n.p-select.dw-select-readonly.p-disabled .p-select-label {\\n color: var(--dw-text);\\n opacity: 1;\\n}\\n.p-select.dw-select-readonly.p-disabled .p-select-dropdown {\\n display: none;\\n}\\np-slider {\\n display: block;\\n width: 100%;\\n}\\n.p-select-sm .p-select-label,\\n.p-multiselect-sm .p-multiselect-label {\\n line-height: var(--dw-line-height-16);\\n}\\n.p-textarea.p-textarea-sm,\\n.p-inputtext.p-inputtext-sm {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-input-group { display: flex; align-items: stretch; min-width: 0; }\\n.dw-input-group > :not(.dw-input-group__addon) { flex: 1 1 auto; min-width: 0; }\\n.dw-input-group > .dw-input-group__addon:first-child > button {\\n border-inline-end-width: 0;\\n border-start-end-radius: 0;\\n border-end-end-radius: 0;\\n}\\n.dw-input-group > .dw-input-group__addon:first-child + * .p-inputtext,\\n.dw-input-group > .dw-input-group__addon:first-child + .p-inputtext {\\n border-start-start-radius: 0;\\n border-end-start-radius: 0;\\n}\\n.dw-input-reveal { position: relative; min-width: 0; }\\n.dw-input-reveal > input { width: 100%; padding-inline-end: calc(var(--dw-space-2) + 28px); }\\n.dw-input-reveal > dw-icon-button {\\n position: absolute;\\n inset-inline-end: var(--dw-space-1);\\n top: 50%;\\n transform: translateY(-50%);\\n}\\n.p-datepicker-panel:not(.p-datepicker-panel-inline) { min-width: 0 !important; }\\n.p-datepicker-panel .p-datepicker-calendar-container { min-height: 328px; }\\n.p-overlay:has(> .p-overlay-content > .p-select-overlay) { width: 0; }\\n.p-select-overlay .p-select-option { min-width: 0; }\\n.p-select-overlay .p-select-option > [data-pc-section=\\\"optionlabel\\\"] {\\n min-width: 0;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.dw-check {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n}\\n.dw-check > label { margin: 0; cursor: pointer; }\\n:is(p-radiobutton, p-checkbox, p-toggleswitch) + label { margin-bottom: 0; cursor: pointer; }\\n.p-select-sm .p-select-option,\\n.p-multiselect-sm .p-multiselect-option,\\n.dw-select-panel--sm .p-select-option,\\n.dw-select-panel--sm .p-multiselect-option {\\n padding: 5px 10px;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.p-select-sm .p-select-empty-message,\\n.p-multiselect-sm .p-multiselect-empty-message,\\n.dw-select-panel--sm .p-select-empty-message,\\n.dw-select-panel--sm .p-multiselect-empty-message {\\n padding: 5px 10px;\\n font-size: var(--dw-font-size-12);\\n}\\np-toggleswitch.dw-switch--sm,\\n.p-toggleswitch.dw-switch--sm {\\n --p-toggleswitch-width: 2rem;\\n --p-toggleswitch-height: 1.125rem;\\n --p-toggleswitch-handle-size: 0.75rem;\\n --p-toggleswitch-gap: 0.1875rem;\\n}\\np-toggleswitch.dw-switch--xs,\\n.p-toggleswitch.dw-switch--xs {\\n --p-toggleswitch-width: 1.75rem;\\n --p-toggleswitch-height: 1rem;\\n --p-toggleswitch-handle-size: 0.75rem;\\n --p-toggleswitch-gap: 0.125rem;\\n --p-toggleswitch-background: var(--dw-fill-muted);\\n --p-toggleswitch-hover-background: var(--dw-fill-muted);\\n --p-toggleswitch-checked-background: var(--dw-accent-hover);\\n --p-toggleswitch-checked-hover-background: var(--dw-accent-hover);\\n --p-toggleswitch-border-width: 0;\\n --p-toggleswitch-shadow: none;\\n}\\n.dw-switch--xs .p-toggleswitch-handle { box-shadow: 0 1px 2px var(--dw-alpha-black-20); }\\n.dw-var-field {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-1_5);\\n padding: var(--dw-space-3) var(--dw-space-5);\\n}\\n.dw-var-list > .dw-var-field + .dw-var-field { border-top: 1px solid var(--dw-border-subtle); }\\n.dw-var-field__label { display: flex; align-items: baseline; gap: var(--dw-space-2); min-width: 0; line-height: normal; }\\n.dw-var-field__name {\\n min-width: 0;\\n overflow: hidden;\\n color: var(--dw-text-strong);\\n font-size: var(--dw-font-size-13);\\n font-weight: var(--dw-font-weight-semibold);\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.dw-var-field__label .dw-badge--label { padding: 0 5px; line-height: var(--dw-line-height-16); }\\n.dw-var-field__fixed {\\n display: inline-flex;\\n align-items: center;\\n gap: 3px;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-11);\\n}\\n.dw-var-field__fixed .pi { font-size: var(--dw-font-size-10); }\\n.dw-var-field__default {\\n display: flex;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-var-field__default b {\\n min-width: 0;\\n overflow: hidden;\\n color: var(--dw-text);\\n font-weight: var(--dw-font-weight-medium);\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\nbody .dw-var-field .p-inputtext,\\nbody .dw-var-field .p-textarea { width: 100%; padding: 7px 11px; line-height: var(--dw-line-height-20); }\\nbody .dw-var-field .p-inputtext::placeholder,\\nbody .dw-var-field .p-textarea::placeholder { color: var(--dw-text-secondary); }\\nbody .dw-var-field .p-inputtext:disabled,\\nbody .dw-var-field .p-textarea:disabled {\\n background: var(--dw-surface-section);\\n color: var(--dw-text-secondary);\\n opacity: 1;\\n}\\nbody .dw-var-field .p-textarea {\\n resize: vertical;\\n font-size: var(--dw-font-size-13);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-var-field p-toggleswitch { align-self: flex-start; margin: 2px 0; }\\n.dw-check-toggle-host { display: inline-flex; flex: none; }\\n.dw-check-toggle {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-2) 10px;\\n border: 0;\\n border-radius: var(--dw-radius-md);\\n background: none;\\n color: var(--dw-text-label);\\n font: inherit;\\n font-size: var(--dw-font-size-12);\\n white-space: nowrap;\\n cursor: pointer;\\n user-select: none;\\n}\\n.dw-check-toggle:hover { background: var(--dw-surface-pressed); color: var(--dw-text-strong); }\\n.dw-check-toggle:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-check-toggle__box {\\n position: relative;\\n flex: none;\\n width: 16px;\\n height: 16px;\\n border: 1.5px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface);\\n transition: background-color var(--dw-dur-micro) var(--dw-ease), border-color var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-check-toggle:hover .dw-check-toggle__box { border-color: var(--dw-border-hover); }\\n.dw-check-toggle.is-on .dw-check-toggle__box { border-color: var(--dw-accent); background: var(--dw-accent); }\\n.dw-check-toggle.is-on .dw-check-toggle__box::after {\\n content: '';\\n position: absolute;\\n top: 1.5px;\\n left: 4.5px;\\n width: 4px;\\n height: 8px;\\n border: solid var(--dw-surface);\\n border-width: 0 1.75px 1.75px 0;\\n transform: rotate(45deg);\\n}\\n.dw-check-toggle.is-on .dw-check-toggle__label { color: var(--dw-text-strong); font-weight: var(--dw-font-weight-medium); }\\n.dw-datepicker--compact .p-datepicker-header { padding: 0 0 var(--dw-space-2); }\\n.dw-datepicker--compact .p-datepicker-title,\\n.dw-datepicker--compact .p-datepicker-select-month,\\n.dw-datepicker--compact .p-datepicker-select-year { font-size: var(--dw-font-size-14); font-weight: var(--dw-font-weight-semibold); }\\n.dw-datepicker--compact .p-datepicker-weekday { font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-medium); color: var(--dw-text-muted); }\\n.dw-datepicker--compact .p-datepicker-day-cell { padding: 1px; }\\n.dw-datepicker--compact .p-datepicker-day { width: 32px; height: 32px; font-size: var(--dw-font-size-12); }\\n.dw-datepicker--compact .p-datepicker-time-picker { padding: var(--dw-space-2) 0 0; gap: var(--dw-space-1); font-size: var(--dw-font-size-14); }\\n.dw-datepicker--compact .p-datepicker-time-picker .p-button { width: 24px; height: 24px; }\\n.config-form-container { display: flex; flex-direction: column; height: 100%; margin: 0; background-color: var(--dw-surface); }\\n.config-form-body {\\n display: flex;\\n flex: 1;\\n flex-direction: column;\\n gap: var(--dw-space-4);\\n overflow-y: auto;\\n padding: var(--dw-space-5) var(--dw-space-6);\\n}\\n.config-form-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: var(--dw-space-3);\\n min-height: 64px;\\n padding: var(--dw-space-3) var(--dw-space-6);\\n border-top: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.config-form-footer__actions { display: flex; align-items: center; gap: var(--dw-space-2); margin-left: auto; }\\n.config-form-footer__divider { width: 1px; height: 20px; margin: 0 var(--dw-space-1); background: var(--dw-border); }\\n.config-form-body .toggle-field { display: flex; align-items: center; min-height: var(--dw-size-control); }\\n.config-form-body .toggle-label { margin: 0; cursor: pointer; }\\n.config-form-host { display: flex; flex: 1; flex-direction: column; min-height: 0; }\\n.dw-pill {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 2px var(--dw-space-2);\\n border: 1px solid var(--dw-status-neutral-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-status-neutral-bg);\\n color: var(--dw-status-neutral-fg);\\n font-size: var(--dw-font-size-12);\\n line-height: 18px;\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n}\\n.dw-pill--primary,\\n.dw-pill--info {\\n background: var(--dw-status-info-bg);\\n border-color: var(--dw-status-info-border);\\n color: var(--dw-status-info-fg);\\n}\\n.dw-pill--success {\\n background: var(--dw-status-success-bg);\\n border-color: var(--dw-status-success-border);\\n color: var(--dw-status-success-fg);\\n}\\n.dw-pill--warn,\\n.dw-pill--warning {\\n background: var(--dw-status-warning-bg);\\n border-color: var(--dw-status-warning-border);\\n color: var(--dw-status-warning-fg);\\n}\\n.dw-pill--danger {\\n background: var(--dw-status-danger-bg);\\n border-color: var(--dw-status-danger-border);\\n color: var(--dw-status-danger-fg);\\n}\\n.dw-pill--neutral {\\n background: var(--dw-status-neutral-bg);\\n border-color: var(--dw-status-neutral-border);\\n color: var(--dw-status-neutral-fg);\\n}\\n.dw-pill__dot,\\n.dw-status-dot {\\n flex: none;\\n width: 6px;\\n height: 6px;\\n border-radius: var(--dw-radius-round);\\n background: currentColor;\\n}\\n.dw-status-dot--success { --dw-status-dot-color: var(--dw-status-success-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--warning { --dw-status-dot-color: var(--dw-status-warning-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--danger { --dw-status-dot-color: var(--dw-status-danger-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--info { --dw-status-dot-color: var(--dw-status-info-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot--neutral { --dw-status-dot-color: var(--dw-status-neutral-solid); background: var(--dw-status-dot-color); }\\n.dw-status-dot.dw-status-dot--hollow {\\n background: transparent;\\n box-shadow: inset 0 0 0 1.5px var(--dw-status-dot-color, currentColor);\\n}\\n.dw-status-dot.dw-status-dot--live { position: relative; }\\n.dw-status-dot.dw-status-dot--live::after {\\n content: '';\\n position: absolute;\\n inset: -4px;\\n border-radius: inherit;\\n background: var(--dw-status-dot-color, currentColor);\\n opacity: 0;\\n animation: dw-status-dot-ping var(--dw-dur-loop) ease-out infinite;\\n}\\n@keyframes dw-status-dot-ping {\\n 0% { transform: scale(0.4); opacity: 0.45; }\\n 100% { transform: scale(1.4); opacity: 0; }\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .dw-status-dot.dw-status-dot--live::after { animation: none; }\\n}\\n.dw-tag {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n max-width: 100%;\\n padding: 2px var(--dw-space-2);\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-semibold);\\n white-space: nowrap;\\n}\\n.dw-tag--accent {\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-tag--add {\\n border: 1px dashed var(--dw-border-strong);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-tag--add:hover {\\n border-color: var(--dw-accent);\\n color: var(--dw-accent);\\n}\\n.dw-chip {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 3px 6px 3px 10px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n}\\n.dw-chip.dw-chip--subtle { color: var(--dw-text-secondary); font-weight: var(--dw-font-weight-regular); }\\n.dw-chip.dw-chip--code {\\n padding: 1px var(--dw-space-2);\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface-section);\\n font-family: var(--dw-font-mono);\\n font-weight: var(--dw-font-weight-regular);\\n}\\n.dw-chip.dw-chip--code.dw-chip--selectable:hover:not(.is-selected) { background: var(--dw-surface-pressed); }\\n.dw-chip > .pi,\\n.dw-pill > .pi { font-size: 1em; }\\n.dw-chip.is-selected,\\n.dw-chip--accent {\\n border-color: var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-chip__remove {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 14px;\\n height: 14px;\\n padding: 0;\\n border: 0;\\n border-radius: var(--dw-radius-sm);\\n background: transparent;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-10);\\n cursor: pointer;\\n}\\n.dw-chip__remove:hover {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n}\\n.dw-chip__remove > .pi { font-size: inherit; }\\n.dw-chip__remove.dw-chip__remove--busy { cursor: default; pointer-events: none; }\\n.dw-chip__remove.dw-chip__remove--busy::before { font-size: var(--dw-font-size-10); }\\n.dw-badge {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-1);\\n min-width: 18px;\\n height: 18px;\\n padding: 0 6px;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n line-height: 1;\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-badge--accent {\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-badge--danger {\\n background: var(--dw-status-danger-bg);\\n color: var(--dw-status-danger-fg);\\n}\\n.dw-status-pill-host { display: inline-flex; max-width: 100%; }\\n.dw-pill--sm { padding: 1px 6px; font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-16); }\\n.dw-pill__label { overflow: hidden; text-overflow: ellipsis; }\\n.dw-pill__count { font-weight: var(--dw-font-weight-semibold); font-variant-numeric: tabular-nums; }\\n.dw-pill-spacer { display: inline-block; width: 1px; height: 18px; }\\n.dw-pill--selectable {\\n cursor: pointer;\\n transition: box-shadow var(--dw-dur-micro), border-color var(--dw-dur-micro);\\n}\\n.dw-pill--selectable:hover { border-color: currentColor; }\\n.dw-pill--selectable.is-selected { box-shadow: 0 0 0 2px var(--dw-surface), 0 0 0 3px currentColor; }\\n.dw-pill--selectable:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-pill__dot--pulse { animation: dw-pulse var(--dw-dur-loop) var(--dw-ease-inout) infinite; }\\n@keyframes dw-pulse {\\n 0%, 100% { opacity: 1; transform: scale(1); }\\n 50% { opacity: 0.35; transform: scale(0.8); }\\n}\\n.dw-badge__img { width: 12px; height: 12px; flex-shrink: 0; object-fit: contain; }\\n.dw-badge--label {\\n height: auto;\\n padding: 1px 6px;\\n border-radius: var(--dw-radius-sm);\\n font-weight: var(--dw-font-weight-medium);\\n line-height: var(--dw-line-height-16);\\n white-space: nowrap;\\n}\\n.dw-badge.dw-badge--md { min-width: 18px; height: 18px; font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-regular); }\\n.dw-badge--label.dw-badge--md { height: auto; padding: 1px var(--dw-space-2); font-weight: var(--dw-font-weight-medium); }\\n.dw-badge.dw-badge--bordered { border: 1px solid var(--dw-border); }\\n.dw-badge--label.dw-badge--bordered { padding: 0 5px; }\\n.dw-badge--label.dw-badge--md.dw-badge--bordered { padding: 0 7px; }\\n.dw-badge--neutral { background: var(--dw-surface-pressed); color: var(--dw-text-secondary); }\\n.dw-badge--muted { background: var(--dw-surface-pressed); color: var(--dw-text-muted); border: 1px solid var(--dw-border); }\\n.dw-badge--warning { background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-badge--success { background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-badge--workflow { background: var(--dw-entity-workflow-bg); color: var(--dw-entity-workflow-fg); }\\n.dw-badge--reasoning { background: var(--dw-entity-reasoning-bg); color: var(--dw-entity-reasoning-fg); }\\n.dw-badge i { font-size: var(--dw-font-size-10); }\\n.dw-tag-host { display: inline-flex; max-width: 100%; min-width: 0; }\\n.dw-tag--user {\\n max-width: 100%;\\n border: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-weight: var(--dw-font-weight-medium);\\n}\\n.dw-tag__dot {\\n flex: none;\\n width: 8px;\\n height: 8px;\\n border-radius: 2px;\\n}\\n.dw-tag .dw-tag__icon { display: inline-flex; flex: none; font-size: var(--dw-font-size-12); line-height: 1; }\\n.dw-tag__label { overflow: hidden; text-overflow: ellipsis; }\\n.dw-tag-options .p-autocomplete-list { padding: 0; }\\n.dw-tag-options .p-autocomplete-option { padding-block: var(--dw-space-1); }\\n.dw-tag--clickable { cursor: pointer; }\\n.dw-tag--clickable:hover { border-color: var(--dw-border-strong); }\\n.dw-tag--clickable:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-tag-list {\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n}\\n.dw-tag-list--compact { flex-wrap: nowrap; }\\n.dw-tag-list--compact > dw-tag { flex: 0 1 auto; min-width: 0; }\\n.dw-tag-list--compact .dw-tag--user { min-width: 0; }\\n.dw-tag-list--compact .dw-tag__label { min-width: 0; white-space: nowrap; }\\n.dw-tag-list__add { flex-shrink: 0; }\\n.dw-tag-list--compact.dw-tag-list--measuring { overflow: hidden; }\\n.dw-tag-list--compact.dw-tag-list--measuring > dw-tag { flex-shrink: 0; }\\n.dw-tag-list__add.dw-icon-btn--labelled { gap: 2px; width: auto; padding: 0 var(--dw-space-1); font-size: var(--dw-font-size-11); font-weight: var(--dw-font-weight-medium); }\\n.dw-tag-list__add > .pi { font-size: var(--dw-font-size-10); }\\n.dw-tag--more {\\n border: 1px solid var(--dw-border);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-tag--more:hover { color: var(--dw-accent); border-color: var(--dw-border-accent); }\\n.dw-chip-host { display: inline-flex; max-width: 100%; }\\n.dw-chip--selectable { cursor: pointer; padding-right: 10px; }\\n.dw-chip--selectable:hover { border-color: var(--dw-border-strong); }\\n.dw-chip--selectable:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-chip.dw-chip--md {\\n gap: var(--dw-space-2);\\n min-height: var(--dw-size-control);\\n padding: 0 var(--dw-space-4);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-chip.dw-chip--filled.is-selected {\\n border-color: var(--dw-accent);\\n background: var(--dw-accent-tint-strong);\\n color: var(--dw-accent-text);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-chip__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-chip__value { color: var(--dw-text-secondary); font-weight: var(--dw-font-weight-semibold); font-variant-numeric: tabular-nums; }\\n.dw-chip__img { width: 14px; height: 14px; object-fit: contain; }\\n.dw-chip.dw-chip--danger { border-color: var(--dw-status-danger-border); background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-chip.dw-chip--warning { border-color: var(--dw-status-warning-border); background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-chip.dw-chip--success { border-color: var(--dw-status-success-border); background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-chip.dw-chip--info,\\n.dw-chip.dw-chip--primary { border-color: var(--dw-status-info-border); background: var(--dw-status-info-bg); color: var(--dw-status-info-fg); }\\n.dw-swatches {\\n display: grid;\\n grid-template-columns: repeat(8, var(--dw-size-control-sm));\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-1);\\n}\\n.dw-swatch {\\n display: grid;\\n place-items: center;\\n width: var(--dw-size-control-sm);\\n height: var(--dw-size-control-sm);\\n padding: 0;\\n border: none;\\n border-radius: var(--dw-radius-full);\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-12);\\n cursor: pointer;\\n transition: transform var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-swatch:hover { transform: scale(1.08); }\\n.dw-swatch--selected,\\n.dw-swatch:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--dw-surface), 0 0 0 4px var(--dw-accent); }\\n.dw-tag-color-btn-host { display: inline-flex; flex: none; }\\n.dw-tag-color-btn {\\n display: inline-grid;\\n place-items: center;\\n width: var(--dw-size-control);\\n min-height: var(--dw-size-control-sm);\\n padding: 0;\\n border: 1px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface-pressed);\\n font-size: var(--dw-font-size-14);\\n cursor: pointer;\\n}\\n.dw-tag-color-btn__icon { display: inline-flex; line-height: 1; }\\n.dw-tag-color-btn--editable:hover { background: var(--dw-fill-subtle); }\\n.dw-tag-color-btn:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-tag-color-btn[aria-disabled=\\\"true\\\"] { background: var(--dw-surface-disabled); cursor: not-allowed; }\\n.dw-tag-color-btn[aria-disabled=\\\"true\\\"] .dw-tag-color-btn__icon { opacity: 0.45; }\\n.dw-card {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n min-width: 0;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-xs);\\n}\\n.dw-card__header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n padding: var(--dw-space-4) var(--dw-space-4) 0;\\n}\\n.dw-card__header:last-child { padding-bottom: var(--dw-space-4); }\\n.dw-card__title {\\n min-width: 0;\\n}\\n.dw-card__desc {\\n margin: 0;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-card__body {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-4);\\n flex: 1 1 auto;\\n}\\n.dw-card__footer {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-4);\\n border-top: 1px solid var(--dw-border);\\n}\\n.dw-card--hover {\\n cursor: pointer;\\n transition: border-color var(--dw-dur-enter) var(--dw-ease), box-shadow var(--dw-dur-enter) var(--dw-ease), transform var(--dw-dur-enter) var(--dw-ease);\\n}\\n.dw-card--hover:hover {\\n border-color: var(--dw-border-strong);\\n box-shadow: var(--dw-shadow-card-hover);\\n transform: translateY(-2px);\\n}\\n.dw-card--option.dw-card--hover:hover { transform: none; }\\n.dw-card--hover:focus-visible {\\n outline: none;\\n border-color: var(--dw-accent);\\n box-shadow: var(--dw-focus-ring);\\n}\\n.dw-card.is-selected,\\n.dw-card--selected {\\n border-color: var(--dw-accent);\\n background: var(--dw-surface-selected);\\n}\\n.dw-card--flat { box-shadow: none; }\\n.dw-card--sm .dw-card__header { gap: var(--dw-space-2); padding: var(--dw-space-3) var(--dw-space-3) 0; }\\n.dw-card--sm .dw-card__header:last-child { padding-bottom: var(--dw-space-3); }\\n.dw-card--sm .dw-card__body { gap: var(--dw-space-1); padding: var(--dw-space-2) var(--dw-space-3) var(--dw-space-3); }\\n.dw-card--sm.dw-card--hover:hover { transform: none; }\\n.dw-stat-card {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-1);\\n padding: var(--dw-space-4);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n}\\n.dw-stat-card__label {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-stat-card--with-icon {\\n display: grid;\\n grid-template-columns: auto 1fr;\\n align-items: center;\\n column-gap: var(--dw-space-3);\\n}\\n.dw-stat-card--with-icon > :not(.dw-stat-card__icon) { grid-column: 2; }\\n.dw-stat-card__icon { grid-row: 1 / span 3; }\\n.dw-stat-card__icon img { width: 20px; height: 20px; object-fit: contain; }\\n.pi.dw-stat-card__info {\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n cursor: help;\\n}\\n.dw-stat-card__value {\\n font-size: var(--dw-font-size-20);\\n line-height: var(--dw-line-height-28);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-stat-card__label-text { min-width: 0; }\\n.dw-stat-card__label-end {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n flex-shrink: 0;\\n margin-left: auto;\\n}\\n.dw-stat-card__label-end:empty { display: none; }\\n.dw-stat-card__value-suffix {\\n margin-left: var(--dw-space-1);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-muted);\\n}\\n.dw-stat-card.dw-stat-card--dashed {\\n border-style: dashed;\\n border-color: var(--dw-border-strong);\\n background: var(--dw-surface-hover);\\n}\\n.dw-stat-card.dw-card--sm { gap: var(--dw-space-0_5); padding: var(--dw-space-2) var(--dw-space-3); }\\n.dw-stat-card.dw-card--sm .dw-stat-card__value {\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-stat-card--caps-label .dw-stat-card__label {\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n}\\n.dw-tile-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));\\n gap: var(--dw-space-3);\\n}\\n.dw-tile-host {\\n display: flex;\\n min-width: 0;\\n}\\n.dw-tile-host > .dw-tile {\\n flex: 1;\\n min-width: 0;\\n}\\n.dw-tile__count {\\n display: inline-flex;\\n align-items: baseline;\\n gap: 6px;\\n}\\n.dw-tile__count b {\\n font-variant-numeric: tabular-nums;\\n}\\n.dw-box {\\n padding: var(--dw-space-4);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n}\\n.dw-box--muted {\\n border-color: var(--dw-border);\\n background: var(--dw-surface-section);\\n}\\n.dw-box--accent {\\n border-color: var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n}\\n.dw-box--compact { padding: var(--dw-space-3); }\\n.dw-section {\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-surface);\\n}\\n.dw-section__header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n width: 100%;\\n padding: var(--dw-space-3) var(--dw-space-4);\\n border: 0;\\n background: transparent;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-semibold);\\n text-align: left;\\n cursor: pointer;\\n}\\n.dw-section__chevron {\\n margin-left: auto;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n transition: transform var(--dw-dur-enter) var(--dw-ease);\\n}\\n.dw-section.is-open .dw-section__chevron { transform: rotate(180deg); }\\n.dw-section__body {\\n padding: 0 var(--dw-space-4) var(--dw-space-4);\\n}\\n.dw-divider {\\n display: block;\\n flex-shrink: 0;\\n align-self: stretch;\\n height: 1px;\\n margin: var(--dw-space-3) 0;\\n border: 0;\\n background: var(--dw-border);\\n}\\n.dw-divider--vertical {\\n display: inline-block;\\n align-self: stretch;\\n width: 1px;\\n height: auto;\\n margin: 0 var(--dw-space-2);\\n}\\n.dw-divider--vertical.dw-divider--fixed { align-self: center; }\\n.dw-divider--space-none { margin: 0; }\\n.dw-divider--space-sm { margin: var(--dw-space-1) 0; }\\n.dw-divider--space-lg { margin: var(--dw-space-4) 0; }\\n.dw-divider--vertical.dw-divider--space-none { margin: 0; }\\n.dw-divider--vertical.dw-divider--space-sm { margin: 0 var(--dw-space-1); }\\n.dw-divider--vertical.dw-divider--space-lg { margin: 0 var(--dw-space-4); }\\n.dw-empty-state {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-10) var(--dw-space-6);\\n text-align: center;\\n color: var(--dw-text-secondary);\\n}\\n.dw-empty-state__icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 48px;\\n height: 48px;\\n margin-bottom: var(--dw-space-2);\\n border-radius: var(--dw-radius-xl);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent);\\n font-size: var(--dw-font-size-20);\\n}\\n.dw-empty-state__title {\\n margin: 0;\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-empty-state__text {\\n max-width: 48ch;\\n margin: 0;\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-empty-state--compact { padding: var(--dw-space-6) var(--dw-space-4); }\\n.dw-banner {\\n display: flex;\\n align-items: flex-start;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3);\\n border: 1px solid var(--dw-status-info-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-status-info-bg);\\n color: var(--dw-status-info-fg);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-banner--success { border-color: var(--dw-status-success-border); background: var(--dw-status-success-bg); color: var(--dw-status-success-fg); }\\n.dw-banner--warning { border-color: var(--dw-status-warning-border); background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-banner--danger { border-color: var(--dw-status-danger-border); background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-banner--neutral { border-color: var(--dw-border); background: var(--dw-surface-section); color: var(--dw-text-secondary); }\\n.dw-avatar {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n width: 32px;\\n height: 32px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n overflow: hidden;\\n}\\n.dw-avatar--sm { width: 24px; height: 24px; border-radius: var(--dw-radius-md); font-size: var(--dw-font-size-10); }\\n.dw-avatar--lg { width: 40px; height: 40px; border-radius: var(--dw-radius-xl); font-size: var(--dw-font-size-14); }\\n.dw-entity-icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n width: 32px;\\n height: 32px;\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-entity-icon--accent { background: var(--dw-accent-tint); color: var(--dw-accent); }\\n.dw-entity-icon--workflow { background: var(--dw-entity-workflow-bg); color: var(--dw-entity-workflow-fg); }\\n.dw-entity-icon--reasoning { background: var(--dw-entity-reasoning-bg); color: var(--dw-entity-reasoning-fg); }\\n.dw-entity-icon--orange { background: var(--dw-icon-tint-orange); color: var(--dw-status-warning-fg); }\\n.dw-entity-icon--cyan { background: var(--dw-icon-tint-cyan); color: var(--dw-icon-tint-cyan-fg); }\\n.dw-entity-icon--pink { background: var(--dw-icon-tint-pink); color: var(--dw-icon-tint-pink-fg); }\\n.dw-entity-icon--danger { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-avatar { position: relative; overflow: visible; }\\n.dw-avatar img { width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }\\n.dw-avatar--xs { width: 20px; height: 20px; border-radius: var(--dw-radius-sm); font-size: var(--dw-font-size-10); }\\n.dw-avatar--tint-neutral { background: var(--dw-surface-pressed); color: var(--dw-text-label); }\\n.dw-avatar--tint-accent { background: var(--dw-accent-tint); color: var(--dw-accent-text); }\\n.dw-avatar--tint-workflow { background: var(--dw-entity-workflow-bg); color: var(--dw-entity-workflow-fg); }\\n.dw-avatar--tint-reasoning { background: var(--dw-entity-reasoning-bg); color: var(--dw-entity-reasoning-fg); }\\n.dw-avatar--tint-orange { background: var(--dw-icon-tint-orange); color: var(--dw-status-warning-fg); }\\n.dw-avatar--tint-cyan { background: var(--dw-icon-tint-cyan); color: var(--dw-icon-tint-cyan-fg); }\\n.dw-avatar--tint-pink { background: var(--dw-icon-tint-pink); color: var(--dw-icon-tint-pink-fg); }\\n.dw-avatar--ring { transition: border-color var(--dw-dur-micro); }\\nbutton:hover > dw-avatar .dw-avatar--ring,\\nbutton[aria-expanded='true'] > dw-avatar .dw-avatar--ring {\\n border-color: var(--dw-border-hover);\\n}\\n.dw-avatar__presence {\\n position: absolute;\\n right: -3px;\\n bottom: -3px;\\n width: 12px;\\n height: 12px;\\n border: 2px solid var(--dw-surface);\\n border-radius: var(--dw-radius-round);\\n background: var(--dw-status-neutral-solid);\\n}\\n.dw-avatar__presence.is-online { background: var(--dw-status-success-solid); }\\n.dw-avatar--xs .dw-avatar__presence { right: -2px; bottom: -2px; width: 10px; height: 10px; }\\n.dw-avatar--lg .dw-avatar__presence { width: 14px; height: 14px; }\\ndw-entity-icon.dw-entity-icon { background: transparent; }\\ndw-entity-icon.dw-entity-icon--framed { background: var(--dw-surface-pressed); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--accent { background: var(--dw-accent-tint); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--workflow { background: var(--dw-entity-workflow-bg); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--reasoning { background: var(--dw-entity-reasoning-bg); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--orange { background: var(--dw-icon-tint-orange); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--cyan { background: var(--dw-icon-tint-cyan); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--pink { background: var(--dw-icon-tint-pink); }\\ndw-entity-icon.dw-entity-icon--framed.dw-entity-icon--danger { background: var(--dw-status-danger-bg); }\\n.dw-entity-icon img { width: 100%; height: 100%; object-fit: contain; }\\n.dw-entity-icon--xs { width: 14px; height: 14px; font-size: var(--dw-font-size-12); }\\n.dw-entity-icon--sm { width: 18px; height: 18px; font-size: var(--dw-font-size-14); }\\n.dw-entity-icon--md { width: 24px; height: 24px; font-size: var(--dw-font-size-16); }\\n.dw-entity-icon--lg { width: 32px; height: 32px; font-size: var(--dw-font-size-20); }\\n.dw-entity-icon--xs > .pi,\\n.dw-entity-icon--sm > .pi { font-size: inherit; }\\n.dw-entity-icon--xl { width: 40px; height: 40px; font-size: var(--dw-font-size-20); }\\n.dw-entity-icon--framed { padding: 6px; border-radius: var(--dw-radius-lg); }\\n.dw-entity-icon--framed.dw-entity-icon--xs { width: 20px; height: 20px; padding: 4px; font-size: var(--dw-font-size-11); border-radius: var(--dw-radius-sm); }\\n.dw-entity-icon--framed.dw-entity-icon--sm { width: 28px; height: 28px; padding: 5px; }\\n.dw-entity-icon--framed.dw-entity-icon--md { width: 32px; height: 32px; }\\n.dw-entity-icon--framed.dw-entity-icon--lg { width: 40px; height: 40px; padding: 8px; }\\n.dw-entity-icon--framed.dw-entity-icon--xl { width: 48px; height: 48px; padding: 10px; border-radius: var(--dw-radius-xl); }\\n.dw-entity-icon--neutral { background: var(--dw-surface-pressed); color: var(--dw-text-secondary); }\\n.dw-empty-state__image { max-width: 100%; height: auto; }\\n.dw-empty-state__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--dw-space-2); margin-top: var(--dw-space-2); }\\n.dw-empty-state__actions:empty { display: none; }\\n.dw-empty-state--inline { padding: var(--dw-space-4); font-size: var(--dw-font-size-12); }\\n.dw-empty-state--inline .dw-empty-state__title { font-size: var(--dw-font-size-14); }\\n.dw-empty-state--error .dw-empty-state__icon { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-solid); }\\n.dw-empty-state--error .dw-empty-state__title { color: var(--dw-status-danger-fg); }\\n.dw-table-empty__cell { padding: 0 !important; }\\ndw-banner.dw-banner[hidden] { display: none; }\\n.dw-banner__icon {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n height: 1lh;\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-banner__content { flex: 1 1 auto; min-width: 0; }\\n.dw-banner__title { margin: 0 0 2px; font-weight: var(--dw-font-weight-semibold); }\\n.dw-banner__text { margin: 0; }\\n.dw-banner__actions { display: flex; flex-wrap: wrap; gap: var(--dw-space-2); margin-top: var(--dw-space-2); }\\n.dw-banner__actions:empty { display: none; }\\n.dw-banner__close { margin: -4px -4px 0 0; color: inherit; }\\n.dw-banner--sm { padding: 6px var(--dw-space-2); font-size: var(--dw-font-size-11); }\\n.dw-banner--edge { border-width: 0 0 0 4px; border-radius: var(--dw-radius-sm); }\\n.dw-banner--md .dw-banner__title,\\n.dw-banner .dw-banner__title { font-size: var(--dw-font-size-12); }\\ndw-box.dw-box { display: block; }\\n.dw-box--flush { padding: 0; }\\n.dw-box.dw-box--borderless { border-color: transparent; }\\n.dw-box__title { margin: 0 0 var(--dw-space-2); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-semibold); color: var(--dw-text); }\\ndw-card.dw-card,\\ndw-card.dw-stat-card { outline: none; }\\ndw-card.dw-card:focus-visible,\\ndw-card.dw-stat-card:focus-visible { border-color: var(--dw-accent); box-shadow: var(--dw-focus-ring); }\\n.dw-card__titles { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }\\n.dw-card__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-card--option .dw-card__title { white-space: normal; overflow-wrap: anywhere; }\\n.dw-card__subtitle { margin: 0; overflow: hidden; color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); line-height: var(--dw-line-height-16); text-overflow: ellipsis; white-space: nowrap; }\\n.dw-card__header-end { display: inline-flex; align-items: center; gap: var(--dw-space-1); margin-left: auto; flex: none; }\\n.dw-card__icon { flex: none; }\\n.dw-card__icon img { width: 20px; height: 20px; object-fit: contain; }\\n.dw-card__desc--clamp-1,\\n.dw-card__desc--clamp-2,\\n.dw-card__desc--clamp-3 { display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }\\n.dw-card__desc--clamp-1 { -webkit-line-clamp: 1; }\\n.dw-card__desc--clamp-2 { -webkit-line-clamp: 2; }\\n.dw-card__desc--clamp-3 { -webkit-line-clamp: 3; }\\n.dw-card.is-disabled,\\n.dw-stat-card.is-disabled { opacity: 0.6; cursor: not-allowed; transform: none; box-shadow: none; }\\n.dw-card--option .dw-card__header { padding-bottom: var(--dw-space-3); }\\n.dw-card--option .dw-card__body { padding-top: 0; padding-left: 44px; }\\n.dw-card__radio {\\n flex: none;\\n width: 16px;\\n height: 16px;\\n border: 1px solid var(--dw-border-strong);\\n border-radius: var(--dw-radius-round);\\n background: var(--dw-surface);\\n}\\n.dw-card__radio.is-checked {\\n border: 5px solid var(--dw-accent);\\n}\\ndw-card.dw-stat-card { cursor: default; }\\ndw-card.dw-stat-card.dw-card--hover { cursor: pointer; transition: border-color var(--dw-dur-micro), background var(--dw-dur-micro); }\\ndw-card.dw-stat-card.dw-card--hover:hover { border-color: var(--dw-border-strong); }\\ndw-card.dw-stat-card.is-selected { border-color: var(--dw-accent); background: var(--dw-surface-selected); }\\ndw-section.dw-section { display: block; }\\n.dw-section__head { display: flex; align-items: center; gap: var(--dw-space-2); padding-right: var(--dw-space-3); }\\n.dw-section__head .dw-section__header { flex: 1 1 auto; min-width: 0; }\\n.dw-section__actions { display: inline-flex; align-items: center; gap: var(--dw-space-1); }\\n.dw-section__actions:empty { display: none; }\\n.dw-section__header:disabled { cursor: not-allowed; opacity: 0.6; }\\n.dw-section__header:focus-visible { outline: none; box-shadow: inset var(--dw-focus-ring); border-radius: var(--dw-radius-card); }\\ndiv.dw-section__header { cursor: default; }\\n.dw-section__chevron { margin-left: 0; transform: rotate(-90deg); }\\n.dw-section.is-open .dw-section__chevron { transform: rotate(0deg); }\\n.dw-section__icon { color: var(--dw-text-secondary); }\\n.dw-section__header { align-items: flex-start; }\\n.dw-section__header > .dw-section__chevron,\\n.dw-section__header > i.dw-section__icon {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n height: var(--dw-line-height-20);\\n}\\n.dw-section__titles { display: flex; flex-direction: column; min-width: 0; }\\n.dw-section__title-row { display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-section__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-section__subtitle { color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); font-weight: var(--dw-font-weight-regular); }\\n.dw-section--plain { border: 0; background: transparent; }\\n.dw-section--plain .dw-section__header { padding-left: 0; padding-right: 0; }\\n.dw-section--plain .dw-section__body { padding-left: 0; padding-right: 0; }\\n.dw-section__step {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n margin-right: var(--dw-space-2);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-accent);\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-section--stepped .dw-section__header { font-size: var(--dw-font-size-16); line-height: var(--dw-line-height-24); }\\n.dw-section--stepped .dw-section__body { padding-left: calc(32px + var(--dw-space-4)); }\\n.dw-section--stepped.dw-section--plain .dw-section__body { padding-left: calc(32px + var(--dw-space-4)); }\\n.dw-section--caps .dw-section__title { color: var(--dw-text-label); font-size: var(--dw-font-size-12); letter-spacing: 0.5px; text-transform: uppercase; }\\n.dw-section--caps .dw-section__header { padding: var(--dw-space-2) 14px; }\\n.dw-section--caps .dw-section__body { padding: 10px 14px; border-top: 1px solid var(--dw-border); }\\n.dw-wizard {\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n background: var(--dw-surface-rail);\\n}\\n.dw-wizard__header {\\n display: grid;\\n flex-shrink: 0;\\n grid-template-columns: 1fr auto 1fr;\\n align-items: center;\\n gap: var(--dw-space-4);\\n height: 52px;\\n padding: 0 var(--dw-space-6);\\n border-bottom: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.dw-wizard__title {\\n color: var(--dw-text-strong);\\n font-size: var(--dw-font-size-16);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-wizard__close { justify-self: end; }\\n.dw-wizard__header .p-stepper { background: transparent; }\\n.dw-wizard__header .p-step-list { margin: 0; padding: 0; border: 0; background: transparent; }\\n.dw-wizard__header .p-step { flex: 0 0 auto; }\\n.dw-wizard__header .p-stepper-separator { width: 48px; flex: 0 0 auto; }\\n.dw-wizard__body { display: flex; flex: 1 1 auto; min-height: 0; }\\n.dw-wizard__nav {\\n flex-shrink: 0;\\n width: 280px;\\n padding: var(--dw-space-6) var(--dw-space-2);\\n border-right: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n overflow-y: auto;\\n}\\n.dw-wizard__content { flex: 1 1 auto; min-width: 0; padding: var(--dw-space-8) var(--dw-space-12); overflow-y: auto; }\\n.dw-wizard__footer {\\n display: flex;\\n flex-shrink: 0;\\n align-items: center;\\n gap: var(--dw-space-3);\\n height: 62px;\\n padding: 0 var(--dw-space-8);\\n border-top: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.dw-toggle-card {\\n display: block;\\n padding: var(--dw-space-5) var(--dw-space-6);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-sm);\\n transition: border-color var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-toggle-card:hover { border-color: var(--dw-border-strong); }\\n.dw-toggle-card.is-invalid { border-color: var(--dw-status-danger-border); }\\n.dw-toggle-card__header { display: flex; align-items: flex-start; gap: var(--dw-space-4); }\\n.dw-toggle-card__control { display: inline-flex; flex-shrink: 0; align-items: center; height: var(--dw-line-height-20); }\\n.dw-toggle-card__icon { flex-shrink: 0; }\\n.dw-toggle-card__titles { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\\n.dw-toggle-card__title {\\n margin: 0;\\n color: var(--dw-text-strong);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-toggle-card__desc { margin: 0; color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-toggle-card__reason { margin: 0; color: var(--dw-status-warning-fg); font-size: var(--dw-font-size-12); }\\n.dw-toggle-card.is-disabled .dw-toggle-card__icon,\\n.dw-toggle-card.is-disabled .dw-toggle-card__title,\\n.dw-toggle-card.is-disabled .dw-toggle-card__desc { opacity: 0.6; }\\n.dw-toggle-card__body {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-space-5);\\n margin-top: var(--dw-space-5);\\n padding-top: var(--dw-space-5);\\n border-top: 1px solid var(--dw-border);\\n}\\n.p-splitter.dw-splitter { height: 100%; border: none; border-radius: 0; background: transparent; }\\n.p-splitter.dw-splitter > .p-splitterpanel { display: flex; min-width: 0; min-height: 0; overflow: hidden; }\\n.p-splitter.dw-splitter > .p-splitterpanel > * { flex: 1 1 auto; height: 100%; min-width: 0; min-height: 0; }\\n.p-splitter.dw-splitter > .p-splitter-gutter { position: relative; background: transparent; cursor: col-resize; }\\n.p-splitter.dw-splitter > .p-splitter-gutter::before {\\n content: '';\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 50%;\\n width: 1px;\\n background: var(--dw-border);\\n transform: translateX(-50%);\\n}\\n.p-splitter.dw-splitter > .p-splitter-gutter:hover::before,\\n.p-splitter.dw-splitter > .p-splitter-gutter.p-splitter-gutter-resizing::before { width: 2px; background: var(--dw-accent); }\\n.p-splitter.dw-splitter .p-splitter-gutter-handle { background: transparent; }\\n.p-splitter.dw-splitter--rail-start > .p-splitter-gutter {\\n background: linear-gradient(to right, var(--dw-surface-rail) 50%, transparent 50%);\\n}\\n.dw-table {\\n width: 100%;\\n border-collapse: separate;\\n border-spacing: 0;\\n background: var(--dw-surface);\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-table th {\\n height: var(--dw-size-table-header);\\n padding: 0 var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n background: var(--dw-surface-section);\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n text-align: left;\\n white-space: nowrap;\\n}\\n.dw-table td {\\n height: var(--dw-size-table-row);\\n padding: var(--dw-space-2) var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n vertical-align: middle;\\n}\\n.dw-table tbody tr:hover td {\\n background: var(--dw-surface-hover);\\n}\\n.dw-table--compact td { height: auto; padding: 6px var(--dw-space-3); }\\n.dw-kv {\\n display: grid;\\n grid-template-columns: minmax(120px, max-content) 1fr;\\n align-items: baseline;\\n gap: var(--dw-space-2) var(--dw-space-4);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n}\\n.dw-kv__key { color: var(--dw-text-secondary); }\\n.dw-kv__value { color: var(--dw-text); min-width: 0; overflow-wrap: anywhere; }\\n.dw-kv-list { display: flex; flex-direction: column; width: 100%; }\\n.dw-kv-list__row { display: flex; align-items: flex-start; gap: var(--dw-space-2); padding: 5px 0; border-bottom: 1px solid var(--dw-surface-pressed); }\\n.dw-kv-list__row:last-child { border-bottom: none; }\\n.dw-kv-list__key {\\n width: 110px;\\n flex-shrink: 0;\\n padding-top: 2px;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-kv-list__value {\\n display: flex;\\n flex: 1;\\n align-items: flex-start;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n}\\n.dw-kv-list--sm .dw-kv-list__value { font-size: var(--dw-font-size-13); }\\n.dw-kv-list__action { flex-shrink: 0; opacity: 0; transition: opacity var(--dw-dur-micro) var(--dw-ease); }\\n.dw-kv-list__row:hover .dw-kv-list__action,\\n.dw-kv-list__action:focus-within { opacity: 1; }\\n.p-datatable .p-datatable-thead > tr > th {\\n font-size: var(--dw-font-size-12);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text-label);\\n white-space: nowrap;\\n}\\n.dw-row-actions {\\n display: inline-flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: var(--dw-space-1);\\n}\\n.dw-row-actions--reveal {\\n opacity: 0;\\n transition: opacity var(--dw-dur-micro);\\n}\\ntr:hover .dw-row-actions--reveal,\\ntr:focus-within .dw-row-actions--reveal,\\n.dw-card:hover .dw-row-actions--reveal {\\n opacity: 1;\\n}\\n.dw-count-pill {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 22px;\\n padding: 1px var(--dw-space-2);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\nbody .p-tree .p-tree-node-content.p-tree-node-selected,\\nbody .p-treetable .p-treetable-tbody > tr.p-treetable-row-selected {\\n background: var(--dw-surface-selected);\\n color: var(--dw-accent-text);\\n}\\n.dw-tree-spine {\\n border-left: 1px solid var(--dw-tree-spine);\\n}\\n.dw-skeleton {\\n height: 20px;\\n border-radius: var(--dw-radius-sm);\\n background: linear-gradient(90deg, var(--dw-skeleton-base) 25%, var(--dw-skeleton-shine) 50%, var(--dw-skeleton-base) 75%);\\n background-size: 200% 100%;\\n animation: dw-skeleton-shimmer 1.5s ease-in-out infinite;\\n}\\n@keyframes dw-skeleton-shimmer {\\n 0% { background-position: 200% 0; }\\n 100% { background-position: -200% 0; }\\n}\\n.dw-busy-line {\\n position: relative;\\n overflow: hidden;\\n}\\n.dw-busy-line::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: -40%;\\n width: 40%;\\n height: 2px;\\n background: var(--dw-accent);\\n animation: dw-busy-line var(--dw-dur-loop) var(--dw-ease-inout) infinite;\\n}\\n@keyframes dw-busy-line {\\n to { left: 100%; }\\n}\\n.dw-spinner {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-spinner__icon { color: var(--dw-accent); }\\n.dw-spinner--xs .dw-spinner__icon { font-size: 10px; }\\n.dw-spinner--sm .dw-spinner__icon { font-size: 14px; }\\n.dw-spinner--md .dw-spinner__icon { font-size: 20px; }\\n.dw-spinner--lg .dw-spinner__icon { font-size: 32px; }\\n.dw-spinner--block {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n width: 100%;\\n min-height: 120px;\\n padding: var(--dw-space-6);\\n}\\n.dw-spinner--overlay,\\n.dw-spinner--fullscreen {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n inset: 0;\\n z-index: var(--dw-z-overlay);\\n background: color-mix(in srgb, var(--dw-surface) 75%, transparent);\\n}\\n.dw-spinner--overlay { position: absolute; }\\n.dw-spinner--fullscreen { position: fixed; z-index: var(--dw-z-modal); }\\n.dw-skeleton-host { display: block; }\\n.dw-skeleton-rows,\\n.dw-skeleton-list {\\n display: flex;\\n flex-direction: column;\\n}\\n.dw-skeleton-rows__row {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-4);\\n height: var(--dw-size-table-row);\\n padding: 0 var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-skeleton-list { gap: var(--dw-space-3); padding: var(--dw-space-2) 10px; }\\n.dw-skeleton-list__row { display: flex; justify-content: space-between; gap: var(--dw-space-3); }\\n.dw-table-host { display: flex; flex-direction: column; min-height: 0; min-width: 0; }\\n.dw-table-host.dw-table-host--framed {\\n overflow: hidden;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-surface);\\n}\\n.dw-table-host > .p-datatable.dw-datatable { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }\\n.dw-table-host > .p-datatable.dw-datatable > .p-datatable-table-container { flex: 1 1 auto; min-height: 0; }\\n.dw-table__cell-text {\\n display: inline-block;\\n max-width: 100%;\\n min-width: 0;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n vertical-align: middle;\\n}\\n.dw-table__col--fill { width: 100%; max-width: 0; }\\n.dw-table__actions-col { text-align: right; white-space: nowrap; }\\n.dw-table__check-col,\\n.dw-table__expander-col { width: 44px; text-align: center; }\\n.dw-table__sort-head {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n max-width: 100%;\\n vertical-align: middle;\\n}\\n.p-datatable.dw-datatable p-sorticon {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n}\\n.p-datatable.dw-datatable p-sorticon:empty,\\n.p-datatable.dw-datatable p-sorticon:not(:has(.is-sorted)) { display: none; }\\n.p-datatable.dw-datatable .p-datatable-sort-icon { display: inline-flex; align-items: center; }\\n.dw-table__sort { display: none; }\\n.dw-table__sort.is-sorted {\\n display: block;\\n color: inherit;\\n font-size: var(--dw-font-size-10);\\n}\\n.p-datatable.dw-datatable .p-sortable-column-badge.p-badge {\\n min-width: 14px;\\n height: 14px;\\n padding: 0 3px;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-border);\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-10);\\n font-weight: var(--dw-font-weight-semibold);\\n font-variant-numeric: tabular-nums;\\n line-height: 1;\\n}\\n.dw-table__row--clickable { cursor: pointer; }\\n.dw-table__row--clickable:focus-visible { outline: none; box-shadow: inset var(--dw-focus-ring); }\\n.dw-table__expanded-row > td { background: var(--dw-surface-section); }\\n.dw-table__skeleton-row > td { height: var(--dw-size-table-row); }\\n.p-datatable.dw-datatable .p-datatable-tbody > tr > td { border-color: var(--dw-border); }\\n.p-datatable.dw-datatable--compact .p-datatable-thead > tr > th,\\n.p-datatable.dw-datatable--compact .p-datatable-tbody > tr > td { padding: 6px var(--dw-space-3); }\\n.dw-meter-host { display: block; min-width: 0; }\\n.dw-meter {\\n position: relative;\\n height: 10px;\\n overflow: hidden;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n}\\n.dw-meter--sm { height: 6px; }\\n.dw-meter__fill {\\n height: 100%;\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-accent);\\n transition: width var(--dw-dur-enter) var(--dw-ease);\\n}\\n.p-datatable.dw-datatable .p-datatable-tbody > tr > td.p-datatable-frozen-column { z-index: 1; }\\n.p-datatable.dw-datatable .p-datatable-thead > tr > th.p-datatable-frozen-column { z-index: 2; }\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-left + :is(th, td).p-datatable-frozen-column-left::before,\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-right:has(+ :is(th, td).p-datatable-frozen-column-right)::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n width: 1px;\\n background: inherit;\\n pointer-events: none;\\n}\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-left + :is(th, td).p-datatable-frozen-column-left::before { left: -1px; }\\n.p-datatable.dw-datatable :is(th, td).p-datatable-frozen-column-right:has(+ :is(th, td).p-datatable-frozen-column-right)::after { right: -1px; }\\n.dw-table-host--hscroll .p-datatable.dw-datatable :is(th, td).dw-table__frozen-edge { box-shadow: inset -1px 0 0 var(--dw-border); }\\n.dw-table-host--hscroll .p-datatable.dw-datatable :is(th, td).dw-table__frozen-edge-end { box-shadow: inset 1px 0 0 var(--dw-border); }\\n.p-datatable.dw-datatable .p-datatable-tbody > tr > td.dw-table-empty__cell { border-bottom-width: 0; }\\n.p-datatable .p-datatable-tbody > tr.dw-table-empty,\\n.p-datatable.p-datatable-hoverable .p-datatable-tbody > tr.dw-table-empty:hover,\\n.p-datatable.p-datatable-hoverable .p-datatable-tbody > tr.dw-table-empty:hover > td { background: transparent; cursor: default; }\\n.p-datatable.dw-datatable .p-datatable-tbody > tr:focus-within .dw-row-actions--reveal { opacity: 1; }\\n.p-datatable.dw-datatable .p-paginator {\\n justify-content: flex-end;\\n border: 0;\\n border-radius: 0;\\n font-size: var(--dw-font-size-12);\\n}\\n.p-datatable.dw-datatable .p-paginator-content { justify-content: flex-end; }\\n.p-datatable.dw-datatable--paginator-left .p-paginator,\\n.p-datatable.dw-datatable--paginator-left .p-paginator-content { justify-content: flex-start; }\\n.p-datatable.dw-datatable--paginator-center .p-paginator,\\n.p-datatable.dw-datatable--paginator-center .p-paginator-content { justify-content: center; }\\n.p-datatable.dw-datatable .p-paginator-current { height: auto; margin-right: var(--dw-space-2); padding: 0; color: var(--dw-text-secondary); }\\n.p-datatable.dw-datatable .p-paginator .p-paginator-page { font-size: var(--dw-font-size-12); }\\n.p-datatable.dw-datatable .p-paginator .p-select { height: 28px; align-items: center; font-size: var(--dw-font-size-12); }\\n.dw-tree { margin: 0; padding: 0; list-style: none; }\\n.dw-tree .dw-tree { padding-left: var(--dw-space-4); margin-left: 7px; border-left: 1px solid var(--dw-tree-spine); }\\n.dw-tree__item { position: relative; }\\n.dw-tree__row {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n min-height: 28px;\\n padding: 2px var(--dw-space-2);\\n border-radius: var(--dw-radius-sm);\\n color: var(--dw-text);\\n cursor: pointer;\\n}\\n.dw-tree__row:hover { background: var(--dw-surface-hover); }\\n.dw-tree__row.is-selected { background: var(--dw-surface-selected); color: var(--dw-accent-text); }\\n.dw-tree__row:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.p-datatable.dw-datatable--fixed .p-datatable-table { table-layout: fixed; }\\n.p-datatable.dw-datatable--fixed .p-datatable-tbody > tr > td:not([colspan]) { overflow: hidden; }\\n.p-datatable.dw-datatable--fixed .p-datatable-thead > tr > th { overflow: hidden; text-overflow: ellipsis; }\\n.p-multiselect.dw-column-picker {\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-control);\\n background: var(--dw-surface);\\n box-shadow: none;\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), border-color var(--dw-dur-micro);\\n}\\n.p-multiselect.dw-column-picker:not(.p-disabled):hover { background: var(--dw-surface-hover); border-color: var(--dw-border); }\\n.p-multiselect.dw-column-picker.p-multiselect-open { background: var(--dw-surface-pressed); border-color: var(--dw-border-strong); }\\n.p-multiselect.dw-column-picker .p-multiselect-label { display: flex; align-items: center; padding: 6px 11px; line-height: var(--dw-line-height-20); }\\n.p-multiselect.dw-column-picker .p-multiselect-label-empty { opacity: 1; visibility: visible; }\\n.dw-column-picker__label {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-medium);\\n color: var(--dw-text-secondary);\\n}\\n.p-multiselect.dw-column-picker .p-multiselect-dropdown { display: none; }\\n.dw-timestamp-host {\\n display: inline;\\n min-width: 0;\\n}\\n.dw-timestamp {\\n white-space: nowrap;\\n}\\n.p-dialog.dw-dialog--sm { width: min(var(--dw-width-dialog-sm), 92vw); }\\n.p-dialog.dw-dialog--md { width: min(var(--dw-width-dialog-md), 92vw); }\\n.p-dialog.dw-dialog--lg { width: min(var(--dw-width-dialog-lg), 92vw); }\\n.p-dialog.dw-dialog--xl { width: min(var(--dw-width-dialog-xl), 94vw); }\\n.p-dialog.dw-dialog--full {\\n width: 100vw;\\n height: 100vh;\\n max-height: 100vh;\\n margin: 0;\\n border: 0;\\n border-radius: 0;\\n}\\n.p-dialog.dw-dialog--full .p-dialog-content { height: 100%; padding: 0; overflow: hidden; }\\n.p-dialog.dw-dialog--full .dw-dialog__body { height: 100%; }\\n.p-dialog .p-dialog-title {\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.p-dialog .p-dialog-footer {\\n gap: var(--dw-space-2);\\n}\\n.dw-confirm__message {\\n margin: 0;\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n color: var(--dw-text);\\n}\\n.dw-confirm__warning {\\n display: flex;\\n align-items: flex-start;\\n gap: var(--dw-space-2);\\n margin-top: var(--dw-space-3);\\n padding: var(--dw-space-3);\\n border: 1px solid var(--dw-status-danger-border);\\n border-radius: var(--dw-radius-card);\\n background: var(--dw-status-danger-bg);\\n color: var(--dw-status-danger-fg);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.p-drawer.dw-drawer--sm { width: min(var(--dw-width-drawer-sm), 100vw); }\\n.p-drawer.dw-drawer--md { width: min(var(--dw-width-drawer-md), 100vw); }\\n.p-drawer.dw-drawer--lg { width: min(var(--dw-width-drawer-lg), 100vw); }\\n.p-drawer.dw-drawer--full { width: 100vw; }\\nbody .p-drawer-right {\\n box-shadow: var(--dw-shadow-drawer);\\n}\\n.p-drawer .p-drawer-title {\\n font-size: var(--dw-font-size-16);\\n line-height: var(--dw-line-height-24);\\n font-weight: var(--dw-font-weight-semibold);\\n color: var(--dw-text);\\n}\\n.dw-drawer-shell {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n min-height: 0;\\n}\\n.dw-resizer {\\n position: absolute;\\n z-index: 4;\\n touch-action: none;\\n outline: none;\\n}\\n.dw-resizer--vertical { top: 0; width: 10px; height: 100%; cursor: col-resize; }\\n.dw-resizer--vertical.dw-resizer--start { left: -5px; }\\n.dw-resizer--vertical.dw-resizer--end { right: -5px; }\\n.dw-resizer--horizontal { left: 0; width: 100%; height: 10px; cursor: row-resize; }\\n.dw-resizer--horizontal.dw-resizer--start { top: -5px; }\\n.dw-resizer--horizontal.dw-resizer--end { bottom: -5px; }\\n.dw-resizer::before {\\n content: '';\\n position: absolute;\\n background: transparent;\\n transition: background var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-resizer--vertical::before { top: 0; left: 4px; width: 2px; height: 100%; }\\n.dw-resizer--horizontal::before { top: 4px; left: 0; width: 100%; height: 2px; }\\n.dw-resizer:hover::before,\\n.dw-resizer:focus-visible::before,\\n.dw-resizer.is-dragging::before { background: var(--dw-accent); }\\n.dw-resizer::after {\\n --dw-resizer-dot: var(--dw-text-muted);\\n content: '';\\n position: absolute;\\n border-radius: var(--dw-radius-full);\\n background-color: var(--dw-surface);\\n background-image: radial-gradient(circle, var(--dw-resizer-dot) 1px, transparent 1.4px);\\n background-position: center;\\n pointer-events: none;\\n}\\n.dw-resizer--vertical::after { top: 50%; left: 2px; width: 6px; height: 28px; transform: translateY(-50%); background-size: 6px 5px; }\\n.dw-resizer--horizontal::after { top: 2px; left: 50%; width: 28px; height: 6px; transform: translateX(-50%); background-size: 5px 6px; }\\n.dw-resizer:hover::after,\\n.dw-resizer:focus-visible::after,\\n.dw-resizer.is-dragging::after { --dw-resizer-dot: var(--dw-accent); }\\n.p-drawer.dw-drawer--resizing { transition: none; user-select: none; }\\n.dw-drawer-shell__header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n padding: var(--dw-space-4) var(--dw-space-5);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-drawer-shell__body {\\n flex: 1 1 auto;\\n min-height: 0;\\n overflow: auto;\\n padding: var(--dw-space-5);\\n}\\n.dw-drawer-shell__footer {\\n display: flex;\\n justify-content: flex-end;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-5);\\n border-top: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.p-menu { --p-menu-item-icon-color: var(--p-menu-item-color); --p-menu-item-icon-focus-color: var(--p-menu-item-focus-color); }\\n.p-tieredmenu { --p-tieredmenu-item-icon-color: var(--p-tieredmenu-item-color); --p-tieredmenu-item-icon-focus-color: var(--p-tieredmenu-item-focus-color); }\\n.p-contextmenu { --p-contextmenu-item-icon-color: var(--p-contextmenu-item-color); --p-contextmenu-item-icon-focus-color: var(--p-contextmenu-item-focus-color); }\\n:not(.dw-menu-item--danger) > .p-menu-item-content:hover .p-menu-item-icon:not(.pi-trash):not(.pi-trash-fill):not(.fa-trash):not(.fa-trash-alt):not(.delete-icon),\\n:not(.dw-menu-item--danger) > .p-tieredmenu-item-content:hover .p-tieredmenu-item-icon:not(.pi-trash):not(.pi-trash-fill):not(.fa-trash):not(.fa-trash-alt):not(.delete-icon),\\n:not(.dw-menu-item--danger) > .p-contextmenu-item-content:hover .p-contextmenu-item-icon:not(.pi-trash):not(.pi-trash-fill):not(.fa-trash):not(.fa-trash-alt):not(.delete-icon) {\\n color: var(--dw-accent) !important;\\n}\\n.p-disabled.dw-menu__item--explained { pointer-events: auto; cursor: not-allowed; }\\n.dw-menu-item--danger .p-menu-item-icon,\\n.dw-menu-item--danger .p-menu-item-label,\\n.dw-menu-item--danger .p-menu-item-link,\\n.dw-menu-item--danger .p-tieredmenu-item-icon,\\n.dw-menu-item--danger .p-tieredmenu-item-label,\\n.dw-menu-item--danger .p-tieredmenu-item-link,\\n.dc-menu-danger .p-menu-item-icon,\\n.dc-menu-danger .p-menu-item-link,\\n.p-menu-item-content:has(.pi-trash, .pi-trash-fill, .fa-trash, .fa-trash-alt):hover .p-menu-item-label,\\n.p-menu-item-content:hover .pi-trash,\\n.p-menu-item-content:hover .pi-trash-fill,\\n.p-menu-item-content:hover .fa-trash,\\n.p-menu-item-content:hover .fa-trash-alt,\\n.p-menu-item-content:hover .delete-icon,\\n.p-tieredmenu-item-content:hover .pi-trash,\\n.p-contextmenu-item-content:hover .pi-trash {\\n color: var(--dw-danger) !important;\\n}\\n.dw-menu-item--danger .p-menu-item-content:hover,\\n.dw-menu-item--danger .p-tieredmenu-item-content:hover,\\n.p-menu-item-content:has(.pi-trash, .pi-trash-fill, .fa-trash, .fa-trash-alt):hover {\\n background: var(--dw-danger-tint) !important;\\n}\\n.pi-trash:hover,\\n.pi-trash-fill:hover,\\n.fa-trash:hover,\\n.fa-trash-alt:hover,\\n.delete-icon:hover {\\n color: var(--dw-danger-solid);\\n}\\n.p-toast .p-toast-message {\\n border-radius: var(--dw-radius-card);\\n box-shadow: var(--dw-shadow-popover);\\n}\\n.p-toast .p-toast-message-success {\\n border: 1px solid var(--dw-status-success-border);\\n background: var(--dw-status-success-bg);\\n color: var(--dw-status-success-fg);\\n}\\n.p-toast .p-toast-message-error {\\n border: 1px solid var(--dw-status-danger-border);\\n background: var(--dw-status-danger-bg);\\n color: var(--dw-status-danger-fg);\\n}\\n.p-toast .p-toast-message-warn {\\n border: 1px solid var(--dw-status-warning-border);\\n background: var(--dw-status-warning-bg);\\n color: var(--dw-status-warning-fg);\\n}\\n.p-toast .p-toast-message-info {\\n border: 1px solid var(--dw-status-info-border);\\n background: var(--dw-status-info-bg);\\n color: var(--dw-status-info-fg);\\n}\\n.p-toast .p-toast-message-success .p-toast-message-icon,\\n.p-toast .p-toast-message-success .p-toast-close-button { color: var(--dw-status-success-solid); }\\n.p-toast .p-toast-message-error .p-toast-message-icon,\\n.p-toast .p-toast-message-error .p-toast-close-button { color: var(--dw-status-danger-solid); }\\n.p-toast .p-toast-message-warn .p-toast-message-icon,\\n.p-toast .p-toast-message-warn .p-toast-close-button { color: var(--dw-status-warning-solid); }\\n.p-toast .p-toast-message-info .p-toast-message-icon,\\n.p-toast .p-toast-message-info .p-toast-close-button { color: var(--dw-status-info-solid); }\\n.p-tooltip .p-tooltip-text {\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n}\\n.dw-dialog__header { display: flex; align-items: center; gap: var(--dw-space-3); min-width: 0; }\\n.dw-dialog__titles { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\\n.dw-dialog__title-row { display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-dialog__subtitle { color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); line-height: var(--dw-line-height-16); }\\n.dw-dialog__footer { display: flex; justify-content: flex-end; align-items: center; gap: var(--dw-space-3); width: 100%; }\\n.dw-footer-actions { display: flex; align-items: center; gap: var(--dw-space-2); }\\n.p-dialog.dw-dialog--flush .p-dialog-content { padding: 0; }\\n.dw-entity-icon--warning { background: var(--dw-status-warning-bg); color: var(--dw-status-warning-fg); }\\n.dw-entity-icon--success { background: var(--dw-status-success-bg); color: var(--dw-status-success-solid); }\\n.dw-entity-icon--danger { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-solid); }\\n.p-dialog.dw-confirm .p-dialog-content { display: flex; flex-direction: column; gap: var(--dw-space-3); }\\n.dw-confirm__warning-title { margin: 0 0 2px; font-weight: var(--dw-font-weight-semibold); }\\n.dw-confirm__warning-text { margin: 0; }\\n.dw-confirm__summary { margin: 0; padding: var(--dw-space-3); border-radius: var(--dw-radius-md); background: var(--dw-surface-section); }\\n.dw-confirm__summary dd { margin: 0; }\\n.p-drawer.dw-drawer { box-shadow: var(--dw-shadow-drawer); }\\n.p-drawer.dw-drawer.p-drawer-bottom { border-radius: var(--dw-radius-xl) var(--dw-radius-xl) 0 0; }\\n.dw-drawer-shell__header .dw-drawer-shell__icon { flex-shrink: 0; font-size: var(--dw-font-size-18); color: var(--dw-accent); }\\n.p-drawer.dw-drawer--panel {\\n border: 0;\\n border-left: 1px solid var(--dw-border);\\n box-shadow: -8px 0 24px -6px var(--dw-alpha-ink-12);\\n}\\n.dw-drawer--panel .dw-drawer-shell__header { gap: var(--dw-space-2); }\\n.dw-drawer--panel .dw-drawer-shell__title { color: var(--dw-text-strong); line-height: normal; }\\n.dw-drawer--panel .dw-drawer-shell__titles > dw-breadcrumb:empty { display: none; }\\n.dw-drawer--panel .dw-drawer-shell__header-actions { margin-left: var(--dw-space-1); }\\n.dw-drawer--panel .dw-drawer-shell__header-actions .dw-icon-btn--lg {\\n width: var(--dw-size-icon-btn);\\n height: var(--dw-size-icon-btn);\\n border-radius: var(--dw-radius-sm);\\n font-size: var(--dw-font-size-14);\\n}\\n.dw-drawer--panel .dw-drawer-shell__body { padding: var(--dw-space-2) 0; }\\n.dw-drawer--panel .dw-drawer-shell__footer .dw-btn {\\n padding: 6px 13px;\\n border-radius: var(--dw-radius-lg);\\n font-size: var(--dw-font-size-13);\\n}\\n.dw-drawer--panel .dw-drawer-shell__footer .dw-btn--text.dw-btn--secondary { padding: 6px 14px; color: var(--dw-text); }\\n.dw-drawer--panel .dw-drawer-shell__footer .dw-btn--text.dw-btn--secondary:hover:not(:disabled) { background: var(--dw-surface-pressed); }\\n.dw-drawer-shell__titles { display: flex; flex-direction: column; gap: 2px; flex: 1 1 auto; min-width: 0; }\\n.dw-drawer-shell__title { margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-drawer-shell__subtitle { margin: 0; }\\n.dw-drawer-shell__header-actions { display: inline-flex; align-items: center; gap: var(--dw-space-1); margin-left: auto; }\\n.dw-drawer-shell__body--flush { display: flex; flex-direction: column; padding: 0; overflow: hidden; }\\n.dw-drawer-shell__footer { align-items: center; }\\n.dw-drawer-shell__footer-start { display: flex; align-items: center; gap: var(--dw-space-2); margin-right: auto; color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-drawer-shell__footer-start:empty { display: none; }\\n.dw-popover { display: flex; flex-direction: column; gap: var(--dw-space-3); overflow: auto; }\\n.dw-popover__header { display: flex; align-items: center; justify-content: space-between; gap: var(--dw-space-2); }\\n.dw-popover__footer { display: flex; justify-content: flex-end; gap: var(--dw-space-2); }\\n.p-popover.dw-popover-panel--no-arrow::before,\\n.p-popover.dw-popover-panel--no-arrow::after { display: none; }\\n.p-popover.dw-popover-panel--flush .p-popover-content { padding: 0; overflow: hidden; border-radius: inherit; }\\n.dw-popover-panel--flush .dw-popover { gap: 0; }\\n.dw-popover-panel--flush .dw-popover__footer {\\n padding: var(--dw-space-2) var(--dw-space-3);\\n border-top: 1px solid var(--dw-border);\\n}\\n.p-tooltip.dw-tooltip--multiline { max-width: 360px; }\\n.p-tooltip.dw-tooltip--toolbar { --p-tooltip-gutter: 8px; }\\n.p-tooltip.dw-tooltip--toolbar .p-tooltip-arrow { display: none; }\\n.p-tooltip.dw-tooltip--toolbar .p-tooltip-text {\\n padding: 6px 9px;\\n border-radius: var(--dw-radius-lg);\\n background: var(--dw-neutral-700);\\n color: var(--dw-neutral-0);\\n font-weight: var(--dw-font-weight-semibold);\\n white-space: nowrap;\\n box-shadow: 0 6px 18px var(--dw-alpha-ink-22);\\n}\\n.p-tooltip.dw-tooltip--multiline .p-tooltip-text { white-space: pre-line; }\\n.p-tooltip.dw-tooltip--error .p-tooltip-text { background: var(--dw-status-danger-fg); color: var(--dw-text-inverse); }\\n.p-tooltip.dw-tooltip--error .p-tooltip-arrow { border-top-color: var(--dw-status-danger-fg); }\\n.p-tooltip.dw-tooltip--code { width: min(520px, calc(100vw - 48px)); max-width: min(520px, calc(100vw - 48px)); z-index: 5000; }\\n.p-tooltip.dw-tooltip--code .p-tooltip-text {\\n display: block;\\n width: 100%;\\n max-width: none;\\n max-height: 320px;\\n padding: var(--dw-space-3) var(--dw-space-3);\\n overflow: auto;\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n white-space: pre-wrap;\\n overflow-wrap: anywhere;\\n}\\n.p-dialog.dw-confirm .dw-dialog__body { display: flex; flex-direction: column; gap: var(--dw-space-3); }\\n.p-dialog .p-dialog-close-button.p-button {\\n width: var(--dw-size-control);\\n height: var(--dw-size-control);\\n padding: 0;\\n border: 1px solid transparent;\\n border-radius: var(--dw-radius-md);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n}\\n.p-dialog .p-dialog-close-button.p-button:not(:disabled):hover {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text);\\n}\\n.dw-page-header {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n min-height: 56px;\\n padding: var(--dw-space-3) var(--dw-space-5);\\n border-bottom: 1px solid var(--dw-border);\\n background: var(--dw-surface);\\n}\\n.dw-page-header__titles {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n min-width: 0;\\n}\\n.dw-page-header__actions {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n margin-left: auto;\\n}\\n.dw-action-bar {\\n display: flex;\\n align-items: center;\\n flex-wrap: wrap;\\n gap: var(--dw-space-2);\\n padding: var(--dw-space-3) var(--dw-space-5);\\n background: var(--dw-surface);\\n}\\n.dw-action-bar__spacer { flex: 1 1 auto; }\\n.dw-breadcrumb-host { display: block; min-width: 0; }\\n.dw-breadcrumb {\\n display: flex;\\n align-items: center;\\n flex-wrap: wrap;\\n gap: 6px;\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n color: var(--dw-text-secondary);\\n}\\n.dw-breadcrumb__link {\\n color: var(--dw-accent);\\n text-decoration: none;\\n cursor: pointer;\\n}\\n.dw-breadcrumb__link:hover { color: var(--dw-accent-hover); text-decoration: underline; }\\n.dw-breadcrumb__sep { color: var(--dw-text-muted); }\\n.dw-breadcrumb__text { color: var(--dw-text-secondary); }\\n.dw-breadcrumb__current { color: var(--dw-text); font-weight: var(--dw-font-weight-medium); }\\n.dw-tabs {\\n display: flex;\\n align-items: stretch;\\n gap: var(--dw-space-4);\\n padding-inline: var(--dw-tabs-inset, 0);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-tab {\\n position: relative;\\n padding: var(--dw-space-2) 0;\\n border: 0;\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-tab:hover { color: var(--dw-text); }\\n.dw-tab.is-active {\\n color: var(--dw-accent);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-tab.is-active::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: -1px;\\n height: 2px;\\n background: var(--dw-accent);\\n}\\n.dw-segmented {\\n display: inline-flex;\\n align-items: center;\\n gap: 2px;\\n padding: 2px;\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface-pressed);\\n}\\n.dw-segmented__item {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 4px 10px;\\n border: 0;\\n border-radius: var(--dw-radius-sm);\\n background: transparent;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n transition: background var(--dw-dur-micro), color var(--dw-dur-micro);\\n}\\n.dw-segmented__item:hover { color: var(--dw-text); }\\n.dw-segmented__item.is-active {\\n background: var(--dw-surface);\\n color: var(--dw-text-strong);\\n font-weight: var(--dw-font-weight-semibold);\\n box-shadow: 0 0 0 1px var(--dw-border-strong), var(--dw-shadow-sm);\\n}\\n.dw-pill-tabs {\\n display: inline-flex;\\n flex-wrap: wrap;\\n gap: var(--dw-space-1);\\n}\\n.dw-pill-tabs__item {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 4px 12px;\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-12);\\n line-height: var(--dw-line-height-16);\\n font-weight: var(--dw-font-weight-medium);\\n cursor: pointer;\\n}\\n.dw-pill-tabs__item:hover { border-color: var(--dw-border-strong); color: var(--dw-text); }\\n.dw-pill-tabs__item.is-active {\\n border-color: var(--dw-border-accent);\\n background: var(--dw-accent-tint);\\n color: var(--dw-accent-text);\\n}\\n.dw-rail {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n padding: var(--dw-space-3) var(--dw-space-2);\\n border-right: 1px solid var(--dw-border);\\n background: var(--dw-surface-rail);\\n}\\n.dw-rail__group {\\n padding: var(--dw-space-3) 10px 6px;\\n font-size: var(--dw-font-size-10);\\n line-height: var(--dw-line-height-14);\\n font-weight: var(--dw-font-weight-semibold);\\n letter-spacing: 0.5px;\\n text-transform: uppercase;\\n color: var(--dw-text-secondary);\\n}\\n.dw-nav-item {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n padding: 7px 10px;\\n border: 0;\\n border-radius: var(--dw-radius-md);\\n background: transparent;\\n color: var(--dw-text-label);\\n font-size: var(--dw-font-size-14);\\n line-height: var(--dw-line-height-20);\\n text-align: left;\\n cursor: pointer;\\n}\\n.dw-nav-item:hover {\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-strong);\\n}\\n.dw-nav-item.is-active,\\n.dw-nav-item.active {\\n background: var(--dw-surface-selected);\\n color: var(--dw-accent-hover);\\n font-weight: var(--dw-font-weight-semibold);\\n}\\n.dw-nav-list--marker .dw-nav-item.is-active,\\n.dw-selected-marker { box-shadow: inset 3px 0 0 var(--dw-accent); }\\n.dw-nav-list--marker .dw-nav-item.is-active:focus-visible { box-shadow: inset 3px 0 0 var(--dw-accent), var(--dw-focus-ring); }\\n.dw-nav-item__count {\\n margin-left: auto;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-tabs-host { display: block; min-width: 0; }\\n.dw-tabs-host--segmented,\\n.dw-tabs-host--pill { display: inline-block; }\\n.dw-tabs-host--full,\\n.dw-tabs-host--full .dw-segmented { display: flex; width: 100%; }\\n.dw-tabs-host--full > .dw-tabs { flex: 1 1 auto; }\\n.dw-tabs-host--full .dw-segmented__item { flex: 1 1 0; justify-content: center; }\\n.dw-tab { display: inline-flex; align-items: center; gap: 6px; }\\n.dw-tab:disabled,\\n.dw-segmented__item:disabled,\\n.dw-pill-tabs__item:disabled { opacity: 0.5; cursor: not-allowed; }\\n.dw-tab:focus-visible,\\n.dw-segmented__item:focus-visible,\\n.dw-pill-tabs__item:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); border-radius: var(--dw-radius-sm); }\\n.dw-tabs--sm { gap: var(--dw-space-3); }\\n.dw-tabs--sm .dw-tab { padding: 6px 0; font-size: var(--dw-font-size-12); }\\n.dw-segmented--sm .dw-segmented__item { padding: 2px 8px; font-size: var(--dw-font-size-11); }\\n.dw-tabs__count { min-width: 18px; padding: 0 6px; border-radius: var(--dw-radius-full); background: var(--dw-surface-pressed); color: var(--dw-text-secondary); font-size: var(--dw-font-size-11); font-weight: var(--dw-font-weight-semibold); line-height: 18px; text-align: center; }\\n.is-active > .dw-tabs__count { background: var(--dw-accent-tint); color: var(--dw-accent-text); }\\n.dw-tabs__count.dw-tabs__count--danger { background: var(--dw-status-danger-bg); color: var(--dw-status-danger-fg); }\\n.dw-tabs__panel { padding-top: var(--dw-space-4); }\\n.dw-tabs-host--segmented .dw-tabs__panel,\\n.dw-tabs-host--pill .dw-tabs__panel { padding-top: var(--dw-space-3); }\\n.dw-tabs--vertical { flex-direction: column; gap: 2px; border-bottom: 0; }\\n.dw-tabs--vertical .dw-tab { justify-content: flex-start; padding: 7px 10px; border-radius: var(--dw-radius-md); }\\n.dw-tabs--vertical .dw-tab:hover { background: var(--dw-surface-pressed); }\\n.dw-tabs--vertical .dw-tab.is-active { background: var(--dw-surface-selected); }\\n.dw-tabs--vertical .dw-tab.is-active::after { display: none; }\\ndw-page-header.dw-page-header { flex-wrap: wrap; }\\n.dw-page-header--list { min-height: 0; padding: var(--dw-space-3) var(--dw-space-5) 0; border-bottom: 0; background: transparent; }\\n.dw-page-header--panel { min-height: 64px; }\\n.dw-page-header.dw-page-header--flush { padding: 0; }\\n.dw-page-header__titles { flex: 1 1 auto; }\\n.dw-page-header__title-row { display: flex; align-items: center; gap: var(--dw-space-2); min-width: 0; }\\n.dw-page-header__title { margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-page-header__title-input { max-width: 420px; font-size: var(--dw-font-size-16); font-weight: var(--dw-font-weight-semibold); }\\n.dw-page-header__subtitle { margin: 0; }\\n.dw-page-header__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--dw-space-3); color: var(--dw-text-secondary); font-size: var(--dw-font-size-12); }\\n.dw-page-header__meta:empty { display: none; }\\n.dw-page-header__icon img { width: 100%; height: 100%; object-fit: contain; }\\n.dw-breadcrumb__link { padding: 0; border: 0; background: none; font: inherit; }\\n.dw-breadcrumb i { font-size: var(--dw-font-size-11); }\\ndw-action-bar.dw-action-bar { display: flex; flex-direction: column; align-items: stretch; gap: var(--dw-space-2); }\\n.dw-action-bar__row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--dw-space-2); }\\n.dw-action-bar__start,\\n.dw-action-bar__end { display: flex; align-items: center; flex-wrap: wrap; gap: var(--dw-space-2); min-width: 0; }\\n.dw-action-bar__start { flex: 1 1 auto; }\\n.dw-action-bar__end { margin-left: auto; }\\n.dw-action-bar__filters { display: flex; align-items: center; flex-wrap: wrap; gap: var(--dw-space-2); }\\n.dw-action-bar__filters:empty { display: none; }\\n.dw-action-bar__sep { align-self: stretch; width: 1px; margin: 4px 2px; background: var(--dw-border); }\\n.dw-action-bar--dense { padding: var(--dw-space-2) var(--dw-space-4); }\\n.dw-action-bar--bordered { border-bottom: 1px solid var(--dw-border); }\\n@media (max-width: 768px) {\\n .dw-action-bar__start { flex-basis: 100%; }\\n .dw-action-bar__start dw-search-input { width: 100%; }\\n}\\ndw-nav-list.dw-nav-list { position: relative; display: flex; flex-direction: column; overflow-y: auto; transition: width var(--dw-dur-enter) var(--dw-ease); }\\ndw-nav-list.dw-nav-list.is-minimized { width: 60px; align-items: center; }\\n.dw-nav-list__items { display: flex; flex-direction: column; gap: 2px; margin: 0; padding: 0; list-style: none; }\\n.dw-nav-list__items--reorderable > li { cursor: grab; }\\n.dw-nav-list__items--reorderable > li.cdk-drag-placeholder { opacity: 0.4; }\\n.dw-nav-list__items--reorderable.cdk-drop-list-dragging > li:not(.cdk-drag-placeholder),\\n.dw-nav-list__items--reorderable > li.cdk-drag-animating { transition: transform 200ms ease; }\\n.dw-nav-list__drag-preview {\\n list-style: none;\\n cursor: grabbing;\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface);\\n box-shadow: var(--dw-shadow-popover);\\n}\\n.dw-nav-list__nav { display: flex; flex-direction: column; gap: 2px; }\\n.dw-nav-list__group-toggle { display: flex; align-items: center; gap: var(--dw-space-2); width: 100%; border: 0; background: transparent; text-align: left; cursor: pointer; }\\n.pi.dw-nav-list__chevron { margin-left: auto; font-size: var(--dw-font-size-10); transition: transform var(--dw-dur-enter) var(--dw-ease); }\\n.dw-nav-list__chevron.is-collapsed { transform: rotate(-90deg); }\\na.dw-nav-item { text-decoration: none; }\\n.dw-nav-item { width: 100%; }\\n.dw-nav-item:disabled { opacity: 0.5; cursor: not-allowed; }\\n.dw-nav-item:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-nav-item__icon { width: 16px; color: var(--dw-text-secondary); text-align: center; }\\n.dw-nav-item.is-active .dw-nav-item__icon { color: var(--dw-accent); }\\n.dw-nav-item__icon--accent { color: var(--dw-accent); }\\n.dw-nav-item__icon--workflow { color: var(--dw-entity-workflow-fg); }\\n.dw-nav-item__icon--reasoning { color: var(--dw-entity-reasoning-fg); }\\n.dw-nav-item.is-muted .dw-nav-item__label { color: var(--dw-text-muted); }\\n.dw-nav-item__img { width: 16px; height: 16px; object-fit: contain; }\\n.dw-nav-item__label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\\n.dw-nav-item.is-active .dw-nav-item__count { color: var(--dw-accent-hover); }\\n.dw-nav-item__text { display: flex; flex: 1 1 auto; flex-direction: column; gap: 2px; min-width: 0; }\\n.dw-nav-item:has(> .dw-nav-item__text) { align-items: flex-start; }\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__icon,\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__img,\\n.dw-nav-item:has(> .dw-nav-item__text) > dw-icon.dw-nav-item__icon {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n height: var(--dw-line-height-20);\\n}\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__img { padding-block: 2px; }\\n.dw-nav-item:has(> .dw-nav-item__text) > .dw-nav-item__count { line-height: var(--dw-line-height-20); }\\n.dw-nav-item__head { display: flex; flex: 1 1 auto; align-items: center; gap: var(--dw-space-1); min-width: 0; }\\n.dw-nav-item__head > .dw-nav-item__label { flex: 0 1 auto; }\\n.dw-nav-item__text > .dw-nav-item__head { flex: none; }\\n.dw-nav-item__error {\\n display: inline-flex;\\n flex: none;\\n align-items: center;\\n gap: var(--dw-space-1);\\n color: var(--dw-status-danger-fg);\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-nav-item__error .pi { font-size: var(--dw-font-size-12); }\\n.dw-nav-item__error--warning,\\n.dw-nav-item__error--warning .pi { color: var(--dw-status-warning-solid); }\\n.dw-nav-item__loading { margin-left: auto; color: var(--dw-text-muted); font-size: var(--dw-font-size-12); }\\n.dw-nav-item__trail {\\n display: inline-flex;\\n flex-shrink: 0;\\n align-items: center;\\n gap: var(--dw-space-1);\\n margin-left: auto;\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-11);\\n}\\n.dw-nav-item__trail--success { color: var(--dw-status-success-fg); }\\n.dw-nav-item__trail--success .dw-nav-item__status-dot { background: var(--dw-status-success-fg); }\\ndw-icon.dw-nav-item__icon { font-size: var(--dw-font-size-16); }\\n.dw-nav-item__status {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-11);\\n line-height: var(--dw-line-height-14);\\n}\\n.dw-nav-item__meta { color: var(--dw-text-muted); font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-14); }\\n.dw-nav-item__status-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--dw-text-muted); }\\n.dw-status-dot.dw-nav-item__dot { width: 7px; height: 7px; }\\n.dw-nav-item__status--success { color: var(--dw-status-success-fg); }\\n.dw-nav-item__status--success .dw-nav-item__status-dot { background: var(--dw-status-success-fg); }\\n.dw-nav-list--tree {\\n --dw-tree-line: var(--dw-border-strong);\\n --dw-tree-mid: 17px;\\n --dw-tree-elbow: 10px;\\n}\\n.dw-nav-list--tree .dw-nav-list__nav > .dw-nav-list__items { margin-left: var(--dw-space-2); }\\n.dw-nav-list--tree .dw-nav-list__items .dw-nav-list__items { margin-left: 18px; }\\n.dw-nav-list--tree .dw-nav-list__items > li { position: relative; padding-left: var(--dw-tree-elbow); }\\n.dw-nav-list--tree .dw-nav-list__items > li::before {\\n content: '';\\n position: absolute;\\n left: 0;\\n top: -2px;\\n bottom: 0;\\n border-left: 1px solid var(--dw-tree-line);\\n}\\n.dw-nav-list--tree .dw-nav-list__items > li:last-child::before { bottom: auto; height: calc(var(--dw-tree-mid) + 2px); }\\n.dw-nav-list--tree .dw-nav-list__items > li::after {\\n content: '';\\n position: absolute;\\n left: 0;\\n top: var(--dw-tree-mid);\\n width: var(--dw-tree-elbow);\\n border-top: 1px solid var(--dw-tree-line);\\n}\\n.dw-nav-list.is-minimized .dw-nav-item {\\n justify-content: center;\\n width: 40px;\\n padding-right: 0;\\n padding-left: 0 !important;\\n}\\n.dw-nav-list__scroll { display: contents; }\\ndw-nav-list.dw-nav-list--minimizable { overflow: hidden; padding-bottom: 0; }\\n.dw-nav-list--minimizable > .dw-nav-list__scroll {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n gap: 2px;\\n min-height: 0;\\n overflow-y: auto;\\n padding-bottom: var(--dw-space-2);\\n}\\n.dw-nav-list--minimizable.is-minimized > .dw-nav-list__scroll { align-items: center; align-self: stretch; }\\n.dw-nav-list__minimize-row {\\n display: flex;\\n flex: none;\\n align-self: stretch;\\n justify-content: flex-end;\\n padding: var(--dw-space-2) 0;\\n border-top: 1px solid var(--dw-border);\\n}\\n.dw-nav-list.is-minimized .dw-nav-list__minimize-row { justify-content: center; }\\n.dw-nav-list__bottom-row { display: flex; flex: none; align-items: flex-end; gap: var(--dw-space-2); align-self: stretch; }\\n.dw-nav-list__bottom-row:empty { display: none; }\\n.dw-nav-list__bottom-row > :not(.dw-nav-list__minimize) { flex: 1 1 auto; min-width: 0; }\\n.dw-nav-list.is-minimized .dw-nav-list__bottom-row > :not(.dw-nav-list__minimize) { display: none; }\\n.dw-menu .p-menu-item-label,\\n.dw-menu .p-tieredmenu-item-label { display: inline-flex; flex-direction: column; }\\n.p-menu-submenu-label[data-automationid=\\\"dw-menu-plain-group\\\"] { display: none; }\\n.dw-menu__description { color: var(--dw-text-secondary); font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-14); }\\n.dw-menu .p-badge.dw-menu__count {\\n min-width: 20px;\\n height: 20px;\\n margin-left: auto;\\n padding: 0 var(--dw-space-2);\\n border-radius: var(--dw-radius-full);\\n background: var(--dw-surface-pressed);\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n font-weight: var(--dw-font-weight-semibold);\\n line-height: 20px;\\n}\\n.dw-menu .p-menu-item-link { gap: var(--dw-space-2); }\\n.dw-menu__header {\\n margin: calc(-1 * var(--dw-space-1)) calc(-1 * var(--dw-space-1)) var(--dw-space-1);\\n padding: var(--dw-space-3);\\n border-bottom: 1px solid var(--dw-border);\\n}\\n.dw-menu-host { display: inline-flex; }\\n.dw-breadcrumb__img { width: 20px; height: 20px; object-fit: contain; vertical-align: middle; }\\n.dw-nav-item--parent { justify-content: flex-start; }\\n.dw-nav-list__row {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-1);\\n min-width: 0;\\n padding-right: var(--dw-space-1);\\n border-radius: var(--dw-radius-md);\\n}\\n.dw-nav-list__row:hover { background: var(--dw-surface-pressed); }\\n.dw-nav-list__row.is-active { background: var(--dw-surface-selected); }\\n.dw-nav-list--marker .dw-nav-list__row.is-active { box-shadow: inset 3px 0 0 var(--dw-accent); }\\n.dw-nav-list__row > .dw-nav-item { flex: 1 1 auto; min-width: 0; width: auto; }\\n.dw-nav-list__row > .dw-nav-item:hover,\\n.dw-nav-list__row > .dw-nav-item.is-active { background: transparent; box-shadow: none; }\\n.dw-nav-list__actions { display: inline-flex; flex: none; align-items: center; gap: var(--dw-space-1); }\\n.dw-nav-list__actions:empty { display: none; }\\n.dw-nav-list__toggle { flex: none; }\\n.dw-nav-list__toggle--spacer { width: 20px; }\\n.dw-nav-list__toggle .pi { transition: transform var(--dw-dur-enter) var(--dw-ease); }\\n.dw-nav-list__toggle.is-collapsed .pi { transform: rotate(-90deg); }\\n.dw-steps {\\n display: flex;\\n align-items: center;\\n gap: var(--dw-space-3);\\n margin: 0;\\n padding: var(--dw-space-3) var(--dw-space-6);\\n border-bottom: 1px solid var(--dw-border);\\n list-style: none;\\n}\\n.dw-steps__item {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-space-2);\\n color: var(--dw-text-muted);\\n font-size: var(--dw-font-size-14);\\n font-weight: var(--dw-font-weight-medium);\\n}\\n.dw-steps__no {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 24px;\\n height: 24px;\\n border: 1px solid var(--dw-border-strong);\\n border-radius: 50%;\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-steps__item.is-active { color: var(--dw-text-link); }\\n.dw-steps__item.is-active .dw-steps__no { border-color: var(--dw-accent); background: var(--dw-accent-tint); }\\n.dw-steps__item.is-done { color: var(--dw-text); }\\n.dw-steps__item.is-done .dw-steps__no { border-color: var(--dw-accent); background: var(--dw-accent); color: var(--dw-text-inverse); }\\n.dw-steps__sep { flex: 0 0 48px; height: 1px; background: var(--dw-border-strong); }\\n.dw-rail-tabs { display: flex; flex-shrink: 0; width: 64px; }\\n.dw-rail-tabs__nav {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: var(--dw-space-1);\\n width: 100%;\\n padding: var(--dw-space-4) 0;\\n}\\n.dw-rail-tabs__btn {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-1);\\n width: 64px;\\n min-height: 60px;\\n padding: var(--dw-space-2) 6px;\\n border: none;\\n border-radius: var(--dw-radius-lg);\\n background: transparent;\\n color: var(--dw-text);\\n cursor: pointer;\\n transition: background-color var(--dw-dur-micro) var(--dw-ease), color var(--dw-dur-micro) var(--dw-ease);\\n}\\n.dw-rail-tabs__btn:hover { background: var(--dw-surface-pressed); }\\n.dw-rail-tabs__btn:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-rail-tabs__btn.is-active { background: var(--dw-accent-tint); color: var(--dw-text-link); }\\n.dw-rail-tabs__icon { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; font-size: var(--dw-font-size-20); }\\n.dw-rail-tabs__label {\\n max-width: 52px;\\n color: var(--dw-text-secondary);\\n font-size: var(--dw-font-size-11);\\n font-weight: var(--dw-font-weight-medium);\\n line-height: var(--dw-line-height-14);\\n text-align: center;\\n white-space: normal;\\n word-break: keep-all;\\n}\\n.dw-rail-tabs__btn.is-active .dw-rail-tabs__label { color: var(--dw-text-link); }\\n.dw-rail-tabs__spacer { flex: 1; }\\n.dw-rail-tabs__btn--compact { min-height: 40px; }\\n.dw-prose {\\n color: var(--dw-text);\\n font-size: var(--dw-font-size-14);\\n line-height: 1.6;\\n overflow-wrap: anywhere;\\n}\\n.dw-prose > :first-child { margin-top: 0; }\\n.dw-prose > :last-child { margin-bottom: 0; }\\n.dw-prose p { margin: 0 0 var(--dw-space-2); }\\n.dw-prose h1,\\n.dw-prose h2,\\n.dw-prose h3,\\n.dw-prose h4 { margin: var(--dw-space-4) 0 var(--dw-space-2); }\\n.dw-prose ul,\\n.dw-prose ol { margin: 0 0 var(--dw-space-2); padding-left: var(--dw-space-5); }\\n.dw-prose li { margin-bottom: var(--dw-space-1); }\\n.dw-prose a { color: var(--dw-text-link); text-decoration: underline; }\\n.dw-prose blockquote {\\n margin: 0 0 var(--dw-space-2);\\n padding: var(--dw-space-1) var(--dw-space-3);\\n border-left: 3px solid var(--dw-border-strong);\\n color: var(--dw-text-secondary);\\n}\\n.dw-prose code {\\n padding: 1px 4px;\\n border-radius: var(--dw-radius-sm);\\n background: var(--dw-surface-pressed);\\n font-size: 0.92em;\\n}\\n.dw-prose pre,\\n.dw-code-block {\\n margin: 0 0 var(--dw-space-2);\\n padding: var(--dw-space-3);\\n border: 1px solid var(--dw-border);\\n border-radius: var(--dw-radius-md);\\n background: var(--dw-surface-section);\\n color: var(--dw-text);\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-12);\\n line-height: 1.6;\\n overflow: auto;\\n}\\n.dw-prose pre code { padding: 0; background: transparent; }\\n.dw-prose table {\\n width: 100%;\\n margin: 0 0 var(--dw-space-2);\\n border-collapse: collapse;\\n font-size: var(--dw-font-size-12);\\n}\\n.dw-prose th,\\n.dw-prose td {\\n padding: 6px var(--dw-space-2);\\n border: 1px solid var(--dw-border);\\n text-align: left;\\n}\\n.dw-prose th { background: var(--dw-surface-section); font-weight: var(--dw-font-weight-semibold); }\\n.pi.pi-brain::before {\\n content: '';\\n display: inline-block;\\n width: 1em;\\n height: 1em;\\n background-color: currentColor;\\n -webkit-mask: url(\\\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08A3 3 0 0 1 2.5 12.5a3 3 0 0 1 1.58-2.66A2.5 2.5 0 0 1 4.5 5.5a2.5 2.5 0 0 1 5-3z'/><path d='M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08A3 3 0 0 0 21.5 12.5a3 3 0 0 0-1.58-2.66A2.5 2.5 0 0 0 19.5 5.5a2.5 2.5 0 0 0-5-3z'/></svg>\\\") no-repeat center / contain;\\n mask: url(\\\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08A3 3 0 0 1 2.5 12.5a3 3 0 0 1 1.58-2.66A2.5 2.5 0 0 1 4.5 5.5a2.5 2.5 0 0 1 5-3z'/><path d='M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08A3 3 0 0 0 21.5 12.5a3 3 0 0 0-1.58-2.66A2.5 2.5 0 0 0 19.5 5.5a2.5 2.5 0 0 0-5-3z'/></svg>\\\") no-repeat center / contain;\\n vertical-align: -0.125em;\\n}\\n.dw-id-block-host {\\n display: inline-flex;\\n min-width: 0;\\n}\\n.dw-id-block {\\n display: inline-flex;\\n align-items: center;\\n gap: 3px;\\n min-width: 0;\\n color: var(--dw-text-muted);\\n font-family: var(--dw-font-mono);\\n font-size: var(--dw-font-size-11);\\n cursor: pointer;\\n transition: color var(--dw-dur-micro);\\n}\\n.dw-id-block:hover,\\n.dw-id-block:focus-visible {\\n color: var(--dw-text-secondary);\\n outline: none;\\n}\\n.dw-id-block__value {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n.dw-id-block__icon {\\n display: none;\\n flex-shrink: 0;\\n}\\n.dw-id-block:hover .dw-id-block__icon,\\n.dw-id-block:focus-visible .dw-id-block__icon,\\n.dw-id-block.is-copied .dw-id-block__icon {\\n display: inline-flex;\\n}\\n.dw-id-block.is-copied .dw-id-block__icon { color: var(--dw-status-success-solid); }\\n.dw-id-block__toast {\\n color: var(--dw-status-success-fg);\\n font-family: var(--dw-font-sans);\\n font-size: var(--dw-font-size-10);\\n font-weight: var(--dw-font-weight-medium);\\n white-space: nowrap;\\n}\\n.dw-id-block__toast:empty { display: none; }\\n.dw-id-block.is-copied .dw-id-block__toast {\\n animation: dw-fade-out 1.2s forwards;\\n}\\n@keyframes dw-fade-out {\\n 0%, 70% { opacity: 1; }\\n 100% { opacity: 0; }\\n}\\n.dw-code-block-host { display: block; min-width: 0; }\\n.dw-code-block__bar { display: flex; align-items: center; justify-content: space-between; gap: var(--dw-space-2); margin-bottom: var(--dw-space-1); }\\n.dw-code-block { margin: 0; white-space: pre; }\\n.dw-code-block:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); }\\n.dw-code-block--wrap { white-space: pre-wrap; overflow-wrap: anywhere; }\\ndw-markdown.dw-prose { display: block; }\\n.dw-prose--compact { font-size: var(--dw-font-size-12); line-height: 1.5; }\\n.dw-prose--compact p { margin-bottom: var(--dw-space-1); }\\n.dw-icon { display: inline-flex; flex-shrink: 0; align-items: center; justify-content: center; line-height: 0; vertical-align: -0.125em; }\\n.dw-icon svg { display: block; }\\n.dw-toast-host { display: contents; }\\n.dw-toasts {\\n position: fixed;\\n z-index: 9999;\\n width: 50%;\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-12);\\n pointer-events: none;\\n}\\n.dw-toasts--top-center { top: 0; right: 25%; }\\n.dw-toasts--top-right { top: 0; right: var(--dw-space-4); width: min(400px, 90%); }\\n.dw-toasts--bottom-center { bottom: 0; right: 25%; }\\n.dw-toasts--bottom-right { bottom: 0; right: var(--dw-space-4); width: min(400px, 90%); }\\n.dw-toast {\\n display: block;\\n width: 100%;\\n min-height: 35px;\\n margin: 10px;\\n padding: 10px;\\n border-radius: 60px;\\n font-size: 1em;\\n text-align: center;\\n opacity: 0.85;\\n pointer-events: auto;\\n animation: dw-toast-in 0.3s ease-out;\\n}\\n.dw-toast--success { background-color: var(--dw-status-success-fg); }\\n.dw-toast--error { background-color: var(--dw-status-danger-solid); }\\n.dw-toast--warning { background-color: var(--dw-status-warning-solid); }\\n.dw-toast--info { background-color: var(--dw-status-warning-border); }\\n.dw-toast__content {\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--dw-space-2);\\n}\\n.dw-toast__message {\\n flex: 1;\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-14);\\n line-height: 1.4;\\n text-align: center;\\n white-space: normal;\\n overflow-wrap: break-word;\\n word-break: break-word;\\n}\\n.dw-toast__close {\\n position: absolute;\\n top: 50%;\\n right: 5px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 20px;\\n height: 20px;\\n padding: 0;\\n border: none;\\n background: none;\\n color: var(--dw-text-inverse);\\n font-size: var(--dw-font-size-18);\\n font-weight: var(--dw-font-weight-bold);\\n cursor: pointer;\\n opacity: 0.8;\\n transform: translateY(-50%);\\n transition: opacity 0.2s ease;\\n}\\n.dw-toast__close:hover { opacity: 1; }\\n.dw-toast__close:focus-visible { outline: none; box-shadow: var(--dw-focus-ring); opacity: 1; }\\n@keyframes dw-toast-in {\\n from { opacity: 0; transform: translateY(-10px); }\\n to { opacity: 0.85; transform: translateY(0); }\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .dw-toast { animation: none; }\\n}\\n@media (max-width: 1024px) {\\n .dw-toasts--top-center, .dw-toasts--bottom-center { right: 20%; width: 60%; }\\n}\\n@media (max-width: 768px) {\\n .dw-toasts--top-center, .dw-toasts--bottom-center { right: 10%; width: 80%; }\\n}\\n@media (max-width: 480px) {\\n .dw-toasts--top-center, .dw-toasts--bottom-center { right: 5%; left: 5%; width: 90%; }\\n}\\n@media print {\\n .dw-toasts { display: none; }\\n}\\n.dw-stack {\\n display: flex;\\n flex-direction: column;\\n gap: var(--dw-stack-gap, var(--dw-space-2));\\n min-width: 0;\\n}\\n.dw-hstack {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n gap: var(--dw-stack-gap, var(--dw-space-2));\\n min-width: 0;\\n}\\n.dw-inline-stack {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--dw-stack-gap, var(--dw-space-1));\\n}\\n.dw-grid {\\n display: grid;\\n gap: var(--dw-stack-gap, var(--dw-space-4));\\n grid-template-columns: repeat(var(--dw-grid-cols, 12), minmax(0, 1fr));\\n}\\n.dw-grid--cols-1 { --dw-grid-cols: 1; }\\n.dw-grid--cols-2 { --dw-grid-cols: 2; }\\n.dw-grid--cols-3 { --dw-grid-cols: 3; }\\n.dw-grid--cols-4 { --dw-grid-cols: 4; }\\n.dw-grid--auto { grid-template-columns: repeat(auto-fill, minmax(var(--dw-grid-min, 280px), 1fr)); }\\n.dw-span-full { grid-column: 1 / -1; }\\n.dw-span-2 { grid-column: span 2; }\\n.dw-span-3 { grid-column: span 3; }\\n.dw-span-4 { grid-column: span 4; }\\n.dw-span-6 { grid-column: span 6; }\\n.dw-span-8 { grid-column: span 8; }\\n.dw-span-12 { grid-column: span 12; }\\n@media (max-width: 768px) {\\n .dw-grid--cols-2,\\n .dw-grid--cols-3,\\n .dw-grid--cols-4 { --dw-grid-cols: 1; }\\n .dw-grid > [class*='dw-span-'] { grid-column: 1 / -1; }\\n}\\n.dw-gap-0 { --dw-stack-gap: 0; gap: 0; }\\n.dw-gap-1 { --dw-stack-gap: var(--dw-space-1); gap: var(--dw-space-1); }\\n.dw-gap-2 { --dw-stack-gap: var(--dw-space-2); gap: var(--dw-space-2); }\\n.dw-gap-3 { --dw-stack-gap: var(--dw-space-3); gap: var(--dw-space-3); }\\n.dw-gap-4 { --dw-stack-gap: var(--dw-space-4); gap: var(--dw-space-4); }\\n.dw-gap-5 { --dw-stack-gap: var(--dw-space-5); gap: var(--dw-space-5); }\\n.dw-gap-6 { --dw-stack-gap: var(--dw-space-6); gap: var(--dw-space-6); }\\n.dw-gap-8 { --dw-stack-gap: var(--dw-space-8); gap: var(--dw-space-8); }\\n.dw-wrap { flex-wrap: wrap; }\\n.dw-nowrap { flex-wrap: nowrap; }\\n.dw-grow { flex: 1 1 auto; min-width: 0; }\\n.dw-shrink-0 { flex-shrink: 0; }\\n.dw-align-start { align-items: flex-start; }\\n.dw-align-center { align-items: center; }\\n.dw-align-end { align-items: flex-end; }\\n.dw-align-stretch { align-items: stretch; }\\n.dw-align-baseline { align-items: baseline; }\\n.dw-justify-start { justify-content: flex-start; }\\n.dw-justify-center { justify-content: center; }\\n.dw-justify-end { justify-content: flex-end; }\\n.dw-justify-between { justify-content: space-between; }\\n.dw-self-start { align-self: flex-start; }\\n.dw-self-center { align-self: center; }\\n.dw-self-end { align-self: flex-end; }\\n.dw-ml-auto { margin-left: auto; }\\n.dw-w-full { width: 100%; }\\n.dw-h-full { height: 100%; }\\n.dw-min-w-0 { min-width: 0; }\\n.dw-min-h-0 { min-height: 0; }\\n.dw-hidden { display: none !important; }\\n.dw-block { display: block; }\\n.dw-sticky-top {\\n position: sticky;\\n top: 0;\\n z-index: var(--dw-z-sticky);\\n}\\n.dw-relative { position: relative; }\\n.dw-overflow-auto { overflow: auto; }\\n.dw-overflow-hidden { overflow: hidden; }\\n.dw-truncate {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n min-width: 0;\\n}\\n.dw-line-clamp-2 {\\n display: -webkit-box;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n overflow: hidden;\\n}\\n.dw-line-clamp-3 {\\n display: -webkit-box;\\n -webkit-line-clamp: 3;\\n -webkit-box-orient: vertical;\\n overflow: hidden;\\n}\\n.dw-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border: 0;\\n}\\n.dw-m-0 { margin: 0; }\\n.dw-mt-0 { margin-top: 0; }\\n.dw-mb-0 { margin-bottom: 0; }\\n.dw-mt-1 { margin-top: var(--dw-space-1); }\\n.dw-mt-2 { margin-top: var(--dw-space-2); }\\n.dw-mt-3 { margin-top: var(--dw-space-3); }\\n.dw-mt-4 { margin-top: var(--dw-space-4); }\\n.dw-mt-6 { margin-top: var(--dw-space-6); }\\n.dw-mb-1 { margin-bottom: var(--dw-space-1); }\\n.dw-mb-2 { margin-bottom: var(--dw-space-2); }\\n.dw-mb-3 { margin-bottom: var(--dw-space-3); }\\n.dw-mb-4 { margin-bottom: var(--dw-space-4); }\\n.dw-mb-6 { margin-bottom: var(--dw-space-6); }\\n.dw-ml-1 { margin-left: var(--dw-space-1); }\\n.dw-ml-2 { margin-left: var(--dw-space-2); }\\n.dw-mr-1 { margin-right: var(--dw-space-1); }\\n.dw-mr-2 { margin-right: var(--dw-space-2); }\\n.dw-mr-4 { margin-right: var(--dw-space-4); }\\n.dw-p-0 { padding: 0; }\\n.dw-p-2 { padding: var(--dw-space-2); }\\n.dw-p-3 { padding: var(--dw-space-3); }\\n.dw-p-4 { padding: var(--dw-space-4); }\\n.dw-p-5 { padding: var(--dw-space-5); }\\n.dw-p-6 { padding: var(--dw-space-6); }\\n.dw-px-4 { padding-left: var(--dw-space-4); padding-right: var(--dw-space-4); }\\n.dw-py-2 { padding-top: var(--dw-space-2); padding-bottom: var(--dw-space-2); }\\n.dw-pt-1 { padding-top: var(--dw-space-1); }\\n.dw-text-10 { font-size: var(--dw-font-size-10); line-height: var(--dw-line-height-14); }\\n.dw-text-11 { font-size: var(--dw-font-size-11); line-height: var(--dw-line-height-14); }\\n.dw-text-12 { font-size: var(--dw-font-size-12); line-height: var(--dw-line-height-16); }\\n.dw-text-14 { font-size: var(--dw-font-size-14); line-height: var(--dw-line-height-20); }\\n.dw-text-16 { font-size: var(--dw-font-size-16); line-height: var(--dw-line-height-24); }\\n.dw-text-20 { font-size: var(--dw-font-size-20); line-height: var(--dw-line-height-28); }\\n.pi.dw-text-10 { font-size: var(--dw-font-size-10); }\\n.pi.dw-text-11 { font-size: var(--dw-font-size-11); }\\n.pi.dw-text-12 { font-size: var(--dw-font-size-12); }\\n.pi.dw-text-14 { font-size: var(--dw-font-size-14); }\\n.pi.dw-text-16 { font-size: var(--dw-font-size-16); }\\n.pi.dw-text-20 { font-size: var(--dw-font-size-20); }\\n.dw-fw-400 { font-weight: var(--dw-font-weight-regular); }\\n.dw-fw-500 { font-weight: var(--dw-font-weight-medium); }\\n.dw-fw-600 { font-weight: var(--dw-font-weight-semibold); }\\n.dw-fw-700 { font-weight: var(--dw-font-weight-bold); }\\n.dw-text-primary { color: var(--dw-text); }\\n.dw-text-secondary { color: var(--dw-text-secondary); }\\n.dw-text-muted { color: var(--dw-text-muted); }\\n.dw-text-accent { color: var(--dw-accent); }\\n.dw-text-danger { color: var(--dw-status-danger-fg); }\\n.dw-text-success { color: var(--dw-status-success-fg); }\\n.dw-text-warning { color: var(--dw-status-warning-fg); }\\n.dw-text-center { text-align: center; }\\n.dw-text-right { text-align: right; }\\n.dw-nowrap-text { white-space: nowrap; }\\n.dw-break-word { overflow-wrap: anywhere; }\\n.dw-hstack--inline { display: inline-flex; }\\n.dw-gap-1_5 { --dw-stack-gap: var(--dw-space-1_5); gap: var(--dw-space-1_5); }\\n.dw-gap-2_5 { --dw-stack-gap: var(--dw-space-2_5); gap: var(--dw-space-2_5); }\";\nexport const DW_HOST_FONTS_CSS = \"@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAF7QABAAAAABBbAAAF5tAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoFQG4GvdhzVcAZgP1NUQVRaAIU2EQgKgbs4gaE0C4gOAAE2AiQDkBgEIAWFBgehBAwHG4TzJ1C9dkYOvVlVBtrd/d/6BdxmU8z49Vx4DKW0gmcjLI8DDPybzv7//6ykQ8aA3w34Ue1plcAiKS4IZoaKIRFTeSmnRe511Kny2iU0rfIyT8FrvdV+l4Xt7GXeMJY/Uq9MrBSuoAckfU5kyhoTMxQICGFCf1IT8rWw2e/Bp3TY79sETXQ8hi7r6RTdr4ZCo5MGBIABAIDKQYfg0kH52B91/trRfnQbf10KLQcaS2NoKnaqsIJD/fXs5lv4yWlwmY6G6Wr1WOYiMG7ho2pqzsvz/6/H/8+1c5KHD5qVXFEVrNEL1b/5eX5uf+59b2tGDz4iDkREVKTqK2DjBxv4iEi1gBsjJ5UDJxZ+/IiYoFJG4bfHZhJlNDaRykegoha1yp7d/7g/gYDwCJQF4xF4BF6hBfIYgrl1mIQNKGLTj9SCyEUENbbB2EbUiLGN2MbGRkm2glhBtaL9qBOL13+jvnu+79Kp8FV/Qp/3GWzBTcFLwSk4hec1n1t4Ck/ADTwXcJIS14gb8IQNtPyDbez92wEpU03VYsdJQWcwdN10zGyoyqS91HQw2JpHStO8tFBEDfxVKaLd7P0TBE3sSk38r7rE8DFGCEnoZOF2IBeEsY3PmJJSy7JmGXuZsgxtzJwxb88yl3o0r5T+pWwJ8mkg/49/4nktFBRrvGQAtuxfKGqtquY5QFTAjsGvP3VCoREsJIdf484CvdEfkydrixXRexPDrUVCZp2xTmadsbWlylgnBRKjRE1veti9iCCiJZESF3MrlcR1SlxMpETJ3JKI/0wRU8hI0tkjab8jgaaC5+uXPOv0e90zH6pw0YiUNI5CyKgobErGIkFjUWhQ2OjIiry7KsS5xL/bvjcGCDMk7YaS3J5/rvn9o5csF43tZBOWbGwBWLuD+rhHQXR3594XjAYEkpnWC13+3aoEnUlaSk9Vn1C6OzCijElfs8Yv/J6qIGfy96aa7X8CdrhQuCEu7mVCkboQi0ZwipIcYufe9dv/d7n4+7HUYknosAgnglDgCtIcQR5HAOXAZTgGhXSBkp2rEBJw8syBlyIlJ/ocUi59nZ3bXHl6N6XLMsa2dF27NPy/v6yk8/qo9FWz8W9t6EWrgUtYqdoZoo5j/b5TKsvl1PudUqkcUvgTxJ3ELaMsHlEKyBlHaGqATZABtFZLxSuRm3tkd2gDwv5Xrid31FhCUCYsiGZqzrLZTzFHkEd0QBaIjW+73e6021weEHzVbbDJAYF8gvFA7tnp92/MK9M51XNEWjwBdWWapzwZa+M89Bs+zwsai8CHKY/JxoKfSEA4dIDHQ//7tfovYm1DnPgOpXjsbw0Y8KTJmliCZhKStLapAQ/fTq7fu86TJAiEuzCbjWTqI8F4vm3mUz6PbmhJkC3JlRZWUpz/NHU26Us6LuwWPkOhMaZ1yCerJLc677OnwuKnax0SCHGai/1ARX2ISmGtk+IsfTrWAqgoDkoMWBEs/LcZ5L4/RBstRDayyCCDiBypQ3/2J9L/75x8DbR0XRWroiIijoj8iKiIWrXWWqsexcmGGj7I96qZAlssnRhOV06xzuSVP3+u5lF2sbBeR0/piSGQUgHb3H382P4tFBgHgEdhWrBSiEQDpEkXpMcryBuTkN+moWCEAYVEFEBhIzagcJAioMzBC2Ueg1BWIYTiih5KqYZQDmgPpVxnKP/oCaXGmVDOOh/KdTOhNJsLRephRPoNhDLEFZExagQEA/MC00KokWohIzdEDUF5GAKm2kCC3PTH+gyro4pdGJ2xdGB00dSHFhIwag5QCAEGmIOo1zG/Yh82i2n4/9oE3tvxXrIWEBRvMThbQBb6VAHDQt+YSR/st9XccVApQZgQNDRkAg382Ch0aFLB7gxDRVImQ3lx94ZS/+YcCsJuKKkqkUBGz1snNTIvDm78wYhJqUwcN/odJ4eV0tIgTG45wCo8SX5UGNtVw0tDLTKQVcqkiR4viAwzgeCS5LSVSv/021eF916Gxy692J4N4fAkP31OYkt8/vmhrpHcoW1X9aiGBVMc0VE7L7zaqX03EPk83TC3bhaOj1oj1y6srewlXsgTJiQ9u5iYwvwrVTBY+VVbzdUqF4RhR9oCQXcdw2t9a02VypcpWYPnYJweOmmjmcobjx3deK50iWbpKkULJVY5NVBVVCt+1VPCT8nqhirviAsTVALq8XiSL7+reCyEv5eKwrdC8vxIzQMsFHDU4riyZ0lJLL5Xl4sO5HgLgENluHFgxYScEBsVHhJgRUlK9FQGSFmhat19uVEyrUofvE2Pz55pBSCZEu0xKRmU+I6jHrkfnFcm30C1d1op4wBZCH34aB+xOLTy9qFMW1/JpdwSPQKYsth+hf2t24AEmIL/8vNfq0O9Wyh9Zd6ptpQJXZfpoSWp5EJCwvFwtSWqMy73EiYV0qGihW4eXfHav+J4Y5oYldKqjYmdSKKfnASzI32CMwLa+YYcOCiMgxBBa5TKQ8k7AtvHQp/+BVPRjS1GUyaHb9BcuiMp6vSKbMsRNoO6gwkt4b3nFENRfFrOaNCNIohl8aNNe7SWRkhALOFOP06cJwRLUSu7Kxbv23CfSwRLWIziR38D353K6SYoZjREsphmIs00wWPtGJVwcxErpZDWLrNG4xbNO60WC4jkevylQSKzwpNllsUCMRGd0XSjCGLBIX5W8qAScm+9+aIFbjIdO2YSxYyGaNh8ooup9VdClPx+pM4TXWRdlm3s4SjHOcFfnuymnMJ0BahaW62rNjxs7KM/0IEKrNlj5Vg2Fo8Fs6JPqjtMC8guL1gf6M9uu+8/yy78gNL5/O+7IPf75NjR1qOnRU0KjKqxUHi739kjwt60BKXFZ9Xl7wYGqwDMqJsdWFVPipyQ9+hmocJnJOA+j25t9Vr+DEQE1RLIlRxzjbwgND3oe99F+YlVnzd6qw8LzpwKukG+kOWD5WSF13zYJFjvEtqyX1mvvzCIaJMDzAZ4oxt6HTNF2xWbhOwD16GWb/XFITCsuNdqPe5t+UDh0L4FSwqRHX70n63mpwlQwcG109NmtB7MoGOCUElhvyY2iwgNiYgUiq3jtyiKMDYwI2Us6swosLDZQu4KrVOiVDqJMpkOaJCz46niOveQq29n6/PRN6lnv0LHSi4kPN5m4D13mhLDmY7W/R+PEAmXLiOUlpcJpoSY9V99AweoGbIiwcw3JTcs1LWM/bd9vJOf9hXYKoowGzEu4Iu82FkQAxPstpNhNmK5Dd2xs5ANXiS3I8Sj4NXScrmC/ZJh1HaCvw+7ka334jSPLm5AzpeFLnhUzZlAIIGSRU6ATwnJAIRLKuVCPefEXNS5+swPDwFQy/kQvaSMKfciftKynFv2Y8jBAnrO4mWqb6g8XkXlP1jFwEdUKTV2lPjQJYc7pqggx3m79BprQpOpIWas1JdLielsSRTvoumOHm99WS8pLwINgI7L1ABoWnp5VNowOOBm6Wpc7vy6ohcgc1uRkRuUh6JddBVA75jBL4372RItG4GajY5SIszFWzf/HojU/rSpyJohY9uDkqM/QqFyF0DK5DHoIp9vTTvMgEc0t7cpogu/Fr4POYSimBpFsuBQAYk1/ixpU4UJyhamJ+6ZMq7R8RRwWyo04rY+5aBVBdVvZviw4o9rYyna8hnutqS26ttr8sNxR4EUziyNl8nDFQP+J83mZk5+BvaWrtd/pvAKLYoKRBiIBfToAitz0fHYmSeFGD6ME0sOKcYZJY1cH+m2/jC9tuB1yENM39pG0Px2kLegcJmZtVN+VgmV5FAaU8urVJdLzZrbWKvONtWNPOqVZ0f1dwMReXXK6bZ19tH2hj/OpynT7ciiI79e+VAQbEMSccMaYa7pNDsYqEQArUiwKAqYExWoRQcqMcCCmEvQTy6OoizDsWIdig0iYysUO+HYC8VBZJyl3HJptlKcrBYna8WJi6jZooVtFREP6eUplG0i4y2UHSLjK1b87saIP0nMBEpeQhDpM8Hk0RMuI1qiZEdJDEKJFbc4abSrPgNffrRQYTgJ1KEkITLJQkkRTqpQ0uqEdGW9TEQmSyjZ9SjkMB/mq0ohhYhMkXQqFjViKVWyTKGAsT9qaHYHtLiD0u2Q5lcu1Q5rVhXLeOXdqVfJMtUi74yqYtk82B1FtN/foE7dofToDaO/yos+unDQgMAQdf1RWOaNl56FWKBR09Chi17qeZGFyzsvLBjuvWe3AjYl3FO5VfApicn0axCnpUb5CnbWtbaNzl3B1Cx++dUouxQcXCw2F4vTendstLqFGrh5uHnmpZYiz8q7KKyaJZ0XE0oTBUZAaTEmo00sZ68yw0PjwBkR+a3Ou+rwKB++GoIYI4FqvXmwFtzW5NyI1SR3xfGiWZkjRbxA7lw7olIIEYiG6IiBtpbHmeJBK6/K6lDV1Nlq4I8RVjVKnQfmyfQi42ZZs/P50C+pu5ZUqBYTsAcFlA/Gv1SgbLUSGdpMd7Fm7OWYvvo0FjgeCZsgnVBuArmE5/0iOoksQQsBUOEvApGR/AxVFak7RDgYwEwGkOGMBGqvI3WwJJVV4aP6mrJ7/G4Yll7RLT8sFGUIw6AzKkGPsV1X2XXYr5QIou114cSvnIWWlVO5lEf5ll+1qKlnUMVUfOUVdYoqquISV0kdrXN1k0rfSPMLXuAgQTT9UNoO7d+oNRAVzrLw5QVTLjwjj5hZMAoR6gwZjdM7MIFV6RI2j8D5wgOJ5AevgBdPKImV7UuQYcygDAgEV4BcJUP1OvKW4W0KQKfFPNXzvMJRIKQoIQkIJLkEccO5sJPABLoDyRXnr0DATRNXlLISh60xMmpoM9ZiKbZMJdsUMsHWybtqggcvIiQUyMWiqNDqUeIbWjk9c9lyjeQ5GKfUyvL/M6oy3p741jN4kQ8ACYae118NqzjhqE4AlSOed/bpqa60mjfJzs7zIqkfnqUWsKIjR/cQFMCLKh5FJfh8iXAJJQbmdv+upMnwfJoB+7qKMKpoU7Ur4n5ObxKWw0fhyf6BRsugj95ayawKT+psDtZO9HkwphmDeUDJkPiA6k9TjqH60lmBA3GGPqOTci20Jri+nGpbJTcy0np4OS6494ZbER9m4Ky7sJCkR9dv3HiAAx5S7WgdQz/mrdHY03kl1kG0R3+hdiC9CuMqv9AHH5OvGiUJ++g+d5xbtzKh5tRuEwHrDALkEqu29U53amlV5Nm56d2gvehKrJKPCH94/0CNMH9acwtGzA28NcDWqhLCUfqgOJi5PwaMF09m3U1kuyxb2QnCEZKDi1IzNxGgt7oCvJUtGcrpFGD/3vyTGKgnZ/oTgQW3XdcFiDcuaCn2LVCcSHTMnuP06+uPRPqcbek6GwJIIbqAoDyED9UbkSnlTdxfvPAYyNTTLcxE94FK8VFbMGarEgUrGFuyjV430Gd1QpfK/mDDh+kr7xpGrl040+nBmGs8E1aZMKZEpO9MRQ6rjwiM2EgXNQr5K9XC6NFFL2XP3Nv0mvVvVFGx+rK5WCg1oTuTevcs2otQPP442hqKrYJQ62tU1Ql5IFz3rid9aYH7tjnPNHn1kGZSVt1Cq5JmK5KyU7oygJwmSzCVGPlI6OR7MC0gfagM5A7FyrzfoYc8E17L58fa7hl3qgQxK91nMo2OsAXplDP3jVQBNvUqughC2QrwM75rRYe9zrZeMuvK9odIYkJ6kP8dgCSqOTyGwOQO+JYs/6wnEFlHq8I6j1goqd+OGc2b81czMOZzDWxCypCv+var7oktx69NW709+MtpbLk1XqGSUlNmqWhL7xHQC94Y4jmC5S+diW6bao6IbEmwQtRXfzRzbb2prDex/ZBJ6/RFZf8ZRqpQfZEEdFCnmDQOPmtwhTlyy/DK4wgRGVzakBAiY8bcIsIxeXFpyWDCS2Sw+FJs0BiBJzgrIruIzmTePJi8LgBevrwGr+2SyGKEBm9nhulvPifB/mJbomXzTkDCADyViuNvrmwY2TCmgvkPwXPXQ+CUzJPxGKAoXtpFyw3ec5uZHeTO4WtS4yu/0nkwA906Efzdy0KJ1wd+HCk+xXKAeLAOiZc0EkhRBfENYrd03AE31AYBzd6CtwOjTKyFq+T2h/Uw5eE9f6orEz9nVJgKZtIwVdQ9Q0tCzmfQDGFzj9w8E7+u6Zsqe38jMriJ8o90PVNG0FXkKd9F0A8zae07wkB3ltysK8Aq/Er/1yvIX6/QddWRQJF3wkcF58pHm0m16H6MmfXfB5GLgU+V2yBHcstO9/uyS+QPS2gB6ZO6wRQFGBw/GiAetf97TSgugT+JRTJKAj4esfvb/hmdoZVXc+mzD94UR82EW9gvtcGvFsSa0ubJStHBmINOA9mJR6FPB60HkE8srcU6FwKVJkYx0I2G8CezWrNgk7/737RfMd5oRMDUxiEqTG8SYiFAC9FFoLktiUTzkijIMEBVVg6Ns5Wzm+PM2cPZxznAOcTx5vhx4E7ht5qhtZJENxxgaCpnwyVbfMf/Ks+wrOOqiWpjBgycAGwRQ2wCaDOGTE4ozBlKFWGhZlhaiq0cYTjqGnDdDYabbgLU7eFviBdvyrbzoWCHSAxRdvpDDL7ZBOKpEBJh2y0dVwYxmhJ7IBL/wipV0nfUMVi1E5CTTlF02hk6apyl6JxzdJxXT1GDRpqaXIVccxvhjsewJ54iPPMM1qodoUMXlm7dkB7PUb3wCt1rry31xkd0fT5j+uIHbf0GaBk0gemnSRr+9z9kyhTst9/sTJu2IIwwLIlABFhGQRSwjoqoYBId0WFJDMSAZTERE+zTA2EkLCkRptNCafYRcY3BLwQbAoNgU2opoeQU5BTkFFeMO2/Dwi5OXn+ZOV0Os6U9FAzBhmCTMkGTMiFC4UNYULOghkGwITAIDIINgUHIsNkwZv7QrCftNe2FDa16O3Sg96390gtZsha53XbbcN9HdXLAzQ2SDxsKdUQi8yjaLiLn5JxZYXPY7bKHJ7sarjV1ipQn1QKLhKg8tNE3u6/pgUemHnvB8No7RhTGBDTpoumaHmPd4hNpzfiVkYMABClzWhyjRY8QRU9bLTA4gjYMfxbgKyEEa+Vr0fiTkyvfMoXilykUnz0cZM2GNRvWbFS5NDk5OSeIlQ0UH4pPTckONSWFZjpNqjQHlP0cYH/5ABS/TMsUiu9oMUJZ4XOYil2sWCzj51hP1pblOcf2FF16rP6t9ynS9DxKQzrqEaTqNdh2Us29Av8238fON29Mw4PO5+fpkcHuVjXopEvoRKqlk52IQ80z2uRo9w8+vm4Pd2b9k01g/7dljD3ta2J1NCn2snsrs+ZEdf99Ex0xRHjy5Vtin/1M9lAwS49uZOGSq5buj5WzmbZU+nsbwaqitbocrUmptZXIpQp2G9A66ylZSTlTxzXoLk52c7bHXvvsd8BBh7jw4MnLJ3z4goCCCxQkWIhQYcJFiBQFAQmFiydajFh16jUYdNxQnOgwYeuUGrXOOq9OfTRZ6YKLLrnsiquuue6GZjf955bbnniqVZt23f4vMUFyxZcceOxEIFFQ0dAxMLGwKeBQLLHtgXxKuqiEibYzYvJYrDi78EtCD9C7jzJz0kqn1Kh11nl16jfx+9o7FM5AC/SwdsYdgEPQqw8Ag0AAMFcClSYba1ej1lnn1anXoHGN5HRuyW9x2TfCGdduDqD/Q0jZCZGf2wpzVW0+QUlNIZSYcIT+PDaQxw6c/jLUZPL2uVK2mdobUTHDhMyKNVv2PHmLkSBRsnQZsuTI1amr6ZZ2Kyh52NBnDkZTmRPmmsvT6j7f8NQ71UqOyePjIVtGAvm4rr6u6FC7Gh4dP8Oz1HAVahvEgdCAT2bLuHwTUJjgKKPhqZXhbuI55GjDd3dr9Pw5u3NX7vDt/ZYMlnQ1D6+6q/VWOK2q7rkirILLe3lrKczZonK2iYIt3OnYLp2uSpVW9fzwamfF2j7vurissKubt8TNXfes1+2Vjd74wbNvi+Aj7Y530bVM7CwnYspjKbZrmVJca0Og+F60ElYuSugbSvomT0++L0InDJfQJUqS/LBaup9YdFpGqrypmqiZS988zpZbYaVVVltjLRfr/MWVm/U22GiTzdxjewif3DHTF378BQgUJFiIUGHCRYiMqEDRdkaDexqzj/yEzwYNGTZi1JhxE1s4+JZG86kJgiAIgqrhhyBEfAgjSpAoSbIUqUSxO5I06aWCqDDRdoYgsvgQhkqQKEmyFKlEn4mStBRsTx+iL9Qnnw0aMmzEqDHjJjoecCWiwkXbGcJgCRIlSZYilWjLICdVJFJVxISJFWcXfgiDJEiUJFmKVKLoC/fJZ1989c13PwwaMmzEqDHjzUSx0rDtIWn2HpkD5yRAoqCioWNgYmFTwKHI/EFCKNqidktbS/9gCUWqIjgAHRFHR7eIJrK7L/Y5Yh6iCT4A+gkRnwMlcmff4fh+RrWGqwu9oFD6OxH9IAw5YyOsIWlMTK9zJdbtjZWXNrjRt48HSxhkIVsWaeFLRnSRdYNe1y0p8nLnLppD1dxCEgt5jWiHOMtsdxGW7DD34q74zSWcH0t0vial+iXd8WnrsFYW9jgY6q578SLcS6+89sZb77z3wcf8embIT7+aSWE04/a2RGrN6Bcd6OWHywuhGIS/8rnX0bEM01MQRi1FT0CL557HFJ6Kl3uNjaosvKCTkgQyGC9vJqa6YggO28wx+DBK3qWIELW+QsZvw774W7TCMv7K73fj0Ic2eeLcBEyAhg5kvtVrlJD204bA6N7nw69EP+SnmyL+4F6I6KcfeAh9xZTD5Qq4ixWfzIux9Pv3DGx+i8x8ZQQWQDXi+0yHjomNQ4kKNVyatGjTwbOXR9uo8W8aPXMZmG/hXvv260MUowz5t6m6fylhFgMbFnM4z6TOoKfOKRDIoVGZnN23cvtUVf+HYCpH0szn6vO/55GPdZiDCmwCTwgIOiySeWykgDhIESlRpkKVGnWzaJuDZzYduvTMY2AuffMZ4tKg6Q9aFjCy0CKLGVvChClzFixZsWbDlh17Zhz8aWkYMxixALIpUsysw0wpTzFx8yZIo3DpaRYlO60ETM2uQHVLeuRxpvHSU8bZiNQ/zUwzEctXkSnr8GDhEJHgEVBQMTDR0MUQ6OZNhVTUb5UixUpUKaWlo1fGwKicSXVAgl9i2GhpELjoRr9MRvXHGCtn6eVPICSSxfL30ivvvPfBR30++eyLr7757kcYTb9+kE2RQ/EUHz1RMmNHoCSFFKiKW6tXaaACRk/63dOG3Wu3oU3qcE3LKrTUIqouuVrF8z/HpGFSC/d/Xz01mHFpaMwTmwZHtohRzeUIUyhOM6lq8Z0xBkNUetgACkYBifrINGhXTAhOBx0G9brtlFIEPOWfR3fIZbiVPaqBJRGIlvIwth4hlfA00Jjyf6RJJZMDKW0sRfiQ6MPjXB5sdGGLfLinlrd4OIS1W/UcjtAUfbKncBrbfSZSBitobVaDJv8cfhQI0g/DIRALINMh9RgItP6/+5OVAbX7AceF1L4KiQLjZU9lKX0OEq0pyxalyT4SiYzLMnGI3G9JxC0NXkUExTWGMTbEEH25VQsMUeXtbRoMUSKnfQBDVKDdHsIQ/des9bu1OjBEvVndJGCIvh2PB0P0CdMbDNFFsRUwRPNh3UtAVKCK+O3BqFmHFWRfomiJlhUrIqbYZ6J35K0fcRGIjPJOHyqj1QjWLN26Z7W2OIBHw1ir2dz2hjIaGkZtKTmxdR15EWGaNIzhIl+13iZjDPNZ0mdCSh+LKNdDH/lznzZ2xgTVG1PCWfUwRhDHg5U+clBqU5SuD+M1xpRNpBiN9zV5vIjwGL9mfGlMwGEisyFh3Mbq7B6QLv0B9iH25g5F673zIiQpMSkypKvEjxS4GniHQDXPK1AdeJjBSne7KG0cAgKAPxeZdUKH/ZOjQQyQ5XkjGDTL0QFirnsNTMUioKA88swMW4qLIEpDhJShrvaTXlnijUnepowLJajNNwABWoAVYAfUM1y4+WfSwVPjwdP83szSQ1he+Ymp+Pc0sXdlM+Y7+nRoHt9DuyX0rrc4DizuUOPm5BWrbspSYkWJnIvkkCbDA0vGMtgK4lvQQnN/CBgyKKsXc1XQ3fXf/bhAO/xIug4/HCfgBwKSQUAma1mT8hGicdWNF8IWXEHtjOCAi9MiBAOcd9AkqODWaEVp744zFOQfHXYODNEfG9Oi4VrzlVK2qzUWVsrf9FJEJNmWrSkH4pUZl13s79mYV1ljgiU+kCx21ZubwbSpmT9rJWoII55ixYk/RkS1Mr4k6tva3zui6HHABnduVrBjiAtjo+ZbOLuXOn7DV766EyHz4sHz70N4pZOMilpVDhLLkiRGMB/u77bKUlaMGYRhfO0RSaNTFNZC3YT6xlRrCWUtJBPGbyN9G+1jsT2kMCtshC5O6IQD4b2iMMQrf2Tnc5KDZ5f6MoapMiGrn6yMxoYJQ3q0cSllSX35UBf0cbqqU0cq9YuYm8+DdQg9gu+epXQs2o5zTynKmslYZN3eyntMPa1k9AiZVqNRf0yzgRkeDgIoDiyAAIttjm3gknlsutGJVZ4adeM9v+lVBhJZrlF5je4iA9VC/dOQ55IIYjnjR/k/i3Pkt9L6z5ef/oW/z0dq9Cqf/9QHHvF2b/LiZz7+oa9+6Rs98RAL0Phdb33txWedcOdbXnr2wePucqsrzz/16Btdecl5x85kTO17jzvfcmG1ZXa/0w1X38FSe9jZpmuvuPiuNlu1cjED03/OfbYznnSckeY668nHHXmEwWYz9YSjDzsw1egJho9Fm+5vn3vZdYdtNNfHnnfcZo+a6VMvOm+35SZ70EVH7TShkdTJeta+ppWXV0rda1tl+aUWKKJ2Nam4zOILrbrSGpUoRIX2eK5Zp018anon5yyTxg4Ml0tWKeNHDZ1RyiTxwmKSU3776LlLgzUz3nvq0LoHpnzwzKlti8a9cmZlaUxi4qfu2mqsVI4kXbVWLleyBGHaqFYoXaxAtTJF8sSFCIwneXNmzZgcwEDgypYpMTYyAIoTK2pibGRogJqMCA8BwXSM0btPE92aHhEXJdcxZStnYnDO1TnnnJmZmSRJJEkCABLzjz300s/kTJxsXj/nnHNmZmaSJJEkCQAI6zyHnIkPnHPOOTMzM0mSSJIEAIRejs3MzMzMzMzMzMzMzMzMzMzMTJIkSZIkSZIkSZIkSZJIkiRJkiRJkiRJkiRJEgAAAAAAAAAAAAAAAMDgk3HJoBO6NapQKl8aMT4qtBDG9GlRQoUpwz57pZ3Mfy6qVaWcRIEMSeKE8+dlC7cehoOwpTyHp3zymZ9jijGEor8twNc338dCAqFlJUmSBAAAGPxyK/knP1clCtdKmZSkMIHxT+5sGZPiIHFlTY6LjADGhpoQHRagQhPAsdD09/stv+HX+krf+3f/rX7y/ebJnik5Hgp3tpT4qAAIdkyIMeFBqUkZIUA4QkD/snqn22N3XXXRkG7F8mVIJsBFzEad/eXNkTklgAbDnikhOgMoDsxIsRHBWZGhkGCMIUc/2X3Q66n7rrvspF7NqugoZUgSgw4rgoVF9GlTw0YkTEkQ1/twdnsSTnw2Q7T8pU08/qhDL2TG05/WlEZFU9y6vdJO5j8XnXVMu1pGGjlkBNiIolgwwsPFRhh+6vdBr6fua3bROSccsZ9YDpEEcb0LZ7fH4cR7HxEfV/OtclmKRf2svGJx/w/39z05E0Ofn3POOTMzM0mSSJIEAEzub0T3RZxsXgsJDMQr9CaEzjy1o+xFBUpDpzmb9RCo2iYCas7nfqFkvDawEATlUWSrTKXQeAG+0QVgKIecDqbXHaSbihmHO92q1GOn+dze6GmMKJECx6p5wolvWx+12blUzfU6UTTNaNsxVs1xp2dUB6HvY9Vst1tEwYekY9UsvUqkTdCJsWKmu9VwBDOUM1bNoPb3WxU6arpM+hrTWTpc51JedfYXiP++Cy665LJhIyZMmjZl3Kgxxi1RiYbANNPiPKXYp8qwlf9tXFp+cuoLAzNS77ZqFTKwheChw7AXpJpUKZUmhr8t1nCwCLpHMEUITwagCJiMmEvrnkFCzqW1Z5RQNiX9M0pHnUsbnlVCe5pk0rPKjP40aZOfk3SMp0mb8hylMZ9V2tTnLGE9q7RpnqO8Ktmii/IGg6ElzjDJwm8t9ChCavvEnlKBOcNYruunnN+vV59+Rx0z4ISTTjtlyKDjYSS6nICYbLBTDs97u4hqEk0VHXAOJ5sHLwjxgmHDSZVOp52KDSgmiV2tbYdcPnEJtWfCDBwCvtElJ2A6GNretlgnPfuPHBwzX6Zu8/3m7rwf3qI74467d94kOXw1X83no9frXUrX2++PrjiyIzguR+mHoI++uosbWsbijiOPZ6NJ3To1HQc+nQstoLhxH9x2mUjkKX1u0j/0682kaCwYvxzIjXiZCS83HseMOdpobDH0kknDXj1CGtBrcopMw/atm74y6BsHfe0zD8lH+1At17swvNWb8HyuFzy8Kr/UZyZbrR9u7Il/CI8zKSvNw0ib+4/dP01bd8Nzh9taCmDXohxughtPSZYrtli0wILNZ3Jm05l4mEonN4wxqg0v+x59EDgDB7AFXIjFznsZnC7kcMrOeimcUUsi6cUMaMiaHt9owHf3Y8mqj1G9IdTjrm5HtROdroPW6cOakab1E0dG16qCHxOVlKs6uAyEec4j/bS7DtL4qtRLJZwUq4ikRqOKbidlfZJPHrllBdlkffEmkAwC4AIVsBAFQgC0MMoISLqkE8lISETcpcFaK9kaUseGHN2ElDAUSY6xR6bbUabCPEqwpvE1QmwTk1LDe8B+6WaQ9QLzpUgIy5hYscKEJEyUho1yIAA8jHExusmMFuRHNTV2owS51eSYn5JTUIYsWgBhUZmciDQ8FY7pnnT3hg3rlWV/ur2SSS4GoNqiRRJWRbDDrQyae6gIvMzjupBRqS2d5tUmBUheqetkWaMQckoF0dhHgbN8wsWxkYG21XyHOOlEeQDZC01QeKJHlxaASbtBVfN/udTUx3C2oZg2qw8L1uz8ydlKW3jwst0OUWIICO2WoUgJiX0OOKraSac0ueSaZnfc90SrDj1e6PNFv0E/e/E/yOHnI51Sr2GeAzrMh5fd1xAFmP2+6Hp1sHjH9KZIya+1AJoOInv2CqlrntB4mIwkD0cQ26pO4/LpZBvkjQL6Va5HgdvUafV+FdP316N0AAp5YXAEcDQAdr5vTvgPTJQWXtMAk79fWZC7A9r+tyWwIDZ0JNas499tWfiE30lNQoIzTpMSK0BH/aEuQYbp4aIiYDhOAQIEAlnFaCBAxTYOQAFWIeHJqhpdblOOx4HPzhXYEqk1Mwpi82Z2fb17cRBBEgxi7lfMe/CevC88LZ4OT49nwDPn2fFWNGtPT3fP7ZXKNPzCgkzYqXQuiE2bZlgCREfQF3zmafK0V27GswVtn5jD4w2nn/iPWE+3uhOf9C0/Wr63iICf34Ra9wS17G654fb+yTDdtC+vH0PAxsD++kyD3KU/gNyxMjxWuSW42rzPkQS73/sAwf8Yl1dFlbeOkY4rU/bbCVsqoZHDe8DSk2PN5UPYwt3skz5MW1aqsFjGjrAq5bKNyDae4fNk6/GQlFjm1PQA2qWZUXwtrihWL49ZjWtKFGvTbqHXlclxw34N8s2aMQfzPvaXPoFOgSpNf9AyyyKLGTOqv6VWWW2NFZanaSVffvwFSPC/brkyZSmUrUCRvQ4pd9hBNWqdddqUmx6QanHP3ZK774233nlp2B5DNns8gA5ya2eGyIT6uxcu56ceGvEJUAMAbVqA7BTM8gcs8ABMv2MwtQFgKlDjrBlkJ65HeLCTo2NY0SIPO0EDsaqZD9vUwIF94Z8yQQfArvJ2dkqMxbbU81k8CkcXlNBI0qHRIpG+Lsl6m98VFMSDIAj4D5pVFcTjlVfjDMBQ3rsVAcIMOyVdqABlIPgErcnnJB4UCCBPADvCyAS4p8MokdHxyeeKik1N0ti6Vncm7zAzygpWLFFTEhkmWER4EYg7wSudzvxWM7QpGgFgE4GJCTAQCGkJGKUYOOqAWQaMSexYVs+BpSWJVsxJ+Y0hs5j+CXxHCgM9l0G/AwDZ8JxWdYiigPxqNUkCH4MEn8ESNHxrDDDUVIxZao3MaTywEk4YPLCEAJc6AqWDKDbY14vOWXaUEL9bPli4GJsmQg7GlInpWty5F5FKiE4MqlBCK7Hdh0Pc2i7bKpY/R2Y87lsqZcM+fNkYBpkTmru4EwRdE+C3mqdXK3PDijHcF7sMEzGYliIr2AFGF/F3TWBObpkrSZCAj2TRA65m/KwizPoTMDIQmhYHTI42JyCbs7JWq6dTs/iO0t5uuCMqiTHcFHeGUib46ZaFGgiqBG3sQqCjQFhck0b8NmOTeuShpzFCpWv9v2Hz+J9v5ruaer1NrdqGqBgTUthyJx5gG0de9fcrRP5JHQlLOKyx35EcxY14qYcB8c1m4VyQZ0f5Uk4cyVyLEBl2hP1wkAd2wCQyMNWkv7pbIpyp6FwwY92TNhcowb4Xe+VAepj5/moNFZvsdtsnofQ+QsXwg+hAx7SeZaQXFtl5aQOLDFZ1oeJGToPf1rAt54NXVJdVJLZP1QMUS+M3zgprHZExivqwSPsEMzw912LS4jrbGEbBhJrJYnRgX6pRg6LgzuDp0vwFtQo6Z3+nhn+ClF1309Q/rHDiK2YhqrbxsufJP6S6Gh1QCQukfmSHT6SXy2I/QedVP4LUSfwCdVxQCfJHYpyIWspLcowyCy1LamdIxFZGF9mH4Rbfqo3F6u9RfL5PzURB7N0I6RnoKCeFt0BoP+ST1CBayzurfpKEEipxsr5kko5W1TppK64STegJs73k9SZ64T7MbX0cAQnn+Plaapq72dFQ7tkctbDW+wG1um8kzd5f+zCcY9nzmbTD7+jlhWIYqqbIpxcooRtsNh2qbjMoDXNJD232SRSBXVukOm1AE6fV3jpDX6IhnaCIWqEt36y2efBmTArSTRNhZ1c3meVJf4qmhJ0/Y9cmrXreFpFemf0HI/btYo3I8PzNhkaGp9dniYRB73Eyx0QNlIyjvKQaJQMmSiDEgzRalx8KtzEl5vSlRRM0R1hIvUSjdq2TOCubHSQVTNp2wuO0LY2ZHahxmmIe2DF3lofrV9YmDrMO85xzzWZ5HqAqO5EUW+LehR0+M9Dp0Nrh3E/UQy74KW8eZ6I2da0oNzbeFRKq9kau6vtWuKFmWNf3tTyF02Qm9UYV2UM/rfF3qA30Xci4gSUMYRUCEHYkwzPUc8uiWUk8S/SUuO/vVyOSucvZmflMBMeMeGpNLU6lTjixBSrOQRkd2xbrnBnqdR5Uab25i1tUGLbDc04toBRDEFW2jlEmeI82P9uNoYvaiLyVjonXSGM4ytjo145ZXoP+2Y5BAKd23XcM7OMU9Y0z+bXGKJyhKQhhLGsH2XXQ8CAl2vocUwuhVOH3CdkXRWEM+7W8BvbH1P0i6Jcl5gDJZM6+jsVscHYGl32iWl6XUYt2ow/mI2pf8quQtT8emX43M4aQ6tip4WmOXRxsaKFpvAQcnYQCxd/aDuR1ZNioa8hCmQlpMEs6s2qDKNQyu/bp9Y+NqFM7Wqcw0Ja7X1P3RDZi7XOuoZI45aTSChTHgUzw3V2aF5OUh2Ns8xs2fIRiw2mMIbRrHV2Njv3+giliHEH4+Vrz+P20qvwC2X7V1Nuj/ldvbO6/Ge5Ozf8uVSQ+kGOIkIXQdyrMutZvR3oFRFOd5T0OojMTi9icyJY0cN4O40733+JTOF2/cc6KBaFPktqdVZKJOY7Y4BTYjDD4yFxnrE5+wlCnJCSjtW7MOZIc5edSdgIlBNjp2aS40rJyQWq8CeJD2dhh6xz+6MQkj43byQkeH4tRYHF32G0JJMGVXXDXZXS1iaSSt1DkwjJdqUAZJbUuMaL3Y6fpjE3BtI6u8qbFPOfi01hKf9s3BTbc1V/KfDdAf9CSLWGYCSneFAYaa/A0VbnSiOtmdMQOLzVGdX1YjUQL8ZXfHDy/wnPjOfoD2GhFd/cP8hqtYe3l/fZ5j4xk2FdmYw5HPcBFx0/7AJvQ/B/P4oEnnNpdGeIo5k1ennM+v6ZyljMT6IMYYeigtTFRT+rz2yY45sZyzAuROORjRxrd3exakQtpa8Hmyu0ZMkmGigz8cqwGke1hjXg5D36pfiLslq4l1vXOGukxJXbP1HfaJYh1nzxzWMlZtcu327Lao9w/+H766c1tfAw6B9yDP54pBcqTQis4+f768o1F63IMeh7n8N+wGRbuNW5C9Gj8PucQLYp5blzitcIgavy09EVYn/NWTUs9guGVHcR3Bpa7+fC1WmwwUAV8qOPBeS4caXB5Va3sEBP74Cm+2wjqse+aIHTfoOvcx2nt7oN9HkBuoIcBTN1n0X6n42cGzVwCrwZ+8ayY1U0TZB5WWmt/YTKiFvfvU22P/f0fJuo/mufcCAawclunCl9kMzasyTOV5vhC+zOdZTUVjNPz/yPHXKnxWDOvNmI9BlQBYEdcG537TKGRqXI0b+Fd+7uv7Iy+D226f/slt7X9mbq59Q2tfhD3muNf302FUMau3mnHFWC/l3N1/coE0o1j22Hb+Da/ujZhujIr4Ix9n+nbe/Yx2dChMoZt7J56rJF6Nxm7Fq6QovTcaia34fYJBHtjfXotCYpKcWedm0h48ZOOW6Xr4/ESx9cHbBEK1NDlbrKxpsxPbxovOvPeNuj/bQjvf3bqtZyjZHXd6h+xe+FZ99E/3Gh07HMG42by+VbsPNbbR8nrSBhzBGTmN/+ELJC9W00yDz/sHBNJl4tNh4wMg8I0yezCutIw+tveuJ433g2PRHep7RkNhuVqYmKoYUozLJKdGQ9h1vimX/b1etUD6oYR/bMgBSqq48ZXOaphCPP3DaHvvwisX9YdqABIR+STzlJUU/dplxYgATG/oFv4PwQkRHUfU2oBocWOl479/7u2hcpihfggUozUIl4ubv+8duPWi+unv5NyxAB2yN3idOia5XcV18hDyczt8Hk/6CLTYb9oe1OkZ8XcxjmAHcZZypeWFpuvNl+/u3QCrEdEu19DJFQNXx8Gx8F6y7y+e3LpxawETGkuFbt9K3nNEU9Bf54ibfRF6vmYq8791UUCIj5Pj42jXDxMUYfiUgkCraYcAiDAYdF/7Bz/u4FzfP/xReXy8mP6tMkdBe8U8PgMKaXEHa+7rcv7Y2Sk4I9bpVp8sYeMjM/cjHuvlCkfO2q+TwSVOTcDT31Rkv3LxQtZP66WDKhu5j4PvXSC+vHLSRpyeH+gBay3fADrLRwe5MzS9Zmmq0137i4dfrr8uzT9hepqQgaA5DjcDpg8zf+6/yzfd2JRdX/VYFnayPb0r1SRuBQxSeNBKr25O/+PkZH83+/ojKrL4qTLmlMnZ6hnZvp37Gqh431Qvo5/J1t+bH/dDpxa+qzjaX//v2/POO+2aLWGtDQ+LK3Lm4Orf38D+MK3AWSxIVUbjjm67KKaeH1Ishf/Wp+v5azNhl7+62ntec+BCnCcRvuWY9zW3eDAiX6kl+duPmRYClg8VPYpdS18pLY2mm3fWe9d/Ky0a2pxA6CV7Yl+nT51XsrHqvYuV+05Lu888n1r/Tt3UR32thZwmakLrQ8YzdW+cBqnprW7x+615loPEQ1mzA+w3kI/kLfbE0k1CM6ii9zWZdrMkY2L9gDIQYfFgLHz/O8GuFvA+OKi37jY3/dDNb+xhXvam6L8P0bGMgRFq7ulVUZH8n+vBpxvwSbO0F++O0uXW3Ir4KZP9bIu7+dzZ3J/WtZX+d6UGSTq2i9+uWffaRXPCqpyVz+Wnstc9MgyU6IMHG5UWQUp2wms3wo3X37WfQfL/x37vvpJEPXsJXb0ARSl4mF+1eWPinMNV4uyTFGIguxEhNqM/j/8ESn9/2ZVgnanE7+mFixtMH/cwIxLbYDxRI1hvAwiiswuDWI6nPMfC7g736GvWvgurbXjY5pxco3yc6Z0KFsbZwwmJiEIfH4xtLbeHb+9NUIrptdKS/XXfouB9cc5S9lL98D6LR9h/Rb4bdawXaXkh27L23lpTNdArCLnWGx0l3T+naW78QfbSqDrjlp+U3GNPCBiO8Jn/GELzO37RdsHIn/XxVngxm6cZVAhj29PP3Tq4LktfJet/EPnXE850Dc/dP9r87C7A931lMu5rXy3rfwD59xObadvzuP/tFtqoW1p2+Us9/1ZowHuVO317f68LVd3gWB3V8YZl6t+Nkvz/HHhUojoX8g3UFGkzA93c95aF4PrkFsTz/YnSUVwjB/v5sLr/rzg2LlfJRCz0YWjt9216kfD17mnktzT8fWHyQ6rNi4wPQuU7PfiXArA5xwJxjmShBvmsPD/u0W75/BRGDm/OYzoSBJtmMfiv5fAXae0M3RJW5aIqC4mtLvSrZPsirYcm78B4c8T+hFIKT5I3K/Lge6SI+rx4CRs24FyDqdN876jwy6OxyqDf3IxTovD5KHqptE7eFsYNo1dMvcIXFhgECHBFVicMs/Rk9uyxJyyGtppl2gII8wuObJPHy9MKI/FN0bn5NF7jzATopJdiHjYfTen2JKKeUqRcoZcYnKO2R3rQStU9EUmiy9F1ZSzVg7Sx2nFniRGKEvJEsSV4tB5qKQof34Cf59f7B5fVYFz6t5m720cVl5ExSEw5yjVYYnxsB0XHoP1lhfem6D4+FJsqsliVluNNRWusRRMTIn1cuSl7CzkeZ00UagXo84W5KMv6iVkj4ebWM9hY361VG7vl3X6tWfP6dfJn6be6DYfDZercaDeNz3ti0fCuHtgUmMa8lJGOvKiMVUK5+3FwH3J3fcg9nResSa6wxfAHCseVhWuGbmotnqYa0opxRLiXTZ5PwfrLZ0XdriS4rVY+JRQJ0FfzC9AndWJRYk6KfJ8Vjbqkl4OCrjHvz+iszpfW7r+g6RbfCnqSDl75SC9aNBWFihHdBdHCxMMsVj9h4VRki9Q1+UAZ16pYYYIDr8VDp8e3owVfh4qqG7DxWCEjtHQS7985UrH0cgLILuin0VpMg+gx/kINF4BidX1qvSr9nA8rzRKZrQUFf18+bLmvxWzSa7DEAUu28aeZDUZZ97G1uuFOj5qMFeBOqUTCRP1yajT6Zm6R1k8yN7XKtOHvNe0L6BlstKYe1oknKq+/vyMusScRS5AYopAs/C5D7CBC1+cAIpNHX20fJ9ZVzqGSQPChM3uE0+s/9jr3og0LT1pn6Nma9vhdWdgl15Sn374HlDWKO8SStTlESRNS+tu017H+HRtOypa0s9LOKX96fnznGIJDycJDZRh7vZ8FZebHhuZEhKVxRpnLCW0oFJbruyUSLQuldvzlZFREj29KbLufK1+bZVJmTENeTEtHXkZ0jKpwdSqRnzdQdNRsAE8HtvhSq0Vvnap9uF9qhfubdVz1ibjb0PqHa+gHWOPDwxM+sRv+mbho6ZN++M75EmO7B2WYcxGV6oagckhnwBuO9UzOFWFfdKy0U5+CScxrSQmKoiKY2yb9u5yaetQJWe3LLK16jO4tJKd7CUjsjxGEq9mIUKY2HiHYc9Ol5aWAll+93IMOM4szRtdTqw0PowvPl+s1pxOddnawDr/oEuTPXFbZrqw2Jdt0CanNhpLihfcMSI0PC1SrDVkp1cWyxDA0004LBw+ZvPcDlOL2l4I87hwmGHr2X6iuxZs25x7xs2ermoqNWdS8p3iGKtcHLY7BrRNm/U5g8/7RWiNIgRPyApFqEX9n1FhT4NdxtC1VeV6qU92aH0cS3rQx1d6MI6VDiX78Baw4pws/O6Fxi0FZtkrR++RwyyuKc+TvjE+8KDScZ3wY9KyljzyP+2+g3s7Iv/3O5rlF6rlWakR/wfpoX2d4f/7bc3yV0cH4Yv8lw5Ez1734/Ys3x1MjyHPfgd8/ikBQscawane/D9K5OYceocXQepNIHQEcnR3fqnSHB82/97yLYxNa/HCyTxxhBYYu+1bYGwIvFxeG7cZjbcn7GI5N0sYa0wNeHAO7F453OKW8nImdJL/PBSbVGiOiIOztoDi/bH/2hIWvI6hf7SNXgCb0dYPYD1/wW1YqdGBoTcFyqWkIuW19/lD+jl9kiEclUmmoHIMUUl6EBFoyIO7FyrgDh72Ha8rin/s6VJ+LzNrmYVQLq1im5uo4c7L+W5KeEVF0MapjjWl+CsXSta+LmgdF+vjMT0SQcQpfaY8SZeEGJSIIgakFAjaYKNGBb9u4VOXbs8DrLcI4Qo0G5pT62x3t+x0PTQo2mOv3w87uNgHf70+hX7drOJrxb37WxNbg7YfnL6AQEqZfzQzYW3cziPrq2MfdajrlXMJmtPb8+/ztknV+ckxCjxcbUW3L1uDCxcIA9N2x290al7a/MkOz4hPodWVNbUBlrZB/0GAybyBbZ4NaoY3eOLbQoPaCK8b+VOJwpBsF2TeSLHs98nJ8AEa0eShMg8JgiKiJ6i426tyxpzH+3jf9ffxnSfGcm+uBc32538e1nN//unn/TJ67uyvo3reTz8l1Rs+d0VeZyL/OzJK/r8kR541N1P+Gx2h/JsG3o9OeuTdf5TXMv2s3q38GuqP/2lLY8lLAvPQFGy6MpTKKEAiCpif5ZXc7cmpqX2crZ5TsyO62q9WVbsGbOq+A8rs276SV4yvVX8gUXSRHsaMKQ+nZhAplJw6hFw7pWWXhOFSCbhIaXYIlVgMp4nWYJ4TKtP4S1lVnSVbMZFZWn02f79d0pZqX0KTsMi8+F02UOhOeLn+IdmacLN1U+6VI4dirbhuz8B6CwhVq5+l6ibXFXzuRkpSBhN4Bhq5KjaOVmtmxGDNfsYH+9g/BF9V+fVZT+0J5sjOEEvL8SMZDYbXH/Wg0T75yqruYwn2n16h+TY9uJdhMC6nlI1vVb7kxhnz0zI7tczvTtsJs+Nq/OllD4qLX4jr9O8+lnfP88o59JpoPqXKyOIhMwJYfN+sKA61xsQDC17lazf133lxx6t8IzDYd3+fbppRCel95jTeFusY5/IJVa5m+LGsuvKJrGg4V2WeyHC2Zm+pCGf0CVXmme/TuyYE5ZGkLDKNpjRj+NFmDK2ATiZmmSPjh8mKMHQaDo+Q54ZQqbkhCDkeh0jLCwNSNdNyin5qW+FrNYFRmZHZoWX9cMouITu2GsIoe1hS9KK4Tv/+K1O3VRJYIHT3J+xYvkL3b3xwLyPvvmMmhMX3y0KwaNXlPD7XxKbV8PmUKgMbtNqf+2G4iPfTT9/W7y+cPYe8GFFX/67x/BV5jYHw7/gk4T+x5TJsRvxvcpz478sGHsyOzToUOM5MI8oUamFy/kpMQJs0rssr7WJJfJZ6Y+h+cTThqNcB1860Lk9pXEB7jkUglKoVhu3NiCbtTwzeoIrPKcmvWLm9Ar4oi3+rE/aLQzeq4rJLL6Z1eknjIG05K3xhstqTa3dBFJej2hC8PzGadNTLoFCDhKB8SwykXRrX6XlwOPQ2WLkNAEat9Wlm/mSemFpdoeRH/VgzfNyT4Ifkc2lw+ifeJGgQRMLPCEYf5oT+Zd9Lii5qIXbGywQ9p2Jz8wZjYlsEWEhBjOTM4c9Y4fh0NAYpzQum8o8SdCbybMGNUuR17xLDPgr5yVpw97nV2rFfjrVjKd+W8ThRUTwOAskRZBfMpu1VPAI/q2PkRpSNZ58H7Cgkl42I4nKA7upWk1mTkI/yRHvF5rGRYYJkaFRIsi9KvI7yBWFMGr4l0JhvJOVcVhZlnUkKe0TDu0i4W2UW+sAl3IOMdWwtN2sW8lBeNJZChCVIoZFhtHht2JA0stB0S5J96XTvKTjXZM5sNiKO4OmzC9wSDqKT88hk9QOXrkx2KKXJCN2c7scZeVD6OGMR8Lj8ibQAiJ1ubxglg03pspDV+WSUdOClcbH4IVh2go3Ys5efgfUvey6DPO6OnzV6gNoyRZHIEc4PbUuJ6/PKuKhrOiiOJRzvetiZ0efZmFDoEkmLFKZtNpZ0EGRdGbnv/HZr5RAOQGl8tv5iRq/XZQpNickaL/js9Hj7QOIjvLPRpNAAcWBD29vfor2eh/JC74GVewCgjra+Emi+/6GJ+bxTw/9meGv6qgVleP5W4XFMse8J/WydLC+k8GA0qcbaGVMjyjON6xNellalP71RVCQ24qZt4863h4TTw3DUhP2L7UbOVydH/pXXntsim7wq3n15VOw0P+8kmWC17VG52QUdfdvkdW53u0SQRwpsys4J1eUFcZk5jPBydiy0LSMeLGyVWuq24iyWqNp9F9L2XoiE1CpaulGK9k37LqbuuQi+ty95tmPwtOBNdjmXVZ96JiwpWvWRsoQ3YATGhLcmqpnRnC5cTMq9J9LlLt9SFxZeTcxbTivNu3dH48JZW6y/9alWb70u6be0WHtXTthWtrHvaHv+oqylv/sp8HnstH/DH9f4XGBv9GVg0/jg+uB66+0LtzcNfT1z+wzY+EVjOZT9sLl1DiBxRwDoEjoQqx3aHtPA4zXExPLqRYmJrecpsTG8hv7A1rVykNgfTQQlmvhtdfMthnwn4mvNehuGa2Aeb4o8QNCWKB4vko/iRkV244EfntU/CY2/5D9JA1rJxvylcKPA6d+HIhoevbmBztifdsPpFZDr/3A1Vl7dQmn2F99yfmNXgie3rp64GqZYnKYDiNtX763S66aeTQFi6/mbV24CZF0SXIKrqnElBLi4uqpKcKUe2LVX+tIv8iO53MhwJhE8PHlrr1IjeBGRR2wg4hMHXEcutCxENLLnbs3hnX68/yMMnLHSMo9VUlhETTgTb/vIIBzHB/xra7Sso5VUJqUYQUX5DnuEEJlAAMEQiG3r1fglGJmpq4K9j/BwKrz0jrHqsa9/9eXHLc8/g6XqLRCroQ3V26ugg3nEakiV92+GgCHGkW1VkGdUgyG4MeixLTO/CifijjTfwTctx/cU/Pln0XVp84zT7rlLUNG8jLfQxjNc43dVOBmrsnj19cVZElSMgslRqfMQG4wtq1dfExRcS1QTUk6tuh4ifMC/OVPyt1n/9z2nzZ4M90BKWFgwm+XlPR/b4xzp5wfdLZ8B6z/EKxZu5SplZ2NyWjeLZjZjNNE0TDYKnY3FoLNkmhhaJn8zdtpOlNY+FC1TLsYpFo5W9jkqH7YpHfv6GAHTRH35ar1XCpc9e3piloWFhIQ0UWH4AQCBP199uyu1vaijKOW1RphTupPYKdPp+MfMj5yp7ZcSwD5OgKgrTtAlFAm6u+JFws54xIBYrTMuYSiA7udHD4DUNt0fbYZ/tCEB+AXC8AMZeXxzKCOHI0yWd/nxNjKsxbafaa+LYmNZLDHCedhtLzlH3OzLDSt2TkeisnkBk/nWg+mMiDpcoj+c4Z88RdsabTu8ziYxKDQoLgT88FA3lyFfTC+TX2lO1+lm0lOuZOgzhGvQdtEkJEgxjRZQnEym7W06DRE/PUD8J81hp/UG4SdTXh6nvb06PL3bwbal5feXnc7oNx7hk9mK2kb9psv9JAYHg4nmAzTFsfDbrf0v1IqVXJPC8lLTf3fTf0zh8V+DEOSrPEWV1zlI5r0dOJIkeXQKhQT1xeACkDsa0C6SxMCCKGRoRgoWt8aVEkwp5rc+PHfh9PSQZ8eE995YnkAUK6bjoH44QkDSjkaMizgRpohAhaenYDDrHJPQnP0ieJK0YYS+7uhN1k4E0Xb9LPTpx5trX9N2hZJsd+7FfvYZHBy6BFmstX62+8RyEdjI0VXGWFvuLeyFx4ShsewQ2GTBdFVz36Qp3cUeG0xNF8SE6gQbT5eDffZKyWBEUgYg3FVP9MeR40N9/BJDudHaaEJciO9hBgyFiYc4TQHC9ozuiERJSyQ7FYNNieVYb4zepBBTCcKME5GgHrnechEPFWqtu0+u3L198klX18mnt+4MPepuIOKrjOX4GiKRcAT/wq8Ee2EQyIU+m9k9JwaKQbLQ8SA+kOETgIf5B1z1P5ndX6rSdxoT3Q9wRJqEpNhEW0wDOGLNMfuz4yIv8an7/YPIQT4BOCSRV84LRIdDvBP9fZjukBP+HJExkB5diEDIw3A0AXKTzd+2fAlDerEc8BKqMT7KT13mGZselNiojkUxByCgypZVGkpM3HfaBfOJdwiVGBHBZCB3THDaPQPLntbTneY2PnQ96EvNxaJVdCatuIIIGq0hin3JbESPvil28VCCgFESSU+1RZ1/+LUfKaZEZftbugMan41GK+maE4NHqiKYrMgwKjvSfakYHs0UAM3GNtuqElQLpwuYrBNqwxlydIAXlxh60qZ2pTQSQU7UhnBY+lByYlQUPjnLxrw69DAXgmbJa8PjDUh8BDSQigoLBzsQmqohZRBUaID/B3jg4+aT/S9QMxklUfQMG/T5pRf+EEKIVxbTZlcmAolXYFFKGpdmqKLEWfll75Ez0H3Glrgr+4UxPd5P3ZGH4Iw4VASdHRFOYgFiCqQGkvA4K8AI+lZr/WuB7n713uo91u4DDYr3RnvcwE4eRvciTMQDBZg9leEnAjJ7iQX0X0EQHaYIO7nbjCwgHECaenxQmCnP6zEF1F8pQvDHFCgWC6GjMFBIORZIDPEPm40PTYKXxRBMYyrecqMt4GCen8TExR3h0nn4GjM3UVLOxdbwVo24mvKb30QKlSDoUcFSCjFcGkVHhEnQb14lmblY1Fm445NNXEwjF3fk7iTlkP0qL/1KAVvjQLX3m+vewPGXgSXv19XewJ+3egTaC7yO7/IiOlvCHPdc3l69RhZXxPXGODdRdu+djKhYk5KgBkEvnQYGBgcMhtWnrmaFUe4gqxBsFdr6rMyt+AhtBdvMsvgEopwj4vBWu9eIExohn7UAczwEcj44YN/JHqHn9Ws7MADM/cJlQFU9DzcPj54dU1P6i2Bafym9lpWgE2AcnbqvyhNx5JwEYrysULAter4rcyu+dflWlWxdeYhJAQsvr8EwOADy/0PUuRkMudFoGHh2O6zAviWusU4BjNJel97dw91N3bShkwl6h2kmEkxPYfXp08TpKZAfcxL28PBQTp6ss2quvwimppRWCSX4eCDwpXVT/6wGw62batkL6yUDeITHLUiD8YvNoNrDZng0HzQmJNJQ4JflAHLLaVuUForBxFT6A58QH5wng5P3Me9XNzR0ZiHUD5ndrMtuGljtT9N89gyeY0oxImXmrQI7oe+H+Q++tsJtgkLZIEnIkflz4Z/1gESz6kG8WOXpM1iuWW5AKVWnrq3QB87hYyfcKqiQjQBb5j/tDntnF0ihwFkhBQaR18PJlNf5YGA52FZgE8qkBAVDs9BQFiU4aAbAjvx/P7X5x37+X3ube8XngIPxBEmNIeQS8ASFGksiq7CCBVKXCkPSw7EdDvvJYelzAzgmf7+faNb1b2/UN+K4rpF2tAkwejRLHdjl5tYVyDvwWuZvxRcDoSsrNpulAf68+V5o753G8m1P5rYB2NsfLCnkQE7DgWSylg8GPj0oiSasF3ZsRzWs+qMvIXFm22PTNi7cn0qtjmJw5kH7Ao6q5ecGBj0R8Br8x4vo/HB2CEvjimfvaSThm+QJGn+eHPUcTBuohWh8Dg6Pzy5EUVMMJTYep3GbomjhnyIMhsMFhsgjo1dmRQiiEGFwSveEgWQCHEYmvrbMzw0MGhnxtJEbqs2qgbX9y1msbx3bINLSvNGwVuE8aIKZE1AFn/2cA0z7pMZGcIV9+04A1Y93uX6PsZ2NTFmjnJs7ZPpecu0ZgBeHgVKGRBVfW17u2fItpb+8tNqWH6n9S37XETBZ5pd58i+xWDJcD/4dkBmrRQQUJsu2B46Stqml5BOoDKhcNF5v0oeMdCnCUncKqOIa8c/xSNJ4jc2mCh7xgIdwSaaqr0g4JpngQ3VreKzS2nJJOjfGWQa1ZbVEDRjwqxrEAUlaQPsvA/+8srklp1mKyyM5wvJMZ1mWyhjSUlFVi3zhgVrEiCW1DgV1tTZDUthVq6qwq1Yf/mzLi9A/nUANkJZydz5Yq845wRl1ZgDHiz2F4CIIUD8EdigH8EjFs6ys+JdzPDOqdn5K65nuKxJZL2Uixt+9Rcbqv+lQxL+iS1uEqaJFHg2xyzCOq5cZZaUXmnU7oUN3ZAOrAkRaYw6zCPCQEpYbZlnN4l/29v7sneQpE0f/M4QYGz+53ODNfFQzmo9qHIhZbVmbotYf6cYyVF0u+/hfBakhKAnF35IKHuLHMj+kpTRdHLiuwogxWgpxT3eza6kIPjBrhvnJGpCMSH+LGfpyiB7dEG6Rx2PlLrLn4P+oIaORP4KitqxuB9GWrgotCYMGSNrjhQhoSytM9zkhNh2I9fSfYI3R4VyYWFrbecRJkcl0bI04lxQoOGDkT+tR5IFeeH/kl9W5xMM3TgRPT9Hd8P/AGox/QjWx/BqRlugPLkRawCPZ/F+WJS5LY38bD/4TH0czmt/+0lID1f6rTU0UqGzKSBlc2o0o1xXkKTp5eDYM67USorC4Vq2K1Jy52gtlM4KDoBaXhsjvZPFqgXFZ/mK7MIq+uBIESyuMRzSKjNgFachcmXN+oPHgTw95Su04sFfokxCoSq1CNBlmpOioyqToqMo39WBJhq+G1WLDTC/SzsV1Sf5CzNVwYmmF8Ih6kSlyQXO5h08VvNTHPX1yjS4g4stkSA01aalKV2qsL7+Agn4z9HUaHPFzjBWuwSiyV0FaHHFMyNfBSBFeDNae0p8TzPVn3JmP3Z6Ss11OKYqLoY4ZmqGhqxiG25S5nrJUfHb9UvAjmxE/TQcpSx/SvFXNlxeu6/kT7+Yx7t29U7PibvCalXeYVY/drf4nMAE2IT6dDZmOtwN+hmjxdA2o8a7gRnCCmfjPjfBPk/CH7SSSRDIplnqPlAJpaEOA5t8iPv8LYaxFQixZYpaUJVuKlVnqQw6hpvDfgPEr+LCSVaxmja29Ow25AH27ladd8Ld5jUPb1t8yKP+oOv/iA8O38C0Jfr1fFYGcUjWuClBThHEHhPrQ6rO0Vj8tzxBoKK4oZer7ObAGxBxXwM2yUjt/yPIr+QnHP3YyPe0GLhj7ia2aiBjX4rRm81mpAauvRoUS3G4k6htJGE2W4kqq+ygH9l5Qh/2jwhH/qnRUlWOqHXfCyXxqmF+H30Nra0o//tnfgEztyPavFWX0adx/1mKMFoYYQY6M0Xq8qRl0VNRqO7TRTgeddNFND7085wUv1SJ5tZEB9Xsav0J5B2Zb12ffcN39f82cv73y75P9Z01a+zfa4LtX03gIPm+nzTESOvP7xoUYxNgfLf8y51M656WDxDSQumLMRMFFAEiSJkE46xQpKe4eEUsTQTf5RihfG/aYVhcnXWVjlBI7Tqh7usdeu0c4fcixaiZ53JFO4HfTh4YkCrodcdNFfe93bxVx3JCtkXALEdyAKKcoH0P2BPjWdMpNFxAmRkS2y4XC4VRojWx3xmXEW+l0E3oCz28uuTZUNZe1VQrS2viyOg4Nc+MDiO6aO/KMQ4OY+kIojTVXf4oI4sjf5EHRt0eMoNv9uhFKXavqYEC+tmsl0DnEX6IkvWj9lwJMRMLT1bdIOEq94V6Yr1PpjGlW09AkiaS4oNu8G+E90iXqczF2Nbdek74am50+9StTZENUiHUyHFrL4gCoZuiSmxBzBXb4XHrEEQJfMiKc1S/b5nTticNZEVsEuRSdYUvOqi4dm/Wfc4ybqFBP6pVdG1oyrXwv2E4diRyTauALPlTPuR9Muge02qbXVbj7+kww7YrtJ6bUEyjr7jCtSQIc9imSAMx1B2cmFdi9D+bMP2DXnOlYgDkxtg5g5ySUeDgATOa8sR8PzP0koUftOTiQgh7tE+WCXNSn4A89xaFIIJoC3BxM8Dkikji3xO3xihygyR1LY2qfaaAZYDHrqVmCXAhBLovlnd6FAMHQSs+NJAAB89FsifNwtLns8mlJquQXW9Ipjo6O5p835D2MoEeUzqB2jrVnQmOMyz7VLJYgG3Ewae5MqxoaLbm/oH1MnjHwR99wYyC8ry2IRx1MtYwWCtFsLBSernHvSBHU2n16dbIBNZht6WkpwP1PUtBUatcCf9n0yYq1j8GDfeTNaVXBC4BMXmvitIsmoAaNW6Jzf7HtemIqdW5y1enSgNxGIWdFn43f8pXvLhO+cCwWIbJ092KAaKCFEkAKVcHSsY5E3txnMUCj1GWp7zerDZJXc6/WQL+Te5f6AUnTvVsMMmIXO8OnM9vGxfrUCeu8Ov6d3haSWSfa9wacpo5QVDlduWcVxkVtOK0RuZ0fZfUGSdO9W6c6ohc543cbusvFldMJ201dAXlRt5msM9EzRjpU3fSiNacrd5PLxlvZL8gScFUchdwHGEEb7AY+8EhJ8lYRMFE/NuufyKNAycrb8/ZqwNwGuKnqXZ3e/r3Ak52/y0+rKqRE4C+dcD1xLjprPTU3dInYNTuUWGoUMrd7HovrOF4apNTtNpI9bBsKme91eZl03x58lXZzHbkZiM5d43bzR9k7qJlud53q3b3ITWPd3k/IV04Xbzf3Csibuk2yzhnpGfBAR5f2DKhac/rCbrJuHVxt85zrOlp3ppUXiVUO947gAXEPrS4vZu1f10RdQUqckytTwF0U3x+9K14Rbp11ctaL3T9WZadI32Groqekrk3VeGxkDUTlXUH8H2aAtcC79lfz3KkeWBqHlvJB6FOU8rCImwcTvPr3dohm8vFobLuZdmcc1tis+rNPrs1HlYuXz9KxROq1vSTZRWZlckZMx99ydYrnO95+nSJRvSsp2JHuUAEZDBWIZBMsMIEwV75Vs0oSy91mhcnv6F2aXQ2Ei6bVCadfjkHfLc/51vz330SKDn+nr6UDSPr3Zm6p+taKPOaaq4ZO7AJyMJBkwNdBDza8vnH+b5UJzH8RO1Aca03XgfAw8z/+hgZjxslx/pXY5PuOb6xuYy5NmP/Fpo85zi1jZz4y344BHXB/K8yIU+jCJV3u70lznO8c/OlqXYfCLtUT67hRHT16jh86DCZY4gO/UHiKLa+d/t1xugxZUDFmDrPefgnzdB7hAXehzfy5yYQeVsYf4WsdXsHGRTYD1HqMb+pTZbMk6SIhgSlzzqSCf4JFB/GM6RhstoOUgELjO1GZx+3wnq0gTUs8ZymD/NLYvIOv2WadNjvOicyp3/PdmsrE9KRez3++YcLxdYVawRhDkUdKAaUfYrzXo4ptXAu2v5xxeqKUkFnscDfxrT9Yot/n0+lxYePHaozE7k12dD/xkMAfR3HdZrMzIbYlvIbRmTq79SzVs6xFlmAVMp0eyjxaBrb1mZmxbfO8E7HuqKaK8SLT6SwpF5rUoN5dZ1zcqCMNujgvOrkX4B4uLwNA5wlr8107HTu+bWyMBK4RMnCHtgh/5yh5gfnnC7HmmzXadOaj1DXGcN01vWI8WO/S3aikAZQB+U290wvLRpWIpHuyRyMyVftu02EJi9OsvonYrcqKkqo4dq5B6YjnbPPbnC8Rt37FN+I2HmrgHXTDTZBb9xQ82BlV9kN/uZuA+4hbG0kfBzdno4Bzg1M9YdM+JVWly/ZbLnXSf6iLefUTgV0kdmUK2ftE7GOCav8Vs3WsW7pc1yivrcx7G3DfFIjZqtat+5y3Iqxb83s24Y7HnnrpGaV9VWqPWDdUxi4P9G+2fp7rWllz88p7+6muaegU0ynf9ymf6LymNTxel7szpf05QroIdjJQgVfP+8FwIHW4BLe0ATkkgEn3JbuuJnuuQ6GXARlYTcBKTetvgHdE+/ny7xL3u1OP4dRmQScAZKbAecDewHrAocCzwKv7AeW0qOh3Lpe3AXxgVzEfWX98xqr0PR67tbWpswmAV1d8ZhCoAbwweaFAZtHp6RndfzxRYwC4sQCxCNFMcxHGCXMRwdiLsaR9EYWVE4uoNIk5J5I8FylhcluojM05gZAkq7HmWGSTJp1FttFxuaNJTO70HT7Y2U5R/ERbi89PpDABTFmIwbd+oRtmdHk2Ty9JEI9eGSZEKD5XrjlQGIEoa0XjCxInavPF2MXOEkvshAdteHChdhaCbfiulxsHk+OE+I5fzCnct5ldwjwF72cI3KR5puyFBEW+xayAYdhaAPfH5+Btsplr3T57ftjEQ77njOQnTkTzxPIk1iSKSz3DY8bPrT6+ZYEgnyff8PbeKVyQAEfXiWCI0GT5Lj+hYZ70ZHjoSdGfsYDiiCWOOPiuvCqMubAANj+uiS8q3K4aAIQ+f+ec1eKBgGuHOFAq3yGYFx0MBPptfgwwJBdEShYTsS5V0gkLGF2sxGmhvJYWeZxaTzz0KPWLlHS2mPFlSpyWXLrEyWQoZCr4+iW3TDczIc7bo81Tz9Izl/5lTLLzGeJKqmPeoixYXsPEyUrepVlnmo1O7TqEBr2WiZJt9k528leUZRyzzykH31wLDQMLB9+frUZshTARIiMVHhmlaFEqo6K1Mnr9Vtlp2uoYrbFLrBhxMbGwcVrLJS5e6+KL7i9dhMUkwBd/2YFUrtgkJGr9v9bgtEF+BrVRQlIy8jZJkeqoJImSS5EqTXr1NpfRFlvLlJV72XLK55FCbp7Sy5PfbiJpFz5x+luuzkvKbXsJebvq+4VNnLbLO9wPX9Fk2S87U6rUqOPS+BJ9Trvcf/phVbXM1Gv4MVOxWYvW79tvu+OnT8VBxw39+omfykP+xunPxagx4yZMxkA6Rk8VFralHPnwNberps2YNWfeQlQ3qNjhs2WUNGiU26Lb7rjbRZcwUTS54J673XM/RcpqzO5BOu5odtNpZ8yhi4djwKDL9vL7F+/Mhxdh+SXTE0+r5syJQp5VoFCRTBWOZNFWnpxWdOjsek9069HruRdeeuW1NxdgYf+Q3u/mQS5uHl6qHr36GjVmHF2x5cS69ej10qt+GTBoyHBEpmkW/EAAwoSiGZbj8YcffvnLPwPcFsEmDTlcHl9gu0ysMSUUiSUmtKnUTCZXmCvtqCzUlmxhvwfedH47n1Dmb0kbojq5jZbEqcmO9IRMss/HEknCRc6jiS8jaBkF5TynJRv3XFYSSUpI4pL8JiIs0u1hsUQLQ3ad9BqCdh4jkymsOUsyCcEY40eBrd6zpasmS7QTPEepzSzf1gLBOE+QIJ3n/Vax2CWH6X1DX2/fj8PxcHkLp6SkYdbDRcTxFwtYIpBU3AVJpSFo50VuyTrLQ1mEm75NX0vHenzu7Ca2y1cWrH0mtQ4Z7ukIZRQeWlUy8UCSkzU8GZdM0rawH0N0xaMeJ/1EEisEJJPOhJKzgml03CRtA0lkFViKGm/5g2SSrgzM0Z0N6VJZygusNnyN7K8rzg9weTPag+lZOAPfUySD3fhgSCkcOBWB5VcQEK/gIJGYTlwwCjKhWBAiztcLPtUzS4VWgAtTVti0HQpbBwrdspYJraCH/RhUFpaEpFYwUDvs7/shMdHbyEs9VkD/zvXyz1Fa5Br8hK8h1ujBX8mOrVfbKrE+POCsrHhaWVmtfOu0xi9+MkCbPQisFncP51NbgTzra6CynM6O2+q2fMWY8kyvgsOB36gelezRY4uQoIBZfbtfPj69OSzSUbdDG67rUY3FpkstRaCUgvepJqkPymn6nZnqstGK1zurrNFj0wbx/HlzRSc84q3Ur0L3+Yw967RdF+9kp/5S00e6RT/hStH8U9Fkvh0rgryvjh7LB9AVFAaxPr3pq8g31XC6NmqxWrs16Dr9W6GteYgqi4xE6HETO4gsGTT4AW9FBUyCI0s6HbBQrkmyHbXnu0mmNl+uSU4QzcaFNcoCyoXzzX6PV7wO2+3m31MKt8XD6W6PcuftMg1PymSUJ12WjPJkWiXjIsnUSa5JplVyBVbvLq6Owf9T42n7eX9e7jiybfKUtMlGt9wFFihsAwAKpE02ytmRgiMpQKp/SRVJUgAx2QG2Qg1Az7wcJiB5L+YJCDh1AHAdhWMrACiQwjU7AADAAQAFVgAAsANsBQA94DAByRuwN4Aip9igj2bZbMyO0/MzIzyzp5SesQgeT0PsaCRIVlLvFJbmw2U0vt0QBig9qSTqA3k7KrWtdZoc6xwJ1mx1JJtcf9VUzX8Ws8OiNdTlKYytdKZKnP5mx6KT5wVVnr+4q9nSaWC8AZk+g0njXHcNqynhXDaDuqHVpMd5esTcdLUMSf1crbtkg5u5vfi7FpZp24OhXGdLtaT/2coE5/10djZrSy+xb8HzwQU7usDb6DAfVuh532oimvqIgTYX1RY0ldPQXVCec/E8es4HlUOY8146jN4gPDlX/l7IoV7P2sHijOjHqr26anNJKvmq6T7CdDm71Izfz+Hv5/y/mfKziwE=) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'Inter';font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'IBM Plex Mono';font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'IBM Plex Mono';font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\\n@font-face{font-family:'IBM Plex Mono';font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\";\n","import { DW_HOST_FONTS_CSS, DW_HOST_THEME_CSS } from './generated/host-theme';\n\n/** Attribute on the one `<style>` the host theme lives in. */\nexport const DW_HOST_THEME_ATTR = 'data-dw-crystal-theme';\n\nexport interface CrystalHostThemeOptions {\n /** Embed the latin Inter / IBM Plex Mono faces. `false` when the host page already loads them. Default true. */\n fonts?: boolean;\n}\n\n/**\n * Themes a page crystal doesn't own: for components delivered as federated custom elements.\n * Prepends one `<style data-dw-crystal-theme>` ahead of the host's stylesheets (so the host wins equal-specificity\n * ties) holding the host-safe theme: tokens incl. dark, the element base, component CSS and utilities, no resets and\n * no html / body rules. Fonts are embedded, since relative URLs can't resolve from an injected `<style>`.\n *\n * Safe to call from every element: the first call installs, later ones do nothing.\n * Mark the custom-element hosts with the `dw-element` class so they get the theme font.\n *\n * ```ts\n * installCrystalHostTheme(); // in each element's bootstrap\n * installCrystalHostTheme({ fonts: false }); // the host loads Inter / IBM Plex Mono itself\n * ```\n */\nexport function installCrystalHostTheme({ fonts = true }: CrystalHostThemeOptions = {}): void {\n if (typeof document === 'undefined' || document.head.querySelector(`style[${DW_HOST_THEME_ATTR}]`)) {\n return;\n }\n const style = document.createElement('style');\n style.setAttribute(DW_HOST_THEME_ATTR, '');\n style.textContent = fonts ? `${DW_HOST_FONTS_CSS}\\n${DW_HOST_THEME_CSS}` : DW_HOST_THEME_CSS;\n document.head.prepend(style);\n}\n\n/** Removes the host theme again (e.g. a host that unloads crystal, or a test). */\nexport function removeCrystalHostTheme(): void {\n if (typeof document !== 'undefined') {\n document.head.querySelectorAll(`style[${DW_HOST_THEME_ATTR}]`).forEach((style) => style.remove());\n }\n}\n","/*\n * Public API of @dataworkz/crystal — the Dataworkz core UI (`dw-*`).\n * Spec + rollout tracker: docs/CORE-COMPONENTS.md. Other entry points: /icons, /tokens, /primeng, /markdown.\n */\nexport * from './lib/button/dw-button.component';\nexport * from './lib/icon-button/dw-icon-button.component';\nexport * from './lib/status-pill/dw-status.map';\nexport * from './lib/status-pill/dw-status-pill.component';\nexport * from './lib/badge/dw-badge.component';\nexport * from './lib/tag/dw-tag-colors';\nexport * from './lib/tag/dw-tag.component';\nexport * from './lib/tag/dw-tag-list.component';\nexport * from './lib/tag/dw-tag-color-picker.component';\nexport * from './lib/tag/dw-tag-color-button.component';\nexport * from './lib/chip/dw-chip.component';\nexport * from './lib/avatar/dw-avatar.component';\nexport * from './lib/entity-icon/dw-entity-icon.component';\nexport * from './lib/entity-icon/dw-icon-resolvers';\nexport * from './lib/loading/dw-spinner.component';\nexport * from './lib/loading/dw-skeleton.component';\nexport * from './lib/meter/dw-meter.component';\nexport * from './lib/check-toggle/dw-check-toggle.component';\nexport * from './lib/empty-state/dw-empty-state.component';\nexport * from './lib/banner/dw-banner.component';\nexport * from './lib/layout/dw-layout.directives';\nexport * from './lib/divider/dw-divider.component';\nexport * from './lib/resizer/dw-resizer.component';\nexport * from './lib/overlay-anchor.util';\nexport * from './lib/copy-button/dw-copy-button.component';\nexport { IdBlockComponent as DwIdBlockComponent } from './lib/id-block/id-block.component';\nexport * from './lib/field/dw-field-messages';\nexport * from './lib/field/dw-field.component';\nexport * from './lib/search-input/dw-search-input.component';\nexport * from './lib/file-dropzone/dw-file-dropzone.component';\nexport * from './lib/file-dropzone/dw-file-list.component';\nexport * from './lib/menu/dw-menu.component';\nexport * from './lib/card/dw-card.component';\nexport * from './lib/card/dw-toggle-card.component';\nexport * from './lib/tile/dw-tile.component';\nexport * from './lib/section/dw-section.component';\nexport * from './lib/tabs/dw-tabs.component';\nexport * from './lib/tabs/dw-rail-tabs.component';\nexport * from './lib/breadcrumb/dw-breadcrumb.component';\nexport * from './lib/page-header/dw-page-header.component';\nexport * from './lib/action-bar/dw-action-bar.component';\nexport * from './lib/nav-list/dw-nav-list.component';\nexport * from './lib/dialog/dw-dialog.component';\nexport * from './lib/confirm-dialog/dw-confirm-dialog.component';\nexport * from './lib/confirm-dialog/dw-confirm.service';\nexport * from './lib/drawer/dw-drawer.component';\nexport * from './lib/popover/dw-popover.component';\nexport * from './lib/toast/dw-toast.service';\nexport * from './lib/toast/dw-toast-host.component';\nexport * from './lib/tooltip/dw-tooltip-if-truncated.directive';\nexport * from './lib/table/dw-table.component';\nexport * from './lib/table/dw-column-picker.component';\nexport * from './lib/icon/dw-icon.component';\nexport * from './lib/icon/dw-icon-registry';\nexport * from './lib/timestamp/dw-clock.service';\nexport * from './lib/timestamp/dw-timestamp.component';\nexport * from './lib/theme/theme.service';\nexport * from './lib/theme/provide-crystal';\nexport * from './lib/theme/host-theme';\n\n// The glyph API, also here for convenience. Its home is @dataworkz/crystal/icons.\nexport { DW_ICON_NAMES, DW_ICON_PREFIX, dwIconName, icon } from '@dataworkz/crystal/icons';\nexport type { DwIconName, IconName } from '@dataworkz/crystal/icons';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","SEVERITY_ICONS","i2","i3","i4"],"mappings":"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"}