@myrjfa/ui 1.0.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/LICENSE +201 -0
- package/README.md +2 -0
- package/dist/dashboard/action-buttons.d.ts +16 -0
- package/dist/dashboard/action-buttons.d.ts.map +1 -0
- package/dist/dashboard/action-buttons.js +10 -0
- package/dist/dashboard/app-sidebar.d.ts +3 -0
- package/dist/dashboard/app-sidebar.d.ts.map +1 -0
- package/dist/dashboard/app-sidebar.js +145 -0
- package/dist/dashboard/card-header.d.ts +11 -0
- package/dist/dashboard/card-header.d.ts.map +1 -0
- package/dist/dashboard/card-header.js +8 -0
- package/dist/dashboard/dashboard-components.d.ts +13 -0
- package/dist/dashboard/dashboard-components.d.ts.map +1 -0
- package/dist/dashboard/dashboard-components.js +12 -0
- package/dist/dashboard/data-table.d.ts +19 -0
- package/dist/dashboard/data-table.d.ts.map +1 -0
- package/dist/dashboard/data-table.js +59 -0
- package/dist/dashboard/nav-main.d.ts +9 -0
- package/dist/dashboard/nav-main.d.ts.map +1 -0
- package/dist/dashboard/nav-main.js +10 -0
- package/dist/dashboard/nav-secondary.d.ts +10 -0
- package/dist/dashboard/nav-secondary.d.ts.map +1 -0
- package/dist/dashboard/nav-secondary.js +29 -0
- package/dist/dashboard/stats-card.d.ts +6 -0
- package/dist/dashboard/stats-card.d.ts.map +1 -0
- package/dist/dashboard/stats-card.js +6 -0
- package/dist/dashboard/table.d.ts +11 -0
- package/dist/dashboard/table.d.ts.map +1 -0
- package/dist/dashboard/table.js +67 -0
- package/dist/header/mobile-nav-item.d.ts +9 -0
- package/dist/header/mobile-nav-item.d.ts.map +1 -0
- package/dist/header/mobile-nav-item.js +7 -0
- package/dist/header/mobile-navbar.d.ts +5 -0
- package/dist/header/mobile-navbar.d.ts.map +1 -0
- package/dist/header/mobile-navbar.js +22 -0
- package/dist/header/nav-item.d.ts +9 -0
- package/dist/header/nav-item.d.ts.map +1 -0
- package/dist/header/nav-item.js +7 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/main/footer.d.ts +6 -0
- package/dist/main/footer.d.ts.map +1 -0
- package/dist/main/footer.js +47 -0
- package/dist/main/navbar.d.ts +6 -0
- package/dist/main/navbar.d.ts.map +1 -0
- package/dist/main/navbar.js +180 -0
- package/dist/main/paginationBar.d.ts +5 -0
- package/dist/main/paginationBar.d.ts.map +1 -0
- package/dist/main/paginationBar.js +30 -0
- package/dist/main/review-page.d.ts +13 -0
- package/dist/main/review-page.d.ts.map +1 -0
- package/dist/main/review-page.js +246 -0
- package/dist/misc/accordion.d.ts +7 -0
- package/dist/misc/accordion.d.ts.map +1 -0
- package/dist/misc/accordion.js +44 -0
- package/dist/misc/alert-dialog.d.ts +14 -0
- package/dist/misc/alert-dialog.d.ts.map +1 -0
- package/dist/misc/alert-dialog.js +72 -0
- package/dist/misc/alert.d.ts +9 -0
- package/dist/misc/alert.d.ts.map +1 -0
- package/dist/misc/alert.js +49 -0
- package/dist/misc/alertdialogclaude.d.ts +15 -0
- package/dist/misc/alertdialogclaude.d.ts.map +1 -0
- package/dist/misc/alertdialogclaude.js +226 -0
- package/dist/misc/avatar.d.ts +6 -0
- package/dist/misc/avatar.d.ts.map +1 -0
- package/dist/misc/avatar.js +39 -0
- package/dist/misc/badge.d.ts +9 -0
- package/dist/misc/badge.d.ts.map +1 -0
- package/dist/misc/badge.js +45 -0
- package/dist/misc/button.d.ts +10 -0
- package/dist/misc/button.d.ts.map +1 -0
- package/dist/misc/button.js +54 -0
- package/dist/misc/card.d.ts +9 -0
- package/dist/misc/card.d.ts.map +1 -0
- package/dist/misc/card.js +49 -0
- package/dist/misc/carousel.d.ts +20 -0
- package/dist/misc/carousel.d.ts.map +1 -0
- package/dist/misc/carousel.js +115 -0
- package/dist/misc/checkbox.d.ts +4 -0
- package/dist/misc/checkbox.d.ts.map +1 -0
- package/dist/misc/checkbox.js +32 -0
- package/dist/misc/command.d.ts +16 -0
- package/dist/misc/command.d.ts.map +1 -0
- package/dist/misc/command.js +65 -0
- package/dist/misc/datepicker.d.ts +12 -0
- package/dist/misc/datepicker.d.ts.map +1 -0
- package/dist/misc/datepicker.js +199 -0
- package/dist/misc/dialog.d.ts +13 -0
- package/dist/misc/dialog.d.ts.map +1 -0
- package/dist/misc/dialog.js +68 -0
- package/dist/misc/dropdown-menu.d.ts +25 -0
- package/dist/misc/dropdown-menu.d.ts.map +1 -0
- package/dist/misc/dropdown-menu.js +88 -0
- package/dist/misc/faq.d.ts +5 -0
- package/dist/misc/faq.d.ts.map +1 -0
- package/dist/misc/faq.js +6 -0
- package/dist/misc/file-preview.d.ts +8 -0
- package/dist/misc/file-preview.d.ts.map +1 -0
- package/dist/misc/file-preview.js +130 -0
- package/dist/misc/filter.d.ts +12 -0
- package/dist/misc/filter.d.ts.map +1 -0
- package/dist/misc/filter.js +47 -0
- package/dist/misc/filterBar.d.ts +5 -0
- package/dist/misc/filterBar.d.ts.map +1 -0
- package/dist/misc/filterBar.js +196 -0
- package/dist/misc/form.d.ts +25 -0
- package/dist/misc/form.d.ts.map +1 -0
- package/dist/misc/form.js +81 -0
- package/dist/misc/input.d.ts +4 -0
- package/dist/misc/input.d.ts.map +1 -0
- package/dist/misc/input.js +29 -0
- package/dist/misc/label.d.ts +4 -0
- package/dist/misc/label.d.ts.map +1 -0
- package/dist/misc/label.js +31 -0
- package/dist/misc/line-carousel.d.ts +9 -0
- package/dist/misc/line-carousel.d.ts.map +1 -0
- package/dist/misc/line-carousel.js +15 -0
- package/dist/misc/multiImageUploader.d.ts +9 -0
- package/dist/misc/multiImageUploader.d.ts.map +1 -0
- package/dist/misc/multiImageUploader.js +11 -0
- package/dist/misc/newsLetter.d.ts +3 -0
- package/dist/misc/newsLetter.d.ts.map +1 -0
- package/dist/misc/newsLetter.js +101 -0
- package/dist/misc/notification.d.ts +6 -0
- package/dist/misc/notification.d.ts.map +1 -0
- package/dist/misc/notification.js +148 -0
- package/dist/misc/pagination.d.ts +15 -0
- package/dist/misc/pagination.d.ts.map +1 -0
- package/dist/misc/pagination.js +59 -0
- package/dist/misc/password-eye.d.ts +6 -0
- package/dist/misc/password-eye.d.ts.map +1 -0
- package/dist/misc/password-eye.js +7 -0
- package/dist/misc/popover.d.ts +7 -0
- package/dist/misc/popover.d.ts.map +1 -0
- package/dist/misc/popover.js +43 -0
- package/dist/misc/progress.d.ts +4 -0
- package/dist/misc/progress.d.ts.map +1 -0
- package/dist/misc/progress.js +31 -0
- package/dist/misc/scroll-area.d.ts +5 -0
- package/dist/misc/scroll-area.d.ts.map +1 -0
- package/dist/misc/scroll-area.js +37 -0
- package/dist/misc/searchBar.d.ts +6 -0
- package/dist/misc/searchBar.d.ts.map +1 -0
- package/dist/misc/searchBar.js +93 -0
- package/dist/misc/searchBox.d.ts +12 -0
- package/dist/misc/searchBox.d.ts.map +1 -0
- package/dist/misc/searchBox.js +66 -0
- package/dist/misc/select.d.ts +13 -0
- package/dist/misc/select.d.ts.map +1 -0
- package/dist/misc/select.js +70 -0
- package/dist/misc/separator.d.ts +4 -0
- package/dist/misc/separator.d.ts.map +1 -0
- package/dist/misc/separator.js +31 -0
- package/dist/misc/share.d.ts +5 -0
- package/dist/misc/share.d.ts.map +1 -0
- package/dist/misc/share.js +213 -0
- package/dist/misc/sheet.d.ts +13 -0
- package/dist/misc/sheet.d.ts.map +1 -0
- package/dist/misc/sheet.js +72 -0
- package/dist/misc/sidebar.d.ts +70 -0
- package/dist/misc/sidebar.d.ts.map +1 -0
- package/dist/misc/sidebar.js +253 -0
- package/dist/misc/skeleton.d.ts +3 -0
- package/dist/misc/skeleton.d.ts.map +1 -0
- package/dist/misc/skeleton.js +29 -0
- package/dist/misc/starRating.d.ts +4 -0
- package/dist/misc/starRating.d.ts.map +1 -0
- package/dist/misc/starRating.js +21 -0
- package/dist/misc/stateCard.d.ts +7 -0
- package/dist/misc/stateCard.d.ts.map +1 -0
- package/dist/misc/stateCard.js +22 -0
- package/dist/misc/tabs.d.ts +8 -0
- package/dist/misc/tabs.d.ts.map +1 -0
- package/dist/misc/tabs.js +43 -0
- package/dist/misc/textarea.d.ts +4 -0
- package/dist/misc/textarea.d.ts.map +1 -0
- package/dist/misc/textarea.js +29 -0
- package/dist/misc/tile.d.ts +3 -0
- package/dist/misc/tile.d.ts.map +1 -0
- package/dist/misc/tile.js +137 -0
- package/dist/misc/tooltip.d.ts +8 -0
- package/dist/misc/tooltip.d.ts.map +1 -0
- package/dist/misc/tooltip.js +43 -0
- package/dist/profile/socialLink.d.ts +10 -0
- package/dist/profile/socialLink.d.ts.map +1 -0
- package/dist/profile/socialLink.js +82 -0
- package/package.json +79 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Search } from "lucide-react";
|
|
4
|
+
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
5
|
+
import { Suspense, useEffect, useRef, useState } from "react";
|
|
6
|
+
import { Button } from "./button";
|
|
7
|
+
function SearchBarComponent(_a) {
|
|
8
|
+
var titles = _a.titles;
|
|
9
|
+
var searchParams = useSearchParams();
|
|
10
|
+
var pathname = usePathname();
|
|
11
|
+
var router = useRouter();
|
|
12
|
+
var inputRef = useRef(null);
|
|
13
|
+
// State for search input and suggestions
|
|
14
|
+
var _b = useState(""), searchQuery = _b[0], setSearchQuery = _b[1];
|
|
15
|
+
var _c = useState(false), showSuggestions = _c[0], setShowSuggestions = _c[1];
|
|
16
|
+
var _d = useState([]), suggestions = _d[0], setSuggestions = _d[1];
|
|
17
|
+
var _e = useState(-1), highlightedIndex = _e[0], setHighlightedIndex = _e[1];
|
|
18
|
+
useEffect(function () {
|
|
19
|
+
var query = searchParams.get("query") || "";
|
|
20
|
+
setSearchQuery(query);
|
|
21
|
+
}, [searchParams]);
|
|
22
|
+
// Update suggestions when search query changes
|
|
23
|
+
useEffect(function () {
|
|
24
|
+
if (searchQuery.trim() === "") {
|
|
25
|
+
setSuggestions([]);
|
|
26
|
+
setHighlightedIndex(-1);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
var filtered = titles
|
|
30
|
+
.filter(function (title) {
|
|
31
|
+
return title.toLowerCase().includes(searchQuery.toLowerCase());
|
|
32
|
+
})
|
|
33
|
+
.slice(0, 5); // Limit to top 5 suggestions
|
|
34
|
+
setSuggestions(filtered);
|
|
35
|
+
setHighlightedIndex(-1);
|
|
36
|
+
}, [searchQuery, titles]);
|
|
37
|
+
// Execute search by updating URL params
|
|
38
|
+
var executeSearch = function () {
|
|
39
|
+
var newParams = new URLSearchParams(searchParams);
|
|
40
|
+
// Reset to first page when searching
|
|
41
|
+
newParams.set("page", "1");
|
|
42
|
+
if (searchQuery.trim() !== "") {
|
|
43
|
+
newParams.set("query", searchQuery);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
newParams.delete("query");
|
|
47
|
+
}
|
|
48
|
+
router.push("".concat(pathname, "?").concat(newParams.toString()));
|
|
49
|
+
setShowSuggestions(false);
|
|
50
|
+
};
|
|
51
|
+
var handleKeyDown = function (e) {
|
|
52
|
+
if (e.key === "ArrowDown") {
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
setShowSuggestions(true);
|
|
55
|
+
setHighlightedIndex(function (prev) { return (prev + 1) % suggestions.length; });
|
|
56
|
+
}
|
|
57
|
+
else if (e.key === "ArrowUp") {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
setShowSuggestions(true);
|
|
60
|
+
setHighlightedIndex(function (prev) { return (prev - 1 + suggestions.length) % suggestions.length; });
|
|
61
|
+
}
|
|
62
|
+
else if (e.key === "Enter") {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
if (highlightedIndex >= 0 && suggestions[highlightedIndex]) {
|
|
65
|
+
var selectedSuggestion = suggestions[highlightedIndex];
|
|
66
|
+
setSearchQuery(selectedSuggestion);
|
|
67
|
+
setHighlightedIndex(0);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
executeSearch();
|
|
71
|
+
}
|
|
72
|
+
setShowSuggestions(false);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
// Select a suggestion
|
|
76
|
+
var handleSuggestionClick = function (suggestion) {
|
|
77
|
+
var _a;
|
|
78
|
+
setSearchQuery(suggestion);
|
|
79
|
+
setShowSuggestions(false);
|
|
80
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
81
|
+
};
|
|
82
|
+
return (_jsx("div", { className: "relative w-4/5 mx-auto bg-background shadow-md rounded-full px-4 py-2 md:max-w-5xl z-11", children: _jsxs("div", { className: "flex items-center", children: [_jsxs("div", { className: "relative flex-1", children: [_jsx("input", { ref: inputRef, type: "text", placeholder: "Search...", value: searchQuery, onChange: function (e) {
|
|
83
|
+
setSearchQuery(e.target.value);
|
|
84
|
+
setShowSuggestions(true);
|
|
85
|
+
}, onKeyDown: handleKeyDown, onFocus: function () { return setShowSuggestions(searchQuery.trim() !== ""); }, onBlur: function () {
|
|
86
|
+
// Delay hiding suggestions to allow clicking on them
|
|
87
|
+
setTimeout(function () { return setShowSuggestions(false); }, 150);
|
|
88
|
+
}, className: "w-full bg-transparent border-none outline-none py-2 px-3 text-gray-700" }), showSuggestions && suggestions.length > 0 && (_jsx("div", { className: "absolute top-full left-0 w-full mt-1 bg-white rounded-md shadow-lg z-15 max-h-60 overflow-y-auto", children: suggestions.map(function (suggestion, index) { return (_jsx("div", { className: "px-4 py-2 text-sm cursor-pointer ".concat(index === highlightedIndex ? 'bg-muted' : 'text-gray-700 hover:bg-muted'), onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return handleSuggestionClick(suggestion); }, children: suggestion }, index)); }) }))] }), _jsx(Button, { variant: "default", onClick: executeSearch, className: "ml-4 w-10 h-10 rounded-full flex items-center justify-center cursor-pointer", children: _jsx(Search, { size: 18 }) })] }) }));
|
|
89
|
+
}
|
|
90
|
+
export default function SearchBar(_a) {
|
|
91
|
+
var titles = _a.titles;
|
|
92
|
+
return (_jsx(Suspense, { fallback: _jsx("div", { className: "w-full h-screen flex items-center justify-center", children: "Loading..." }), children: _jsx(SearchBarComponent, { titles: titles }) }));
|
|
93
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface SearchBarProps {
|
|
2
|
+
titles: string[];
|
|
3
|
+
id?: string;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
onChange?: (value: string) => void;
|
|
6
|
+
searchQuery?: string;
|
|
7
|
+
setSearchQuery?: (value: string) => void;
|
|
8
|
+
handleAdd: (searchQuery: string) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function SearchBox({ titles, id, placeholder, onChange, searchQuery, setSearchQuery, handleAdd }: SearchBarProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=searchBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchBox.d.ts","sourceRoot":"","sources":["../../src/misc/searchBox.tsx"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,cAAc,2CAiGtH"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
export function SearchBox(_a) {
|
|
5
|
+
var _b;
|
|
6
|
+
var titles = _a.titles, id = _a.id, placeholder = _a.placeholder, onChange = _a.onChange, searchQuery = _a.searchQuery, setSearchQuery = _a.setSearchQuery, handleAdd = _a.handleAdd;
|
|
7
|
+
var inputRef = useRef(null);
|
|
8
|
+
var _c = useState(false), showSuggestions = _c[0], setShowSuggestions = _c[1];
|
|
9
|
+
var _d = useState([]), suggestions = _d[0], setSuggestions = _d[1];
|
|
10
|
+
var _e = useState(-1), highlightedIndex = _e[0], setHighlightedIndex = _e[1];
|
|
11
|
+
if (!setSearchQuery) {
|
|
12
|
+
_b = useState(""), searchQuery = _b[0], setSearchQuery = _b[1];
|
|
13
|
+
}
|
|
14
|
+
useEffect(function () {
|
|
15
|
+
if (searchQuery.trim() === "") {
|
|
16
|
+
setSuggestions([]);
|
|
17
|
+
setHighlightedIndex(-1);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
var filtered = titles
|
|
21
|
+
.filter(function (title) {
|
|
22
|
+
return title.toLowerCase().includes(searchQuery.toLowerCase());
|
|
23
|
+
})
|
|
24
|
+
.slice(0, 5);
|
|
25
|
+
setSuggestions(filtered);
|
|
26
|
+
setHighlightedIndex(-1);
|
|
27
|
+
}, [searchQuery, titles]);
|
|
28
|
+
var handleKeyDown = function (e) {
|
|
29
|
+
if (e.key === "ArrowDown") {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
setShowSuggestions(true);
|
|
32
|
+
setHighlightedIndex(function (prev) { return (prev + 1) % suggestions.length; });
|
|
33
|
+
}
|
|
34
|
+
else if (e.key === "ArrowUp") {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
setShowSuggestions(true);
|
|
37
|
+
setHighlightedIndex(function (prev) { return (prev - 1 + suggestions.length) % suggestions.length; });
|
|
38
|
+
}
|
|
39
|
+
else if (e.key === "Enter") {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
if (highlightedIndex >= 0 && suggestions[highlightedIndex]) {
|
|
42
|
+
var selectedSuggestion = suggestions[highlightedIndex];
|
|
43
|
+
setSearchQuery(selectedSuggestion);
|
|
44
|
+
setHighlightedIndex(0);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
handleAdd(searchQuery);
|
|
48
|
+
setSearchQuery("");
|
|
49
|
+
}
|
|
50
|
+
setShowSuggestions(false);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var handleSuggestionClick = function (suggestion) {
|
|
54
|
+
var _a;
|
|
55
|
+
setSearchQuery(suggestion);
|
|
56
|
+
setShowSuggestions(false);
|
|
57
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
58
|
+
};
|
|
59
|
+
return (_jsx("div", { className: "relative w-full mx-auto bg-background rounded-lg", children: _jsx("div", { className: "flex items-center", children: _jsxs("div", { className: "relative flex-1", children: [_jsx("input", { id: id !== null && id !== void 0 ? id : "", ref: inputRef, type: "text", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : "Search...", value: searchQuery, onChange: function (e) {
|
|
60
|
+
setSearchQuery(e.target.value);
|
|
61
|
+
setShowSuggestions(true);
|
|
62
|
+
}, onKeyDown: handleKeyDown, onFocus: function () { return setShowSuggestions(searchQuery.trim() !== ""); }, onBlur: function (e) {
|
|
63
|
+
// Delay hiding to allow click
|
|
64
|
+
setTimeout(function () { return setShowSuggestions(false); }, 150);
|
|
65
|
+
}, className: "w-full bg-transparent border border-input rounded-md py-2 px-3 text-sm text-gray-700 focus:outline-none z-11" }), showSuggestions && suggestions.length > 0 && (_jsx("div", { className: "absolute top-full left-0 w-full mt-1 bg-white rounded-md shadow-lg z-100 max-h-60 overflow-y-auto border border-muted", children: suggestions.map(function (suggestion, index) { return (_jsx("div", { className: "px-4 py-2 text-sm cursor-pointer ".concat(index === highlightedIndex ? 'bg-muted' : 'text-gray-700 hover:bg-muted'), onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return handleSuggestionClick(suggestion); }, children: suggestion }, index)); }) }))] }) }) }));
|
|
66
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
2
|
+
declare function Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function SelectTrigger({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare function SelectContent({ className, children, position, ...props }: React.ComponentProps<typeof SelectPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare function SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare function SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
declare function SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare function SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare function SelectScrollDownButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
|
|
13
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/misc/select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAKzD,iBAAS,MAAM,CAAC,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAEnD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEpD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEpD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAgBtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,QAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CA4BtD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAQpD;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAkBnD;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,2CAQxD;AAED,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,cAAc,CAAC,2CAa7D;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,gBAAgB,CAAC,2CAa/D;AAED,OAAO,EACL,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
26
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
27
|
+
import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
|
|
28
|
+
function Select(_a) {
|
|
29
|
+
var props = __rest(_a, []);
|
|
30
|
+
return _jsx(SelectPrimitive.Root, __assign({ "data-slot": "select" }, props));
|
|
31
|
+
}
|
|
32
|
+
function SelectGroup(_a) {
|
|
33
|
+
var props = __rest(_a, []);
|
|
34
|
+
return _jsx(SelectPrimitive.Group, __assign({ "data-slot": "select-group" }, props));
|
|
35
|
+
}
|
|
36
|
+
function SelectValue(_a) {
|
|
37
|
+
var props = __rest(_a, []);
|
|
38
|
+
return _jsx(SelectPrimitive.Value, __assign({ "data-slot": "select-value" }, props));
|
|
39
|
+
}
|
|
40
|
+
function SelectTrigger(_a) {
|
|
41
|
+
var className = _a.className, children = _a.children, props = __rest(_a, ["className", "children"]);
|
|
42
|
+
return (_jsxs(SelectPrimitive.Trigger, __assign({ "data-slot": "select-trigger", className: cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex h-9 w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className) }, props, { children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDownIcon, { className: "size-4 opacity-50" }) })] })));
|
|
43
|
+
}
|
|
44
|
+
function SelectContent(_a) {
|
|
45
|
+
var className = _a.className, children = _a.children, _b = _a.position, position = _b === void 0 ? "popper" : _b, props = __rest(_a, ["className", "children", "position"]);
|
|
46
|
+
return (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, __assign({ "data-slot": "select-content", className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md", position === "popper" &&
|
|
47
|
+
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className), position: position }, props, { children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: cn("p-1", position === "popper" &&
|
|
48
|
+
"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"), children: children }), _jsx(SelectScrollDownButton, {})] })) }));
|
|
49
|
+
}
|
|
50
|
+
function SelectLabel(_a) {
|
|
51
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
52
|
+
return (_jsx(SelectPrimitive.Label, __assign({ "data-slot": "select-label", className: cn("px-2 py-1.5 text-sm font-medium", className) }, props)));
|
|
53
|
+
}
|
|
54
|
+
function SelectItem(_a) {
|
|
55
|
+
var className = _a.className, children = _a.children, props = __rest(_a, ["className", "children"]);
|
|
56
|
+
return (_jsxs(SelectPrimitive.Item, __assign({ "data-slot": "select-item", className: cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className) }, props, { children: [_jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] })));
|
|
57
|
+
}
|
|
58
|
+
function SelectSeparator(_a) {
|
|
59
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
60
|
+
return (_jsx(SelectPrimitive.Separator, __assign({ "data-slot": "select-separator", className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className) }, props)));
|
|
61
|
+
}
|
|
62
|
+
function SelectScrollUpButton(_a) {
|
|
63
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
64
|
+
return (_jsx(SelectPrimitive.ScrollUpButton, __assign({ "data-slot": "select-scroll-up-button", className: cn("flex cursor-default items-center justify-center py-1", className) }, props, { children: _jsx(ChevronUpIcon, { className: "size-4" }) })));
|
|
65
|
+
}
|
|
66
|
+
function SelectScrollDownButton(_a) {
|
|
67
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
68
|
+
return (_jsx(SelectPrimitive.ScrollDownButton, __assign({ "data-slot": "select-scroll-down-button", className: cn("flex cursor-default items-center justify-center py-1", className) }, props, { children: _jsx(ChevronDownIcon, { className: "size-4" }) })));
|
|
69
|
+
}
|
|
70
|
+
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
2
|
+
declare function Separator({ className, orientation, decorative, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export { Separator };
|
|
4
|
+
//# sourceMappingURL=separator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../src/misc/separator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAI/D,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,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
26
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
27
|
+
function Separator(_a) {
|
|
28
|
+
var className = _a.className, _b = _a.orientation, orientation = _b === void 0 ? "horizontal" : _b, _c = _a.decorative, decorative = _c === void 0 ? true : _c, props = __rest(_a, ["className", "orientation", "decorative"]);
|
|
29
|
+
return (_jsx(SeparatorPrimitive.Root, __assign({ "data-slot": "separator-root", 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)));
|
|
30
|
+
}
|
|
31
|
+
export { Separator };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/misc/share.tsx"],"names":[],"mappings":"AAoBA,QAAA,MAAM,WAAW,GAAI,WAAqB;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,4CAoO3D,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
50
|
+
import { DialogTitle } from "@radix-ui/react-dialog";
|
|
51
|
+
import { Mail, Share2 } from "lucide-react";
|
|
52
|
+
import { useEffect, useState } from "react";
|
|
53
|
+
import { FaFacebook, FaLinkedin, FaPinterest, FaReddit, FaTelegram, FaTumblr, FaWhatsapp, FaXTwitter } from "react-icons/fa6";
|
|
54
|
+
import { EmailShareButton, FacebookShareButton, LinkedinShareButton, PinterestShareButton, RedditShareButton, TelegramShareButton, TumblrShareButton, TwitterShareButton, WhatsappShareButton, } from "react-share";
|
|
55
|
+
import { Button } from "./button";
|
|
56
|
+
import { Dialog, DialogContent } from "./dialog";
|
|
57
|
+
var ShareButton = function (_a) {
|
|
58
|
+
var _b = _a.label, label = _b === void 0 ? "Share" : _b;
|
|
59
|
+
var _c = useState(false), open = _c[0], setOpen = _c[1];
|
|
60
|
+
var _d = useState(false), canUseNativeShare = _d[0], setCanUseNativeShare = _d[1];
|
|
61
|
+
var _e = useState(false), copied = _e[0], setCopied = _e[1];
|
|
62
|
+
var _f = useState({
|
|
63
|
+
title: "",
|
|
64
|
+
description: "",
|
|
65
|
+
image: "",
|
|
66
|
+
url: ""
|
|
67
|
+
}), pageMetadata = _f[0], setPageMetadata = _f[1];
|
|
68
|
+
// Extract metadata from page on component mount
|
|
69
|
+
useEffect(function () {
|
|
70
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
71
|
+
var currentUrl = window.location.href;
|
|
72
|
+
var ogTitle = (_a = document.querySelector('meta[property="og:title"]')) === null || _a === void 0 ? void 0 : _a.getAttribute('content');
|
|
73
|
+
var twitterTitle = (_b = document.querySelector('meta[name="twitter:title"]')) === null || _b === void 0 ? void 0 : _b.getAttribute('content');
|
|
74
|
+
var title = ogTitle || twitterTitle || document.title || "Check out this page";
|
|
75
|
+
var ogDescription = (_c = document.querySelector('meta[property="og:description"]')) === null || _c === void 0 ? void 0 : _c.getAttribute('content');
|
|
76
|
+
var twitterDescription = (_d = document.querySelector('meta[name="twitter:description"]')) === null || _d === void 0 ? void 0 : _d.getAttribute('content');
|
|
77
|
+
var metaDescription = (_e = document.querySelector('meta[name="description"]')) === null || _e === void 0 ? void 0 : _e.getAttribute('content');
|
|
78
|
+
var description = ogDescription || twitterDescription || metaDescription || "I found something interesting to share";
|
|
79
|
+
var ogImage = (_f = document.querySelector('meta[property="og:image"]')) === null || _f === void 0 ? void 0 : _f.getAttribute('content');
|
|
80
|
+
var twitterImage = (_g = document.querySelector('meta[name="twitter:image"]')) === null || _g === void 0 ? void 0 : _g.getAttribute('content');
|
|
81
|
+
var image = ogImage || twitterImage || "";
|
|
82
|
+
setPageMetadata({
|
|
83
|
+
title: title,
|
|
84
|
+
description: description,
|
|
85
|
+
image: image,
|
|
86
|
+
url: currentUrl
|
|
87
|
+
});
|
|
88
|
+
setCanUseNativeShare(!!navigator.share);
|
|
89
|
+
}, []);
|
|
90
|
+
// Reset copied state after 2 seconds
|
|
91
|
+
useEffect(function () {
|
|
92
|
+
if (copied) {
|
|
93
|
+
var timer_1 = setTimeout(function () { return setCopied(false); }, 2000);
|
|
94
|
+
return function () { return clearTimeout(timer_1); };
|
|
95
|
+
}
|
|
96
|
+
}, [copied]);
|
|
97
|
+
// Handle share button click
|
|
98
|
+
var handleShareClick = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
99
|
+
return __generator(this, function (_a) {
|
|
100
|
+
switch (_a.label) {
|
|
101
|
+
case 0:
|
|
102
|
+
if (!canUseNativeShare) return [3 /*break*/, 2];
|
|
103
|
+
return [4 /*yield*/, navigator.share({
|
|
104
|
+
title: pageMetadata.title,
|
|
105
|
+
text: pageMetadata.description,
|
|
106
|
+
url: pageMetadata.url,
|
|
107
|
+
})];
|
|
108
|
+
case 1:
|
|
109
|
+
_a.sent();
|
|
110
|
+
return [3 /*break*/, 3];
|
|
111
|
+
case 2:
|
|
112
|
+
// Native sharing not available, use custom dialog
|
|
113
|
+
setOpen(true);
|
|
114
|
+
_a.label = 3;
|
|
115
|
+
case 3: return [2 /*return*/];
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}); };
|
|
119
|
+
// Handle copying URL to clipboard
|
|
120
|
+
var handleCopyLink = function () {
|
|
121
|
+
navigator.clipboard.writeText(pageMetadata.url);
|
|
122
|
+
setCopied(true);
|
|
123
|
+
};
|
|
124
|
+
// Define the share platforms with their metadata
|
|
125
|
+
var sharePlatforms = [
|
|
126
|
+
{
|
|
127
|
+
name: "Facebook",
|
|
128
|
+
icon: _jsx(FaFacebook, { className: "w-6 h-6 text-blue-600" }),
|
|
129
|
+
component: FacebookShareButton,
|
|
130
|
+
props: {
|
|
131
|
+
url: pageMetadata.url,
|
|
132
|
+
quote: "".concat(pageMetadata.title, "\n").concat(pageMetadata.description),
|
|
133
|
+
hashtag: "#Trippeaze"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: "Twitter",
|
|
138
|
+
icon: _jsx(FaXTwitter, { className: "w-6 h-6 text-gray-800" }),
|
|
139
|
+
component: TwitterShareButton,
|
|
140
|
+
props: {
|
|
141
|
+
url: pageMetadata.url,
|
|
142
|
+
title: "".concat(pageMetadata.title, "\n").concat(pageMetadata.description),
|
|
143
|
+
via: "Trippeaze",
|
|
144
|
+
hashtags: ["Trippeaze", "Travel"]
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: "WhatsApp",
|
|
149
|
+
icon: _jsx(FaWhatsapp, { className: "w-6 h-6 text-green-500" }),
|
|
150
|
+
component: WhatsappShareButton,
|
|
151
|
+
props: {
|
|
152
|
+
url: pageMetadata.url,
|
|
153
|
+
title: "".concat(pageMetadata.title, "\n").concat(pageMetadata.description),
|
|
154
|
+
separator: "\n"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: "LinkedIn",
|
|
159
|
+
icon: _jsx(FaLinkedin, { className: "w-6 h-6 text-blue-700" }),
|
|
160
|
+
component: LinkedinShareButton,
|
|
161
|
+
props: {
|
|
162
|
+
url: pageMetadata.url,
|
|
163
|
+
title: pageMetadata.title,
|
|
164
|
+
summary: pageMetadata.description,
|
|
165
|
+
source: "Trippeaze"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: "Telegram",
|
|
170
|
+
icon: _jsx(FaTelegram, { className: "w-6 h-6 text-blue-500" }),
|
|
171
|
+
component: TelegramShareButton,
|
|
172
|
+
props: {
|
|
173
|
+
url: pageMetadata.url,
|
|
174
|
+
title: "".concat(pageMetadata.title, "\n").concat(pageMetadata.description)
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: "Reddit",
|
|
179
|
+
icon: _jsx(FaReddit, { className: "w-6 h-6 text-orange-500" }),
|
|
180
|
+
component: RedditShareButton,
|
|
181
|
+
props: {
|
|
182
|
+
url: pageMetadata.url,
|
|
183
|
+
title: "".concat(pageMetadata.title, "\n").concat(pageMetadata.description)
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "Tumblr",
|
|
188
|
+
icon: _jsx(FaTumblr, { className: "w-6 h-6 text-gray-900" }),
|
|
189
|
+
component: TumblrShareButton,
|
|
190
|
+
props: {
|
|
191
|
+
url: pageMetadata.url,
|
|
192
|
+
title: pageMetadata.title,
|
|
193
|
+
caption: pageMetadata.description,
|
|
194
|
+
tags: ["Trippeaze", "Travel"]
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: "Email",
|
|
199
|
+
icon: _jsx(Mail, { className: "w-6 h-6 text-gray-600" }),
|
|
200
|
+
component: EmailShareButton,
|
|
201
|
+
props: {
|
|
202
|
+
url: pageMetadata.url,
|
|
203
|
+
subject: pageMetadata.title,
|
|
204
|
+
body: "".concat(pageMetadata.description, "\n\n").concat(pageMetadata.url)
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
return (_jsxs(_Fragment, { children: [_jsxs(Button, { variant: "outline", className: "flex items-center gap-2 px-4 py-2 hover:bg-gray-100 transition-all", onClick: handleShareClick, "aria-label": "Share this page", children: [_jsx(Share2, { className: "w-4 h-4" }), _jsx("span", { className: "hidden md:block", children: label })] }), _jsx(Dialog, { open: open, onOpenChange: setOpen, children: _jsx(DialogContent, { className: "sm:max-w-md p-0 rounded-lg overflow-hidden shadow-xl", children: _jsxs("div", { className: "p-4 sm:p-6", children: [_jsxs("div", { className: "mb-4 flex flex-col gap-2", children: [_jsx(DialogTitle, { className: "text-lg font-semibold", children: "Share this page" }), _jsxs("div", { className: "relative flex items-center", children: [_jsx("input", { type: "text", readOnly: true, value: pageMetadata.url, className: "w-full bg-gray-50 border border-gray-200 rounded-lg py-2 px-3 text-sm pr-20 overflow-hidden text-ellipsis", "aria-label": "Page URL" }), _jsx(Button, { variant: "ghost", className: "absolute right-1 top-1/2 -translate-y-1/2 h-7 rounded-md text-xs px-3 text-blue-600 hover:bg-blue-50", onClick: handleCopyLink, "aria-label": "Copy link to clipboard", children: copied ? "Copied!" : "Copy" })] })] }), _jsxs("div", { className: "grid grid-cols-3 sm:grid-cols-3 gap-4 sm:gap-6", children: [sharePlatforms.map(function (platform, index) {
|
|
209
|
+
var ShareComponent = platform.component;
|
|
210
|
+
return (_jsx(ShareComponent, __assign({}, platform.props, { className: "flex flex-col items-center justify-center", children: _jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-3 rounded-lg hover:bg-gray-50 transition-colors w-full", children: [platform.icon, _jsx("span", { className: "text-xs font-medium text-gray-700", children: platform.name })] }) }), index));
|
|
211
|
+
}), pageMetadata.image && (_jsx(PinterestShareButton, { url: pageMetadata.url, media: pageMetadata.image, description: pageMetadata.description, className: "flex flex-col items-center justify-center", children: _jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-3 rounded-lg hover:bg-gray-50 transition-colors w-full", children: [_jsx(FaPinterest, { className: "w-6 h-6 text-red-600" }), _jsx("span", { className: "text-xs font-medium text-gray-700", children: "Pinterest" })] }) }))] })] }) }) })] }));
|
|
212
|
+
};
|
|
213
|
+
export default ShareButton;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
2
|
+
declare function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function SheetContent({ className, children, side, ...props }: React.ComponentProps<typeof SheetPrimitive.Content> & {
|
|
6
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare function SheetHeader({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
declare function SheetFooter({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare function SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare function SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
|
|
13
|
+
//# sourceMappingURL=sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/misc/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AAKxD,iBAAS,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,2CAE5E;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,2CAErD;AAED,iBAAS,UAAU,CAAC,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,2CAEnD;AAwBD,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,CAAA;CAC3C,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,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,2CAQnD;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,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
26
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
27
|
+
import { XIcon } from "lucide-react";
|
|
28
|
+
function Sheet(_a) {
|
|
29
|
+
var props = __rest(_a, []);
|
|
30
|
+
return _jsx(SheetPrimitive.Root, __assign({ "data-slot": "sheet" }, props));
|
|
31
|
+
}
|
|
32
|
+
function SheetTrigger(_a) {
|
|
33
|
+
var props = __rest(_a, []);
|
|
34
|
+
return _jsx(SheetPrimitive.Trigger, __assign({ "data-slot": "sheet-trigger" }, props));
|
|
35
|
+
}
|
|
36
|
+
function SheetClose(_a) {
|
|
37
|
+
var props = __rest(_a, []);
|
|
38
|
+
return _jsx(SheetPrimitive.Close, __assign({ "data-slot": "sheet-close" }, props));
|
|
39
|
+
}
|
|
40
|
+
function SheetPortal(_a) {
|
|
41
|
+
var props = __rest(_a, []);
|
|
42
|
+
return _jsx(SheetPrimitive.Portal, __assign({ "data-slot": "sheet-portal" }, props));
|
|
43
|
+
}
|
|
44
|
+
function SheetOverlay(_a) {
|
|
45
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
46
|
+
return (_jsx(SheetPrimitive.Overlay, __assign({ "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/80", className) }, props)));
|
|
47
|
+
}
|
|
48
|
+
function SheetContent(_a) {
|
|
49
|
+
var className = _a.className, children = _a.children, _b = _a.side, side = _b === void 0 ? "right" : _b, props = __rest(_a, ["className", "children", "side"]);
|
|
50
|
+
return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Content, __assign({ "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" &&
|
|
51
|
+
"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" &&
|
|
52
|
+
"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" &&
|
|
53
|
+
"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" &&
|
|
54
|
+
"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" })] })] }))] }));
|
|
55
|
+
}
|
|
56
|
+
function SheetHeader(_a) {
|
|
57
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
58
|
+
return (_jsx("div", __assign({ "data-slot": "sheet-header", className: cn("flex flex-col gap-1.5 p-4", className) }, props)));
|
|
59
|
+
}
|
|
60
|
+
function SheetFooter(_a) {
|
|
61
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
62
|
+
return (_jsx("div", __assign({ "data-slot": "sheet-footer", className: cn("mt-auto flex flex-col gap-2 p-4", className) }, props)));
|
|
63
|
+
}
|
|
64
|
+
function SheetTitle(_a) {
|
|
65
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
66
|
+
return (_jsx(SheetPrimitive.Title, __assign({ "data-slot": "sheet-title", className: cn("text-foreground font-semibold", className) }, props)));
|
|
67
|
+
}
|
|
68
|
+
function SheetDescription(_a) {
|
|
69
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
70
|
+
return (_jsx(SheetPrimitive.Description, __assign({ "data-slot": "sheet-description", className: cn("text-muted-foreground text-sm", className) }, props)));
|
|
71
|
+
}
|
|
72
|
+
export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
|