{"version":3,"names":["createContext","createMemo","untrack","useContext","makeSlotRefDirective","readOption","mergeRootProps","SNAPSHOT_KEYS","snapshotKeys","TabsContext","useTabs","ctx","Error","createTabs","options","value","name","equals","disabled","Boolean","orientation","setValue","next","event","reason","ev","Event","cancelable","onValueChange","isSelected","tabValue","listInternal","role","aria-orientation","undefined","list","userProps","tab","isTabDisabled","internal","type","aria-selected","data-selected","data-disabled","tabIndex","onClick","panel","panelValue","hidden","indicatorInternal","indicator","listRef","tabRef","panelRef","indicatorRef","api","Provider","props","children","TABS_SNAPSHOT_KEYS"],"sources":["create-tabs.tsx"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\nimport {\n\ttype Accessor,\n\tcreateContext,\n\tcreateMemo,\n\tuntrack,\n\tuseContext,\n} from \"solid-js\";\nimport { makeSlotRefDirective } from \"../internals/make-slot-ref-directive\";\nimport { type MaybeAccessor, readOption } from \"../internals/maybe-accessor\";\nimport { mergeRootProps } from \"../internals/merge-root-props\";\nimport {\n\tSNAPSHOT_KEYS,\n\ttype Snapshottable,\n\tsnapshotKeys,\n} from \"../internals/observability/snapshot\";\nimport type { Orientation } from \"../internals/types.ts\";\n\n/**\n * The opaque identifier a consumer attaches to a tab + the matching panel.\n * `null`/`undefined` disables selection entirely. Mirrors the existing\n * `<Tabs>` wrapper's `TabsTabValue`.\n */\nexport type TabsValue = unknown;\n\n/**\n * Why the value changed. Emitted on the third arg of\n * `onValueChange(next, event, reason)` and accepted by\n * `c.setValue(next, event?, reason?)`.\n *\n * - `\"trigger-press\"` — click on a tab slot.\n * - `\"focus\"` — focus moved to a tab while `activateOnFocus` is enabled\n *   (driven by the wrapper, not this primitive).\n * - `\"imperative\"` — programmatic `setValue` with no originating DOM event.\n */\nexport type TabsChangeReason = \"trigger-press\" | \"focus\" | \"imperative\";\n\n/**\n * Options for {@link createTabs}.\n *\n * Every reactive input is `MaybeAccessor<T>`. Read at use time via\n * `readOption(opt)`.\n *\n * **Solid-native shape (2026-04-30).** No internal state. `value` is\n * required and the consumer always owns the signal. The primitive is\n * a pure function from `(value, onValueChange) → api`. Migration from\n * pre-2026-04-30: `createTabs({ defaultValue: \"a\" })` becomes\n * `const [v, setV] = createSignal(\"a\"); createTabs({ value: v, onValueChange: setV })`.\n * See `solidify.md` §6 for rationale.\n */\nexport interface CreateTabsOptions {\n\t/**\n\t * Current selected value. Consumer-owned signal — the primitive reads\n\t * through the accessor and does NOT keep an internal copy. Writes happen\n\t * via `onValueChange` (the consumer's responsibility to update their\n\t * signal in response). `undefined` means nothing is selected.\n\t */\n\tvalue: MaybeAccessor<TabsValue | undefined>;\n\t/**\n\t * Whether interaction is suppressed on the entire tabs widget.\n\t * @default false\n\t */\n\tdisabled?: MaybeAccessor<boolean>;\n\t/**\n\t * Layout orientation — exposed so wrapper-side keyboard navigation +\n\t * `aria-orientation` projection can read off the api.\n\t * @default \"horizontal\"\n\t */\n\torientation?: MaybeAccessor<Orientation>;\n\t/**\n\t * Pre-change callback. Called synchronously with `(next, event, reason)`.\n\t * `event.preventDefault()` is now a no-op for the primitive (the\n\t * consumer's signal write is the only writer); left in the signature for\n\t * parity with other event channels. Reading `c.value()` inside this\n\t * handler returns the OLD value. For post-change observation, use\n\t * `createEffect(c.value, ...)`.\n\t */\n\tonValueChange?: (\n\t\tvalue: TabsValue,\n\t\tevent: Event,\n\t\treason: TabsChangeReason,\n\t) => void;\n}\n\n/**\n * Slot bag for the list slot — `<div role=\"tablist\">`.\n */\nexport interface TabsListSlotProps {\n\trole: \"tablist\";\n\t\"aria-orientation\": \"vertical\" | undefined;\n}\n\n/**\n * Slot bag for a per-tab slot — `<button role=\"tab\">`.\n */\nexport interface TabsTabSlotProps {\n\ttype: \"button\";\n\trole: \"tab\";\n\t\"aria-selected\": \"true\" | \"false\";\n\t\"data-selected\": \"\" | undefined;\n\t\"data-disabled\": \"\" | undefined;\n\ttabIndex: 0 | -1;\n\tdisabled: boolean | undefined;\n\tonClick: (event: MouseEvent) => void;\n}\n\n/**\n * Slot bag for a per-panel slot — `<div role=\"tabpanel\">`.\n */\nexport interface TabsPanelSlotProps {\n\trole: \"tabpanel\";\n\t\"data-selected\": \"\" | undefined;\n\thidden: true | undefined;\n\ttabIndex: 0 | -1;\n}\n\n/**\n * Slot bag for the indicator slot — `<span role=\"presentation\">`. The\n * primitive only emits the role + a hidden bit when nothing is selected;\n * positioning math (CSS custom props) lives in the structural wrapper.\n */\nexport interface TabsIndicatorSlotProps {\n\trole: \"presentation\";\n\thidden: true | undefined;\n}\n\n/**\n * Public API returned by {@link createTabs}. Flat accessors at the root,\n * imperative setters, slot factories per part, matching directive\n * factories, plus an opt-in Provider + `useTabs()`.\n */\nexport interface TabsApi {\n\t/** Reactive accessor for the current selected value. */\n\tvalue: Accessor<TabsValue | undefined>;\n\t/** Whether interaction is suppressed for the whole widget. */\n\tdisabled: Accessor<boolean>;\n\t/** Layout orientation (horizontal/vertical). */\n\torientation: Accessor<Orientation>;\n\n\t/**\n\t * Imperative setter. Fires `onValueChange(next, event, reason)` first;\n\t * if the consumer calls `event.preventDefault()` the internal write is\n\t * skipped.\n\t */\n\tsetValue: (next: TabsValue, event?: Event, reason?: TabsChangeReason) => void;\n\n\t/** Selection check for the given tab value. */\n\tisSelected: (tabValue: TabsValue) => boolean;\n\n\t/** Slot bag for the `<div role=\"tablist\">` list element. */\n\tlist: <U extends object | undefined = undefined>(\n\t\tuserProps?: U,\n\t) => TabsListSlotProps & (U extends object ? U : object);\n\t/**\n\t * Slot bag for a tab button. Pass the value the tab represents — selection\n\t * derives from `value() === tabValue`. Pass `disabled: true` (or via the\n\t * second `userProps`) to suppress activation.\n\t */\n\ttab: <U extends object | undefined = undefined>(\n\t\ttabValue: TabsValue,\n\t\tuserProps?: U & { disabled?: boolean },\n\t) => TabsTabSlotProps & (U extends object ? U : object);\n\t/** Slot bag for a panel. Hidden when not selected. */\n\tpanel: <U extends object | undefined = undefined>(\n\t\tpanelValue: TabsValue,\n\t\tuserProps?: U,\n\t) => TabsPanelSlotProps & (U extends object ? U : object);\n\t/** Slot bag for the optional indicator span. */\n\tindicator: <U extends object | undefined = undefined>(\n\t\tuserProps?: U,\n\t) => TabsIndicatorSlotProps & (U extends object ? U : object);\n\n\t/** Directive form of {@link list}. */\n\tlistRef: () => (el: HTMLElement | null) => void;\n\t/** Directive form of {@link tab} for the given value. */\n\ttabRef: (tabValue: TabsValue) => (el: HTMLButtonElement | null) => void;\n\t/** Directive form of {@link panel} for the given value. */\n\tpanelRef: (panelValue: TabsValue) => (el: HTMLElement | null) => void;\n\t/** Directive form of {@link indicator}. */\n\tindicatorRef: () => (el: HTMLElement | null) => void;\n\n\t/**\n\t * Context provider. Wrap a subtree to make the api discoverable via\n\t * `useTabs()` without prop-drilling.\n\t */\n\tProvider: (props: { children: JSX.Element }) => JSX.Element;\n}\n\nconst TabsContext = createContext<TabsApi | null>(null);\n\n/**\n * Read the nearest {@link TabsApi} provided by `c.Provider`. Throws if\n * used outside a Provider.\n */\nexport function useTabs(): TabsApi {\n\tconst ctx = useContext(TabsContext);\n\tif (ctx == null) {\n\t\tthrow new Error(\"Base UI: useTabs() must be called inside a <c.Provider>.\");\n\t}\n\treturn ctx;\n}\n\n/**\n * Solid 2.0-native compound primitive for a tabs widget. Owns logical\n * state (value/disabled/orientation, onValueChange). Composite keyboard\n * focus, indicator measurement, panel-id wiring, and activation-direction\n * math are NOT in this primitive — they belong to the wrapping\n * `<Tabs.Root/.List/.Tab/.Panel/.Indicator>` adapters.\n */\nexport function createTabs(options: CreateTabsOptions): TabsApi {\n\t// `value` reads through the consumer's accessor — no internal signal,\n\t// no controlled-or-internal branching. Memoized so dependents see the\n\t// same identity within a tracking scope.\n\tconst value = createMemo<TabsValue | undefined>(\n\t\t() => readOption(options.value),\n\t\t{ name: \"tabs.value\", equals: false },\n\t);\n\n\tconst disabled = createMemo<boolean>(\n\t\t() => Boolean(readOption(options.disabled)),\n\t\t{ name: \"tabs.disabled\" },\n\t);\n\n\tconst orientation = createMemo<Orientation>(\n\t\t() => (readOption(options.orientation) ?? \"horizontal\") as Orientation,\n\t\t{ name: \"tabs.orientation\" },\n\t);\n\n\t// `setValue` is a pure event-emitter. It fires `onValueChange(next, event, reason)`;\n\t// the consumer is responsible for updating their value-signal in response.\n\t// There is no internal state to write — `event.preventDefault()` is now a\n\t// no-op for the primitive (the consumer's handler is the only writer).\n\tconst setValue = (\n\t\tnext: TabsValue,\n\t\tevent?: Event,\n\t\treason: TabsChangeReason = \"imperative\",\n\t): void => {\n\t\tconst ev = event ?? new Event(\"valuechange\", { cancelable: true });\n\t\toptions.onValueChange?.(next, ev, reason);\n\t};\n\n\tconst isSelected = (tabValue: TabsValue): boolean => value() === tabValue;\n\n\t// list\n\tconst listInternal = {\n\t\trole: \"tablist\" as const,\n\t\tget \"aria-orientation\"() {\n\t\t\treturn orientation() === \"vertical\" ? (\"vertical\" as const) : undefined;\n\t\t},\n\t};\n\tconst list = <U extends object | undefined>(userProps?: U) =>\n\t\tmergeRootProps(listInternal, userProps) as TabsListSlotProps &\n\t\t\t(U extends object ? U : object);\n\n\t// tab(value)\n\tconst tab = <U extends object | undefined>(\n\t\ttabValue: TabsValue,\n\t\tuserProps?: U & { disabled?: boolean },\n\t) => {\n\t\tconst isTabDisabled = (): boolean =>\n\t\t\tBoolean(disabled() || userProps?.disabled);\n\t\tconst internal = {\n\t\t\ttype: \"button\" as const,\n\t\t\trole: \"tab\" as const,\n\t\t\tget \"aria-selected\"() {\n\t\t\t\treturn value() === tabValue ? (\"true\" as const) : (\"false\" as const);\n\t\t\t},\n\t\t\tget \"data-selected\"() {\n\t\t\t\treturn value() === tabValue ? \"\" : undefined;\n\t\t\t},\n\t\t\tget \"data-disabled\"() {\n\t\t\t\treturn isTabDisabled() ? \"\" : undefined;\n\t\t\t},\n\t\t\tget tabIndex() {\n\t\t\t\treturn value() === tabValue ? 0 : -1;\n\t\t\t},\n\t\t\tget disabled() {\n\t\t\t\treturn isTabDisabled() ? true : undefined;\n\t\t\t},\n\t\t\tonClick(event: MouseEvent) {\n\t\t\t\tif (isTabDisabled()) return;\n\t\t\t\tif (untrack(() => value()) === tabValue) return;\n\t\t\t\tsetValue(tabValue, event, \"trigger-press\");\n\t\t\t},\n\t\t};\n\t\treturn mergeRootProps(internal, userProps) as TabsTabSlotProps &\n\t\t\t(U extends object ? U : object);\n\t};\n\n\t// panel(value)\n\tconst panel = <U extends object | undefined>(\n\t\tpanelValue: TabsValue,\n\t\tuserProps?: U,\n\t) => {\n\t\tconst internal = {\n\t\t\trole: \"tabpanel\" as const,\n\t\t\tget \"data-selected\"() {\n\t\t\t\treturn value() === panelValue ? \"\" : undefined;\n\t\t\t},\n\t\t\tget hidden() {\n\t\t\t\treturn value() === panelValue ? undefined : (true as const);\n\t\t\t},\n\t\t\tget tabIndex() {\n\t\t\t\treturn value() === panelValue ? 0 : -1;\n\t\t\t},\n\t\t};\n\t\treturn mergeRootProps(internal, userProps) as TabsPanelSlotProps &\n\t\t\t(U extends object ? U : object);\n\t};\n\n\t// indicator\n\tconst indicatorInternal = {\n\t\trole: \"presentation\" as const,\n\t\tget hidden() {\n\t\t\treturn value() == null ? (true as const) : undefined;\n\t\t},\n\t};\n\tconst indicator = <U extends object | undefined>(userProps?: U) =>\n\t\tmergeRootProps(indicatorInternal, userProps) as TabsIndicatorSlotProps &\n\t\t\t(U extends object ? U : object);\n\n\tconst listRef = (): ((el: HTMLElement | null) => void) =>\n\t\tmakeSlotRefDirective(() => list());\n\tconst tabRef = (\n\t\ttabValue: TabsValue,\n\t): ((el: HTMLButtonElement | null) => void) =>\n\t\tmakeSlotRefDirective(() => tab(tabValue));\n\tconst panelRef = (\n\t\tpanelValue: TabsValue,\n\t): ((el: HTMLElement | null) => void) =>\n\t\tmakeSlotRefDirective(() => panel(panelValue));\n\tconst indicatorRef = (): ((el: HTMLElement | null) => void) =>\n\t\tmakeSlotRefDirective(() => indicator());\n\n\tconst api: TabsApi = {\n\t\tvalue,\n\t\tdisabled,\n\t\torientation,\n\t\tsetValue,\n\t\tisSelected,\n\t\tlist,\n\t\ttab,\n\t\tpanel,\n\t\tindicator,\n\t\tlistRef,\n\t\ttabRef,\n\t\tpanelRef,\n\t\tindicatorRef,\n\t\tProvider: (props) => (\n\t\t\t<TabsContext value={api}>{props.children}</TabsContext>\n\t\t),\n\t};\n\t(api as TabsApi & Snapshottable)[SNAPSHOT_KEYS] = TABS_SNAPSHOT_KEYS;\n\treturn api;\n}\n\nconst TABS_SNAPSHOT_KEYS = snapshotKeys<TabsApi>(\n\t\"value\",\n\t\"disabled\",\n\t\"orientation\",\n);\n"],"mappings":"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","ignoreList":[]}