{"version":3,"file":"forty-cdk-tabs.mjs","sources":["../../../projects/forty-cdk/tabs/src/tabs-context.ts","../../../projects/forty-cdk/tabs/src/tabs-defaults.ts","../../../projects/forty-cdk/tabs/src/tabs.ts","../../../projects/forty-cdk/tabs/src/tabs-list.ts","../../../projects/forty-cdk/tabs/src/tabs-trigger.ts","../../../projects/forty-cdk/tabs/src/tabs-content.ts","../../../projects/forty-cdk/tabs/src/forty-cdk-tabs.ts"],"sourcesContent":["import { inject, InjectionToken, type Signal } from '@angular/core';\n\nimport {\n  assertRootContext,\n  type ListNavigationAction,\n  orphanContextError,\n  type RovingTabindex,\n  type WritingDirection,\n} from 'forty-cdk/core';\n\nexport type TabsActivationMode = 'automatic' | 'manual';\n\n/**\n * Registry entry for one `ForTabsTrigger`. Part of the registration protocol,\n * so it is never exported from `public-api.ts` — see {@link TabsContext}.\n */\nexport interface ForTabsTriggerHandle {\n  readonly host: HTMLElement;\n  readonly id: Signal<string>;\n  readonly value: Signal<string>;\n  readonly disabled: Signal<boolean>;\n}\n\n/**\n * Registry entry for one `ForTabsContent`. Part of the registration protocol,\n * so it is never exported from `public-api.ts` — see {@link TabsContext}.\n */\nexport interface ForTabsContentHandle {\n  readonly host: HTMLElement;\n  readonly id: Signal<string>;\n  readonly value: Signal<string>;\n}\n\n/**\n * Coordination contract owned by `ForTabs`. Triggers and contents register\n * with the root so each side can look up its pair (for `aria-controls` and\n * `aria-labelledby` wiring), and the root drives keyboard navigation.\n */\nexport interface ForTabsContext {\n  readonly value: Signal<string | null>;\n  readonly disabled: Signal<boolean>;\n  readonly orientation: Signal<'horizontal' | 'vertical'>;\n  readonly dir: Signal<WritingDirection>;\n  readonly activationMode: Signal<TabsActivationMode>;\n  readonly roving: RovingTabindex;\n\n  isSelected(value: string): boolean;\n  /** Selects `value` if the tabs widget is interactive. */\n  select(value: string): void;\n  /** Moves focus from `currentTrigger`. In automatic mode also selects the new tab. */\n  navigate(currentTrigger: HTMLElement, action: ListNavigationAction): void;\n\n  /**\n   * Looks up the trigger id for a given tab value. Reactive.\n   *\n   * Triggers and contents register synchronously in their constructors, so the\n   * pairing resolves during the first change-detection pass — including a real\n   * server render, where `afterNextRender` never fires and a deferred\n   * registration would leave the pre-hydration DOM without its\n   * `aria-labelledby` / `aria-controls` linkage. A handle whose `value` binding\n   * has not been written yet reads the `unsetInput` sentinel and is skipped —\n   * it can never pair with a lookup value — and the tracked dependency re-runs\n   * the lookup once that binding lands.\n   */\n  triggerIdFor(value: string): string | null;\n  /**\n   * Looks up the content id for a given tab value. Reactive. Same\n   * synchronous-registration and not-yet-bound handling as\n   * {@link triggerIdFor}.\n   */\n  contentIdFor(value: string): string | null;\n  /** True when `el` is the first enabled trigger in registration order. */\n  isFirstEnabledTrigger(el: HTMLElement): boolean;\n  /**\n   * True when some registered, enabled trigger matches the current `value`.\n   * Distinguishes \"another trigger owns the tab stop\" from \"the selected\n   * value points at a removed / disabled trigger\" so the per-trigger\n   * tabindex fallback can re-engage the first-enabled entry point instead of\n   * stranding the tablist. Reactive.\n   */\n  hasSelectedTrigger(): boolean;\n}\n\n/**\n * DI token for the tabs widget's coordination surface, provided by `[forTabs]`.\n *\n * Publicly typed as the read surface {@link ForTabsContext}, which is the whole of what the\n * token promises a consumer. The pieces read the same token at an internal type that adds\n * the trigger / content registration protocol, so a wrapper re-providing it must alias it to\n * the root: `{ provide: FOR_TABS_CONTEXT, useExisting: MyTabs }`, where `MyTabs` extends\n * `ForTabs`. A value that merely satisfies the declared type resolves too, and is rejected\n * in dev mode by the first piece to reach the protocol.\n */\nexport const FOR_TABS_CONTEXT = new InjectionToken<ForTabsContext>('FOR_TABS_CONTEXT');\n\n/**\n * The tabs widget's internal coordination surface: everything\n * {@link ForTabsContext} publishes plus the trigger / content registration\n * protocol the id pairing and keyboard navigation are driven from.\n *\n * Never exported from `public-api.ts`. It is the type the pieces read\n * {@link FOR_TABS_CONTEXT} at, so a consumer who injects that token gets the\n * read surface while the pieces get the wiring protocol. `ForTabs` declares the\n * protocol members TS-`private`, which keeps them out of the emitted `.d.ts`\n * while `useExisting` still satisfies this contract at runtime.\n */\nexport interface TabsContext extends ForTabsContext {\n  registerTrigger(handle: ForTabsTriggerHandle): void;\n  unregisterTrigger(handle: ForTabsTriggerHandle): void;\n  registerContent(handle: ForTabsContentHandle): void;\n  unregisterContent(handle: ForTabsContentHandle): void;\n}\n\nexport function injectTabsContext(piece: string): TabsContext {\n  const ctx = inject(FOR_TABS_CONTEXT, { optional: true }) as TabsContext | null;\n  if (!ctx) {\n    throw orphanContextError({\n      code: 'FORCDK-TABS-001',\n      piece,\n      root: '[forTabs]',\n      token: 'FOR_TABS_CONTEXT',\n    });\n  }\n  assertRootContext({\n    entryPoint: 'tabs',\n    token: 'FOR_TABS_CONTEXT',\n    root: '[forTabs]',\n    piece,\n    probe: () => ctx.registerTrigger,\n  });\n  return ctx;\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\nimport { type TabsActivationMode } from './tabs-context';\n\n/**\n * Defaults inherited by descendant tabs in the surrounding injector scope.\n * Configure with `provideForTabsDefaults` either at the application root\n * or in any component's `providers` array; partial overrides merge with\n * the parent scope.\n */\nexport interface ForTabsDefaults {\n  /**\n   * `'automatic'` (default): arrow navigation moves focus AND selects the\n   * new tab. Use when panel content is cheap to render. `'manual'`: arrow\n   * navigation only moves focus; the user must press Space / Enter to\n   * activate. Use when panel content is expensive.\n   */\n  activationMode: TabsActivationMode;\n  /**\n   * Whether arrow navigation wraps around past the first / last enabled\n   * trigger. Matches the WAI-ARIA Tabs APG default.\n   */\n  loop: boolean;\n}\n\n/**\n * Library fallback for tabs defaults, read at the root injector when no\n * consumer has called `provideForTabsDefaults`. Exported for the shared\n * defaults contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_TABS_FALLBACK_DEFAULTS: ForTabsDefaults = {\n  activationMode: 'automatic',\n  loop: true,\n};\n\nconst { token, provideDefaults } = createDefaults<ForTabsDefaults>(\n  'FOR_TABS_DEFAULTS',\n  FOR_TABS_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved tabs defaults for the current scope. */\nexport const FOR_TABS_DEFAULTS = token;\n\n/**\n * Configures forty-cdk tabs defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForTabsDefaults(defaults: Partial<ForTabsDefaults> = {}): Provider[] {\n  return provideDefaults(defaults);\n}\n","import { booleanAttribute, computed, Directive, inject, input, model } from '@angular/core';\n\nimport {\n  Collection,\n  firstEnabledHost,\n  type ListNavigationAction,\n  rovingListTarget,\n  isUnset,\n  type WritingDirection,\n  RovingTabindex,\n  injectTextDirection,\n} from 'forty-cdk/core';\nimport {\n  FOR_TABS_CONTEXT,\n  type ForTabsContentHandle,\n  type ForTabsContext,\n  type ForTabsTriggerHandle,\n  type TabsActivationMode,\n} from './tabs-context';\nimport { FOR_TABS_DEFAULTS } from './tabs-defaults';\n\n/**\n * Root of the Tabs primitive. Owns the selected value, activation mode,\n * orientation, and disabled state. Provides the shared context to descendant\n * `ForTabsList` / `ForTabsTrigger` / `ForTabsContent` directives.\n *\n * Implements the [WAI-ARIA Tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/).\n *\n * `activationMode='automatic'` (default): arrow nav moves focus AND selects\n * the new tab. Use when panel content is cheap to render.\n * `activationMode='manual'`: arrow nav only moves focus; the user must press\n * Space / Enter to activate. Use when panel content is expensive.\n */\n@Directive({\n  selector: '[forTabs]',\n  exportAs: 'forTabs',\n  host: {\n    '[attr.data-orientation]': 'orientation()',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.dir]': 'dir()',\n  },\n  providers: [{ provide: FOR_TABS_CONTEXT, useExisting: ForTabs }],\n})\nexport class ForTabs implements ForTabsContext {\n  readonly #defaults = inject(FOR_TABS_DEFAULTS);\n\n  /**\n   * Two-way bindable. The selected tab's value, or `null` when nothing is\n   * selected. `null` is the canonical unset state — distinct from a tab whose\n   * `value` is the empty string `''`, which is a legal, selectable value. The\n   * `model()` change emitter (`(valueChange)`) fires only on internal\n   * selection changes (trigger click or automatic-mode arrow nav), never on\n   * consumer writes via `[(value)]` — observe transitions without binding back.\n   */\n  readonly value = model<string | null>(null);\n\n  /**\n   * Whether arrow navigation also selects the focused tab (`'automatic'`, the default) or only\n   * moves focus until the user presses Enter or Space (`'manual'`). The default is read from\n   * `provideForTabsDefaults` for the surrounding scope.\n   */\n  readonly activationMode = input<TabsActivationMode>(this.#defaults.activationMode);\n  /**\n   * Axis the arrow keys navigate. Reflected as `data-orientation`.\n   */\n  readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n  /**\n   * Writing direction. When unset (default `null`), the inherited ambient\n   * direction is resolved from the nearest ancestor carrying a `dir` attribute\n   * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n   * The resolved value is reflected to the host `dir` attribute and swaps\n   * ArrowLeft / ArrowRight semantics in RTL.\n   */\n  readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n  readonly dir = injectTextDirection(this._dirInput);\n  /**\n   * Whether every trigger in the list is disabled. Individual triggers may also disable themselves.\n   */\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  /**\n   * Whether arrow navigation wraps around past the first / last enabled\n   * trigger. Default `true` — matches the WAI-ARIA Tabs APG. Set to `false`\n   * for a non-wrapping tablist. The default is read from\n   * `provideForTabsDefaults` for the surrounding scope.\n   */\n  readonly loop = input(this.#defaults.loop, { transform: booleanAttribute });\n\n  readonly roving = new RovingTabindex(() => this.#triggers.items());\n\n  readonly #triggers = new Collection<ForTabsTriggerHandle>();\n  readonly #contents = new Collection<ForTabsContentHandle>();\n\n  readonly #firstEnabledTriggerHost = computed(() => firstEnabledHost(this.#triggers.items()));\n\n  isSelected(v: string): boolean {\n    return this.value() === v;\n  }\n\n  select(v: string): void {\n    if (this.disabled()) {\n      return;\n    }\n    this.value.set(v);\n  }\n\n  navigate(currentTrigger: HTMLElement, action: ListNavigationAction): void {\n    if (this.disabled()) {\n      return;\n    }\n    const triggers = this.#triggers.items();\n    const target = rovingListTarget(triggers, currentTrigger, action, { loop: this.loop() });\n    if (!target) {\n      return;\n    }\n    target.host.focus();\n    if (this.activationMode() === 'automatic' && !target.disabled()) {\n      this.value.set(target.value());\n    }\n  }\n\n  private registerTrigger(handle: ForTabsTriggerHandle): void {\n    this.#triggers.register(handle);\n  }\n\n  private unregisterTrigger(handle: ForTabsTriggerHandle): void {\n    this.#triggers.unregister(handle);\n    this.roving.unregister(handle.host);\n  }\n\n  private registerContent(handle: ForTabsContentHandle): void {\n    this.#contents.register(handle);\n  }\n\n  private unregisterContent(handle: ForTabsContentHandle): void {\n    this.#contents.unregister(handle);\n  }\n\n  triggerIdFor(value: string): string | null {\n    for (const t of this.#triggers.items()) {\n      const candidate = t.value();\n      if (!isUnset(candidate) && candidate === value) {\n        return t.id();\n      }\n    }\n    return null;\n  }\n\n  contentIdFor(value: string): string | null {\n    for (const c of this.#contents.items()) {\n      const candidate = c.value();\n      if (!isUnset(candidate) && candidate === value) {\n        return c.id();\n      }\n    }\n    return null;\n  }\n\n  isFirstEnabledTrigger(el: HTMLElement): boolean {\n    return this.#firstEnabledTriggerHost() === el;\n  }\n\n  hasSelectedTrigger(): boolean {\n    const value = this.value();\n    if (value === null) {\n      return false;\n    }\n    return this.#triggers.items().some((t) => {\n      if (t.disabled()) {\n        return false;\n      }\n      const candidate = t.value();\n      return !isUnset(candidate) && candidate === value;\n    });\n  }\n}\n","import { Directive, input } from '@angular/core';\n\nimport { hostAriaLabel } from 'forty-cdk/core';\n\nimport { injectTabsContext } from './tabs-context';\n\n/**\n * The `role=\"tablist\"` container — wraps the `ForTabsTrigger` elements (and\n * only those — panels live as siblings of the list). Reflects the parent's\n * orientation as `aria-orientation`.\n */\n@Directive({\n  selector: '[forTabsList]',\n  exportAs: 'forTabsList',\n  host: {\n    role: 'tablist',\n    '[attr.aria-orientation]': 'group.orientation()',\n    '[attr.aria-label]': 'resolvedAriaLabel()',\n    '[attr.data-orientation]': 'group.orientation()',\n  },\n})\nexport class ForTabsList {\n  protected readonly group = injectTabsContext('ForTabsList');\n\n  /** Accessible name for the tab list. Defers to a consumer `aria-labelledby`. */\n  readonly ariaLabel = input<string | null>(null);\n\n  protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n}\n","import { booleanAttribute, computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport {\n  assertInputBound,\n  hostButtonType,\n  registerHandle,\n  hostId,\n  resolveListNavigation,\n  rovingTabStop,\n  unsetInput,\n} from 'forty-cdk/core';\nimport { injectTabsContext } from './tabs-context';\n\n/**\n * Header button for one tab. Apply on a `<button type=\"button\">` so Enter /\n * Space activation come from native button behavior.\n *\n * Tabindex follows APG: the user-focused trigger owns `tabindex=0` (tracked\n * by `RovingTabindex`); before any interaction, the selected trigger (or\n * first enabled, when nothing is selected) is the tab entry.\n *\n * `aria-controls` is emitted whenever a matching panel is registered — APG\n * emits it on every tab, which for the keep-mounted default means every\n * trigger. For consumers who unmount inactive panels via `@if (selected())`\n * it collapses to only the mounted trigger, so the reference never dangles at\n * an absent panel either way.\n */\n@Directive({\n  selector: '[forTabsTrigger]',\n  exportAs: 'forTabsTrigger',\n  host: {\n    role: 'tab',\n    '[attr.type]': 'buttonType()',\n    '[id]': 'id()',\n    '[attr.aria-selected]': 'selected() ? \"true\" : \"false\"',\n    '[attr.aria-controls]': 'controlsId()',\n    '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n    '[attr.tabindex]': 'tabindex()',\n    '[attr.data-state]': 'selected() ? \"active\" : \"inactive\"',\n    '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n    '[attr.data-orientation]': 'group.orientation()',\n    '(click)': 'onClick()',\n    '(focus)': 'onFocus()',\n    '(keydown)': 'onKeyDown($event)',\n  },\n})\nexport class ForTabsTrigger {\n  protected readonly buttonType = hostButtonType();\n\n  protected readonly group = injectTabsContext('ForTabsTrigger');\n  readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /**\n   * Value this trigger selects, paired with the `[forTabsContent]` carrying the same value.\n   * Mandatory — an unbound trigger throws in dev mode.\n   */\n  readonly value = input(unsetInput<string>());\n  /**\n   * Whether this trigger can be activated. A disabled trigger stays focusable and announced, and is\n   * skipped by arrow navigation.\n   */\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  readonly id = hostId('for-tabs-trigger');\n\n  readonly selected = computed(() => this.group.isSelected(this.value()));\n  readonly effectiveDisabled = computed(() => this.disabled() || this.group.disabled());\n\n  protected readonly controlsId = computed(() => this.group.contentIdFor(this.value()));\n\n  /**\n   * APG tabindex: user-driven roving owns it once any trigger has been\n   * focused. Before that, fall back to \"selected, else first enabled\".\n   */\n  protected readonly tabindex = computed<-1 | 0>(() =>\n    rovingTabStop({\n      disabled: this.effectiveDisabled(),\n      selected: this.selected(),\n      hasSelected: this.group.hasSelectedTrigger(),\n      isFirstEnabled: this.group.isFirstEnabledTrigger(this.#host.nativeElement),\n      roving: this.group.roving,\n      host: this.#host.nativeElement,\n    }),\n  );\n\n  constructor() {\n    assertInputBound(this.value, 'tabs', '[forTabsTrigger]', 'value');\n    const handle = {\n      host: this.#host.nativeElement,\n      id: this.id,\n      value: this.value,\n      disabled: this.effectiveDisabled,\n    };\n    registerHandle(\n      handle,\n      (h) => this.group.registerTrigger(h),\n      (h) => this.group.unregisterTrigger(h),\n    );\n  }\n\n  protected onClick(): void {\n    if (this.effectiveDisabled()) {\n      return;\n    }\n    this.group.select(this.value());\n  }\n\n  protected onFocus(): void {\n    if (this.effectiveDisabled()) {\n      return;\n    }\n    this.group.roving.setActive(this.#host.nativeElement);\n  }\n\n  protected onKeyDown(event: KeyboardEvent): void {\n    const action = resolveListNavigation(event, {\n      orientation: this.group.orientation(),\n      dir: this.group.dir(),\n    });\n    if (!action) {\n      return;\n    }\n    event.preventDefault();\n    this.group.navigate(this.#host.nativeElement, action);\n  }\n}\n","import { booleanAttribute, computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport {\n  assertInputBound,\n  registerHandle,\n  injectHasFocusableContent,\n  hostId,\n  hostLabelledBy,\n  unsetInput,\n} from 'forty-cdk/core';\nimport { injectTabsContext } from './tabs-context';\n\n/**\n * Panel for one tab. The directive does not manage DOM presence — leave the\n * panel mounted (idiomatic for tabs, preserves scroll/input state across\n * activations) and either toggle visibility in CSS via\n * `[data-state=\"inactive\"]` or wrap with `@if (selected())` to unmount it.\n * While inactive, the directive reflects `aria-hidden=\"true\"` and `inert`\n * so the mounted-but-inactive panel is removed from the accessibility tree\n * and focus order automatically.\n *\n * APG: a `tabpanel` is a tab stop (`tabindex=\"0\"`) **only** when it has no\n * focusable content of its own — that lets screen-reader users reach an\n * otherwise-unreachable panel, while a panel that already contains a form,\n * links, or buttons does not add a redundant tab stop. The directive detects\n * focusable descendants automatically (reactive to subtree changes); set\n * `[interactiveContent]` to override the detection in either direction.\n */\n@Directive({\n  selector: '[forTabsContent]',\n  exportAs: 'forTabsContent',\n  host: {\n    role: 'tabpanel',\n    '[attr.tabindex]': 'tabindex()',\n    '[id]': 'id()',\n    '[attr.aria-labelledby]': 'labelledBy()',\n    '[attr.aria-hidden]': 'selected() ? null : \"true\"',\n    '[attr.inert]': 'selected() ? null : \"\"',\n    '[attr.data-state]': 'selected() ? \"active\" : \"inactive\"',\n    '[attr.data-orientation]': 'group.orientation()',\n  },\n})\nexport class ForTabsContent {\n  protected readonly group = injectTabsContext('ForTabsContent');\n\n  /**\n   * Value of the tab this panel belongs to, paired with the `[forTabsTrigger]` carrying the same\n   * value. Mandatory — an unbound panel throws in dev mode.\n   */\n  readonly value = input(unsetInput<string>());\n\n  /**\n   * Overrides the automatic focusable-content detection that drives the\n   * panel's `tabindex`. Leave unset (default `null`) to let the directive\n   * decide: a panel with no focusable descendants gets `tabindex=\"0\"` so it\n   * is reachable by Tab, a panel with focusable descendants gets none. Set\n   * `true` when the panel always holds its own focusable content, `false` to\n   * force the panel to be a tab stop regardless of its content.\n   *\n   * The override decides the attribute only; the detection itself runs either\n   * way. That makes it the way out of an answer the observer cannot re-measure\n   * — focusable content inside a shadow root, or a visibility flip driven\n   * purely by a stylesheet — both of which the README's _Known limitations_\n   * covers.\n   */\n  readonly interactiveContent = input<boolean | null, unknown>(null, {\n    transform: (value: unknown) => (value == null ? null : booleanAttribute(value)),\n  });\n\n  readonly id = hostId('for-tabs-content');\n\n  readonly #hasFocusableContent = injectHasFocusableContent();\n\n  readonly selected = computed(() => this.group.isSelected(this.value()));\n  protected readonly labelledBy = hostLabelledBy(() => this.group.triggerIdFor(this.value()));\n\n  /**\n   * APG tabindex: `0` only when the panel has no focusable content of its\n   * own, so SR users can focus the panel itself; otherwise no `tabindex`\n   * attribute, so the panel does not add a redundant tab stop. An explicit\n   * `interactiveContent` wins over the automatic detection.\n   */\n  protected readonly tabindex = computed<'0' | null>(() => {\n    const override = this.interactiveContent();\n    const interactive = override ?? this.#hasFocusableContent();\n    return interactive ? null : '0';\n  });\n\n  constructor() {\n    assertInputBound(this.value, 'tabs', '[forTabsContent]', 'value');\n    const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n    const handle = { host, id: this.id, value: this.value };\n    registerHandle(\n      handle,\n      (h) => this.group.registerContent(h),\n      (h) => this.group.unregisterContent(h),\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}