@radix-ng/primitives 1.0.0-beta.1 → 1.0.0-beta.3
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/LICENSE +1 -1
- package/README.md +76 -6
- package/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs +30 -24
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-autocomplete.mjs +1786 -0
- package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-calendar.mjs +14 -1
- package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +1983 -0
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
- package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +480 -469
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +11 -0
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs +44 -46
- package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-drawer.mjs +154 -64
- package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +86 -6
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +207 -0
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-input.mjs +85 -4
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +44 -24
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +39 -55
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +36 -51
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +12 -6
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-portal.mjs +107 -17
- package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-presence.mjs +262 -79
- package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs +37 -51
- package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +3 -3
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +469 -258
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tooltip.mjs +39 -42
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
- package/package.json +13 -1
- package/schematics/ng-add/index.js +57 -0
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.d.ts +1 -0
- package/schematics/ng-add/schema.json +6 -0
- package/types/radix-ng-primitives-alert-dialog.d.ts +17 -11
- package/types/radix-ng-primitives-autocomplete.d.ts +596 -0
- package/types/radix-ng-primitives-combobox.d.ts +1310 -0
- package/types/radix-ng-primitives-core.d.ts +148 -56
- package/types/radix-ng-primitives-dialog.d.ts +32 -25
- package/types/radix-ng-primitives-drawer.d.ts +49 -22
- package/types/radix-ng-primitives-field.d.ts +71 -2
- package/types/radix-ng-primitives-form.d.ts +124 -0
- package/types/radix-ng-primitives-input.d.ts +75 -5
- package/types/radix-ng-primitives-menu.d.ts +19 -10
- package/types/radix-ng-primitives-navigation-menu.d.ts +24 -26
- package/types/radix-ng-primitives-popover.d.ts +23 -23
- package/types/radix-ng-primitives-popper.d.ts +7 -1
- package/types/radix-ng-primitives-portal.d.ts +53 -8
- package/types/radix-ng-primitives-presence.d.ts +98 -17
- package/types/radix-ng-primitives-preview-card.d.ts +24 -23
- package/types/radix-ng-primitives-select.d.ts +294 -137
- package/types/radix-ng-primitives-tooltip.d.ts +26 -19
|
@@ -6,7 +6,7 @@ import { RdxRovingFocusGroupDirective, RdxRovingFocusItemDirective } from '@radi
|
|
|
6
6
|
import * as i1$1 from '@radix-ng/primitives/presence';
|
|
7
7
|
import { provideRdxPresenceContext, RdxPresenceDirective } from '@radix-ng/primitives/presence';
|
|
8
8
|
|
|
9
|
-
const [injectTabsRootContext, provideTabsRootContext] = createContext('RdxTabsRootContext');
|
|
9
|
+
const [injectTabsRootContext, provideTabsRootContext] = createContext('RdxTabsRootContext', 'components/tabs');
|
|
10
10
|
|
|
11
11
|
function makeTabId(baseId, value) {
|
|
12
12
|
return `${baseId}-tab-${value}`;
|
|
@@ -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): 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>('RdxTabsRootContext');\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 { DataOrientation, injectId } from '@radix-ng/primitives/core';\nimport { provideTabsRootContext, RdxTabsRootContext } from './tabs-root-context';\nimport { makeTabId, RdxTabsActivationDirection, RdxTabsValue } from './utils';\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) => root.setValue(value),\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<RdxTabsValue>();\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(value: RdxTabsValue): void {\n const previous = this.value();\n if (previous === value) {\n return;\n }\n\n this.activationDirection.set(this.computeDirection(previous, value));\n this.value.set(value);\n this.onValueChange.emit(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()'\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());\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());\n }\n }\n\n /** @ignore */\n protected onFocus(): void {\n if (!this.active() && !this.disabled() && this.rootContext.activateOnFocus()) {\n this.rootContext.setValue(this.value());\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 { 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): 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 { DataOrientation, injectId } from '@radix-ng/primitives/core';\nimport { provideTabsRootContext, RdxTabsRootContext } from './tabs-root-context';\nimport { makeTabId, RdxTabsActivationDirection, RdxTabsValue } from './utils';\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) => root.setValue(value),\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<RdxTabsValue>();\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(value: RdxTabsValue): void {\n const previous = this.value();\n if (previous === value) {\n return;\n }\n\n this.activationDirection.set(this.computeDirection(previous, value));\n this.value.set(value);\n this.onValueChange.emit(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()'\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());\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());\n }\n }\n\n /** @ignore */\n protected onFocus(): void {\n if (!this.active() && !this.disabled() && this.rootContext.activateOnFocus()) {\n this.rootContext.setValue(this.value());\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,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, ElementRef, input, computed, signal, effect, Directive, model, booleanAttribute, contentChildren, linkedSignal, NgModule } from '@angular/core';
|
|
3
|
-
import { useDateField, normalizeDateStep, createFormatter, normalizeHourCycle, getDefaultTime,
|
|
4
|
-
import { toCalendarDateTime, today, getLocalTimeZone, isEqualDay } from '@internationalized/date';
|
|
3
|
+
import { useDateField, isNullish, normalizeDateStep, createFormatter, normalizeHourCycle, getDefaultTime, syncSegmentValues, initializeSegmentValues, isBefore, createContent, watch, isSegmentNavigationKey, ARROW_LEFT, ARROW_RIGHT, provideToken } from '@radix-ng/primitives/core';
|
|
4
|
+
import { toCalendarDateTime, today, getLocalTimeZone, Time, isEqualDay } from '@internationalized/date';
|
|
5
5
|
|
|
6
6
|
const TIME_FIELDS_ROOT_CONTEXT = new InjectionToken('TIME_FIELDS_ROOT_CONTEXT');
|
|
7
7
|
function injectTimeFieldsRootContext() {
|
|
@@ -112,6 +112,22 @@ function convertValue(value, date = today(getLocalTimeZone())) {
|
|
|
112
112
|
}
|
|
113
113
|
return toCalendarDateTime(date, value);
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Map the internal edit buffer (`convertedModelValue`, always a date-bearing value
|
|
117
|
+
* so the segment editor has a date context) back onto the public `value` model.
|
|
118
|
+
* A date-bearing model keeps its shape; a time-only model is exposed as a plain `Time`.
|
|
119
|
+
*/
|
|
120
|
+
function toModelValue(value, current) {
|
|
121
|
+
if (current && 'day' in current) {
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
return new Time(value.hour, value.minute, value.second, value.millisecond);
|
|
125
|
+
}
|
|
126
|
+
function isSameTimeValue(a, b) {
|
|
127
|
+
if (isNullish(a) || isNullish(b))
|
|
128
|
+
return a === b;
|
|
129
|
+
return a.compare(b) === 0;
|
|
130
|
+
}
|
|
115
131
|
class RdxTimeFieldRootDirective {
|
|
116
132
|
constructor() {
|
|
117
133
|
/**
|
|
@@ -226,7 +242,7 @@ class RdxTimeFieldRootDirective {
|
|
|
226
242
|
}),
|
|
227
243
|
computation: ({ value, granularity, formatter }) => value
|
|
228
244
|
? { ...syncSegmentValues({ value: value, formatter }) }
|
|
229
|
-
: { ...initializeSegmentValues(granularity) } });
|
|
245
|
+
: { ...initializeSegmentValues(granularity, true) } });
|
|
230
246
|
/**
|
|
231
247
|
* @ignore
|
|
232
248
|
*/
|
|
@@ -299,6 +315,14 @@ class RdxTimeFieldRootDirective {
|
|
|
299
315
|
// @ts-expect-error
|
|
300
316
|
this.convertedPlaceholder().compare(value) !== 0))
|
|
301
317
|
this.placeholder.set(value.copy());
|
|
318
|
+
// Segment editing (via `useDateField`) writes the internal `convertedModelValue`
|
|
319
|
+
// buffer; mirror it back onto the public `value` model so two-way binding and
|
|
320
|
+
// `valueChange` fire. The guard keeps this idempotent and breaks the feedback loop
|
|
321
|
+
// (`value` → `convertedModelValue` source → here) once the values agree.
|
|
322
|
+
const next = isNullish(value) ? undefined : toModelValue(value, this.value());
|
|
323
|
+
if (!isSameTimeValue(this.value(), next)) {
|
|
324
|
+
this.value.set(next);
|
|
325
|
+
}
|
|
302
326
|
});
|
|
303
327
|
}
|
|
304
328
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-time-field.mjs","sources":["../../../packages/primitives/time-field/src/time-field-context.token.ts","../../../packages/primitives/time-field/src/time-field-input.directive.ts","../../../packages/primitives/time-field/src/time-field-root.directive.ts","../../../packages/primitives/time-field/index.ts","../../../packages/primitives/time-field/radix-ng-primitives-time-field.ts"],"sourcesContent":["import { inject, InjectionToken, InputSignal, ModelSignal, Signal, WritableSignal } from '@angular/core';\nimport { DateStep, Formatter, HourCycle, SegmentValueObj, TimeValue } from '@radix-ng/primitives/core';\n\nexport interface TimeFieldContextToken {\n locale: InputSignal<string>;\n value: ModelSignal<TimeValue | undefined>;\n placeholder: ModelSignal<TimeValue>;\n isInvalid: Signal<boolean>;\n disabled: InputSignal<boolean>;\n readonly: InputSignal<boolean>;\n formatter: Signal<Formatter>;\n hourCycle: InputSignal<HourCycle>;\n segmentValues: WritableSignal<SegmentValueObj>;\n focusNext: () => void;\n setFocusedElement: (el: HTMLElement) => void;\n convertedModelValue: WritableSignal<TimeValue | undefined>;\n convertedPlaceholder: WritableSignal<TimeValue>;\n step$: Signal<DateStep>;\n}\n\nexport const TIME_FIELDS_ROOT_CONTEXT = new InjectionToken<TimeFieldContextToken>('TIME_FIELDS_ROOT_CONTEXT');\n\nexport function injectTimeFieldsRootContext(): TimeFieldContextToken {\n return inject(TIME_FIELDS_ROOT_CONTEXT);\n}\n","import { computed, Directive, effect, ElementRef, inject, input, signal, WritableSignal } from '@angular/core';\nimport { DateValue } from '@internationalized/date';\nimport { SegmentPart, useDateField } from '@radix-ng/primitives/core';\nimport { injectTimeFieldsRootContext } from './time-field-context.token';\n\n@Directive({\n selector: '[rdxTimeFieldInput]',\n host: {\n '[attr.contenteditable]': 'disabled() || readonly() ? false : part() !== \"literal\"',\n '[attr.data-rdx-date-field-segment]': 'part()',\n '[attr.aria-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-invalid]': 'isInvalid() ? \"\" : undefined',\n '[attr.aria-invalid]': 'isInvalid() ? true : undefined',\n\n '(mousedown)': 'part() !== \"literal\" && handleSegmentClick($event)',\n '(keydown)': 'part() !== \"literal\" && handleSegmentKeydown($event)',\n '(focus)': 'part() !== \"literal\" && onFocus($event)',\n '(focusout)': 'part() !== \"literal\" && onFocusOut()'\n }\n})\nexport class RdxTimeFieldInputDirective {\n private readonly el = inject(ElementRef);\n\n /**\n * The host element of this segment. Consumed by the root to collect focusable\n * segments in DOM order.\n * @ignore\n */\n readonly element: HTMLElement = this.el.nativeElement;\n\n private readonly rootContext = injectTimeFieldsRootContext();\n\n /**\n * The part of the date to render\n * `'hour' | 'minute' | 'second' | 'dayPeriod' | 'literal' | 'timeZoneName'`\n */\n readonly part = input<SegmentPart>();\n\n /**\n * @ignore\n */\n readonly disabled = computed(() => this.rootContext.disabled());\n\n /**\n * @ignore\n */\n readonly readonly = computed(() => this.rootContext.readonly());\n\n /**\n * @ignore\n */\n readonly isInvalid = computed(() => this.rootContext.isInvalid());\n\n /**\n * @ignore\n */\n readonly hasLeftFocus = signal<boolean>(true);\n\n /**\n * @ignore\n */\n readonly lastKeyZero = signal<boolean>(false);\n\n private readonly fieldData = computed(() => {\n return useDateField({\n hasLeftFocus: this.hasLeftFocus,\n lastKeyZero: this.lastKeyZero,\n placeholder: this.rootContext.convertedPlaceholder as unknown as WritableSignal<DateValue>,\n hourCycle: this.rootContext.hourCycle(),\n segmentValues: this.rootContext.segmentValues,\n formatter: this.rootContext.formatter(),\n part: <SegmentPart>this.part(),\n disabled: this.rootContext.disabled,\n readonly: this.rootContext.readonly,\n modelValue: this.rootContext.convertedModelValue as unknown as WritableSignal<DateValue>,\n focusNext: this.rootContext.focusNext,\n step: this.rootContext.step$\n });\n });\n\n private readonly attributes = computed(() => this.fieldData().attributes());\n\n /**\n * @ignore\n */\n handleSegmentClick: (e: Event) => void;\n\n /**\n * @ignore\n */\n handleSegmentKeydown: (e: Event) => void;\n\n constructor() {\n effect(() => {\n const { handleSegmentClick, handleSegmentKeydown } = this.fieldData();\n this.handleSegmentKeydown = handleSegmentKeydown as (e: Event) => void;\n this.handleSegmentClick = handleSegmentClick as (e: Event) => void;\n });\n\n effect(() => {\n const attrs = this.attributes();\n Object.entries(attrs).forEach(([attr, value]) => {\n this.el.nativeElement.setAttribute(attr, String(value));\n });\n });\n }\n\n /**\n * @ignore\n */\n onFocus(e: Event) {\n this.rootContext.setFocusedElement(e.target as HTMLElement);\n }\n\n /**\n * @ignore\n */\n onFocusOut() {\n this.hasLeftFocus.set(true);\n }\n}\n","import {\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n input,\n linkedSignal,\n model,\n Signal,\n signal\n} from '@angular/core';\nimport { DateValue, getLocalTimeZone, isEqualDay, toCalendarDateTime, today } from '@internationalized/date';\nimport {\n ARROW_LEFT,\n ARROW_RIGHT,\n BooleanInput,\n createContent,\n createFormatter,\n DateStep,\n Direction,\n Formatter,\n getDefaultTime,\n Granularity,\n HourCycle,\n initializeSegmentValues,\n isBefore,\n isNullish,\n isSegmentNavigationKey,\n normalizeDateStep,\n normalizeHourCycle,\n provideToken,\n SegmentValueObj,\n syncSegmentValues,\n TimeValue,\n watch\n} from '@radix-ng/primitives/core';\nimport { TIME_FIELDS_ROOT_CONTEXT } from './time-field-context.token';\nimport { RdxTimeFieldInputDirective } from './time-field-input.directive';\n\nfunction convertValue(value: TimeValue, date: DateValue = today(getLocalTimeZone())) {\n if (value && 'day' in value) {\n return value;\n }\n\n return toCalendarDateTime(date, value);\n}\n\n@Directive({\n selector: '[rdxTimeFieldRoot]',\n exportAs: 'rdxTimeFieldRoot',\n providers: [provideToken(TIME_FIELDS_ROOT_CONTEXT, RdxTimeFieldRootDirective)],\n host: {\n role: 'group',\n '[attr.aria-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'readonly() ? \"\" : undefined',\n '[attr.data-invalid]': 'isInvalid() ? \"\" : undefined',\n '[attr.dir]': 'dir()',\n\n '(keydown)': 'onKeydown($event)'\n }\n})\nexport class RdxTimeFieldRootDirective {\n /**\n * The controlled checked state of the calendar.\n */\n readonly value = model<TimeValue | undefined>();\n\n /**\n * The hour cycle to use for formatting times. Defaults to the locale preference\n */\n readonly hourCycle = input<HourCycle>();\n\n /**\n * The granularity to use for formatting the field. Defaults to 'day' if a CalendarDate is provided, otherwise defaults to 'minute'.\n * The field will render segments for each part of the date up to and including the specified granularity.\n */\n readonly granularity = input<Granularity>();\n\n /**\n * The locale to use for formatting dates.\n */\n readonly locale = input<string>('en');\n\n readonly dir = input<Direction>('ltr');\n\n /**\n * The minimum valid date that can be entered.\n */\n readonly minValue = input<TimeValue>();\n\n /**\n * The maximum valid date that can be entered.\n */\n readonly maxValue = input<TimeValue>();\n\n /**\n * Whether or not to hide the time zone segment of the field.\n */\n readonly hideTimeZone = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether or not the field is readonly.\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The stepping interval for the time fields. Defaults to 1\n */\n readonly step = input<DateStep>();\n\n readonly step$ = computed(() => normalizeDateStep(this.step()));\n\n /**\n * Locale- and hour-cycle-aware formatter. Recomputed whenever `locale` or\n * `hourCycle` change so segments always render with the current settings.\n * @ignore\n */\n readonly formatter: Signal<Formatter> = computed(() =>\n createFormatter(this.locale(), {\n hourCycle: normalizeHourCycle(this.hourCycle())\n })\n );\n\n /**\n * @ignore\n */\n readonly defaultDate = computed(() =>\n getDefaultTime({\n defaultPlaceholder: undefined,\n defaultValue: this.value()\n })\n );\n\n /**\n * The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view\n */\n readonly placeholder = model<TimeValue | undefined>(this.defaultDate().copy());\n\n // Internal state\n\n /**\n * Segment input parts, collected from the projected content in DOM order. This\n * stays in sync with `segmentContents()` (granularity / locale / value changes\n * add or remove segments) instead of being captured once after view init.\n * @ignore\n */\n private readonly segmentInputs = contentChildren(RdxTimeFieldInputDirective);\n\n /**\n * The focusable (non-literal) segment elements, in DOM order.\n * @ignore\n */\n readonly segmentElements = computed(() =>\n this.segmentInputs()\n .filter((seg) => seg.part() !== 'literal')\n .map((seg) => seg.element)\n );\n\n /**\n * @ignore\n */\n readonly currentFocusedElement = signal<HTMLElement | null>(null);\n\n /**\n * @ignore\n */\n readonly inferredGranularity = computed(() => this.granularity() ?? 'minute');\n\n readonly convertedMinValue = computed(() => (this.minValue() ? convertValue(this.minValue()!) : undefined));\n readonly convertedMaxValue = computed(() => (this.maxValue() ? convertValue(this.maxValue()!) : undefined));\n\n readonly convertedModelValue = linkedSignal({\n source: () => {\n if (isNullish(this.value())) return this.value();\n\n return convertValue(this.value()!);\n },\n computation: (value: TimeValue | undefined) => {\n return value;\n }\n });\n\n readonly convertedPlaceholder = linkedSignal({\n source: () => {\n return convertValue(<TimeValue>this.placeholder());\n },\n computation: (value: TimeValue) => {\n return value;\n }\n });\n\n /**\n * The per-segment values. Writable so segment editing (via `useDateField`) can\n * update individual parts, but re-synced from the model whenever the value,\n * granularity or formatter change — so a controlled `value` set after init is\n * reflected, and an empty field re-initializes when granularity changes.\n * @ignore\n */\n readonly segmentValues = linkedSignal<\n { value: TimeValue | undefined; granularity: Granularity; formatter: Formatter },\n SegmentValueObj\n >({\n source: () => ({\n value: this.convertedModelValue(),\n granularity: this.inferredGranularity(),\n formatter: this.formatter()\n }),\n computation: ({ value, granularity, formatter }) =>\n value\n ? { ...syncSegmentValues({ value: <DateValue>value, formatter }) }\n : { ...initializeSegmentValues(granularity) }\n });\n\n /**\n * @ignore\n */\n readonly isInvalid = computed(() => {\n if (!this.value()) return false;\n\n if (\n this.convertedMinValue() &&\n isBefore(<DateValue>this.convertedModelValue(), <DateValue>this.convertedMinValue())\n )\n return true;\n\n if (\n this.convertedMaxValue() &&\n isBefore(<DateValue>this.convertedMaxValue(), <DateValue>this.convertedModelValue())\n )\n return true;\n\n return false;\n });\n\n /**\n * @ignore\n */\n readonly allSegmentContent = computed(() =>\n createContent({\n granularity: this.inferredGranularity(),\n dateRef: <DateValue>this.convertedPlaceholder(),\n formatter: this.formatter(),\n hideTimeZone: this.hideTimeZone(),\n hourCycle: this.hourCycle(),\n segmentValues: this.segmentValues(),\n locale: this.locale,\n isTimeValue: true\n })\n );\n\n /**\n * An array of segments that should be readonly, which prevent user input on them.\n */\n readonly segmentContents = computed(() => this.allSegmentContent().arr);\n\n /**\n * @ignore\n */\n readonly currentSegmentIndex = computed(() =>\n this.segmentElements().findIndex((el) => el === this.currentFocusedElement())\n );\n\n /**\n * @ignore\n */\n readonly prevFocusableSegment = computed(() => {\n const sign = this.dir() === 'rtl' ? -1 : 1;\n const elements = this.segmentElements();\n const index = this.currentSegmentIndex();\n const prevCondition = sign > 0 ? index < 0 : index > elements.length - 1;\n if (prevCondition) return null;\n\n return elements[index - sign];\n });\n\n /**\n * @ignore\n */\n readonly nextFocusableSegment = computed(() => {\n const sign = this.dir() === 'rtl' ? -1 : 1;\n const elements = this.segmentElements();\n const index = this.currentSegmentIndex();\n const nextCondition = sign < 0 ? index < 0 : index > elements.length - 1;\n if (nextCondition) return null;\n\n return elements[index + sign];\n });\n\n /**\n * @ignore\n */\n readonly focusNext = () => {\n this.nextFocusableSegment()?.focus();\n };\n\n constructor() {\n watch([this.convertedModelValue], ([value]) => {\n if (\n !isNullish(value) &&\n (!isEqualDay(<DateValue>this.convertedPlaceholder(), <DateValue>value) ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n this.convertedPlaceholder().compare(value) !== 0)\n )\n this.placeholder.set(value.copy());\n });\n }\n\n /**\n * @ignore\n */\n onKeydown(event: Event) {\n const keyEvent = event as KeyboardEvent;\n if (!isSegmentNavigationKey(keyEvent.key)) return;\n const code = keyEvent.code;\n\n if (code === ARROW_LEFT) {\n this.prevFocusableSegment()?.focus();\n }\n\n if (code === ARROW_RIGHT) {\n this.nextFocusableSegment()?.focus();\n }\n }\n\n /**\n * @ignore\n */\n setFocusedElement(el: HTMLElement) {\n this.currentFocusedElement.set(el);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTimeFieldInputDirective } from './src/time-field-input.directive';\nimport { RdxTimeFieldRootDirective } from './src/time-field-root.directive';\n\nexport * from './src/time-field-context.token';\nexport * from './src/time-field-input.directive';\nexport * from './src/time-field-root.directive';\n\nconst _imports = [RdxTimeFieldRootDirective, RdxTimeFieldInputDirective];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxTimeFieldModule {}\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-time-field.mjs","sources":["../../../packages/primitives/time-field/src/time-field-context.token.ts","../../../packages/primitives/time-field/src/time-field-input.directive.ts","../../../packages/primitives/time-field/src/time-field-root.directive.ts","../../../packages/primitives/time-field/index.ts","../../../packages/primitives/time-field/radix-ng-primitives-time-field.ts"],"sourcesContent":["import { inject, InjectionToken, InputSignal, ModelSignal, Signal, WritableSignal } from '@angular/core';\nimport { DateStep, Formatter, HourCycle, SegmentValueObj, TimeValue } from '@radix-ng/primitives/core';\n\nexport interface TimeFieldContextToken {\n locale: InputSignal<string>;\n value: ModelSignal<TimeValue | undefined>;\n placeholder: ModelSignal<TimeValue>;\n isInvalid: Signal<boolean>;\n disabled: InputSignal<boolean>;\n readonly: InputSignal<boolean>;\n formatter: Signal<Formatter>;\n hourCycle: InputSignal<HourCycle>;\n segmentValues: WritableSignal<SegmentValueObj>;\n focusNext: () => void;\n setFocusedElement: (el: HTMLElement) => void;\n convertedModelValue: WritableSignal<TimeValue | undefined>;\n convertedPlaceholder: WritableSignal<TimeValue>;\n step$: Signal<DateStep>;\n}\n\nexport const TIME_FIELDS_ROOT_CONTEXT = new InjectionToken<TimeFieldContextToken>('TIME_FIELDS_ROOT_CONTEXT');\n\nexport function injectTimeFieldsRootContext(): TimeFieldContextToken {\n return inject(TIME_FIELDS_ROOT_CONTEXT);\n}\n","import { computed, Directive, effect, ElementRef, inject, input, signal, WritableSignal } from '@angular/core';\nimport { DateValue } from '@internationalized/date';\nimport { SegmentPart, useDateField } from '@radix-ng/primitives/core';\nimport { injectTimeFieldsRootContext } from './time-field-context.token';\n\n@Directive({\n selector: '[rdxTimeFieldInput]',\n host: {\n '[attr.contenteditable]': 'disabled() || readonly() ? false : part() !== \"literal\"',\n '[attr.data-rdx-date-field-segment]': 'part()',\n '[attr.aria-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-invalid]': 'isInvalid() ? \"\" : undefined',\n '[attr.aria-invalid]': 'isInvalid() ? true : undefined',\n\n '(mousedown)': 'part() !== \"literal\" && handleSegmentClick($event)',\n '(keydown)': 'part() !== \"literal\" && handleSegmentKeydown($event)',\n '(focus)': 'part() !== \"literal\" && onFocus($event)',\n '(focusout)': 'part() !== \"literal\" && onFocusOut()'\n }\n})\nexport class RdxTimeFieldInputDirective {\n private readonly el = inject(ElementRef);\n\n /**\n * The host element of this segment. Consumed by the root to collect focusable\n * segments in DOM order.\n * @ignore\n */\n readonly element: HTMLElement = this.el.nativeElement;\n\n private readonly rootContext = injectTimeFieldsRootContext();\n\n /**\n * The part of the date to render\n * `'hour' | 'minute' | 'second' | 'dayPeriod' | 'literal' | 'timeZoneName'`\n */\n readonly part = input<SegmentPart>();\n\n /**\n * @ignore\n */\n readonly disabled = computed(() => this.rootContext.disabled());\n\n /**\n * @ignore\n */\n readonly readonly = computed(() => this.rootContext.readonly());\n\n /**\n * @ignore\n */\n readonly isInvalid = computed(() => this.rootContext.isInvalid());\n\n /**\n * @ignore\n */\n readonly hasLeftFocus = signal<boolean>(true);\n\n /**\n * @ignore\n */\n readonly lastKeyZero = signal<boolean>(false);\n\n private readonly fieldData = computed(() => {\n return useDateField({\n hasLeftFocus: this.hasLeftFocus,\n lastKeyZero: this.lastKeyZero,\n placeholder: this.rootContext.convertedPlaceholder as unknown as WritableSignal<DateValue>,\n hourCycle: this.rootContext.hourCycle(),\n segmentValues: this.rootContext.segmentValues,\n formatter: this.rootContext.formatter(),\n part: <SegmentPart>this.part(),\n disabled: this.rootContext.disabled,\n readonly: this.rootContext.readonly,\n modelValue: this.rootContext.convertedModelValue as unknown as WritableSignal<DateValue>,\n focusNext: this.rootContext.focusNext,\n step: this.rootContext.step$\n });\n });\n\n private readonly attributes = computed(() => this.fieldData().attributes());\n\n /**\n * @ignore\n */\n handleSegmentClick: (e: Event) => void;\n\n /**\n * @ignore\n */\n handleSegmentKeydown: (e: Event) => void;\n\n constructor() {\n effect(() => {\n const { handleSegmentClick, handleSegmentKeydown } = this.fieldData();\n this.handleSegmentKeydown = handleSegmentKeydown as (e: Event) => void;\n this.handleSegmentClick = handleSegmentClick as (e: Event) => void;\n });\n\n effect(() => {\n const attrs = this.attributes();\n Object.entries(attrs).forEach(([attr, value]) => {\n this.el.nativeElement.setAttribute(attr, String(value));\n });\n });\n }\n\n /**\n * @ignore\n */\n onFocus(e: Event) {\n this.rootContext.setFocusedElement(e.target as HTMLElement);\n }\n\n /**\n * @ignore\n */\n onFocusOut() {\n this.hasLeftFocus.set(true);\n }\n}\n","import {\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n input,\n linkedSignal,\n model,\n Signal,\n signal\n} from '@angular/core';\nimport { DateValue, getLocalTimeZone, isEqualDay, Time, toCalendarDateTime, today } from '@internationalized/date';\nimport {\n ARROW_LEFT,\n ARROW_RIGHT,\n BooleanInput,\n createContent,\n createFormatter,\n DateStep,\n Direction,\n Formatter,\n getDefaultTime,\n Granularity,\n HourCycle,\n initializeSegmentValues,\n isBefore,\n isNullish,\n isSegmentNavigationKey,\n normalizeDateStep,\n normalizeHourCycle,\n provideToken,\n SegmentValueObj,\n syncSegmentValues,\n TimeValue,\n watch\n} from '@radix-ng/primitives/core';\nimport { TIME_FIELDS_ROOT_CONTEXT } from './time-field-context.token';\nimport { RdxTimeFieldInputDirective } from './time-field-input.directive';\n\nfunction convertValue(value: TimeValue, date: DateValue = today(getLocalTimeZone())) {\n if (value && 'day' in value) {\n return value;\n }\n\n return toCalendarDateTime(date, value);\n}\n\n/**\n * Map the internal edit buffer (`convertedModelValue`, always a date-bearing value\n * so the segment editor has a date context) back onto the public `value` model.\n * A date-bearing model keeps its shape; a time-only model is exposed as a plain `Time`.\n */\nfunction toModelValue(value: TimeValue, current: TimeValue | undefined): TimeValue {\n if (current && 'day' in current) {\n return value;\n }\n\n return new Time(value.hour, value.minute, value.second, value.millisecond);\n}\n\nfunction isSameTimeValue(a: TimeValue | undefined, b: TimeValue | undefined): boolean {\n if (isNullish(a) || isNullish(b)) return a === b;\n return (a as { compare(other: TimeValue): number }).compare(b) === 0;\n}\n\n@Directive({\n selector: '[rdxTimeFieldRoot]',\n exportAs: 'rdxTimeFieldRoot',\n providers: [provideToken(TIME_FIELDS_ROOT_CONTEXT, RdxTimeFieldRootDirective)],\n host: {\n role: 'group',\n '[attr.aria-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'readonly() ? \"\" : undefined',\n '[attr.data-invalid]': 'isInvalid() ? \"\" : undefined',\n '[attr.dir]': 'dir()',\n\n '(keydown)': 'onKeydown($event)'\n }\n})\nexport class RdxTimeFieldRootDirective {\n /**\n * The controlled checked state of the calendar.\n */\n readonly value = model<TimeValue | undefined>();\n\n /**\n * The hour cycle to use for formatting times. Defaults to the locale preference\n */\n readonly hourCycle = input<HourCycle>();\n\n /**\n * The granularity to use for formatting the field. Defaults to 'day' if a CalendarDate is provided, otherwise defaults to 'minute'.\n * The field will render segments for each part of the date up to and including the specified granularity.\n */\n readonly granularity = input<Granularity>();\n\n /**\n * The locale to use for formatting dates.\n */\n readonly locale = input<string>('en');\n\n readonly dir = input<Direction>('ltr');\n\n /**\n * The minimum valid date that can be entered.\n */\n readonly minValue = input<TimeValue>();\n\n /**\n * The maximum valid date that can be entered.\n */\n readonly maxValue = input<TimeValue>();\n\n /**\n * Whether or not to hide the time zone segment of the field.\n */\n readonly hideTimeZone = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether or not the field is readonly.\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The stepping interval for the time fields. Defaults to 1\n */\n readonly step = input<DateStep>();\n\n readonly step$ = computed(() => normalizeDateStep(this.step()));\n\n /**\n * Locale- and hour-cycle-aware formatter. Recomputed whenever `locale` or\n * `hourCycle` change so segments always render with the current settings.\n * @ignore\n */\n readonly formatter: Signal<Formatter> = computed(() =>\n createFormatter(this.locale(), {\n hourCycle: normalizeHourCycle(this.hourCycle())\n })\n );\n\n /**\n * @ignore\n */\n readonly defaultDate = computed(() =>\n getDefaultTime({\n defaultPlaceholder: undefined,\n defaultValue: this.value()\n })\n );\n\n /**\n * The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view\n */\n readonly placeholder = model<TimeValue | undefined>(this.defaultDate().copy());\n\n // Internal state\n\n /**\n * Segment input parts, collected from the projected content in DOM order. This\n * stays in sync with `segmentContents()` (granularity / locale / value changes\n * add or remove segments) instead of being captured once after view init.\n * @ignore\n */\n private readonly segmentInputs = contentChildren(RdxTimeFieldInputDirective);\n\n /**\n * The focusable (non-literal) segment elements, in DOM order.\n * @ignore\n */\n readonly segmentElements = computed(() =>\n this.segmentInputs()\n .filter((seg) => seg.part() !== 'literal')\n .map((seg) => seg.element)\n );\n\n /**\n * @ignore\n */\n readonly currentFocusedElement = signal<HTMLElement | null>(null);\n\n /**\n * @ignore\n */\n readonly inferredGranularity = computed(() => this.granularity() ?? 'minute');\n\n readonly convertedMinValue = computed(() => (this.minValue() ? convertValue(this.minValue()!) : undefined));\n readonly convertedMaxValue = computed(() => (this.maxValue() ? convertValue(this.maxValue()!) : undefined));\n\n readonly convertedModelValue = linkedSignal({\n source: () => {\n if (isNullish(this.value())) return this.value();\n\n return convertValue(this.value()!);\n },\n computation: (value: TimeValue | undefined) => {\n return value;\n }\n });\n\n readonly convertedPlaceholder = linkedSignal({\n source: () => {\n return convertValue(<TimeValue>this.placeholder());\n },\n computation: (value: TimeValue) => {\n return value;\n }\n });\n\n /**\n * The per-segment values. Writable so segment editing (via `useDateField`) can\n * update individual parts, but re-synced from the model whenever the value,\n * granularity or formatter change — so a controlled `value` set after init is\n * reflected, and an empty field re-initializes when granularity changes.\n * @ignore\n */\n readonly segmentValues = linkedSignal<\n { value: TimeValue | undefined; granularity: Granularity; formatter: Formatter },\n SegmentValueObj\n >({\n source: () => ({\n value: this.convertedModelValue(),\n granularity: this.inferredGranularity(),\n formatter: this.formatter()\n }),\n computation: ({ value, granularity, formatter }) =>\n value\n ? { ...syncSegmentValues({ value: <DateValue>value, formatter }) }\n : { ...initializeSegmentValues(granularity, true) }\n });\n\n /**\n * @ignore\n */\n readonly isInvalid = computed(() => {\n if (!this.value()) return false;\n\n if (\n this.convertedMinValue() &&\n isBefore(<DateValue>this.convertedModelValue(), <DateValue>this.convertedMinValue())\n )\n return true;\n\n if (\n this.convertedMaxValue() &&\n isBefore(<DateValue>this.convertedMaxValue(), <DateValue>this.convertedModelValue())\n )\n return true;\n\n return false;\n });\n\n /**\n * @ignore\n */\n readonly allSegmentContent = computed(() =>\n createContent({\n granularity: this.inferredGranularity(),\n dateRef: <DateValue>this.convertedPlaceholder(),\n formatter: this.formatter(),\n hideTimeZone: this.hideTimeZone(),\n hourCycle: this.hourCycle(),\n segmentValues: this.segmentValues(),\n locale: this.locale,\n isTimeValue: true\n })\n );\n\n /**\n * An array of segments that should be readonly, which prevent user input on them.\n */\n readonly segmentContents = computed(() => this.allSegmentContent().arr);\n\n /**\n * @ignore\n */\n readonly currentSegmentIndex = computed(() =>\n this.segmentElements().findIndex((el) => el === this.currentFocusedElement())\n );\n\n /**\n * @ignore\n */\n readonly prevFocusableSegment = computed(() => {\n const sign = this.dir() === 'rtl' ? -1 : 1;\n const elements = this.segmentElements();\n const index = this.currentSegmentIndex();\n const prevCondition = sign > 0 ? index < 0 : index > elements.length - 1;\n if (prevCondition) return null;\n\n return elements[index - sign];\n });\n\n /**\n * @ignore\n */\n readonly nextFocusableSegment = computed(() => {\n const sign = this.dir() === 'rtl' ? -1 : 1;\n const elements = this.segmentElements();\n const index = this.currentSegmentIndex();\n const nextCondition = sign < 0 ? index < 0 : index > elements.length - 1;\n if (nextCondition) return null;\n\n return elements[index + sign];\n });\n\n /**\n * @ignore\n */\n readonly focusNext = () => {\n this.nextFocusableSegment()?.focus();\n };\n\n constructor() {\n watch([this.convertedModelValue], ([value]) => {\n if (\n !isNullish(value) &&\n (!isEqualDay(<DateValue>this.convertedPlaceholder(), <DateValue>value) ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n this.convertedPlaceholder().compare(value) !== 0)\n )\n this.placeholder.set(value.copy());\n\n // Segment editing (via `useDateField`) writes the internal `convertedModelValue`\n // buffer; mirror it back onto the public `value` model so two-way binding and\n // `valueChange` fire. The guard keeps this idempotent and breaks the feedback loop\n // (`value` → `convertedModelValue` source → here) once the values agree.\n const next = isNullish(value) ? undefined : toModelValue(value, this.value());\n if (!isSameTimeValue(this.value(), next)) {\n this.value.set(next);\n }\n });\n }\n\n /**\n * @ignore\n */\n onKeydown(event: Event) {\n const keyEvent = event as KeyboardEvent;\n if (!isSegmentNavigationKey(keyEvent.key)) return;\n const code = keyEvent.code;\n\n if (code === ARROW_LEFT) {\n this.prevFocusableSegment()?.focus();\n }\n\n if (code === ARROW_RIGHT) {\n this.nextFocusableSegment()?.focus();\n }\n }\n\n /**\n * @ignore\n */\n setFocusedElement(el: HTMLElement) {\n this.currentFocusedElement.set(el);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTimeFieldInputDirective } from './src/time-field-input.directive';\nimport { RdxTimeFieldRootDirective } from './src/time-field-root.directive';\n\nexport * from './src/time-field-context.token';\nexport * from './src/time-field-input.directive';\nexport * from './src/time-field-root.directive';\n\nconst _imports = [RdxTimeFieldRootDirective, RdxTimeFieldInputDirective];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxTimeFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -390,7 +390,7 @@ function useToastSwipe(config) {
|
|
|
390
390
|
});
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
const [injectRdxToastRootContext, provideRdxToastRootContext] = createContext('RdxToastRootContext');
|
|
393
|
+
const [injectRdxToastRootContext, provideRdxToastRootContext] = createContext('RdxToastRootContext', 'components/toast');
|
|
394
394
|
const rootContext = () => {
|
|
395
395
|
const instance = inject(RdxToastRoot);
|
|
396
396
|
return {
|