DocsAPI referenceHeadlesstabs

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

24 exports
View source packages/ui-headless/core/src/tabs/index.ts

connectTabs

function
DeclarationView source
connectTabsts
declare function connectTabs<TValue extends TabsItemValue = string>(service: TabsService<TValue>, scope: PartScope, options?: TabsConnectOptions): TabsApi<TValue>;
Name
Kind
Type
Requirement
service
parameter
TabsService<TValue>
required
scope
parameter
PartScope
required
options
parameter
TabsConnectOptions
optional
return
return value
TabsApi<TValue>
n/a
Name
service
Kind
parameter
Type
TabsService<TValue>
Requirement
required
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

function
DeclarationView source
mountTabsts
declare function mountTabs(container: HTMLElement, options: MountTabsOptions): TabsMount;
Name
Kind
Type
Requirement
container
parameter
HTMLElement
required
options
parameter
MountTabsOptions
required
return
return value
TabsMount
n/a
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

interface
DeclarationView source
MountTabsOptionsts
interface 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;
}
Name
Kind
Type
Requirement
Description
dir
property
"ltr" | "rtl"
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
renderContent
property
(panel: HTMLElement, tab: TabsItem) => void
optional
Render callback for one panel's content; default = tab.value as textContent.
renderTrigger
property
(button: HTMLElement, tab: TabsItem) => void
optional
Render callback for one trigger's content; default = tab.value as textContent.
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

function

