pixelize-design-library 2.2.89 → 2.2.91

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.
@@ -27,7 +27,7 @@ var MobileMenu = function (_a) {
27
27
  react_2.default.createElement(react_1.HStack, { w: "full", justify: "space-between", align: "center" },
28
28
  react_2.default.createElement(react_1.VStack, { spacing: 0, align: "start" },
29
29
  item.badge && (react_2.default.createElement(react_1.Badge, { colorScheme: (_b = (_a = item === null || item === void 0 ? void 0 : item.badge) === null || _a === void 0 ? void 0 : _a.colorScheme) !== null && _b !== void 0 ? _b : "blue", fontSize: "0.6em" }, item.badge.label)),
30
- react_2.default.createElement(react_1.Text, { fontWeight: "medium" }, item.label)))),
30
+ react_2.default.createElement(react_1.Text, { fontWeight: "bold" }, item.label)))),
31
31
  react_2.default.createElement(react_1.Collapse, { in: openMenuLabel === item.label, animateOpacity: true },
32
32
  react_2.default.createElement(react_1.Stack, { pl: 4, mt: 1, spacing: 1 }, item.children.map(function (subItem) {
33
33
  var _a, _b, _c;
@@ -38,7 +38,9 @@ var MobileMenu = function (_a) {
38
38
  }, variant: "ghost", w: "full", justifyContent: "flex-start", color: color, bg: isActive(subItem.href) ? activeBg : "transparent", _hover: { bg: hoverBg } },
39
39
  react_2.default.createElement(react_1.VStack, { spacing: 0, align: "start" },
40
40
  subItem.badge && (react_2.default.createElement(react_1.Badge, { colorScheme: (_b = (_a = subItem === null || subItem === void 0 ? void 0 : subItem.badge) === null || _a === void 0 ? void 0 : _a.colorScheme) !== null && _b !== void 0 ? _b : "blue", fontSize: "0.6em" }, (_c = subItem.badge) === null || _c === void 0 ? void 0 : _c.label)),
41
- react_2.default.createElement(react_1.Text, null, subItem.label))));
41
+ react_2.default.createElement(react_1.HStack, { spacing: 2, align: "center" },
42
+ react_2.default.createElement(react_1.Box, { boxSize: "0.4rem", borderRadius: "full", bg: "currentColor" }),
43
+ react_2.default.createElement(react_1.Text, { fontSize: "xs" }, subItem.label)))));
42
44
  }))))) : (react_2.default.createElement(react_1.Button, { key: item.label, onClick: function () { var _a; (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item); onClose === null || onClose === void 0 ? void 0 : onClose(); }, variant: "ghost", w: "full", justifyContent: "flex-start", color: color, bg: isActive(item.href) ? activeBg : "transparent", _hover: { bg: hoverBg } },
43
45
  react_2.default.createElement(react_1.VStack, { spacing: 0, align: "start" },
44
46
  item.badge && (react_2.default.createElement(react_1.Badge, { colorScheme: (_d = (_c = item === null || item === void 0 ? void 0 : item.badge) === null || _c === void 0 ? void 0 : _c.colorScheme) !== null && _d !== void 0 ? _d : "blue", fontSize: "0.6em" }, (_e = item.badge) === null || _e === void 0 ? void 0 : _e.label)),
@@ -70,7 +70,7 @@ var ProductCard = function (_a) {
70
70
  var safeSize = allowedSizes.includes(size) ? size : "md";
71
71
  return (react_1.default.createElement(react_2.Box, { borderWidth: "0.063rem", borderRadius: "lg", overflow: "hidden", w: "full", maxW: cardWidth, position: "relative", bg: theme.colors.white, boxShadow: "lg" },
72
72
  react_1.default.createElement(react_2.Box, { onMouseEnter: function () { return setHover(true); }, onMouseLeave: function () { return setHover(false); }, h: imgHeight, w: "full", overflow: "hidden", onClick: onClick, cursor: "pointer" },
73
- react_1.default.createElement(react_2.Image, { src: hover && ((_b = productImage === null || productImage === void 0 ? void 0 : productImage[1]) === null || _b === void 0 ? void 0 : _b.imageUrl) ? productImage[1].imageUrl : (_c = productImage === null || productImage === void 0 ? void 0 : productImage[0]) === null || _c === void 0 ? void 0 : _c.imageUrl, alt: label, w: "full", h: "full" }),
73
+ react_1.default.createElement(react_2.Image, { src: hover && ((_b = productImage === null || productImage === void 0 ? void 0 : productImage[1]) === null || _b === void 0 ? void 0 : _b.imageUrl) ? productImage[1].imageUrl : (_c = productImage === null || productImage === void 0 ? void 0 : productImage[0]) === null || _c === void 0 ? void 0 : _c.imageUrl, alt: label, w: "full", h: "full", transform: hover ? "scale(1.06)" : "scale(1)", transition: "transform 0.7s cubic-bezier(0.16, 1, 0.3, 1)" }),
74
74
  batch && (react_1.default.createElement(react_2.Badge, { colorScheme: batch.color || "green", position: "absolute", top: 2, right: 2, fontSize: {
75
75
  xs: "xs",
76
76
  sm: "sm",
@@ -91,8 +91,10 @@ var ProductCard = function (_a) {
91
91
  react_1.default.createElement(react_2.Box, { onClick: onClick, cursor: "pointer" },
92
92
  react_1.default.createElement(ProductLabel_1.default, { label: label, size: size })),
93
93
  tags && react_1.default.createElement(ProductTags_1.default, { tags: tags, size: size }),
94
- options && (react_1.default.createElement(ProductPrice_1.default, { options: options, size: size, onSelect: handleOptionSelect, rightSlot: rating && reviews ? react_1.default.createElement(ProductReview_1.default, { rating: rating, reviewCount: reviews }) : undefined })),
95
- typeof (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) === "number" && ((_d = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _d !== void 0 ? _d : 0) <= 0 && (react_1.default.createElement(react_2.Badge, { colorScheme: "red", fontSize: "xs", px: 2, py: 1, variant: "subtle", rounded: "md", fontWeight: "semibold", textTransform: "uppercase" }, "OUT OF STOCK")),
94
+ options && (react_1.default.createElement(ProductPrice_1.default, { options: options, size: size, onSelect: handleOptionSelect, rightSlot: rating || reviews ? react_1.default.createElement(ProductReview_1.default, { rating: rating, reviewCount: reviews }) : undefined })),
95
+ typeof (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) === "number" && ((_d = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _d !== void 0 ? _d : 0) <= 0 && (react_1.default.createElement(Button_1.default, { colorScheme: "gray", size: safeSize, width: "100%",
96
+ // onClick={button?.onClick}
97
+ isDisabled: true }, "Out of Stock")),
96
98
  addToCart && (((_e = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _e !== void 0 ? _e : 1) > 0) && isQtyEditable && (react_1.default.createElement(react_2.HStack, { w: "full", justify: "space-between", mb: 2 },
97
99
  react_1.default.createElement(react_2.HStack, null,
98
100
  react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.Minus, { size: 16 }), "aria-label": "Decrease quantity", size: "xs", onClick: handleDecrement, isDisabled: qty <= 1, isRound: true, variant: "outline", colorScheme: "red" }),
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  type ProductReviewProps = {
3
- rating: string | number;
4
- reviewCount: string | number;
3
+ rating?: string | number;
4
+ reviewCount?: string | number;
5
+ mb?: number;
5
6
  };
6
- declare const ProductReview: ({ rating, reviewCount }: ProductReviewProps) => React.JSX.Element;
7
+ declare const ProductReview: ({ rating, reviewCount, mb }: ProductReviewProps) => React.JSX.Element;
7
8
  export default ProductReview;
@@ -7,8 +7,8 @@ var react_1 = __importDefault(require("react"));
7
7
  var react_2 = require("@chakra-ui/react");
8
8
  var lucide_react_1 = require("lucide-react");
9
9
  var ProductReview = function (_a) {
10
- var rating = _a.rating, reviewCount = _a.reviewCount;
11
- return (react_1.default.createElement(react_2.Flex, { align: "center", gap: 2 },
10
+ var rating = _a.rating, reviewCount = _a.reviewCount, _b = _a.mb, mb = _b === void 0 ? 0 : _b;
11
+ return (react_1.default.createElement(react_2.Flex, { align: "center", gap: 2, mb: mb },
12
12
  react_1.default.createElement(react_2.Flex, { align: "center", gap: "1", bg: "teal.900", color: "white", px: 2, borderRadius: "md", fontSize: "sm", fontWeight: "bold" },
13
13
  react_1.default.createElement(react_2.Icon, { as: lucide_react_1.Star, boxSize: 3.5 }),
14
14
  react_1.default.createElement(react_2.Text, null, rating)),
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { ProductDetailsProps } from "./ProductDetailsProps";
3
- declare const ProductDetails: ({ id, price, label, shortdesc, tags, images, batch, category, onAddToCart, onNotifyMe, onOptionChange, addToCart, goToCart, OnGoToCart, notifyMe, isQtyEditable, }: ProductDetailsProps) => React.JSX.Element;
3
+ declare const ProductDetails: ({ id, price, label, shortdesc, tags, images, batch, category, onAddToCart, onNotifyMe, onOptionChange, addToCart, goToCart, OnGoToCart, rating, reviews, notifyMe, isQtyEditable, }: ProductDetailsProps) => React.JSX.Element;
4
4
  export default ProductDetails;
@@ -12,9 +12,10 @@ var ProductDtlPrice_1 = __importDefault(require("./ProductDtlPrice"));
12
12
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
13
13
  var Button_1 = __importDefault(require("../Button/Button"));
14
14
  var lucide_react_1 = require("lucide-react");
15
+ var ProductReview_1 = __importDefault(require("../ProductCard/ProductReview"));
15
16
  var ProductDetails = function (_a) {
16
17
  var _b, _c, _d, _e, _f;
17
- var id = _a.id, price = _a.price, label = _a.label, shortdesc = _a.shortdesc, tags = _a.tags, images = _a.images, batch = _a.batch, category = _a.category, onAddToCart = _a.onAddToCart, onNotifyMe = _a.onNotifyMe, onOptionChange = _a.onOptionChange, addToCart = _a.addToCart, goToCart = _a.goToCart, OnGoToCart = _a.OnGoToCart, notifyMe = _a.notifyMe, _g = _a.isQtyEditable, isQtyEditable = _g === void 0 ? false : _g;
18
+ var id = _a.id, price = _a.price, label = _a.label, shortdesc = _a.shortdesc, tags = _a.tags, images = _a.images, batch = _a.batch, category = _a.category, onAddToCart = _a.onAddToCart, onNotifyMe = _a.onNotifyMe, onOptionChange = _a.onOptionChange, addToCart = _a.addToCart, goToCart = _a.goToCart, OnGoToCart = _a.OnGoToCart, rating = _a.rating, reviews = _a.reviews, notifyMe = _a.notifyMe, _g = _a.isQtyEditable, isQtyEditable = _g === void 0 ? false : _g;
18
19
  var theme = (0, useCustomTheme_1.useCustomTheme)();
19
20
  var isMobile = (0, react_2.useBreakpointValue)({ base: true, md: false });
20
21
  var _h = react_1.default.useState(price === null || price === void 0 ? void 0 : price[0]), selectedOption = _h[0], setSelectedOption = _h[1];
@@ -40,13 +41,17 @@ var ProductDetails = function (_a) {
40
41
  react_1.default.createElement(react_2.Box, { flex: "1" },
41
42
  label && react_1.default.createElement(ProductLabel_1.default, { label: label, size: "sm" }),
42
43
  react_1.default.createElement(react_2.Text, { fontSize: "md", color: theme.colors.gray[700], my: 3 }, shortdesc),
44
+ rating || reviews && react_1.default.createElement(ProductReview_1.default, { rating: rating, reviewCount: reviews, mb: 3 }),
43
45
  tags && react_1.default.createElement(ProductTags_1.default, { tags: tags, size: "sm" }),
44
46
  price && (react_1.default.createElement(ProductDtlPrice_1.default, { price: price, onSelect: function (option) {
45
47
  setSelectedOption(option);
46
48
  onOptionChange === null || onOptionChange === void 0 ? void 0 : onOptionChange(option);
47
49
  } })),
48
50
  typeof (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) === "number" && ((_b = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _b !== void 0 ? _b : 0) <= 0 && (react_1.default.createElement(react_2.Box, { sx: { ml: "1.1rem", mt: "0.5rem", mb: "0.5rem" } },
49
- react_1.default.createElement(react_2.Badge, { colorScheme: "red", fontSize: "xs", px: 2, py: 1, variant: "subtle", rounded: "md", fontWeight: "semibold", textTransform: "uppercase" }, "OUT OF STOCK"))),
51
+ react_1.default.createElement(Button_1.default, { colorScheme: "gray", size: "sm",
52
+ // width="50%"
53
+ // onClick={button?.onClick}
54
+ isDisabled: true }, "Out of Stock"))),
50
55
  goToCart && (react_1.default.createElement(Button_1.default, { size: "sm", colorScheme: "red", leftIcon: react_1.default.createElement(lucide_react_1.ShoppingCartIcon, null), sx: { ml: "1.1rem" }, onClick: OnGoToCart }, "Go to cart")),
51
56
  addToCart && (((_c = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.stocks) !== null && _c !== void 0 ? _c : 1) > 0) && isQtyEditable && (react_1.default.createElement(react_2.HStack, { sx: { ml: "1.1rem", mb: 4 }, spacing: 4 },
52
57
  react_1.default.createElement(react_2.HStack, null,
@@ -8,6 +8,8 @@ export type ProductDetailsProps = {
8
8
  images?: images[];
9
9
  batch?: batch;
10
10
  category?: string;
11
+ rating?: string | number;
12
+ reviews?: string | number;
11
13
  onAddToCart?: (id: string | number, var_id: number, qty?: number) => void;
12
14
  onNotifyMe?: (id: string | number, var_id: number) => void;
13
15
  onOptionChange?: (option: options) => void;
@@ -52,6 +52,10 @@ var ProductDtlPrice = function (_a) {
52
52
  react_1.default.createElement(react_2.Text, { fontSize: "sm", fontWeight: "bold", textTransform: "uppercase", mb: 1 },
53
53
  "Packs : ",
54
54
  selected.label),
55
- react_1.default.createElement(react_2.HStack, { spacing: 2 }, price.map(function (pack, idx) { return (react_1.default.createElement(react_2.Button, { key: pack.var_id, size: "sm", variant: idx === selectedIndex ? "solid" : "outline", colorScheme: idx === selectedIndex ? "blackAlpha" : undefined, onClick: function () { return setSelectedIndex(idx); } }, pack.label)); })))));
55
+ react_1.default.createElement(react_2.HStack, { spacing: 2 }, price.map(function (pack, idx) { return (react_1.default.createElement(react_2.Button, { key: pack.var_id, size: "xs", variant: "outline", borderColor: idx === selectedIndex ? "orange.400" : "orange.200", bg: idx === selectedIndex ? "orange.50" : "white", color: "orange.600", borderRadius: "md", fontWeight: "medium", _hover: {
56
+ bg: "orange.100",
57
+ }, _active: {
58
+ bg: "orange.100",
59
+ }, onClick: function () { return setSelectedIndex(idx); } }, pack.label)); })))));
56
60
  };
57
61
  exports.default = ProductDtlPrice;
package/dist/index.d.ts CHANGED
@@ -59,6 +59,5 @@ import PaymentCard from "./Components/Card/PaymentCard/PaymentCard";
59
59
  import ApexLineChart from "./Components/Apexcharts/ApexLineChart/ApexLineChart";
60
60
  import Notification from "./Components/Notification/Notification";
61
61
  import DatePicker from "./Components/DatePicker/ThemeDatePicker";
62
- import ShopMap from "./Components/Map/ShopMap";
63
- export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, ApexPolarChart, ApexLineChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, ContactForm, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, FileUpload, FileUploader, FormWrapper, Header, HeaderActions, InputTextArea, InputSwitch, KanbanBoard, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, Notification, NoteTextArea, MultiSelect, NumberInput, PaymentCard, PhoneNumberInput, PinInput, ProductCard, ProductDetails, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Reorder, Search, Select, SearchSelect, SelectSearch, SideBar, Slider, Skeletons, ShopMap, Switch, Table, TableToggle, Tag, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, debounce, };
62
+ export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, ApexPolarChart, ApexLineChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, ContactForm, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, FileUpload, FileUploader, FormWrapper, Header, HeaderActions, InputTextArea, InputSwitch, KanbanBoard, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, Notification, NoteTextArea, MultiSelect, NumberInput, PaymentCard, PhoneNumberInput, PinInput, ProductCard, ProductDetails, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Reorder, Search, Select, SearchSelect, SelectSearch, SideBar, Slider, Skeletons, Switch, Table, TableToggle, Tag, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, debounce, };
64
63
  export default withTheme;
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = exports.PinInput = exports.PhoneNumberInput = exports.PaymentCard = exports.NumberInput = exports.MultiSelect = exports.NoteTextArea = exports.Notification = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.KanbanBoard = exports.InputSwitch = exports.InputTextArea = exports.HeaderActions = exports.Header = exports.FormWrapper = exports.FileUploader = exports.FileUpload = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.ContactForm = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexLineChart = exports.ApexPolarChart = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordian = void 0;
31
- exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.Switch = exports.ShopMap = exports.Skeletons = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.Select = exports.Search = exports.Reorder = void 0;
31
+ exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.Switch = exports.Skeletons = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.Select = exports.Search = exports.Reorder = void 0;
32
32
  var Accordion_1 = __importDefault(require("./Components/Accordion/Accordion"));
33
33
  exports.Accordian = Accordion_1.default;
34
34
  var AlertDialog_1 = __importDefault(require("./Components/AlertDialog/AlertDialog"));
@@ -162,6 +162,4 @@ var Notification_1 = __importDefault(require("./Components/Notification/Notifica
162
162
  exports.Notification = Notification_1.default;
163
163
  var ThemeDatePicker_1 = __importDefault(require("./Components/DatePicker/ThemeDatePicker"));
164
164
  exports.DatePicker = ThemeDatePicker_1.default;
165
- var ShopMap_1 = __importDefault(require("./Components/Map/ShopMap"));
166
- exports.ShopMap = ShopMap_1.default;
167
165
  exports.default = withTheme_1.default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.89",
3
+ "version": "2.2.91",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -10,8 +10,6 @@
10
10
  "@hello-pangea/dnd": "^18.0.1",
11
11
  "framer-motion": "^11.2.2",
12
12
  "jodit-react": "^5.2.38",
13
- "leaflet": "^1.9.4",
14
- "leaflet-routing-machine": "^3.2.12",
15
13
  "lucide-react": "^0.487.0",
16
14
  "react": "^18.3.1",
17
15
  "react-apexcharts": "^1.4.1",
@@ -1,22 +0,0 @@
1
- import React from "react";
2
- import "leaflet-routing-machine";
3
- export type ShopLocation = {
4
- id: string | number;
5
- name: string;
6
- lat: number;
7
- lng: number;
8
- address?: string;
9
- };
10
- export type ShopMapProps = {
11
- shops: ShopLocation[];
12
- selectedShopId?: string | number;
13
- userLocation?: {
14
- lat: number;
15
- lng: number;
16
- };
17
- height?: string | number;
18
- onSelectShop?: (shop: ShopLocation) => void;
19
- navigateToShopId?: string | number;
20
- };
21
- declare const ShopMap: React.FC<ShopMapProps>;
22
- export default ShopMap;
@@ -1,205 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- var react_1 = __importStar(require("react"));
30
- var react_2 = require("@chakra-ui/react");
31
- var leaflet_1 = __importDefault(require("leaflet"));
32
- require("leaflet-routing-machine");
33
- var tileUrl = "https://tile.openstreetmap.org/{z}/{x}/{y}.png";
34
- function directionsUrl(dest, origin) {
35
- var base = "https://www.google.com/maps/dir/?api=1";
36
- var destination = "destination=".concat(dest.lat, ",").concat(dest.lng);
37
- var o = origin ? "&origin=".concat(origin.lat, ",").concat(origin.lng) : "";
38
- return "".concat(base, "&").concat(destination).concat(o);
39
- }
40
- var ShopMap = function (_a) {
41
- var shops = _a.shops, selectedShopId = _a.selectedShopId, userLocation = _a.userLocation, _b = _a.height, height = _b === void 0 ? 360 : _b, onSelectShop = _a.onSelectShop, navigateToShopId = _a.navigateToShopId;
42
- var mapElRef = (0, react_1.useRef)(null);
43
- var mapRef = (0, react_1.useRef)(null);
44
- var markersRef = (0, react_1.useRef)(new Map());
45
- var routeLayerRef = (0, react_1.useRef)(null);
46
- var routingControlRef = (0, react_1.useRef)(null);
47
- var internalOriginRef = (0, react_1.useRef)(null);
48
- var bounds = (0, react_1.useMemo)(function () {
49
- var b = leaflet_1.default.latLngBounds([]);
50
- shops.forEach(function (s) { return b.extend([s.lat, s.lng]); });
51
- return b;
52
- }, [shops]);
53
- (0, react_1.useEffect)(function () {
54
- if (!mapElRef.current)
55
- return;
56
- if (!mapRef.current) {
57
- mapRef.current = leaflet_1.default.map(mapElRef.current);
58
- leaflet_1.default.tileLayer(tileUrl, {
59
- attribution: "&copy; OpenStreetMap contributors",
60
- }).addTo(mapRef.current);
61
- }
62
- markersRef.current.forEach(function (layer) {
63
- if (mapRef.current && mapRef.current.hasLayer(layer))
64
- mapRef.current.removeLayer(layer);
65
- });
66
- markersRef.current.clear();
67
- shops.forEach(function (shop) {
68
- var marker = leaflet_1.default.circleMarker([shop.lat, shop.lng], {
69
- radius: 7,
70
- color: "#2563eb",
71
- weight: 2,
72
- fillColor: "#60a5fa",
73
- fillOpacity: 0.8,
74
- });
75
- var html = "<div style=\"min-width:220px;line-height:1.4\">".concat(shop.name).concat(shop.address ? "<br/><small>".concat(shop.address, "</small>") : "", "<br/><div style=\"display:flex;gap:8px;margin-top:6px\"><button data-id=\"").concat(shop.id, "\" data-action=\"navigate\" style=\"padding:6px 10px;border-radius:6px;background:#7c3aed;color:#fff;border:none;cursor:pointer\">Navigate</button><button data-id=\"").concat(shop.id, "\" data-action=\"gmaps\" style=\"padding:6px 10px;border-radius:6px;background:#9333ea;color:#fff;border:none;cursor:pointer\">Google Maps</button></div></div>");
76
- marker.bindPopup(html, { autoPan: false });
77
- marker.on("click", function () { return onSelectShop && onSelectShop(shop); });
78
- marker.on("popupopen", function () {
79
- var _a;
80
- var el = (_a = marker.getPopup()) === null || _a === void 0 ? void 0 : _a.getElement();
81
- if (!el)
82
- return;
83
- var navBtn = el.querySelector("button[data-id='".concat(shop.id, "'][data-action='navigate']"));
84
- var gmapsBtn = el.querySelector("button[data-id='".concat(shop.id, "'][data-action='gmaps']"));
85
- if (navBtn) {
86
- navBtn.addEventListener("click", function () {
87
- if (!mapRef.current)
88
- return;
89
- var proceed = function (origin) {
90
- if (routingControlRef.current) {
91
- mapRef.current.removeControl(routingControlRef.current);
92
- routingControlRef.current = null;
93
- }
94
- var dest = leaflet_1.default.latLng(shop.lat, shop.lng);
95
- var plan = leaflet_1.default.Routing.plan([origin, dest], {
96
- draggableWaypoints: false,
97
- addWaypoints: false,
98
- createMarker: function (_i, wp) { return leaflet_1.default.marker(wp.latLng, { opacity: 0, interactive: false }); },
99
- });
100
- routingControlRef.current = leaflet_1.default.Routing.control({
101
- plan: plan,
102
- router: leaflet_1.default.Routing.osrmv1({ serviceUrl: "https://router.project-osrm.org/route/v1" }),
103
- fitSelectedRoutes: true,
104
- routeWhileDragging: false,
105
- showAlternatives: false,
106
- });
107
- routingControlRef.current.addTo(mapRef.current);
108
- };
109
- var originSource = userLocation || internalOriginRef.current;
110
- if (originSource) {
111
- proceed(leaflet_1.default.latLng(originSource.lat, originSource.lng));
112
- }
113
- else if (navigator.geolocation) {
114
- navigator.geolocation.getCurrentPosition(function (pos) {
115
- internalOriginRef.current = { lat: pos.coords.latitude, lng: pos.coords.longitude };
116
- proceed(leaflet_1.default.latLng(pos.coords.latitude, pos.coords.longitude));
117
- });
118
- }
119
- });
120
- }
121
- if (gmapsBtn) {
122
- gmapsBtn.addEventListener("click", function () {
123
- var originSource = userLocation || internalOriginRef.current || undefined;
124
- var link = directionsUrl({ lat: shop.lat, lng: shop.lng }, originSource ? { lat: originSource.lat, lng: originSource.lng } : undefined);
125
- window.open(link, "_blank", "noopener");
126
- });
127
- }
128
- });
129
- marker.addTo(mapRef.current);
130
- markersRef.current.set(shop.id, marker);
131
- });
132
- if (shops.length) {
133
- mapRef.current.fitBounds(bounds.pad(0.2));
134
- }
135
- return function () {
136
- if (routingControlRef.current && mapRef.current) {
137
- mapRef.current.removeControl(routingControlRef.current);
138
- }
139
- routingControlRef.current = null;
140
- if (routeLayerRef.current && mapRef.current && mapRef.current.hasLayer(routeLayerRef.current)) {
141
- mapRef.current.removeLayer(routeLayerRef.current);
142
- }
143
- routeLayerRef.current = null;
144
- markersRef.current.clear();
145
- if (mapRef.current) {
146
- mapRef.current.off();
147
- mapRef.current.remove();
148
- mapRef.current = null;
149
- }
150
- };
151
- }, [shops, bounds, userLocation]);
152
- (0, react_1.useEffect)(function () {
153
- var _a, _b;
154
- if (!selectedShopId || !mapRef.current)
155
- return;
156
- var layer = markersRef.current.get(selectedShopId);
157
- if (!layer)
158
- return;
159
- (_b = (_a = layer).openPopup) === null || _b === void 0 ? void 0 : _b.call(_a);
160
- }, [selectedShopId]);
161
- (0, react_1.useEffect)(function () {
162
- var _a, _b, _c, _d;
163
- if (!navigateToShopId || !mapRef.current)
164
- return;
165
- var layer = markersRef.current.get(navigateToShopId);
166
- if (!layer)
167
- return;
168
- var center = (_b = (_a = layer).getLatLng) === null || _b === void 0 ? void 0 : _b.call(_a);
169
- if (!center)
170
- return;
171
- var build = function (origin) {
172
- if (routingControlRef.current) {
173
- mapRef.current.removeControl(routingControlRef.current);
174
- routingControlRef.current = null;
175
- }
176
- var plan = leaflet_1.default.Routing.plan([origin, center], {
177
- draggableWaypoints: false,
178
- addWaypoints: false,
179
- createMarker: function (_i, wp) { return leaflet_1.default.marker(wp.latLng, { opacity: 0, interactive: false }); },
180
- });
181
- routingControlRef.current = leaflet_1.default.Routing.control({
182
- plan: plan,
183
- router: leaflet_1.default.Routing.osrmv1({ serviceUrl: "https://router.project-osrm.org/route/v1" }),
184
- fitSelectedRoutes: true,
185
- routeWhileDragging: false,
186
- showAlternatives: false,
187
- });
188
- routingControlRef.current.addTo(mapRef.current);
189
- };
190
- var originSrc = userLocation || internalOriginRef.current;
191
- if (originSrc) {
192
- build(leaflet_1.default.latLng(originSrc.lat, originSrc.lng));
193
- }
194
- else if (navigator.geolocation) {
195
- navigator.geolocation.getCurrentPosition(function (pos) {
196
- internalOriginRef.current = { lat: pos.coords.latitude, lng: pos.coords.longitude };
197
- build(leaflet_1.default.latLng(pos.coords.latitude, pos.coords.longitude));
198
- });
199
- }
200
- (_d = (_c = layer).openPopup) === null || _d === void 0 ? void 0 : _d.call(_c);
201
- }, [navigateToShopId, userLocation]);
202
- return react_1.default.createElement(react_2.Box, { w: "100%", h: height },
203
- react_1.default.createElement("div", { ref: mapElRef, style: { width: "100%", height: "100%" } }));
204
- };
205
- exports.default = ShopMap;