- Name
service- Kind
- parameter
- Type
ThemeMenuService- Requirement
- required
Docs/API reference/Headless/theme-menu
theme-menu 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/theme-menu
Core connector and vanilla API
packages/ui-headless/core/src/theme-menu/index.ts
activateThemeMenuLayer
functionNon-modal layer activation copied from DropdownMenu's seam. Escape and outside pointerdown are owned by the layer, not by the connector's parts.
declare function activateThemeMenuLayer(service: ThemeMenuService, scope: PartScope, doc: Document): () => void;serviceThemeMenuServicescopePartScopedocDocumentreturn() => void- Name
scope- Kind
- parameter
- Type
PartScope- Requirement
- required
- Name
doc- Kind
- parameter
- Type
Document- Requirement
- required
- Name
return- Kind
- return value
- Type
() => void- Requirement
- n/a
connectThemeMenu
functiondeclare function connectThemeMenu(service: ThemeMenuService, scope: PartScope, options?: ThemeMenuConnectOptions): ThemeMenuApi;serviceThemeMenuServicescopePartScopeoptionsThemeMenuConnectOptionsreturnThemeMenuApi- Name
service- Kind
- parameter
- Type
ThemeMenuService- Requirement
- required
- Name
scope- Kind
- parameter
- Type
PartScope- Requirement
- required
- Name
options- Kind
- parameter
- Type
ThemeMenuConnectOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
ThemeMenuApi- Requirement
- n/a
mountThemeMenu
functiondeclare function mountThemeMenu(container: HTMLElement, options: MountThemeMenuOptions): ThemeMenuMount;containerHTMLElementoptionsMountThemeMenuOptionsreturnThemeMenuMount- Name
container- Kind
- parameter
- Type
HTMLElement- Requirement
- required
- Name
options- Kind
- parameter
- Type
MountThemeMenuOptions- Requirement
- required
- Name
return- Kind
- return value
- Type
ThemeMenuMount- Requirement
- n/a
MountThemeMenuOptions
interfaceinterface MountThemeMenuOptions extends ThemeMenuInput { readonly align?: "start" | "end"; readonly onOpenChange?: (detail: { open: boolean; reason: ThemeMenuChangeReason; }) => void; readonly onThemeChange?: (detail: { theme: string; }) => void; readonly scheduler?: Scheduler; readonly renderTrigger?: (button: HTMLElement) => void; readonly renderItem?: (button: HTMLElement, item: ThemeMenuItem) => void;}align"start" | "end"onOpenChange(detail: {
open: boolean;
reason: ThemeMenuChangeReason;
}) => voidonThemeChange(detail: {
theme: string;
}) => voidrenderItem(button: HTMLElement, item: ThemeMenuItem) => voidrenderTrigger(button: HTMLElement) => voidschedulerScheduler- Name
align- Kind
- property
- Type
"start" | "end"- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: { open: boolean; reason: ThemeMenuChangeReason; }) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: { theme: string; }) => void- Requirement
- optional
- Name
renderItem- Kind
- property
- Type
(button: HTMLElement, item: ThemeMenuItem) => void- Requirement
- optional
- Name
renderTrigger- Kind
- property
- Type
(button: HTMLElement) => void- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
Scheduler- Requirement
- optional
runThemeMenuCommand
functionResolves machine commands. Reserved scheduler commands are intercepted before this function by `createScheduledEventRunner`.
declare function runThemeMenuCommand(command: ThemeMenuCommand, _scope: PartScope, environment?: ThemeMenuCommandEnvironment): void;commandThemeMenuCommand_scopePartScopeenvironmentThemeMenuCommandEnvironmentreturnvoid- Name
command- Kind
- parameter
- Type
ThemeMenuCommand- Requirement
- required
- Name
_scope- Kind
- parameter
- Type
PartScope- Requirement
- required
- Name
environment- Kind
- parameter
- Type
ThemeMenuCommandEnvironment- Requirement
- optional
- Name
return- Kind
- return value
- Type
void- Requirement
- n/a
themeMenuAnatomy
valueexport declare const themeMenuAnatomy: { readonly scope: "theme-menu"; readonly parts: readonly ["trigger", "positioner", "content", "item"];};partsreadonly ["trigger", "positioner", "content", "item"]scope"theme-menu"- Name
parts- Kind
- property
- Type
readonly ["trigger", "positioner", "content", "item"]- Requirement
- required
- Name
scope- Kind
- property
- Type
"theme-menu"- Requirement
- required
ThemeMenuApi
interfaceinterface ThemeMenuApi { triggerProps(): PartProps; positionerProps(): PartProps; contentProps(): PartProps; itemProps(item: ThemeMenuItem): PartProps; readonly open: boolean;}contentProps() => PartPropsitemProps(item: ThemeMenuItem) => PartPropsopenbooleanpositionerProps() => PartPropstriggerProps() => PartProps- Name
contentProps- Kind
- method
- Type
() => PartProps- Requirement
- required
- Name
itemProps- Kind
- method
- Type
(item: ThemeMenuItem) => PartProps- Requirement
- required
- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
positionerProps- Kind
- method
- Type
() => PartProps- Requirement
- required
- Name
triggerProps- Kind
- method
- Type
() => PartProps- Requirement
- required
ThemeMenuChangeDetail
interfaceinterface ThemeMenuChangeDetail { readonly theme: string;}themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
type ThemeMenuChangeReason = ThemeMenuOpenReason | ThemeMenuCloseReason;ThemeMenuCloseReason
typetype ThemeMenuCloseReason = "escape" | "outside-click" | "select" | "programmatic";ThemeMenuCommand
typetype ThemeMenuCommand = (CommandObject & { readonly type: "OPEN_CHANGE_REQUEST"; readonly open: boolean; readonly reason: ThemeMenuChangeReason;}) | (CommandObject & { readonly type: "THEME_CHANGE_REQUEST"; readonly theme: string; readonly storageKey: string; readonly reason: "select";}) | ScheduleCommand<ThemeMenuEvent> | CancelCommand;ThemeMenuCommandEnvironment
interfaceinterface ThemeMenuCommandEnvironment { readonly document?: Document; readonly storage?: Storage; readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void;}documentDocumentonOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidstorageStorage- Name
document- Kind
- property
- Type
Document- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
storage- Kind
- property
- Type
Storage- Requirement
- optional
ThemeMenuConnectOptions
interfaceinterface ThemeMenuConnectOptions { readonly align?: "start" | "end";}align"start" | "end"- Name
align- Kind
- property
- Type
"start" | "end"- Requirement
- optional
ThemeMenuContext
typetype ThemeMenuContext = MenuContext & { readonly theme: string;};themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
ThemeMenuEvent
typetype ThemeMenuEvent = { readonly type: "TOGGLE"; readonly reason: "trigger";} | { readonly type: "OPEN"; readonly reason: ThemeMenuOpenReason; readonly highlight?: "first" | "last";} | { readonly type: "CLOSE"; readonly reason: ThemeMenuCloseReason;} | { readonly type: "MOVE"; readonly direction: -1 | 1;} | { readonly type: "HIGHLIGHT"; readonly index: number;} | { readonly type: "HOME";} | { readonly type: "END";} | { readonly type: "SELECT";} | { readonly type: "TYPEAHEAD"; readonly char: string;} | { readonly type: "SYNC_THEME"; readonly theme: string;};ThemeMenuInput
typetype ThemeMenuInput = { readonly open?: boolean; readonly defaultOpen?: boolean; readonly items: readonly ThemeMenuItem[]; readonly theme?: string; /** Required uncontrolled seed when no current theme is supplied. */ readonly defaultTheme: string; /** Required key copied into the persistence command. */ readonly storageKey: string; readonly typeaheadTimeoutMs?: number;};defaultOpenbooleandefaultThemestringitemsreadonly ThemeMenuItem[]openbooleanstorageKeystringthemestringtypeaheadTimeoutMsnumber- Name
defaultOpen- Kind
- property
- Type
boolean- Requirement
- optional
- Description
- —
- Name
defaultTheme- Kind
- property
- Type
string- Requirement
- required
- Description
- Required uncontrolled seed when no current theme is supplied.
- Name
items- Kind
- property
- Type
readonly ThemeMenuItem[]- Requirement
- required
- Description
- —
- Name
open- Kind
- property
- Type
boolean- Requirement
- optional
- Description
- —
- Name
storageKey- Kind
- property
- Type
string- Requirement
- required
- Description
- Required key copied into the persistence command.
- Name
theme- Kind
- property
- Type
string- Requirement
- optional
- Description
- —
- Name
typeaheadTimeoutMs- Kind
- property
- Type
number- Requirement
- optional
- Description
- —
ThemeMenuItem
interfaceinterface ThemeMenuItem { readonly id: string; readonly value: string; readonly disabled?: boolean; readonly textValue?: string;}disabledbooleanidstringtextValuestringvaluestring- Name
disabled- Kind
- property
- Type
boolean- Requirement
- optional
- Name
id- Kind
- property
- Type
string- Requirement
- required
- Name
textValue- Kind
- property
- Type
string- Requirement
- optional
- Name
value- Kind
- property
- Type
string- Requirement
- required
themeMenuMachine
valueexport declare const themeMenuMachine: ThemeMenuMachine;ThemeMenuMount
interfaceinterface ThemeMenuMount { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly root: HTMLElement; readonly trigger: HTMLElement; destroy(): void;}connectorThemeMenuApidestroy() => voidrootHTMLElementserviceThemeMenuServicetriggerHTMLElement- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
destroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
root- Kind
- property
- Type
HTMLElement- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
trigger- Kind
- property
- Type
HTMLElement- Requirement
- required
ThemeMenuOpenChangeDetail
interfaceinterface ThemeMenuOpenChangeDetail { readonly open: boolean; readonly reason: ThemeMenuChangeReason;}openbooleanreasonThemeMenuChangeReason- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
reason- Kind
- property
- Type
ThemeMenuChangeReason- Requirement
- required
ThemeMenuOpenReason
typetype ThemeMenuOpenReason = "trigger" | "programmatic";ThemeMenuPart
typetype ThemeMenuPart = (typeof themeMenuAnatomy.parts)[number];themeMenuSelectors
valueexport declare const themeMenuSelectors: { open: (snapshot: ThemeMenuSnapshot) => boolean; highlightedIndex: (snapshot: ThemeMenuSnapshot) => number; typeaheadBuffer: (snapshot: ThemeMenuSnapshot) => string; theme: (snapshot: ThemeMenuSnapshot) => string;};highlightedIndex(snapshot: ThemeMenuSnapshot) => numberopen(snapshot: ThemeMenuSnapshot) => booleantheme(snapshot: ThemeMenuSnapshot) => stringtypeaheadBuffer(snapshot: ThemeMenuSnapshot) => string- Name
highlightedIndex- Kind
- property
- Type
(snapshot: ThemeMenuSnapshot) => number- Requirement
- required
- Name
open- Kind
- property
- Type
(snapshot: ThemeMenuSnapshot) => boolean- Requirement
- required
- Name
theme- Kind
- property
- Type
(snapshot: ThemeMenuSnapshot) => string- Requirement
- required
- Name
typeaheadBuffer- Kind
- property
- Type
(snapshot: ThemeMenuSnapshot) => string- Requirement
- required
ThemeMenuService
typetype ThemeMenuService = Service<ThemeMenuInput, ThemeMenuStateValue, ThemeMenuContext, ThemeMenuEvent, ThemeMenuCommand>;ThemeMenuSnapshot
typetype ThemeMenuSnapshot = Snapshot<ThemeMenuStateValue, ThemeMenuContext>;ThemeMenuStateValue
typetype ThemeMenuStateValue = "open" | "closed";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, Item, Positioner, Root, ThemeMenu, Trigger } from "@grassroot/ui-headless-react/theme-menu";Vue imports
<script setup lang="ts">import { ThemeMenuContent, ThemeMenuItem, ThemeMenuPositioner, ThemeMenuRoot, ThemeMenuTrigger } from "@grassroot/ui-headless-vue/theme-menu";</script>Angular imports
import { Component } from "@angular/core";import { GR_THEME_MENU_DECLARATIONS } from "@grassroot/ui-headless-angular/theme-menu"; @Component({ standalone: true, imports: [GR_THEME_MENU_DECLARATIONS], template: `<!-- compose the theme-menu parts here -->` })export class Example {}Svelte imports
<script lang="ts"> import { ThemeMenuContent, ThemeMenuItem, ThemeMenuPositioner, ThemeMenuRoot, ThemeMenuTrigger } from "@grassroot/ui-headless-svelte/theme-menu";</script>Solid imports
import { ThemeMenuContent, ThemeMenuItem, ThemeMenuPositioner, ThemeMenuRoot, ThemeMenuTrigger } from "@grassroot/ui-headless-solid/theme-menu";@grassroot/ui-headless-react/theme-menu
React adapter
packages/ui-headless/react/src/theme-menu/index.ts
Content
valueexport declare const Content: import("react").ForwardRefExoticComponent<ThemeMenuContentProps & import("react").RefAttributes<HTMLDivElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
Item
valueexport declare const Item: import("react").ForwardRefExoticComponent<ThemeMenuItemProps & import("react").RefAttributes<HTMLButtonElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
Positioner
valueexport declare const Positioner: import("react").ForwardRefExoticComponent<ThemeMenuPositionerProps & import("react").RefAttributes<HTMLDivElement>>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
Root
functiondeclare function Root(props: ThemeMenuRootProps): import("react").JSX.Element;propsThemeMenuRootPropsreturnimport("react").JSX.Element- Name
props- Kind
- parameter
- Type
ThemeMenuRootProps- Requirement
- required
- Name
return- Kind
- return value
- Type
import("react").JSX.Element- Requirement
- n/a
ThemeMenu
valueexport declare const ThemeMenu: { Root: typeof Root; Trigger: import("react").ForwardRefExoticComponent<ThemeMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>; Positioner: import("react").ForwardRefExoticComponent<ThemeMenuPositionerProps & import("react").RefAttributes<HTMLDivElement>>; Content: import("react").ForwardRefExoticComponent<ThemeMenuContentProps & import("react").RefAttributes<HTMLDivElement>>; Item: import("react").ForwardRefExoticComponent<ThemeMenuItemProps & import("react").RefAttributes<HTMLButtonElement>>;};Contentimport("react").ForwardRefExoticComponent<ThemeMenuContentProps & import("react").RefAttributes<HTMLDivElement>>Itemimport("react").ForwardRefExoticComponent<ThemeMenuItemProps & import("react").RefAttributes<HTMLButtonElement>>Positionerimport("react").ForwardRefExoticComponent<ThemeMenuPositionerProps & import("react").RefAttributes<HTMLDivElement>>Roottypeof RootTriggerimport("react").ForwardRefExoticComponent<ThemeMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>- Name
Content- Kind
- property
- Type
import("react").ForwardRefExoticComponent<ThemeMenuContentProps & import("react").RefAttributes<HTMLDivElement>>- Requirement
- required
- Name
Item- Kind
- property
- Type
import("react").ForwardRefExoticComponent<ThemeMenuItemProps & import("react").RefAttributes<HTMLButtonElement>>- Requirement
- required
- Name
Positioner- Kind
- property
- Type
import("react").ForwardRefExoticComponent<ThemeMenuPositionerProps & import("react").RefAttributes<HTMLDivElement>>- Requirement
- required
- Name
Root- Kind
- property
- Type
typeof Root- Requirement
- required
- Name
Trigger- Kind
- property
- Type
import("react").ForwardRefExoticComponent<ThemeMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>- Requirement
- required
ThemeMenuChangeDetail
interfaceinterface ThemeMenuChangeDetail { readonly theme: string;}themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
ThemeMenuContentProps
interfaceinterface ThemeMenuContentProps extends ComponentPropsWithoutRef<"div"> { readonly asChild?: boolean;}asChildboolean- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
ThemeMenuContext
valueexport declare const ThemeMenuContext: import("react").Context<ThemeMenuContextValue | null>;propsPreturnReactNode- Name
props- Kind
- parameter
- Type
P- Requirement
- required
- Name
return- Kind
- return value
- Type
ReactNode- Requirement
- n/a
ThemeMenuContextValue
interfaceinterface ThemeMenuContextValue { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope;}connectorThemeMenuApiscopePartScopeserviceThemeMenuService- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
ThemeMenuItemProps
interfaceinterface ThemeMenuItemProps extends ComponentPropsWithoutRef<"button"> { readonly asChild?: boolean; readonly item: ThemeMenuItem;}asChildbooleanitemThemeMenuItem- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
- Name
item- Kind
- property
- Type
ThemeMenuItem- Requirement
- required
ThemeMenuOpenChangeDetail
interfaceinterface ThemeMenuOpenChangeDetail { readonly open: boolean; readonly reason: ThemeMenuChangeReason;}openbooleanreasonThemeMenuChangeReason- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
reason- Kind
- property
- Type
ThemeMenuChangeReason- Requirement
- required
ThemeMenuPositionerProps
interfaceinterface ThemeMenuPositionerProps extends ComponentPropsWithoutRef<"div"> { readonly asChild?: boolean;}asChildboolean- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
ThemeMenuRootProps
interfaceinterface ThemeMenuRootProps { readonly open?: ThemeMenuInput["open"]; readonly defaultOpen?: ThemeMenuInput["defaultOpen"]; readonly items: ThemeMenuInput["items"]; readonly theme?: ThemeMenuInput["theme"]; readonly defaultTheme: ThemeMenuInput["defaultTheme"]; readonly storageKey: ThemeMenuInput["storageKey"]; readonly typeaheadTimeoutMs?: ThemeMenuInput["typeaheadTimeoutMs"]; readonly align?: UseThemeMenuOptions["align"]; readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly scheduler?: UseThemeMenuOptions["scheduler"]; readonly children?: ReactNode;}alignUseThemeMenuOptions["align"]childrenReactNodedefaultOpenThemeMenuInput["defaultOpen"]defaultThemeThemeMenuInput["defaultTheme"]itemsThemeMenuInput["items"]onOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidopenThemeMenuInput["open"]schedulerUseThemeMenuOptions["scheduler"]storageKeyThemeMenuInput["storageKey"]themeThemeMenuInput["theme"]typeaheadTimeoutMsThemeMenuInput["typeaheadTimeoutMs"]- Name
align- Kind
- property
- Type
UseThemeMenuOptions["align"]- Requirement
- optional
- Name
children- Kind
- property
- Type
ReactNode- Requirement
- optional
- Name
defaultOpen- Kind
- property
- Type
ThemeMenuInput["defaultOpen"]- Requirement
- optional
- Name
defaultTheme- Kind
- property
- Type
ThemeMenuInput["defaultTheme"]- Requirement
- required
- Name
items- Kind
- property
- Type
ThemeMenuInput["items"]- Requirement
- required
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
open- Kind
- property
- Type
ThemeMenuInput["open"]- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
UseThemeMenuOptions["scheduler"]- Requirement
- optional
- Name
storageKey- Kind
- property
- Type
ThemeMenuInput["storageKey"]- Requirement
- required
- Name
theme- Kind
- property
- Type
ThemeMenuInput["theme"]- Requirement
- optional
- Name
typeaheadTimeoutMs- Kind
- property
- Type
ThemeMenuInput["typeaheadTimeoutMs"]- Requirement
- optional
ThemeMenuTriggerProps
interfaceinterface ThemeMenuTriggerProps extends Omit<ComponentPropsWithoutRef<"button">, "type"> { readonly asChild?: boolean;}asChildboolean- Name
asChild- Kind
- property
- Type
boolean- Requirement
- optional
Trigger
valueexport declare const Trigger: import("react").ForwardRefExoticComponent<ThemeMenuTriggerProps & 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
useThemeMenu
functiondeclare function useThemeMenu(input: ThemeMenuInput, options?: UseThemeMenuOptions): UseThemeMenuResult;inputThemeMenuInputoptionsUseThemeMenuOptionsreturnUseThemeMenuResult- Name
input- Kind
- parameter
- Type
ThemeMenuInput- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseThemeMenuOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseThemeMenuResult- Requirement
- n/a
useThemeMenuContext
functiondeclare function useThemeMenuContext(partName: string): ThemeMenuContextValue;partNamestringreturnThemeMenuContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
ThemeMenuContextValue- Requirement
- n/a
UseThemeMenuOptions
interfaceinterface UseThemeMenuOptions { readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly align?: "start" | "end"; readonly scheduler?: Scheduler;}align"start" | "end"onOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidschedulerScheduler- Name
align- Kind
- property
- Type
"start" | "end"- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
Scheduler- Requirement
- optional
UseThemeMenuResult
interfaceinterface UseThemeMenuResult { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly snapshot: ThemeMenuSnapshot;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServicesnapshotThemeMenuSnapshot- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
ThemeMenuSnapshot- Requirement
- required
@grassroot/ui-headless-vue/theme-menu
Vue adapter
packages/ui-headless/vue/src/theme-menu/index.ts
ThemeMenuChangeDetail
interfaceinterface ThemeMenuChangeDetail { readonly theme: string;}themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
ThemeMenuContent
valueexport declare const ThemeMenuContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}> | null, {}, {}, {}, 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>;ThemeMenuContextKey
valueexport declare const ThemeMenuContextKey: InjectionKey<ThemeMenuContextValue>;ThemeMenuContextValue
interfaceinterface ThemeMenuContextValue { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly snapshot: ShallowRef<ThemeMenuSnapshot>;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServicesnapshotShallowRef<ThemeMenuSnapshot>- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
ShallowRef<ThemeMenuSnapshot>- Requirement
- required
ThemeMenuItem
valueexport declare const ThemeMenuItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; }; item: { type: PropType<ThemeMenuItem$1>; 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; }; item: { type: PropType<ThemeMenuItem$1>; required: true; };}>> & Readonly<{}>, { asChild: boolean;}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;ThemeMenuOpenChangeDetail
interfaceinterface ThemeMenuOpenChangeDetail { readonly open: boolean; readonly reason: ThemeMenuChangeReason;}openbooleanreasonThemeMenuChangeReason- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
reason- Kind
- property
- Type
ThemeMenuChangeReason- Requirement
- required
ThemeMenuPositioner
valueexport declare const ThemeMenuPositioner: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}> | null, {}, {}, {}, 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>;ThemeMenuRoot
valueexport declare const ThemeMenuRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ open: { type: PropType<ThemeMenuInput["open"]>; default: undefined; }; defaultOpen: { type: PropType<ThemeMenuInput["defaultOpen"]>; default: undefined; }; items: { type: PropType<ThemeMenuInput["items"]>; required: true; }; theme: { type: PropType<ThemeMenuInput["theme"]>; default: undefined; }; defaultTheme: { type: PropType<ThemeMenuInput["defaultTheme"]>; required: true; }; storageKey: { type: PropType<ThemeMenuInput["storageKey"]>; required: true; }; typeaheadTimeoutMs: { type: PropType<ThemeMenuInput["typeaheadTimeoutMs"]>; default: undefined; }; align: { type: PropType<UseThemeMenuOptions["align"]>; default: undefined; }; scheduler: { type: PropType<UseThemeMenuOptions["scheduler"]>; default: undefined; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}>[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { openChange: (_detail: ThemeMenuOpenChangeDetail) => true; themeChange: (_detail: ThemeMenuChangeDetail) => true;}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{ open: { type: PropType<ThemeMenuInput["open"]>; default: undefined; }; defaultOpen: { type: PropType<ThemeMenuInput["defaultOpen"]>; default: undefined; }; items: { type: PropType<ThemeMenuInput["items"]>; required: true; }; theme: { type: PropType<ThemeMenuInput["theme"]>; default: undefined; }; defaultTheme: { type: PropType<ThemeMenuInput["defaultTheme"]>; required: true; }; storageKey: { type: PropType<ThemeMenuInput["storageKey"]>; required: true; }; typeaheadTimeoutMs: { type: PropType<ThemeMenuInput["typeaheadTimeoutMs"]>; default: undefined; }; align: { type: PropType<UseThemeMenuOptions["align"]>; default: undefined; }; scheduler: { type: PropType<UseThemeMenuOptions["scheduler"]>; default: undefined; };}>> & Readonly<{ onOpenChange?: ((_detail: ThemeMenuOpenChangeDetail) => any) | undefined; onThemeChange?: ((_detail: ThemeMenuChangeDetail) => any) | undefined;}>, { open: boolean | undefined; defaultOpen: boolean | undefined; theme: string | undefined; typeaheadTimeoutMs: number | undefined; align: "end" | "start" | undefined; scheduler: import("@grassroot/statechart/scheduler").Scheduler | undefined;}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;ThemeMenuTrigger
valueexport declare const ThemeMenuTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{ asChild: { type: BooleanConstructor; default: boolean; };}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any;}> | null, {}, {}, {}, 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>;useThemeMenu
functiondeclare function useThemeMenu(input: ThemeMenuInput | (() => ThemeMenuInput), options?: UseThemeMenuOptions): UseThemeMenuResult;inputThemeMenuInput | (() => ThemeMenuInput)optionsUseThemeMenuOptionsreturnUseThemeMenuResult- Name
input- Kind
- parameter
- Type
ThemeMenuInput | (() => ThemeMenuInput)- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseThemeMenuOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseThemeMenuResult- Requirement
- n/a
useThemeMenuContext
functiondeclare function useThemeMenuContext(partName: string): ThemeMenuContextValue;partNamestringreturnThemeMenuContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
ThemeMenuContextValue- Requirement
- n/a
UseThemeMenuOptions
interfaceinterface UseThemeMenuOptions { readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly align?: "start" | "end"; readonly scheduler?: Scheduler;}align"start" | "end"onOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidschedulerScheduler- Name
align- Kind
- property
- Type
"start" | "end"- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
Scheduler- Requirement
- optional
UseThemeMenuResult
interfaceinterface UseThemeMenuResult { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly snapshot: ShallowRef<ThemeMenuSnapshot>;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServicesnapshotShallowRef<ThemeMenuSnapshot>- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
ShallowRef<ThemeMenuSnapshot>- Requirement
- required
@grassroot/ui-headless-angular/theme-menu
Angular adapter
packages/ui-headless/angular/src/theme-menu/index.ts
createThemeMenuStore
functionexport declare function createThemeMenuStore(initialInput: ThemeMenuInput, options?: CreateThemeMenuStoreOptions): ThemeMenuStore;initialInputThemeMenuInputoptionsCreateThemeMenuStoreOptionsreturnThemeMenuStore- Name
initialInput- Kind
- parameter
- Type
ThemeMenuInput- Requirement
- required
- Name
options- Kind
- parameter
- Type
CreateThemeMenuStoreOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
ThemeMenuStore- Requirement
- n/a
CreateThemeMenuStoreOptions
interfaceexport interface CreateThemeMenuStoreOptions { readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly onCommit?: () => void; readonly align?: "start" | "end" | (() => "start" | "end" | undefined); readonly scheduler?: Scheduler;}align"start" | "end" | (() => "start" | "end" | undefined)onCommit() => voidonOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidschedulerScheduler- Name
align- Kind
- property
- Type
"start" | "end" | (() => "start" | "end" | undefined)- Requirement
- optional
- Name
onCommit- Kind
- property
- Type
() => void- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
Scheduler- Requirement
- optional
export declare const GR_THEME_MENU_DECLARATIONS: readonly [typeof ThemeMenuRoot, typeof GrThemeMenuTrigger, typeof GrThemeMenuOpen, typeof GrThemeMenuPositioner, typeof GrThemeMenuContent, typeof GrThemeMenuItem];GrThemeMenuContent
classexport declare class GrThemeMenuContent implements OnDestroy { private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrThemeMenuContent, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrThemeMenuContent, "[grThemeMenuContent]", never, {}, {}, never, never, true, never>;}consumerPropsanyelementRefanylistenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrThemeMenuContent, "[grThemeMenuContent]", never, {}, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrThemeMenuContent, 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<GrThemeMenuContent, "[grThemeMenuContent]", never, {}, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrThemeMenuContent, never>- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
GrThemeMenuItem
classexport declare class GrThemeMenuItem implements OnDestroy { readonly item: import("@angular/core").InputSignal<ThemeMenuItem>; private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; private registeredKey; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrThemeMenuItem, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrThemeMenuItem, "[grThemeMenuItem]", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;}consumerPropsanyelementRefanyitemimport("@angular/core").InputSignal<ThemeMenuItem>listenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrThemeMenuItem, "[grThemeMenuItem]", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrThemeMenuItem, never>registeredKeyanystoreany- Name
consumerProps- Kind
- property
- Type
any- Requirement
- required
- Name
elementRef- Kind
- property
- Type
any- Requirement
- required
- Name
item- Kind
- property
- Type
import("@angular/core").InputSignal<ThemeMenuItem>- 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<GrThemeMenuItem, "[grThemeMenuItem]", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrThemeMenuItem, never>- Requirement
- required
- Name
registeredKey- Kind
- property
- Type
any- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
GrThemeMenuOpen
classexport declare class GrThemeMenuOpen implements OnDestroy { private readonly store; private readonly templateRef; private readonly viewContainerRef; private hasView; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrThemeMenuOpen, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrThemeMenuOpen, "[grThemeMenuOpen]", never, {}, {}, never, never, true, never>;}hasViewanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrThemeMenuOpen, "[grThemeMenuOpen]", never, {}, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrThemeMenuOpen, never>storeanytemplateRefanyviewContainerRefany- Name
hasView- Kind
- property
- Type
any- Requirement
- required
- Name
ngOnDestroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
ɵdir- Kind
- property
- Type
i0.ɵɵDirectiveDeclaration<GrThemeMenuOpen, "[grThemeMenuOpen]", never, {}, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrThemeMenuOpen, never>- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
- Name
templateRef- Kind
- property
- Type
any- Requirement
- required
- Name
viewContainerRef- Kind
- property
- Type
any- Requirement
- required
GrThemeMenuPositioner
classexport declare class GrThemeMenuPositioner implements OnDestroy { private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrThemeMenuPositioner, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrThemeMenuPositioner, "[grThemeMenuPositioner]", never, {}, {}, never, never, true, never>;}consumerPropsanyelementRefanylistenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrThemeMenuPositioner, "[grThemeMenuPositioner]", never, {}, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrThemeMenuPositioner, 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<GrThemeMenuPositioner, "[grThemeMenuPositioner]", never, {}, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrThemeMenuPositioner, never>- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
GrThemeMenuRoot
classexport declare class GrThemeMenuRoot implements OnDestroy { readonly open: import("@angular/core").InputSignal<boolean | undefined>; readonly defaultOpen: import("@angular/core").InputSignal<boolean | undefined>; readonly items: import("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/theme-menu").ThemeMenuItem[]>; readonly theme: import("@angular/core").InputSignal<string | undefined>; readonly defaultTheme: import("@angular/core").InputSignal<string>; readonly storageKey: import("@angular/core").InputSignal<string>; readonly typeaheadTimeoutMs: import("@angular/core").InputSignal<number | undefined>; readonly align: import("@angular/core").InputSignal<"start" | "end" | undefined>; readonly openChange: import("@angular/core").OutputEmitterRef<ThemeMenuOpenChangeDetail>; readonly themeChange: import("@angular/core").OutputEmitterRef<ThemeMenuChangeDetail>; private readonly injector; private lastSynced; private releaseManagers; readonly store: ThemeMenuStore; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrThemeMenuRoot, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrThemeMenuRoot, "[grThemeMenuRoot]", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultTheme": { "alias": "defaultTheme"; "required": true; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": true; "isSignal": true; }; "typeaheadTimeoutMs": { "alias": "typeaheadTimeoutMs"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; "themeChange": "themeChange"; }, never, never, true, never>;}alignimport("@angular/core").InputSignal<"start" | "end" | undefined>defaultOpenimport("@angular/core").InputSignal<boolean | undefined>defaultThemeimport("@angular/core").InputSignal<string>injectoranyitemsimport("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/theme-menu").ThemeMenuItem[]>lastSyncedanyngOnDestroy() => voidopenimport("@angular/core").InputSignal<boolean | undefined>openChangeimport("@angular/core").OutputEmitterRef<ThemeMenuOpenChangeDetail>ɵdiri0.ɵɵDirectiveDeclaration<GrThemeMenuRoot, "[grThemeMenuRoot]", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultTheme": { "alias": "defaultTheme"; "required": true; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": true; "isSignal": true; }; "typeaheadTimeoutMs": { "alias": "typeaheadTimeoutMs"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; "themeChange": "themeChange"; }, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrThemeMenuRoot, never>releaseManagersanystorageKeyimport("@angular/core").InputSignal<string>storeThemeMenuStore- Name
align- Kind
- property
- Type
import("@angular/core").InputSignal<"start" | "end" | undefined>- Requirement
- required
- Name
defaultOpen- Kind
- property
- Type
import("@angular/core").InputSignal<boolean | undefined>- Requirement
- required
- Name
defaultTheme- Kind
- property
- Type
import("@angular/core").InputSignal<string>- Requirement
- required
- Name
injector- Kind
- property
- Type
any- Requirement
- required
- Name
items- Kind
- property
- Type
import("@angular/core").InputSignal<readonly import("@grassroot/ui-machines/theme-menu").ThemeMenuItem[]>- Requirement
- required
- Name
lastSynced- Kind
- property
- Type
any- Requirement
- required
- Name
ngOnDestroy- Kind
- method
- Type
() => void- Requirement
- required
- Name
open- Kind
- property
- Type
import("@angular/core").InputSignal<boolean | undefined>- Requirement
- required
- Name
openChange- Kind
- property
- Type
import("@angular/core").OutputEmitterRef<ThemeMenuOpenChangeDetail>- Requirement
- required
- Name
ɵdir- Kind
- property
- Type
i0.ɵɵDirectiveDeclaration<GrThemeMenuRoot, "[grThemeMenuRoot]", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultTheme": { "alias": "defaultTheme"; "required": true; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": true; "isSignal": true; }; "typeaheadTimeoutMs": { "alias": "typeaheadTimeoutMs"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; "themeChange": "themeChange"; }, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrThemeMenuRoot, never>- Requirement
- required
- Name
releaseManagers- Kind
- property
- Type
any- Requirement
- required
- Name
storageKey- Kind
- property
- Type
import("@angular/core").InputSignal<string>- Requirement
- required
- Name
store- Kind
- property
- Type
ThemeMenuStore- Requirement
- required
- Name
theme- Kind
- property
- Type
import("@angular/core").InputSignal<string | undefined>- Requirement
- required
- Name
themeChange- Kind
- property
- Type
import("@angular/core").OutputEmitterRef<ThemeMenuChangeDetail>- Requirement
- required
- Name
typeaheadTimeoutMs- Kind
- property
- Type
import("@angular/core").InputSignal<number | undefined>- Requirement
- required
GrThemeMenuTrigger
classexport declare class GrThemeMenuTrigger implements OnDestroy { private readonly store; private readonly elementRef; private readonly listeners; private readonly consumerProps; constructor(); ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration<GrThemeMenuTrigger, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<GrThemeMenuTrigger, "[grThemeMenuTrigger]", never, {}, {}, never, never, true, never>;}consumerPropsanyelementRefanylistenersanyngOnDestroy() => voidɵdiri0.ɵɵDirectiveDeclaration<GrThemeMenuTrigger, "[grThemeMenuTrigger]", never, {}, {}, never, never, true, never>ɵfaci0.ɵɵFactoryDeclaration<GrThemeMenuTrigger, 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<GrThemeMenuTrigger, "[grThemeMenuTrigger]", never, {}, {}, never, never, true, never>- Requirement
- required
- Name
ɵfac- Kind
- property
- Type
i0.ɵɵFactoryDeclaration<GrThemeMenuTrigger, never>- Requirement
- required
- Name
store- Kind
- property
- Type
any- Requirement
- required
THEME_MENU_STORE
valueexport declare const THEME_MENU_STORE: InjectionToken<ThemeMenuStore>;ThemeMenuChangeDetail
interfaceexport interface ThemeMenuChangeDetail { readonly theme: string;}themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
ThemeMenuOpenChangeDetail
interfaceexport interface ThemeMenuOpenChangeDetail { readonly open: boolean; readonly reason: ThemeMenuChangeReason;}openbooleanreasonThemeMenuChangeReason- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
reason- Kind
- property
- Type
ThemeMenuChangeReason- Requirement
- required
ThemeMenuStore
interfaceexport interface ThemeMenuStore { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly version: WritableSignal<number>; start(): void; stop(): void; sync(input: ThemeMenuInput): void;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServicestart() => voidstop() => voidsync(input: ThemeMenuInput) => voidversionWritableSignal<number>- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
start- Kind
- method
- Type
() => void- Requirement
- required
- Name
stop- Kind
- method
- Type
() => void- Requirement
- required
- Name
sync- Kind
- method
- Type
(input: ThemeMenuInput) => void- Requirement
- required
- Name
version- Kind
- property
- Type
WritableSignal<number>- Requirement
- required
@grassroot/ui-headless-svelte/theme-menu
Svelte adapter
packages/ui-headless/svelte/src/theme-menu/index.ts
createThemeMenu
functionexport declare function createThemeMenu(inputGetter: () => ThemeMenuInput, options?: UseThemeMenuOptions): UseThemeMenuResult;inputGetter() => ThemeMenuInputoptionsUseThemeMenuOptionsreturnUseThemeMenuResult- Name
inputGetter- Kind
- parameter
- Type
() => ThemeMenuInput- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseThemeMenuOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseThemeMenuResult- Requirement
- n/a
ThemeMenuChangeDetail
interfaceexport interface ThemeMenuChangeDetail { readonly theme: string;}themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
ThemeMenuContent
valueexport declare const ThemeMenuContent: 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
ThemeMenuContextValue
interfaceexport interface ThemeMenuContextValue { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly version: () => number;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServiceversion() => number- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
version- Kind
- property
- Type
() => number- Requirement
- required
ThemeMenuItem
valueexport declare const ThemeMenuItem: 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
ThemeMenuItemModel
interfaceinterface ThemeMenuItem { readonly id: string; readonly value: string; readonly disabled?: boolean; readonly textValue?: string;}disabledbooleanidstringtextValuestringvaluestring- Name
disabled- Kind
- property
- Type
boolean- Requirement
- optional
- Name
id- Kind
- property
- Type
string- Requirement
- required
- Name
textValue- Kind
- property
- Type
string- Requirement
- optional
- Name
value- Kind
- property
- Type
string- Requirement
- required
ThemeMenuOpenChangeDetail
interfaceexport interface ThemeMenuOpenChangeDetail { readonly open: boolean; readonly reason: ThemeMenuChangeReason;}openbooleanreasonThemeMenuChangeReason- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
reason- Kind
- property
- Type
ThemeMenuChangeReason- Requirement
- required
ThemeMenuPositioner
valueexport declare const ThemeMenuPositioner: 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
ThemeMenuRoot
valueexport declare const ThemeMenuRoot: 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
ThemeMenuTrigger
valueexport declare const ThemeMenuTrigger: 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
useThemeMenuContext
functionexport declare function useThemeMenuContext(partName: string): ThemeMenuContextValue;partNamestringreturnThemeMenuContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
ThemeMenuContextValue- Requirement
- n/a
UseThemeMenuOptions
interfaceexport interface UseThemeMenuOptions { readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly align?: "start" | "end"; readonly scheduler?: Scheduler;}align"start" | "end"onOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidschedulerScheduler- Name
align- Kind
- property
- Type
"start" | "end"- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
Scheduler- Requirement
- optional
UseThemeMenuResult
interfaceexport interface UseThemeMenuResult { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly version: () => number;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServiceversion() => number- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
version- Kind
- property
- Type
() => number- Requirement
- required
@grassroot/ui-headless-solid/theme-menu
Solid adapter
packages/ui-headless/solid/src/theme-menu/index.ts
ThemeMenuChangeDetail
interfaceexport interface ThemeMenuChangeDetail { readonly theme: string;}themestring- Name
theme- Kind
- property
- Type
string- Requirement
- required
ThemeMenuContent
functionexport declare function ThemeMenuContent(props: ThemeMenuContentProps): JSX.Element;propsThemeMenuContentPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
ThemeMenuContentProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
ThemeMenuContentProps
interfaceexport interface ThemeMenuContentProps extends JSX.HTMLAttributes<HTMLDivElement> { readonly as?: AsProp;}asAsProp- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
ThemeMenuContext
valueexport declare const ThemeMenuContext: import("solid-js").Context<ThemeMenuContextValue | undefined>;ThemeMenuContextValue
interfaceexport interface ThemeMenuContextValue { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly snapshot: Accessor<ThemeMenuSnapshot>;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServicesnapshotAccessor<ThemeMenuSnapshot>- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
Accessor<ThemeMenuSnapshot>- Requirement
- required
ThemeMenuItem
functionexport declare function ThemeMenuItem(props: ThemeMenuItemProps): JSX.Element;propsThemeMenuItemPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
ThemeMenuItemProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
ThemeMenuItemProps
interfaceexport interface ThemeMenuItemProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> { readonly as?: AsProp; readonly item: ThemeMenuItem;}asAsPropitemThemeMenuItem- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
- Name
item- Kind
- property
- Type
ThemeMenuItem- Requirement
- required
ThemeMenuOpenChangeDetail
interfaceexport interface ThemeMenuOpenChangeDetail { readonly open: boolean; readonly reason: ThemeMenuChangeReason;}openbooleanreasonThemeMenuChangeReason- Name
open- Kind
- property
- Type
boolean- Requirement
- required
- Name
reason- Kind
- property
- Type
ThemeMenuChangeReason- Requirement
- required
ThemeMenuPositioner
functionexport declare function ThemeMenuPositioner(props: ThemeMenuPositionerProps): JSX.Element;propsThemeMenuPositionerPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
ThemeMenuPositionerProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
ThemeMenuPositionerProps
interfaceexport interface ThemeMenuPositionerProps extends JSX.HTMLAttributes<HTMLDivElement> { readonly as?: AsProp;}asAsProp- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
ThemeMenuRoot
functionexport declare function ThemeMenuRoot(props: ThemeMenuRootProps): JSX.Element;propsThemeMenuRootPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
ThemeMenuRootProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
ThemeMenuRootProps
interfaceexport interface ThemeMenuRootProps { readonly open?: ThemeMenuInput["open"]; readonly defaultOpen?: ThemeMenuInput["defaultOpen"]; readonly items: ThemeMenuInput["items"]; readonly theme?: ThemeMenuInput["theme"]; readonly defaultTheme: ThemeMenuInput["defaultTheme"]; readonly storageKey: ThemeMenuInput["storageKey"]; readonly typeaheadTimeoutMs?: ThemeMenuInput["typeaheadTimeoutMs"]; readonly align?: UseThemeMenuOptions["align"]; readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly scheduler?: UseThemeMenuOptions["scheduler"]; readonly children?: JSX.Element;}alignUseThemeMenuOptions["align"]childrenJSX.ElementdefaultOpenThemeMenuInput["defaultOpen"]defaultThemeThemeMenuInput["defaultTheme"]itemsThemeMenuInput["items"]onOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidopenThemeMenuInput["open"]schedulerUseThemeMenuOptions["scheduler"]storageKeyThemeMenuInput["storageKey"]themeThemeMenuInput["theme"]typeaheadTimeoutMsThemeMenuInput["typeaheadTimeoutMs"]- Name
align- Kind
- property
- Type
UseThemeMenuOptions["align"]- Requirement
- optional
- Name
children- Kind
- property
- Type
JSX.Element- Requirement
- optional
- Name
defaultOpen- Kind
- property
- Type
ThemeMenuInput["defaultOpen"]- Requirement
- optional
- Name
defaultTheme- Kind
- property
- Type
ThemeMenuInput["defaultTheme"]- Requirement
- required
- Name
items- Kind
- property
- Type
ThemeMenuInput["items"]- Requirement
- required
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
open- Kind
- property
- Type
ThemeMenuInput["open"]- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
UseThemeMenuOptions["scheduler"]- Requirement
- optional
- Name
storageKey- Kind
- property
- Type
ThemeMenuInput["storageKey"]- Requirement
- required
- Name
theme- Kind
- property
- Type
ThemeMenuInput["theme"]- Requirement
- optional
- Name
typeaheadTimeoutMs- Kind
- property
- Type
ThemeMenuInput["typeaheadTimeoutMs"]- Requirement
- optional
ThemeMenuTrigger
functionexport declare function ThemeMenuTrigger(props: ThemeMenuTriggerProps): JSX.Element;propsThemeMenuTriggerPropsreturnJSX.Element- Name
props- Kind
- parameter
- Type
ThemeMenuTriggerProps- Requirement
- required
- Name
return- Kind
- return value
- Type
JSX.Element- Requirement
- n/a
ThemeMenuTriggerProps
interfaceexport interface ThemeMenuTriggerProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, "type"> { readonly as?: AsProp;}asAsProp- Name
as- Kind
- property
- Type
AsProp- Requirement
- optional
useThemeMenu
functionexport declare function useThemeMenu(input: Accessor<ThemeMenuInput>, options?: UseThemeMenuOptions): UseThemeMenuResult;inputAccessor<ThemeMenuInput>optionsUseThemeMenuOptionsreturnUseThemeMenuResult- Name
input- Kind
- parameter
- Type
Accessor<ThemeMenuInput>- Requirement
- required
- Name
options- Kind
- parameter
- Type
UseThemeMenuOptions- Requirement
- optional
- Name
return- Kind
- return value
- Type
UseThemeMenuResult- Requirement
- n/a
useThemeMenuContext
functionexport declare function useThemeMenuContext(partName: string): ThemeMenuContextValue;partNamestringreturnThemeMenuContextValue- Name
partName- Kind
- parameter
- Type
string- Requirement
- required
- Name
return- Kind
- return value
- Type
ThemeMenuContextValue- Requirement
- n/a
UseThemeMenuOptions
interfaceexport interface UseThemeMenuOptions { readonly onOpenChange?: (detail: ThemeMenuOpenChangeDetail) => void; readonly onThemeChange?: (detail: ThemeMenuChangeDetail) => void; readonly align?: "start" | "end"; readonly scheduler?: Scheduler;}align"start" | "end"onOpenChange(detail: ThemeMenuOpenChangeDetail) => voidonThemeChange(detail: ThemeMenuChangeDetail) => voidschedulerScheduler- Name
align- Kind
- property
- Type
"start" | "end"- Requirement
- optional
- Name
onOpenChange- Kind
- property
- Type
(detail: ThemeMenuOpenChangeDetail) => void- Requirement
- optional
- Name
onThemeChange- Kind
- property
- Type
(detail: ThemeMenuChangeDetail) => void- Requirement
- optional
- Name
scheduler- Kind
- property
- Type
Scheduler- Requirement
- optional
UseThemeMenuResult
interfaceexport interface UseThemeMenuResult { readonly service: ThemeMenuService; readonly connector: ThemeMenuApi; readonly scope: PartScope; readonly snapshot: Accessor<ThemeMenuSnapshot>;}connectorThemeMenuApiscopePartScopeserviceThemeMenuServicesnapshotAccessor<ThemeMenuSnapshot>- Name
connector- Kind
- property
- Type
ThemeMenuApi- Requirement
- required
- Name
scope- Kind
- property
- Type
PartScope- Requirement
- required
- Name
service- Kind
- property
- Type
ThemeMenuService- Requirement
- required
- Name
snapshot- Kind
- property
- Type
Accessor<ThemeMenuSnapshot>- Requirement
- required