Tabs-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`).

DeclarationView source
runTabsCommandts
declare function runTabsCommand<TValue extends TabsItemValue = string>(command: TabsCommand<TValue>, scope: PartScope, options?: {
readonly onValueChange?: (detail: {
value: TValue;
reason: TabsChangeReason;
}) => void;
}): void;
Name
Kind
Type
Requirement
command
parameter
TabsCommand<TValue>
required
scope
parameter
PartScope
required
options
parameter
{ readonly onValueChange?: (detail: { value: TValue; reason: TabsChangeReason; }) => void; }
optional
return
return value
void
n/a
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
DeclarationView source
TabsActivationts
type TabsActivation = "automatic" | "manual";

tabsAnatomy

value
DeclarationView source
tabsAnatomyts
export declare const tabsAnatomy: {
readonly scope: "tabs";
readonly parts: readonly ["root", "list", "trigger", "content"];
};
Name
Kind
Type
Requirement
parts
property
readonly ["root", "list", "trigger", "content"]
required
scope
property
"tabs"
required
Name
parts
Kind
property
Type
readonly ["root", "list", "trigger", "content"]
Requirement
required
Name
scope
Kind
property
Type
"tabs"
Requirement
required

TabsApi

interface
DeclarationView source
TabsApits
interface 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;
}
Name
Kind
Type
Requirement
contentProps
method
(tab: TabsItem<TValue>) => PartProps
required
focusedValue
property
TValue | undefined
required
listProps
method
() => PartProps
required
rootProps
method
() => PartProps
required
triggerProps
method
(tab: TabsItem<TValue>) => PartProps
required
value
property
TValue | undefined
required
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
DeclarationView source
TabsChangeReasonts
type TabsChangeReason = "pointer" | "keyboard" | "programmatic";
DeclarationView source
TabsCommandts
type 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

interface
DeclarationView source
TabsConnectOptionsts
interface TabsConnectOptions {
readonly dir?: "ltr" | "rtl";
}
Name
Kind
Type
Requirement
dir
property
"ltr" | "rtl"
optional
Name
dir
Kind
property
Type
"ltr" | "rtl"
Requirement
optional
DeclarationView source
TabsContextts
type TabsContext<TValue extends TabsItemValue = string> = {
readonly value?: TValue;
readonly focusedValue?: TValue;
readonly mode: "controlled" | "uncontrolled";
};
Name
Kind
Type
Requirement
focusedValue
property
TValue
optional
mode
property
"controlled" | "uncontrolled"
required
value
property
TValue
optional
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

type
DeclarationView source
TabsEventts
type 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

type
DeclarationView source
TabsInputts
type 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;
};
Name
Kind
Type
Requirement
Description
activation
property
TabsActivation
optional
Default "automatic" — legacy: MOVE/HOME/END select immediately.
defaultValue
property
TValue
optional
Uncontrolled initial committed value.
loop
property
boolean
optional
Default true — legacy wraps at either end.
orientation
property
TabsOrientation
optional
Headless-layer concern; the machine never branches on it. Default "horizontal".
tabs
property
readonly TabsItem<TValue>[]
required
value
property
TValue
optional
Controlled committed value. Defining it fixes controlled mode at first start.
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

interface
DeclarationView source
TabsItemts
interface TabsItem<TValue extends TabsItemValue = string> {
readonly value: TValue;
readonly disabled?: boolean;
}
Name
Kind
Type
Requirement
disabled
property
boolean
optional
value
property
TValue
required
Name
disabled
Kind
property
Type
boolean
Requirement
optional
Name
value
Kind
property
Type
TValue
Requirement
required
DeclarationView source
TabsItemValuets
type TabsItemValue = string;

tabsMachine

value
DeclarationView source
tabsMachinets
export declare const tabsMachine: TabsMachine;

TabsMount

interface
DeclarationView source
TabsMountts
interface TabsMount {
readonly service: TabsService;
readonly connector: TabsApi;
readonly root: HTMLElement;
destroy(): void;
}
Name
Kind
Type
Requirement
connector
property
TabsApi
required
destroy
method
() => void
required
root
property
HTMLElement
required
service
property
TabsService
required
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
DeclarationView source
TabsOrientationts
type TabsOrientation = "horizontal" | "vertical";

TabsPart

type
DeclarationView source
TabsPartts
type TabsPart = (typeof tabsAnatomy.parts)[number];
DeclarationView source
tabsSelectorsts
export declare const tabsSelectors: {
value: (snapshot: TabsSnapshot) => string | undefined;
focusedValue: (snapshot: TabsSnapshot) => string | undefined;
};
Name
Kind
Type
Requirement
focusedValue
property
(snapshot: TabsSnapshot) => string | undefined
required
value
property
(snapshot: TabsSnapshot) => string | undefined
required
Name
focusedValue
Kind
property
Type
(snapshot: TabsSnapshot) => string | undefined
Requirement
required
Name
value
Kind
property
Type
(snapshot: TabsSnapshot) => string | undefined
Requirement
required
DeclarationView source
TabsServicets
type TabsService<TValue extends TabsItemValue = string> = Service<TabsInput<TValue>, TabsStateValue, TabsContext<TValue>, TabsEvent<TValue>, TabsCommand<TValue>>;
DeclarationView source
TabsSnapshotts
type TabsSnapshot<TValue extends TabsItemValue = string> = Snapshot<TabsStateValue, TabsContext<TValue>>;
DeclarationView source
TabsStateValuets
type TabsStateValue = "ready";
DeclarationView source
TabsValueChangeDetailts
interface TabsValueChangeDetail {
readonly value: string;
readonly reason: TabsChangeReason;
}
Name
Kind
Type
Requirement
reason
property
TabsChangeReason
required
value
property
string
required
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 example follows below.

React imports

@grassroot/ui-headless-react/tabsts
import { Content, List, Root, Tabs, Trigger } from "@grassroot/ui-headless-react/tabs";

Vue imports

@grassroot/ui-headless-vue/tabsts
<script setup lang="ts">
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "@grassroot/ui-headless-vue/tabs";
</script>

Angular imports

@grassroot/ui-headless-angular/tabsts
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

@grassroot/ui-headless-svelte/tabsts
<script lang="ts">
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "@grassroot/ui-headless-svelte/tabs";
</script>

Solid imports

@grassroot/ui-headless-solid/tabsts
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "@grassroot/ui-headless-solid/tabs";

@grassroot/ui-headless-react/tabs

React adapter

17 exports
View source packages/ui-headless/react/src/tabs/index.ts

Content

value
DeclarationView source
Contentts
export declare const Content: import("react").ForwardRefExoticComponent<TabsContentProps & import("react").RefAttributes<HTMLDivElement>>;
Name
Kind
Type
Requirement
props
parameter
P
required
return
return value
ReactNode
n/a
Name
props
Kind
parameter
Type
P
Requirement
required
Name
return
Kind
return value
Type
ReactNode
Requirement
n/a

List

value
DeclarationView source
Listts
export declare const List: import("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<HTMLDivElement>>;
Name
Kind
Type
Requirement
props
parameter
P
required
return
return value
ReactNode
n/a
Name
props
Kind
parameter
Type
P
Requirement
required
Name
return
Kind
return value
Type
ReactNode
Requirement
n/a

Root

value
DeclarationView source
Rootts
export declare const Root: import("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<HTMLDivElement>>;
Name
Kind
Type
Requirement
props
parameter
P
required
return
return value
ReactNode
n/a
Name
props
Kind
parameter
Type
P
Requirement
required
Name
return
Kind
return value
Type
ReactNode
Requirement
n/a

Tabs

value
DeclarationView source
Tabsts
export 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>>;
};
Name
Kind
Type
Requirement
Content
property
import("react").ForwardRefExoticComponent<TabsContentProps & import("react").RefAttributes<HTMLDivElement>>
required
List
property
import("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<HTMLDivElement>>
required
Root
property
import("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<HTMLDivElement>>
required
Trigger
property
import("react").ForwardRefExoticComponent<TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>>
required
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

interface
DeclarationView source
TabsContentPropsts
interface TabsContentProps extends ComponentPropsWithoutRef<"div"> {
readonly asChild?: boolean;
readonly value: TabsItemValue;
}
Name
Kind
Type
Requirement
asChild
property
boolean
optional
value
property
TabsItemValue
required
Name
asChild
Kind
property
Type
boolean
Requirement
optional
Name
value
Kind
property
Type
TabsItemValue
Requirement
required

TabsContext

value
DeclarationView source
TabsContextts
export declare const TabsContext: import("react").Context<TabsContextValue | null>;
Name
Kind
Type
Requirement
props
parameter
P
required
return
return value
ReactNode
n/a
Name
props
Kind
parameter
Type
P
Requirement
required
Name
return
Kind
return value
Type
ReactNode
Requirement
n/a

TabsContextValue

interface
DeclarationView source
TabsContextValuets
interface TabsContextValue {
readonly service: TabsService;
readonly connector: TabsApi;
readonly scope: PartScope;
}
Name
Kind
Type
Requirement
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
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

interface
DeclarationView source
TabsListPropsts
interface TabsListProps extends ComponentPropsWithoutRef<"div"> {
readonly asChild?: boolean;
}
Name
Kind
Type
Requirement
asChild
property
boolean
optional
Name
asChild
Kind
property
Type
boolean
Requirement
optional

TabsRootProps

interface
DeclarationView source
TabsRootPropsts
interface 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;
}
Name
Kind
Type
Requirement
activation
property
TabsInput["activation"]
optional
asChild
property
boolean
optional
children
property
ReactNode
optional
defaultValue
property
TabsInput["defaultValue"]
optional
dir
property
"ltr" | "rtl"
optional
loop
property
TabsInput["loop"]
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
orientation
property
TabsInput["orientation"]
optional
tabs
property
TabsInput["tabs"]
required
value
property
TabsInput["value"]
optional
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

interface
DeclarationView source
TabsTriggerPropsts
interface TabsTriggerProps extends Omit<ComponentPropsWithoutRef<"button">, "type" | "value"> {
readonly asChild?: boolean;
readonly tab: TabsItem<TabsItemValue>;
}
Name
Kind
Type
Requirement
asChild
property
boolean
optional
tab
property
TabsItem<TabsItemValue>
required
Name
asChild
Kind
property
Type
boolean
Requirement
optional
Name
tab
Kind
property
Type
TabsItem<TabsItemValue>
Requirement
required
DeclarationView source
TabsValueChangeDetailts
interface TabsValueChangeDetail {
readonly value: string;
readonly reason: TabsChangeReason;
}
Name
Kind
Type
Requirement
reason
property
TabsChangeReason
required
value
property
string
required
Name
reason
Kind
property
Type
TabsChangeReason
Requirement
required
Name
value
Kind
property
Type
string
Requirement
required

Trigger

value
DeclarationView source
Triggerts
export declare const Trigger: import("react").ForwardRefExoticComponent<TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
Name
Kind
Type
Requirement
props
parameter
P
required
return
return value
ReactNode
n/a
Name
props
Kind
parameter
Type
P
Requirement
required
Name
return
Kind
return value
Type
ReactNode
Requirement
n/a

Subscribes a component to a service's committed-snapshot version.

DeclarationView source
useServiceVersionts
declare function useServiceVersion<S extends Service<any, any, any, any, any, any>>(service: S): ReturnType<S["getSnapshot"]>;
Name
Kind
Type
Requirement
service
parameter
S
required
return
return value
ReturnType<S["getSnapshot"]>
n/a
Name
service
Kind
parameter
Type
S
Requirement
required
Name
return
Kind
return value
Type
ReturnType<S["getSnapshot"]>
Requirement
n/a

useTabs

function
DeclarationView source
useTabsts
declare function useTabs(input: TabsInput, options?: UseTabsOptions): UseTabsResult;
Name
Kind
Type
Requirement
input
parameter
TabsInput
required
options
parameter
UseTabsOptions
optional
return
return value
UseTabsResult
n/a
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

function
DeclarationView source
useTabsContextts
declare function useTabsContext(partName: string): TabsContextValue;
Name
Kind
Type
Requirement
partName
parameter
string
required
return
return value
TabsContextValue
n/a
Name
partName
Kind
parameter
Type
string
Requirement
required
Name
return
Kind
return value
Type
TabsContextValue
Requirement
n/a

UseTabsOptions

interface
DeclarationView source
UseTabsOptionsts
interface UseTabsOptions {
readonly dir?: "ltr" | "rtl";
readonly onValueChange?: (detail: TabsValueChangeDetail) => void;
}
Name
Kind
Type
Requirement
dir
property
"ltr" | "rtl"
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
Name
dir
Kind
property
Type
"ltr" | "rtl"
Requirement
optional
Name
onValueChange
Kind
property
Type
(detail: TabsValueChangeDetail) => void
Requirement
optional

UseTabsResult

interface
DeclarationView source
UseTabsResultts
interface UseTabsResult {
readonly service: TabsService;
readonly connector: TabsApi;
readonly scope: PartScope;
readonly snapshot: TabsSnapshot;
}
Name
Kind
Type
Requirement
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
snapshot
property
TabsSnapshot
required
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

11 exports
View source packages/ui-headless/vue/src/tabs/index.ts

TabsContent

value
DeclarationView source
TabsContentts
export 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>;
DeclarationView source
TabsContextKeyts
export declare const TabsContextKey: InjectionKey<TabsContextValue>;

TabsContextValue

interface
DeclarationView source
TabsContextValuets
interface 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>;
}
Name
Kind
Type
Requirement
Description
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
snapshot
property
ShallowRef<TabsSnapshot>
required
Bumped on every committed machine update; parts read `.value` to establish a reactive dependency.
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

value
DeclarationView source
TabsListts
export 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

value
DeclarationView source
TabsRootts
export 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

value
DeclarationView source
TabsTriggerts
export 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>;
DeclarationView source
TabsValueChangeDetailts
interface TabsValueChangeDetail {
readonly value: string;
readonly reason: TabsChangeReason;
}
Name
Kind
Type
Requirement
reason
property
TabsChangeReason
required
value
property
string
required
Name
reason
Kind
property
Type
TabsChangeReason
Requirement
required
Name
value
Kind
property
Type
string
Requirement
required

useTabs

function
DeclarationView source
useTabsts
declare function useTabs(input: TabsInput | (() => TabsInput), options?: UseTabsOptions): UseTabsResult;
Name
Kind
Type
Requirement
input
parameter
TabsInput | (() => TabsInput)
required
options
parameter
UseTabsOptions
optional
return
return value
UseTabsResult
n/a
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

function
DeclarationView source
useTabsContextts
declare function useTabsContext(partName: string): TabsContextValue;
Name
Kind
Type
Requirement
partName
parameter
string
required
return
return value
TabsContextValue
n/a
Name
partName
Kind
parameter
Type
string
Requirement
required
Name
return
Kind
return value
Type
TabsContextValue
Requirement
n/a

UseTabsOptions

interface
DeclarationView source
UseTabsOptionsts
interface UseTabsOptions {
readonly dir?: "ltr" | "rtl";
readonly onValueChange?: (detail: TabsValueChangeDetail) => void;
}
Name
Kind
Type
Requirement
dir
property
"ltr" | "rtl"
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
Name
dir
Kind
property
Type
"ltr" | "rtl"
Requirement
optional
Name
onValueChange
Kind
property
Type
(detail: TabsValueChangeDetail) => void
Requirement
optional

UseTabsResult

interface
DeclarationView source
UseTabsResultts
interface UseTabsResult {
readonly service: TabsService;
readonly connector: TabsApi;
readonly scope: PartScope;
readonly snapshot: ShallowRef<TabsSnapshot>;
}
Name
Kind
Type
Requirement
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
snapshot
property
ShallowRef<TabsSnapshot>
required
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

10 exports
View source packages/ui-headless/angular/src/tabs/index.ts

createTabsStore

function
DeclarationView source
createTabsStorets
export declare function createTabsStore(initialInput: TabsInput, options?: CreateTabsStoreOptions): TabsStore;
Name
Kind
Type
Requirement
initialInput
parameter
TabsInput
required
options
parameter
CreateTabsStoreOptions
optional
return
return value
TabsStore
n/a
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
DeclarationView source
CreateTabsStoreOptionsts
export interface CreateTabsStoreOptions {
readonly dir?: "ltr" | "rtl";
readonly onValueChange?: (detail: TabsValueChangeDetail) => void;
readonly onCommit?: () => void;
}
Name
Kind
Type
Requirement
dir
property
"ltr" | "rtl"
optional
onCommit
property
() => void
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
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
DeclarationView source
GR_TABS_DECLARATIONSts
export declare const GR_TABS_DECLARATIONS: readonly [typeof GrTabsRoot, typeof GrTabsList, typeof GrTabsTrigger, typeof GrTabsContent];
DeclarationView source
GrTabsContentts
export 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>;
}
Name
Kind
Type
Requirement
consumerProps
property
any
required
disabled
property
import("@angular/core").InputSignal<boolean | undefined>
required
elementRef
property
any
required
listeners
property
any
required
ngOnDestroy
method
() => void
required
ɵdir
property
i0.ɵɵDirectiveDeclaration<GrTabsContent, "[grTabsContent]", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>
required
ɵfac
property
i0.ɵɵFactoryDeclaration<GrTabsContent, never>
required
registeredKey
property
any
required
store
property
any
required
value
property
import("@angular/core").InputSignal<string>
required
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

class
DeclarationView source
GrTabsListts
export 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>;
}
Name
Kind
Type
Requirement
consumerProps
property
any
required
elementRef
property
any
required
listeners
property
any
required
ngOnDestroy
method
() => void
required
ɵdir
property
i0.ɵɵDirectiveDeclaration<GrTabsList, "[grTabsList]", never, {}, {}, never, never, true, never>
required
ɵfac
property
i0.ɵɵFactoryDeclaration<GrTabsList, never>
required
store
property
any
required
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

class
DeclarationView source
GrTabsRootts
export 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>;
}
Name
Kind
Type
Requirement
activation
property
import("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsActivation | undefined>
required
defaultValue
property
import("@angular/core").InputSignal<string | undefined>
required
dir
property
import("@angular/core").InputSignal<"rtl" | "ltr" | undefined>
required
elementRef
property
any
required
injector
property
any
required
lastSynced
property
any
required
listeners
property
any
required
loop
property
import("@angular/core").InputSignal<boolean | undefined>
required
ngOnDestroy
method
() => void
required
orientation
property
import("@angular/core").InputSignal<import("@grassroot/ui-machines/tabs").TabsOrientation | undefined>
required
ɵcmp
property
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>
required
ɵfac
property
i0.ɵɵFactoryDeclaration<GrTabsRoot, never>
required
store
property
TabsStore
required
tabs
property
import("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/tabs").TabsItem<string>[]>
required
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
DeclarationView source
GrTabsTriggerts
export 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>;
}
Name
Kind
Type
Requirement
consumerProps
property
any
required
elementRef
property
any
required
listeners
property
any
required
ngOnDestroy
method
() => void
required
ɵdir
property
i0.ɵɵDirectiveDeclaration<GrTabsTrigger, "[grTabsTrigger]", never, { "tab": { "alias": "tab"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>
required
ɵfac
property
i0.ɵɵFactoryDeclaration<GrTabsTrigger, never>
required
registeredKey
property
any
required
store
property
any
required
tab
property
import("@angular/core").InputSignal<TabsItem<string>>
required
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

value
DeclarationView source
TABS_STOREts
export declare const TABS_STORE: InjectionToken<TabsStore>;

TabsStore

interface
DeclarationView source
TabsStorets
export 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;
}
Name
Kind
Type
Requirement
Description
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
setDir
method
(dir: "ltr" | "rtl" | undefined) => void
required
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).
start
method
() => void
required
Starts the underlying service (idempotent) — call from the browser only.
stop
method
() => void
required
Stops the underlying service (idempotent).
sync
method
(input: import("@grassroot/ui-machines/tabs").TabsInput) => void
required
Forwards a new committed input to the machine (no-op on the very first call).
version
property
WritableSignal<number>
required
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).
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).
DeclarationView source
TabsValueChangeDetailts
export interface TabsValueChangeDetail {
readonly value: string;
readonly reason: TabsChangeReason;
}
Name
Kind
Type
Requirement
reason
property
TabsChangeReason
required
value
property
string
required
Name
reason
Kind
property
Type
TabsChangeReason
Requirement
required
Name
value
Kind
property
Type
string
Requirement
required

@grassroot/ui-headless-svelte/tabs

Svelte adapter

14 exports
View source packages/ui-headless/svelte/src/tabs/index.ts

createTabs

function
DeclarationView source
createTabsts
export declare function createTabs(inputGetter: () => TabsInput, options?: UseTabsOptions): UseTabsResult;
Name
Kind
Type
Requirement
inputGetter
parameter
() => TabsInput
required
options
parameter
UseTabsOptions
optional
return
return value
UseTabsResult
n/a
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
DeclarationView source
TabsActivationts
type TabsActivation = "automatic" | "manual";

TabsContent

value
DeclarationView source
TabsContentts
export declare const TabsContent: LegacyComponentType;
Name
Kind
Type
Requirement
args
parameter
Parameters<Component<Record<string, any>>>
optional
return
return value
ReturnType<Component<Record<string, any>, Record<string, any>>>
n/a
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

interface
DeclarationView source
TabsContextValuets
export 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;
}
Name
Kind
Type
Requirement
Description
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
version
property
() => number
required
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`).
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

