@myrjfa/ui 1.1.1 → 2.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/dist/chat/ChatMain.d.ts +1 -1
- package/dist/chat/ChatMain.d.ts.map +1 -1
- package/dist/chat/ChatMain.js +3 -3
- package/dist/chat/ChatSidebar.d.ts +1 -1
- package/dist/chat/ChatSidebar.d.ts.map +1 -1
- package/dist/chat/ConversationList.d.ts +1 -1
- package/dist/chat/ConversationList.d.ts.map +1 -1
- package/dist/chat/ConversationList.js +1 -1
- package/dist/chat/ExpensePanel.js +1 -1
- package/dist/chat/MessageBubble.d.ts +1 -1
- package/dist/chat/MessageBubble.d.ts.map +1 -1
- package/dist/chat/MessageInput.js +1 -1
- package/dist/chat/MilestonePanel.js +1 -1
- package/dist/chat/components/SplitInputs.d.ts +1 -1
- package/dist/chat/components/SplitInputs.d.ts.map +1 -1
- package/dist/chat/components/SplitTypeSelector.d.ts +1 -1
- package/dist/chat/components/SplitTypeSelector.d.ts.map +1 -1
- package/dist/chat/dialogs/AddMemberDialog.d.ts +1 -1
- package/dist/chat/dialogs/AddMemberDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/AddMemberDialog.js +1 -1
- package/dist/chat/dialogs/ExpenseAnalyticsDialog.js +1 -1
- package/dist/chat/dialogs/GroupInfoDialog.d.ts +1 -1
- package/dist/chat/dialogs/GroupInfoDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/GroupInfoDialog.js +1 -1
- package/dist/chat/dialogs/GroupInfoViewDialog.d.ts +1 -1
- package/dist/chat/dialogs/GroupInfoViewDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/NewChatDialog.js +2 -2
- package/dist/chat/dialogs/NewGroupDialog.js +2 -2
- package/dist/chat/dialogs/ParticipantsDialog.d.ts +1 -1
- package/dist/chat/dialogs/ParticipantsDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/ParticipantsDialog.js +1 -1
- package/dist/dashboard/action-buttons.d.ts.map +1 -1
- package/dist/dashboard/action-buttons.js +7 -1
- package/dist/dashboard/app-sidebar.d.ts.map +1 -1
- package/dist/dashboard/app-sidebar.js +9 -4
- package/dist/dashboard/card-header.d.ts +1 -1
- package/dist/dashboard/card-header.d.ts.map +1 -1
- package/dist/dashboard/card-header.js +1 -1
- package/dist/dashboard/dashboard-components.js +1 -1
- package/dist/dashboard/data-table.d.ts.map +1 -1
- package/dist/dashboard/data-table.js +8 -8
- package/dist/dashboard/table.js +1 -1
- package/dist/header/mobile-nav-item.js +1 -1
- package/dist/header/nav-item.js +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/main/footer.d.ts +1 -0
- package/dist/main/footer.d.ts.map +1 -1
- package/dist/main/footer.js +35 -16
- package/dist/main/navbar.d.ts +2 -2
- package/dist/main/navbar.d.ts.map +1 -1
- package/dist/main/navbar.js +24 -18
- package/dist/main/paginationBar.d.ts +1 -1
- package/dist/main/paginationBar.d.ts.map +1 -1
- package/dist/main/paginationBar.js +1 -1
- package/dist/main/portfolio/portfolioItem.d.ts +1 -1
- package/dist/main/portfolio/portfolioItem.d.ts.map +1 -1
- package/dist/main/portfolio/portfolioPopup.d.ts +1 -1
- package/dist/main/portfolio/portfolioPopup.d.ts.map +1 -1
- package/dist/main/portfolio/portfolioPopup.js +1 -1
- package/dist/main/review-page.d.ts +2 -2
- package/dist/main/review-page.d.ts.map +1 -1
- package/dist/main/review-page.js +10 -50
- package/dist/misc/accordion.js +1 -1
- package/dist/misc/alert-dialog.js +1 -1
- package/dist/misc/alert.js +1 -1
- package/dist/misc/alertdialogclaude.js +1 -1
- package/dist/misc/avatar.js +1 -1
- package/dist/misc/badge.js +1 -1
- package/dist/misc/button.d.ts +9 -9
- package/dist/misc/button.js +1 -1
- package/dist/misc/card.js +1 -1
- package/dist/misc/carousel.js +1 -1
- package/dist/misc/checkbox.js +1 -1
- package/dist/misc/command.js +2 -2
- package/dist/misc/datepicker.d.ts.map +1 -1
- package/dist/misc/datepicker.js +22 -4
- package/dist/misc/dialog.js +1 -1
- package/dist/misc/dropdown-menu.js +1 -1
- package/dist/misc/faq.d.ts +2 -2
- package/dist/misc/faq.d.ts.map +1 -1
- package/dist/misc/faq.js +1 -1
- package/dist/misc/file-preview.d.ts +1 -1
- package/dist/misc/file-preview.d.ts.map +1 -1
- package/dist/misc/file-preview.js +1 -1
- package/dist/misc/filter.d.ts +1 -1
- package/dist/misc/filter.d.ts.map +1 -1
- package/dist/misc/filter.js +3 -3
- package/dist/misc/filterBar.d.ts +2 -2
- package/dist/misc/filterBar.d.ts.map +1 -1
- package/dist/misc/filterBar.js +3 -3
- package/dist/misc/form.js +1 -1
- package/dist/misc/input.js +1 -1
- package/dist/misc/label.js +1 -1
- package/dist/misc/line-carousel.d.ts +1 -1
- package/dist/misc/line-carousel.d.ts.map +1 -1
- package/dist/misc/line-carousel.js +1 -1
- package/dist/misc/location/leafletMap.d.ts +8 -0
- package/dist/misc/location/leafletMap.d.ts.map +1 -0
- package/dist/misc/location/leafletMap.js +62 -0
- package/dist/misc/location/locationPicker.d.ts +5 -0
- package/dist/misc/location/locationPicker.d.ts.map +1 -0
- package/dist/misc/location/locationPicker.js +94 -0
- package/dist/misc/newsLetter.d.ts +1 -1
- package/dist/misc/newsLetter.d.ts.map +1 -1
- package/dist/misc/newsLetter.js +2 -2
- package/dist/misc/notification.js +2 -2
- package/dist/misc/pagination.js +1 -1
- package/dist/misc/password-eye.d.ts +2 -1
- package/dist/misc/password-eye.d.ts.map +1 -1
- package/dist/misc/password-eye.js +2 -1
- package/dist/misc/popover.d.ts.map +1 -1
- package/dist/misc/popover.js +2 -2
- package/dist/misc/progress.js +1 -1
- package/dist/misc/rental-tile.d.ts +6 -0
- package/dist/misc/rental-tile.d.ts.map +1 -0
- package/dist/misc/rental-tile.js +23 -0
- package/dist/misc/scroll-area.js +1 -1
- package/dist/misc/searchBar.d.ts +1 -1
- package/dist/misc/searchBar.d.ts.map +1 -1
- package/dist/misc/searchBar.js +1 -1
- package/dist/misc/select.d.ts.map +1 -1
- package/dist/misc/select.js +4 -4
- package/dist/misc/separator.js +1 -1
- package/dist/misc/share.d.ts +1 -1
- package/dist/misc/share.d.ts.map +1 -1
- package/dist/misc/share.js +1 -1
- package/dist/misc/sheet.js +1 -1
- package/dist/misc/sidebar.js +2 -2
- package/dist/misc/skeleton.js +1 -1
- package/dist/misc/slider.js +1 -1
- package/dist/misc/stateCard.d.ts +2 -2
- package/dist/misc/stateCard.d.ts.map +1 -1
- package/dist/misc/stateCard.js +2 -2
- package/dist/misc/switch.js +1 -1
- package/dist/misc/tabs.js +1 -1
- package/dist/misc/textarea.js +1 -1
- package/dist/misc/tile.d.ts +2 -1
- package/dist/misc/tile.d.ts.map +1 -1
- package/dist/misc/tile.js +12 -8
- package/dist/misc/tooltip.js +1 -1
- package/dist/profile/socialLink.d.ts +1 -1
- package/dist/profile/socialLink.d.ts.map +1 -1
- package/dist/profile/socialLink.js +19 -49
- package/package.json +10 -3
- package/dist/chat/dialogs/UserProfileDialog.d.ts +0 -10
- package/dist/chat/dialogs/UserProfileDialog.d.ts.map +0 -1
- package/dist/chat/dialogs/UserProfileDialog.js +0 -100
- package/dist/main/portfolio/temp-page.d.ts +0 -2
- package/dist/main/portfolio/temp-page.d.ts.map +0 -1
- package/dist/main/portfolio/temp-page.js +0 -102
- package/dist/misc/image-cropper.d.ts +0 -10
- package/dist/misc/image-cropper.d.ts.map +0 -1
- package/dist/misc/image-cropper.js +0 -44
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["../../src/misc/datepicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["../../src/misc/datepicker.tsx"],"names":[],"mappings":"AAcA,KAAK,eAAe,GAAG;IACnB,KAAK,EAAE;QACH,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;QACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;KAClC,CAAC;IACF,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,OAAgC,EAAE,OAAgC,EAAE,KAAuB,EAAE,EAAE,eAAe,2CAwZjJ"}
|
package/dist/misc/datepicker.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { cn } from "@myrjfa/state
|
|
3
|
+
import { cn } from "@myrjfa/state";
|
|
4
4
|
import { format } from "date-fns";
|
|
5
5
|
import { CalendarIcon, ChevronLeft, ChevronRight } from "lucide-react";
|
|
6
6
|
import { useEffect, useState } from "react";
|
|
7
|
-
import { Button } from "./button";
|
|
8
|
-
import { FormControl, FormItem, FormLabel, } from "./form";
|
|
9
7
|
import { Popover, PopoverContent, PopoverTrigger, } from "./popover";
|
|
10
8
|
export function DatePicker({ field, minDate = new Date("1900-01-01"), maxDate = new Date("2100-01-01"), label = "Date of birth" }) {
|
|
11
9
|
const [open, setOpen] = useState(false);
|
|
@@ -185,5 +183,25 @@ export function DatePicker({ field, minDate = new Date("1900-01-01"), maxDate =
|
|
|
185
183
|
}) }));
|
|
186
184
|
}
|
|
187
185
|
};
|
|
188
|
-
|
|
186
|
+
const hasValue = field.value instanceof Date;
|
|
187
|
+
const displayDate = hasValue ? format(field.value, "d MMM") : null;
|
|
188
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn(
|
|
189
|
+
// base
|
|
190
|
+
"group relative w-full rounded-2xl p-3 flex items-center justify-between text-left outline-none cursor-pointer",
|
|
191
|
+
// border
|
|
192
|
+
"border-2 transition-all duration-200",
|
|
193
|
+
// subtle hover background
|
|
194
|
+
"hover:bg-blue-50/40",
|
|
195
|
+
// scale on active press
|
|
196
|
+
"active:scale-[0.98]",
|
|
197
|
+
// open / focus state → blue ring + border
|
|
198
|
+
open
|
|
199
|
+
? "border-blue-600 bg-blue-50/30 shadow-[0_0_0_3px_rgba(37,99,235,0.12)] scale-[1.01]"
|
|
200
|
+
: "border-gray-200 hover:border-gray-300 bg-white"), children: [_jsxs("div", { className: "flex flex-col overflow-hidden mr-2 min-w-0", children: [label && (_jsx("p", { className: cn("text-[10px] font-black uppercase tracking-wider leading-tight mb-0.5 transition-colors duration-200", open ? "text-blue-600" : "text-gray-400"), children: label })), _jsx("p", { className: cn("text-sm font-semibold leading-tight truncate transition-colors duration-200", hasValue
|
|
201
|
+
? "text-gray-900"
|
|
202
|
+
: open
|
|
203
|
+
? "text-blue-400"
|
|
204
|
+
: "text-gray-400"), children: displayDate !== null && displayDate !== void 0 ? displayDate : "Add date" })] }), _jsx(CalendarIcon, { className: cn("shrink-0 transition-all duration-200", open
|
|
205
|
+
? "w-4 h-4 text-blue-600 scale-110 rotate-[-8deg]"
|
|
206
|
+
: "w-4 h-4 text-gray-400 group-hover:text-gray-500") })] }) }), _jsx(PopoverContent, { className: "w-auto p-3", align: "start", children: _jsxs("div", { className: "w-64", children: [renderHeader(), renderCalendarContent()] }) })] }));
|
|
189
207
|
}
|
package/dist/misc/dialog.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
4
|
-
import { cn } from "@myrjfa/state
|
|
4
|
+
import { cn } from "@myrjfa/state";
|
|
5
5
|
import { XIcon } from "lucide-react";
|
|
6
6
|
function Dialog({ ...props }) {
|
|
7
7
|
return _jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
4
|
-
import { cn } from "@myrjfa/state
|
|
4
|
+
import { cn } from "@myrjfa/state";
|
|
5
5
|
import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
|
|
6
6
|
function DropdownMenu({ ...props }) {
|
|
7
7
|
return _jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
package/dist/misc/faq.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Question } from '@myrjfa/state
|
|
2
|
-
export
|
|
1
|
+
import { Question } from '@myrjfa/state';
|
|
2
|
+
export declare function Faq({ faqs }: {
|
|
3
3
|
faqs: Question[];
|
|
4
4
|
}): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
//# sourceMappingURL=faq.d.ts.map
|
package/dist/misc/faq.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/misc/faq.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/misc/faq.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,wBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,2CAkBjD"}
|
package/dist/misc/faq.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './accordion';
|
|
3
|
-
export
|
|
3
|
+
export function Faq({ faqs }) {
|
|
4
4
|
return (_jsxs("div", { children: [_jsx("h2", { className: "text-2xl font-bold text-center mb-6", children: "Frequently Asked Questions" }), _jsx(Accordion, { type: "multiple", className: "space-y-2", children: faqs.map((faq, index) => (_jsxs(AccordionItem, { value: `item-${index}`, className: "border border-gray-200 rounded-lg last:border-b", children: [_jsx(AccordionTrigger, { className: "text-left px-4 py-3 font-medium", children: faq.question }), _jsx(AccordionContent, { className: "px-4 pb-4 text-sm text-gray-600", children: faq.answer })] }, index))) })] }));
|
|
5
5
|
}
|
|
@@ -5,5 +5,5 @@ declare const DocumentPreviewButton: ({ filepath, label, icon, size, labelInMobi
|
|
|
5
5
|
size?: "icon" | "lg" | "sm" | "default";
|
|
6
6
|
labelInMobile?: boolean;
|
|
7
7
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export
|
|
8
|
+
export { DocumentPreviewButton };
|
|
9
9
|
//# sourceMappingURL=file-preview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-preview.d.ts","sourceRoot":"","sources":["../../src/misc/file-preview.tsx"],"names":[],"mappings":"AAuBA,QAAA,MAAM,qBAAqB,GAAI,iDAM5B;IACC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,4CAsEA,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"file-preview.d.ts","sourceRoot":"","sources":["../../src/misc/file-preview.tsx"],"names":[],"mappings":"AAuBA,QAAA,MAAM,qBAAqB,GAAI,iDAM5B;IACC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,4CAsEA,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -73,4 +73,4 @@ const DocumentPreviewButton = ({ filepath, label, icon, size = 'default', labelI
|
|
|
73
73
|
};
|
|
74
74
|
return (_jsx("div", { className: "flex flex-col items-center", children: _jsxs(Button, { variant: "outline", size: size, className: "w-full cursor-pointer flex md:flex", onClick: handleOpenFile, disabled: loading, children: [IconInternal, _jsx("span", { className: `${labelInMobile ? "inline" : "hidden"} md:inline`, children: labelInternal })] }) }));
|
|
75
75
|
};
|
|
76
|
-
export
|
|
76
|
+
export { DocumentPreviewButton };
|
package/dist/misc/filter.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/misc/filter.tsx"],"names":[],"mappings":"AAsBA,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,aACwC,CAAC;AAElF,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/misc/filter.tsx"],"names":[],"mappings":"AAsBA,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,aACwC,CAAC;AAElF,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAgHjC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/misc/filter.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { cn } from "@myrjfa/state
|
|
3
|
+
import { cn } from "@myrjfa/state";
|
|
4
4
|
import { Check, ChevronDown } from "lucide-react";
|
|
5
5
|
import { useEffect, useRef, useState } from "react";
|
|
6
6
|
import { Button } from "./button";
|
|
@@ -30,7 +30,7 @@ const Filter = ({ values, label, formType, selectedValue, onChange, others }) =>
|
|
|
30
30
|
}, [open]);
|
|
31
31
|
return (_jsx("div", { className: cn("filter-container", label), children: formType === "select" ? (_jsxs(Select, { value: selectedValue !== null && selectedValue !== void 0 ? selectedValue : "", onValueChange: (val) => onChange(val === "clear" ? null : val), children: [_jsx(SelectTrigger, { className: "w-full bg-transparent hover:bg-muted border-none shadow-none", children: !selectedValue || selectedValue === "clear" || selectedValue[0] == '0'
|
|
32
32
|
? `Choose ${label.toLowerCase()}...`
|
|
33
|
-
: selectedValue }), _jsxs(SelectContent, { className: "w-full z-
|
|
33
|
+
: selectedValue }), _jsxs(SelectContent, { className: "w-full z-201", children: [_jsx(SelectItem, { value: "clear", children: _jsx("em", { children: "Clear" }) }), data.map((option) => (_jsx(SelectItem, { value: option, children: option }, option)))] })] })) : (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, className: "w-full overflow-y-auto", children: _jsxs(Button, { ref: triggerRef, variant: "ghost", role: "combobox", className: "filter-box justify-between w-full", children: [selectedValue || `Select ${label.toLowerCase()}...`, _jsx(ChevronDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsxs(PopoverContent, { className: "p-0 w-full z-201", style: { width: `${popoverWidth}px` }, align: "start", children: [_jsxs(Command, { children: [_jsx(CommandInput, { placeholder: `Search ${label.toLowerCase()}...` }), _jsx(CommandEmpty, { children: "No results found." }), _jsx(CommandList, { children: data.map((option) => (_jsxs(CommandItem, { value: option, onSelect: () => {
|
|
34
34
|
onChange(option);
|
|
35
35
|
setOpen(false);
|
|
36
36
|
}, children: [_jsx(Check, { className: cn("mr-2 h-4 w-4", selectedValue === option ? "opacity-100" : "opacity-0") }), option] }, option))) })] }), others &&
|
|
@@ -41,4 +41,4 @@ const Filter = ({ values, label, formType, selectedValue, onChange, others }) =>
|
|
|
41
41
|
}
|
|
42
42
|
}, autoFocus: true }) })) : (_jsx("div", { className: "border-t px-10 py-2 cursor-pointer text-sm hover:bg-muted", onClick: () => setIsCustom(true), children: "Other" })) }))] })] })) }));
|
|
43
43
|
};
|
|
44
|
-
export
|
|
44
|
+
export { Filter };
|
package/dist/misc/filterBar.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TileProps } from "@myrjfa/state
|
|
1
|
+
import { TileProps } from "@myrjfa/state";
|
|
2
2
|
export interface FilterOptionConfig {
|
|
3
3
|
label: string;
|
|
4
4
|
type: 'autoComplete' | 'select' | 'range';
|
|
@@ -27,5 +27,5 @@ export interface FilterBarProps {
|
|
|
27
27
|
tiles: TileProps[];
|
|
28
28
|
filterConfig?: FilterOptionConfig[];
|
|
29
29
|
}
|
|
30
|
-
export
|
|
30
|
+
export declare function FilterBar({ tiles, filterConfig }: FilterBarProps): import("react/jsx-runtime").JSX.Element;
|
|
31
31
|
//# sourceMappingURL=filterBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterBar.d.ts","sourceRoot":"","sources":["../../src/misc/filterBar.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"filterBar.d.ts","sourceRoot":"","sources":["../../src/misc/filterBar.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1C,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1C,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAE5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAErC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzE,eAAe,CAAC,EAAE,MAAM,SAAS,CAAC;IAElC,UAAU,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IAEhC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC;AA+eD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,2CAMhE"}
|
package/dist/misc/filterBar.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { retrieveCity, retrieveState } from "@myrjfa/state
|
|
3
|
+
import { retrieveCity, retrieveState } from "@myrjfa/state";
|
|
4
4
|
import { Search, SearchIcon, SlidersHorizontal, X } from "lucide-react";
|
|
5
5
|
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
6
6
|
import { Suspense, useEffect, useState } from "react";
|
|
7
7
|
import { Button } from "./button";
|
|
8
|
-
import Filter from "./filter";
|
|
8
|
+
import { Filter } from "./filter";
|
|
9
9
|
import { Sheet, SheetContent, SheetTitle, SheetTrigger } from "./sheet";
|
|
10
10
|
import { Slider } from "./slider";
|
|
11
11
|
// Default filter options (backward compatible)
|
|
@@ -324,6 +324,6 @@ function FilterBarComponent({ tiles, filterConfig = defaultFilterOptions }) {
|
|
|
324
324
|
changeMultiParams(newState);
|
|
325
325
|
}, className: "ml-1 hover:bg-blue-200 rounded-full p-1 transition-colors", children: _jsx(X, { size: 12 }) })] }, `${filter.label}-${filter.value}-${index}`))), _jsxs("button", { onClick: clearAllFilters, className: "inline-flex items-center gap-1 bg-gray-100 text-gray-600 px-3 py-1 rounded-full text-sm border border-gray-200 hover:bg-gray-200 transition-colors", children: ["Clear All", _jsx(X, { size: 12 })] })] }) }))] }));
|
|
326
326
|
}
|
|
327
|
-
export
|
|
327
|
+
export function FilterBar({ tiles, filterConfig }) {
|
|
328
328
|
return (_jsx(Suspense, { fallback: _jsx("div", { className: "w-full h-screen flex items-center justify-center", children: "Loading..." }), children: _jsx(FilterBarComponent, { tiles: tiles, filterConfig: filterConfig }) }));
|
|
329
329
|
}
|
package/dist/misc/form.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Slot } from "@radix-ui/react-slot";
|
|
4
|
-
import { cn } from "@myrjfa/state
|
|
4
|
+
import { cn } from "@myrjfa/state";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { Controller, FormProvider, useFormContext, useFormState, } from "react-hook-form";
|
|
7
7
|
import { Label } from "./label";
|
package/dist/misc/input.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "@myrjfa/state
|
|
2
|
+
import { cn } from "@myrjfa/state";
|
|
3
3
|
function Input({ className, type, ...props }) {
|
|
4
4
|
return (_jsx("input", { type: type, "data-slot": "input", className: cn("border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", className), ...props }));
|
|
5
5
|
}
|
package/dist/misc/label.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
4
|
-
import { cn } from "@myrjfa/state
|
|
4
|
+
import { cn } from "@myrjfa/state";
|
|
5
5
|
function Label({ className, ...props }) {
|
|
6
6
|
return (_jsx(LabelPrimitive.Root, { "data-slot": "label", className: cn("flex items-center gap-2 leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className), ...props }));
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LucideProps } from "lucide-react";
|
|
2
2
|
import { ForwardRefExoticComponent, RefAttributes } from "react";
|
|
3
|
-
export
|
|
3
|
+
export declare function LineCarousel({ skillsData }: {
|
|
4
4
|
skillsData: {
|
|
5
5
|
icon: ForwardRefExoticComponent<Omit<LucideProps, "ref"> & RefAttributes<SVGSVGElement>>;
|
|
6
6
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-carousel.d.ts","sourceRoot":"","sources":["../../src/misc/line-carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEjE,
|
|
1
|
+
{"version":3,"file":"line-carousel.d.ts","sourceRoot":"","sources":["../../src/misc/line-carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEjE,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,EAAE;IACzC,UAAU,EAAE;QACR,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;QACzF,KAAK,EAAE,MAAM,CAAC;KACjB,EAAE,CAAA;CACN,2CA6BA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
export
|
|
2
|
+
export function LineCarousel({ skillsData }) {
|
|
3
3
|
const loopedSkills = [...skillsData, ...skillsData, ...skillsData];
|
|
4
4
|
return (_jsxs("section", { className: "relative w-full pt-10 pb-5 bg-background text-white", children: [_jsx("h2", { className: "text-2xl font-bold text-left mx-10 md:mx-15 lg:mx-25 tracking-tight text-foreground", children: "Popular Skills Offered" }), _jsx("p", { className: "text-muted-foreground mx-10 md:mx-15 lg:mx-25 mb-10", children: "Discover In-Demand Creative Skills for the Modern World." }), _jsxs("div", { className: "relative w-full overflow-hidden", children: [_jsx("div", { className: "absolute inset-y-0 left-0 w-1/4 bg-gradient-to-r from-background to-transparent z-10" }), _jsx("div", { className: "absolute inset-y-0 right-0 w-1/4 bg-gradient-to-l from-background to-transparent z-10" }), _jsx("div", { className: "flex animate-scroll items-center space-x-10", children: loopedSkills.map((item, i) => (_jsxs("div", { className: "flex items-center space-x-3 px-5 text-lg", children: [_jsx(item.icon, { className: "w-6 h-6 text-foreground" }), _jsx("span", { className: "text-muted-foreground font-semibold", children: item.title })] }, i))) })] })] }));
|
|
5
5
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import 'leaflet/dist/leaflet.css';
|
|
2
|
+
interface LeafletMapProps {
|
|
3
|
+
position: [number, number];
|
|
4
|
+
onMarkerDrag: (lat: number, lng: number) => void;
|
|
5
|
+
}
|
|
6
|
+
export default function LeafletMap({ position, onMarkerDrag }: LeafletMapProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=leafletMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leafletMap.d.ts","sourceRoot":"","sources":["../../../src/misc/location/leafletMap.tsx"],"names":[],"mappings":"AAIA,OAAO,0BAA0B,CAAC;AAoDlC,UAAU,eAAe;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,eAAe,2CAmC7E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
// Dynamically imported (no SSR) from propertyForm.tsx.
|
|
4
|
+
// Must import leaflet CSS here — this is the only safe place when using next/dynamic.
|
|
5
|
+
import 'leaflet/dist/leaflet.css';
|
|
6
|
+
import { useEffect, useRef } from 'react';
|
|
7
|
+
import { MapContainer, TileLayer, Marker, useMap, useMapEvents } from 'react-leaflet';
|
|
8
|
+
import L from 'leaflet';
|
|
9
|
+
// Fix broken Leaflet default icons in webpack / Next.js
|
|
10
|
+
const defaultIcon = L.icon({
|
|
11
|
+
iconUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png',
|
|
12
|
+
iconRetinaUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon-2x.png',
|
|
13
|
+
shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png',
|
|
14
|
+
iconSize: [25, 41],
|
|
15
|
+
iconAnchor: [12, 41],
|
|
16
|
+
popupAnchor: [1, -34],
|
|
17
|
+
shadowSize: [41, 41],
|
|
18
|
+
});
|
|
19
|
+
L.Marker.prototype.options.icon = defaultIcon;
|
|
20
|
+
// Sync map view when position prop changes (e.g. after address search)
|
|
21
|
+
function MapSyncer({ position }) {
|
|
22
|
+
const map = useMap();
|
|
23
|
+
const prev = useRef(position);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (prev.current[0] !== position[0] || prev.current[1] !== position[1]) {
|
|
26
|
+
map.flyTo(position, Math.max(map.getZoom(), 13), { animate: true, duration: 0.8 });
|
|
27
|
+
prev.current = position;
|
|
28
|
+
}
|
|
29
|
+
}, [position, map]);
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// Fixes the "half-visible" map bug by forcing a resize after mount
|
|
33
|
+
function ResizeMap() {
|
|
34
|
+
const map = useMap();
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
map.invalidateSize();
|
|
38
|
+
}, 300);
|
|
39
|
+
}, [map]);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
// Allows clicking anywhere on map to move the marker
|
|
43
|
+
function ClickHandler({ onDrag }) {
|
|
44
|
+
useMapEvents({
|
|
45
|
+
click(e) {
|
|
46
|
+
onDrag(e.latlng.lat, e.latlng.lng);
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
export default function LeafletMap({ position, onMarkerDrag }) {
|
|
52
|
+
const markerRef = useRef(null);
|
|
53
|
+
return (_jsxs(MapContainer, { center: position, zoom: 13, style: { width: '100%', height: '100%', minHeight: '300px' }, scrollWheelZoom: true, children: [_jsx(TileLayer, { attribution: '\u00A9 <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>', url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" }), _jsx(ResizeMap, {}), _jsx(MapSyncer, { position: position }), _jsx(ClickHandler, { onDrag: onMarkerDrag }), _jsx(Marker, { position: position, draggable: true, ref: markerRef, icon: defaultIcon, eventHandlers: {
|
|
54
|
+
dragend() {
|
|
55
|
+
const m = markerRef.current;
|
|
56
|
+
if (m) {
|
|
57
|
+
const p = m.getLatLng();
|
|
58
|
+
onMarkerDrag(p.lat, p.lng);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
} })] }));
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locationPicker.d.ts","sourceRoot":"","sources":["../../../src/misc/location/locationPicker.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAsF1C,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE,2CA2IzF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ─── Nominatim address search ─────────────────────────────────────────────────
|
|
3
|
+
import { Loader2, MapPin } from 'lucide-react';
|
|
4
|
+
import { useRef, useState } from 'react';
|
|
5
|
+
import { Input } from '../input';
|
|
6
|
+
import dynamic from 'next/dynamic';
|
|
7
|
+
import { FormControl, FormField, FormItem, FormLabel, FormMessage } from '../form';
|
|
8
|
+
import { Filter } from '../filter';
|
|
9
|
+
import { getCountryNames, getStates } from '@myrjfa/state';
|
|
10
|
+
function NominatimSearch({ onSelect }) {
|
|
11
|
+
const [query, setQuery] = useState('');
|
|
12
|
+
const [results, setResults] = useState([]);
|
|
13
|
+
const [loading, setLoading] = useState(false);
|
|
14
|
+
const timer = useRef(null);
|
|
15
|
+
const search = (q) => {
|
|
16
|
+
setQuery(q);
|
|
17
|
+
if (timer.current)
|
|
18
|
+
clearTimeout(timer.current);
|
|
19
|
+
if (!q.trim()) {
|
|
20
|
+
setResults([]);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
timer.current = setTimeout(async () => {
|
|
24
|
+
setLoading(true);
|
|
25
|
+
try {
|
|
26
|
+
const res = await fetch(`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(q)}&format=json&addressdetails=1&limit=6`, { headers: { 'Accept-Language': 'en' } });
|
|
27
|
+
const data = (await res.json());
|
|
28
|
+
setResults(data);
|
|
29
|
+
}
|
|
30
|
+
catch (_a) {
|
|
31
|
+
setResults([]);
|
|
32
|
+
}
|
|
33
|
+
setLoading(false);
|
|
34
|
+
}, 400);
|
|
35
|
+
};
|
|
36
|
+
const pick = (r) => {
|
|
37
|
+
setQuery(r.display_name);
|
|
38
|
+
setResults([]);
|
|
39
|
+
onSelect(r);
|
|
40
|
+
};
|
|
41
|
+
return (_jsxs("div", { className: "relative", children: [_jsxs("div", { className: "relative", children: [_jsx(MapPin, { className: "absolute left-3 top-2.5 h-4 w-4 text-muted-foreground pointer-events-none" }), loading && _jsx(Loader2, { className: "absolute right-3 top-2.5 h-4 w-4 text-muted-foreground animate-spin" }), _jsx(Input, { id: "address-search", value: query, onChange: (e) => search(e.target.value), placeholder: "Search for a place or address\u2026", className: "pl-9 pr-9", autoComplete: "off" })] }), results.length > 0 && (_jsx("ul", { className: "absolute z-[9999] w-full mt-1 border border-input bg-background rounded-md shadow-lg max-h-60 overflow-auto text-sm", children: results.map((r) => (_jsxs("li", { className: "px-3 py-2 cursor-pointer hover:bg-muted truncate flex items-center gap-2", onClick: () => pick(r), children: [_jsx(MapPin, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }), _jsx("span", { children: r.display_name })] }, r.place_id))) }))] }));
|
|
42
|
+
}
|
|
43
|
+
// Dynamic Leaflet map (SSR disabled — window not available on server)
|
|
44
|
+
const LeafletMap = dynamic(() => import('./leafletMap'), {
|
|
45
|
+
ssr: false,
|
|
46
|
+
loading: () => (_jsx("div", { className: "w-full h-64 flex items-center justify-center bg-muted rounded-xl border text-sm text-muted-foreground", children: "Loading map\u2026" })),
|
|
47
|
+
});
|
|
48
|
+
// ─── Location picker ─────────────────────────────────────────────────────────
|
|
49
|
+
export default function LocationPicker({ form }) {
|
|
50
|
+
var _a, _b, _c, _d;
|
|
51
|
+
const [mapPos, setMapPos] = useState([
|
|
52
|
+
(_a = form.getValues('lat')) !== null && _a !== void 0 ? _a : 20.5937,
|
|
53
|
+
(_b = form.getValues('lng')) !== null && _b !== void 0 ? _b : 78.9629,
|
|
54
|
+
]);
|
|
55
|
+
const fillFromNominatim = (result, lat, lng) => {
|
|
56
|
+
const a = result.address;
|
|
57
|
+
const city = a.city || a.town || a.village || a.county || '';
|
|
58
|
+
const state = a.state || '';
|
|
59
|
+
const country = a.country || '';
|
|
60
|
+
const pin = a.postcode || '';
|
|
61
|
+
form.setValue('lat', lat, { shouldDirty: true });
|
|
62
|
+
form.setValue('lng', lng, { shouldDirty: true });
|
|
63
|
+
if (city)
|
|
64
|
+
form.setValue('city', city, { shouldDirty: true });
|
|
65
|
+
if (state)
|
|
66
|
+
form.setValue('state', state, { shouldDirty: true });
|
|
67
|
+
if (country)
|
|
68
|
+
form.setValue('country', country, { shouldDirty: true });
|
|
69
|
+
if (pin)
|
|
70
|
+
form.setValue('pinCode', pin, { shouldDirty: true });
|
|
71
|
+
form.setValue('address', result.display_name, { shouldDirty: true });
|
|
72
|
+
};
|
|
73
|
+
const handleSearchSelect = (result) => {
|
|
74
|
+
const lat = parseFloat(result.lat);
|
|
75
|
+
const lng = parseFloat(result.lon);
|
|
76
|
+
setMapPos([lat, lng]);
|
|
77
|
+
fillFromNominatim(result, lat, lng);
|
|
78
|
+
};
|
|
79
|
+
const handleMapPin = async (lat, lng) => {
|
|
80
|
+
setMapPos([lat, lng]);
|
|
81
|
+
form.setValue('lat', lat, { shouldDirty: true });
|
|
82
|
+
form.setValue('lng', lng, { shouldDirty: true });
|
|
83
|
+
try {
|
|
84
|
+
const res = await fetch(`https://nominatim.openstreetmap.org/reverse?lat=${lat}&lon=${lng}&format=json&addressdetails=1`, { headers: { 'Accept-Language': 'en' } });
|
|
85
|
+
const data = (await res.json());
|
|
86
|
+
fillFromNominatim(data, lat, lng);
|
|
87
|
+
}
|
|
88
|
+
catch ( /* silent */_a) { /* silent */ }
|
|
89
|
+
};
|
|
90
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx(FormLabel, { children: "Search Address" }), _jsx("p", { className: "text-xs text-muted-foreground mb-1", children: "Powered by OpenStreetMap \u2014 free, no API key required" }), _jsx(NominatimSearch, { onSelect: handleSearchSelect })] }), _jsx("div", { style: { height: '300px', width: '100%', borderRadius: '0.75rem', overflow: 'hidden', border: '1px solid var(--border)' }, children: _jsx(LeafletMap, { position: mapPos, onMarkerDrag: handleMapPin }) }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Click anywhere on the map or drag the pin to set the exact location. Fields below auto-fill." }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsx(FormField, { control: form.control, name: "country", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Country *" }), _jsx(FormControl, { children: _jsx("div", { className: "border border-input rounded-md text-sm shadow-sm focus-within:ring-2 focus-within:ring-muted", children: _jsx(Filter, { label: "Country", formType: "autoComplete", selectedValue: field.value, values: getCountryNames(), onChange: (value) => { field.onChange(value); form.setValue('state', ''); } }) }) }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "state", render: ({ field }) => {
|
|
91
|
+
const stateOptions = form.watch('country') ? getStates(form.watch('country')) : [];
|
|
92
|
+
return (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "State *" }), _jsx(FormControl, { children: _jsx("div", { className: "border border-input rounded-md text-sm shadow-sm focus-within:ring-2 focus-within:ring-muted", children: _jsx(Filter, { label: "State", formType: "autoComplete", selectedValue: field.value, values: stateOptions, onChange: field.onChange }) }) }), _jsx(FormMessage, {})] }));
|
|
93
|
+
} }), _jsx(FormField, { control: form.control, name: "city", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "City *" }), _jsx(FormControl, { children: _jsx(Input, { id: "city", placeholder: "e.g. Rishikesh", ...field }) }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "pinCode", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Pin / Postal Code" }), _jsx(FormControl, { children: _jsx(Input, { id: "pinCode", placeholder: "e.g. 249201", ...field }) }), _jsx(FormMessage, {})] })) })] }), _jsx(FormField, { control: form.control, name: "address", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Full Address" }), _jsx(FormControl, { children: _jsx(Input, { id: "address", placeholder: "Street / Landmark\u2026", ...field }) }), _jsx(FormMessage, {})] })) }), (form.watch('lat') || form.watch('lng')) && (_jsxs("p", { className: "text-xs text-muted-foreground", children: ["\uD83D\uDCCD ", (_c = form.watch('lat')) === null || _c === void 0 ? void 0 : _c.toFixed(5), ", ", (_d = form.watch('lng')) === null || _d === void 0 ? void 0 : _d.toFixed(5)] }))] }));
|
|
94
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"newsLetter.d.ts","sourceRoot":"","sources":["../../src/misc/newsLetter.tsx"],"names":[],"mappings":"AAiBA,QAAA,MAAM,mBAAmB,+CAgDxB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"newsLetter.d.ts","sourceRoot":"","sources":["../../src/misc/newsLetter.tsx"],"names":[],"mappings":"AAiBA,QAAA,MAAM,mBAAmB,+CAgDxB,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/misc/newsLetter.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
|
-
import { subscribeToNewsLetter } from "@myrjfa/state
|
|
4
|
+
import { subscribeToNewsLetter } from "@myrjfa/state";
|
|
5
5
|
import { usePathname } from "next/navigation";
|
|
6
6
|
import { useEffect } from "react";
|
|
7
7
|
import { useForm } from "react-hook-form";
|
|
@@ -38,4 +38,4 @@ const NewsletterSubscribe = () => {
|
|
|
38
38
|
};
|
|
39
39
|
return (_jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), noValidate: true, className: "mt-4 flex flex-col sm:flex-row gap-3", children: [_jsx(FormField, { control: form.control, name: "email", render: ({ field }) => (_jsxs(FormItem, { className: "flex-1", children: [_jsx(FormControl, { children: _jsx(Input, { placeholder: "Your email address", type: "email", disabled: isSubmitting, ...field }) }), _jsx(FormMessage, {})] })) }), _jsx(Button, { type: "submit", disabled: isSubmitting, className: "w-full sm:w-auto", children: isSubmitting ? "Subscribing..." : "Subscribe" })] }) }));
|
|
40
40
|
};
|
|
41
|
-
export
|
|
41
|
+
export { NewsletterSubscribe };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Popover, PopoverContent, PopoverTrigger } from "@radix-ui/react-popover";
|
|
4
|
-
import { getNotifications, toggleAllNotification, toggleNotification } from "@myrjfa/state
|
|
5
|
-
import { formatTimestamp } from "@myrjfa/state
|
|
4
|
+
import { getNotifications, toggleAllNotification, toggleNotification } from "@myrjfa/state";
|
|
5
|
+
import { formatTimestamp } from "@myrjfa/state";
|
|
6
6
|
import { Bell, MessageCircle, CheckCircle2, Receipt, Users, AlertCircle, Megaphone, Briefcase, ShieldCheck, ShieldX, Package, ClipboardList } from "lucide-react";
|
|
7
7
|
import { useRouter } from "next/navigation";
|
|
8
8
|
import { useEffect, useState } from "react";
|
package/dist/misc/pagination.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "@myrjfa/state
|
|
2
|
+
import { cn } from "@myrjfa/state";
|
|
3
3
|
import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon, } from "lucide-react";
|
|
4
4
|
import Link from "next/link";
|
|
5
5
|
import { buttonVariants } from "./button";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export
|
|
2
|
+
export declare function PasswordEye({ showPassword, setShowPassword }: {
|
|
3
3
|
showPassword: boolean;
|
|
4
4
|
setShowPassword: React.Dispatch<React.SetStateAction<boolean>>;
|
|
5
5
|
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export default PasswordEye;
|
|
6
7
|
//# sourceMappingURL=password-eye.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-eye.d.ts","sourceRoot":"","sources":["../../src/misc/password-eye.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,
|
|
1
|
+
{"version":3,"file":"password-eye.d.ts","sourceRoot":"","sources":["../../src/misc/password-eye.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,wBAAgB,WAAW,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,2CAavJ;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { EyeIcon, EyeOffIcon } from 'lucide-react';
|
|
3
3
|
import { Button } from './button';
|
|
4
|
-
export
|
|
4
|
+
export function PasswordEye({ showPassword, setShowPassword }) {
|
|
5
5
|
return (_jsx(Button, { type: 'button', variant: "ghost", onMouseDown: () => setShowPassword(prev => !prev), onTouchStart: () => setShowPassword(prev => !prev), onTouchEnd: () => setShowPassword(prev => !prev), className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500", children: showPassword ? _jsx(EyeOffIcon, {}) : _jsx(EyeIcon, {}) }));
|
|
6
6
|
}
|
|
7
|
+
export default PasswordEye;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/misc/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAA;AAI3D,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/misc/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAA;AAI3D,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAevD;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC,2CAEtD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA"}
|
package/dist/misc/popover.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
4
|
-
import { cn } from "@myrjfa/state
|
|
4
|
+
import { cn } from "@myrjfa/state";
|
|
5
5
|
function Popover({ ...props }) {
|
|
6
6
|
return _jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
7
7
|
}
|
|
@@ -9,7 +9,7 @@ function PopoverTrigger({ ...props }) {
|
|
|
9
9
|
return _jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
10
10
|
}
|
|
11
11
|
function PopoverContent({ className, align = "center", sideOffset = 4, ...props }) {
|
|
12
|
-
return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, 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 z-
|
|
12
|
+
return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, 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 z-50 w-full min-w-[12rem] rounded-md border p-4 shadow-md outline-hidden", className), ...props }) }));
|
|
13
13
|
}
|
|
14
14
|
function PopoverAnchor({ ...props }) {
|
|
15
15
|
return _jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
|
package/dist/misc/progress.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as ProgressPrimitive from "@radix-ui/react-progress";
|
|
4
|
-
import { cn } from "@myrjfa/state
|
|
4
|
+
import { cn } from "@myrjfa/state";
|
|
5
5
|
function Progress({ className, value, ...props }) {
|
|
6
6
|
return (_jsx(ProgressPrimitive.Root, { "data-slot": "progress", className: cn("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full", className), ...props, children: _jsx(ProgressPrimitive.Indicator, { "data-slot": "progress-indicator", className: "bg-primary h-full w-full flex-1 transition-all", style: { transform: `translateX(-${100 - (value || 0)}%)` } }) }));
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rental-tile.d.ts","sourceRoot":"","sources":["../../src/misc/rental-tile.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,2CAsItF"}
|