@radix-ng/primitives 1.0.0-beta.5 → 1.0.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.
- package/composite/README.md +3 -0
- package/fesm2022/radix-ng-primitives-accordion.mjs +20 -44
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +134 -58
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-composite.mjs +599 -0
- package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-drawer.mjs +442 -2
- package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +315 -68
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs +91 -36
- package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +281 -88
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +40 -15
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +73 -65
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +63 -27
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +56 -25
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +59 -29
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +57 -13
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +335 -73
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +66 -21
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +29 -11
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +68 -36
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/navigation-menu/README.md +5 -2
- package/package.json +6 -10
- package/types/radix-ng-primitives-accordion.d.ts +12 -16
- package/types/radix-ng-primitives-checkbox.d.ts +98 -70
- package/types/radix-ng-primitives-composite.d.ts +195 -0
- package/types/radix-ng-primitives-drawer.d.ts +40 -2
- package/types/radix-ng-primitives-menu.d.ts +46 -16
- package/types/radix-ng-primitives-menubar.d.ts +12 -5
- package/types/radix-ng-primitives-navigation-menu.d.ts +65 -33
- package/types/radix-ng-primitives-popover.d.ts +9 -5
- package/types/radix-ng-primitives-popper.d.ts +1 -0
- package/types/radix-ng-primitives-radio.d.ts +11 -9
- package/types/radix-ng-primitives-scroll-area.d.ts +4 -1
- package/types/radix-ng-primitives-select.d.ts +46 -32
- package/types/radix-ng-primitives-slider.d.ts +19 -4
- package/types/radix-ng-primitives-tabs.d.ts +69 -14
- package/types/radix-ng-primitives-toggle-group.d.ts +27 -16
- package/types/radix-ng-primitives-toggle.d.ts +5 -5
- package/types/radix-ng-primitives-toolbar.d.ts +84 -69
- package/collection/README.md +0 -1
- package/fesm2022/radix-ng-primitives-collection.mjs +0 -72
- package/fesm2022/radix-ng-primitives-collection.mjs.map +0 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +0 -388
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +0 -1
- package/roving-focus/README.md +0 -3
- package/types/radix-ng-primitives-collection.d.ts +0 -44
- package/types/radix-ng-primitives-roving-focus.d.ts +0 -187
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-tabs.mjs","sources":["../../../packages/primitives/tabs/src/tabs-root-context.ts","../../../packages/primitives/tabs/src/utils.ts","../../../packages/primitives/tabs/src/tabs-indicator.ts","../../../packages/primitives/tabs/src/tabs-list.ts","../../../packages/primitives/tabs/src/tabs-panel.ts","../../../packages/primitives/tabs/src/tabs-panel-presence.ts","../../../packages/primitives/tabs/src/tabs-root.ts","../../../packages/primitives/tabs/src/tabs-tab.ts","../../../packages/primitives/tabs/index.ts","../../../packages/primitives/tabs/radix-ng-primitives-tabs.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { createContext, DataOrientation } from '@radix-ng/primitives/core';\nimport { RdxTabsActivationDirection, RdxTabsValue } from './utils';\n\nexport interface RdxTabsRootContext {\n /** Stable id used to derive tab / panel ids. */\n readonly baseId: string;\n\n /** The value of the currently selected tab. */\n readonly value: Signal<RdxTabsValue | undefined>;\n\n /** The orientation of the tabs. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Direction the selection moved relative to the previously active tab. */\n readonly activationDirection: Signal<RdxTabsActivationDirection>;\n\n /** Whether tabs are activated on focus (set by the list). */\n readonly activateOnFocus: Signal<boolean>;\n\n /** The `[rdxTabsList]` host element, used to resolve tab order and indicator geometry. */\n readonly tabListElement: Signal<HTMLElement | null>;\n\n /** Select a tab by value. No-op when the value is unchanged. */\n setValue(value: RdxTabsValue, event?: Event, reason?: string): void;\n\n /** Mirror the list's `activateOnFocus` input onto the root context. */\n setActivateOnFocus(value: boolean): void;\n\n /** Register the list host element. */\n setTabListElement(element: HTMLElement | null): void;\n}\n\nexport const [injectTabsRootContext, provideTabsRootContext] = createContext<RdxTabsRootContext>(\n 'RdxTabsRootContext',\n 'components/tabs'\n);\n","/**\n * The direction in which the active tab moved relative to the previously active tab.\n * Mirrors Base UI's `Tabs.Tab.ActivationDirection`.\n */\nexport type RdxTabsActivationDirection = 'left' | 'right' | 'up' | 'down' | 'none';\n\n/** A value that identifies a tab / panel pair. */\nexport type RdxTabsValue = string | number | null;\n\nexport function makeTabId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-tab-${value}`;\n}\n\nexport function makePanelId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-panel-${value}`;\n}\n","import { afterNextRender, DestroyRef, Directive, effect, inject, signal, untracked } from '@angular/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makeTabId } from './utils';\n\ninterface TabGeometry {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\n/**\n * A visual element that tracks the position and size of the active tab. Exposes the active tab\n * geometry as CSS variables (`--active-tab-{top,right,bottom,left,width,height}`) so it can be\n * animated with CSS.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsIndicator]',\n exportAs: 'rdxTabsIndicator',\n host: {\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[style.--active-tab-top.px]': 'geometry()?.top',\n '[style.--active-tab-right.px]': 'geometry()?.right',\n '[style.--active-tab-bottom.px]': 'geometry()?.bottom',\n '[style.--active-tab-left.px]': 'geometry()?.left',\n '[style.--active-tab-width.px]': 'geometry()?.width',\n '[style.--active-tab-height.px]': 'geometry()?.height'\n }\n})\nexport class RdxTabsIndicator {\n protected readonly rootContext = injectTabsRootContext();\n private readonly destroyRef = inject(DestroyRef);\n\n /** @ignore */\n protected readonly geometry = signal<TabGeometry | null>(null);\n\n constructor() {\n // Re-measure whenever the selection, orientation or the list element changes.\n effect(() => {\n this.rootContext.value();\n this.rootContext.orientation();\n this.rootContext.tabListElement();\n this.scheduleMeasure();\n });\n\n afterNextRender(() => {\n const list = untracked(this.rootContext.tabListElement);\n if (!list || typeof ResizeObserver === 'undefined') {\n this.measure();\n return;\n }\n\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(list);\n this.destroyRef.onDestroy(() => observer.disconnect());\n this.measure();\n });\n }\n\n private scheduleMeasure(): void {\n if (typeof requestAnimationFrame === 'undefined') {\n this.measure();\n return;\n }\n requestAnimationFrame(() => this.measure());\n }\n\n private measure(): void {\n const list = untracked(this.rootContext.tabListElement);\n const value = untracked(this.rootContext.value);\n\n if (!list || value == null || typeof document === 'undefined') {\n this.geometry.set(null);\n return;\n }\n\n const tab = document.getElementById(makeTabId(this.rootContext.baseId, value));\n if (!tab) {\n this.geometry.set(null);\n return;\n }\n\n const listRect = list.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n\n // Measure `left` / `top` relative to the list's scrollable content origin rather than its\n // visible edge. When the list is a scroll container (e.g. its tabs overflow inside a Scroll\n // Area), the indicator is an absolutely positioned child of that container and scrolls along\n // with the content, so these offsets must be content-relative to stay aligned with the tab.\n // For non-scrolling lists `scrollLeft` / `scrollTop` are `0`, leaving the geometry unchanged.\n // `right` / `bottom` stay visible-edge relative — there is no unambiguous content-relative\n // meaning for them inside a scroll container, and the moving indicator uses `left`/`top`.\n const scrollLeft = list.scrollLeft;\n const scrollTop = list.scrollTop;\n\n this.geometry.set({\n top: tabRect.top - listRect.top + scrollTop,\n right: listRect.right - tabRect.right,\n bottom: listRect.bottom - tabRect.bottom,\n left: tabRect.left - listRect.left + scrollLeft,\n width: tabRect.width,\n height: tabRect.height\n });\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus';\nimport { injectTabsRootContext } from './tabs-root-context';\n\n/**\n * Groups the individual tab buttons and manages keyboard navigation.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsList]',\n exportAs: 'rdxTabsList',\n hostDirectives: [RdxRovingFocusGroupDirective],\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': 'rootContext.orientation()',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()'\n }\n})\nexport class RdxTabsList {\n protected readonly rootContext = injectTabsRootContext();\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly rovingFocusGroup = inject(RdxRovingFocusGroupDirective, { self: true });\n\n /**\n * Whether a tab is activated when it receives focus (automatic activation).\n * When `false`, tabs are only activated on click or Enter/Space.\n *\n * @default false\n */\n readonly activateOnFocus = input(false, { transform: booleanAttribute });\n\n /**\n * Whether keyboard navigation should loop from the last tab back to the first.\n *\n * @default true\n */\n readonly loopFocus = input(true, { transform: booleanAttribute });\n\n constructor() {\n this.rootContext.setTabListElement(this.elementRef.nativeElement);\n\n effect(() => {\n this.rovingFocusGroup.setOrientation(this.rootContext.orientation());\n this.rovingFocusGroup.setLoop(this.loopFocus());\n });\n\n effect(() => this.rootContext.setActivateOnFocus(this.activateOnFocus()));\n }\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked\n} from '@angular/core';\nimport { useTransitionStatus } from '@radix-ng/primitives/core';\nimport { provideRdxPresenceContext } from '@radix-ng/primitives/presence';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\nconst panelPresenceContext = () => ({ present: inject(RdxTabsPanel).present });\n\n/**\n * A panel displayed when its corresponding tab is active.\n *\n * By default the panel stays in the DOM and is toggled with the `hidden` attribute. To unmount the\n * contents while inactive (Base UI's default `keepMounted: false`), nest a `*rdxTabsPanelPresence`\n * structural directive inside it; set `keepMounted` to keep the contents mounted regardless.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsPanel]',\n exportAs: 'rdxTabsPanel',\n providers: [provideRdxPresenceContext(panelPresenceContext)],\n host: {\n role: 'tabpanel',\n '[id]': 'panelId()',\n '[attr.tabindex]': 'active() ? 0 : undefined',\n '[attr.aria-labelledby]': 'tabId()',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-index]': 'index()',\n '[attr.data-hidden]': 'active() ? undefined : \"\"',\n '[attr.data-starting-style]': 'transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-ending-style]': 'transitionStatus() === \"ending\" ? \"\" : undefined',\n '[hidden]': 'hidden()'\n }\n})\nexport class RdxTabsPanel {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly rootContext = injectTabsRootContext();\n\n /**\n * A unique value that associates the panel with a tab.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * Keep the panel contents mounted in the DOM while inactive (the contents are still hidden).\n * Only relevant together with `*rdxTabsPanelPresence`, which otherwise unmounts them.\n *\n * @default false\n */\n readonly keepMounted = input(false, { transform: booleanAttribute });\n\n private readonly transition = useTransitionStatus(() => {});\n\n /** Reactive enter/exit transition phase (`'starting'` | `'ending'` | `undefined`). */\n readonly transitionStatus = this.transition.status;\n\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly tabId = computed(() => makeTabId(this.rootContext.baseId, this.value()));\n\n /** Whether this panel's tab is currently selected. */\n readonly active = computed(() => this.rootContext.value() === this.value());\n\n /** `true` once a `*rdxTabsPanelPresence` child takes over mounting. */\n private readonly hasPresence = signal(false);\n\n /**\n * Whether the contents should be present for `*rdxTabsPanelPresence`. Flips with `active` so the\n * presence directive owns the exit-animation timing (it keeps the node mounted until its exit\n * `@keyframes` finishes); `keepMounted` keeps them mounted regardless.\n */\n readonly present = computed(() => this.keepMounted() || this.active());\n\n /**\n * The `hidden` attribute value. The panel is shown while active or while its exit transition\n * runs. When a presence child unmounts the contents we no longer force `hidden` (the empty\n * element renders nothing), unless `keepMounted` keeps the inactive contents around.\n */\n protected readonly hidden = computed(\n () => !this.active() && this.transitionStatus() !== 'ending' && (!this.hasPresence() || this.keepMounted())\n );\n\n /** @ignore Index of the panel, derived from the order of its associated tab. */\n protected readonly index = computed(() => {\n const list = this.rootContext.tabListElement();\n if (!list) {\n return null;\n }\n\n const tabs = Array.from(list.querySelectorAll<HTMLElement>('[role=\"tab\"]'));\n const position = tabs.findIndex((tab) => tab.id === makeTabId(this.rootContext.baseId, this.value()));\n return position === -1 ? null : position;\n });\n\n private previousActive = false;\n private isFirstRun = true;\n\n constructor() {\n const unregister = this.transition.registerElement(this.elementRef.nativeElement);\n inject(DestroyRef).onDestroy(unregister);\n\n effect(() => {\n const active = this.active();\n\n // Settle the initial state without playing an enter transition.\n if (this.isFirstRun) {\n this.isFirstRun = false;\n this.previousActive = active;\n return;\n }\n\n if (active !== this.previousActive) {\n this.previousActive = active;\n untracked(() => this.transition.start(active));\n }\n });\n }\n\n /** @ignore Called by `RdxTabsPanelPresence` so the panel stops forcing `hidden`. */\n markHasPresence(): void {\n this.hasPresence.set(true);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RdxPresenceDirective } from '@radix-ng/primitives/presence';\nimport { RdxTabsPanel } from './tabs-panel';\n\n/**\n * Structural directive that mounts the tab panel contents only while the panel is active,\n * unmounting them once the exit animation finishes. Apply it inside an `[rdxTabsPanel]` to get\n * Base UI's default unmounting behavior; combine with `keepMounted` on the panel to keep the\n * contents mounted instead.\n *\n * The presence state is read from the parent panel through {@link RdxPresenceDirective}.\n */\n@Directive({\n selector: 'ng-template[rdxTabsPanelPresence]',\n hostDirectives: [RdxPresenceDirective]\n})\nexport class RdxTabsPanelPresence {\n constructor() {\n inject(RdxTabsPanel).markHasPresence();\n }\n}\n","import { Directive, effect, inject, input, model, output, signal, untracked } from '@angular/core';\nimport {\n createCancelableChangeEventDetails,\n DataOrientation,\n injectId,\n RdxCancelableChangeEventDetails\n} from '@radix-ng/primitives/core';\nimport { provideTabsRootContext, RdxTabsRootContext } from './tabs-root-context';\nimport { makeTabId, RdxTabsActivationDirection, RdxTabsValue } from './utils';\n\nexport type RdxTabsValueChangeReason = 'trigger-press' | 'keyboard' | 'focus' | 'none';\nexport type RdxTabsValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxTabsValueChangeReason>;\n\nexport interface RdxTabsValueChangeEvent {\n value: RdxTabsValue;\n eventDetails: RdxTabsValueChangeEventDetails;\n}\n\nconst rootContext = (): RdxTabsRootContext => {\n const root = inject(RdxTabsRoot);\n\n return {\n baseId: root.baseId,\n value: root.value,\n orientation: root.orientation,\n activationDirection: root.activationDirection.asReadonly(),\n activateOnFocus: root.activateOnFocus.asReadonly(),\n tabListElement: root.tabListElement.asReadonly(),\n setValue: (value, event, reason) => root.setValue(value, event, reason as RdxTabsValueChangeReason | undefined),\n setActivateOnFocus: (value) => root.activateOnFocus.set(value),\n setTabListElement: (element) => root.tabListElement.set(element)\n };\n};\n\n/**\n * Groups the tabs and the corresponding panels.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsRoot]',\n exportAs: 'rdxTabsRoot',\n providers: [provideTabsRootContext(rootContext)],\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-activation-direction]': 'activationDirection()'\n }\n})\nexport class RdxTabsRoot {\n /** @ignore */\n readonly baseId = injectId('rdx-tabs-');\n\n /**\n * The value of the currently selected tab. Use together with `(onValueChange)` for controlled state.\n */\n readonly value = model<RdxTabsValue | undefined>();\n\n /**\n * The value of the tab that should be initially selected when uncontrolled.\n */\n readonly defaultValue = input<RdxTabsValue>();\n\n /**\n * The orientation the tabs are laid out. Controls arrow-key navigation\n * (left/right vs. up/down).\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /**\n * Event emitted when the selected tab changes.\n */\n readonly onValueChange = output<RdxTabsValueChangeEvent>();\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly activateOnFocus = signal(false);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabListElement = signal<HTMLElement | null>(null);\n\n /** @ignore */\n readonly activationDirection = signal<RdxTabsActivationDirection>('none');\n\n constructor() {\n effect(() => {\n const initial = this.defaultValue();\n if (initial !== undefined && untracked(this.value) === undefined) {\n this.value.set(initial);\n }\n });\n }\n\n /** @ignore */\n setValue(\n value: RdxTabsValue,\n event?: Event,\n reason: RdxTabsValueChangeReason = event ? 'trigger-press' : 'none'\n ): void {\n const previous = this.value();\n if (previous === value) {\n return;\n }\n\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails } = createCancelableChangeEventDetails(\n reason,\n event ?? new Event('tabs.value-change'),\n trigger\n );\n this.onValueChange.emit({ value, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.activationDirection.set(this.computeDirection(previous, value));\n this.value.set(value);\n }\n\n private computeDirection(previous: RdxTabsValue | undefined, next: RdxTabsValue): RdxTabsActivationDirection {\n const list = this.tabListElement();\n if (!list || previous === undefined || previous === null) {\n return 'none';\n }\n\n const tabs = Array.from(list.querySelectorAll<HTMLElement>('[role=\"tab\"]'));\n const previousIndex = tabs.findIndex((tab) => tab.id === makeTabId(this.baseId, previous));\n const nextIndex = tabs.findIndex((tab) => tab.id === makeTabId(this.baseId, next));\n\n if (previousIndex === -1 || nextIndex === -1 || previousIndex === nextIndex) {\n return 'none';\n }\n\n const horizontal = this.orientation() === 'horizontal';\n if (nextIndex > previousIndex) {\n return horizontal ? 'right' : 'down';\n }\n\n return horizontal ? 'left' : 'up';\n }\n}\n","import { booleanAttribute, computed, Directive, effect, inject, input } from '@angular/core';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\n/**\n * An individual interactive tab button that activates its corresponding panel.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsTab]',\n exportAs: 'rdxTabsTab',\n hostDirectives: [\n {\n directive: RdxRovingFocusItemDirective,\n inputs: ['allowShiftKey']\n }\n ],\n host: {\n type: 'button',\n role: 'tab',\n '[id]': 'tabId()',\n '[attr.aria-selected]': 'active()',\n '[attr.aria-controls]': 'panelId()',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.disabled]': 'disabled() ? \"\" : undefined',\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'onFocus($event)'\n }\n})\nexport class RdxTabsTab {\n protected readonly rootContext = injectTabsRootContext();\n private readonly rovingFocusItem = inject(RdxRovingFocusItemDirective);\n\n /**\n * A unique value that associates the tab with a panel.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * When `true`, prevents the user from interacting with the tab.\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** @ignore */\n protected readonly tabId = computed(() => makeTabId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n\n /** @ignore */\n protected readonly active = computed(() => this.rootContext.value() === this.value());\n\n constructor() {\n effect(() => {\n this.rovingFocusItem.setActive(this.active());\n this.rovingFocusItem.setFocusable(!this.disabled());\n });\n }\n\n /** @ignore */\n protected onMouseDown(event: MouseEvent): void {\n // Only the primary button selects; ignore Ctrl-click (macOS right-click emulation).\n if (!this.disabled() && event.button === 0 && !event.ctrlKey) {\n this.rootContext.setValue(this.value(), event, 'trigger-press');\n } else {\n // Prevent focus to avoid accidental activation.\n event.preventDefault();\n }\n }\n\n /** @ignore */\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.disabled() && (event.key === ' ' || event.key === 'Enter')) {\n this.rootContext.setValue(this.value(), event, 'keyboard');\n }\n }\n\n /** @ignore */\n protected onFocus(event: FocusEvent): void {\n if (!this.active() && !this.disabled() && this.rootContext.activateOnFocus()) {\n this.rootContext.setValue(this.value(), event, 'focus');\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTabsIndicator } from './src/tabs-indicator';\nimport { RdxTabsList } from './src/tabs-list';\nimport { RdxTabsPanel } from './src/tabs-panel';\nimport { RdxTabsPanelPresence } from './src/tabs-panel-presence';\nimport { RdxTabsRoot } from './src/tabs-root';\nimport { RdxTabsTab } from './src/tabs-tab';\n\nexport * from './src/tabs-indicator';\nexport * from './src/tabs-list';\nexport * from './src/tabs-panel';\nexport * from './src/tabs-panel-presence';\nexport * from './src/tabs-root';\nexport * from './src/tabs-root-context';\nexport * from './src/tabs-tab';\nexport type { RdxTabsActivationDirection, RdxTabsValue } from './src/utils';\n\nexport const tabsImports = [RdxTabsRoot, RdxTabsList, RdxTabsTab, RdxTabsPanel, RdxTabsPanelPresence, RdxTabsIndicator];\n\n@NgModule({\n imports: [...tabsImports],\n exports: [...tabsImports]\n})\nexport class RdxTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-tabs.mjs","sources":["../../../packages/primitives/tabs/src/tabs-root-context.ts","../../../packages/primitives/tabs/src/utils.ts","../../../packages/primitives/tabs/src/tabs-indicator.ts","../../../packages/primitives/tabs/src/tabs-list.ts","../../../packages/primitives/tabs/src/tabs-panel.ts","../../../packages/primitives/tabs/src/tabs-panel-presence.ts","../../../packages/primitives/tabs/src/tabs-root.ts","../../../packages/primitives/tabs/src/tabs-tab.ts","../../../packages/primitives/tabs/index.ts","../../../packages/primitives/tabs/radix-ng-primitives-tabs.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { RdxCompositeMetadata } from '@radix-ng/primitives/composite';\nimport { createContext, DataOrientation } from '@radix-ng/primitives/core';\nimport type { RdxTabsValueChangeReason } from './tabs-root';\nimport { RdxTabsActivationDirection, RdxTabsTabMetadata, RdxTabsValue } from './utils';\n\nexport interface RdxTabsRootContext {\n /** Stable id used to derive tab / panel ids. */\n readonly baseId: string;\n\n /** The value of the currently selected tab. */\n readonly value: Signal<RdxTabsValue | undefined>;\n\n /** The orientation of the tabs. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Direction the selection moved relative to the previously active tab. */\n readonly activationDirection: Signal<RdxTabsActivationDirection>;\n\n /** Whether tabs are activated on focus (set by the list). */\n readonly activateOnFocus: Signal<boolean>;\n\n /** The `[rdxTabsList]` host element, used to resolve tab order and indicator geometry. */\n readonly tabListElement: Signal<HTMLElement | null>;\n\n /** Registered tabs in DOM order. */\n readonly tabMap: Signal<Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>>;\n\n /** Select a tab by value. No-op when the value is unchanged. */\n setValue(value: RdxTabsValue, event?: Event, reason?: RdxTabsValueChangeReason): void;\n\n /** Mirror the list's `activateOnFocus` input onto the root context. */\n setActivateOnFocus(value: boolean): void;\n\n /** Register the list host element. */\n setTabListElement(element: HTMLElement | null): void;\n\n /** Register the tab composite map. */\n setTabMap(map: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>): void;\n}\n\nexport const [injectTabsRootContext, provideTabsRootContext] = createContext<RdxTabsRootContext>(\n 'RdxTabsRootContext',\n 'components/tabs'\n);\n","/**\n * The direction in which the active tab moved relative to the previously active tab.\n * Mirrors Base UI's `Tabs.Tab.ActivationDirection`.\n */\nexport type RdxTabsActivationDirection = 'left' | 'right' | 'up' | 'down' | 'none';\n\n/** A value that identifies a tab / panel pair. */\nexport type RdxTabsValue = string | number | null;\n\n/** Metadata registered for each tab in the composite list. */\nexport interface RdxTabsTabMetadata {\n [key: string]: unknown;\n disabled: boolean;\n id: string;\n value: RdxTabsValue;\n}\n\n/** Metadata registered for each panel in the composite list. */\nexport interface RdxTabsPanelMetadata {\n [key: string]: unknown;\n id: string;\n value: RdxTabsValue;\n}\n\nexport function makeTabId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-tab-${value}`;\n}\n\nexport function makePanelId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-panel-${value}`;\n}\n","import { afterNextRender, DestroyRef, Directive, effect, inject, signal, untracked } from '@angular/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makeTabId } from './utils';\n\ninterface TabGeometry {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\n/**\n * A visual element that tracks the position and size of the active tab. Exposes the active tab\n * geometry as CSS variables (`--active-tab-{top,right,bottom,left,width,height}`) so it can be\n * animated with CSS.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsIndicator]',\n exportAs: 'rdxTabsIndicator',\n host: {\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[style.--active-tab-top.px]': 'geometry()?.top',\n '[style.--active-tab-right.px]': 'geometry()?.right',\n '[style.--active-tab-bottom.px]': 'geometry()?.bottom',\n '[style.--active-tab-left.px]': 'geometry()?.left',\n '[style.--active-tab-width.px]': 'geometry()?.width',\n '[style.--active-tab-height.px]': 'geometry()?.height'\n }\n})\nexport class RdxTabsIndicator {\n protected readonly rootContext = injectTabsRootContext();\n private readonly destroyRef = inject(DestroyRef);\n\n /** @ignore */\n protected readonly geometry = signal<TabGeometry | null>(null);\n\n constructor() {\n // Re-measure whenever the selection, orientation or the list element changes.\n effect(() => {\n this.rootContext.value();\n this.rootContext.orientation();\n this.rootContext.tabListElement();\n this.scheduleMeasure();\n });\n\n afterNextRender(() => {\n const list = untracked(this.rootContext.tabListElement);\n if (!list || typeof ResizeObserver === 'undefined') {\n this.measure();\n return;\n }\n\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(list);\n this.destroyRef.onDestroy(() => observer.disconnect());\n this.measure();\n });\n }\n\n private scheduleMeasure(): void {\n if (typeof requestAnimationFrame === 'undefined') {\n this.measure();\n return;\n }\n requestAnimationFrame(() => this.measure());\n }\n\n private measure(): void {\n const list = untracked(this.rootContext.tabListElement);\n const value = untracked(this.rootContext.value);\n\n if (!list || value == null || typeof document === 'undefined') {\n this.geometry.set(null);\n return;\n }\n\n const tab = document.getElementById(makeTabId(this.rootContext.baseId, value));\n if (!tab) {\n this.geometry.set(null);\n return;\n }\n\n const listRect = list.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n\n // Measure `left` / `top` relative to the list's scrollable content origin rather than its\n // visible edge. When the list is a scroll container (e.g. its tabs overflow inside a Scroll\n // Area), the indicator is an absolutely positioned child of that container and scrolls along\n // with the content, so these offsets must be content-relative to stay aligned with the tab.\n // For non-scrolling lists `scrollLeft` / `scrollTop` are `0`, leaving the geometry unchanged.\n // `right` / `bottom` stay visible-edge relative — there is no unambiguous content-relative\n // meaning for them inside a scroll container, and the moving indicator uses `left`/`top`.\n const scrollLeft = list.scrollLeft;\n const scrollTop = list.scrollTop;\n\n this.geometry.set({\n top: tabRect.top - listRect.top + scrollTop,\n right: listRect.right - tabRect.right,\n bottom: listRect.bottom - tabRect.bottom,\n left: tabRect.left - listRect.left + scrollLeft,\n width: tabRect.width,\n height: tabRect.height\n });\n }\n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxCompositeMetadata, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { RdxTabsTabMetadata } from './utils';\n\n/**\n * Groups the individual tab buttons and manages keyboard navigation.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsList]',\n exportAs: 'rdxTabsList',\n hostDirectives: [RdxCompositeRoot],\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': 'rootContext.orientation() === \"vertical\" ? \"vertical\" : undefined',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()'\n }\n})\nexport class RdxTabsList {\n protected readonly rootContext = injectTabsRootContext();\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n\n /**\n * Whether a tab is activated when it receives focus (automatic activation).\n * When `false`, tabs are only activated on click or Enter/Space.\n *\n * @default false\n */\n readonly activateOnFocus = input(false, { transform: booleanAttribute });\n\n /**\n * Whether keyboard navigation should loop from the last tab back to the first.\n *\n * @default true\n */\n readonly loopFocus = input(true, { transform: booleanAttribute });\n\n private readonly tabMap = computed(() => {\n const map = new Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>();\n\n this.compositeRoot.itemMap().forEach((metadata, element) => {\n if (isTabsTabMetadata(metadata)) {\n map.set(element, metadata);\n }\n });\n\n return map;\n });\n\n private readonly tabMetadata = computed(() => Array.from(this.tabMap().values()));\n\n private readonly disabledIndices = computed(() =>\n this.tabMetadata()\n .filter((metadata) => metadata.disabled)\n .map((metadata) => metadata.index)\n );\n\n private readonly activeIndex = computed(() => {\n const value = this.rootContext.value();\n const metadata = this.tabMetadata().find((tab) => tab.value === value);\n\n return metadata?.index ?? -1;\n });\n\n constructor() {\n this.rootContext.setTabListElement(this.elementRef.nativeElement);\n\n effect(() => {\n this.compositeRoot.setOrientation(this.rootContext.orientation());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.compositeRoot.setDisabledIndices([]);\n });\n\n effect(() => {\n this.rootContext.setTabMap(this.tabMap());\n });\n\n effect(() => {\n const activeIndex = this.activeIndex();\n\n if (activeIndex === -1) {\n return;\n }\n\n const list = this.elementRef.nativeElement;\n const activeElement = list.ownerDocument.activeElement;\n\n if (activeElement && list.contains(activeElement)) {\n return;\n }\n\n if (this.disabledIndices().includes(activeIndex)) {\n const firstEnabledIndex = this.tabMetadata().find((metadata) => !metadata.disabled)?.index;\n\n if (firstEnabledIndex !== undefined) {\n this.compositeRoot.setHighlightedIndex(firstEnabledIndex);\n }\n return;\n }\n\n this.compositeRoot.setHighlightedIndex(activeIndex);\n });\n\n effect(() => this.rootContext.setActivateOnFocus(this.activateOnFocus()));\n }\n}\n\nfunction isTabsTabMetadata(metadata: RdxCompositeMetadata): metadata is RdxCompositeMetadata<RdxTabsTabMetadata> {\n return (\n typeof metadata['disabled'] === 'boolean' &&\n typeof metadata['id'] === 'string' &&\n Object.prototype.hasOwnProperty.call(metadata, 'value')\n );\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked\n} from '@angular/core';\nimport { RdxCompositeListItem } from '@radix-ng/primitives/composite';\nimport { useTransitionStatus } from '@radix-ng/primitives/core';\nimport { provideRdxPresenceContext } from '@radix-ng/primitives/presence';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\nconst panelPresenceContext = () => ({ present: inject(RdxTabsPanel).present });\n\n/**\n * A panel displayed when its corresponding tab is active.\n *\n * By default the panel stays in the DOM and is toggled with the `hidden` attribute. To unmount the\n * contents while inactive (Base UI's default `keepMounted: false`), nest a `*rdxTabsPanelPresence`\n * structural directive inside it; set `keepMounted` to keep the contents mounted regardless.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsPanel]',\n exportAs: 'rdxTabsPanel',\n providers: [provideRdxPresenceContext(panelPresenceContext)],\n hostDirectives: [RdxCompositeListItem],\n host: {\n role: 'tabpanel',\n '[attr.id]': 'panelId()',\n '[attr.tabindex]': 'active() ? 0 : -1',\n '[attr.aria-labelledby]': 'tabId()',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-index]': 'index()',\n '[attr.data-hidden]': 'active() ? undefined : \"\"',\n '[attr.data-starting-style]': 'transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-ending-style]': 'transitionStatus() === \"ending\" ? \"\" : undefined',\n '[hidden]': 'hidden()'\n }\n})\nexport class RdxTabsPanel {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly listItem = inject(RdxCompositeListItem, { self: true });\n protected readonly rootContext = injectTabsRootContext();\n\n /**\n * A unique value that associates the panel with a tab.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * Keep the panel contents mounted in the DOM while inactive (the contents are still hidden).\n * Only relevant together with `*rdxTabsPanelPresence`, which otherwise unmounts them.\n *\n * @default false\n */\n readonly keepMounted = input(false, { transform: booleanAttribute });\n\n private readonly transition = useTransitionStatus(() => {});\n\n /** Reactive enter/exit transition phase (`'starting'` | `'ending'` | `undefined`). */\n readonly transitionStatus = this.transition.status;\n\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly tabId = computed(() => {\n const value = this.value();\n\n for (const tabMetadata of this.rootContext.tabMap().values()) {\n if (tabMetadata.value === value) {\n return tabMetadata.id;\n }\n }\n\n return makeTabId(this.rootContext.baseId, value);\n });\n\n /** Whether this panel's tab is currently selected. */\n readonly active = computed(() => this.rootContext.value() === this.value());\n\n /** `true` once a `*rdxTabsPanelPresence` child takes over mounting. */\n private readonly hasPresence = signal(false);\n\n /**\n * Whether the contents should be present for `*rdxTabsPanelPresence`. Flips with `active` so the\n * presence directive owns the exit-animation timing (it keeps the node mounted until its exit\n * `@keyframes` finishes); `keepMounted` keeps them mounted regardless.\n */\n readonly present = computed(() => this.keepMounted() || this.active());\n\n /**\n * The `hidden` attribute value. The panel is shown while active or while its exit transition\n * runs. When a presence child unmounts the contents we no longer force `hidden` (the empty\n * element renders nothing), unless `keepMounted` keeps the inactive contents around.\n */\n protected readonly hidden = computed(\n () => !this.active() && this.transitionStatus() !== 'ending' && (!this.hasPresence() || this.keepMounted())\n );\n\n /** @ignore Index of the panel in DOM order. */\n protected readonly index = this.listItem.index;\n\n private previousActive = false;\n private isFirstRun = true;\n\n constructor() {\n const unregister = this.transition.registerElement(this.elementRef.nativeElement);\n inject(DestroyRef).onDestroy(unregister);\n\n effect(() => {\n this.listItem.setMetadata({\n id: this.panelId(),\n value: this.value()\n });\n });\n\n effect(() => {\n const active = this.active();\n\n // Settle the initial state without playing an enter transition.\n if (this.isFirstRun) {\n this.isFirstRun = false;\n this.previousActive = active;\n return;\n }\n\n if (active !== this.previousActive) {\n this.previousActive = active;\n untracked(() => this.transition.start(active));\n }\n });\n }\n\n /** @ignore Called by `RdxTabsPanelPresence` so the panel stops forcing `hidden`. */\n markHasPresence(): void {\n this.hasPresence.set(true);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RdxPresenceDirective } from '@radix-ng/primitives/presence';\nimport { RdxTabsPanel } from './tabs-panel';\n\n/**\n * Structural directive that mounts the tab panel contents only while the panel is active,\n * unmounting them once the exit animation finishes. Apply it inside an `[rdxTabsPanel]` to get\n * Base UI's default unmounting behavior; combine with `keepMounted` on the panel to keep the\n * contents mounted instead.\n *\n * The presence state is read from the parent panel through {@link RdxPresenceDirective}.\n */\n@Directive({\n selector: 'ng-template[rdxTabsPanelPresence]',\n hostDirectives: [RdxPresenceDirective]\n})\nexport class RdxTabsPanelPresence {\n constructor() {\n inject(RdxTabsPanel).markHasPresence();\n }\n}\n","import { Directive, effect, inject, input, model, output, signal, untracked } from '@angular/core';\nimport { RdxCompositeList, RdxCompositeMetadata } from '@radix-ng/primitives/composite';\nimport {\n createCancelableChangeEventDetails,\n DataOrientation,\n injectId,\n RdxCancelableChangeEventDetails\n} from '@radix-ng/primitives/core';\nimport { provideTabsRootContext, RdxTabsRootContext } from './tabs-root-context';\nimport { RdxTabsActivationDirection, RdxTabsTabMetadata, RdxTabsValue } from './utils';\n\nexport type RdxTabsValueChangeReason = 'none' | 'disabled' | 'missing' | 'initial';\nexport type RdxTabsValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxTabsValueChangeReason> & {\n activationDirection: RdxTabsActivationDirection;\n};\n\nexport interface RdxTabsValueChangeEvent {\n value: RdxTabsValue;\n eventDetails: RdxTabsValueChangeEventDetails;\n}\n\nconst rootContext = (): RdxTabsRootContext => {\n const root = inject(RdxTabsRoot);\n\n return {\n baseId: root.baseId,\n value: root.value,\n orientation: root.orientation,\n activationDirection: root.activationDirection.asReadonly(),\n activateOnFocus: root.activateOnFocus.asReadonly(),\n tabListElement: root.tabListElement.asReadonly(),\n tabMap: root.tabMap.asReadonly(),\n setValue: (value, event, reason) => root.setValue(value, event, reason as RdxTabsValueChangeReason | undefined),\n setActivateOnFocus: (value) => root.activateOnFocus.set(value),\n setTabListElement: (element) => root.tabListElement.set(element),\n setTabMap: (map) => root.tabMap.set(map)\n };\n};\n\n/**\n * Groups the tabs and the corresponding panels.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsRoot]',\n exportAs: 'rdxTabsRoot',\n providers: [provideTabsRootContext(rootContext)],\n hostDirectives: [RdxCompositeList],\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-activation-direction]': 'activationDirection()'\n }\n})\nexport class RdxTabsRoot {\n /** @ignore */\n readonly baseId = injectId('rdx-tabs-');\n\n /**\n * The value of the currently selected tab. Use together with `(onValueChange)` for controlled state.\n */\n readonly value = model<RdxTabsValue | undefined>();\n\n /**\n * The value of the tab that should be initially selected when uncontrolled.\n * When omitted, Base UI parity uses `0` as the implicit default and falls back to the first enabled tab.\n *\n * @default 0\n */\n readonly defaultValue = input<RdxTabsValue | undefined>(undefined);\n\n /**\n * The orientation the tabs are laid out. Controls arrow-key navigation\n * (left/right vs. up/down).\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /**\n * Event emitted when the selected tab changes.\n *\n * `eventDetails.reason` is `'none'` for user-initiated changes, `'initial'` for the first automatic\n * uncontrolled selection, `'disabled'` when an uncontrolled selection falls back from a disabled tab,\n * and `'missing'` when it falls back from a removed tab. Automatic changes are not cancelable.\n */\n readonly onValueChange = output<RdxTabsValueChangeEvent>();\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly activateOnFocus = signal(false);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabListElement = signal<HTMLElement | null>(null);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabMap = signal(new Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>());\n\n /** @ignore */\n readonly activationDirection = signal<RdxTabsActivationDirection>('none');\n\n private readonly externallyControlled = signal(false);\n private hasObservedValue = false;\n private previousObservedValue: RdxTabsValue | undefined;\n private internalValueCommit = false;\n private hasAppliedDefaultValue = false;\n private initialDefaultValue: RdxTabsValue | undefined;\n private shouldNotifyInitialValueChange = true;\n private shouldHonorDisabledDefaultValue = false;\n private didRegisterTabs = false;\n private lastKnownTabElement: HTMLElement | undefined;\n\n constructor() {\n effect(() => {\n const currentValue = this.value();\n\n if (this.internalValueCommit) {\n this.internalValueCommit = false;\n this.hasObservedValue = true;\n this.previousObservedValue = currentValue;\n return;\n }\n\n if (!this.hasObservedValue) {\n this.hasObservedValue = true;\n this.previousObservedValue = currentValue;\n if (currentValue !== undefined) {\n this.externallyControlled.set(true);\n }\n return;\n }\n\n if (currentValue !== this.previousObservedValue) {\n this.externallyControlled.set(true);\n this.previousObservedValue = currentValue;\n }\n });\n\n effect(() => {\n if (this.hasAppliedDefaultValue || untracked(this.value) !== undefined) {\n return;\n }\n\n const defaultValue = this.defaultValue();\n const hasExplicitDefaultValue = defaultValue !== undefined;\n this.hasAppliedDefaultValue = true;\n this.initialDefaultValue = defaultValue ?? 0;\n this.shouldNotifyInitialValueChange = !hasExplicitDefaultValue;\n this.shouldHonorDisabledDefaultValue = hasExplicitDefaultValue;\n untracked(() => this.commitValue(this.initialDefaultValue!));\n });\n\n effect(() => {\n const tabMap = this.tabMap();\n const value = this.value();\n\n if (this.externallyControlled()) {\n return;\n }\n\n if (tabMap.size === 0) {\n if (this.didRegisterTabs && value !== null && !this.lastKnownTabElement?.isConnected) {\n untracked(() => this.commitAutomaticValueChange(null, 'missing'));\n }\n return;\n }\n\n this.didRegisterTabs = true;\n this.lastKnownTabElement = tabMap.keys().next().value;\n\n const selectedTabMetadata = getTabMetadataByValue(tabMap, value);\n const firstEnabledTabValue = getFirstEnabledTabValue(tabMap);\n const selectionIsDisabled = selectedTabMetadata?.disabled;\n const selectionIsMissing = selectedTabMetadata == null && value !== null;\n\n if (!selectionIsDisabled && value === this.initialDefaultValue) {\n this.shouldHonorDisabledDefaultValue = false;\n }\n\n if (this.shouldHonorDisabledDefaultValue && selectionIsDisabled && value === this.initialDefaultValue) {\n return;\n }\n\n const shouldNotifyInitialValueChange = this.shouldNotifyInitialValueChange;\n\n if (selectionIsDisabled || selectionIsMissing) {\n const fallbackValue = firstEnabledTabValue ?? null;\n\n if (value === fallbackValue) {\n this.shouldNotifyInitialValueChange = false;\n return;\n }\n\n let fallbackReason: RdxTabsValueChangeReason = 'missing';\n if (shouldNotifyInitialValueChange) {\n fallbackReason = 'initial';\n } else if (selectionIsDisabled) {\n fallbackReason = 'disabled';\n }\n\n untracked(() => this.commitAutomaticValueChange(fallbackValue, fallbackReason));\n return;\n }\n\n if (shouldNotifyInitialValueChange && selectedTabMetadata != null) {\n untracked(() => this.notifyAutomaticValueChange(value, 'initial'));\n this.shouldNotifyInitialValueChange = false;\n }\n });\n }\n\n /** @ignore */\n setValue(value: RdxTabsValue, event?: Event, reason: RdxTabsValueChangeReason = 'none'): void {\n const previous = this.value();\n if (previous === value) {\n return;\n }\n\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails: baseEventDetails } = createCancelableChangeEventDetails(\n reason,\n event ?? new Event('tabs.value-change'),\n trigger\n );\n const eventDetails = baseEventDetails as RdxTabsValueChangeEventDetails;\n const activationDirection = computeActivationDirection(previous, value, this.orientation(), this.tabMap());\n eventDetails.activationDirection = activationDirection;\n\n this.onValueChange.emit({ value, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.activationDirection.set(activationDirection);\n this.commitValue(value);\n }\n\n private commitValue(value: RdxTabsValue): void {\n this.internalValueCommit = true;\n this.value.set(value);\n }\n\n private commitAutomaticValueChange(value: RdxTabsValue, reason: RdxTabsValueChangeReason): void {\n this.activationDirection.set('none');\n this.commitValue(value);\n this.notifyAutomaticValueChange(value, reason);\n this.shouldNotifyInitialValueChange = false;\n }\n\n private notifyAutomaticValueChange(value: RdxTabsValue | undefined, reason: RdxTabsValueChangeReason): void {\n if (value === undefined) {\n return;\n }\n\n const { eventDetails: baseEventDetails } = createCancelableChangeEventDetails(\n reason,\n new Event('tabs.value-change')\n );\n const eventDetails = baseEventDetails as RdxTabsValueChangeEventDetails;\n eventDetails.activationDirection = 'none';\n this.onValueChange.emit({ value, eventDetails });\n }\n}\n\nfunction getTabMetadataByValue(\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>,\n value: RdxTabsValue | undefined\n): RdxCompositeMetadata<RdxTabsTabMetadata> | undefined {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata.value === value) {\n return tabMetadata;\n }\n }\n\n return undefined;\n}\n\nfunction getFirstEnabledTabValue(\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>\n): RdxTabsValue | undefined {\n for (const tabMetadata of tabMap.values()) {\n if (!tabMetadata.disabled) {\n return tabMetadata.value;\n }\n }\n\n return undefined;\n}\n\nfunction computeActivationDirection(\n previous: RdxTabsValue | undefined,\n next: RdxTabsValue,\n orientation: DataOrientation,\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>\n): RdxTabsActivationDirection {\n if (previous == null || next == null) {\n return 'none';\n }\n\n let previousTab: HTMLElement | null = null;\n let nextTab: HTMLElement | null = null;\n let previousIndex = -1;\n let nextIndex = -1;\n\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata.value === previous) {\n previousTab = tabElement;\n previousIndex = tabMetadata.index;\n }\n if (tabMetadata.value === next) {\n nextTab = tabElement;\n nextIndex = tabMetadata.index;\n }\n if (previousTab && nextTab) {\n break;\n }\n }\n\n if (!previousTab || !nextTab || previousIndex === nextIndex) {\n return inferActivationDirectionFromValues(previous, next, orientation);\n }\n\n const previousRect = previousTab.getBoundingClientRect();\n const nextRect = nextTab.getBoundingClientRect();\n\n if (orientation === 'horizontal') {\n if (nextRect.left < previousRect.left) {\n return 'left';\n }\n if (nextRect.left > previousRect.left) {\n return 'right';\n }\n return nextIndex > previousIndex ? 'right' : 'left';\n }\n\n if (nextRect.top < previousRect.top) {\n return 'up';\n }\n if (nextRect.top > previousRect.top) {\n return 'down';\n }\n return nextIndex > previousIndex ? 'down' : 'up';\n}\n\nfunction inferActivationDirectionFromValues(\n previous: RdxTabsValue,\n next: RdxTabsValue,\n orientation: DataOrientation\n): RdxTabsActivationDirection {\n if (previous !== next && typeof previous === 'number' && typeof next === 'number') {\n if (orientation === 'horizontal') {\n return next > previous ? 'right' : 'left';\n }\n\n return next > previous ? 'down' : 'up';\n }\n\n if (previous !== next && typeof previous === 'string' && typeof next === 'string') {\n if (orientation === 'horizontal') {\n return next > previous ? 'right' : 'left';\n }\n\n return next > previous ? 'down' : 'up';\n }\n\n return 'none';\n}\n","import { booleanAttribute, computed, Directive, effect, inject, input } from '@angular/core';\nimport { RdxCompositeItem } from '@radix-ng/primitives/composite';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\n/**\n * An individual interactive tab button that activates its corresponding panel.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsTab]',\n exportAs: 'rdxTabsTab',\n hostDirectives: [RdxCompositeItem],\n host: {\n '[attr.type]': 'nativeButton() ? \"button\" : undefined',\n role: 'tab',\n '[attr.id]': 'tabId()',\n '[attr.aria-selected]': 'active()',\n '[attr.aria-controls]': 'panelId()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : undefined',\n '[attr.disabled]': 'null',\n '[attr.data-composite-item-active]': 'active() ? \"\" : undefined',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(focus)': 'onFocus($event)'\n }\n})\nexport class RdxTabsTab {\n protected readonly rootContext = injectTabsRootContext();\n private readonly compositeItem = inject(RdxCompositeItem, { self: true });\n\n /**\n * A unique value that associates the tab with a panel.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * When `true`, prevents the user from interacting with the tab.\n * Disabled tabs remain focusable during composite keyboard navigation, matching Base UI.\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the host element is a native button. When `true`, `type=\"button\"` is applied.\n *\n * @default true\n */\n readonly nativeButton = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n /**\n * Optional id for the tab element. When omitted, an id is derived from the root id and tab value.\n */\n readonly id = input<string | undefined>(undefined);\n\n /** @ignore */\n protected readonly tabId = computed(() => this.id() ?? makeTabId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n\n /** @ignore */\n protected readonly active = computed(() => this.rootContext.value() === this.value());\n\n private isPressing = false;\n private isMainButton = false;\n\n constructor() {\n effect(() => {\n this.compositeItem.setMetadata({\n disabled: this.disabled(),\n id: this.tabId(),\n value: this.value()\n });\n });\n }\n\n /** @ignore */\n protected onClick(event: MouseEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n this.rootContext.setValue(this.value(), event, 'none');\n }\n\n /** @ignore */\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.disabled() && (event.key === ' ' || event.key === 'Enter')) {\n this.rootContext.setValue(this.value(), event, 'none');\n }\n }\n\n /** @ignore */\n protected onPointerDown(event: PointerEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n this.isPressing = true;\n this.isMainButton = event.button === 0;\n\n const ownerDocument = event.currentTarget instanceof HTMLElement ? event.currentTarget.ownerDocument : document;\n ownerDocument.addEventListener(\n 'pointerup',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n ownerDocument.addEventListener(\n 'pointercancel',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n ownerDocument.addEventListener(\n 'blur',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n }\n\n /** @ignore */\n protected onFocus(event: FocusEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n if (this.rootContext.activateOnFocus() && (!this.isPressing || this.isMainButton)) {\n this.rootContext.setValue(this.value(), event, 'none');\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTabsIndicator } from './src/tabs-indicator';\nimport { RdxTabsList } from './src/tabs-list';\nimport { RdxTabsPanel } from './src/tabs-panel';\nimport { RdxTabsPanelPresence } from './src/tabs-panel-presence';\nimport { RdxTabsRoot } from './src/tabs-root';\nimport { RdxTabsTab } from './src/tabs-tab';\n\nexport * from './src/tabs-indicator';\nexport * from './src/tabs-list';\nexport * from './src/tabs-panel';\nexport * from './src/tabs-panel-presence';\nexport * from './src/tabs-root';\nexport * from './src/tabs-root-context';\nexport * from './src/tabs-tab';\nexport type { RdxTabsActivationDirection, RdxTabsValue } from './src/utils';\n\nexport const tabsImports = [RdxTabsRoot, RdxTabsList, RdxTabsTab, RdxTabsPanel, RdxTabsPanelPresence, RdxTabsIndicator];\n\n@NgModule({\n imports: [...tabsImports],\n exports: [...tabsImports]\n})\nexport class RdxTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { model, input, booleanAttribute, output, computed, signal, effect, untracked, Directive, inject } from '@angular/core';
|
|
2
|
+
import { model, input, booleanAttribute, output, computed, signal, effect, untracked, Directive, inject, ElementRef } from '@angular/core';
|
|
3
|
+
import * as i1 from '@radix-ng/primitives/composite';
|
|
4
|
+
import { RdxCompositeRoot } from '@radix-ng/primitives/composite';
|
|
3
5
|
import { createCancelableChangeEventDetails, createContext, provideValueAccessor } from '@radix-ng/primitives/core';
|
|
4
6
|
import { injectDirection } from '@radix-ng/primitives/direction-provider';
|
|
5
|
-
import
|
|
6
|
-
import { RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus';
|
|
7
|
+
import { injectToolbarRootContext, injectToolbarGroupContext } from '@radix-ng/primitives/toolbar';
|
|
7
8
|
|
|
8
9
|
/** Builds the shared context a {@link RdxToggle} reads when it belongs to this group. */
|
|
9
10
|
function toggleGroupContext(instance) {
|
|
10
11
|
return {
|
|
11
12
|
value: instance.pressedValues,
|
|
12
13
|
disabled: instance.isDisabled,
|
|
13
|
-
multiple: instance.multiple,
|
|
14
14
|
orientation: instance.orientation,
|
|
15
|
-
|
|
15
|
+
isValueInitialized: instance.isValueInitialized,
|
|
16
|
+
toggle: (value, event, eventDetails) => instance.toggle(value, event, eventDetails)
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
|
-
* Shared state and behavior for the toggle group. Concrete directives add the
|
|
20
|
+
* Shared state and behavior for the toggle group. Concrete directives add the composite root
|
|
20
21
|
* ({@link RdxToggleGroup}) or omit it when an ancestor already owns focus, e.g. a toolbar
|
|
21
22
|
* ({@link RdxToggleGroupWithoutFocus}).
|
|
22
23
|
*/
|
|
@@ -51,9 +52,11 @@ class RdxToggleGroupBase {
|
|
|
51
52
|
this.onValueChange = output();
|
|
52
53
|
/** @ignore */
|
|
53
54
|
this.pressedValues = computed(() => this.value() ?? [], ...(ngDevMode ? [{ debugName: "pressedValues" }] : /* istanbul ignore next */ []));
|
|
55
|
+
/** @ignore */
|
|
56
|
+
this.isValueInitialized = computed(() => this.value() !== undefined || this.defaultValue() !== undefined, ...(ngDevMode ? [{ debugName: "isValueInitialized" }] : /* istanbul ignore next */ []));
|
|
54
57
|
this.accessorDisabled = signal(false, ...(ngDevMode ? [{ debugName: "accessorDisabled" }] : /* istanbul ignore next */ []));
|
|
55
58
|
/** @ignore */
|
|
56
|
-
this.isDisabled = computed(() => this.disabled() || this.accessorDisabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
59
|
+
this.isDisabled = computed(() => this.disabled() || this.accessorDisabled() || this.isExternallyDisabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
57
60
|
effect(() => {
|
|
58
61
|
const initial = this.defaultValue();
|
|
59
62
|
if (initial !== undefined && untracked(this.value) === undefined) {
|
|
@@ -61,8 +64,12 @@ class RdxToggleGroupBase {
|
|
|
61
64
|
}
|
|
62
65
|
});
|
|
63
66
|
}
|
|
67
|
+
/** @ignore Extra disabled state inherited from composite parents such as Toolbar. */
|
|
68
|
+
isExternallyDisabled() {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
64
71
|
/** @ignore */
|
|
65
|
-
toggle(value, event) {
|
|
72
|
+
toggle(value, event, eventDetails) {
|
|
66
73
|
if (this.isDisabled()) {
|
|
67
74
|
return;
|
|
68
75
|
}
|
|
@@ -74,10 +81,10 @@ class RdxToggleGroupBase {
|
|
|
74
81
|
else {
|
|
75
82
|
next = current.includes(value) ? [] : [value];
|
|
76
83
|
}
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
this.onValueChange.emit({ value: next, eventDetails });
|
|
80
|
-
if (
|
|
84
|
+
const resolvedEventDetails = eventDetails ??
|
|
85
|
+
createCancelableChangeEventDetails('none', event ?? new Event('toggle-group.value-change'), event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined).eventDetails;
|
|
86
|
+
this.onValueChange.emit({ value: next, eventDetails: resolvedEventDetails });
|
|
87
|
+
if (resolvedEventDetails.isCanceled()) {
|
|
81
88
|
return;
|
|
82
89
|
}
|
|
83
90
|
this.value.set(next);
|
|
@@ -118,7 +125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
118
125
|
const [injectToggleGroupContext, provideToggleGroupContext] = createContext('RdxToggleGroupContext', 'components/toggle-group');
|
|
119
126
|
|
|
120
127
|
/**
|
|
121
|
-
* A set of two-state buttons that can be toggled on or off. Owns
|
|
128
|
+
* A set of two-state buttons that can be toggled on or off. Owns composite keyboard focus over its
|
|
122
129
|
* `[rdxToggle]` children.
|
|
123
130
|
*
|
|
124
131
|
* @see https://base-ui.com/react/components/toggle-group
|
|
@@ -126,6 +133,7 @@ const [injectToggleGroupContext, provideToggleGroupContext] = createContext('Rdx
|
|
|
126
133
|
class RdxToggleGroup extends RdxToggleGroupBase {
|
|
127
134
|
constructor() {
|
|
128
135
|
super();
|
|
136
|
+
this.elementRef = inject(ElementRef);
|
|
129
137
|
/** Text direction for arrow-key navigation. */
|
|
130
138
|
this.dirInput = input(undefined, { ...(ngDevMode ? { debugName: "dirInput" } : /* istanbul ignore next */ {}), alias: 'dir' });
|
|
131
139
|
this.dir = injectDirection(this.dirInput);
|
|
@@ -135,39 +143,76 @@ class RdxToggleGroup extends RdxToggleGroupBase {
|
|
|
135
143
|
* @default true
|
|
136
144
|
*/
|
|
137
145
|
this.loopFocus = input(true, { ...(ngDevMode ? { debugName: "loopFocus" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
138
|
-
this.
|
|
146
|
+
this.compositeRoot = inject(RdxCompositeRoot, { self: true });
|
|
147
|
+
this.itemMetadata = computed(() => Array.from(this.compositeRoot.itemMap().values()).filter(isToggleItemMetadata), ...(ngDevMode ? [{ debugName: "itemMetadata" }] : /* istanbul ignore next */ []));
|
|
148
|
+
this.disabledIndices = computed(() => this.itemMetadata()
|
|
149
|
+
.filter((metadata) => metadata.disabled)
|
|
150
|
+
.map((metadata) => metadata.index), ...(ngDevMode ? [{ debugName: "disabledIndices" }] : /* istanbul ignore next */ []));
|
|
151
|
+
this.activeIndex = computed(() => {
|
|
152
|
+
const pressedValues = this.pressedValues();
|
|
153
|
+
if (pressedValues.length === 0) {
|
|
154
|
+
return -1;
|
|
155
|
+
}
|
|
156
|
+
return this.itemMetadata().find((metadata) => pressedValues.includes(metadata.value))?.index ?? -1;
|
|
157
|
+
}, ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
139
158
|
effect(() => {
|
|
140
|
-
this.
|
|
141
|
-
this.
|
|
142
|
-
this.
|
|
159
|
+
this.compositeRoot.setOrientation(this.orientation());
|
|
160
|
+
this.compositeRoot.setDir(this.dir());
|
|
161
|
+
this.compositeRoot.setLoopFocus(this.loopFocus());
|
|
162
|
+
this.compositeRoot.setEnableHomeAndEndKeys(true);
|
|
163
|
+
});
|
|
164
|
+
effect(() => {
|
|
165
|
+
this.compositeRoot.setDisabledIndices(this.disabledIndices());
|
|
166
|
+
});
|
|
167
|
+
effect(() => {
|
|
168
|
+
const activeIndex = this.activeIndex();
|
|
169
|
+
if (activeIndex === -1 || this.disabledIndices().includes(activeIndex)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const activeElement = this.elementRef.nativeElement.ownerDocument.activeElement;
|
|
173
|
+
if (activeElement && this.elementRef.nativeElement.contains(activeElement)) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
this.compositeRoot.setHighlightedIndex(activeIndex);
|
|
143
177
|
});
|
|
144
178
|
}
|
|
145
179
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
146
180
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxToggleGroup, isStandalone: true, selector: "[rdxToggleGroup]", inputs: { dirInput: { classPropertyName: "dirInput", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, loopFocus: { classPropertyName: "loopFocus", publicName: "loopFocus", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
147
181
|
provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroup))),
|
|
148
182
|
provideValueAccessor(RdxToggleGroup)
|
|
149
|
-
], exportAs: ["rdxToggleGroup"], usesInheritance: true, hostDirectives: [{ directive: i1.
|
|
183
|
+
], exportAs: ["rdxToggleGroup"], usesInheritance: true, hostDirectives: [{ directive: i1.RdxCompositeRoot }], ngImport: i0 }); }
|
|
150
184
|
}
|
|
151
185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxToggleGroup, decorators: [{
|
|
152
186
|
type: Directive,
|
|
153
187
|
args: [{
|
|
154
188
|
selector: '[rdxToggleGroup]',
|
|
155
189
|
exportAs: 'rdxToggleGroup',
|
|
156
|
-
hostDirectives: [
|
|
190
|
+
hostDirectives: [RdxCompositeRoot],
|
|
157
191
|
providers: [
|
|
158
192
|
provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroup))),
|
|
159
193
|
provideValueAccessor(RdxToggleGroup)
|
|
160
194
|
]
|
|
161
195
|
}]
|
|
162
196
|
}], ctorParameters: () => [], propDecorators: { dirInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], loopFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "loopFocus", required: false }] }] } });
|
|
197
|
+
function isToggleItemMetadata(metadata) {
|
|
198
|
+
return typeof metadata['disabled'] === 'boolean' && typeof metadata['value'] === 'string';
|
|
199
|
+
}
|
|
163
200
|
|
|
164
201
|
/**
|
|
165
|
-
* A toggle group that does NOT create its own
|
|
202
|
+
* A toggle group that does NOT create its own composite root, for use inside a container that
|
|
166
203
|
* already owns keyboard focus (e.g. a toolbar). The `[rdxToggle]` children register with the nearest
|
|
167
|
-
* ancestor
|
|
204
|
+
* ancestor composite root instead. Mirrors Base UI's behavior of skipping its composite root
|
|
168
205
|
* when nested in a toolbar.
|
|
169
206
|
*/
|
|
170
207
|
class RdxToggleGroupWithoutFocus extends RdxToggleGroupBase {
|
|
208
|
+
constructor() {
|
|
209
|
+
super(...arguments);
|
|
210
|
+
this.toolbarRootContext = injectToolbarRootContext(true);
|
|
211
|
+
this.toolbarGroupContext = injectToolbarGroupContext(true);
|
|
212
|
+
}
|
|
213
|
+
isExternallyDisabled() {
|
|
214
|
+
return (this.toolbarRootContext?.disabled() ?? false) || (this.toolbarGroupContext?.disabled() ?? false);
|
|
215
|
+
}
|
|
171
216
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxToggleGroupWithoutFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
172
217
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxToggleGroupWithoutFocus, isStandalone: true, selector: "[rdxToggleGroupWithoutFocus]", providers: [
|
|
173
218
|
provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroupWithoutFocus))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-toggle-group.mjs","sources":["../../../packages/primitives/toggle-group/src/toggle-group-base.ts","../../../packages/primitives/toggle-group/src/toggle-group-context.ts","../../../packages/primitives/toggle-group/src/toggle-group.ts","../../../packages/primitives/toggle-group/src/toggle-group-without-focus.ts","../../../packages/primitives/toggle-group/radix-ng-primitives-toggle-group.ts"],"sourcesContent":["import { booleanAttribute, computed, Directive, effect, input, model, output, signal, untracked } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport {\n BooleanInput,\n createCancelableChangeEventDetails,\n DataOrientation,\n RdxCancelableChangeEventDetails\n} from '@radix-ng/primitives/core';\nimport { RdxToggleGroupContext } from './toggle-group-context';\n\nexport type RdxToggleGroupValueChangeReason = 'trigger-press' | 'none';\nexport type RdxToggleGroupValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxToggleGroupValueChangeReason>;\n\nexport interface RdxToggleGroupValueChangeEvent {\n value: string[];\n eventDetails: RdxToggleGroupValueChangeEventDetails;\n}\n\n/** Builds the shared context a {@link RdxToggle} reads when it belongs to this group. */\nexport function toggleGroupContext(instance: RdxToggleGroupBase): RdxToggleGroupContext {\n return {\n value: instance.pressedValues,\n disabled: instance.isDisabled,\n multiple: instance.multiple,\n orientation: instance.orientation,\n toggle: (value, event) => instance.toggle(value, event)\n };\n}\n\n/**\n * Shared state and behavior for the toggle group. Concrete directives add the roving-focus group\n * ({@link RdxToggleGroup}) or omit it when an ancestor already owns focus, e.g. a toolbar\n * ({@link RdxToggleGroupWithoutFocus}).\n */\n@Directive({\n host: {\n role: 'group',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'multiple() ? \"\" : undefined',\n '(focusout)': 'onTouched?.()'\n }\n})\nexport abstract class RdxToggleGroupBase implements ControlValueAccessor {\n /**\n * The pressed values. Always an array — a single value is `[value]`. Use with `(onValueChange)`\n * for controlled state.\n */\n readonly value = model<string[]>();\n\n /** The values pressed when the group is initially rendered (uncontrolled). */\n readonly defaultValue = input<string[]>();\n\n /**\n * Whether multiple items can be pressed at the same time.\n *\n * @default false\n */\n readonly multiple = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the whole group is disabled.\n *\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The orientation of the group, controlling arrow-key navigation.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /** Event emitted when the pressed values change. */\n readonly onValueChange = output<RdxToggleGroupValueChangeEvent>();\n\n /** @ignore */\n readonly pressedValues = computed(() => this.value() ?? []);\n\n protected readonly accessorDisabled = signal(false);\n /** @ignore */\n readonly isDisabled = computed(() => this.disabled() || this.accessorDisabled());\n\n private onChange?: (value: string[]) => void;\n protected onTouched?: () => void;\n\n constructor() {\n effect(() => {\n const initial = this.defaultValue();\n if (initial !== undefined && untracked(this.value) === undefined) {\n this.value.set(initial);\n }\n });\n }\n\n /** @ignore */\n toggle(value: string, event?: Event): void {\n if (this.isDisabled()) {\n return;\n }\n\n const current = this.pressedValues();\n let next: string[];\n\n if (this.multiple()) {\n next = current.includes(value) ? current.filter((item) => item !== value) : [...current, value];\n } else {\n next = current.includes(value) ? [] : [value];\n }\n\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails } = createCancelableChangeEventDetails(\n event ? 'trigger-press' : 'none',\n event ?? new Event('toggle-group.value-change'),\n trigger\n );\n this.onValueChange.emit({ value: next, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.value.set(next);\n this.onChange?.(next);\n }\n\n /** @ignore */\n writeValue(value: string[] | string | null): void {\n this.value.set(value == null ? [] : Array.isArray(value) ? value : [value]);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.accessorDisabled.set(isDisabled);\n }\n}\n","import { Signal } from '@angular/core';\nimport { createContext, DataOrientation } from '@radix-ng/primitives/core';\n\n/**\n * Shared state a {@link RdxToggle} reads when it participates in a toggle group.\n */\nexport interface RdxToggleGroupContext {\n /** The currently pressed values. */\n readonly value: Signal<string[]>;\n\n /** Whether the whole group is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** Whether more than one item can be pressed at a time. */\n readonly multiple: Signal<boolean>;\n\n /** The orientation of the group. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Toggle the pressed state of `value` within the group. */\n toggle(value: string, event?: Event): void;\n}\n\nexport const [injectToggleGroupContext, provideToggleGroupContext] = createContext<RdxToggleGroupContext>(\n 'RdxToggleGroupContext',\n 'components/toggle-group'\n);\n","import { booleanAttribute, Directive, effect, inject, input } from '@angular/core';\nimport { BooleanInput, provideValueAccessor } from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { Direction, RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A set of two-state buttons that can be toggled on or off. Owns roving keyboard focus over its\n * `[rdxToggle]` children.\n *\n * @see https://base-ui.com/react/components/toggle-group\n */\n@Directive({\n selector: '[rdxToggleGroup]',\n exportAs: 'rdxToggleGroup',\n hostDirectives: [RdxRovingFocusGroupDirective],\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroup))),\n provideValueAccessor(RdxToggleGroup)\n ]\n})\nexport class RdxToggleGroup extends RdxToggleGroupBase {\n /** Text direction for arrow-key navigation. */\n readonly dirInput = input<Direction | undefined>(undefined, { alias: 'dir' });\n readonly dir = injectDirection(this.dirInput);\n\n /**\n * Whether keyboard navigation should loop from the last item back to the first.\n *\n * @default true\n */\n readonly loopFocus = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n private readonly rovingFocusGroup = inject(RdxRovingFocusGroupDirective, { self: true });\n\n constructor() {\n super();\n\n effect(() => {\n this.rovingFocusGroup.setOrientation(this.orientation());\n this.rovingFocusGroup.setDir(this.dir());\n this.rovingFocusGroup.setLoop(this.loopFocus());\n });\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { provideValueAccessor } from '@radix-ng/primitives/core';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A toggle group that does NOT create its own roving-focus group, for use inside a container that\n * already owns keyboard focus (e.g. a toolbar). The `[rdxToggle]` children register with the nearest\n * ancestor roving-focus group instead. Mirrors Base UI's behavior of skipping its composite root\n * when nested in a toolbar.\n */\n@Directive({\n selector: '[rdxToggleGroupWithoutFocus]',\n exportAs: 'rdxToggleGroupWithoutFocus',\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroupWithoutFocus))),\n provideValueAccessor(RdxToggleGroupWithoutFocus)\n ]\n})\nexport class RdxToggleGroupWithoutFocus extends RdxToggleGroupBase {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-toggle-group.mjs","sources":["../../../packages/primitives/toggle-group/src/toggle-group-base.ts","../../../packages/primitives/toggle-group/src/toggle-group-context.ts","../../../packages/primitives/toggle-group/src/toggle-group.ts","../../../packages/primitives/toggle-group/src/toggle-group-without-focus.ts","../../../packages/primitives/toggle-group/radix-ng-primitives-toggle-group.ts"],"sourcesContent":["import { booleanAttribute, computed, Directive, effect, input, model, output, signal, untracked } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport {\n BooleanInput,\n createCancelableChangeEventDetails,\n DataOrientation,\n RdxCancelableChangeEventDetails\n} from '@radix-ng/primitives/core';\nimport { RdxToggleGroupContext } from './toggle-group-context';\n\nexport type RdxToggleGroupValueChangeReason = 'none';\nexport type RdxToggleGroupValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxToggleGroupValueChangeReason>;\n\nexport interface RdxToggleGroupValueChangeEvent {\n value: string[];\n eventDetails: RdxToggleGroupValueChangeEventDetails;\n}\n\n/** Builds the shared context a {@link RdxToggle} reads when it belongs to this group. */\nexport function toggleGroupContext(instance: RdxToggleGroupBase): RdxToggleGroupContext {\n return {\n value: instance.pressedValues,\n disabled: instance.isDisabled,\n orientation: instance.orientation,\n isValueInitialized: instance.isValueInitialized,\n toggle: (value, event, eventDetails) => instance.toggle(value, event, eventDetails)\n };\n}\n\n/**\n * Shared state and behavior for the toggle group. Concrete directives add the composite root\n * ({@link RdxToggleGroup}) or omit it when an ancestor already owns focus, e.g. a toolbar\n * ({@link RdxToggleGroupWithoutFocus}).\n */\n@Directive({\n host: {\n role: 'group',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-multiple]': 'multiple() ? \"\" : undefined',\n '(focusout)': 'onTouched?.()'\n }\n})\nexport abstract class RdxToggleGroupBase implements ControlValueAccessor {\n /**\n * The pressed values. Always an array — a single value is `[value]`. Use with `(onValueChange)`\n * for controlled state.\n */\n readonly value = model<string[]>();\n\n /** The values pressed when the group is initially rendered (uncontrolled). */\n readonly defaultValue = input<string[]>();\n\n /**\n * Whether multiple items can be pressed at the same time.\n *\n * @default false\n */\n readonly multiple = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the whole group is disabled.\n *\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The orientation of the group, controlling arrow-key navigation.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /** Event emitted when the pressed values change. */\n readonly onValueChange = output<RdxToggleGroupValueChangeEvent>();\n\n /** @ignore */\n readonly pressedValues = computed(() => this.value() ?? []);\n /** @ignore */\n readonly isValueInitialized = computed(() => this.value() !== undefined || this.defaultValue() !== undefined);\n\n protected readonly accessorDisabled = signal(false);\n /** @ignore */\n readonly isDisabled = computed(() => this.disabled() || this.accessorDisabled() || this.isExternallyDisabled());\n\n private onChange?: (value: string[]) => void;\n protected onTouched?: () => void;\n\n constructor() {\n effect(() => {\n const initial = this.defaultValue();\n if (initial !== undefined && untracked(this.value) === undefined) {\n this.value.set(initial);\n }\n });\n }\n\n /** @ignore Extra disabled state inherited from composite parents such as Toolbar. */\n protected isExternallyDisabled(): boolean {\n return false;\n }\n\n /** @ignore */\n toggle(value: string, event?: Event, eventDetails?: RdxToggleGroupValueChangeEventDetails): void {\n if (this.isDisabled()) {\n return;\n }\n\n const current = this.pressedValues();\n let next: string[];\n\n if (this.multiple()) {\n next = current.includes(value) ? current.filter((item) => item !== value) : [...current, value];\n } else {\n next = current.includes(value) ? [] : [value];\n }\n\n const resolvedEventDetails =\n eventDetails ??\n createCancelableChangeEventDetails(\n 'none',\n event ?? new Event('toggle-group.value-change'),\n event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined\n ).eventDetails;\n\n this.onValueChange.emit({ value: next, eventDetails: resolvedEventDetails });\n if (resolvedEventDetails.isCanceled()) {\n return;\n }\n\n this.value.set(next);\n this.onChange?.(next);\n }\n\n /** @ignore */\n writeValue(value: string[] | string | null): void {\n this.value.set(value == null ? [] : Array.isArray(value) ? value : [value]);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.accessorDisabled.set(isDisabled);\n }\n}\n","import { Signal } from '@angular/core';\nimport { createContext, DataOrientation, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';\n\ntype RdxToggleGroupContextChangeReason = 'none';\n\n/**\n * Shared state a {@link RdxToggle} reads when it participates in a toggle group.\n */\nexport interface RdxToggleGroupContext {\n /** The currently pressed values. */\n readonly value: Signal<string[]>;\n\n /** Whether the whole group is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** The orientation of the group. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Whether the group value was initialized by `value` or `defaultValue`. */\n readonly isValueInitialized: Signal<boolean>;\n\n /** Toggle the pressed state of `value` within the group. */\n toggle(\n value: string,\n event?: Event,\n eventDetails?: RdxCancelableChangeEventDetails<RdxToggleGroupContextChangeReason>\n ): void;\n}\n\nexport const [injectToggleGroupContext, provideToggleGroupContext] = createContext<RdxToggleGroupContext>(\n 'RdxToggleGroupContext',\n 'components/toggle-group'\n);\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxCompositeMetadata, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport { BooleanInput, Direction, provideValueAccessor } from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A set of two-state buttons that can be toggled on or off. Owns composite keyboard focus over its\n * `[rdxToggle]` children.\n *\n * @see https://base-ui.com/react/components/toggle-group\n */\n@Directive({\n selector: '[rdxToggleGroup]',\n exportAs: 'rdxToggleGroup',\n hostDirectives: [RdxCompositeRoot],\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroup))),\n provideValueAccessor(RdxToggleGroup)\n ]\n})\nexport class RdxToggleGroup extends RdxToggleGroupBase {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Text direction for arrow-key navigation. */\n readonly dirInput = input<Direction | undefined>(undefined, { alias: 'dir' });\n readonly dir = injectDirection(this.dirInput);\n\n /**\n * Whether keyboard navigation should loop from the last item back to the first.\n *\n * @default true\n */\n readonly loopFocus = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n private readonly itemMetadata = computed(() =>\n Array.from(this.compositeRoot.itemMap().values()).filter(isToggleItemMetadata)\n );\n private readonly disabledIndices = computed(() =>\n this.itemMetadata()\n .filter((metadata) => metadata.disabled)\n .map((metadata) => metadata.index)\n );\n private readonly activeIndex = computed(() => {\n const pressedValues = this.pressedValues();\n if (pressedValues.length === 0) {\n return -1;\n }\n\n return this.itemMetadata().find((metadata) => pressedValues.includes(metadata.value))?.index ?? -1;\n });\n\n constructor() {\n super();\n\n effect(() => {\n this.compositeRoot.setOrientation(this.orientation());\n this.compositeRoot.setDir(this.dir());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.compositeRoot.setDisabledIndices(this.disabledIndices());\n });\n\n effect(() => {\n const activeIndex = this.activeIndex();\n\n if (activeIndex === -1 || this.disabledIndices().includes(activeIndex)) {\n return;\n }\n\n const activeElement = this.elementRef.nativeElement.ownerDocument.activeElement;\n if (activeElement && this.elementRef.nativeElement.contains(activeElement)) {\n return;\n }\n\n this.compositeRoot.setHighlightedIndex(activeIndex);\n });\n }\n}\n\ninterface RdxToggleItemMetadata {\n [key: string]: unknown;\n disabled: boolean;\n value: string;\n}\n\nfunction isToggleItemMetadata(metadata: RdxCompositeMetadata): metadata is RdxCompositeMetadata<RdxToggleItemMetadata> {\n return typeof metadata['disabled'] === 'boolean' && typeof metadata['value'] === 'string';\n}\n","import { Directive, inject } from '@angular/core';\nimport { provideValueAccessor } from '@radix-ng/primitives/core';\nimport { injectToolbarGroupContext, injectToolbarRootContext } from '@radix-ng/primitives/toolbar';\nimport { RdxToggleGroupBase, toggleGroupContext } from './toggle-group-base';\nimport { provideToggleGroupContext } from './toggle-group-context';\n\n/**\n * A toggle group that does NOT create its own composite root, for use inside a container that\n * already owns keyboard focus (e.g. a toolbar). The `[rdxToggle]` children register with the nearest\n * ancestor composite root instead. Mirrors Base UI's behavior of skipping its composite root\n * when nested in a toolbar.\n */\n@Directive({\n selector: '[rdxToggleGroupWithoutFocus]',\n exportAs: 'rdxToggleGroupWithoutFocus',\n providers: [\n provideToggleGroupContext(() => toggleGroupContext(inject(RdxToggleGroupWithoutFocus))),\n provideValueAccessor(RdxToggleGroupWithoutFocus)\n ]\n})\nexport class RdxToggleGroupWithoutFocus extends RdxToggleGroupBase {\n private readonly toolbarRootContext = injectToolbarRootContext(true);\n private readonly toolbarGroupContext = injectToolbarGroupContext(true);\n\n protected override isExternallyDisabled(): boolean {\n return (this.toolbarRootContext?.disabled() ?? false) || (this.toolbarGroupContext?.disabled() ?? false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAkBA;AACM,SAAU,kBAAkB,CAAC,QAA4B,EAAA;IAC3D,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,aAAa;QAC7B,QAAQ,EAAE,QAAQ,CAAC,UAAU;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;AAC/C,QAAA,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY;KACrF;AACL;AAEA;;;;AAIG;MAUmB,kBAAkB,CAAA;AA8CpC,IAAA,WAAA,GAAA;AA7CA;;;AAGG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAY;;QAGzB,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAY;AAEzC;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExF;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExF;;;;AAIG;AACM,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAkB,YAAY,kFAAC;;QAGlD,IAAA,CAAA,aAAa,GAAG,MAAM,EAAkC;;AAGxD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,oFAAC;;QAElD,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,yFAAC;AAE1F,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;;QAE1C,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QAM3G,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,YAAA,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AAC9D,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YAC3B;AACJ,QAAA,CAAC,CAAC;IACN;;IAGU,oBAAoB,GAAA;AAC1B,QAAA,OAAO,KAAK;IAChB;;AAGA,IAAA,MAAM,CAAC,KAAa,EAAE,KAAa,EAAE,YAAoD,EAAA;AACrF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AACpC,QAAA,IAAI,IAAc;AAElB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;QACnG;aAAO;AACH,YAAA,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;QACjD;QAEA,MAAM,oBAAoB,GACtB,YAAY;AACZ,YAAA,kCAAkC,CAC9B,MAAM,EACN,KAAK,IAAI,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAC/C,KAAK,EAAE,aAAa,YAAY,WAAW,GAAG,KAAK,CAAC,aAAa,GAAG,SAAS,CAChF,CAAC,YAAY;AAElB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAC5E,QAAA,IAAI,oBAAoB,CAAC,UAAU,EAAE,EAAE;YACnC;QACJ;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB;;AAGA,IAAA,UAAU,CAAC,KAA+B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/E;;AAGA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC;8GA9GkB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,iCAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,sBAAsB,EAAE,+BAA+B;AACvD,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,YAAY,EAAE;AACjB;AACJ,iBAAA;;;ACbM,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,aAAa,CAC9E,uBAAuB,EACvB,yBAAyB;;ACxB7B;;;;;AAKG;AAUG,MAAO,cAAe,SAAQ,kBAAkB,CAAA;AAgClD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAhCM,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;;QAGhE,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,SAAS,gFAAI,KAAK,EAAE,KAAK,EAAA,CAAG;AACpE,QAAA,IAAA,CAAA,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE7C;;;;AAIG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAwB,IAAI,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;QAEvE,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxD,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACjF;QACgB,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,YAAY;aACZ,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;aACtC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACzC;AACgB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,OAAO,CAAC,CAAC;YACb;YAEA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACtG,QAAA,CAAC,kFAAC;QAKE,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACjE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AAEtC,YAAA,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACpE;YACJ;YAEA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa;AAC/E,YAAA,IAAI,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBACxE;YACJ;AAEA,YAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW,CAAC;AACvD,QAAA,CAAC,CAAC;IACN;8GA5DS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EALZ;YACP,yBAAyB,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC3E,oBAAoB,CAAC,cAAc;AACtC,SAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAT1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,cAAc,EAAE,CAAC,gBAAgB,CAAC;AAClC,oBAAA,SAAS,EAAE;wBACP,yBAAyB,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAA,cAAA,CAAgB,CAAC,CAAC;AAC3E,wBAAA,oBAAoB,CAAA,cAAA;AACvB;AACJ,iBAAA;;AAsED,SAAS,oBAAoB,CAAC,QAA8B,EAAA;AACxD,IAAA,OAAO,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ;AAC7F;;ACvFA;;;;;AAKG;AASG,MAAO,0BAA2B,SAAQ,kBAAkB,CAAA;AARlE,IAAA,WAAA,GAAA;;AASqB,QAAA,IAAA,CAAA,kBAAkB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AACnD,QAAA,IAAA,CAAA,mBAAmB,GAAG,yBAAyB,CAAC,IAAI,CAAC;AAKzE,IAAA;IAHsB,oBAAoB,GAAA;QACnC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;IAC5G;8GANS,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,SAAA,EALxB;YACP,yBAAyB,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvF,oBAAoB,CAAC,0BAA0B;AAClD,SAAA,EAAA,QAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,SAAS,EAAE;wBACP,yBAAyB,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAA,0BAAA,CAA4B,CAAC,CAAC;AACvF,wBAAA,oBAAoB,CAAA,0BAAA;AACvB;AACJ,iBAAA;;;ACnBD;;AAEG;;;;"}
|