interface
DeclarationView source
TabsItemts
interface TabsItem<TValue extends TabsItemValue = string> {
readonly value: TValue;
readonly disabled?: boolean;
}
Name
Kind
Type
Requirement
disabled
property
boolean
optional
value
property
TValue
required
Name
disabled
Kind
property
Type
boolean
Requirement
optional
Name
value
Kind
property
Type
TValue
Requirement
required
DeclarationView source
TabsItemValuets
type TabsItemValue = string;

TabsList

value
DeclarationView source
TabsListts
export declare const TabsList: LegacyComponentType;
Name
Kind
Type
Requirement
args
parameter
Parameters<Component<Record<string, any>>>
optional
return
return value
ReturnType<Component<Record<string, any>, Record<string, any>>>
n/a
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
DeclarationView source
TabsOrientationts
type TabsOrientation = "horizontal" | "vertical";

TabsRoot

value
DeclarationView source
TabsRootts
export declare const TabsRoot: LegacyComponentType;
Name
Kind
Type
Requirement
args
parameter
Parameters<Component<Record<string, any>>>
optional
return
return value
ReturnType<Component<Record<string, any>, Record<string, any>>>
n/a
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

value
DeclarationView source
TabsTriggerts
export declare const TabsTrigger: LegacyComponentType;
Name
Kind
Type
Requirement
args
parameter
Parameters<Component<Record<string, any>>>
optional
return
return value
ReturnType<Component<Record<string, any>, Record<string, any>>>
n/a
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
DeclarationView source
TabsValueChangeDetailts
export interface TabsValueChangeDetail {
readonly value: string;
readonly reason: TabsChangeReason;
}
Name
Kind
Type
Requirement
reason
property
TabsChangeReason
required
value
property
string
required
Name
reason
Kind
property
Type
TabsChangeReason
Requirement
required
Name
value
Kind
property
Type
string
Requirement
required

