@curvenote/theme-ui 1.0.1
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/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +3 -0
- package/dist/components/layout/app-layout.d.ts +8 -0
- package/dist/components/layout/app-layout.d.ts.map +1 -0
- package/dist/components/layout/app-layout.js +24 -0
- package/dist/components/layout/app-sidebar.d.ts +2 -0
- package/dist/components/layout/app-sidebar.d.ts.map +1 -0
- package/dist/components/layout/app-sidebar.js +125 -0
- package/dist/components/layout/article-layout.d.ts +8 -0
- package/dist/components/layout/article-layout.d.ts.map +1 -0
- package/dist/components/layout/article-layout.js +20 -0
- package/dist/components/layout/grid.d.ts +2 -0
- package/dist/components/layout/grid.d.ts.map +1 -0
- package/dist/components/layout/grid.js +4 -0
- package/dist/components/layout/header.d.ts +5 -0
- package/dist/components/layout/header.d.ts.map +1 -0
- package/dist/components/layout/header.js +5 -0
- package/dist/components/layout/index.d.ts +7 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +7 -0
- package/dist/components/layout/loading-bar.d.ts +12 -0
- package/dist/components/layout/loading-bar.d.ts.map +1 -0
- package/dist/components/layout/loading-bar.js +53 -0
- package/dist/components/layout/site-header.d.ts +8 -0
- package/dist/components/layout/site-header.d.ts.map +1 -0
- package/dist/components/layout/site-header.js +55 -0
- package/dist/components/layout/types.d.ts +6 -0
- package/dist/components/layout/types.d.ts.map +1 -0
- package/dist/components/layout/types.js +1 -0
- package/dist/components/providers/compute.d.ts +5 -0
- package/dist/components/providers/compute.d.ts.map +1 -0
- package/dist/components/providers/compute.js +6 -0
- package/dist/components/providers/connect.d.ts +24 -0
- package/dist/components/providers/connect.d.ts.map +1 -0
- package/dist/components/providers/connect.js +208 -0
- package/dist/components/providers/curvenote-providers.d.ts +52 -0
- package/dist/components/providers/curvenote-providers.d.ts.map +1 -0
- package/dist/components/providers/curvenote-providers.js +199 -0
- package/dist/components/providers/design.d.ts +39 -0
- package/dist/components/providers/design.d.ts.map +1 -0
- package/dist/components/providers/design.js +50 -0
- package/dist/components/providers/index.d.ts +10 -0
- package/dist/components/providers/index.d.ts.map +1 -0
- package/dist/components/providers/index.js +12 -0
- package/dist/components/providers/lightbox-provider.d.ts +31 -0
- package/dist/components/providers/lightbox-provider.d.ts.map +1 -0
- package/dist/components/providers/lightbox-provider.js +109 -0
- package/dist/components/providers/myst-providers.d.ts +6 -0
- package/dist/components/providers/myst-providers.d.ts.map +1 -0
- package/dist/components/providers/myst-providers.js +29 -0
- package/dist/components/providers/page-providers.d.ts +15 -0
- package/dist/components/providers/page-providers.d.ts.map +1 -0
- package/dist/components/providers/page-providers.js +28 -0
- package/dist/components/providers/ping-boundary.d.ts +40 -0
- package/dist/components/providers/ping-boundary.d.ts.map +1 -0
- package/dist/components/providers/ping-boundary.js +115 -0
- package/dist/components/providers/platform-providers.d.ts +18 -0
- package/dist/components/providers/platform-providers.d.ts.map +1 -0
- package/dist/components/providers/platform-providers.js +29 -0
- package/dist/components/providers/types.d.ts +30 -0
- package/dist/components/providers/types.d.ts.map +1 -0
- package/dist/components/providers/types.js +1 -0
- package/dist/components/ui/Callout.d.ts +10 -0
- package/dist/components/ui/Callout.d.ts.map +1 -0
- package/dist/components/ui/Callout.js +7 -0
- package/dist/components/ui/PageCards.d.ts +2 -0
- package/dist/components/ui/PageCards.d.ts.map +1 -0
- package/dist/components/ui/PageCards.js +11 -0
- package/dist/components/ui/abbreviations.d.ts +5 -0
- package/dist/components/ui/abbreviations.d.ts.map +1 -0
- package/dist/components/ui/abbreviations.js +31 -0
- package/dist/components/ui/abstract.d.ts +8 -0
- package/dist/components/ui/abstract.d.ts.map +1 -0
- package/dist/components/ui/abstract.js +9 -0
- package/dist/components/ui/accessibility-skip-to.d.ts +15 -0
- package/dist/components/ui/accessibility-skip-to.d.ts.map +1 -0
- package/dist/components/ui/accessibility-skip-to.js +31 -0
- package/dist/components/ui/acknowledgements.d.ts +4 -0
- package/dist/components/ui/acknowledgements.d.ts.map +1 -0
- package/dist/components/ui/acknowledgements.js +20 -0
- package/dist/components/ui/article-actions-downloads.d.ts +26 -0
- package/dist/components/ui/article-actions-downloads.d.ts.map +1 -0
- package/dist/components/ui/article-actions-downloads.js +143 -0
- package/dist/components/ui/article-actions-dropdown.d.ts +5 -0
- package/dist/components/ui/article-actions-dropdown.d.ts.map +1 -0
- package/dist/components/ui/article-actions-dropdown.js +68 -0
- package/dist/components/ui/article-actions-share.d.ts +5 -0
- package/dist/components/ui/article-actions-share.d.ts.map +1 -0
- package/dist/components/ui/article-actions-share.js +52 -0
- package/dist/components/ui/article-actions.d.ts +2 -0
- package/dist/components/ui/article-actions.d.ts.map +1 -0
- package/dist/components/ui/article-actions.js +20 -0
- package/dist/components/ui/article-bar.d.ts +8 -0
- package/dist/components/ui/article-bar.d.ts.map +1 -0
- package/dist/components/ui/article-bar.js +32 -0
- package/dist/components/ui/article-card.d.ts +12 -0
- package/dist/components/ui/article-card.d.ts.map +1 -0
- package/dist/components/ui/article-card.js +22 -0
- package/dist/components/ui/article-footer.d.ts +2 -0
- package/dist/components/ui/article-footer.d.ts.map +1 -0
- package/dist/components/ui/article-footer.js +7 -0
- package/dist/components/ui/author-popover.d.ts +7 -0
- package/dist/components/ui/author-popover.d.ts.map +1 -0
- package/dist/components/ui/author-popover.js +36 -0
- package/dist/components/ui/backmatter.d.ts +9 -0
- package/dist/components/ui/backmatter.d.ts.map +1 -0
- package/dist/components/ui/backmatter.js +49 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +23 -0
- package/dist/components/ui/banner.d.ts +7 -0
- package/dist/components/ui/banner.d.ts.map +1 -0
- package/dist/components/ui/banner.js +44 -0
- package/dist/components/ui/bibliography.d.ts +6 -0
- package/dist/components/ui/bibliography.d.ts.map +1 -0
- package/dist/components/ui/bibliography.js +20 -0
- package/dist/components/ui/breadcrumb.d.ts +12 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +28 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +33 -0
- package/dist/components/ui/citation.d.ts +7 -0
- package/dist/components/ui/citation.d.ts.map +1 -0
- package/dist/components/ui/citation.js +99 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +12 -0
- package/dist/components/ui/cookie-banner.d.ts +8 -0
- package/dist/components/ui/cookie-banner.d.ts.map +1 -0
- package/dist/components/ui/cookie-banner.js +31 -0
- package/dist/components/ui/data-availability.d.ts +4 -0
- package/dist/components/ui/data-availability.d.ts.map +1 -0
- package/dist/components/ui/data-availability.js +20 -0
- package/dist/components/ui/dialog.d.ts +16 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +36 -0
- package/dist/components/ui/document-outline.d.ts +8 -0
- package/dist/components/ui/document-outline.d.ts.map +1 -0
- package/dist/components/ui/document-outline.js +168 -0
- package/dist/components/ui/dropdown-menu.d.ts +26 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +51 -0
- package/dist/components/ui/error-page.d.ts +9 -0
- package/dist/components/ui/error-page.d.ts.map +1 -0
- package/dist/components/ui/error-page.js +21 -0
- package/dist/components/ui/footer-links.d.ts +14 -0
- package/dist/components/ui/footer-links.d.ts.map +1 -0
- package/dist/components/ui/footer-links.js +18 -0
- package/dist/components/ui/footnotes.d.ts +4 -0
- package/dist/components/ui/footnotes.d.ts.map +1 -0
- package/dist/components/ui/footnotes.js +30 -0
- package/dist/components/ui/frontmatter-badges.d.ts +27 -0
- package/dist/components/ui/frontmatter-badges.d.ts.map +1 -0
- package/dist/components/ui/frontmatter-badges.js +60 -0
- package/dist/components/ui/frontmatter.d.ts +7 -0
- package/dist/components/ui/frontmatter.d.ts.map +1 -0
- package/dist/components/ui/frontmatter.js +6 -0
- package/dist/components/ui/image.d.ts +34 -0
- package/dist/components/ui/image.d.ts.map +1 -0
- package/dist/components/ui/image.js +83 -0
- package/dist/components/ui/index.d.ts +50 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +56 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +7 -0
- package/dist/components/ui/license-description.d.ts +4 -0
- package/dist/components/ui/license-description.d.ts.map +1 -0
- package/dist/components/ui/license-description.js +63 -0
- package/dist/components/ui/license-frontmatter.d.ts +22 -0
- package/dist/components/ui/license-frontmatter.d.ts.map +1 -0
- package/dist/components/ui/license-frontmatter.js +37 -0
- package/dist/components/ui/lightbox-container.d.ts +11 -0
- package/dist/components/ui/lightbox-container.d.ts.map +1 -0
- package/dist/components/ui/lightbox-container.js +13 -0
- package/dist/components/ui/lightbox.d.ts +17 -0
- package/dist/components/ui/lightbox.d.ts.map +1 -0
- package/dist/components/ui/lightbox.js +129 -0
- package/dist/components/ui/link-card.d.ts +15 -0
- package/dist/components/ui/link-card.d.ts.map +1 -0
- package/dist/components/ui/link-card.js +28 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +17 -0
- package/dist/components/ui/search.d.ts +9 -0
- package/dist/components/ui/search.d.ts.map +1 -0
- package/dist/components/ui/search.js +290 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +8 -0
- package/dist/components/ui/sheet.d.ts +14 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +40 -0
- package/dist/components/ui/sidebar.d.ts +67 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +202 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +6 -0
- package/dist/components/ui/sonner.d.ts +5 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/sonner.js +13 -0
- package/dist/components/ui/theme-button.d.ts +2 -0
- package/dist/components/ui/theme-button.d.ts.map +1 -0
- package/dist/components/ui/theme-button.js +9 -0
- package/dist/components/ui/tooltip.d.ts +13 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +20 -0
- package/dist/components/ui/types.d.ts +11 -0
- package/dist/components/ui/types.d.ts.map +1 -0
- package/dist/components/ui/types.js +10 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/use-hydrated.d.ts +2 -0
- package/dist/hooks/use-hydrated.d.ts.map +1 -0
- package/dist/hooks/use-hydrated.js +6 -0
- package/dist/hooks/use-image-load.d.ts +14 -0
- package/dist/hooks/use-image-load.d.ts.map +1 -0
- package/dist/hooks/use-image-load.js +41 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +15 -0
- package/dist/hooks/use-theme.d.ts +6 -0
- package/dist/hooks/use-theme.d.ts.map +1 -0
- package/dist/hooks/use-theme.js +23 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/lib/checkMecaExport.d.ts +5 -0
- package/dist/lib/checkMecaExport.d.ts.map +1 -0
- package/dist/lib/checkMecaExport.js +4 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +6 -0
- package/dist/lib/knownParts.d.ts +12 -0
- package/dist/lib/knownParts.d.ts.map +1 -0
- package/dist/lib/knownParts.js +14 -0
- package/dist/lib/links.d.ts +3 -0
- package/dist/lib/links.d.ts.map +1 -0
- package/dist/lib/links.js +7 -0
- package/dist/lib/parse-date.d.ts +2 -0
- package/dist/lib/parse-date.d.ts.map +1 -0
- package/dist/lib/parse-date.js +7 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +5 -0
- package/package.json +67 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState, useMemo, useCallback, useRef } from 'react';
|
|
3
|
+
import { cn } from '@curvenote/react-utils';
|
|
4
|
+
import * as Dialog from './dialog';
|
|
5
|
+
import { SPACE_OR_PUNCTUATION, rankResults } from '@myst-theme/search';
|
|
6
|
+
import { useSearchFactory, useLinkProvider, withBaseurl, useBaseurl, useNavigateProvider, } from '@myst-theme/providers';
|
|
7
|
+
import useSWR from 'swr';
|
|
8
|
+
import { Search as SearchIcon } from 'lucide-react';
|
|
9
|
+
/**
|
|
10
|
+
* Loading bar component that shows at the top of the dialog
|
|
11
|
+
*/
|
|
12
|
+
function LoadingBar() {
|
|
13
|
+
return (_jsx("div", { className: "overflow-hidden absolute top-0 right-0 left-0 h-1 bg-gray-200 dark:bg-gray-700", children: _jsx("div", { className: "h-full bg-gradient-to-r from-transparent via-blue-500 to-transparent bg-[length:200%_100%] animate-[loading-bar_2s_ease-in-out_infinite] dark:via-blue-400" }) }));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Shim for string.matchAll
|
|
17
|
+
*
|
|
18
|
+
* @param text - text to repeatedly match with pattern
|
|
19
|
+
* @param pattern - global pattern
|
|
20
|
+
*/
|
|
21
|
+
function matchAll(text, pattern) {
|
|
22
|
+
const matches = [];
|
|
23
|
+
let match;
|
|
24
|
+
while ((match = pattern.exec(text))) {
|
|
25
|
+
matches.push(match);
|
|
26
|
+
}
|
|
27
|
+
return matches;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Highlight a text string with an array of match words
|
|
31
|
+
*
|
|
32
|
+
* @param text - text to highlight
|
|
33
|
+
* @param matches - regular expression patterns to match against
|
|
34
|
+
* @param limit - limit to the number of characters after first match
|
|
35
|
+
* @param classname - CSS classname to use
|
|
36
|
+
*/
|
|
37
|
+
function MarkedText({ text, matches, limit, className, }) {
|
|
38
|
+
// Split by delimeter, but _keep_ delimeter!
|
|
39
|
+
const splits = matchAll(text, SPACE_OR_PUNCTUATION);
|
|
40
|
+
const tokens = [];
|
|
41
|
+
let start = 0;
|
|
42
|
+
for (const splitMatch of splits) {
|
|
43
|
+
tokens.push(text.slice(start, splitMatch.index));
|
|
44
|
+
tokens.push(splitMatch[0]);
|
|
45
|
+
start = splitMatch.index + splitMatch[0].length;
|
|
46
|
+
}
|
|
47
|
+
tokens.push(text.slice(start));
|
|
48
|
+
// Build RegExp matching all highlight matches
|
|
49
|
+
const allTerms = matches.join('|');
|
|
50
|
+
const pattern = new RegExp(`^(${allTerms})`, 'i'); // Match prefix and total pattern, case-insensitively
|
|
51
|
+
const renderToken = (token) => pattern.test(token) ? (_jsx(_Fragment, { children: _jsx("mark", { className: "text-blue-600 bg-inherit dark:text-blue-400 group-aria-selected:text-white group-aria-selected:underline", children: token }) })) : (token);
|
|
52
|
+
let firstIndex;
|
|
53
|
+
let lastIndex;
|
|
54
|
+
const hasLimit = limit !== undefined;
|
|
55
|
+
if (!hasLimit) {
|
|
56
|
+
firstIndex = 0;
|
|
57
|
+
lastIndex = tokens.length;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
firstIndex = tokens.findIndex((token) => pattern.test(token));
|
|
61
|
+
let numChars = 0;
|
|
62
|
+
for (lastIndex = firstIndex + 1; lastIndex < tokens.length - 1 && numChars + tokens[lastIndex].length <= limit; lastIndex++) {
|
|
63
|
+
numChars += tokens[lastIndex].length;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (tokens.length === 0) {
|
|
67
|
+
return _jsxs("span", { className: className, children: [...tokens] });
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const firstRenderer = renderToken(tokens[firstIndex]);
|
|
71
|
+
const remainingTokens = tokens.slice(firstIndex + 1, lastIndex);
|
|
72
|
+
const remainingRenderers = remainingTokens.map((token) => renderToken(token));
|
|
73
|
+
return (_jsxs("span", { className: cn(className, {
|
|
74
|
+
"before:content-['..._']": hasLimit,
|
|
75
|
+
"after:content-['_...']": hasLimit,
|
|
76
|
+
}, 'truncate', 'w-full'), children: [firstRenderer, ...remainingRenderers] }));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Return true if the client is a Mac, false if not, or undefined if running on the server
|
|
81
|
+
*/
|
|
82
|
+
function isMac() {
|
|
83
|
+
if (typeof window === 'undefined') {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const hostIsMac = /mac/i.test(window.navigator.userAgentData?.platform ?? window.navigator.userAgent);
|
|
88
|
+
return hostIsMac;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Renderer for a single search result
|
|
93
|
+
*/
|
|
94
|
+
function SearchResultItem({ result, closeSearch, charLimit, }) {
|
|
95
|
+
const { hierarchy, type, url, queries } = result;
|
|
96
|
+
const baseurl = useBaseurl();
|
|
97
|
+
const Link = useLinkProvider();
|
|
98
|
+
// Generic "this document matched"
|
|
99
|
+
const title = result.type === 'content' ? result['content'] : hierarchy[type];
|
|
100
|
+
const matches = useMemo(() => queries.flatMap((query) => Object.keys(query.matches)), [queries]);
|
|
101
|
+
// Render the title, i.e. content or heading
|
|
102
|
+
const titleRenderer = (_jsx(MarkedText, { text: title, matches: matches, limit: type === 'content' ? charLimit : undefined, className: "text-sm" }));
|
|
103
|
+
// Render the subtitle i.e. file name
|
|
104
|
+
let subtitleRenderer;
|
|
105
|
+
if (result.type === 'lvl1') {
|
|
106
|
+
subtitleRenderer = undefined;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const subtitle = result.hierarchy.lvl1;
|
|
110
|
+
subtitleRenderer = _jsx(MarkedText, { text: subtitle, matches: matches, className: "text-xs" });
|
|
111
|
+
}
|
|
112
|
+
return (_jsx(Link, { className: "block px-4 py-2 text-gray-700 dark:text-white group-aria-selected:bg-blue-600 group-aria-selected:text-white dark:shadow-none dark:bg-stone-800", to: withBaseurl(url, baseurl),
|
|
113
|
+
// Close the main search on click
|
|
114
|
+
onClick: closeSearch, children: _jsx("div", { className: "flex flex-row h-11", children: _jsxs("div", { className: "flex flex-col justify-center truncate grow", children: [titleRenderer, subtitleRenderer] }) }) }));
|
|
115
|
+
}
|
|
116
|
+
function SearchResults({ searchResults, searchListID, searchLabelID, charLimit, className, selectedIndex, onHoverSelect, closeSearch, }) {
|
|
117
|
+
// Array of search item refs
|
|
118
|
+
const itemsRef = useRef([]);
|
|
119
|
+
// Ref to assign items
|
|
120
|
+
const setItemRef = useCallback((elem) => {
|
|
121
|
+
if (!elem) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const index = parseInt(elem.dataset.index);
|
|
125
|
+
itemsRef.current[index] = elem;
|
|
126
|
+
}, [itemsRef]);
|
|
127
|
+
// Keep activeDescendent in sync wth selected index
|
|
128
|
+
const activeDescendent = useMemo(() => {
|
|
129
|
+
const item = itemsRef.current[selectedIndex];
|
|
130
|
+
if (!item) {
|
|
131
|
+
return '';
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return item.id;
|
|
135
|
+
}
|
|
136
|
+
}, [selectedIndex, itemsRef]);
|
|
137
|
+
// If the select item changes, bring it into view
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
const item = itemsRef.current[selectedIndex];
|
|
140
|
+
item?.scrollIntoView({ block: 'nearest' });
|
|
141
|
+
}, [selectedIndex]);
|
|
142
|
+
// Handle mouse movement events that set the current hovered element
|
|
143
|
+
const handleMouseMove = useCallback((event) => {
|
|
144
|
+
const index = parseInt(event.currentTarget.dataset.index);
|
|
145
|
+
onHoverSelect(index);
|
|
146
|
+
}, [onHoverSelect]);
|
|
147
|
+
return (_jsx("div", { className: "overflow-y-auto mt-4 max-h-[60vh]", children: searchResults.length ? (_jsx("ul", {
|
|
148
|
+
// Accessibility:
|
|
149
|
+
// indicate that this is a select-box
|
|
150
|
+
role: "listbox", id: searchListID, "aria-label": "Search results", "aria-labelledby": searchLabelID, "aria-orientation": "vertical", "aria-activedescendant": activeDescendent, className: cn('flex overflow-hidden flex-col rounded-sm border', className), children: searchResults.map((result, index) => (_jsx("li", { ref: setItemRef, "data-index": index,
|
|
151
|
+
// Accessibility:
|
|
152
|
+
// Indicate that this is an option
|
|
153
|
+
role: "option", "aria-selected": selectedIndex === index,
|
|
154
|
+
// Allow for nested-highlighting
|
|
155
|
+
className: "border-b border-gray-200 group dark:border-gray-700 last:border-b-0",
|
|
156
|
+
// Trigger selection on movement, so that scrolling doesn't trigger handler
|
|
157
|
+
onMouseMove: handleMouseMove, children: _jsx(SearchResultItem, { result: result, closeSearch: closeSearch, charLimit: charLimit }) }, result.id))) })) : (_jsx("span", { children: "No results found." })) }));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Build search implementation by requesting search index from server
|
|
161
|
+
*/
|
|
162
|
+
function useSearch(shouldLoad = true) {
|
|
163
|
+
const baseURL = useBaseurl();
|
|
164
|
+
const [enabled, setEnabled] = useState(true);
|
|
165
|
+
// SWR fetcher function
|
|
166
|
+
const fetcher = useCallback(async (url) => {
|
|
167
|
+
const response = await fetch(url);
|
|
168
|
+
if (!response.ok) {
|
|
169
|
+
throw new Error('Failed to fetch search index');
|
|
170
|
+
}
|
|
171
|
+
return response.json();
|
|
172
|
+
}, []);
|
|
173
|
+
// Load search index using SWR only when shouldLoad is true
|
|
174
|
+
const searchURL = withBaseurl('/myst.search.json', baseURL);
|
|
175
|
+
const { data: searchIndex, error, isLoading, } = useSWR(shouldLoad ? searchURL : null, fetcher, {
|
|
176
|
+
revalidateOnFocus: false,
|
|
177
|
+
revalidateOnReconnect: false,
|
|
178
|
+
dedupingInterval: 60000, // 1 minute
|
|
179
|
+
});
|
|
180
|
+
const searchFactory = useSearchFactory();
|
|
181
|
+
const search = useMemo(() => {
|
|
182
|
+
if (!searchIndex || !searchFactory || error) {
|
|
183
|
+
if (error) {
|
|
184
|
+
setEnabled(false);
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
if (searchIndex?.version && searchIndex?.records) {
|
|
190
|
+
return searchFactory(searchIndex);
|
|
191
|
+
}
|
|
192
|
+
setEnabled(false);
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
}, [searchFactory, searchIndex, error, setEnabled]);
|
|
196
|
+
// Implement pass-through
|
|
197
|
+
return { search, enabled: enabled && !isLoading, loading: isLoading };
|
|
198
|
+
}
|
|
199
|
+
function SearchForm({ debounceTime, searchResults, setSearchResults, searchInputID, searchListID, searchLabelID, selectedIndex, setSelectedIndex, closeSearch, loading, shouldLoad, }) {
|
|
200
|
+
const [query, setQuery] = useState('');
|
|
201
|
+
const { search: doSearch, enabled } = useSearch(shouldLoad);
|
|
202
|
+
// Debounce user input
|
|
203
|
+
useEffect(() => {
|
|
204
|
+
const timeoutId = setTimeout(() => {
|
|
205
|
+
if (query != undefined && !!doSearch) {
|
|
206
|
+
doSearch(query).then((rawResults) => {
|
|
207
|
+
setSearchResults(rawResults &&
|
|
208
|
+
rankResults(rawResults)
|
|
209
|
+
// Filter duplicates by URL
|
|
210
|
+
.filter((result, index, array) => result.url !== array[index - 1]?.url));
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}, debounceTime);
|
|
214
|
+
return () => clearTimeout(timeoutId);
|
|
215
|
+
}, [doSearch, query, debounceTime]);
|
|
216
|
+
// Handle user input
|
|
217
|
+
const handleSearchChange = useCallback((event) => {
|
|
218
|
+
setQuery(event.target.value);
|
|
219
|
+
}, []);
|
|
220
|
+
// Handle item selection
|
|
221
|
+
const navigate = useNavigateProvider();
|
|
222
|
+
const baseurl = useBaseurl();
|
|
223
|
+
// Handle item selection and navigation
|
|
224
|
+
const handleSearchKeyPress = useCallback((event) => {
|
|
225
|
+
// Ignore modifiers
|
|
226
|
+
if (event.ctrlKey || event.altKey || event.shiftKey) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (!searchResults) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
// Item selection
|
|
233
|
+
if (event.key === 'Enter') {
|
|
234
|
+
event.preventDefault();
|
|
235
|
+
const url = searchResults[selectedIndex]?.url;
|
|
236
|
+
if (url) {
|
|
237
|
+
navigate(withBaseurl(url, baseurl));
|
|
238
|
+
closeSearch?.();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Item navigation
|
|
242
|
+
else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
243
|
+
event.preventDefault();
|
|
244
|
+
if (event.key === 'ArrowUp') {
|
|
245
|
+
setSelectedIndex(selectedIndex > 0 ? selectedIndex - 1 : 0);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
setSelectedIndex(selectedIndex < searchResults.length - 1 ? selectedIndex + 1 : searchResults.length - 1);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}, [searchResults, selectedIndex]); // Our form doesn't use the submit function
|
|
252
|
+
const onSubmit = useCallback((event) => {
|
|
253
|
+
event.preventDefault();
|
|
254
|
+
}, []);
|
|
255
|
+
return (_jsxs(_Fragment, { children: [_jsx("form", { onSubmit: onSubmit, children: _jsxs("div", { className: "flex relative w-full h-10 flow-row", children: [_jsx("label", { id: searchListID, htmlFor: searchInputID, children: _jsx(SearchIcon, { className: "absolute text-gray-400 inset-y-0 start-0 h-10 w-10 p-2.5 aspect-square flex items-center pointer-events-none" }) }), _jsx("input", { autoComplete: "off", spellCheck: "false", disabled: !enabled, autoCapitalize: "false", className: cn('block flex-grow p-2 placeholder-gray-400 ps-10', 'border border-gray-300 dark:border-gray-600', 'bg-gray-50 rounded-sm dark:bg-gray-700', 'focus:ring-blue-500 dark:focus:ring-blue-500', 'focus:border-blue-500 dark:focus:border-blue-500', 'dark:placeholder-gray-400', { 'border-red-500': !enabled && !loading }), id: searchInputID, "aria-labelledby": searchLabelID, "aria-controls": searchListID, placeholder: "Search", type: "search", required: true, onChange: handleSearchChange, onKeyDown: handleSearchKeyPress })] }) }), !enabled && !loading && (_jsx("div", { className: "mx-2 mt-4 text-sm text-gray-500", children: "Search is not enabled for this site." }))] }));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Component that implements a basic search interface
|
|
259
|
+
*/
|
|
260
|
+
export function SearchDialog({ debounceTime = 500, charLimit = 64, children, }) {
|
|
261
|
+
const [open, setOpen] = useState(false);
|
|
262
|
+
const [searchResults, setSearchResults] = useState();
|
|
263
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
264
|
+
const { loading } = useSearch(open);
|
|
265
|
+
// Clear search state on close
|
|
266
|
+
useEffect(() => {
|
|
267
|
+
if (!open) {
|
|
268
|
+
setSearchResults(undefined);
|
|
269
|
+
setSelectedIndex(0);
|
|
270
|
+
}
|
|
271
|
+
}, [open]);
|
|
272
|
+
// Trigger modal on keypress
|
|
273
|
+
const handleDocumentKeyPress = useCallback((event) => {
|
|
274
|
+
if (event.key === 'k' && (isMac() ? event.metaKey : event.ctrlKey)) {
|
|
275
|
+
setOpen(true);
|
|
276
|
+
event.preventDefault();
|
|
277
|
+
}
|
|
278
|
+
}, []);
|
|
279
|
+
// Mount the document event handlers
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
// attach the event listener
|
|
282
|
+
document.addEventListener('keydown', handleDocumentKeyPress);
|
|
283
|
+
// remove the event listener
|
|
284
|
+
return () => {
|
|
285
|
+
document.removeEventListener('keydown', handleDocumentKeyPress);
|
|
286
|
+
};
|
|
287
|
+
}, [handleDocumentKeyPress]);
|
|
288
|
+
const triggerClose = useCallback(() => setOpen(false), [setOpen]);
|
|
289
|
+
return (_jsxs(Dialog.Dialog, { open: open, onOpenChange: setOpen, children: [_jsx(Dialog.DialogTrigger, { asChild: true, children: _jsx("div", { className: "cursor-pointer", children: children }) }), _jsxs(Dialog.DialogPortal, { children: [_jsx(Dialog.DialogOverlay, {}), _jsx(Dialog.DialogContent, { className: "fixed top-4 sm:top-[10vh] left-1/2 -translate-x-1/2 w-[90vw] max-w-screen-sm max-h-[calc(100vh-2rem)] sm:max-h-[70vh] overflow-hidden translate-y-0 p-0", showCloseButton: false, children: _jsxs("div", { className: "flex overflow-hidden relative flex-col gap-0 p-4", children: [_jsx(Dialog.DialogTitle, { className: "sr-only", children: "Search Website" }), _jsx(Dialog.DialogDescription, { className: "sr-only", children: "Search articles and their contents using fuzzy-search and prefix-matching" }), _jsx("div", { className: "flex-shrink-0", children: _jsx(SearchForm, { searchListID: "search-list", searchLabelID: "search-label", searchInputID: "search-input", debounceTime: debounceTime, searchResults: searchResults, setSearchResults: setSearchResults, selectedIndex: selectedIndex, setSelectedIndex: setSelectedIndex, closeSearch: triggerClose, loading: loading, shouldLoad: open }) }), searchResults && (_jsx("div", { className: "overflow-hidden flex-1", children: _jsx(SearchResults, { searchListID: "search-list", searchLabelID: "search-label", className: "overflow-y-auto h-full", searchResults: searchResults, selectedIndex: selectedIndex, onHoverSelect: setSelectedIndex, closeSearch: triggerClose, charLimit: charLimit }) }))] }) })] })] }));
|
|
290
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
3
|
+
declare function Separator({ className, orientation, decorative, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export { Separator };
|
|
5
|
+
//# sourceMappingURL=separator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../../src/components/ui/separator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAIhE,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,WAA0B,EAC1B,UAAiB,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAatD;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
4
|
+
import { cn } from '../../lib/utils';
|
|
5
|
+
function Separator({ className, orientation = 'horizontal', decorative = true, ...props }) {
|
|
6
|
+
return (_jsx(SeparatorPrimitive.Root, { "data-slot": "separator", decorative: decorative, orientation: orientation, className: cn('bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px', className), ...props }));
|
|
7
|
+
}
|
|
8
|
+
export { Separator };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
3
|
+
declare function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare function SheetContent({ className, children, side, ...props }: React.ComponentProps<typeof SheetPrimitive.Content> & {
|
|
7
|
+
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
declare function SheetHeader({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare function SheetFooter({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare function SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare function SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
|
|
14
|
+
//# sourceMappingURL=sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AAKzD,iBAAS,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,2CAE5E;AAED,iBAAS,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,2CAEtF;AAED,iBAAS,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,2CAElF;AAsBD,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,IAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG;IACvD,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC5C,2CA4BA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQxE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,2CAQ7F;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,WAAW,CAAC,2CAQzD;AAED,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
4
|
+
import { XIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
function Sheet({ ...props }) {
|
|
7
|
+
return _jsx(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
8
|
+
}
|
|
9
|
+
function SheetTrigger({ ...props }) {
|
|
10
|
+
return _jsx(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
11
|
+
}
|
|
12
|
+
function SheetClose({ ...props }) {
|
|
13
|
+
return _jsx(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
14
|
+
}
|
|
15
|
+
function SheetPortal({ ...props }) {
|
|
16
|
+
return _jsx(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
17
|
+
}
|
|
18
|
+
function SheetOverlay({ className, ...props }) {
|
|
19
|
+
return (_jsx(SheetPrimitive.Overlay, { "data-slot": "sheet-overlay", className: cn('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50', className), ...props }));
|
|
20
|
+
}
|
|
21
|
+
function SheetContent({ className, children, side = 'right', ...props }) {
|
|
22
|
+
return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Content, { "data-slot": "sheet-content", className: cn('bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500', side === 'right' &&
|
|
23
|
+
'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm', side === 'left' &&
|
|
24
|
+
'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm', side === 'top' &&
|
|
25
|
+
'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b', side === 'bottom' &&
|
|
26
|
+
'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t', className), ...props, children: [children, _jsxs(SheetPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] })] })] }));
|
|
27
|
+
}
|
|
28
|
+
function SheetHeader({ className, ...props }) {
|
|
29
|
+
return (_jsx("div", { "data-slot": "sheet-header", className: cn('flex flex-col gap-1.5 p-4', className), ...props }));
|
|
30
|
+
}
|
|
31
|
+
function SheetFooter({ className, ...props }) {
|
|
32
|
+
return (_jsx("div", { "data-slot": "sheet-footer", className: cn('mt-auto flex flex-col gap-2 p-4', className), ...props }));
|
|
33
|
+
}
|
|
34
|
+
function SheetTitle({ className, ...props }) {
|
|
35
|
+
return (_jsx(SheetPrimitive.Title, { "data-slot": "sheet-title", className: cn('text-foreground font-semibold', className), ...props }));
|
|
36
|
+
}
|
|
37
|
+
function SheetDescription({ className, ...props }) {
|
|
38
|
+
return (_jsx(SheetPrimitive.Description, { "data-slot": "sheet-description", className: cn('text-muted-foreground text-sm', className), ...props }));
|
|
39
|
+
}
|
|
40
|
+
export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
import { Button, Input, Separator, TooltipContent } from '.';
|
|
4
|
+
type SidebarContextProps = {
|
|
5
|
+
state: 'expanded' | 'collapsed';
|
|
6
|
+
open: boolean;
|
|
7
|
+
setOpen: (open: boolean) => void;
|
|
8
|
+
openMobile: boolean;
|
|
9
|
+
setOpenMobile: (open: boolean) => void;
|
|
10
|
+
isMobile: boolean;
|
|
11
|
+
toggleSidebar: () => void;
|
|
12
|
+
};
|
|
13
|
+
declare function useSidebar(): SidebarContextProps | null;
|
|
14
|
+
declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React.ComponentProps<'div'> & {
|
|
15
|
+
defaultOpen?: boolean;
|
|
16
|
+
open?: boolean;
|
|
17
|
+
onOpenChange?: (open: boolean) => void;
|
|
18
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare function Sidebar({ side, variant, collapsible, className, children, ...props }: React.ComponentProps<'div'> & {
|
|
20
|
+
side?: 'left' | 'right';
|
|
21
|
+
variant?: 'sidebar' | 'floating' | 'inset';
|
|
22
|
+
collapsible?: 'offcanvas' | 'icon' | 'none';
|
|
23
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
declare function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
declare function SidebarRail({ className, ...props }: React.ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare function SidebarInset({ className, ...props }: React.ComponentProps<'main'>): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
declare function SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
declare function SidebarHeader({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
declare function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
declare function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
declare function SidebarContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
declare function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
declare function SidebarGroupLabel({ className, asChild, ...props }: React.ComponentProps<'div'> & {
|
|
34
|
+
asChild?: boolean;
|
|
35
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
declare function SidebarGroupAction({ className, asChild, ...props }: React.ComponentProps<'button'> & {
|
|
37
|
+
asChild?: boolean;
|
|
38
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
declare function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
declare function SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
declare function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
declare const sidebarMenuButtonVariants: (props?: ({
|
|
43
|
+
variant?: "default" | "outline" | null | undefined;
|
|
44
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
45
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
46
|
+
declare function SidebarMenuButton({ asChild, isActive, variant, size, tooltip, className, ...props }: React.ComponentProps<'button'> & {
|
|
47
|
+
asChild?: boolean;
|
|
48
|
+
isActive?: boolean;
|
|
49
|
+
tooltip?: string | React.ComponentProps<typeof TooltipContent>;
|
|
50
|
+
} & VariantProps<typeof sidebarMenuButtonVariants>): import("react/jsx-runtime").JSX.Element;
|
|
51
|
+
declare function SidebarMenuAction({ className, asChild, showOnHover, ...props }: React.ComponentProps<'button'> & {
|
|
52
|
+
asChild?: boolean;
|
|
53
|
+
showOnHover?: boolean;
|
|
54
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
55
|
+
declare function SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
declare function SidebarMenuSkeleton({ className, showIcon, ...props }: React.ComponentProps<'div'> & {
|
|
57
|
+
showIcon?: boolean;
|
|
58
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
declare function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
declare function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
declare function SidebarMenuSubButton({ asChild, size, isActive, className, ...props }: React.ComponentProps<'a'> & {
|
|
62
|
+
asChild?: boolean;
|
|
63
|
+
size?: 'sm' | 'md';
|
|
64
|
+
isActive?: boolean;
|
|
65
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, };
|
|
67
|
+
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sidebar.tsx"],"names":[],"mappings":"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"}
|