@mesob/ui 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/app-breadcrumbs.d.ts +34 -0
- package/dist/components/app-breadcrumbs.js +177 -0
- package/dist/components/app-breadcrumbs.js.map +1 -0
- package/dist/components/app-header-actions.d.ts +39 -0
- package/dist/components/app-header-actions.js +629 -0
- package/dist/components/app-header-actions.js.map +1 -0
- package/dist/components/app-sidebar.d.ts +24 -0
- package/dist/components/app-sidebar.js +669 -0
- package/dist/components/app-sidebar.js.map +1 -0
- package/dist/components/button.d.ts +1 -1
- package/dist/components/data-table/index.d.ts +9 -2
- package/dist/components/data-table/index.js +276 -101
- package/dist/components/data-table/index.js.map +1 -1
- package/dist/components/entity/index.d.ts +85 -9
- package/dist/components/entity/index.js +424 -304
- package/dist/components/entity/index.js.map +1 -1
- package/dist/components/input-group.d.ts +1 -1
- package/dist/components/item.d.ts +1 -1
- package/dist/components/link.d.ts +12 -0
- package/dist/components/link.js +51 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/mesob-context.d.ts +34 -0
- package/dist/components/mesob-context.js +53 -0
- package/dist/components/mesob-context.js.map +1 -0
- package/dist/components/page/index.d.ts +46 -0
- package/dist/components/page/index.js +197 -0
- package/dist/components/page/index.js.map +1 -0
- package/dist/components/powered-by.d.ts +4 -1
- package/dist/components/powered-by.js +28 -12
- package/dist/components/powered-by.js.map +1 -1
- package/dist/components/shell.d.ts +13 -0
- package/dist/components/shell.js +545 -0
- package/dist/components/shell.js.map +1 -0
- package/dist/components/sidebar.d.ts +4 -0
- package/dist/components/sidebar.js +37 -8
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/table.js.map +1 -1
- package/dist/components/tooltip.d.ts +1 -1
- package/dist/components/tooltip.js +2 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/hooks/use-router.d.ts +7 -0
- package/dist/hooks/use-router.js +36 -0
- package/dist/hooks/use-router.js.map +1 -0
- package/dist/hooks/use-translation.d.ts +5 -0
- package/dist/hooks/use-translation.js +41 -0
- package/dist/hooks/use-translation.js.map +1 -0
- package/package.json +7 -1
- package/src/styles/globals.css +4 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
type BreadcrumbItemData = {
|
|
5
|
+
label: string;
|
|
6
|
+
href?: string;
|
|
7
|
+
};
|
|
8
|
+
type BreadcrumbContextValue = {
|
|
9
|
+
items: BreadcrumbItemData[];
|
|
10
|
+
setItems: (items: BreadcrumbItemData[]) => void;
|
|
11
|
+
push: (item: BreadcrumbItemData) => void;
|
|
12
|
+
pop: () => void;
|
|
13
|
+
clear: () => void;
|
|
14
|
+
};
|
|
15
|
+
type UseBreadcrumbsOptions = {
|
|
16
|
+
items?: BreadcrumbItemData[];
|
|
17
|
+
};
|
|
18
|
+
declare function useBreadcrumbs(options?: UseBreadcrumbsOptions): BreadcrumbContextValue;
|
|
19
|
+
type BreadcrumbProviderProps = {
|
|
20
|
+
children: React.ReactNode;
|
|
21
|
+
defaultItems?: BreadcrumbItemData[];
|
|
22
|
+
};
|
|
23
|
+
declare function BreadcrumbProvider({ children, defaultItems, }: BreadcrumbProviderProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
type AppBreadcrumbsProps = {
|
|
25
|
+
linkComponent?: React.ComponentType<{
|
|
26
|
+
href: string;
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
className?: string;
|
|
29
|
+
}>;
|
|
30
|
+
className?: string;
|
|
31
|
+
};
|
|
32
|
+
declare function AppBreadcrumbs({ linkComponent: linkProp, className, }: AppBreadcrumbsProps): react_jsx_runtime.JSX.Element | null;
|
|
33
|
+
|
|
34
|
+
export { AppBreadcrumbs, BreadcrumbProvider, useBreadcrumbs };
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// src/lib/utils.ts
|
|
4
|
+
import { clsx } from "clsx";
|
|
5
|
+
import { twMerge } from "tailwind-merge";
|
|
6
|
+
function cn(...inputs) {
|
|
7
|
+
return twMerge(clsx(inputs));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// src/components/breadcrumb.tsx
|
|
11
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
12
|
+
import { IconChevronRight, IconDots } from "@tabler/icons-react";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
function Breadcrumb({ ...props }) {
|
|
15
|
+
return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
|
|
16
|
+
}
|
|
17
|
+
function BreadcrumbList({ className, ...props }) {
|
|
18
|
+
return /* @__PURE__ */ jsx(
|
|
19
|
+
"ol",
|
|
20
|
+
{
|
|
21
|
+
"data-slot": "breadcrumb-list",
|
|
22
|
+
className: cn(
|
|
23
|
+
"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
|
|
24
|
+
className
|
|
25
|
+
),
|
|
26
|
+
...props
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function BreadcrumbItem({ className, ...props }) {
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
"li",
|
|
33
|
+
{
|
|
34
|
+
"data-slot": "breadcrumb-item",
|
|
35
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
36
|
+
...props
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
function BreadcrumbPage({ className, ...props }) {
|
|
41
|
+
return /* @__PURE__ */ jsx(
|
|
42
|
+
"span",
|
|
43
|
+
{
|
|
44
|
+
"data-slot": "breadcrumb-page",
|
|
45
|
+
"aria-disabled": "true",
|
|
46
|
+
"aria-current": "page",
|
|
47
|
+
className: cn("text-foreground font-normal", className),
|
|
48
|
+
...props
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function BreadcrumbSeparator({
|
|
53
|
+
children,
|
|
54
|
+
className,
|
|
55
|
+
...props
|
|
56
|
+
}) {
|
|
57
|
+
return /* @__PURE__ */ jsx(
|
|
58
|
+
"li",
|
|
59
|
+
{
|
|
60
|
+
"data-slot": "breadcrumb-separator",
|
|
61
|
+
role: "presentation",
|
|
62
|
+
"aria-hidden": "true",
|
|
63
|
+
className: cn("[&>svg]:size-3.5", className),
|
|
64
|
+
...props,
|
|
65
|
+
children: children ?? /* @__PURE__ */ jsx(IconChevronRight, {})
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// src/components/tooltip.tsx
|
|
71
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
72
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
73
|
+
|
|
74
|
+
// src/components/mesob-context.tsx
|
|
75
|
+
import {
|
|
76
|
+
createContext,
|
|
77
|
+
useContext,
|
|
78
|
+
useMemo
|
|
79
|
+
} from "react";
|
|
80
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
81
|
+
var MesobContext = createContext(null);
|
|
82
|
+
function useMesob() {
|
|
83
|
+
return useContext(MesobContext);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// src/components/app-breadcrumbs.tsx
|
|
87
|
+
import {
|
|
88
|
+
createContext as createContext2,
|
|
89
|
+
Fragment,
|
|
90
|
+
useCallback,
|
|
91
|
+
useContext as useContext2,
|
|
92
|
+
useEffect,
|
|
93
|
+
useMemo as useMemo2,
|
|
94
|
+
useRef,
|
|
95
|
+
useState
|
|
96
|
+
} from "react";
|
|
97
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
98
|
+
var BreadcrumbContext = createContext2(null);
|
|
99
|
+
function useBreadcrumbs(options) {
|
|
100
|
+
const context = useContext2(BreadcrumbContext);
|
|
101
|
+
if (!context) {
|
|
102
|
+
throw new Error("useBreadcrumbs must be used within BreadcrumbProvider");
|
|
103
|
+
}
|
|
104
|
+
const { setItems } = context;
|
|
105
|
+
const prevItemsStrRef = useRef(void 0);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
const items = options?.items;
|
|
108
|
+
if (!items) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const itemsStr = JSON.stringify(items);
|
|
112
|
+
if (prevItemsStrRef.current !== itemsStr) {
|
|
113
|
+
prevItemsStrRef.current = itemsStr;
|
|
114
|
+
setItems(items);
|
|
115
|
+
}
|
|
116
|
+
}, [options?.items, setItems]);
|
|
117
|
+
return context;
|
|
118
|
+
}
|
|
119
|
+
function BreadcrumbProvider({
|
|
120
|
+
children,
|
|
121
|
+
defaultItems = []
|
|
122
|
+
}) {
|
|
123
|
+
const [items, setItems] = useState(defaultItems);
|
|
124
|
+
const push = useCallback((item) => {
|
|
125
|
+
setItems((prev) => [...prev, item]);
|
|
126
|
+
}, []);
|
|
127
|
+
const pop = useCallback(() => {
|
|
128
|
+
setItems((prev) => prev.slice(0, -1));
|
|
129
|
+
}, []);
|
|
130
|
+
const clear = useCallback(() => {
|
|
131
|
+
setItems([]);
|
|
132
|
+
}, []);
|
|
133
|
+
const value = useMemo2(
|
|
134
|
+
() => ({
|
|
135
|
+
items,
|
|
136
|
+
setItems,
|
|
137
|
+
push,
|
|
138
|
+
pop,
|
|
139
|
+
clear
|
|
140
|
+
}),
|
|
141
|
+
[items, push, pop, clear]
|
|
142
|
+
);
|
|
143
|
+
return /* @__PURE__ */ jsx4(BreadcrumbContext.Provider, { value, children });
|
|
144
|
+
}
|
|
145
|
+
function AppBreadcrumbs({
|
|
146
|
+
linkComponent: linkProp,
|
|
147
|
+
className
|
|
148
|
+
}) {
|
|
149
|
+
const mesob = useMesob();
|
|
150
|
+
const Link = linkProp ?? mesob?.linkComponent;
|
|
151
|
+
const { items } = useBreadcrumbs(void 0);
|
|
152
|
+
if (items.length === 0) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
return /* @__PURE__ */ jsx4(Breadcrumb, { className, children: /* @__PURE__ */ jsx4(BreadcrumbList, { children: items.map((crumb, index) => {
|
|
156
|
+
let content;
|
|
157
|
+
if (crumb.href) {
|
|
158
|
+
if (Link) {
|
|
159
|
+
content = /* @__PURE__ */ jsx4(Link, { href: crumb.href, className: "hover:underline", children: crumb.label });
|
|
160
|
+
} else {
|
|
161
|
+
content = /* @__PURE__ */ jsx4("a", { href: crumb.href, className: "hover:underline", children: crumb.label });
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
content = /* @__PURE__ */ jsx4(BreadcrumbPage, { children: crumb.label });
|
|
165
|
+
}
|
|
166
|
+
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
167
|
+
index > 0 && /* @__PURE__ */ jsx4(BreadcrumbSeparator, { className: "hidden md:block" }),
|
|
168
|
+
/* @__PURE__ */ jsx4(BreadcrumbItem, { className: index === 0 ? "hidden md:block" : "", children: content })
|
|
169
|
+
] }, `${crumb.label}-${crumb.href ?? ""}-${index}`);
|
|
170
|
+
}) }) });
|
|
171
|
+
}
|
|
172
|
+
export {
|
|
173
|
+
AppBreadcrumbs,
|
|
174
|
+
BreadcrumbProvider,
|
|
175
|
+
useBreadcrumbs
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=app-breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/components/breadcrumb.tsx","../../src/components/tooltip.tsx","../../src/components/mesob-context.tsx","../../src/components/app-breadcrumbs.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from '@mesob/ui/lib/utils';\nimport { Slot } from '@radix-ui/react-slot';\nimport { IconChevronRight, IconDots } from '@tabler/icons-react';\nimport type * as React from 'react';\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn('hover:text-foreground transition-colors', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-foreground font-normal', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <IconChevronRight />}\n </li>\n );\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex size-9 items-center justify-center', className)}\n {...props}\n >\n <IconDots className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","'use client';\n\nimport { cn } from '@mesob/ui/lib/utils';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport type * as React from 'react';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props}>\n {children}\n </TooltipPrimitive.Root>\n );\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","'use client';\n\nimport { TooltipProvider } from '@mesob/ui/components/tooltip';\nimport {\n type ComponentType,\n createContext,\n type ReactNode,\n useContext,\n useMemo,\n} from 'react';\n\nexport type MesobLinkProps = {\n href: string;\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n};\n\nexport type Router = {\n push: (href: string) => void;\n replace: (href: string) => void;\n back: () => void;\n forward: () => void;\n refresh: () => void;\n prefetch: (href: string) => void;\n};\n\nexport type MesobContextValue = {\n linkComponent?: ComponentType<MesobLinkProps>;\n t?: (key: string, params?: Record<string, string | number>) => string;\n router?: Router;\n};\n\nconst MesobContext = createContext<MesobContextValue | null>(null);\n\nexport type MesobProviderProps = {\n children: ReactNode;\n linkComponent?: ComponentType<MesobLinkProps>;\n /** Hook that returns the app's t function (e.g. from next-intl useTranslations()). */\n useTranslation?: () => (\n key: string,\n params?: Record<string, string | number>,\n ) => string;\n /** Hook that returns the app's router (e.g. from next-intl useRouter()). */\n useRouter?: () => Router;\n};\n\nexport function MesobProvider({\n children,\n linkComponent,\n useTranslation,\n useRouter,\n}: MesobProviderProps) {\n const t = useTranslation?.();\n const router = useRouter?.();\n const value = useMemo<MesobContextValue>(\n () => ({ linkComponent, t: t ?? undefined, router: router ?? undefined }),\n [linkComponent, t, router],\n );\n return (\n <MesobContext.Provider value={value}>\n <TooltipProvider delayDuration={0}>{children}</TooltipProvider>\n </MesobContext.Provider>\n );\n}\n\nexport function useMesob(): MesobContextValue | null {\n return useContext(MesobContext);\n}\n","'use client';\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@mesob/ui/components/breadcrumb';\nimport { useMesob } from '@mesob/ui/components/mesob-context';\nimport type * as React from 'react';\nimport {\n createContext,\n Fragment,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\ntype BreadcrumbItemData = {\n label: string;\n href?: string;\n};\n\ntype BreadcrumbContextValue = {\n items: BreadcrumbItemData[];\n setItems: (items: BreadcrumbItemData[]) => void;\n push: (item: BreadcrumbItemData) => void;\n pop: () => void;\n clear: () => void;\n};\n\nconst BreadcrumbContext = createContext<BreadcrumbContextValue | null>(null);\n\ntype UseBreadcrumbsOptions = {\n items?: BreadcrumbItemData[];\n};\n\nexport function useBreadcrumbs(options?: UseBreadcrumbsOptions) {\n const context = useContext(BreadcrumbContext);\n if (!context) {\n throw new Error('useBreadcrumbs must be used within BreadcrumbProvider');\n }\n\n const { setItems } = context;\n const prevItemsStrRef = useRef<string | undefined>(undefined);\n\n useEffect(() => {\n const items = options?.items;\n if (!items) {\n return;\n }\n const itemsStr = JSON.stringify(items);\n if (prevItemsStrRef.current !== itemsStr) {\n prevItemsStrRef.current = itemsStr;\n setItems(items);\n }\n }, [options?.items, setItems]);\n\n return context;\n}\n\ntype BreadcrumbProviderProps = {\n children: React.ReactNode;\n defaultItems?: BreadcrumbItemData[];\n};\n\nexport function BreadcrumbProvider({\n children,\n defaultItems = [],\n}: BreadcrumbProviderProps) {\n const [items, setItems] = useState<BreadcrumbItemData[]>(defaultItems);\n\n const push = useCallback((item: BreadcrumbItemData) => {\n setItems((prev) => [...prev, item]);\n }, []);\n\n const pop = useCallback(() => {\n setItems((prev) => prev.slice(0, -1));\n }, []);\n\n const clear = useCallback(() => {\n setItems([]);\n }, []);\n\n const value = useMemo(\n () => ({\n items,\n setItems,\n push,\n pop,\n clear,\n }),\n [items, push, pop, clear],\n );\n\n return (\n <BreadcrumbContext.Provider value={value}>\n {children}\n </BreadcrumbContext.Provider>\n );\n}\n\ntype AppBreadcrumbsProps = {\n linkComponent?: React.ComponentType<{\n href: string;\n children: React.ReactNode;\n className?: string;\n }>;\n className?: string;\n};\n\nexport function AppBreadcrumbs({\n linkComponent: linkProp,\n className,\n}: AppBreadcrumbsProps) {\n const mesob = useMesob();\n const Link = linkProp ?? mesob?.linkComponent;\n const { items } = useBreadcrumbs(undefined);\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <Breadcrumb className={className}>\n <BreadcrumbList>\n {items.map((crumb, index) => {\n let content: React.ReactNode;\n if (crumb.href) {\n if (Link) {\n content = (\n <Link href={crumb.href} className=\"hover:underline\">\n {crumb.label}\n </Link>\n );\n } else {\n content = (\n <a href={crumb.href} className=\"hover:underline\">\n {crumb.label}\n </a>\n );\n }\n } else {\n content = <BreadcrumbPage>{crumb.label}</BreadcrumbPage>;\n }\n\n return (\n <Fragment key={`${crumb.label}-${crumb.href ?? ''}-${index}`}>\n {index > 0 && <BreadcrumbSeparator className=\"hidden md:block\" />}\n <BreadcrumbItem className={index === 0 ? 'hidden md:block' : ''}>\n {content}\n </BreadcrumbItem>\n </Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","createContext","useContext","useMemo","jsx","jsxs"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
type MenuItem = {
|
|
5
|
+
label: string;
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
href?: string;
|
|
8
|
+
onClick?: () => void;
|
|
9
|
+
variant?: 'default' | 'destructive';
|
|
10
|
+
};
|
|
11
|
+
type SpotlightGroup = {
|
|
12
|
+
heading: string;
|
|
13
|
+
items: Array<{
|
|
14
|
+
id: string;
|
|
15
|
+
title: string;
|
|
16
|
+
icon?: React.ReactNode;
|
|
17
|
+
shortcut?: string;
|
|
18
|
+
onSelect?: () => void;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
type AppHeaderActionsProps = {
|
|
22
|
+
user?: {
|
|
23
|
+
fullName?: string | null;
|
|
24
|
+
email?: string | null;
|
|
25
|
+
phone?: string | null;
|
|
26
|
+
handle?: string | null;
|
|
27
|
+
image?: string | null;
|
|
28
|
+
};
|
|
29
|
+
onLogout?: () => void | Promise<void>;
|
|
30
|
+
isLoggingOut?: boolean;
|
|
31
|
+
searchGroups?: SpotlightGroup[];
|
|
32
|
+
menuItems?: MenuItem[];
|
|
33
|
+
topMenuItems?: MenuItem[];
|
|
34
|
+
actions?: React.ReactNode;
|
|
35
|
+
accountMenuFooter?: React.ReactNode;
|
|
36
|
+
};
|
|
37
|
+
declare function AppHeaderActions({ user, onLogout, isLoggingOut, searchGroups, menuItems, topMenuItems, actions, accountMenuFooter, }: AppHeaderActionsProps): react_jsx_runtime.JSX.Element;
|
|
38
|
+
|
|
39
|
+
export { AppHeaderActions };
|