useTabsContext

function
DeclarationView source
useTabsContextts
export declare function useTabsContext(partName: string): TabsContextValue;
Name
Kind
Type
Requirement
partName
parameter
string
required
return
return value
TabsContextValue
n/a
Name
partName
Kind
parameter
Type
string
Requirement
required
Name
return
Kind
return value
Type
TabsContextValue
Requirement
n/a

UseTabsOptions

interface
DeclarationView source
UseTabsOptionsts
export interface UseTabsOptions {
readonly dir?: "ltr" | "rtl";
readonly onValueChange?: (detail: TabsValueChangeDetail) => void;
}
Name
Kind
Type
Requirement
dir
property
"ltr" | "rtl"
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
Name
dir
Kind
property
Type
"ltr" | "rtl"
Requirement
optional
Name
onValueChange
Kind
property
Type
(detail: TabsValueChangeDetail) => void
Requirement
optional

UseTabsResult

interface
DeclarationView source
UseTabsResultts
export interface UseTabsResult {
readonly service: TabsService;
readonly connector: TabsApi;
readonly scope: PartScope;
readonly version: () => number;
}
Name
Kind
Type
Requirement
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
version
property
() => number
required
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

16 exports
View source packages/ui-headless/solid/src/tabs/index.ts

TabsContent

