- Name
service- Kind
- parameter
- Type
TabsService<TValue>- Requirement
- required
tabs headless API
The core connector and vanilla mount are always visible. Use the framework choice to inspect native composition, props, outputs, context and hooks for the selected adapter.
@grassroot/ui-headless-core/tabs
Core connector and vanilla API
connectTabs
functiondeclare function connectTabs<TValue extends TabsItemValue = string>(service: TabsService<TValue>, scope: PartScope, options?: TabsConnectOptions): TabsApi<TValue>;serviceTabsService<TValue>scopePartScopeoptionsTabsConnectOptionsreturnTabsApi<TValue>- Name
scope- Kind
- parameter
- Type
PartScope- Requirement
- required
- Name
options- Kind
- parameter
- Type
TabsConnectOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
TabsApi<TValue>- Requirement
- n/a
mountTabs
functiondeclare function mountTabs(container: HTMLElement, options: MountTabsOptions): TabsMount;containerHTMLElementoptionsMountTabsOptionsreturnTabsMount- Name
container- Kind
- parameter
- Type
HTMLElement- Requirement
- required
- Name
options- Kind
- parameter
- Type
MountTabsOptions- Requirement
- required
- Name
return- Kind
- return value
- Type
TabsMount- Requirement
- n/a
MountTabsOptions
interfaceinterface MountTabsOptions extends TabsInput { readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void; /** Render callback for one trigger's content; default = tab.value as textContent. */ readonly renderTrigger?: (button: HTMLElement, tab: TabsItem) => void; /** Render callback for one panel's content; default = tab.value as textContent. */ readonly renderContent?: (panel: HTMLElement, tab: TabsItem) => void;}dir"ltr" | "rtl"onValueChange(detail: TabsValueChangeDetail) => voidrenderContent(panel: HTMLElement, tab: TabsItem) => voidrenderTrigger(button: HTMLElement, tab: TabsItem) => void- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Description
- —
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
- Description
- —
- Name
renderContent- Kind
- property
- Type
(panel: HTMLElement, tab: TabsItem) => void- Requirement
- optional
- Description
- Render callback for one panel's content; default = tab.value as textContent.
- Name
renderTrigger- Kind
- property
- Type
(button: HTMLElement, tab: TabsItem) => void- Requirement
- optional
- Description
- Render callback for one trigger's content; default = tab.value as textContent.
runTabsCommand
functionTabs-shaped command runner — see the module doc comment above for why this exists instead of reusing/modifying the frozen `runUiCommand`. Pass this as the `runCommand` option when constructing the Tabs `Service` (never called by `connectTabs` itself, which stays a pure prop-getter factory exactly like `connectSelect`).
declare function runTabsCommand<TValue extends TabsItemValue = string>(command: TabsCommand<TValue>, scope: PartScope, options?: { readonly onValueChange?: (detail: { value: TValue; reason: TabsChangeReason; }) => void;}): void;commandTabsCommand<TValue>scopePartScopeoptions{
readonly onValueChange?: (detail: {
value: TValue;
reason: TabsChangeReason;
}) => void;
}returnvoid- Name
command- Kind
- parameter
- Type
TabsCommand<TValue>- Requirement
- required
- Name
scope- Kind
- parameter
- Type
PartScope- Requirement
- required
- Name
options- Kind
- parameter
- Type
{ readonly onValueChange?: (detail: { value: TValue; reason: TabsChangeReason; }) => void; }- Requirement
- optional
- Name
return- Kind
- return value
- Type
void- Requirement
- n/a
TabsActivation
typetype TabsActivation = "automatic" | "manual";tabsAnatomy
valueexport declare const tabsAnatomy: { readonly scope: "tabs"; readonly parts: readonly ["root", "list", "trigger", "content"];};partsreadonly ["root", "list", "trigger", "content"]scope"tabs"- Name
parts- Kind
- property
- Type
readonly ["root", "list", "trigger", "content"]- Requirement
- required
- Name
scope- Kind
- property
- Type
"tabs"- Requirement
- required
TabsApi
interfaceinterface TabsApi<TValue extends TabsItemValue = string> { rootProps(): PartProps; listProps(): PartProps; triggerProps(tab: TabsItem<TValue>): PartProps; contentProps(tab: TabsItem<TValue>): PartProps; readonly value: TValue | undefined; readonly focusedValue: TValue | undefined;}contentProps(tab: TabsItem<TValue>) => PartPropsfocusedValueTValue | undefinedlistProps() => PartPropsrootProps() => PartPropstriggerProps(tab: TabsItem<TValue>) => PartPropsvalueTValue | undefined- Name
contentProps- Kind
- method
- Type
(tab: TabsItem<TValue>) => PartProps- Requirement
- required
- Name
focusedValue- Kind
- property
- Type
TValue | undefined- Requirement
- required
- Name
listProps- Kind
- method
- Type
() => PartProps- Requirement
- required
- Name
rootProps- Kind
- method
- Type
() => PartProps- Requirement
- required
- Name
triggerProps- Kind
- method
- Type
(tab: TabsItem<TValue>) => PartProps- Requirement
- required
- Name
value- Kind
- property
- Type
TValue | undefined- Requirement
- required
TabsChangeReason
typetype TabsChangeReason = "pointer" | "keyboard" | "programmatic";TabsCommand
typetype TabsCommand<TValue extends TabsItemValue = string> = CommandObject & ({ readonly type: "VALUE_CHANGE_REQUEST"; readonly value: TValue; readonly reason: TabsChangeReason;} | { readonly type: "FOCUS_ITEM"; readonly key: TValue;});TabsConnectOptions
interfaceinterface TabsConnectOptions { readonly dir?: "ltr" | "rtl";}dir"ltr" | "rtl"- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
TabsContext
typetype TabsContext<TValue extends TabsItemValue = string> = { readonly value?: TValue; readonly focusedValue?: TValue; readonly mode: "controlled" | "uncontrolled";};focusedValueTValuemode"controlled" | "uncontrolled"valueTValue- Name
focusedValue- Kind
- property
- Type
TValue- Requirement
- optional
- Name
mode- Kind
- property
- Type
"controlled" | "uncontrolled"- Requirement
- required
- Name
value- Kind
- property
- Type
TValue- Requirement
- optional
TabsEvent
typetype TabsEvent<TValue extends TabsItemValue = string> = { readonly type: "SELECT"; readonly value: TValue; readonly reason: TabsChangeReason;} | { readonly type: "MOVE"; readonly direction: -1 | 1;} | { readonly type: "HOME";} | { readonly type: "END";} | { readonly type: "FOCUS"; readonly value: TValue;} | { readonly type: "BLUR";} | { readonly type: "RESET";};TabsInput
typetype TabsInput<TValue extends TabsItemValue = string> = { readonly tabs: readonly TabsItem<TValue>[]; /** Controlled committed value. Defining it fixes controlled mode at first start. */ readonly value?: TValue; /** Uncontrolled initial committed value. */ readonly defaultValue?: TValue; /** Headless-layer concern; the machine never branches on it. Default "horizontal". */ readonly orientation?: TabsOrientation; /** Default "automatic" — legacy: MOVE/HOME/END select immediately. */ readonly activation?: TabsActivation; /** Default true — legacy wraps at either end. */ readonly loop?: boolean;};activationTabsActivationdefaultValueTValueloopbooleanorientationTabsOrientationtabsreadonly TabsItem<TValue>[]valueTValue- Name
activation- Kind
- property
- Type
TabsActivation- Requirement
- optional
- Description
- Default "automatic" — legacy: MOVE/HOME/END select immediately.
- Name
defaultValue- Kind
- property
- Type
TValue- Requirement
- optional
- Description
- Uncontrolled initial committed value.
- Name
loop- Kind
- property
- Type
boolean- Requirement
- optional
- Description
- Default true — legacy wraps at either end.
- Name
orientation- Kind
- property
- Type
TabsOrientation- Requirement
- optional
- Description
- Headless-layer concern; the machine never branches on it. Default "horizontal".
- Name
tabs- Kind
- property
- Type
readonly TabsItem<TValue>[]- Requirement
- required
- Description
- —
- Name
value- Kind
- property
- Type
TValue- Requirement
- optional
- Description
- Controlled committed value. Defining it fixes controlled mode at first start.
TabsItem
interfaceinterface TabsItem<TValue extends TabsItemValue = string> { readonly value: TValue; readonly disabled?: boolean;}disabledbooleanvalueTValue- Name
disabled- Kind
- property
- Type
boolean- Requirement
- optional
- Name
value- Kind
- property
- Type
TValue- Requirement
- required
TabsItemValue
typetype TabsItemValue = string;tabsMachine
valueexport declare const tabsMachine: TabsMachine;TabsMount
interfaceinterface TabsMount { readonly service: TabsService; readonly connector: TabsApi; readonly root: HTMLElement; destroy(): void;}connectorTabsApidestroy() => voidrootHTMLElementserviceTabsService- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Name
destroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
root- Kind
- property
- Type
HTMLElement- Requirement
- required
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
TabsOrientation
typetype TabsOrientation = "horizontal" | "vertical";TabsPart
typetype TabsPart = (typeof tabsAnatomy.parts)[number];tabsSelectors
valueexport declare const tabsSelectors: { value: (snapshot: TabsSnapshot) => string | undefined; focusedValue: (snapshot: TabsSnapshot) => string | undefined;};focusedValue(snapshot: TabsSnapshot) => string | undefinedvalue(snapshot: TabsSnapshot) => string | undefined- Name
focusedValue- Kind
- property
- Type
(snapshot: TabsSnapshot) => string | undefined- Requirement
- required
- Name
value- Kind
- property
- Type
(snapshot: TabsSnapshot) => string | undefined- Requirement
- required
TabsService
typetype TabsService<TValue extends TabsItemValue = string> = Service<TabsInput<TValue>, TabsStateValue, TabsContext<TValue>, TabsEvent<TValue>, TabsCommand<TValue>>;TabsSnapshot
typetype TabsSnapshot<TValue extends TabsItemValue = string> = Snapshot<TabsStateValue, TabsContext<TValue>>;TabsStateValue
typetype TabsStateValue = "ready";TabsValueChangeDetail
interfaceinterface TabsValueChangeDetail { readonly value: string; readonly reason: TabsChangeReason;}reasonTabsChangeReasonvaluestring- Name
reason- Kind
- property
- Type
TabsChangeReason- Requirement
- required
- Name
value- Kind
- property
- Type
string- Requirement
- required
Framework adapters
Each panel keeps its adapter's public vocabulary. React compound exports, Vue composables, standalone Angular declarations, Svelte components, and Solid hooks stay native to their framework.
React imports
import { Content, List, Root, Tabs, Trigger } from "@grassroot/ui-headless-react/tabs";Vue imports
<script setup lang="ts">import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "@grassroot/ui-headless-vue/tabs";</script>Angular imports
import { Component } from "@angular/core";import { GR_TABS_DECLARATIONS } from "@grassroot/ui-headless-angular/tabs"; @Component({ standalone: true, imports: [GR_TABS_DECLARATIONS], template: `<!-- compose the tabs parts here -->` })export class Example {}Svelte imports
<script lang="ts"> import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "@grassroot/ui-headless-svelte/tabs";</script>Solid imports
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "@grassroot/ui-headless-solid/tabs";@grassroot/ui-headless-react/tabs
React adapter
Content
valueexport declare const Content: import("react").ForwardRefExoticComponent<TabsContentProps & import("react").RefAttributes<HTMLDivElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
List
valueexport declare const List: import("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<HTMLDivElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
Root
valueexport declare const Root: import("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<HTMLDivElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
Tabs
valueexport declare const Tabs: { Root: import("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<HTMLDivElement>>; List: import("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<HTMLDivElement>>; Trigger: import("react").ForwardRefExoticComponent<TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>>; Content: import("react").ForwardRefExoticComponent<TabsContentProps & import("react").RefAttributes<HTMLDivElement>>;};Contentimport("react").ForwardRefExoticComponent<TabsContentProps & import("react").RefAttributes<HTMLDivElement>>Listimport("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<HTMLDivElement>>Rootimport("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<HTMLDivElement>>Triggerimport("react").ForwardRefExoticComponent<TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>>- Name
Content- Kind
- property
- Type
import("react").ForwardRefExoticComponent<TabsContentProps & import("react").RefAttributes<HTMLDivElement>>- Requirement
- required
- Name
List- Kind
- property
- Type
import("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<HTMLDivElement>>- Requirement
- required
- Name
Root- Kind
- property
- Type
import("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<HTMLDivElement>>- Requirement
- required
- Name
Trigger- Kind
- property
- Type
import("react").ForwardRefExoticComponent<TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>>- Requirement
- required
TabsContentProps
interfaceinterface TabsContentProps extends ComponentPropsWithoutRef<"div"> { readonly asChild?: boolean; readonly value: TabsItemValue;}asChildbooleanvalueTabsItemValue- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
- Name
value- Kind
- property
- Type
TabsItemValue- Requirement
- required
TabsContext
valueexport declare const TabsContext: import("react").Context<TabsContextValue | null>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
TabsContextValue
interfaceinterface TabsContextValue { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope;}connectorTabsApiscopePartScopeserviceTabsService- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
TabsListProps
interfaceinterface TabsListProps extends ComponentPropsWithoutRef<"div"> { readonly asChild?: boolean;}asChildboolean- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
TabsRootProps
interfaceinterface TabsRootProps extends Omit<ComponentPropsWithoutRef<"div">, "value" | "defaultValue" | "dir" | "onChange"> { readonly asChild?: boolean; readonly tabs: TabsInput["tabs"]; readonly value?: TabsInput["value"]; readonly defaultValue?: TabsInput["defaultValue"]; readonly orientation?: TabsInput["orientation"]; readonly activation?: TabsInput["activation"]; readonly loop?: TabsInput["loop"]; readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void; readonly children?: ReactNode;}activationTabsInput["activation"]asChildbooleanchildrenReactNodedefaultValueTabsInput["defaultValue"]dir"ltr" | "rtl"loopTabsInput["loop"]onValueChange(detail: TabsValueChangeDetail) => voidorientationTabsInput["orientation"]tabsTabsInput["tabs"]valueTabsInput["value"]- Name
activation- Kind
- property
- Type
TabsInput["activation"]- Requirement
- optional
- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
- Name
children- Kind
- property
- Type
ReactNode- Requirement
- optional
- Name
defaultValue- Kind
- property
- Type
TabsInput["defaultValue"]- Requirement
- optional
- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
loop- Kind
- property
- Type
TabsInput["loop"]- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
- Name
orientation- Kind
- property
- Type
TabsInput["orientation"]- Requirement
- optional
- Name
tabs- Kind
- property
- Type
TabsInput["tabs"]- Requirement
- required
- Name
value- Kind
- property
- Type
TabsInput["value"]- Requirement
- optional
TabsTriggerProps
interfaceinterface TabsTriggerProps extends Omit<ComponentPropsWithoutRef<"button">, "type" | "value"> { readonly asChild?: boolean; readonly tab: TabsItem<TabsItemValue>;}asChildbooleantabTabsItem<TabsItemValue>- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
- Name
tab- Kind
- property
- Type
TabsItem<TabsItemValue>- Requirement
- required
TabsValueChangeDetail
interfaceinterface TabsValueChangeDetail { readonly value: string; readonly reason: TabsChangeReason;}reasonTabsChangeReasonvaluestring- Name
reason- Kind
- property
- Type
TabsChangeReason- Requirement
- required
- Name
value- Kind
- property
- Type
string- Requirement
- required
Trigger
valueexport declare const Trigger: import("react").ForwardRefExoticComponent<TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
useServiceVersion
functionSubscribes a component to a service's committed-snapshot version.
declare function useServiceVersion<S extends Service<any, any, any, any, any, any>>(service: S): ReturnType<S["getSnapshot"]>;serviceSreturnReturnType<S["getSnapshot"]>- Name
service- Kind
- parameter
- Type
S- Requirement
- required
- Name
return- Kind
- return value
- Type
ReturnType<S["getSnapshot"]>- Requirement
- n/a
useTabs
functiondeclare function useTabs(input: TabsInput, options?: UseTabsOptions): UseTabsResult;inputTabsInputoptionsUseTabsOptionsreturnUseTabsResult- Name
input- Kind
- parameter
- Type
TabsInput- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseTabsOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseTabsResult- Requirement
- n/a
useTabsContext
functiondeclare function useTabsContext(partName: string): TabsContextValue;partNamestringreturnTabsContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
TabsContextValue- Requirement
- n/a
UseTabsOptions
interfaceinterface UseTabsOptions { readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void;}dir"ltr" | "rtl"onValueChange(detail: TabsValueChangeDetail) => void- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
UseTabsResult
interfaceinterface UseTabsResult { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; readonly snapshot: TabsSnapshot;}connectorTabsApiscopePartScopeserviceTabsServicesnapshotTabsSnapshot- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
TabsSnapshot- Requirement
- required
@grassroot/ui-headless-vue/tabs
Vue adapter
TabsContent
valueexport declare const TabsContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; value: { type: PropType<TabsItemValue>; required: true; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; value: { type: PropType<TabsItemValue>; required: true; };}>> & Readonly<{}>, { asChild: boolean;}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;TabsContextKey
valueexport declare const TabsContextKey: InjectionKey<TabsContextValue>;TabsContextValue
interfaceinterface TabsContextValue { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; /** Bumped on every committed machine update; parts read `.value` to establish a reactive dependency. */ readonly snapshot: ShallowRef<TabsSnapshot>;}connectorTabsApiscopePartScopeserviceTabsServicesnapshotShallowRef<TabsSnapshot>- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Description
- —
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Description
- —
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Description
- —
- Name
snapshot- Kind
- property
- Type
ShallowRef<TabsSnapshot>- Requirement
- required
- Description
- Bumped on every committed machine update; parts read `.value` to establish a reactive dependency.
TabsList
valueexport declare const TabsList: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; };}>> & Readonly<{}>, { asChild: boolean;}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;TabsRoot
valueexport declare const TabsRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; tabs: { type: PropType<TabsInput["tabs"]>; required: true; }; value: { type: PropType<string | undefined>; default: undefined; }; defaultValue: { type: PropType<string | undefined>; default: undefined; }; orientation: { type: PropType<TabsInput["orientation"]>; default: undefined; }; activation: { type: PropType<TabsInput["activation"]>; default: undefined; }; loop: { type: PropType<boolean | undefined>; default: undefined; }; dir: { type: PropType<"ltr" | "rtl" | undefined>; default: undefined; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { valueChange: (_detail: TabsValueChangeDetail) => true;}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; tabs: { type: PropType<TabsInput["tabs"]>; required: true; }; value: { type: PropType<string | undefined>; default: undefined; }; defaultValue: { type: PropType<string | undefined>; default: undefined; }; orientation: { type: PropType<TabsInput["orientation"]>; default: undefined; }; activation: { type: PropType<TabsInput["activation"]>; default: undefined; }; loop: { type: PropType<boolean | undefined>; default: undefined; }; dir: { type: PropType<"ltr" | "rtl" | undefined>; default: undefined; };}>> & Readonly<{ onValueChange?: ((_detail: TabsValueChangeDetail) => any) | undefined;}>, { asChild: boolean; value: string | undefined; defaultValue: string | undefined; orientation: import("@grassroot/ui-machines/tabs").TabsOrientation | undefined; activation: import("@grassroot/ui-machines/tabs").TabsActivation | undefined; loop: boolean | undefined; dir: "ltr" | "rtl" | undefined;}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;TabsTrigger
valueexport declare const TabsTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; tab: { type: PropType<TabsItem<TabsItemValue>>; required: true; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; tab: { type: PropType<TabsItem<TabsItemValue>>; required: true; };}>> & Readonly<{}>, { asChild: boolean;}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;TabsValueChangeDetail
interfaceinterface TabsValueChangeDetail { readonly value: string; readonly reason: TabsChangeReason;}reasonTabsChangeReasonvaluestring- Name
reason- Kind
- property
- Type
TabsChangeReason- Requirement
- required
- Name
value- Kind
- property
- Type
string- Requirement
- required
useTabs
functiondeclare function useTabs(input: TabsInput | (() => TabsInput), options?: UseTabsOptions): UseTabsResult;inputTabsInput | (() => TabsInput)optionsUseTabsOptionsreturnUseTabsResult- Name
input- Kind
- parameter
- Type
TabsInput | (() => TabsInput)- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseTabsOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseTabsResult- Requirement
- n/a
useTabsContext
functiondeclare function useTabsContext(partName: string): TabsContextValue;partNamestringreturnTabsContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
TabsContextValue- Requirement
- n/a
UseTabsOptions
interfaceinterface UseTabsOptions { readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void;}dir"ltr" | "rtl"onValueChange(detail: TabsValueChangeDetail) => void- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
UseTabsResult
interfaceinterface UseTabsResult { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; readonly snapshot: ShallowRef<TabsSnapshot>;}connectorTabsApiscopePartScopeserviceTabsServicesnapshotShallowRef<TabsSnapshot>- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
ShallowRef<TabsSnapshot>- Requirement
- required
@grassroot/ui-headless-angular/tabs
Angular adapter
createTabsStore
functionexport declare function createTabsStore(initialInput: TabsInput, options?: CreateTabsStoreOptions): TabsStore;initialInputTabsInputoptionsCreateTabsStoreOptionsreturnTabsStore- Name
initialInput- Kind
- parameter
- Type
TabsInput- Requirement
- required
- Name
options- Kind
- parameter
- Type
CreateTabsStoreOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
TabsStore- Requirement
- n/a
CreateTabsStoreOptions
interfaceexport interface CreateTabsStoreOptions { readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void; readonly onCommit?: () => void;}dir"ltr" | "rtl"onCommit() => voidonValueChange(detail: TabsValueChangeDetail) => void- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
onCommit- Kind
- property
- Type
() => void- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
GR_TABS_DECLARATIONS
valueexport declare const GR_TABS_DECLARATIONS: readonly [typeof GrTabsRoot, typeof GrTabsList, typeof GrTabsTrigger, typeof GrTabsContent];GrTabsContent
classexport declare class GrTabsContent implements OnDestroy { readonly value: import("@angular/core").InputSignal<string>; readonly disabled: import("@angular/core").InputSignal<boolean | undefined>; private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; private registeredKey; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrTabsContent, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrTabsContent, "[grTabsContent]", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;}consumerPropsanydisabledimport("@angular/core").InputSignal<boolean | undefined>elementRefanylistenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrTabsContent, "[grTabsContent]", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrTabsContent, never>registeredKeyanystoreanyvalueimport("@angular/core").InputSignal<string>- Name
consumerProps- Kind
- property
- Type
any- Requirement
- required
- Name
disabled- Kind
- property
- Type
import("@angular/core").InputSignal<boolean | undefined>- Requirement
- required
- Name
elementRef- Kind
- property
- Type
any- Requirement
- required
- Name
listeners- Kind
- property
- Type
any- Requirement
- required
- Name
ngOnDestroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
ɵdir- Kind
- property
- Type
i0.ɵɵDirectiveDeclaration<GrTabsContent, "[grTabsContent]", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrTabsContent, never>- Requirement
- required
- Name
registeredKey- Kind
- property
- Type
any- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
- Name
value- Kind
- property
- Type
import("@angular/core").InputSignal<string>- Requirement
- required
GrTabsList
classexport declare class GrTabsList implements OnDestroy { private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrTabsList, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrTabsList, "[grTabsList]", never, {}, {}, never, never, true, never>;}consumerPropsanyelementRefanylistenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrTabsList, "[grTabsList]", never, {}, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrTabsList, never>storeany- Name
consumerProps- Kind
- property
- Type
any- Requirement
- required
- Name
elementRef- Kind
- property
- Type
any- Requirement
- required
- Name
listeners- Kind
- property
- Type
any- Requirement
- required
- Name
ngOnDestroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
ɵdir- Kind
- property
- Type
i0.ɵɵDirectiveDeclaration<GrTabsList, "[grTabsList]", never, {}, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrTabsList, never>- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
GrTabsRoot
classexport declare class GrTabsRoot implements OnDestroy { readonly tabs: import("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/tabs").TabsItem<string>[]>; readonly value: import("@angular/core").InputSignal<string | undefined>; readonly defaultValue: import("@angular/core").InputSignal<string | undefined>; readonly orientation: import("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsOrientation | undefined>; readonly activation: import("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsActivation | undefined>; readonly loop: import("@angular/core").InputSignal<boolean | undefined>; readonly dir: import("@angular/core").InputSignal<"rtl" | "ltr" | undefined>; readonly valueChange: import("@angular/core").OutputEmitterRef<TabsValueChangeDetail>; private readonly elementRef; private readonly injector; private readonly listeners; private lastSynced; readonly store: TabsStore; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrTabsRoot, never>; static ɵcmp: i0.ɵɵComponentDeclaration<GrTabsRoot, "gr-tabs-root", never, { "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "activation": { "alias": "activation"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["*"], true, never>;}activationimport("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsActivation | undefined>defaultValueimport("@angular/core").InputSignal<string | undefined>dirimport("@angular/core").InputSignal<"rtl" | "ltr" | undefined>elementRefanyinjectoranylastSyncedanylistenersanyloopimport("@angular/core").InputSignal<boolean | undefined>ngOnDestroy() => voidorientationimport("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsOrientation | undefined>ɵcmpi0.ɵɵComponentDeclaration<GrTabsRoot, "gr-tabs-root", never, { "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "activation": { "alias": "activation"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["*"], true, never>ɵfaci0.ɵɵFactoryDeclaration<GrTabsRoot, never>storeTabsStoretabsimport("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/tabs").TabsItem<string>[]>- Name
activation- Kind
- property
- Type
import("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsActivation | undefined>- Requirement
- required
- Name
defaultValue- Kind
- property
- Type
import("@angular/core").InputSignal<string | undefined>- Requirement
- required
- Name
dir- Kind
- property
- Type
import("@angular/core").InputSignal<"rtl" | "ltr" | undefined>- Requirement
- required
- Name
elementRef- Kind
- property
- Type
any- Requirement
- required
- Name
injector- Kind
- property
- Type
any- Requirement
- required
- Name
lastSynced- Kind
- property
- Type
any- Requirement
- required
- Name
listeners- Kind
- property
- Type
any- Requirement
- required
- Name
loop- Kind
- property
- Type
import("@angular/core").InputSignal<boolean | undefined>- Requirement
- required
- Name
ngOnDestroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
orientation- Kind
- property
- Type
import("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsOrientation | undefined>- Requirement
- required
- Name
ɵcmp- Kind
- property
- Type
i0.ɵɵComponentDeclaration<GrTabsRoot, "gr-tabs-root", never, { "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "activation": { "alias": "activation"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["*"], true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrTabsRoot, never>- Requirement
- required
- Name
store- Kind
- property
- Type
TabsStore- Requirement
- required
- Name
tabs- Kind
- property
- Type
import("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/tabs").TabsItem<string>[]>- Requirement
- required
- Name
value- Kind
- property
- Type
import("@angular/core").InputSignal<string | undefined>- Requirement
- required
- Name
valueChange- Kind
- property
- Type
import("@angular/core").OutputEmitterRef<TabsValueChangeDetail>- Requirement
- required
GrTabsTrigger
classexport declare class GrTabsTrigger implements OnDestroy { readonly tab: import("@angular/core").InputSignal<TabsItem<string>>; private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; private registeredKey; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrTabsTrigger, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrTabsTrigger, "[grTabsTrigger]", never, { "tab": { "alias": "tab"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;}consumerPropsanyelementRefanylistenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrTabsTrigger, "[grTabsTrigger]", never, { "tab": { "alias": "tab"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrTabsTrigger, never>registeredKeyanystoreanytabimport("@angular/core").InputSignal<TabsItem<string>>- Name
consumerProps- Kind
- property
- Type
any- Requirement
- required
- Name
elementRef- Kind
- property
- Type
any- Requirement
- required
- Name
listeners- Kind
- property
- Type
any- Requirement
- required
- Name
ngOnDestroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
ɵdir- Kind
- property
- Type
i0.ɵɵDirectiveDeclaration<GrTabsTrigger, "[grTabsTrigger]", never, { "tab": { "alias": "tab"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrTabsTrigger, never>- Requirement
- required
- Name
registeredKey- Kind
- property
- Type
any- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
- Name
tab- Kind
- property
- Type
import("@angular/core").InputSignal<TabsItem<string>>- Requirement
- required
TABS_STORE
valueexport declare const TABS_STORE: InjectionToken<TabsStore>;TabsStore
interfaceexport interface TabsStore { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; /** * Bumped on every committed machine update. Effects that read the * connector's prop bags must read this signal first — inside the same * `effect()` — so Angular's reactivity re-runs the effect on every * committed change (the staleness bug class called out across every * other adapter). */ readonly version: WritableSignal<number>; /** Starts the underlying service (idempotent) — call from the browser only. */ start(): void; /** Stops the underlying service (idempotent). */ stop(): void; /** Forwards a new committed input to the machine (no-op on the very first call). */ sync(input: import("@grassroot/ui-machines/tabs").TabsInput): void; /** * Updates the connector's live `dir` reading (see `use-tabs.ts`'s * `CreateTabsStoreOptions.dir` doc comment for why this exists instead of * a one-shot constructor-time value). */ setDir(dir: "ltr" | "rtl" | undefined): void;}connectorTabsApiscopePartScopeserviceTabsServicesetDir(dir: "ltr" | "rtl" | undefined) => voidstart() => voidstop() => voidsync(input: import("@grassroot/ui-machines/tabs").TabsInput) => voidversionWritableSignal<number>- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Description
- —
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Description
- —
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Description
- —
- Name
setDir- Kind
- method
- Type
(dir: "ltr" | "rtl" | undefined) => void- Requirement
- required
- Description
- Updates the connector's live `dir` reading (see `use-tabs.ts`'s `CreateTabsStoreOptions.dir` doc comment for why this exists instead of a one-shot constructor-time value).
- Name
start- Kind
- method
- Type
() => void- Requirement
- required
- Description
- Starts the underlying service (idempotent) — call from the browser only.
- Name
stop- Kind
- method
- Type
() => void- Requirement
- required
- Description
- Stops the underlying service (idempotent).
- Name
sync- Kind
- method
- Type
(input: import("@grassroot/ui-machines/tabs").TabsInput) => void- Requirement
- required
- Description
- Forwards a new committed input to the machine (no-op on the very first call).
- Name
version- Kind
- property
- Type
WritableSignal<number>- Requirement
- required
- Description
- Bumped on every committed machine update. Effects that read the connector's prop bags must read this signal first — inside the same `effect()` — so Angular's reactivity re-runs the effect on every committed change (the staleness bug class called out across every other adapter).
TabsValueChangeDetail
interfaceexport interface TabsValueChangeDetail { readonly value: string; readonly reason: TabsChangeReason;}reasonTabsChangeReasonvaluestring- Name
reason- Kind
- property
- Type
TabsChangeReason- Requirement
- required
- Name
value- Kind
- property
- Type
string- Requirement
- required
@grassroot/ui-headless-svelte/tabs
Svelte adapter
createTabs
functionexport declare function createTabs(inputGetter: () => TabsInput, options?: UseTabsOptions): UseTabsResult;inputGetter() => TabsInputoptionsUseTabsOptionsreturnUseTabsResult- Name
inputGetter- Kind
- parameter
- Type
() => TabsInput- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseTabsOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseTabsResult- Requirement
- n/a
TabsActivation
typetype TabsActivation = "automatic" | "manual";TabsContent
valueexport declare const TabsContent: LegacyComponentType;argsParameters<Component<Record<string, any>>>returnReturnType<Component<Record<string, any>, Record<string, any>>>- Name
args- Kind
- parameter
- Type
Parameters<Component<Record<string, any>>>- Requirement
- optional
- Name
return- Kind
- return value
- Type
ReturnType<Component<Record<string, any>, Record<string, any>>>- Requirement
- n/a
TabsContextValue
interfaceexport interface TabsContextValue { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; /** * Bumped on every committed machine update. Parts must read this * (`ctx.version()`) *inside* the `$derived` that computes their prop * bag — not once at setup — so Svelte's fine-grained reactivity tracks * the dependency and recomputes on every committed change (mirrors the * Select adapter's equivalent staleness fix; see `../select/context.ts`). */ readonly version: () => number;}connectorTabsApiscopePartScopeserviceTabsServiceversion() => number- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Description
- —
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Description
- —
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Description
- —
- Name
version- Kind
- property
- Type
() => number- Requirement
- required
- Description
- Bumped on every committed machine update. Parts must read this (`ctx.version()`) *inside* the `$derived` that computes their prop bag — not once at setup — so Svelte's fine-grained reactivity tracks the dependency and recomputes on every committed change (mirrors the Select adapter's equivalent staleness fix; see `../select/context.ts`).
TabsItem
interfaceinterface TabsItem<TValue extends TabsItemValue = string> { readonly value: TValue; readonly disabled?: boolean;}disabledbooleanvalueTValue- Name
disabled- Kind
- property
- Type
boolean- Requirement
- optional
- Name
value- Kind
- property
- Type
TValue- Requirement
- required
TabsItemValue
typetype TabsItemValue = string;TabsList
valueexport declare const TabsList: LegacyComponentType;argsParameters<Component<Record<string, any>>>returnReturnType<Component<Record<string, any>, Record<string, any>>>- Name
args- Kind
- parameter
- Type
Parameters<Component<Record<string, any>>>- Requirement
- optional
- Name
return- Kind
- return value
- Type
ReturnType<Component<Record<string, any>, Record<string, any>>>- Requirement
- n/a
TabsOrientation
typetype TabsOrientation = "horizontal" | "vertical";TabsRoot
valueexport declare const TabsRoot: LegacyComponentType;argsParameters<Component<Record<string, any>>>returnReturnType<Component<Record<string, any>, Record<string, any>>>- Name
args- Kind
- parameter
- Type
Parameters<Component<Record<string, any>>>- Requirement
- optional
- Name
return- Kind
- return value
- Type
ReturnType<Component<Record<string, any>, Record<string, any>>>- Requirement
- n/a
TabsTrigger
valueexport declare const TabsTrigger: LegacyComponentType;argsParameters<Component<Record<string, any>>>returnReturnType<Component<Record<string, any>, Record<string, any>>>- Name
args- Kind
- parameter
- Type
Parameters<Component<Record<string, any>>>- Requirement
- optional
- Name
return- Kind
- return value
- Type
ReturnType<Component<Record<string, any>, Record<string, any>>>- Requirement
- n/a
TabsValueChangeDetail
interfaceexport interface TabsValueChangeDetail { readonly value: string; readonly reason: TabsChangeReason;}reasonTabsChangeReasonvaluestring- Name
reason- Kind
- property
- Type
TabsChangeReason- Requirement
- required
- Name
value- Kind
- property
- Type
string- Requirement
- required
useTabsContext
functionexport declare function useTabsContext(partName: string): TabsContextValue;partNamestringreturnTabsContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
TabsContextValue- Requirement
- n/a
UseTabsOptions
interfaceexport interface UseTabsOptions { readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void;}dir"ltr" | "rtl"onValueChange(detail: TabsValueChangeDetail) => void- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
UseTabsResult
interfaceexport interface UseTabsResult { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; readonly version: () => number;}connectorTabsApiscopePartScopeserviceTabsServiceversion() => number- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Name
version- Kind
- property
- Type
() => number- Requirement
- required
@grassroot/ui-headless-solid/tabs
Solid adapter
TabsContent
functionexport declare function TabsContent(props: TabsContentProps): JSX.Element;propsTabsContentPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
TabsContentProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
TabsContentProps
interfaceexport interface TabsContentProps extends JSX.HTMLAttributes<HTMLDivElement> { readonly as?: AsProp; readonly tab: TabsItem;}asAsProptabTabsItem- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
- Name
tab- Kind
- property
- Type
TabsItem- Requirement
- required
TabsContext
valueexport declare const TabsContext: import("solid-js").Context<TabsContextValue | undefined>;TabsContextValue
interfaceexport interface TabsContextValue { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; /** * Bumped on every committed machine update. Parts must call this * accessor *inside* the JSX/spread thunk that reads the connector's prop * bags — not once at setup — so Solid's fine-grained reactivity tracks * the dependency and re-runs on every committed change. */ readonly snapshot: Accessor<TabsSnapshot>;}connectorTabsApiscopePartScopeserviceTabsServicesnapshotAccessor<TabsSnapshot>- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Description
- —
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Description
- —
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Description
- —
- Name
snapshot- Kind
- property
- Type
Accessor<TabsSnapshot>- Requirement
- required
- Description
- Bumped on every committed machine update. Parts must call this accessor *inside* the JSX/spread thunk that reads the connector's prop bags — not once at setup — so Solid's fine-grained reactivity tracks the dependency and re-runs on every committed change.
TabsItem
interfaceinterface TabsItem<TValue extends TabsItemValue = string> { readonly value: TValue; readonly disabled?: boolean;}disabledbooleanvalueTValue- Name
disabled- Kind
- property
- Type
boolean- Requirement
- optional
- Name
value- Kind
- property
- Type
TValue- Requirement
- required
TabsList
functionexport declare function TabsList(props: TabsListProps): JSX.Element;propsTabsListPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
TabsListProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
TabsListProps
interfaceexport interface TabsListProps extends JSX.HTMLAttributes<HTMLDivElement> { readonly as?: AsProp;}asAsProp- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
TabsRoot
functionexport declare function TabsRoot(props: TabsRootProps): JSX.Element;propsTabsRootPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
TabsRootProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
TabsRootProps
interfaceexport interface TabsRootProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "onChange"> { readonly as?: AsProp; readonly tabs: TabsInput["tabs"]; readonly value?: TabsInput["value"]; readonly defaultValue?: TabsInput["defaultValue"]; readonly orientation?: TabsInput["orientation"]; readonly activation?: TabsInput["activation"]; readonly loop?: TabsInput["loop"]; readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void;}activationTabsInput["activation"]asAsPropdefaultValueTabsInput["defaultValue"]dir"ltr" | "rtl"loopTabsInput["loop"]onValueChange(detail: TabsValueChangeDetail) => voidorientationTabsInput["orientation"]tabsTabsInput["tabs"]valueTabsInput["value"]- Name
activation- Kind
- property
- Type
TabsInput["activation"]- Requirement
- optional
- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
- Name
defaultValue- Kind
- property
- Type
TabsInput["defaultValue"]- Requirement
- optional
- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
loop- Kind
- property
- Type
TabsInput["loop"]- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
- Name
orientation- Kind
- property
- Type
TabsInput["orientation"]- Requirement
- optional
- Name
tabs- Kind
- property
- Type
TabsInput["tabs"]- Requirement
- required
- Name
value- Kind
- property
- Type
TabsInput["value"]- Requirement
- optional
TabsTrigger
functionexport declare function TabsTrigger(props: TabsTriggerProps): JSX.Element;propsTabsTriggerPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
TabsTriggerProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
TabsTriggerProps
interfaceexport interface TabsTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> { readonly as?: AsProp; readonly tab: TabsItem;}asAsProptabTabsItem- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
- Name
tab- Kind
- property
- Type
TabsItem- Requirement
- required
TabsValueChangeDetail
interfaceexport interface TabsValueChangeDetail { readonly value: string; readonly reason: TabsChangeReason;}reasonTabsChangeReasonvaluestring- Name
reason- Kind
- property
- Type
TabsChangeReason- Requirement
- required
- Name
value- Kind
- property
- Type
string- Requirement
- required
useTabs
functionexport declare function useTabs(input: Accessor<TabsInput>, options?: UseTabsOptions): UseTabsResult;inputAccessor<TabsInput>optionsUseTabsOptionsreturnUseTabsResult- Name
input- Kind
- parameter
- Type
Accessor<TabsInput>- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseTabsOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseTabsResult- Requirement
- n/a
useTabsContext
functionexport declare function useTabsContext(partName: string): TabsContextValue;partNamestringreturnTabsContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
TabsContextValue- Requirement
- n/a
UseTabsOptions
interfaceexport interface UseTabsOptions { readonly dir?: "ltr" | "rtl"; readonly onValueChange?: (detail: TabsValueChangeDetail) => void;}dir"ltr" | "rtl"onValueChange(detail: TabsValueChangeDetail) => void- Name
dir- Kind
- property
- Type
"ltr" | "rtl"- Requirement
- optional
- Name
onValueChange- Kind
- property
- Type
(detail: TabsValueChangeDetail) => void- Requirement
- optional
UseTabsResult
interfaceexport interface UseTabsResult { readonly service: TabsService; readonly connector: TabsApi; readonly scope: PartScope; readonly snapshot: Accessor<TabsSnapshot>;}connectorTabsApiscopePartScopeserviceTabsServicesnapshotAccessor<TabsSnapshot>- Name
connector- Kind
- property
- Type
TabsApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
TabsService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
Accessor<TabsSnapshot>- Requirement
- required