{"version":3,"names":["dynamic","createEffect","createMemo","createSignal","omit","untrack","useBaseUiId","createChangeEventDetails","REASONS","ACTIVE_COMPOSITE_ITEM","useCompositeItem","mergeRootProps","resolveClassStyle","useButton","useTabsListContext","useTabsRootContext","TabsTab","props","root","list","disabled","nativeButton","id","undefined","active","value","metadata","compositeProps","ref","compositeRef","index","buttonProps","buttonRef","native","focusableWhenDisabled","composite","tabEl","setTabEl","ownedWrite","el","registerTabResizeObserverElement","onClick","event","onTabActivation","none","activationDirection","onFocus","i","setHighlightedTabIndex","activateOnFocus","userClassStyle","orientation","userHtmlProps","internalProps","role","setAttribute","aria-controls","getTabPanelIdByValue","aria-selected","data-orientation","data-active","data-disabled","merged","Tag","as","children"],"sources":["tabs-tab.tsx"],"sourcesContent":["import type { JSX, ValidComponent } from \"@solidjs/web\";\nimport { dynamic } from \"@solidjs/web\";\nimport {\n\tcreateEffect,\n\tcreateMemo,\n\tcreateSignal,\n\tomit,\n\tuntrack,\n} from \"solid-js\";\nimport { useBaseUiId } from \"../../internals/base-ui-id\";\nimport {\n\tcreateChangeEventDetails,\n\tREASONS,\n} from \"../../internals/change-event-details\";\nimport { ACTIVE_COMPOSITE_ITEM } from \"../../internals/composite/composite-constants.ts\";\nimport { useCompositeItem } from \"../../internals/composite/composite-item.ts\";\nimport { mergeRootProps } from \"../../internals/merge-root-props\";\nimport { resolveClassStyle } from \"../../internals/resolve-class-style\";\nimport type {\n\tBaseUIComponentProps,\n\tNativeButtonProps,\n} from \"../../internals/types\";\nimport type { Orientation } from \"../../internals/types.ts\";\nimport { useButton } from \"../../internals/use-button/use-button\";\nimport { useTabsListContext } from \"../tabs-list-context.ts\";\nimport {\n\ttype TabsTabMetadata,\n\ttype TabsTabValue,\n\tuseTabsRootContext,\n} from \"../tabs-root-context.ts\";\n\nexport interface TabsTabState {\n\t/** Whether the tab is disabled (ignored by pointer + keyboard activation). */\n\tdisabled: boolean;\n\t/** Whether the tab is currently the selected one. */\n\tactive: boolean;\n\t/** Layout orientation (inherited from the root). */\n\torientation: Orientation;\n}\n\nexport interface TabsTabProps\n\textends NativeButtonProps,\n\t\t// Re-type `value` to the opaque TabsTabValue; don't let the native button\n\t\t// `value` attribute shape bleed through.\n\t\tOmit<BaseUIComponentProps<\"button\", TabsTabState>, \"value\"> {\n\t/** Tag/component to render. Defaults to `\"button\"`. */\n\tas?: ValidComponent;\n\t/**\n\t * The value this tab represents. Panels with the matching `value` render\n\t * when this tab is active. May be any type — numbers, strings, objects,\n\t * functions, symbols.\n\t */\n\tvalue: TabsTabValue;\n\t/**\n\t * Whether the tab should ignore user interaction. Disabled tabs can still\n\t * receive keyboard focus (per WAI-ARIA guidance), but clicks / Space /\n\t * Enter are a no-op.\n\t * @default false\n\t */\n\tdisabled?: boolean | undefined;\n}\n\n/**\n * A single selectable tab button. Renders a `<button role=\"tab\">`.\n *\n * Registers with `<Tabs.List>`'s composite list so arrow keys move focus\n * between siblings; activation is delivered through the list context.\n * `aria-controls` is wired to the matching `<Tabs.Panel>`'s DOM id via the\n * root-level mounted-panel registry.\n */\nexport function TabsTab(props: TabsTabProps): JSX.Element {\n\tconst root = useTabsRootContext();\n\tconst list = useTabsListContext();\n\n\tconst disabled = (): boolean => props.disabled === true;\n\tconst nativeButton = (): boolean => props.nativeButton ?? true;\n\n\t// Id overrides are setup-time only (matches field/slider/number-field):\n\t// untrack the body read so it doesn't trip `[STRICT_READ_UNTRACKED]`.\n\tconst id = useBaseUiId(\n\t\tuntrack(() => (typeof props.id === \"string\" ? props.id : undefined)),\n\t);\n\n\tconst active = createMemo((): boolean => root.value() === props.value);\n\n\tconst metadata = createMemo(\n\t\t(): TabsTabMetadata => ({\n\t\t\tdisabled: disabled(),\n\t\t\tid,\n\t\t\tvalue: props.value,\n\t\t}),\n\t);\n\n\tconst {\n\t\tprops: compositeProps,\n\t\tref: compositeRef,\n\t\tindex,\n\t} = useCompositeItem<TabsTabMetadata>({\n\t\tget metadata() {\n\t\t\treturn metadata();\n\t\t},\n\t});\n\n\tconst { props: buttonProps, ref: buttonRef } = useButton({\n\t\tdisabled,\n\t\tnative: nativeButton,\n\t\tfocusableWhenDisabled: true,\n\t\t// Composite-item behavior: `useButton` yields tabIndex to the composite\n\t\t// item's roving-focus projection (so only the highlighted tab is\n\t\t// tabbable) and switches Space activation to keydown.\n\t\tcomposite: true,\n\t});\n\n\t// Element tracking for resize-observer registration — pulled into an\n\t// owned effect so the unregister fires on component disposal.\n\tconst [tabEl, setTabEl] = createSignal<HTMLElement | null>(null, {\n\t\townedWrite: true,\n\t});\n\tcreateEffect(\n\t\t() => tabEl(),\n\t\t(el) => {\n\t\t\tif (!el) return undefined;\n\t\t\treturn list.registerTabResizeObserverElement(el);\n\t\t},\n\t);\n\n\tconst onClick = (event: MouseEvent): void => {\n\t\tif (active() || disabled()) return;\n\t\tlist.onTabActivation(\n\t\t\tprops.value,\n\t\t\tcreateChangeEventDetails(REASONS.none, event, undefined, {\n\t\t\t\tactivationDirection: \"none\",\n\t\t\t}),\n\t\t);\n\t};\n\n\tconst onFocus = (event: FocusEvent): void => {\n\t\tif (active()) return;\n\t\tconst i = index();\n\t\tif (i > -1 && !disabled()) {\n\t\t\tlist.setHighlightedTabIndex(i);\n\t\t}\n\t\tif (disabled()) return;\n\t\tif (list.activateOnFocus()) {\n\t\t\tlist.onTabActivation(\n\t\t\t\tprops.value,\n\t\t\t\tcreateChangeEventDetails(REASONS.none, event, undefined, {\n\t\t\t\t\tactivationDirection: \"none\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t};\n\tconst userClassStyle = resolveClassStyle(props, () => ({\n\t\tdisabled: disabled(),\n\t\tactive: active(),\n\t\torientation: root.orientation(),\n\t}));\n\n\tconst userHtmlProps = omit(\n\t\tprops,\n\t\t\"as\",\n\t\t\"class\",\n\t\t\"style\",\n\t\t\"attrs\",\n\t\t\"children\",\n\t\t\"disabled\",\n\t\t\"nativeButton\",\n\t\t\"value\",\n\t) as Record<string, unknown>;\n\n\tconst internalProps = {\n\t\tid,\n\t\trole: \"tab\" as const,\n\t\tref: (el: HTMLElement | null): void =>\n\t\t\tuntrack(() => {\n\t\t\t\tbuttonRef(el);\n\t\t\t\tcompositeRef(el);\n\t\t\t\tsetTabEl(el);\n\t\t\t\tif (el && active()) {\n\t\t\t\t\tel.setAttribute(ACTIVE_COMPOSITE_ITEM, \"\");\n\t\t\t\t}\n\t\t\t}),\n\t\tonClick,\n\t\tonFocus,\n\t\tget \"aria-controls\"() {\n\t\t\treturn root.getTabPanelIdByValue(props.value) ?? \"\";\n\t\t},\n\t\tget \"aria-selected\"() {\n\t\t\treturn active() ? \"true\" : \"false\";\n\t\t},\n\t\tget \"data-orientation\"() {\n\t\t\treturn root.orientation();\n\t\t},\n\t\tget \"data-active\"(): \"\" | undefined {\n\t\t\treturn active() ? \"\" : undefined;\n\t\t},\n\t\tget \"data-disabled\"(): \"\" | undefined {\n\t\t\treturn disabled() ? \"\" : undefined;\n\t\t},\n\t};\n\n\tconst merged = mergeRootProps(\n\t\tmergeRootProps(\n\t\t\tmergeRootProps(\n\t\t\t\tmergeRootProps(\n\t\t\t\t\tinternalProps,\n\t\t\t\t\tcompositeProps as Record<string, unknown>,\n\t\t\t\t),\n\t\t\t\tbuttonProps,\n\t\t\t),\n\t\t\tuserClassStyle,\n\t\t),\n\t\tuserHtmlProps,\n\t);\n\n\tconst Tag = dynamic(() => props.as ?? \"button\");\n\treturn <Tag {...merged}>{props.children}</Tag>;\n}\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,cAAc;AACtC,SACCC,YAAY,EACZC,UAAU,EACVC,YAAY,EACZC,IAAI,EACJC,OAAO,QACD,UAAU;AACjB,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SACCC,wBAAwB,EACxBC,OAAO,QACD,sCAAsC;AAC7C,SAASC,qBAAqB,QAAQ,kDAAkD;AACxF,SAASC,gBAAgB,QAAQ,6CAA6C;AAC9E,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SAASC,iBAAiB,QAAQ,qCAAqC;AAMvE,SAASC,SAAS,QAAQ,uCAAuC;AACjE,SAASC,kBAAkB,QAAQ,yBAAyB;AAC5D,SAGCC,kBAAkB,QACZ,yBAAyB;AAiChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAACC,KAAmB,EAAe;EACzD,MAAMC,IAAI,GAAGH,kBAAkB,CAAC,CAAC;EACjC,MAAMI,IAAI,GAAGL,kBAAkB,CAAC,CAAC;EAEjC,MAAMM,QAAQ,GAAGA,CAAA,KAAeH,KAAK,CAACG,QAAQ,KAAK,IAAI;EACvD,MAAMC,YAAY,GAAGA,CAAA,KAAeJ,KAAK,CAACI,YAAY,IAAI,IAAI;;EAE9D;EACA;EACA,MAAMC,EAAE,GAAGhB,WAAW,CACrBD,OAAO,CAAC,MAAO,OAAOY,KAAK,CAACK,EAAE,KAAK,QAAQ,GAAGL,KAAK,CAACK,EAAE,GAAGC,SAAU,CACpE,CAAC;EAED,MAAMC,MAAM,GAAGtB,UAAU,CAAC,MAAegB,IAAI,CAACO,KAAK,CAAC,CAAC,KAAKR,KAAK,CAACQ,KAAK,CAAC;EAEtE,MAAMC,QAAQ,GAAGxB,UAAU,CAC1B,OAAwB;IACvBkB,QAAQ,EAAEA,QAAQ,CAAC,CAAC;IACpBE,EAAE;IACFG,KAAK,EAAER,KAAK,CAACQ;EACd,CAAC,CACF,CAAC;EAED,MAAM;IACLR,KAAK,EAAEU,cAAc;IACrBC,GAAG,EAAEC,YAAY;IACjBC;EACD,CAAC,GAAGpB,gBAAgB,CAAkB;IACrC,IAAIgB,QAAQA,CAAA,EAAG;MACd,OAAOA,QAAQ,CAAC,CAAC;IAClB;EACD,CAAC,CAAC;EAEF,MAAM;IAAET,KAAK,EAAEc,WAAW;IAAEH,GAAG,EAAEI;EAAU,CAAC,GAAGnB,SAAS,CAAC;IACxDO,QAAQ;IACRa,MAAM,EAAEZ,YAAY;IACpBa,qBAAqB,EAAE,IAAI;IAC3B;IACA;IACA;IACAC,SAAS,EAAE;EACZ,CAAC,CAAC;;EAEF;EACA;EACA,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGlC,YAAY,CAAqB,IAAI,EAAE;IAChEmC,UAAU,EAAE;EACb,CAAC,CAAC;EACFrC,YAAY,CACX,MAAMmC,KAAK,CAAC,CAAC,EACZG,EAAE,IAAK;IACP,IAAI,CAACA,EAAE,EAAE,OAAOhB,SAAS;IACzB,OAAOJ,IAAI,CAACqB,gCAAgC,CAACD,EAAE,CAAC;EACjD,CACD,CAAC;EAED,MAAME,OAAO,GAAIC,KAAiB,IAAW;IAC5C,IAAIlB,MAAM,CAAC,CAAC,IAAIJ,QAAQ,CAAC,CAAC,EAAE;IAC5BD,IAAI,CAACwB,eAAe,CACnB1B,KAAK,CAACQ,KAAK,EACXlB,wBAAwB,CAACC,OAAO,CAACoC,IAAI,EAAEF,KAAK,EAAEnB,SAAS,EAAE;MACxDsB,mBAAmB,EAAE;IACtB,CAAC,CACF,CAAC;EACF,CAAC;EAED,MAAMC,OAAO,GAAIJ,KAAiB,IAAW;IAC5C,IAAIlB,MAAM,CAAC,CAAC,EAAE;IACd,MAAMuB,CAAC,GAAGjB,KAAK,CAAC,CAAC;IACjB,IAAIiB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC3B,QAAQ,CAAC,CAAC,EAAE;MAC1BD,IAAI,CAAC6B,sBAAsB,CAACD,CAAC,CAAC;IAC/B;IACA,IAAI3B,QAAQ,CAAC,CAAC,EAAE;IAChB,IAAID,IAAI,CAAC8B,eAAe,CAAC,CAAC,EAAE;MAC3B9B,IAAI,CAACwB,eAAe,CACnB1B,KAAK,CAACQ,KAAK,EACXlB,wBAAwB,CAACC,OAAO,CAACoC,IAAI,EAAEF,KAAK,EAAEnB,SAAS,EAAE;QACxDsB,mBAAmB,EAAE;MACtB,CAAC,CACF,CAAC;IACF;EACD,CAAC;EACD,MAAMK,cAAc,GAAGtC,iBAAiB,CAACK,KAAK,EAAE,OAAO;IACtDG,QAAQ,EAAEA,QAAQ,CAAC,CAAC;IACpBI,MAAM,EAAEA,MAAM,CAAC,CAAC;IAChB2B,WAAW,EAAEjC,IAAI,CAACiC,WAAW,CAAC;EAC/B,CAAC,CAAC,CAAC;EAEH,MAAMC,aAAa,GAAGhD,IAAI,CACzBa,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,OACD,CAA4B;EAE5B,MAAMoC,aAAa,GAAG;IACrB/B,EAAE;IACFgC,IAAI,EAAE,KAAc;IACpB1B,GAAG,EAAGW,EAAsB,IAC3BlC,OAAO,CAAC,MAAM;MACb2B,SAAS,CAACO,EAAE,CAAC;MACbV,YAAY,CAACU,EAAE,CAAC;MAChBF,QAAQ,CAACE,EAAE,CAAC;MACZ,IAAIA,EAAE,IAAIf,MAAM,CAAC,CAAC,EAAE;QACnBe,EAAE,CAACgB,YAAY,CAAC9C,qBAAqB,EAAE,EAAE,CAAC;MAC3C;IACD,CAAC,CAAC;IACHgC,OAAO;IACPK,OAAO;IACP,IAAI,eAAeU,CAAA,EAAG;MACrB,OAAOtC,IAAI,CAACuC,oBAAoB,CAACxC,KAAK,CAACQ,KAAK,CAAC,IAAI,EAAE;IACpD,CAAC;IACD,IAAI,eAAeiC,CAAA,EAAG;MACrB,OAAOlC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO;IACnC,CAAC;IACD,IAAI,kBAAkBmC,CAAA,EAAG;MACxB,OAAOzC,IAAI,CAACiC,WAAW,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,aAAaS,CAAA,EAAmB;MACnC,OAAOpC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAGD,SAAS;IACjC,CAAC;IACD,IAAI,eAAesC,CAAA,EAAmB;MACrC,OAAOzC,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAGG,SAAS;IACnC;EACD,CAAC;EAED,MAAMuC,MAAM,GAAGnD,cAAc,CAC5BA,cAAc,CACbA,cAAc,CACbA,cAAc,CACb0C,aAAa,EACb1B,cACD,CAAC,EACDI,WACD,CAAC,EACDmB,cACD,CAAC,EACDE,aACD,CAAC;EAED,MAAMW,GAAG,GAAG/D,OAAO,CAAC,MAAMiB,KAAK,CAAC+C,EAAE,IAAI,QAAQ,CAAC;EAC/C,OAAO,CAAC,GAAG,CAAC,IAAIF,MAAM,CAAC,CAAC,CAAC7C,KAAK,CAACgD,QAAQ,CAAC,EAAE,GAAG,CAAC;AAC/C","ignoreList":[]}