function
DeclarationView source
TabsContentts
export declare function TabsContent(props: TabsContentProps): JSX.Element;
Name
Kind
Type
Requirement
props
parameter
TabsContentProps
required
return
return value
JSX.Element
n/a
Name
props
Kind
parameter
Type
TabsContentProps
Requirement
required
Name
return
Kind
return value
Type
JSX.Element
Requirement
n/a

TabsContentProps

interface
DeclarationView source
TabsContentPropsts
export interface TabsContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
readonly as?: AsProp;
readonly tab: TabsItem;
}
Name
Kind
Type
Requirement
as
property
AsProp
optional
tab
property
TabsItem
required
Name
as
Kind
property
Type
AsProp
Requirement
optional
Name
tab
Kind
property
Type
TabsItem
Requirement
required

TabsContext

value
DeclarationView source
TabsContextts
export declare const TabsContext: import("solid-js").Context<TabsContextValue | undefined>;

TabsContextValue

interface
DeclarationView source
TabsContextValuets
export 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>;
}
Name
Kind
Type
Requirement
Description
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
snapshot
property
Accessor<TabsSnapshot>
required
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.
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

interface
DeclarationView source
TabsItemts
interface TabsItem<TValue extends TabsItemValue = string> {
readonly value: TValue;
readonly disabled?: boolean;
}
Name
Kind
Type
Requirement
disabled
property
boolean
optional
value
property
TValue
required
Name
disabled
Kind
property
Type
boolean
Requirement
optional
Name
value
Kind
property
Type
TValue
Requirement
required

