UNPKG

@kobalte/core

Version:

Unstyled components and primitives for building accessible web apps and design systems with SolidJS.

93 lines (87 loc) 2.73 kB
import { LinkRoot } from './3QQCO6IA.js'; import { Polymorphic } from './6Y7B2NEO.js'; import { __export } from './5ZKAE4VZ.js'; import { createComponent, mergeProps } from 'solid-js/web'; import { splitProps, createContext, useContext } from 'solid-js'; import { mergeDefaultProps } from '@kobalte/utils'; // src/breadcrumbs/index.tsx var breadcrumbs_exports = {}; __export(breadcrumbs_exports, { Breadcrumbs: () => Breadcrumbs, Link: () => BreadcrumbsLink, Root: () => BreadcrumbsRoot, Separator: () => BreadcrumbsSeparator, useBreadcrumbsContext: () => useBreadcrumbsContext }); function BreadcrumbsLink(props) { const [local, others] = splitProps(props, ["current", "disabled", "aria-current"]); const ariaCurrent = () => { if (!local.current) { return void 0; } return local["aria-current"] || "page"; }; return createComponent(LinkRoot, mergeProps({ get disabled() { return local.disabled || local.current; }, get ["aria-current"]() { return ariaCurrent(); }, get ["data-current"]() { return local.current ? "" : void 0; } }, others)); } var BreadcrumbsContext = createContext(); function useBreadcrumbsContext() { const context = useContext(BreadcrumbsContext); if (context === void 0) { throw new Error("[kobalte]: `useBreadcrumbsContext` must be used within a `Breadcrumbs.Root` component"); } return context; } // src/breadcrumbs/breadcrumbs.intl.ts var BREADCRUMBS_INTL_TRANSLATIONS = { // `aria-label` of the navigation. breadcrumbs: "Breadcrumbs" }; // src/breadcrumbs/breadcrumbs-root.tsx function BreadcrumbsRoot(props) { const mergedProps = mergeDefaultProps({ separator: "/", translations: BREADCRUMBS_INTL_TRANSLATIONS }, props); const [local, others] = splitProps(mergedProps, ["separator", "translations"]); const context = { separator: () => local.separator }; return createComponent(BreadcrumbsContext.Provider, { value: context, get children() { return createComponent(Polymorphic, mergeProps({ as: "nav", get ["aria-label"]() { return local.translations.breadcrumbs; } }, others)); } }); } function BreadcrumbsSeparator(props) { const context = useBreadcrumbsContext(); return createComponent(Polymorphic, mergeProps({ as: "span", "aria-hidden": "true" }, props, { get children() { return context.separator(); } })); } // src/breadcrumbs/index.tsx var Breadcrumbs = Object.assign(BreadcrumbsRoot, { Link: BreadcrumbsLink, Separator: BreadcrumbsSeparator }); export { Breadcrumbs, BreadcrumbsLink, BreadcrumbsRoot, BreadcrumbsSeparator, breadcrumbs_exports, useBreadcrumbsContext };