@kobalte/core
Version:
Unstyled components and primitives for building accessible web apps and design systems with SolidJS.
93 lines (87 loc) • 2.73 kB
JavaScript
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 };