TabsList

function
DeclarationView source
TabsListts
export declare function TabsList(props: TabsListProps): JSX.Element;
Name
Kind
Type
Requirement
props
parameter
TabsListProps
required
return
return value
JSX.Element
n/a
Name
props
Kind
parameter
Type
TabsListProps
Requirement
required
Name
return
Kind
return value
Type
JSX.Element
Requirement
n/a

TabsListProps

interface
DeclarationView source
TabsListPropsts
export interface TabsListProps extends JSX.HTMLAttributes<HTMLDivElement> {
readonly as?: AsProp;
}
Name
Kind
Type
Requirement
as
property
AsProp
optional
Name
as
Kind
property
Type
AsProp
Requirement
optional

TabsRoot

function
DeclarationView source
TabsRootts
export declare function TabsRoot(props: TabsRootProps): JSX.Element;
Name
Kind
Type
Requirement
props
parameter
TabsRootProps
required
return
return value
JSX.Element
n/a
Name
props
Kind
parameter
Type
TabsRootProps
Requirement
required
Name
return
Kind
return value
Type
JSX.Element
Requirement
n/a

TabsRootProps

interface
DeclarationView source
TabsRootPropsts
export 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;
}
Name
Kind
Type
Requirement
activation
property
TabsInput["activation"]
optional
as
property
AsProp
optional
defaultValue
property
TabsInput["defaultValue"]
optional
dir
property
"ltr" | "rtl"
optional
loop
property
TabsInput["loop"]
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
orientation
property
TabsInput["orientation"]
optional
tabs
property
TabsInput["tabs"]
required
value
property
TabsInput["value"]
optional
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

