{"version":3,"file":"mn-angular-lib-display.mjs","sources":["../../../projects/mn-angular-lib/display/src/mn-card/mn-icon-chipVariants.ts","../../../projects/mn-angular-lib/display/src/mn-card/mn-icon-chip.ts","../../../projects/mn-angular-lib/display/src/mn-card/mn-icon-chip.html","../../../projects/mn-angular-lib/display/src/mn-card/mn-cardVariants.ts","../../../projects/mn-angular-lib/display/src/mn-card/mn-card.ts","../../../projects/mn-angular-lib/display/src/mn-card/mn-card.html","../../../projects/mn-angular-lib/display/src/mn-card/mn-stat-tile.ts","../../../projects/mn-angular-lib/display/src/mn-card/mn-stat-tile.html","../../../projects/mn-angular-lib/display/src/mn-card/mn-proportion-bar.ts","../../../projects/mn-angular-lib/display/src/mn-card/mn-proportion-bar.html","../../../projects/mn-angular-lib/display/src/mn-breadcrumbs/mn-breadcrumbsVariants.ts","../../../projects/mn-angular-lib/display/src/mn-breadcrumbs/mn-breadcrumbs.ts","../../../projects/mn-angular-lib/display/src/mn-breadcrumbs/mn-breadcrumbs.html","../../../projects/mn-angular-lib/display/src/mn-icon/mn-iconVariants.ts","../../../projects/mn-angular-lib/display/src/mn-icon/mn-icon-map.ts","../../../projects/mn-angular-lib/display/src/mn-icon/mn-icon.ts","../../../projects/mn-angular-lib/display/src/mn-icon/mn-icon.html","../../../projects/mn-angular-lib/display/src/mn-icon/mn-icon-attributes.directive.ts","../../../projects/mn-angular-lib/display/public-api.ts","../../../projects/mn-angular-lib/display/mn-angular-lib-display.ts"],"sourcesContent":["import { tv, type VariantProps } from 'tailwind-variants';\n\n/**\n * Styling for {@link MnIconChip}: one 10% wash of the colour behind an icon drawn in\n * the consumer's `--color-<colour>-text` token when it defines one (the shade it uses\n * for readable coloured text on a tinted ground) and in the base colour otherwise, the\n * same device `mnBadge` uses. The radius grows with the box so the corner reads the\n * same at every size.\n */\nexport const mnIconChipVariants = tv({\n  base: 'inline-flex shrink-0 items-center justify-center',\n  variants: {\n    /**\n     * `xs` for compact rows and inline labels, `sm` for list rows, `md` for section-card headers\n     * and stat tiles, `lg` for page headers, `xl` for a lone hero or empty-state icon.\n     */\n    size: {\n      xs: 'h-8 w-8 rounded-lg',\n      sm: 'h-9 w-9 rounded-lg',\n      md: 'h-10 w-10 rounded-xl',\n      lg: 'h-12 w-12 rounded-2xl',\n      xl: 'h-14 w-14 rounded-2xl',\n    },\n    color: {\n      primary: 'bg-primary/10 text-(--color-primary-text,var(--color-primary))',\n      secondary: 'bg-secondary/10 text-(--color-secondary-text,var(--color-secondary))',\n      accent: 'bg-accent/10 text-(--color-accent-text,var(--color-accent))',\n      success: 'bg-success/10 text-(--color-success-text,var(--color-success))',\n      warning: 'bg-warning/10 text-(--color-warning-text,var(--color-warning))',\n      danger: 'bg-error/10 text-(--color-error-text,var(--color-error))',\n      gray: 'bg-base-content/10 text-base-content/70',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n    color: 'primary',\n  },\n});\n\nexport type MnIconChipVariants = VariantProps<typeof mnIconChipVariants>;\n","import { Component, HostBinding, Input } from '@angular/core';\nimport { MnIconChipTypes } from './mn-icon-chipTypes';\nimport { mnIconChipVariants } from './mn-icon-chipVariants';\n\n/**\n * The tinted square that carries an icon in front of a card title, a stat or a list\n * row: the one place a colour says \"what kind of thing this is\". Project the icon as\n * content; the chip sizes and tints itself and never grows with the row.\n *\n * Decorative for assistive technology: the title or label beside it carries the\n * meaning, so the chip is `aria-hidden` and a screen reader never meets a bare icon.\n *\n * ```html\n * <mn-icon-chip [data]=\"{ color: 'success', size: 'md' }\">\n *   <svg lucideCheck [size]=\"20\"></svg>\n * </mn-icon-chip>\n * ```\n */\n@Component({\n  selector: 'mn-icon-chip',\n  standalone: true,\n  templateUrl: './mn-icon-chip.html',\n  host: { 'aria-hidden': 'true' },\n})\nexport class MnIconChip {\n  /** Size and colour; see {@link MnIconChipTypes}. */\n  @Input() data: Partial<MnIconChipTypes> = {};\n\n  /** The chip's own classes; the consumer's static classes merge with them. */\n  @HostBinding('class')\n  get hostClasses(): string {\n    return mnIconChipVariants({\n      size: this.data.size,\n      color: this.data.color,\n    });\n  }\n}\n","<ng-content></ng-content>\n","import { tv, type VariantProps } from 'tailwind-variants';\n\n/**\n * Styling for {@link MnCard}, as tailwind-variants slots: `root` is the card element\n * itself, `accent` the optional bar along its top edge, `header` the heading row and\n * `title` the `h2` inside it.\n *\n * Theme tokens only, so the card holds up in light and dark. The surface reads the\n * consumer's `--color-base-card` when it defines one (a card ground a step off the\n * page background) and falls back to `base-100` otherwise, the same fallback device\n * `mnBadge` uses for its `-text` tokens.\n */\nexport const mnCardVariants = tv({\n  slots: {\n    root:\n      'relative flex overflow-hidden border border-base-300 ' +\n      'bg-(--color-base-card,var(--color-base-100)) transition-all duration-200 motion-reduce:transition-none',\n    accent: 'absolute inset-x-0 top-0 h-1',\n    header: 'flex flex-wrap items-center gap-3',\n    title: 'text-lg font-semibold text-base-content',\n  },\n  variants: {\n    /**\n     * Inner padding, and with it the gap between the card's children: a tile needs\n     * less air than a section card, and a section card that had to say `gap-4` on\n     * every use would drift.\n     */\n    padding: {\n      sm: { root: 'p-4 gap-3' },\n      md: { root: 'p-5 gap-4' },\n      lg: { root: 'p-6 gap-5' },\n    },\n    /** How the children flow: stacked (the default) or on one line, centred. */\n    layout: {\n      column: { root: 'flex-col' },\n      row: { root: 'flex-row items-center' },\n    },\n    /**\n     * Hover response. `shadow` is a little depth for a card that only sits there;\n     * `lift` promises a destination and belongs on a card that is a link.\n     */\n    hover: {\n      none: {},\n      shadow: { root: 'hover:shadow-md' },\n      lift: { root: 'hover:-translate-y-1 hover:shadow-lg' },\n    },\n    /**\n     * Entrance. `rise` plays the consumer's `--animate-rise` keyframes when its theme\n     * defines them (a short rise-in, delayed per card through\n     * {@link MnCard.enterDelayMs}) and is a no-op otherwise; reduced-motion users\n     * never see it.\n     */\n    enter: {\n      none: {},\n      rise: { root: 'animate-rise motion-reduce:animate-none' },\n    },\n    /** Corner rounding, in mn-button's radius tokens. */\n    borderRadius: {\n      none: { root: 'rounded-none' },\n      xs: { root: 'rounded-xs' },\n      sm: { root: 'rounded-sm' },\n      md: { root: 'rounded-md' },\n      lg: { root: 'rounded-lg' },\n      xl: { root: 'rounded-xl' },\n      two_xl: { root: 'rounded-2xl' },\n      three_xl: { root: 'rounded-3xl' },\n      four_xl: { root: 'rounded-4xl' },\n    },\n    /**\n     * Colour of the accent bar and of the heading's icon chip: the same palette as\n     * mn-button and the icon chip. What the colour *means* (a kind, a status, a\n     * module) is the consumer's choice; the card only renders it.\n     */\n    color: {\n      primary: { accent: 'bg-primary' },\n      secondary: { accent: 'bg-secondary' },\n      accent: { accent: 'bg-accent' },\n      success: { accent: 'bg-success' },\n      warning: { accent: 'bg-warning' },\n      danger: { accent: 'bg-error' },\n      gray: { accent: 'bg-base-content/30' },\n    },\n  },\n  defaultVariants: {\n    padding: 'sm',\n    layout: 'column',\n    hover: 'shadow',\n    enter: 'rise',\n    borderRadius: 'two_xl',\n    color: 'primary',\n  },\n});\n\nexport type MnCardVariants = VariantProps<typeof mnCardVariants>;\n","import { Component, HostBinding, Input } from '@angular/core';\nimport { MnTranslatePipe } from 'mn-angular-lib/core';\nimport { MnIconChip } from './mn-icon-chip';\nimport { MnCardTypes } from './mn-cardTypes';\nimport { mnCardVariants } from './mn-cardVariants';\n\n/**\n * The card: a rounded surface with a hairline border, a hover response and an\n * optional accent bar along its top edge. The body is whatever the consumer projects,\n * so a booking, a competition and a pending-action tile share one look without\n * sharing a view model.\n *\n * It is an attribute as well as an element, like `mnButton` and `mnBadge`: `<mn-card>`\n * for a plain surface, `<a mnCard [routerLink]>` for a card that is a link,\n * `<section mnCard>` when the landmark matters. Extra classes on the host merge with\n * the card's own, so sizing it (`min-w-0 flex-1`, `lg:w-80`) is ordinary CSS on the\n * element, not an input.\n *\n * A **section card** passes a {@link heading}: the card then renders the shared header\n * row, an {@link MnIconChip} beside an `h2`, then whatever trails the title (a badge, a\n * button). Project the icon with the `cardIcon` attribute and group the trailing content\n * in one `cardHeaderEnd` container, so the template reads icon, header end, body:\n *\n * ```html\n * <mn-card [data]=\"{ padding: 'md', color: 'primary' }\" heading=\"meetings.agenda.title\">\n *   <svg cardIcon lucideListOrdered [size]=\"20\"></svg>\n *   <ng-container cardHeaderEnd>\n *     <span mnBadge [data]=\"{ size: 'sm', color: 'warning' }\">Draft</span>\n *   </ng-container>\n *   ...body...\n * </mn-card>\n * ```\n *\n * The other members of the family build on this shell: {@link MnStatTile} for one\n * figure at a glance, and {@link MnProportionBar} for the bar inside a card.\n */\n@Component({\n  selector: 'mn-card, [mnCard]',\n  standalone: true,\n  imports: [MnIconChip, MnTranslatePipe],\n  templateUrl: './mn-card.html',\n})\nexport class MnCard {\n  /** Padding, layout, hover, entrance, radius, colour and accent; see {@link MnCardTypes}. */\n  @Input() data: Partial<MnCardTypes> = {};\n\n  /**\n   * Section title, as a translation key or a literal. When set, the header row with\n   * the icon chip and `h2` renders above the body. Deliberately not called `title`: a\n   * static `title=\"...\"` on the host would also become a browser tooltip.\n   */\n  @Input() heading?: string;\n\n  /**\n   * Delay before the entrance animation starts, in milliseconds, so a row of cards\n   * can rise one after another. Ignored when {@link MnCardTypes.enter} is `none`.\n   */\n  @Input() enterDelayMs = 0;\n\n  /** Resolved slot classes for the current configuration. */\n  get styles() {\n    return mnCardVariants({\n      padding: this.data.padding,\n      layout: this.data.layout,\n      hover: this.data.hover,\n      enter: this.data.enter,\n      borderRadius: this.data.borderRadius,\n      color: this.data.color,\n    });\n  }\n\n  /** The card element's own classes; the consumer's static classes merge with them. */\n  @HostBinding('class')\n  get hostClasses(): string {\n    return this.styles.root();\n  }\n\n  /** Staggers the entrance per card. */\n  @HostBinding('style.animation-delay')\n  get animationDelay(): string {\n    return `${this.enterDelayMs}ms`;\n  }\n}\n","<!-- The accent bar sits on the card's top edge, clipped by the host's overflow-hidden\n     into the corner radius. Decorative: the colour's meaning is in the content. -->\n@if (data.accent) {\n  <span [class]=\"styles.accent()\" aria-hidden=\"true\"></span>\n}\n<!-- The section header: chip, title, then whatever the consumer marks cardHeaderEnd.\n     Wraps on narrow screens so a full-width button drops under the title. -->\n@if (heading; as text) {\n  <div [class]=\"styles.header()\">\n    <mn-icon-chip [data]=\"{ color: data.color }\">\n      <ng-content select=\"[cardIcon]\"></ng-content>\n    </mn-icon-chip>\n    <h2 [class]=\"styles.title()\">{{ text | mnTranslate }}</h2>\n    <ng-content select=\"[cardHeaderEnd]\"></ng-content>\n  </div>\n}\n<ng-content></ng-content>\n","import { Component, HostBinding, Input } from '@angular/core';\nimport { MnTranslatePipe } from 'mn-angular-lib/core';\nimport { MnCard } from './mn-card';\nimport { MnIconChip } from './mn-icon-chip';\nimport { MnIconChipVariants } from './mn-icon-chipVariants';\n\n/** Configuration of one {@link MnStatTile}. */\nexport type MnStatTileTypes = {\n  /** Colour of the chip; the number itself stays in the base text colour. Defaults to `primary`. */\n  color: MnIconChipVariants['color'];\n};\n\n/**\n * One fact at a glance: a tinted icon chip, a muted label and a large tabular number,\n * on the {@link MnCard} shell, in a tile that shares a row with its siblings as\n * `flex-1`. Project the icon as content; project a badge or a short note into the\n * `trailing` slot when the number needs a qualifier.\n *\n * ```html\n * <div class=\"flex flex-wrap gap-4\">\n *   <mn-stat-tile label=\"meetings.attending\" [value]=\"yesCount\" [data]=\"{ color: 'success' }\">\n *     <svg lucideCheck [size]=\"20\"></svg>\n *   </mn-stat-tile>\n * </div>\n * ```\n */\n@Component({\n  selector: 'mn-stat-tile',\n  standalone: true,\n  imports: [MnCard, MnIconChip, MnTranslatePipe],\n  templateUrl: './mn-stat-tile.html',\n})\nexport class MnStatTile {\n  /** Caption under the number, as a translation key or a literal. */\n  @Input({ required: true }) label!: string;\n\n  /** The figure, already formatted for display. */\n  @Input({ required: true }) value!: string | number;\n\n  /** Colour of the chip; see {@link MnStatTileTypes}. */\n  @Input() data: Partial<MnStatTileTypes> = {};\n\n  /** Grows to share its row and never forces the row wider than its siblings. */\n  @HostBinding('class')\n  readonly hostClasses = 'flex flex-1 basis-40 min-w-0';\n}\n","<!-- The card is a row: chip, then label over number. The muted label reads the\n     consumer's muted-text token when it has one and plain base text otherwise. -->\n<div mnCard class=\"w-full\" [data]=\"{ layout: 'row' }\">\n  <mn-icon-chip [data]=\"{ color: data.color }\">\n    <ng-content></ng-content>\n  </mn-icon-chip>\n  <div class=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n    <span class=\"text-sm text-(--color-base-content-muted,var(--color-base-content))\">{{ label | mnTranslate }}</span>\n    <div class=\"flex flex-wrap items-baseline gap-2\">\n      <span class=\"text-2xl font-bold leading-none tabular-nums text-base-content\">{{ value }}</span>\n      <ng-content select=\"[trailing]\"></ng-content>\n    </div>\n  </div>\n</div>\n","import { Component, inject, Input } from '@angular/core';\nimport { MnLanguageService } from 'mn-angular-lib/core';\nimport { MnProportionBarTypes, MnProportionSegment } from './mn-proportion-barTypes';\n\n/** Fill class per colour, spelled out so Tailwind's scanner finds every one. */\nconst SEGMENT_CLASS: Record<MnProportionSegment['color'], string> = {\n  primary: 'bg-primary',\n  secondary: 'bg-secondary',\n  accent: 'bg-accent',\n  success: 'bg-success',\n  warning: 'bg-warning',\n  danger: 'bg-error',\n  gray: 'bg-base-content/25',\n};\n\n/** Tinted fill class per colour for a `soft` segment, spelled out for the same reason. */\nconst SOFT_SEGMENT_CLASS: Record<MnProportionSegment['color'], string> = {\n  primary: 'bg-primary/30',\n  secondary: 'bg-secondary/30',\n  accent: 'bg-accent/30',\n  success: 'bg-success/30',\n  warning: 'bg-warning/30',\n  danger: 'bg-error/30',\n  gray: 'bg-base-content/15',\n};\n\n/** Track height per size. */\nconst HEIGHT_CLASS: Record<MnProportionBarTypes['height'], string> = {\n  sm: 'h-2',\n  md: 'h-2.5',\n};\n\n/** A segment resolved to a rendered width. */\nexport type MnRenderedProportionSegment = {\n  /** Percentage of the track this run covers. */\n  widthPct: number;\n  /** Fill class for the run. */\n  fillClass: string;\n};\n\n/**\n * The proportional bar every turnout, budget, capacity and collection figure draws:\n * a rounded track with one coloured run per segment, widths from the values. Empty\n * segments are skipped so a zero never leaves a hairline. Announced as one image with\n * the caller's label, because the numbers it visualises are always written out next\n * to it.\n *\n * ```html\n * <mn-proportion-bar\n *   [segments]=\"[{ value: yes, color: 'success' }, { value: maybe, color: 'warning' }]\"\n *   [total]=\"invited\"\n *   ariaLabel=\"meetings.responses.title\">\n * </mn-proportion-bar>\n * ```\n */\n@Component({\n  selector: 'mn-proportion-bar',\n  standalone: true,\n  templateUrl: './mn-proportion-bar.html',\n})\nexport class MnProportionBar {\n  /** The coloured runs, in draw order from the left. */\n  @Input({ required: true }) segments!: MnProportionSegment[];\n\n  /** The whole the segments are measured against; defaults to their sum. */\n  @Input() total?: number | null;\n\n  /** Accessible name for the bar as a whole, as a translation key or a literal. */\n  @Input({ required: true }) ariaLabel!: string;\n\n  /** Track thickness; see {@link MnProportionBarTypes}. */\n  @Input() data: Partial<MnProportionBarTypes> = {};\n\n  /** Resolves the accessible name against the app's bundle. */\n  private readonly lang = inject(MnLanguageService);\n\n  /** The translated accessible name. */\n  get label(): string {\n    return this.lang.translate(this.ariaLabel);\n  }\n\n  /** Every class on the track element. */\n  get trackClass(): string {\n    return `flex w-full overflow-hidden rounded-full bg-base-content/10 ${HEIGHT_CLASS[this.data.height ?? 'md']}`;\n  }\n\n  /** The denominator actually used: the explicit total when positive, else the segment sum. */\n  private get denominator(): number {\n    const explicit = this.total;\n    if (explicit !== null && explicit !== undefined && explicit > 0) return explicit;\n    return this.segments.reduce((sum, segment) => sum + Math.max(0, segment.value), 0);\n  }\n\n  /** Segments with a width, empty ones dropped. */\n  get rendered(): MnRenderedProportionSegment[] {\n    const denominator = this.denominator;\n    if (denominator <= 0) return [];\n    return this.segments\n      .filter((segment) => segment.value > 0)\n      .map((segment) => ({\n        widthPct: Math.min(100, (segment.value / denominator) * 100),\n        fillClass: (segment.soft ? SOFT_SEGMENT_CLASS : SEGMENT_CLASS)[segment.color],\n      }));\n  }\n}\n","<!-- One labelled image: the runs are decoration, the numbers live in the caller's text. -->\n<div role=\"img\" [attr.aria-label]=\"label\" [class]=\"trackClass\">\n  @for (segment of rendered; track $index) {\n    <span\n      class=\"h-full transition-[width] duration-300 ease-out motion-reduce:transition-none\"\n      [class]=\"segment.fillClass\"\n      [style.width.%]=\"segment.widthPct\"\n    ></span>\n  }\n</div>\n","import { tv, type VariantProps } from 'tailwind-variants';\n\n/**\n * Styling for {@link MnBreadcrumbs}, expressed as tailwind-variants slots so the\n * template can pull one class string per role. Theme tokens only, so the trail\n * reads correctly in both light and dark. Links and the Back control are native\n * `<button>`/`<a>` elements reset to look like plain text with a hover accent.\n *\n * A crumb carries vertical padding that the list takes back with a negative\n * margin, so the row keeps the height it always had while each crumb is a\n * target you can hit rather than the bare height of its text. The collapsed\n * control replaces the trail on a phone, where it is the only way up, so it\n * takes a full 44px.\n */\nexport const mnBreadcrumbsVariants = tv({\n  slots: {\n    root: 'flex items-center',\n    list: 'flex flex-wrap items-center -my-1.5',\n    link:\n      'inline-flex items-center bg-transparent border-0 px-1 -mx-1 py-1.5 rounded-md cursor-pointer ' +\n      'text-base-content/60 hover:text-primary transition-colors ' +\n      'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',\n    current: 'inline-flex items-center py-1.5 font-semibold text-base-content',\n    separator: 'inline-flex shrink-0 text-base-content/40',\n    back:\n      'inline-flex items-center gap-1 bg-transparent border-0 p-0 rounded-md cursor-pointer ' +\n      'text-base-content/70 hover:text-primary transition-colors ' +\n      'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',\n    collapsed:\n      'inline-flex min-h-11 items-center gap-1 bg-transparent border-0 px-1 -mx-1 rounded-md cursor-pointer ' +\n      'text-base-content/70 hover:text-primary transition-colors sm:hidden ' +\n      'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',\n  },\n  variants: {\n    size: {\n      // Text size lives on the root so every crumb, separator and the Back\n      // control inherit it; only the inter-crumb gap changes per slot.\n      sm: { root: 'text-xs', list: 'gap-1' },\n      md: { root: 'text-sm', list: 'gap-1.5' },\n    },\n    /** Whether the parent crumb takes the trail's place below `sm`. */\n    collapsible: {\n      true: { list: 'hidden sm:flex' },\n      false: {},\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n    collapsible: false,\n  },\n});\n\nexport type MnBreadcrumbsVariants = VariantProps<typeof mnBreadcrumbsVariants>;\n","import {\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  Output,\n} from '@angular/core';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport { MnLanguageService, MnTranslatePipe } from 'mn-angular-lib/core';\nimport { MnBreadcrumbItem, MnBreadcrumbsData } from './mn-breadcrumbsTypes';\nimport { mnBreadcrumbsVariants } from './mn-breadcrumbsVariants';\nimport * as lucide from 'lucide';\nimport { lucideIcons } from 'mn-angular-lib/core';\n\n/** Lucide icons this file renders. */\nconst ICONS = lucideIcons({ ChevronLeft: lucide.ChevronLeft, ChevronRight: lucide.ChevronRight });\n\n/**\n * A flexible breadcrumb trail.\n *\n * Given crumbs it renders a linkable trail (`root › … › current`) where the last\n * crumb is the current page and is never a link. Given no crumbs it degrades to\n * a single \"Back\" control — the two are mutually exclusive.\n *\n * The one thing a width decides is how much of the trail shows: below `sm` the\n * crumbs give way to the parent crumb alone, drawn as a back control, unless\n * `data.collapse` is `'never'`. That measures nothing — both renderings sit in\n * the DOM and a Tailwind breakpoint hides one — and there is deliberately no\n * scroll machinery: on a phone a hierarchy is a way up rather than a map, and a\n * trail that scrolls sideways buries the one link anybody reaches for.\n *\n * Navigation stays router- and history-agnostic where possible: a crumb (or the\n * Back control) with an `href` renders a plain `<a>` and navigates natively;\n * otherwise clicks emit outputs for the app to handle. Only the Back fallback\n * with no `href` reaches for `history.back()`.\n */\n@Component({\n  selector: 'mn-breadcrumbs',\n  standalone: true,\n  imports: [MnTranslatePipe, LucideDynamicIcon],\n  templateUrl: './mn-breadcrumbs.html',\n})\nexport class MnBreadcrumbs {\n  /** Lucide icons the template renders. */\n  protected readonly icons = ICONS;\n\n  /** Trail crumbs and Back-fallback configuration. */\n  @Input() data: MnBreadcrumbsData = { items: [] };\n\n  /** Emits the crumb that was clicked (non-current crumbs only). */\n  @Output() crumbClick = new EventEmitter<MnBreadcrumbItem>();\n\n  /** Emits when the fallback \"Back\" control is activated. */\n  @Output() back = new EventEmitter<void>();\n\n  /** Conventional key an app defines to translate the Back control's label. */\n  private static readonly BACK_LABEL_KEY = 'mnBreadcrumbs.back';\n  /** Conventional key an app defines to name the navigation landmark. */\n  private static readonly NAV_LABEL_KEY = 'mnBreadcrumbs.label';\n  /** Resolves this component's own labels against the app's bundle. */\n  private readonly lang = inject(MnLanguageService);\n\n  /** Resolved tailwind-variants slot functions for the current size. */\n  get styles() {\n    return mnBreadcrumbsVariants({ size: this.data.size, collapsible: this.collapsesToParent });\n  }\n\n  /** Whether the parent crumb replaces the trail below `sm`. */\n  get collapsesToParent(): boolean {\n    return this.data.collapse !== 'never' && (this.data.items?.length ?? 0) > 1;\n  }\n\n  /**\n   * The crumb one level above the current page, or `null` when the trail stays\n   * whole: a single crumb has nowhere to go up to, and `'never'` asks for every\n   * crumb at every width.\n   */\n  get parentCrumb(): MnBreadcrumbItem | null {\n    if (!this.collapsesToParent) {\n      return null;\n    }\n    return this.data.items[this.data.items.length - 2];\n  }\n\n  /**\n   * Accessible name of the `<nav>` landmark.\n   *\n   * A landmark's name is announced verbatim, so leaving it as a hardcoded English\n   * \"Breadcrumb\" put one English word into every page of a translated app — in the\n   * one place only screen-reader users hear.\n   */\n  get navLabel(): string {\n    return this.lang.translateIfPresent(MnBreadcrumbs.NAV_LABEL_KEY) ?? 'Breadcrumb';\n  }\n\n  /** Whether a linkable trail should render (vs the Back fallback). */\n  get hasTrail(): boolean {\n    return (this.data.items?.length ?? 0) > 0;\n  }\n\n  /**\n   * Text of the Back control, already translated.\n   *\n   * `data.backLabel` is a key (or a literal, which `translate` passes through\n   * unchanged). Without one this falls back to the conventional key and then to\n   * English — never to a raw key: the old default was the bare key `'back'`, which\n   * the template's translate pipe echoed as lowercase \"back\" in every app that had\n   * not happened to define it.\n   */\n  get backLabel(): string {\n    if (this.data.backLabel) {\n      return this.lang.translate(this.data.backLabel);\n    }\n    return this.lang.translateIfPresent(MnBreadcrumbs.BACK_LABEL_KEY) ?? 'Back';\n  }\n\n  /** The last crumb is the current page and is rendered as plain text. */\n  isCurrent(index: number): boolean {\n    return index === this.data.items.length - 1;\n  }\n\n  /** Runs a crumb's own callback and notifies listeners of the click. */\n  onCrumb(item: MnBreadcrumbItem): void {\n    item.onClick?.();\n    this.crumbClick.emit(item);\n  }\n\n  /**\n   * Fallback Back action. Always emits `back` for listeners; when no `backHref`\n   * anchor is carrying the navigation, steps back through browser history.\n   */\n  onBack(): void {\n    this.back.emit();\n    if (!this.data.backHref) {\n      window.history.back();\n    }\n  }\n}\n","<nav [attr.aria-label]=\"navLabel\" [class]=\"styles.root()\">\n  @if (hasTrail) {\n    <ol [class]=\"styles.list()\">\n      @for (item of data.items; track $index; let first = $first) {\n        @if (!first) {\n          <li aria-hidden=\"true\" [class]=\"styles.separator()\">\n            <svg [size]=\"14\" [lucideIcon]=\"icons.ChevronRight\"></svg>\n          </li>\n        }\n        <li class=\"inline-flex items-center\">\n          @if (isCurrent($index)) {\n            <span aria-current=\"page\" [class]=\"styles.current()\">{{ item.label | mnTranslate }}</span>\n          } @else if (item.href) {\n            <a [attr.href]=\"item.href\" [class]=\"styles.link()\" (click)=\"onCrumb(item)\">{{ item.label | mnTranslate }}</a>\n          } @else {\n            <button type=\"button\" [class]=\"styles.link()\" (click)=\"onCrumb(item)\">{{ item.label | mnTranslate }}</button>\n          }\n        </li>\n      }\n    </ol>\n    <!--\n      Below `sm` the trail above is hidden and this takes its place: the parent\n      crumb as a back control. Both sit in the DOM and CSS decides which one is\n      there for the reader, so nothing has to measure a width.\n    -->\n    @if (parentCrumb; as parent) {\n      @if (parent.href) {\n        <a [attr.href]=\"parent.href\" [class]=\"styles.collapsed()\" (click)=\"onCrumb(parent)\">\n          <svg [size]=\"16\" [lucideIcon]=\"icons.ChevronLeft\"></svg>\n          {{ parent.label | mnTranslate }}\n        </a>\n      } @else {\n        <button type=\"button\" [class]=\"styles.collapsed()\" (click)=\"onCrumb(parent)\">\n          <svg [size]=\"16\" [lucideIcon]=\"icons.ChevronLeft\"></svg>\n          {{ parent.label | mnTranslate }}\n        </button>\n      }\n    }\n  } @else if (data.backHref) {\n    <a [attr.href]=\"data.backHref\" [class]=\"styles.back()\" (click)=\"onBack()\">\n      <svg [size]=\"16\" [lucideIcon]=\"icons.ChevronLeft\"></svg>\n      {{ backLabel }}\n    </a>\n  } @else {\n    <button type=\"button\" [class]=\"styles.back()\" (click)=\"onBack()\">\n      <svg [size]=\"16\" [lucideIcon]=\"icons.ChevronLeft\"></svg>\n      {{ backLabel }}\n    </button>\n  }\n</nav>\n","import { tv, type VariantProps } from 'tailwind-variants';\n\nexport const mnIconVariants = tv({\n  base: 'inline-flex shrink-0',\n  variants: {\n    color: {\n      current: 'text-current',\n      primary: 'text-primary',\n      secondary: 'text-secondary',\n      danger: 'text-error',\n      warning: 'text-warning',\n      success: 'text-success',\n      accent: 'text-accent',\n    },\n  },\n\n  defaultVariants: {\n    color: 'current',\n  },\n});\n\nexport type MnIconVariants = VariantProps<typeof mnIconVariants>;\n","// Custom SVGs that are NOT available in lucide (https://lucide.dev).\n// For any lucide icon, render lucide icon data instead — e.g.\n// `<svg [lucideIcon]=\"icons.X\" [size]=\"18\"></svg>` with `lucideIcons()` — rather than adding it here.\n// Sourced from the .svg files in the ./icons/ directory.\nconst pistolSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8.72 14.56 9 10h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v4c2.5 0 1 4 1 4-4 6-1 6-1 6h3.38a1 1 0 0 0 .89-.55za1 1 0 0 1 .9-.56H13a2 2 0 0 0 2-2v-1a1 1 0 0 1 1-1\" /></svg>`;\n\nexport const MN_ICON_MAP: Record<string, string> = {\n  pistol: pistolSvg,\n};\n","import {\n  Component,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  inject,\n  ElementRef,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MnIconTypes } from './mn-iconTypes';\nimport { mnIconVariants } from './mn-iconVariants';\nimport { MN_ICON_MAP } from './mn-icon-map';\n\n@Component({\n  selector: 'mn-icon',\n  standalone: true,\n  templateUrl: './mn-icon.html',\n})\nexport class MnIcon implements OnChanges, OnInit {\n  @Input() data: Partial<MnIconTypes> = {};\n\n  private sanitizer = inject(DomSanitizer);\n  private el = inject(ElementRef);\n\n  svgContent: SafeHtml = '';\n\n  get iconSize(): number {\n    return this.data.size ?? 24;\n  }\n\n  @HostBinding('class')\n  get hostClasses(): string {\n    return mnIconVariants({\n      color: this.data.color,\n    });\n  }\n\n  private resolvedName: string | null = null;\n\n  ngOnInit(): void {\n    const attrs = this.el.nativeElement.attributes;\n    for (const item of Array.from<Attr>(attrs)) {\n      const attr = item.name.toLowerCase();\n      if (attr.startsWith('mnicon')) {\n        const iconKey = attr.slice('mnicon'.length);\n        for (const key of Object.keys(MN_ICON_MAP)) {\n          if (key.toLowerCase() === iconKey) {\n            this.resolvedName = key;\n            break;\n          }\n        }\n        if (this.resolvedName) break;\n      }\n    }\n    this.updateContent();\n  }\n\n  ngOnChanges(): void {\n    this.updateContent();\n  }\n\n  private updateContent(): void {\n    const name = this.data.name ?? this.resolvedName;\n    if (name) {\n      const raw = MN_ICON_MAP[name];\n      if (raw) {\n        const size = this.iconSize;\n        const isFullSvg = raw.trim().startsWith('<svg');\n        if (isFullSvg) {\n          const sized = raw.replace(/<svg([^>]*)>/, (_match: string, attrs: string) => {\n            let updated = attrs.replace(/width=\"[^\"]*\"/, `width=\"${size}\"`);\n            updated = updated.replace(/height=\"[^\"]*\"/, `height=\"${size}\"`);\n            if (!attrs.includes('width=')) updated += ` width=\"${size}\"`;\n            if (!attrs.includes('height=')) updated += ` height=\"${size}\"`;\n            return `<svg${updated}>`;\n          });\n          this.svgContent = this.sanitizer.bypassSecurityTrustHtml(sized);\n        } else {\n          const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${raw}</svg>`;\n          this.svgContent = this.sanitizer.bypassSecurityTrustHtml(svg);\n        }\n      } else {\n        this.svgContent = '';\n      }\n    } else {\n      this.svgContent = '';\n    }\n  }\n}\n","<span\n  [style.width.px]=\"iconSize\"\n  [style.height.px]=\"iconSize\"\n  style=\"display: inline-flex; align-items: center; justify-content: center;\"\n  [innerHTML]=\"svgContent\"\n></span>\n","import { Directive } from '@angular/core';\n\n// AUTO-GENERATED — do not edit manually.\n// Run `npm run generate:icons` to regenerate after modifying MN_ICON_MAP.\n@Directive({\n  selector: 'mn-icon[mnIconPistol]',\n  standalone: true,\n})\nexport class MnIconAttributes {}\n","/**\n * Public API of the `mn-angular-lib/display` entry point: display components (card, breadcrumbs, icon).\n *\n * Each entry point is its own module in the published package, so a consumer's bundler\n * splits it into the chunk that uses it instead of loading the whole library at startup.\n * The root `mn-angular-lib` entry re-exports every entry point.\n */\nexport * from './src/mn-card';\nexport * from './src/mn-breadcrumbs';\nexport * from './src/mn-icon';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}