function
DeclarationView source
TabsTriggerts
export declare function TabsTrigger(props: TabsTriggerProps): JSX.Element;
Name
Kind
Type
Requirement
props
parameter
TabsTriggerProps
required
return
return value
JSX.Element
n/a
Name
props
Kind
parameter
Type
TabsTriggerProps
Requirement
required
Name
return
Kind
return value
Type
JSX.Element
Requirement
n/a

TabsTriggerProps

interface
DeclarationView source
TabsTriggerPropsts
export interface TabsTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
readonly as?: AsProp;
readonly tab: TabsItem;
}
Name
Kind
Type
Requirement
as
property
AsProp
optional
tab
property
TabsItem
required
Name
as
Kind
property
Type
AsProp
Requirement
optional
Name
tab
Kind
property
Type
TabsItem
Requirement
required
DeclarationView source
TabsValueChangeDetailts
export interface TabsValueChangeDetail {
readonly value: string;
readonly reason: TabsChangeReason;
}
Name
Kind
Type
Requirement
reason
property
TabsChangeReason
required
value
property
string
required
Name
reason
Kind
property
Type
TabsChangeReason
Requirement
required
Name
value
Kind
property
Type
string
Requirement
required

useTabs

function
DeclarationView source
useTabsts
export declare function useTabs(input: Accessor<TabsInput>, options?: UseTabsOptions): UseTabsResult;
Name
Kind
Type
Requirement
input
parameter
Accessor<TabsInput>
required
options
parameter
UseTabsOptions
optional
return
return value
UseTabsResult
n/a
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

function
DeclarationView source
useTabsContextts
export declare function useTabsContext(partName: string): TabsContextValue;
Name
Kind
Type
Requirement
partName
parameter
string
required
return
return value
TabsContextValue
n/a
Name
partName
Kind
parameter
Type
string
Requirement
required
Name
return
Kind
return value
Type
TabsContextValue
Requirement
n/a

UseTabsOptions

interface
DeclarationView source
UseTabsOptionsts
export interface UseTabsOptions {
readonly dir?: "ltr" | "rtl";
readonly onValueChange?: (detail: TabsValueChangeDetail) => void;
}
Name
Kind
Type
Requirement
dir
property
"ltr" | "rtl"
optional
onValueChange
property
(detail: TabsValueChangeDetail) => void
optional
Name
dir
Kind
property
Type
"ltr" | "rtl"
Requirement
optional
Name
onValueChange
Kind
property
Type
(detail: TabsValueChangeDetail) => void
Requirement
optional

UseTabsResult

interface
DeclarationView source
UseTabsResultts
export interface UseTabsResult {
readonly service: TabsService;
readonly connector: TabsApi;
readonly scope: PartScope;
readonly snapshot: Accessor<TabsSnapshot>;
}
Name
Kind
Type
Requirement
connector
property
TabsApi
required
scope
property
PartScope
required
service
property
TabsService
required
snapshot
property
Accessor<TabsSnapshot>
required
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