@restaround/react 1.0.2 → 1.0.6

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.
@@ -1,9 +1,7 @@
1
1
  import * as branchModels from "src/models/branch";
2
- interface Props {
2
+ import * as menuModels from "src/models/menu";
3
+ interface Props extends Pick<menuModels.PublicMenuData, "coverImage" | "logoImage" | "name" | "instagram" | "facebook" | "whatsapp" | "telegram" | "tiktok"> {
3
4
  branch?: branchModels.Branch;
4
- coverImage?: string;
5
- logoImage?: string;
6
- name: string;
7
5
  }
8
- declare const Header: ({ branch, coverImage, logoImage, name }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ declare const Header: ({ branch, coverImage, logoImage, name, instagram, facebook, whatsapp, telegram, tiktok, }: Props) => import("react/jsx-runtime").JSX.Element;
9
7
  export default Header;
@@ -10,5 +10,5 @@ interface Props {
10
10
  language: string;
11
11
  onCategoryInView: (categoryId: number) => void;
12
12
  }
13
- declare const Products: ({ products, categories, currency, language, productBlocksRef, onCategoryInView, }: Props) => import("react/jsx-runtime").JSX.Element;
13
+ declare const Products: import("react").MemoExoticComponent<({ products, categories, currency, language, productBlocksRef, onCategoryInView }: Props) => import("react/jsx-runtime").JSX.Element>;
14
14
  export default Products;
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as r,Fragment as a}from"react/jsx-runtime";import{useRef as t,useEffect as i,useState as n}from"react";import{Column as c,IconLink as l,Row as o,SVGIcon as s,Carousel as d,CarouselItem as m,Chip as u,UIElementType as h,Container as _,Card as g,Flex as v}from"@sorocraft/ui";import{Wifi as f,Phone as p,Whatsapp as I,Instagram as N,Telegram as b,Tiktok as y,Facebook as P,MarkerPin as L}from"@sorocraft/ui/icons";import{isEmpty as C,priceFormatter as H,groupBy as A}from"@sorocraft/js-utils";var w="PublicMenu-module_container__QLN6U",j="PublicMenu-module_categories__Iy6NC",k="Header-module_container__tenlF",z="Header-module_cover__BAWZK",B="Header-module_content__Gx4Al",E="Header-module_logo__4MTCm",O="Header-module_info__IchYA",x="Header-module_name__30wyw",F="Header-module_address__WOxXc",M="Header-module_labels__gYyth",R="Header-module_social__AoP0z",V="Header-module_links__EeQxg";const W=({branch:a,coverImage:t,logoImage:i,name:n})=>{const{address:d,latitude:m,longitude:u}=a||{},h=C(a),_=`https://www.google.com/maps/place/${m},${u}`;return e("div",{className:k,children:[r("img",{src:t,alt:n,className:z}),e("div",{className:B,children:[r(h?()=>e(c,{fullWidth:!0,fullHeight:!0,alignItems:"center",justifyContent:"center",children:[r("img",{src:i,alt:n,className:E}),r("div",{className:O,children:r("h1",{className:x,children:n})})]}):()=>e(o,{gap:1,children:[r("img",{src:i,alt:n,className:E}),e("div",{className:O,children:[r("h1",{className:x,children:n}),r("a",{className:F,href:_,target:"_blank",rel:"noopener noreferrer",children:e(o,{alignItems:"center",gap:.5,children:[r(s,{icon:L,theme:"dark"}),r("span",{children:d})]})})]})]}),{}),!h&&r("div",{className:M,children:r(c,{alignItems:"center",justifyContent:"center",gap:.75,fullHeight:!0,children:r(l,{icon:f,href:"/",size:"sm",shape:"circle"})})})]}),!h&&r("div",{className:R,children:r("div",{className:V,children:e(o,{alignItems:"center",justifyContent:"center",gap:.5,children:[r(l,{icon:p,href:"/",size:"sm",shape:"circle",theme:"light"}),r(l,{icon:I,href:"/",size:"sm",shape:"circle",theme:"light"}),r(l,{icon:N,href:"/",size:"sm",shape:"circle",theme:"light"}),r(l,{icon:b,href:"/",size:"sm",shape:"circle",theme:"light"}),r(l,{icon:y,href:"/",size:"sm",shape:"circle",theme:"light"}),r(l,{icon:P,href:"/",size:"sm",shape:"circle",theme:"light"})]})})})]})},Y=({categories:e,language:a,selectedCategoryId:i,onSelectCategory:n})=>{const c=t({}),l=e=>{(e=>{var r;const a=null===(r=null==c?void 0:c.current)||void 0===r?void 0:r[e];a&&a.scrollIntoView({behavior:"smooth",inline:"center"})})(e),n(e)};return r("div",{className:j,children:r(d,{gap:1,children:e.map((({id:e,translations:t})=>{const{name:n}=t.find((e=>e.language===a))||{};return r(m,{children:r(u,{onClick:()=>l(e),type:h.BORDERED_PRIMARY,active:e===i,children:r("div",{ref:r=>c.current[e]=r,children:n})})},e)}))})})};var D={container:"Products-module_container__bF2LF",header:"Products-module_header__0EFvL",products:"Products-module_products__AoDrY",list:"Products-module_list__LH4v5"};var T={container:"ProductsListItem-module_container__i9tFs",data:"ProductsListItem-module_data__Mb3SF",name:"ProductsListItem-module_name__T1gyJ",description:"ProductsListItem-module_description__oL4CH",image:"ProductsListItem-module_image__h6Wbi",flexWide:"ProductsListItem-module_flexWide__Ds6LE",slidein:"ProductsListItem-module_slidein__rEzMI",fadeInOut:"ProductsListItem-module_fadeInOut__i1FNq",heightAnimation:"ProductsListItem-module_heightAnimation__2fk7l",fadein:"ProductsListItem-module_fadein__tPTJ6",floatAnimation:"ProductsListItem-module_floatAnimation__vugAV"};const S=({product:a,currency:t,language:i})=>{const{translations:n,price:l,imageUrl:s}=a||{},{name:d,description:m}=n.find((e=>e.language===i))||{},u=H(l,t||"AZN",i);return r("div",{className:T.container,children:e(o,{justifyContent:"space-between",children:[r("div",{className:T.data,children:e(c,{gap:.5,children:[r("h3",{className:T.name,children:d}),r("div",{className:T.description,children:m}),r("div",{className:T.price,children:u})]})}),s&&r("img",{src:s,alt:d,className:T.image})]})})},Z=({products:a,categories:t,currency:n,language:l,productBlocksRef:o,onCategoryInView:s})=>{const d=A(a,"categoryId");return i((()=>{const e=new IntersectionObserver((e=>{e.forEach((e=>{if(e.isIntersecting){const r=Number(e.target.getAttribute("data-category-id"));s(r)}}))}),{root:null,threshold:.5});return Object.values((null==o?void 0:o.current)||{}).forEach((r=>{r&&e.observe(r)})),()=>{e.disconnect()}}),[o,s]),r("div",{className:D.container,children:r(c,{children:Object.keys(d).map((a=>{const i=t.find((({id:e})=>e===Number(a)))||{},{name:s}=((e,r)=>{var a,t;return(null===(t=null===(a=null==e?void 0:e.translations)||void 0===a?void 0:a.find)||void 0===t?void 0:t.call(a,(e=>e.language===r)))||{}})(i,l);return e("div",{className:D.products,ref:e=>o.current[i.id]=e,"data-category-id":a,children:[r("h2",{className:D.category,children:s}),r("div",{className:D.list,children:r(c,{gap:2,children:d[a].map((e=>r(S,{product:e,currency:n,language:l},e.id)))})})]},a)}))})})};var J="Branches-module_branches__sOuoV",K="Branches-module_list__vYoT2",Q="Branches-module_name__K0Z-4";const U=({branches:e=[]})=>r("div",{className:J,children:r(_,{className:K,children:e.map((({id:e,name:a})=>r("a",{href:"/",children:r(g,{noBottomMargin:!0,children:r(v,{justifyContent:"center",alignItems:"center",fullHeight:!0,children:r("h2",{className:Q,children:a})})})},e)))})}),$=({data:i})=>{var c;const{name:l,coverImage:o,logoImage:s,branches:d=[],branchId:m,language:u,categories:h,products:_,currency:g,defaultCover:v="",defaultLogo:f=""}=i||{},p=d.length<=1,I=d.find((e=>e.id===Number(m))),N=p||!(null==I?void 0:I.name)?l:(null==I?void 0:I.name)||"",b=o||v,y=s||f,[P,L]=n(null===(c=null==h?void 0:h[0])||void 0===c?void 0:c.id),C=t({});return e("div",{className:w,children:[r(W,{branch:I,name:N,coverImage:b,logoImage:y}),p||m?e(a,{children:[r(Y,{categories:h,language:u,selectedCategoryId:P,onSelectCategory:e=>{L(e),(e=>{var r;const a=null===(r=null==C?void 0:C.current)||void 0===r?void 0:r[e];a&&a.scrollIntoView({behavior:"smooth",block:"start"})})(e)}}),r(Z,{categories:h,products:_,currency:g,language:u,productBlocksRef:C,onCategoryInView:e=>{e!==P&&L(e)}})]}):r(U,{branches:d})]})};export{$ as PublicMenu};
1
+ import{jsxs as e,jsx as r,Fragment as a}from"react/jsx-runtime";import{useRef as t,memo as n,useCallback as i,useEffect as c,useState as o}from"react";import{Row as l,IconLink as s,SVGIcon as d,Column as m,Carousel as u,CarouselItem as h,Chip as g,UIElementType as _,Container as v,Card as p,Flex as f}from"@sorocraft/ui";import{Phone as I,Whatsapp as N,Instagram as b,Telegram as y,Tiktok as k,Facebook as P,Wifi as L,MarkerPin as w}from"@sorocraft/ui/icons";import{isEmpty as C,priceFormatter as A,groupBy as H}from"@sorocraft/js-utils";var z="PublicMenu-module_container__QLN6U",j="PublicMenu-module_categories__Iy6NC",B="Header-module_container__tenlF",E="Header-module_cover__BAWZK",O="Header-module_content__Gx4Al",x="Header-module_logo__4MTCm",F="Header-module_info__IchYA",M="Header-module_name__30wyw",R="Header-module_address__WOxXc",V="Header-module_social__AoP0z",W="Header-module_links__EeQxg";const D=({branch:a,coverImage:t,logoImage:n,name:i,instagram:c,facebook:o,whatsapp:u,telegram:h,tiktok:g})=>{const{address:_,latitude:v,longitude:p,phone:f}=a||{},A=C(a),H=`https://www.google.com/maps/place/${v},${p}`;return e("div",{className:B,children:[r("img",{src:t,alt:i,className:E}),r("div",{className:O,children:r(A?()=>e(m,{fullWidth:!0,fullHeight:!0,alignItems:"center",justifyContent:"center",children:[r("img",{src:n,alt:i,className:x}),r("div",{className:F,children:r("h1",{className:M,children:i})})]}):()=>e(l,{gap:1,children:[r("img",{src:n,alt:i,className:x}),e("div",{className:F,children:[r("h1",{className:M,children:i}),r("a",{className:R,href:H,target:"_blank",rel:"noopener noreferrer",children:e(l,{alignItems:"center",gap:.5,children:[r(d,{icon:w,theme:"dark"}),r("span",{children:_})]})})]})]}),{})}),!A&&r("div",{className:V,children:r("div",{className:W,children:e(l,{gap:2,children:[e(l,{alignItems:"center",justifyContent:"center",gap:.5,children:[f&&r(s,{icon:I,href:`tel:+${f}`,size:"sm",shape:"circle",theme:"light"}),u&&r(s,{icon:N,href:`https://wa.me/${u}`,size:"sm",shape:"circle",theme:"light",target:"_blank"}),c&&r(s,{icon:b,href:c,size:"sm",shape:"circle",theme:"light",target:"_blank"}),h&&r(s,{icon:y,href:h,size:"sm",shape:"circle",theme:"light",target:"_blank"}),g&&r(s,{icon:k,href:g,size:"sm",shape:"circle",theme:"light",target:"_blank"}),o&&r(s,{icon:P,href:o,size:"sm",shape:"circle",theme:"light",target:"_blank"})]}),r(l,{children:r(d,{icon:L,size:"sm"})})]})})})]})},T=({categories:e,language:a,selectedCategoryId:n,onSelectCategory:i})=>{const c=t({}),o=e=>{(e=>{var r;const a=null===(r=null==c?void 0:c.current)||void 0===r?void 0:r[e];a&&a.scrollIntoView({behavior:"smooth",inline:"center"})})(e),i(e)};return r("div",{className:j,children:r(u,{gap:1,children:e.map((({id:e,translations:t})=>{const{name:i}=t.find((e=>e.language===a))||{};return r(h,{children:r(g,{onClick:()=>o(e),type:_.BORDERED_PRIMARY,active:e===n,children:r("div",{ref:r=>c.current[e]=r,children:i})})},e)}))})})};var Y={container:"Products-module_container__bF2LF",header:"Products-module_header__0EFvL",products:"Products-module_products__AoDrY",list:"Products-module_list__LH4v5"};var $={container:"ProductsListItem-module_container__i9tFs",data:"ProductsListItem-module_data__Mb3SF",name:"ProductsListItem-module_name__T1gyJ",description:"ProductsListItem-module_description__oL4CH",image:"ProductsListItem-module_image__h6Wbi",flexWide:"ProductsListItem-module_flexWide__Ds6LE",slidein:"ProductsListItem-module_slidein__rEzMI",fadeInOut:"ProductsListItem-module_fadeInOut__i1FNq",heightAnimation:"ProductsListItem-module_heightAnimation__2fk7l",fadein:"ProductsListItem-module_fadein__tPTJ6",floatAnimation:"ProductsListItem-module_floatAnimation__vugAV"};const S=({product:a,currency:t,language:n})=>{const{translations:i,price:c,imageUrl:o}=a||{},{name:s,description:d}=i.find((e=>e.language===n))||{},u=A(c,t||"AZN",n);return r("div",{className:$.container,children:e(l,{justifyContent:"space-between",children:[r("div",{className:$.data,children:e(m,{gap:.5,children:[r("h3",{className:$.name,children:s}),r("div",{className:$.description,children:d}),r("div",{className:$.price,children:u})]})}),o&&r("img",{src:o,alt:s,className:$.image})]})})},Z=n((({products:a,categories:t,currency:n,language:o,productBlocksRef:l,onCategoryInView:s})=>{const d=H(a,"categoryId"),u=i((e=>{let r=null,a=0;e.forEach((e=>{const t=Number(e.target.getAttribute("data-category-id")),n=e.intersectionRatio;n>a&&(a=n,r=t)})),r&&s(r)}),[s]);return c((()=>{const e=new IntersectionObserver(u,{root:null,threshold:[.1,.5,.75]});return Object.values((null==l?void 0:l.current)||{}).forEach((r=>{r&&e.observe(r)})),()=>{e.disconnect()}}),[l,u]),r("div",{className:Y.container,children:r(m,{children:Object.keys(d).map((a=>{const i=t.find((({id:e})=>e===Number(a)))||{},{name:c}=((e,r)=>{var a,t;return(null===(t=null===(a=null==e?void 0:e.translations)||void 0===a?void 0:a.find)||void 0===t?void 0:t.call(a,(e=>e.language===r)))||{}})(i,o);return e("div",{className:Y.products,ref:e=>l.current[i.id]=e,"data-category-id":a,children:[r("h2",{className:Y.category,children:c}),r("div",{className:Y.list,children:r(m,{gap:2,children:d[a].map((e=>r(S,{product:e,currency:n,language:o},e.id)))})})]},a)}))})})}),((e,r)=>e.products===r.products&&e.categories===r.categories&&e.currency===r.currency&&e.language===r.language));var J="Branches-module_branches__sOuoV",K="Branches-module_list__vYoT2",Q="Branches-module_name__K0Z-4";const U=({branches:e=[]})=>r("div",{className:J,children:r(v,{className:K,children:e.map((({id:e,name:a})=>r("a",{href:"/",children:r(p,{noBottomMargin:!0,children:r(f,{justifyContent:"center",alignItems:"center",fullHeight:!0,children:r("h2",{className:Q,children:a})})})},e)))})}),q=({data:n})=>{var i;const{name:c,coverImage:l,logoImage:s,branches:d=[],branchId:m,language:u,categories:h,products:g,currency:_,defaultCover:v="",defaultLogo:p="",instagram:f,facebook:I,whatsapp:N,telegram:b,tiktok:y}=n||{},k=d.length<=1,P=d.find((e=>e.id===Number(m))),L=k||!(null==P?void 0:P.name)?c:(null==P?void 0:P.name)||"",w=l||v,C=s||p,[A,H]=o(null===(i=null==h?void 0:h[0])||void 0===i?void 0:i.id),j=t({});return e("div",{className:z,children:[r(D,{branch:P,name:L,coverImage:w,logoImage:C,instagram:f,facebook:I,whatsapp:N,telegram:b,tiktok:y}),k||m?e(a,{children:[r(T,{categories:h,language:u,selectedCategoryId:A,onSelectCategory:e=>{H(e),(e=>{var r;const a=null===(r=null==j?void 0:j.current)||void 0===r?void 0:r[e];a&&a.scrollIntoView({behavior:"smooth",block:"start"})})(e)}}),r(Z,{categories:h,products:g,currency:_,language:u,productBlocksRef:j,onCategoryInView:e=>{e!==A&&H(e)}})]}):r(U,{branches:d})]})};export{q as PublicMenu};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/PublicMenu/Header/Header.tsx","../src/components/PublicMenu/Categories.tsx","../src/components/PublicMenu/PublicMenu.constants.ts","../src/components/PublicMenu/ProductsListItem/ProductsListItem.tsx","../src/components/PublicMenu/Products/Products.tsx","../src/utils/category.ts","../src/components/PublicMenu/Branches/Branches.tsx","../src/components/PublicMenu/PublicMenu.tsx"],"sourcesContent":["import { Column, IconLink, Row, SVGIcon } from \"@sorocraft/ui\";\nimport {\n\tMarkerPin,\n\tPhone,\n\tWifi,\n\tInstagram,\n\tWhatsapp,\n\tTiktok,\n\tFacebook,\n\tTelegram,\n} from \"@sorocraft/ui/icons\";\nimport { isEmpty } from \"@sorocraft/js-utils\";\n\nimport styles from \"./Header.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\n\ninterface Props {\n\tbranch?: branchModels.Branch;\n\tcoverImage?: string;\n\tlogoImage?: string;\n\tname: string;\n}\n\nconst Header = ({ branch, coverImage, logoImage, name }: Props) => {\n\tconst { address, latitude, longitude } = branch || {};\n\tconst noBranch = isEmpty(branch);\n\n\tconst googleMapLink = `https://www.google.com/maps/place/${latitude},${longitude}`;\n\n\tconst BranchInfo = () => (\n\t\t<Row gap={1}>\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\n\t\t\t\t<a\n\t\t\t\t\tclassName={styles.address}\n\t\t\t\t\thref={googleMapLink}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t<Row alignItems=\"center\" gap={0.5}>\n\t\t\t\t\t\t<SVGIcon icon={MarkerPin} theme=\"dark\" />\n\t\t\t\t\t\t<span>{address}</span>\n\t\t\t\t\t</Row>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</Row>\n\t);\n\n\tconst BusinessInfo = () => (\n\t\t<Column fullWidth fullHeight alignItems=\"center\" justifyContent=\"center\">\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\t\t\t</div>\n\t\t</Column>\n\t);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<img src={coverImage} alt={name} className={styles.cover} />\n\t\t\t<div className={styles.content}>\n\t\t\t\t{noBranch ? <BusinessInfo /> : <BranchInfo />}\n\t\t\t\t{!noBranch && (\n\t\t\t\t\t<div className={styles.labels}>\n\t\t\t\t\t\t<Column alignItems=\"center\" justifyContent=\"center\" gap={0.75} fullHeight>\n\t\t\t\t\t\t\t<IconLink icon={Wifi} href=\"/\" size=\"sm\" shape=\"circle\" />\n\t\t\t\t\t\t</Column>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!noBranch && (\n\t\t\t\t<div className={styles.social}>\n\t\t\t\t\t<div className={styles.links}>\n\t\t\t\t\t\t<Row alignItems=\"center\" justifyContent=\"center\" gap={0.5}>\n\t\t\t\t\t\t\t<IconLink icon={Phone} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Whatsapp} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Instagram} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Telegram} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Tiktok} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Facebook} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default Header;\n","import { Carousel, CarouselItem, Chip, DivElementMap, UIElementType } from \"@sorocraft/ui\";\nimport { useRef } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as categoryModels from \"src/models/category\";\n\ninterface Props {\n\tcategories: categoryModels.Category[];\n\tlanguage: string;\n\tselectedCategoryId: number;\n\tonSelectCategory: (id: number) => void;\n}\n\nconst Categories = ({ categories, language, selectedCategoryId, onSelectCategory }: Props) => {\n\tconst categoryBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToCategoryBlock = (categoryId: number) => {\n\t\tconst categoryBlock = categoryBlocksRef?.current?.[categoryId];\n\t\tif (!categoryBlock) return;\n\n\t\tcategoryBlock.scrollIntoView({ behavior: \"smooth\", inline: \"center\" });\n\t};\n\n\tconst handleSelectCategory = (id: number) => {\n\t\tscrollToCategoryBlock(id);\n\t\tonSelectCategory(id);\n\t};\n\n\treturn (\n\t\t<div className={styles.categories}>\n\t\t\t<Carousel gap={1}>\n\t\t\t\t{categories.map(({ id, translations }) => {\n\t\t\t\t\tconst { name } = translations.find((item) => item.language === language) || {};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CarouselItem key={id}>\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tonClick={() => handleSelectCategory(id)}\n\t\t\t\t\t\t\t\ttype={UIElementType.BORDERED_PRIMARY}\n\t\t\t\t\t\t\t\tactive={id === selectedCategoryId}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div ref={(el) => (categoryBlocksRef.current[id] = el)}>{name}</div>\n\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t</CarouselItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Carousel>\n\t\t</div>\n\t);\n};\nexport default Categories;\n","export const DEFAULT_CURRENCY = \"AZN\";\n","import { Column, Row } from \"@sorocraft/ui\";\nimport { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport styles from \"./ProductsListItem.module.scss\";\n\nimport * as productModels from \"src/models/product\";\n\nimport { DEFAULT_CURRENCY } from \"../PublicMenu.constants\";\n\ninterface Props {\n\tproduct: productModels.Product;\n\tcurrency: string;\n\tlanguage: string;\n}\n\nconst ProductsListItem = ({ product, currency, language }: Props) => {\n\tconst { translations, price, imageUrl } = product || {};\n\tconst { name, description } = translations.find((item) => item.language === language) || {};\n\tconst formattedPrice = priceFormatter(price, currency || DEFAULT_CURRENCY, language);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Row justifyContent=\"space-between\">\n\t\t\t\t<div className={styles.data}>\n\t\t\t\t\t<Column gap={0.5}>\n\t\t\t\t\t\t<h3 className={styles.name}>{name}</h3>\n\t\t\t\t\t\t<div className={styles.description}>{description}</div>\n\t\t\t\t\t\t<div className={styles.price}>{formattedPrice}</div>\n\t\t\t\t\t</Column>\n\t\t\t\t</div>\n\t\t\t\t{imageUrl && <img src={imageUrl} alt={name} className={styles.image} />}\n\t\t\t</Row>\n\t\t</div>\n\t);\n};\nexport default ProductsListItem;\n","import { RefObject, useEffect } from \"react\";\nimport { Column, DivElementMap } from \"@sorocraft/ui\";\nimport { groupBy } from \"@sorocraft/js-utils\";\n\nimport styles from \"./Products.module.scss\";\n\nimport * as productModels from \"src/models/product\";\nimport * as categoryModels from \"src/models/category\";\nimport * as categoryUtils from \"src/utils/category\";\n\nimport ProductsListItem from \"../ProductsListItem\";\n\ninterface Props {\n\tproducts: productModels.Product[];\n\tcategories: categoryModels.Category[];\n\tproductBlocksRef: RefObject<DivElementMap>;\n\tcurrency: string;\n\tlanguage: string;\n\tonCategoryInView: (categoryId: number) => void;\n}\n\nconst Products = ({\n\tproducts,\n\tcategories,\n\tcurrency,\n\tlanguage,\n\tproductBlocksRef,\n\tonCategoryInView,\n}: Props) => {\n\t// const [layout, setLayout] = useState<\"list\" | \"grid\">(\"list\");\n\n\tconst groupedProducts = groupBy(products, \"categoryId\");\n\n\tuseEffect(() => {\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\tconst categoryId = Number(entry.target.getAttribute(\"data-category-id\"));\n\t\t\t\t\t\tonCategoryInView(categoryId); // Notify the parent when a category is in view\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: null, // Use the viewport as the container\n\t\t\t\tthreshold: 0.5, // Trigger when 50% of the product block is in view\n\t\t\t}\n\t\t);\n\n\t\tObject.values(productBlocksRef?.current || {}).forEach((block) => {\n\t\t\tif (block) {\n\t\t\t\tobserver.observe(block);\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tobserver.disconnect(); // Clean up the observer on component unmount\n\t\t};\n\t}, [productBlocksRef, onCategoryInView]);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t{/* <div className={styles.header}>\n\t\t\t\t<Row>\n\t\t\t\t\t<IconButton icon={List} onClick={() => setLayout(\"list\")} isActive={layout === \"list\"} />\n\t\t\t\t\t<IconButton icon={Grid} onClick={() => setLayout(\"grid\")} isActive={layout === \"grid\"} />\n\t\t\t\t</Row>\n\t\t\t</div> */}\n\t\t\t<Column>\n\t\t\t\t{Object.keys(groupedProducts).map((categoryId) => {\n\t\t\t\t\tconst category = (categories.find(({ id }) => id === Number(categoryId)) ||\n\t\t\t\t\t\t{}) as categoryModels.Category;\n\t\t\t\t\tconst { name } = categoryUtils.getCategoryTranslation(category, language);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={styles.products}\n\t\t\t\t\t\t\tkey={categoryId}\n\t\t\t\t\t\t\tref={(el) => (productBlocksRef!.current![category.id] = el)}\n\t\t\t\t\t\t\tdata-category-id={categoryId}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h2 className={styles.category}>{name}</h2>\n\t\t\t\t\t\t\t<div className={styles.list}>\n\t\t\t\t\t\t\t\t<Column gap={2}>\n\t\t\t\t\t\t\t\t\t{groupedProducts[categoryId].map((product) => (\n\t\t\t\t\t\t\t\t\t\t<ProductsListItem\n\t\t\t\t\t\t\t\t\t\t\tproduct={product}\n\t\t\t\t\t\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\t\t\t\t\t\tkey={product.id}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</Column>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Column>\n\t\t</div>\n\t);\n};\nexport default Products;\n","import { Category, CategoryTranslation } from \"src/models/category\";\n\nexport const getCategoryTranslation = (\n\tcategory: Category,\n\tlanguage: string\n): CategoryTranslation => {\n\treturn (category?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as CategoryTranslation;\n};\n","import { Card, Container, Flex } from \"@sorocraft/ui\";\n\nimport styles from \"./Branches.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\n\ninterface Props {\n\tbranches: branchModels.Branch[];\n}\n\nconst Branches = ({ branches = [] }: Props) => {\n\treturn (\n\t\t<div className={styles.branches}>\n\t\t\t<Container className={styles.list}>\n\t\t\t\t{branches.map(({ id, name }) => (\n\t\t\t\t\t<a key={id} href=\"/\">\n\t\t\t\t\t\t<Card noBottomMargin>\n\t\t\t\t\t\t\t<Flex justifyContent=\"center\" alignItems=\"center\" fullHeight>\n\t\t\t\t\t\t\t\t<h2 className={styles.name}>{name}</h2>\n\t\t\t\t\t\t\t</Flex>\n\t\t\t\t\t\t</Card>\n\t\t\t\t\t</a>\n\t\t\t\t))}\n\t\t\t</Container>\n\t\t</div>\n\t);\n};\nexport default Branches;\n","import { DivElementMap } from \"@sorocraft/ui\";\nimport { useRef, useState } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as menuModels from \"src/models/menu\";\n\nimport Header from \"./Header\";\nimport Categories from \"./Categories\";\nimport Products from \"./Products\";\nimport Branches from \"./Branches\";\n\ninterface Props {\n\tdata: menuModels.PublicMenuData;\n}\n\nconst PublicMenu = ({ data }: Props) => {\n\tconst {\n\t\tname,\n\t\tcoverImage,\n\t\tlogoImage,\n\t\tbranches = [],\n\t\tbranchId,\n\t\tlanguage,\n\t\tcategories,\n\t\tproducts,\n\t\tcurrency,\n\t\tdefaultCover = \"\",\n\t\tdefaultLogo = \"\",\n\t} = data || {};\n\n\tconst hasSingleBranch = branches.length <= 1;\n\tconst selectedBranch = branches.find((item) => item.id === Number(branchId));\n\tconst venueName = hasSingleBranch || !selectedBranch?.name ? name : selectedBranch?.name || \"\";\n\n\tconst coverImageSource = coverImage || defaultCover;\n\tconst logoImageSource = logoImage || defaultLogo;\n\n\tconst [selectedCategoryId, setSelectedCategoryId] = useState<number>(categories?.[0]?.id);\n\tconst productBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToProductBlock = (categoryId: number) => {\n\t\tconst productBlock = productBlocksRef?.current?.[categoryId];\n\t\tif (!productBlock) return;\n\n\t\tproductBlock.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\t};\n\n\tconst handleSelectCategory = (categoryId: number) => {\n\t\tsetSelectedCategoryId(categoryId);\n\n\t\tscrollToProductBlock(categoryId);\n\t};\n\n\tconst handleCategoryInView = (categoryId: number) => {\n\t\tif (categoryId !== selectedCategoryId) {\n\t\t\tsetSelectedCategoryId(categoryId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Header\n\t\t\t\tbranch={selectedBranch}\n\t\t\t\tname={venueName}\n\t\t\t\tcoverImage={coverImageSource}\n\t\t\t\tlogoImage={logoImageSource}\n\t\t\t/>\n\t\t\t{!hasSingleBranch && !branchId ? (\n\t\t\t\t<Branches branches={branches} />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<Categories\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tselectedCategoryId={selectedCategoryId}\n\t\t\t\t\t\tonSelectCategory={handleSelectCategory}\n\t\t\t\t\t/>\n\t\t\t\t\t<Products\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tproducts={products}\n\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tproductBlocksRef={productBlocksRef}\n\t\t\t\t\t\tonCategoryInView={handleCategoryInView}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default PublicMenu;\n"],"names":["Header","branch","coverImage","logoImage","name","address","latitude","longitude","noBranch","isEmpty","googleMapLink","_jsxs","className","styles","children","_jsx","src","alt","Column","fullWidth","fullHeight","alignItems","justifyContent","Row","gap","href","target","rel","SVGIcon","icon","MarkerPin","theme","IconLink","Wifi","size","shape","Phone","Whatsapp","Instagram","Telegram","Tiktok","Facebook","Categories","categories","language","selectedCategoryId","onSelectCategory","categoryBlocksRef","useRef","handleSelectCategory","id","categoryId","categoryBlock","_a","current","scrollIntoView","behavior","inline","scrollToCategoryBlock","Carousel","map","translations","find","item","CarouselItem","Chip","onClick","type","UIElementType","BORDERED_PRIMARY","active","ref","el","ProductsListItem","product","currency","price","imageUrl","description","formattedPrice","priceFormatter","container","data","image","Products","products","productBlocksRef","onCategoryInView","groupedProducts","groupBy","useEffect","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","Number","getAttribute","root","threshold","Object","values","block","observe","disconnect","keys","category","_b","call","categoryUtils.getCategoryTranslation","list","Branches","branches","Container","Card","noBottomMargin","Flex","PublicMenu","branchId","defaultCover","defaultLogo","hasSingleBranch","length","selectedBranch","venueName","coverImageSource","logoImageSource","setSelectedCategoryId","useState","_Fragment","productBlock","scrollToProductBlock"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/PublicMenu/Header/Header.tsx","../src/components/PublicMenu/Categories.tsx","../src/components/PublicMenu/PublicMenu.constants.ts","../src/components/PublicMenu/ProductsListItem/ProductsListItem.tsx","../src/components/PublicMenu/Products/Products.tsx","../src/utils/category.ts","../src/components/PublicMenu/Branches/Branches.tsx","../src/components/PublicMenu/PublicMenu.tsx"],"sourcesContent":["import { Column, IconLink, Row, SVGIcon } from \"@sorocraft/ui\";\nimport {\n\tMarkerPin,\n\tPhone,\n\tWifi,\n\tInstagram,\n\tWhatsapp,\n\tTiktok,\n\tFacebook,\n\tTelegram,\n} from \"@sorocraft/ui/icons\";\nimport { isEmpty } from \"@sorocraft/js-utils\";\n\nimport styles from \"./Header.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\nimport * as menuModels from \"src/models/menu\";\n\ninterface Props\n\textends Pick<\n\t\tmenuModels.PublicMenuData,\n\t\t| \"coverImage\"\n\t\t| \"logoImage\"\n\t\t| \"name\"\n\t\t| \"instagram\"\n\t\t| \"facebook\"\n\t\t| \"whatsapp\"\n\t\t| \"telegram\"\n\t\t| \"tiktok\"\n\t> {\n\tbranch?: branchModels.Branch;\n}\n\nconst Header = ({\n\tbranch,\n\tcoverImage,\n\tlogoImage,\n\tname,\n\tinstagram,\n\tfacebook,\n\twhatsapp,\n\ttelegram,\n\ttiktok,\n}: Props) => {\n\tconst { address, latitude, longitude, phone } = branch || {};\n\tconst noBranch = isEmpty(branch);\n\n\tconst googleMapLink = `https://www.google.com/maps/place/${latitude},${longitude}`;\n\n\t// const languageOptions = useMemo(\n\t// \t() =>\n\t// \t\t[\"az\", \"en\"].map((language) => ({\n\t// \t\t\tvalue: language,\n\t// \t\t\tlabel: language,\n\t// \t\t})),\n\t// \t[]\n\t// );\n\n\tconst BranchInfo = () => (\n\t\t<Row gap={1}>\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\n\t\t\t\t<a\n\t\t\t\t\tclassName={styles.address}\n\t\t\t\t\thref={googleMapLink}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t<Row alignItems=\"center\" gap={0.5}>\n\t\t\t\t\t\t<SVGIcon icon={MarkerPin} theme=\"dark\" />\n\t\t\t\t\t\t<span>{address}</span>\n\t\t\t\t\t</Row>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</Row>\n\t);\n\n\tconst BusinessInfo = () => (\n\t\t<Column fullWidth fullHeight alignItems=\"center\" justifyContent=\"center\">\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\t\t\t</div>\n\t\t</Column>\n\t);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<img src={coverImage} alt={name} className={styles.cover} />\n\t\t\t<div className={styles.content}>{noBranch ? <BusinessInfo /> : <BranchInfo />}</div>\n\t\t\t{!noBranch && (\n\t\t\t\t<div className={styles.social}>\n\t\t\t\t\t<div className={styles.links}>\n\t\t\t\t\t\t<Row gap={2}>\n\t\t\t\t\t\t\t<Row alignItems=\"center\" justifyContent=\"center\" gap={0.5}>\n\t\t\t\t\t\t\t\t{phone && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Phone}\n\t\t\t\t\t\t\t\t\t\thref={`tel:+${phone}`}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{whatsapp && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Whatsapp}\n\t\t\t\t\t\t\t\t\t\thref={`https://wa.me/${whatsapp}`}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{instagram && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Instagram}\n\t\t\t\t\t\t\t\t\t\thref={instagram}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{telegram && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Telegram}\n\t\t\t\t\t\t\t\t\t\thref={telegram}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{tiktok && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Tiktok}\n\t\t\t\t\t\t\t\t\t\thref={tiktok}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{facebook && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Facebook}\n\t\t\t\t\t\t\t\t\t\thref={facebook}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Row>\n\t\t\t\t\t\t\t<Row>\n\t\t\t\t\t\t\t\t<SVGIcon icon={Wifi} size=\"sm\" />\n\t\t\t\t\t\t\t</Row>\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default Header;\n","import { Carousel, CarouselItem, Chip, DivElementMap, UIElementType } from \"@sorocraft/ui\";\nimport { useRef } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as categoryModels from \"src/models/category\";\n\ninterface Props {\n\tcategories: categoryModels.Category[];\n\tlanguage: string;\n\tselectedCategoryId: number;\n\tonSelectCategory: (id: number) => void;\n}\n\nconst Categories = ({ categories, language, selectedCategoryId, onSelectCategory }: Props) => {\n\tconst categoryBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToCategoryBlock = (categoryId: number) => {\n\t\tconst categoryBlock = categoryBlocksRef?.current?.[categoryId];\n\t\tif (!categoryBlock) return;\n\n\t\tcategoryBlock.scrollIntoView({ behavior: \"smooth\", inline: \"center\" });\n\t};\n\n\tconst handleSelectCategory = (id: number) => {\n\t\tscrollToCategoryBlock(id);\n\t\tonSelectCategory(id);\n\t};\n\n\treturn (\n\t\t<div className={styles.categories}>\n\t\t\t<Carousel gap={1}>\n\t\t\t\t{categories.map(({ id, translations }) => {\n\t\t\t\t\tconst { name } = translations.find((item) => item.language === language) || {};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CarouselItem key={id}>\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tonClick={() => handleSelectCategory(id)}\n\t\t\t\t\t\t\t\ttype={UIElementType.BORDERED_PRIMARY}\n\t\t\t\t\t\t\t\tactive={id === selectedCategoryId}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div ref={(el) => (categoryBlocksRef.current[id] = el)}>{name}</div>\n\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t</CarouselItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Carousel>\n\t\t</div>\n\t);\n};\nexport default Categories;\n","export const DEFAULT_CURRENCY = \"AZN\";\n","import { Column, Row } from \"@sorocraft/ui\";\nimport { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport styles from \"./ProductsListItem.module.scss\";\n\nimport * as productModels from \"src/models/product\";\n\nimport { DEFAULT_CURRENCY } from \"../PublicMenu.constants\";\n\ninterface Props {\n\tproduct: productModels.Product;\n\tcurrency: string;\n\tlanguage: string;\n}\n\nconst ProductsListItem = ({ product, currency, language }: Props) => {\n\tconst { translations, price, imageUrl } = product || {};\n\tconst { name, description } = translations.find((item) => item.language === language) || {};\n\tconst formattedPrice = priceFormatter(price, currency || DEFAULT_CURRENCY, language);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Row justifyContent=\"space-between\">\n\t\t\t\t<div className={styles.data}>\n\t\t\t\t\t<Column gap={0.5}>\n\t\t\t\t\t\t<h3 className={styles.name}>{name}</h3>\n\t\t\t\t\t\t<div className={styles.description}>{description}</div>\n\t\t\t\t\t\t<div className={styles.price}>{formattedPrice}</div>\n\t\t\t\t\t</Column>\n\t\t\t\t</div>\n\t\t\t\t{imageUrl && <img src={imageUrl} alt={name} className={styles.image} />}\n\t\t\t</Row>\n\t\t</div>\n\t);\n};\nexport default ProductsListItem;\n","import { RefObject, useEffect, memo, useCallback } from \"react\";\nimport { Column, DivElementMap } from \"@sorocraft/ui\";\nimport { groupBy } from \"@sorocraft/js-utils\";\nimport styles from \"./Products.module.scss\";\nimport * as productModels from \"src/models/product\";\nimport * as categoryModels from \"src/models/category\";\nimport * as categoryUtils from \"src/utils/category\";\nimport ProductsListItem from \"../ProductsListItem\";\n\ninterface Props {\n\tproducts: productModels.Product[];\n\tcategories: categoryModels.Category[];\n\tproductBlocksRef: RefObject<DivElementMap>;\n\tcurrency: string;\n\tlanguage: string;\n\tonCategoryInView: (categoryId: number) => void;\n}\n\nconst Products = memo(\n\t({ products, categories, currency, language, productBlocksRef, onCategoryInView }: Props) => {\n\t\tconst groupedProducts = groupBy(products, \"categoryId\");\n\n\t\tconst handleIntersection = useCallback(\n\t\t\t(entries: IntersectionObserverEntry[]) => {\n\t\t\t\tlet bestMatchCategoryId: number | null = null;\n\t\t\t\tlet maxVisibility = 0;\n\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tconst categoryId = Number(entry.target.getAttribute(\"data-category-id\"));\n\t\t\t\t\tconst visiblePercentage = entry.intersectionRatio;\n\n\t\t\t\t\t// Track the category block that has the highest visible percentage\n\t\t\t\t\tif (visiblePercentage > maxVisibility) {\n\t\t\t\t\t\tmaxVisibility = visiblePercentage;\n\t\t\t\t\t\tbestMatchCategoryId = categoryId;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Only update if the best matching category is different from the currently selected one\n\t\t\t\tif (bestMatchCategoryId) {\n\t\t\t\t\tonCategoryInView(bestMatchCategoryId);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onCategoryInView]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst observer = new IntersectionObserver(handleIntersection, {\n\t\t\t\troot: null,\n\t\t\t\tthreshold: [0.1, 0.5, 0.75], // Different levels of visibility\n\t\t\t});\n\n\t\t\tObject.values(productBlocksRef?.current || {}).forEach((block) => {\n\t\t\t\tif (block) {\n\t\t\t\t\tobserver.observe(block);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tobserver.disconnect();\n\t\t\t};\n\t\t}, [productBlocksRef, handleIntersection]);\n\n\t\treturn (\n\t\t\t<div className={styles.container}>\n\t\t\t\t<Column>\n\t\t\t\t\t{Object.keys(groupedProducts).map((categoryId) => {\n\t\t\t\t\t\tconst category = (categories.find(({ id }) => id === Number(categoryId)) ||\n\t\t\t\t\t\t\t{}) as categoryModels.Category;\n\t\t\t\t\t\tconst { name } = categoryUtils.getCategoryTranslation(category, language);\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={styles.products}\n\t\t\t\t\t\t\t\tkey={categoryId}\n\t\t\t\t\t\t\t\tref={(el) => (productBlocksRef!.current![category.id] = el)}\n\t\t\t\t\t\t\t\tdata-category-id={categoryId}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<h2 className={styles.category}>{name}</h2>\n\t\t\t\t\t\t\t\t<div className={styles.list}>\n\t\t\t\t\t\t\t\t\t<Column gap={2}>\n\t\t\t\t\t\t\t\t\t\t{groupedProducts[categoryId].map((product) => (\n\t\t\t\t\t\t\t\t\t\t\t<ProductsListItem\n\t\t\t\t\t\t\t\t\t\t\t\tproduct={product}\n\t\t\t\t\t\t\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\t\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\t\t\t\t\t\t\tkey={product.id}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Column>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</Column>\n\t\t\t</div>\n\t\t);\n\t},\n\t(prevProps, nextProps) => {\n\t\treturn (\n\t\t\tprevProps.products === nextProps.products &&\n\t\t\tprevProps.categories === nextProps.categories &&\n\t\t\tprevProps.currency === nextProps.currency &&\n\t\t\tprevProps.language === nextProps.language\n\t\t);\n\t}\n);\n\nexport default Products;\n","import { Category, CategoryTranslation } from \"src/models/category\";\n\nexport const getCategoryTranslation = (\n\tcategory: Category,\n\tlanguage: string\n): CategoryTranslation => {\n\treturn (category?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as CategoryTranslation;\n};\n","import { Card, Container, Flex } from \"@sorocraft/ui\";\n\nimport styles from \"./Branches.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\n\ninterface Props {\n\tbranches: branchModels.Branch[];\n}\n\nconst Branches = ({ branches = [] }: Props) => {\n\treturn (\n\t\t<div className={styles.branches}>\n\t\t\t<Container className={styles.list}>\n\t\t\t\t{branches.map(({ id, name }) => (\n\t\t\t\t\t<a key={id} href=\"/\">\n\t\t\t\t\t\t<Card noBottomMargin>\n\t\t\t\t\t\t\t<Flex justifyContent=\"center\" alignItems=\"center\" fullHeight>\n\t\t\t\t\t\t\t\t<h2 className={styles.name}>{name}</h2>\n\t\t\t\t\t\t\t</Flex>\n\t\t\t\t\t\t</Card>\n\t\t\t\t\t</a>\n\t\t\t\t))}\n\t\t\t</Container>\n\t\t</div>\n\t);\n};\nexport default Branches;\n","import { DivElementMap } from \"@sorocraft/ui\";\nimport { useRef, useState } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as menuModels from \"src/models/menu\";\n\nimport Header from \"./Header\";\nimport Categories from \"./Categories\";\nimport Products from \"./Products\";\nimport Branches from \"./Branches\";\n\ninterface Props {\n\tdata: menuModels.PublicMenuData;\n}\n\nconst PublicMenu = ({ data }: Props) => {\n\tconst {\n\t\tname,\n\t\tcoverImage,\n\t\tlogoImage,\n\t\tbranches = [],\n\t\tbranchId,\n\t\tlanguage,\n\t\tcategories,\n\t\tproducts,\n\t\tcurrency,\n\t\tdefaultCover = \"\",\n\t\tdefaultLogo = \"\",\n\t\tinstagram,\n\t\tfacebook,\n\t\twhatsapp,\n\t\ttelegram,\n\t\ttiktok,\n\t} = data || {};\n\n\tconst hasSingleBranch = branches.length <= 1;\n\tconst selectedBranch = branches.find((item) => item.id === Number(branchId));\n\tconst venueName = hasSingleBranch || !selectedBranch?.name ? name : selectedBranch?.name || \"\";\n\n\tconst coverImageSource = coverImage || defaultCover;\n\tconst logoImageSource = logoImage || defaultLogo;\n\n\tconst [selectedCategoryId, setSelectedCategoryId] = useState<number>(categories?.[0]?.id);\n\tconst productBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToProductBlock = (categoryId: number) => {\n\t\tconst productBlock = productBlocksRef?.current?.[categoryId];\n\t\tif (!productBlock) return;\n\n\t\tproductBlock.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\t};\n\n\tconst handleSelectCategory = (categoryId: number) => {\n\t\tsetSelectedCategoryId(categoryId);\n\n\t\tscrollToProductBlock(categoryId);\n\t};\n\n\tconst handleCategoryInView = (categoryId: number) => {\n\t\tif (categoryId !== selectedCategoryId) {\n\t\t\tsetSelectedCategoryId(categoryId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Header\n\t\t\t\tbranch={selectedBranch}\n\t\t\t\tname={venueName}\n\t\t\t\tcoverImage={coverImageSource}\n\t\t\t\tlogoImage={logoImageSource}\n\t\t\t\tinstagram={instagram}\n\t\t\t\tfacebook={facebook}\n\t\t\t\twhatsapp={whatsapp}\n\t\t\t\ttelegram={telegram}\n\t\t\t\ttiktok={tiktok}\n\t\t\t/>\n\t\t\t{!hasSingleBranch && !branchId ? (\n\t\t\t\t<Branches branches={branches} />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<Categories\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tselectedCategoryId={selectedCategoryId}\n\t\t\t\t\t\tonSelectCategory={handleSelectCategory}\n\t\t\t\t\t/>\n\t\t\t\t\t<Products\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tproducts={products}\n\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tproductBlocksRef={productBlocksRef}\n\t\t\t\t\t\tonCategoryInView={handleCategoryInView}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default PublicMenu;\n"],"names":["Header","branch","coverImage","logoImage","name","instagram","facebook","whatsapp","telegram","tiktok","address","latitude","longitude","phone","noBranch","isEmpty","googleMapLink","_jsxs","className","styles","children","_jsx","src","alt","Column","fullWidth","fullHeight","alignItems","justifyContent","Row","gap","href","target","rel","SVGIcon","icon","MarkerPin","theme","IconLink","Phone","size","shape","Whatsapp","Instagram","Telegram","Tiktok","Facebook","Wifi","Categories","categories","language","selectedCategoryId","onSelectCategory","categoryBlocksRef","useRef","handleSelectCategory","id","categoryId","categoryBlock","_a","current","scrollIntoView","behavior","inline","scrollToCategoryBlock","Carousel","map","translations","find","item","CarouselItem","Chip","onClick","type","UIElementType","BORDERED_PRIMARY","active","ref","el","ProductsListItem","product","currency","price","imageUrl","description","formattedPrice","priceFormatter","container","data","image","Products","memo","products","productBlocksRef","onCategoryInView","groupedProducts","groupBy","handleIntersection","useCallback","entries","bestMatchCategoryId","maxVisibility","forEach","entry","Number","getAttribute","visiblePercentage","intersectionRatio","useEffect","observer","IntersectionObserver","root","threshold","Object","values","block","observe","disconnect","keys","category","_b","call","categoryUtils.getCategoryTranslation","list","prevProps","nextProps","Branches","branches","Container","Card","noBottomMargin","Flex","PublicMenu","branchId","defaultCover","defaultLogo","hasSingleBranch","length","selectedBranch","venueName","coverImageSource","logoImageSource","setSelectedCategoryId","useState","_Fragment","productBlock","scrollToProductBlock"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("react/jsx-runtime"),s=require("react"),r=require("@sorocraft/ui"),n=require("@sorocraft/ui/icons"),i=require("@sorocraft/js-utils"),a="PublicMenu-module_container__QLN6U",t="PublicMenu-module_categories__Iy6NC",c="Header-module_container__tenlF",l="Header-module_cover__BAWZK",o="Header-module_content__Gx4Al",d="Header-module_logo__4MTCm",u="Header-module_info__IchYA",m="Header-module_name__30wyw",h="Header-module_address__WOxXc",g="Header-module_labels__gYyth",_="Header-module_social__AoP0z",j="Header-module_links__EeQxg";const x=({branch:s,coverImage:a,logoImage:t,name:x})=>{const{address:v,latitude:f,longitude:p}=s||{},I=i.isEmpty(s),N=`https://www.google.com/maps/place/${f},${p}`;return e.jsxs("div",{className:c,children:[e.jsx("img",{src:a,alt:x,className:l}),e.jsxs("div",{className:o,children:[I?e.jsx((()=>e.jsxs(r.Column,{fullWidth:!0,fullHeight:!0,alignItems:"center",justifyContent:"center",children:[e.jsx("img",{src:t,alt:x,className:d}),e.jsx("div",{className:u,children:e.jsx("h1",{className:m,children:x})})]})),{}):e.jsx((()=>e.jsxs(r.Row,{gap:1,children:[e.jsx("img",{src:t,alt:x,className:d}),e.jsxs("div",{className:u,children:[e.jsx("h1",{className:m,children:x}),e.jsx("a",{className:h,href:N,target:"_blank",rel:"noopener noreferrer",children:e.jsxs(r.Row,{alignItems:"center",gap:.5,children:[e.jsx(r.SVGIcon,{icon:n.MarkerPin,theme:"dark"}),e.jsx("span",{children:v})]})})]})]})),{}),!I&&e.jsx("div",{className:g,children:e.jsx(r.Column,{alignItems:"center",justifyContent:"center",gap:.75,fullHeight:!0,children:e.jsx(r.IconLink,{icon:n.Wifi,href:"/",size:"sm",shape:"circle"})})})]}),!I&&e.jsx("div",{className:_,children:e.jsx("div",{className:j,children:e.jsxs(r.Row,{alignItems:"center",justifyContent:"center",gap:.5,children:[e.jsx(r.IconLink,{icon:n.Phone,href:"/",size:"sm",shape:"circle",theme:"light"}),e.jsx(r.IconLink,{icon:n.Whatsapp,href:"/",size:"sm",shape:"circle",theme:"light"}),e.jsx(r.IconLink,{icon:n.Instagram,href:"/",size:"sm",shape:"circle",theme:"light"}),e.jsx(r.IconLink,{icon:n.Telegram,href:"/",size:"sm",shape:"circle",theme:"light"}),e.jsx(r.IconLink,{icon:n.Tiktok,href:"/",size:"sm",shape:"circle",theme:"light"}),e.jsx(r.IconLink,{icon:n.Facebook,href:"/",size:"sm",shape:"circle",theme:"light"})]})})})]})},v=({categories:n,language:i,selectedCategoryId:a,onSelectCategory:c})=>{const l=s.useRef({}),o=e=>{(e=>{var s;const r=null===(s=null==l?void 0:l.current)||void 0===s?void 0:s[e];r&&r.scrollIntoView({behavior:"smooth",inline:"center"})})(e),c(e)};return e.jsx("div",{className:t,children:e.jsx(r.Carousel,{gap:1,children:n.map((({id:s,translations:n})=>{const{name:t}=n.find((e=>e.language===i))||{};return e.jsx(r.CarouselItem,{children:e.jsx(r.Chip,{onClick:()=>o(s),type:r.UIElementType.BORDERED_PRIMARY,active:s===a,children:e.jsx("div",{ref:e=>l.current[s]=e,children:t})})},s)}))})})};var f={container:"Products-module_container__bF2LF",header:"Products-module_header__0EFvL",products:"Products-module_products__AoDrY",list:"Products-module_list__LH4v5"};var p={container:"ProductsListItem-module_container__i9tFs",data:"ProductsListItem-module_data__Mb3SF",name:"ProductsListItem-module_name__T1gyJ",description:"ProductsListItem-module_description__oL4CH",image:"ProductsListItem-module_image__h6Wbi",flexWide:"ProductsListItem-module_flexWide__Ds6LE",slidein:"ProductsListItem-module_slidein__rEzMI",fadeInOut:"ProductsListItem-module_fadeInOut__i1FNq",heightAnimation:"ProductsListItem-module_heightAnimation__2fk7l",fadein:"ProductsListItem-module_fadein__tPTJ6",floatAnimation:"ProductsListItem-module_floatAnimation__vugAV"};const I=({product:s,currency:n,language:a})=>{const{translations:t,price:c,imageUrl:l}=s||{},{name:o,description:d}=t.find((e=>e.language===a))||{},u=i.priceFormatter(c,n||"AZN",a);return e.jsx("div",{className:p.container,children:e.jsxs(r.Row,{justifyContent:"space-between",children:[e.jsx("div",{className:p.data,children:e.jsxs(r.Column,{gap:.5,children:[e.jsx("h3",{className:p.name,children:o}),e.jsx("div",{className:p.description,children:d}),e.jsx("div",{className:p.price,children:u})]})}),l&&e.jsx("img",{src:l,alt:o,className:p.image})]})})},N=({products:n,categories:a,currency:t,language:c,productBlocksRef:l,onCategoryInView:o})=>{const d=i.groupBy(n,"categoryId");return s.useEffect((()=>{const e=new IntersectionObserver((e=>{e.forEach((e=>{if(e.isIntersecting){const s=Number(e.target.getAttribute("data-category-id"));o(s)}}))}),{root:null,threshold:.5});return Object.values((null==l?void 0:l.current)||{}).forEach((s=>{s&&e.observe(s)})),()=>{e.disconnect()}}),[l,o]),e.jsx("div",{className:f.container,children:e.jsx(r.Column,{children:Object.keys(d).map((s=>{const n=a.find((({id:e})=>e===Number(s)))||{},{name:i}=((e,s)=>{var r,n;return(null===(n=null===(r=null==e?void 0:e.translations)||void 0===r?void 0:r.find)||void 0===n?void 0:n.call(r,(e=>e.language===s)))||{}})(n,c);return e.jsxs("div",{className:f.products,ref:e=>l.current[n.id]=e,"data-category-id":s,children:[e.jsx("h2",{className:f.category,children:i}),e.jsx("div",{className:f.list,children:e.jsx(r.Column,{gap:2,children:d[s].map((s=>e.jsx(I,{product:s,currency:t,language:c},s.id)))})})]},s)}))})})};var y="Branches-module_branches__sOuoV",b="Branches-module_list__vYoT2",C="Branches-module_name__K0Z-4";const L=({branches:s=[]})=>e.jsx("div",{className:y,children:e.jsx(r.Container,{className:b,children:s.map((({id:s,name:n})=>e.jsx("a",{href:"/",children:e.jsx(r.Card,{noBottomMargin:!0,children:e.jsx(r.Flex,{justifyContent:"center",alignItems:"center",fullHeight:!0,children:e.jsx("h2",{className:C,children:n})})})},s)))})});exports.PublicMenu=({data:r})=>{var n;const{name:i,coverImage:t,logoImage:c,branches:l=[],branchId:o,language:d,categories:u,products:m,currency:h,defaultCover:g="",defaultLogo:_=""}=r||{},j=l.length<=1,f=l.find((e=>e.id===Number(o))),p=j||!(null==f?void 0:f.name)?i:(null==f?void 0:f.name)||"",I=t||g,y=c||_,[b,C]=s.useState(null===(n=null==u?void 0:u[0])||void 0===n?void 0:n.id),P=s.useRef({});return e.jsxs("div",{className:a,children:[e.jsx(x,{branch:f,name:p,coverImage:I,logoImage:y}),j||o?e.jsxs(e.Fragment,{children:[e.jsx(v,{categories:u,language:d,selectedCategoryId:b,onSelectCategory:e=>{C(e),(e=>{var s;const r=null===(s=null==P?void 0:P.current)||void 0===s?void 0:s[e];r&&r.scrollIntoView({behavior:"smooth",block:"start"})})(e)}}),e.jsx(N,{categories:u,products:m,currency:h,language:d,productBlocksRef:P,onCategoryInView:e=>{e!==b&&C(e)}})]}):e.jsx(L,{branches:l})]})};
1
+ "use strict";var e=require("react/jsx-runtime"),s=require("react"),a=require("@sorocraft/ui"),r=require("@sorocraft/ui/icons"),t=require("@sorocraft/js-utils"),n="PublicMenu-module_container__QLN6U",i="PublicMenu-module_categories__Iy6NC",c="Header-module_container__tenlF",o="Header-module_cover__BAWZK",l="Header-module_content__Gx4Al",d="Header-module_logo__4MTCm",m="Header-module_info__IchYA",u="Header-module_name__30wyw",h="Header-module_address__WOxXc",g="Header-module_social__AoP0z",_="Header-module_links__EeQxg";const j=({branch:s,coverImage:n,logoImage:i,name:j,instagram:x,facebook:p,whatsapp:v,telegram:f,tiktok:I})=>{const{address:b,latitude:k,longitude:N,phone:y}=s||{},C=t.isEmpty(s),L=`https://www.google.com/maps/place/${k},${N}`;return e.jsxs("div",{className:c,children:[e.jsx("img",{src:n,alt:j,className:o}),e.jsx("div",{className:l,children:C?e.jsx((()=>e.jsxs(a.Column,{fullWidth:!0,fullHeight:!0,alignItems:"center",justifyContent:"center",children:[e.jsx("img",{src:i,alt:j,className:d}),e.jsx("div",{className:m,children:e.jsx("h1",{className:u,children:j})})]})),{}):e.jsx((()=>e.jsxs(a.Row,{gap:1,children:[e.jsx("img",{src:i,alt:j,className:d}),e.jsxs("div",{className:m,children:[e.jsx("h1",{className:u,children:j}),e.jsx("a",{className:h,href:L,target:"_blank",rel:"noopener noreferrer",children:e.jsxs(a.Row,{alignItems:"center",gap:.5,children:[e.jsx(a.SVGIcon,{icon:r.MarkerPin,theme:"dark"}),e.jsx("span",{children:b})]})})]})]})),{})}),!C&&e.jsx("div",{className:g,children:e.jsx("div",{className:_,children:e.jsxs(a.Row,{gap:2,children:[e.jsxs(a.Row,{alignItems:"center",justifyContent:"center",gap:.5,children:[y&&e.jsx(a.IconLink,{icon:r.Phone,href:`tel:+${y}`,size:"sm",shape:"circle",theme:"light"}),v&&e.jsx(a.IconLink,{icon:r.Whatsapp,href:`https://wa.me/${v}`,size:"sm",shape:"circle",theme:"light",target:"_blank"}),x&&e.jsx(a.IconLink,{icon:r.Instagram,href:x,size:"sm",shape:"circle",theme:"light",target:"_blank"}),f&&e.jsx(a.IconLink,{icon:r.Telegram,href:f,size:"sm",shape:"circle",theme:"light",target:"_blank"}),I&&e.jsx(a.IconLink,{icon:r.Tiktok,href:I,size:"sm",shape:"circle",theme:"light",target:"_blank"}),p&&e.jsx(a.IconLink,{icon:r.Facebook,href:p,size:"sm",shape:"circle",theme:"light",target:"_blank"})]}),e.jsx(a.Row,{children:e.jsx(a.SVGIcon,{icon:r.Wifi,size:"sm"})})]})})})]})},x=({categories:r,language:t,selectedCategoryId:n,onSelectCategory:c})=>{const o=s.useRef({}),l=e=>{(e=>{var s;const a=null===(s=null==o?void 0:o.current)||void 0===s?void 0:s[e];a&&a.scrollIntoView({behavior:"smooth",inline:"center"})})(e),c(e)};return e.jsx("div",{className:i,children:e.jsx(a.Carousel,{gap:1,children:r.map((({id:s,translations:r})=>{const{name:i}=r.find((e=>e.language===t))||{};return e.jsx(a.CarouselItem,{children:e.jsx(a.Chip,{onClick:()=>l(s),type:a.UIElementType.BORDERED_PRIMARY,active:s===n,children:e.jsx("div",{ref:e=>o.current[s]=e,children:i})})},s)}))})})};var p={container:"Products-module_container__bF2LF",header:"Products-module_header__0EFvL",products:"Products-module_products__AoDrY",list:"Products-module_list__LH4v5"};var v={container:"ProductsListItem-module_container__i9tFs",data:"ProductsListItem-module_data__Mb3SF",name:"ProductsListItem-module_name__T1gyJ",description:"ProductsListItem-module_description__oL4CH",image:"ProductsListItem-module_image__h6Wbi",flexWide:"ProductsListItem-module_flexWide__Ds6LE",slidein:"ProductsListItem-module_slidein__rEzMI",fadeInOut:"ProductsListItem-module_fadeInOut__i1FNq",heightAnimation:"ProductsListItem-module_heightAnimation__2fk7l",fadein:"ProductsListItem-module_fadein__tPTJ6",floatAnimation:"ProductsListItem-module_floatAnimation__vugAV"};const f=({product:s,currency:r,language:n})=>{const{translations:i,price:c,imageUrl:o}=s||{},{name:l,description:d}=i.find((e=>e.language===n))||{},m=t.priceFormatter(c,r||"AZN",n);return e.jsx("div",{className:v.container,children:e.jsxs(a.Row,{justifyContent:"space-between",children:[e.jsx("div",{className:v.data,children:e.jsxs(a.Column,{gap:.5,children:[e.jsx("h3",{className:v.name,children:l}),e.jsx("div",{className:v.description,children:d}),e.jsx("div",{className:v.price,children:m})]})}),o&&e.jsx("img",{src:o,alt:l,className:v.image})]})})},I=s.memo((({products:r,categories:n,currency:i,language:c,productBlocksRef:o,onCategoryInView:l})=>{const d=t.groupBy(r,"categoryId"),m=s.useCallback((e=>{let s=null,a=0;e.forEach((e=>{const r=Number(e.target.getAttribute("data-category-id")),t=e.intersectionRatio;t>a&&(a=t,s=r)})),s&&l(s)}),[l]);return s.useEffect((()=>{const e=new IntersectionObserver(m,{root:null,threshold:[.1,.5,.75]});return Object.values((null==o?void 0:o.current)||{}).forEach((s=>{s&&e.observe(s)})),()=>{e.disconnect()}}),[o,m]),e.jsx("div",{className:p.container,children:e.jsx(a.Column,{children:Object.keys(d).map((s=>{const r=n.find((({id:e})=>e===Number(s)))||{},{name:t}=((e,s)=>{var a,r;return(null===(r=null===(a=null==e?void 0:e.translations)||void 0===a?void 0:a.find)||void 0===r?void 0:r.call(a,(e=>e.language===s)))||{}})(r,c);return e.jsxs("div",{className:p.products,ref:e=>o.current[r.id]=e,"data-category-id":s,children:[e.jsx("h2",{className:p.category,children:t}),e.jsx("div",{className:p.list,children:e.jsx(a.Column,{gap:2,children:d[s].map((s=>e.jsx(f,{product:s,currency:i,language:c},s.id)))})})]},s)}))})})}),((e,s)=>e.products===s.products&&e.categories===s.categories&&e.currency===s.currency&&e.language===s.language));var b="Branches-module_branches__sOuoV",k="Branches-module_list__vYoT2",N="Branches-module_name__K0Z-4";const y=({branches:s=[]})=>e.jsx("div",{className:b,children:e.jsx(a.Container,{className:k,children:s.map((({id:s,name:r})=>e.jsx("a",{href:"/",children:e.jsx(a.Card,{noBottomMargin:!0,children:e.jsx(a.Flex,{justifyContent:"center",alignItems:"center",fullHeight:!0,children:e.jsx("h2",{className:N,children:r})})})},s)))})});exports.PublicMenu=({data:a})=>{var r;const{name:t,coverImage:i,logoImage:c,branches:o=[],branchId:l,language:d,categories:m,products:u,currency:h,defaultCover:g="",defaultLogo:_="",instagram:p,facebook:v,whatsapp:f,telegram:b,tiktok:k}=a||{},N=o.length<=1,C=o.find((e=>e.id===Number(l))),L=N||!(null==C?void 0:C.name)?t:(null==C?void 0:C.name)||"",P=i||g,w=c||_,[R,A]=s.useState(null===(r=null==m?void 0:m[0])||void 0===r?void 0:r.id),H=s.useRef({});return e.jsxs("div",{className:n,children:[e.jsx(j,{branch:C,name:L,coverImage:P,logoImage:w,instagram:p,facebook:v,whatsapp:f,telegram:b,tiktok:k}),N||l?e.jsxs(e.Fragment,{children:[e.jsx(x,{categories:m,language:d,selectedCategoryId:R,onSelectCategory:e=>{A(e),(e=>{var s;const a=null===(s=null==H?void 0:H.current)||void 0===s?void 0:s[e];a&&a.scrollIntoView({behavior:"smooth",block:"start"})})(e)}}),e.jsx(I,{categories:m,products:u,currency:h,language:d,productBlocksRef:H,onCategoryInView:e=>{e!==R&&A(e)}})]}):e.jsx(y,{branches:o})]})};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/PublicMenu/Header/Header.tsx","../src/components/PublicMenu/Categories.tsx","../src/components/PublicMenu/PublicMenu.constants.ts","../src/components/PublicMenu/ProductsListItem/ProductsListItem.tsx","../src/components/PublicMenu/Products/Products.tsx","../src/utils/category.ts","../src/components/PublicMenu/Branches/Branches.tsx","../src/components/PublicMenu/PublicMenu.tsx"],"sourcesContent":["import { Column, IconLink, Row, SVGIcon } from \"@sorocraft/ui\";\nimport {\n\tMarkerPin,\n\tPhone,\n\tWifi,\n\tInstagram,\n\tWhatsapp,\n\tTiktok,\n\tFacebook,\n\tTelegram,\n} from \"@sorocraft/ui/icons\";\nimport { isEmpty } from \"@sorocraft/js-utils\";\n\nimport styles from \"./Header.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\n\ninterface Props {\n\tbranch?: branchModels.Branch;\n\tcoverImage?: string;\n\tlogoImage?: string;\n\tname: string;\n}\n\nconst Header = ({ branch, coverImage, logoImage, name }: Props) => {\n\tconst { address, latitude, longitude } = branch || {};\n\tconst noBranch = isEmpty(branch);\n\n\tconst googleMapLink = `https://www.google.com/maps/place/${latitude},${longitude}`;\n\n\tconst BranchInfo = () => (\n\t\t<Row gap={1}>\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\n\t\t\t\t<a\n\t\t\t\t\tclassName={styles.address}\n\t\t\t\t\thref={googleMapLink}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t<Row alignItems=\"center\" gap={0.5}>\n\t\t\t\t\t\t<SVGIcon icon={MarkerPin} theme=\"dark\" />\n\t\t\t\t\t\t<span>{address}</span>\n\t\t\t\t\t</Row>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</Row>\n\t);\n\n\tconst BusinessInfo = () => (\n\t\t<Column fullWidth fullHeight alignItems=\"center\" justifyContent=\"center\">\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\t\t\t</div>\n\t\t</Column>\n\t);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<img src={coverImage} alt={name} className={styles.cover} />\n\t\t\t<div className={styles.content}>\n\t\t\t\t{noBranch ? <BusinessInfo /> : <BranchInfo />}\n\t\t\t\t{!noBranch && (\n\t\t\t\t\t<div className={styles.labels}>\n\t\t\t\t\t\t<Column alignItems=\"center\" justifyContent=\"center\" gap={0.75} fullHeight>\n\t\t\t\t\t\t\t<IconLink icon={Wifi} href=\"/\" size=\"sm\" shape=\"circle\" />\n\t\t\t\t\t\t</Column>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!noBranch && (\n\t\t\t\t<div className={styles.social}>\n\t\t\t\t\t<div className={styles.links}>\n\t\t\t\t\t\t<Row alignItems=\"center\" justifyContent=\"center\" gap={0.5}>\n\t\t\t\t\t\t\t<IconLink icon={Phone} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Whatsapp} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Instagram} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Telegram} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Tiktok} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t\t<IconLink icon={Facebook} href=\"/\" size=\"sm\" shape=\"circle\" theme=\"light\" />\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default Header;\n","import { Carousel, CarouselItem, Chip, DivElementMap, UIElementType } from \"@sorocraft/ui\";\nimport { useRef } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as categoryModels from \"src/models/category\";\n\ninterface Props {\n\tcategories: categoryModels.Category[];\n\tlanguage: string;\n\tselectedCategoryId: number;\n\tonSelectCategory: (id: number) => void;\n}\n\nconst Categories = ({ categories, language, selectedCategoryId, onSelectCategory }: Props) => {\n\tconst categoryBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToCategoryBlock = (categoryId: number) => {\n\t\tconst categoryBlock = categoryBlocksRef?.current?.[categoryId];\n\t\tif (!categoryBlock) return;\n\n\t\tcategoryBlock.scrollIntoView({ behavior: \"smooth\", inline: \"center\" });\n\t};\n\n\tconst handleSelectCategory = (id: number) => {\n\t\tscrollToCategoryBlock(id);\n\t\tonSelectCategory(id);\n\t};\n\n\treturn (\n\t\t<div className={styles.categories}>\n\t\t\t<Carousel gap={1}>\n\t\t\t\t{categories.map(({ id, translations }) => {\n\t\t\t\t\tconst { name } = translations.find((item) => item.language === language) || {};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CarouselItem key={id}>\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tonClick={() => handleSelectCategory(id)}\n\t\t\t\t\t\t\t\ttype={UIElementType.BORDERED_PRIMARY}\n\t\t\t\t\t\t\t\tactive={id === selectedCategoryId}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div ref={(el) => (categoryBlocksRef.current[id] = el)}>{name}</div>\n\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t</CarouselItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Carousel>\n\t\t</div>\n\t);\n};\nexport default Categories;\n","export const DEFAULT_CURRENCY = \"AZN\";\n","import { Column, Row } from \"@sorocraft/ui\";\nimport { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport styles from \"./ProductsListItem.module.scss\";\n\nimport * as productModels from \"src/models/product\";\n\nimport { DEFAULT_CURRENCY } from \"../PublicMenu.constants\";\n\ninterface Props {\n\tproduct: productModels.Product;\n\tcurrency: string;\n\tlanguage: string;\n}\n\nconst ProductsListItem = ({ product, currency, language }: Props) => {\n\tconst { translations, price, imageUrl } = product || {};\n\tconst { name, description } = translations.find((item) => item.language === language) || {};\n\tconst formattedPrice = priceFormatter(price, currency || DEFAULT_CURRENCY, language);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Row justifyContent=\"space-between\">\n\t\t\t\t<div className={styles.data}>\n\t\t\t\t\t<Column gap={0.5}>\n\t\t\t\t\t\t<h3 className={styles.name}>{name}</h3>\n\t\t\t\t\t\t<div className={styles.description}>{description}</div>\n\t\t\t\t\t\t<div className={styles.price}>{formattedPrice}</div>\n\t\t\t\t\t</Column>\n\t\t\t\t</div>\n\t\t\t\t{imageUrl && <img src={imageUrl} alt={name} className={styles.image} />}\n\t\t\t</Row>\n\t\t</div>\n\t);\n};\nexport default ProductsListItem;\n","import { RefObject, useEffect } from \"react\";\nimport { Column, DivElementMap } from \"@sorocraft/ui\";\nimport { groupBy } from \"@sorocraft/js-utils\";\n\nimport styles from \"./Products.module.scss\";\n\nimport * as productModels from \"src/models/product\";\nimport * as categoryModels from \"src/models/category\";\nimport * as categoryUtils from \"src/utils/category\";\n\nimport ProductsListItem from \"../ProductsListItem\";\n\ninterface Props {\n\tproducts: productModels.Product[];\n\tcategories: categoryModels.Category[];\n\tproductBlocksRef: RefObject<DivElementMap>;\n\tcurrency: string;\n\tlanguage: string;\n\tonCategoryInView: (categoryId: number) => void;\n}\n\nconst Products = ({\n\tproducts,\n\tcategories,\n\tcurrency,\n\tlanguage,\n\tproductBlocksRef,\n\tonCategoryInView,\n}: Props) => {\n\t// const [layout, setLayout] = useState<\"list\" | \"grid\">(\"list\");\n\n\tconst groupedProducts = groupBy(products, \"categoryId\");\n\n\tuseEffect(() => {\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\tconst categoryId = Number(entry.target.getAttribute(\"data-category-id\"));\n\t\t\t\t\t\tonCategoryInView(categoryId); // Notify the parent when a category is in view\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: null, // Use the viewport as the container\n\t\t\t\tthreshold: 0.5, // Trigger when 50% of the product block is in view\n\t\t\t}\n\t\t);\n\n\t\tObject.values(productBlocksRef?.current || {}).forEach((block) => {\n\t\t\tif (block) {\n\t\t\t\tobserver.observe(block);\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tobserver.disconnect(); // Clean up the observer on component unmount\n\t\t};\n\t}, [productBlocksRef, onCategoryInView]);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t{/* <div className={styles.header}>\n\t\t\t\t<Row>\n\t\t\t\t\t<IconButton icon={List} onClick={() => setLayout(\"list\")} isActive={layout === \"list\"} />\n\t\t\t\t\t<IconButton icon={Grid} onClick={() => setLayout(\"grid\")} isActive={layout === \"grid\"} />\n\t\t\t\t</Row>\n\t\t\t</div> */}\n\t\t\t<Column>\n\t\t\t\t{Object.keys(groupedProducts).map((categoryId) => {\n\t\t\t\t\tconst category = (categories.find(({ id }) => id === Number(categoryId)) ||\n\t\t\t\t\t\t{}) as categoryModels.Category;\n\t\t\t\t\tconst { name } = categoryUtils.getCategoryTranslation(category, language);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={styles.products}\n\t\t\t\t\t\t\tkey={categoryId}\n\t\t\t\t\t\t\tref={(el) => (productBlocksRef!.current![category.id] = el)}\n\t\t\t\t\t\t\tdata-category-id={categoryId}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h2 className={styles.category}>{name}</h2>\n\t\t\t\t\t\t\t<div className={styles.list}>\n\t\t\t\t\t\t\t\t<Column gap={2}>\n\t\t\t\t\t\t\t\t\t{groupedProducts[categoryId].map((product) => (\n\t\t\t\t\t\t\t\t\t\t<ProductsListItem\n\t\t\t\t\t\t\t\t\t\t\tproduct={product}\n\t\t\t\t\t\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\t\t\t\t\t\tkey={product.id}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</Column>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Column>\n\t\t</div>\n\t);\n};\nexport default Products;\n","import { Category, CategoryTranslation } from \"src/models/category\";\n\nexport const getCategoryTranslation = (\n\tcategory: Category,\n\tlanguage: string\n): CategoryTranslation => {\n\treturn (category?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as CategoryTranslation;\n};\n","import { Card, Container, Flex } from \"@sorocraft/ui\";\n\nimport styles from \"./Branches.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\n\ninterface Props {\n\tbranches: branchModels.Branch[];\n}\n\nconst Branches = ({ branches = [] }: Props) => {\n\treturn (\n\t\t<div className={styles.branches}>\n\t\t\t<Container className={styles.list}>\n\t\t\t\t{branches.map(({ id, name }) => (\n\t\t\t\t\t<a key={id} href=\"/\">\n\t\t\t\t\t\t<Card noBottomMargin>\n\t\t\t\t\t\t\t<Flex justifyContent=\"center\" alignItems=\"center\" fullHeight>\n\t\t\t\t\t\t\t\t<h2 className={styles.name}>{name}</h2>\n\t\t\t\t\t\t\t</Flex>\n\t\t\t\t\t\t</Card>\n\t\t\t\t\t</a>\n\t\t\t\t))}\n\t\t\t</Container>\n\t\t</div>\n\t);\n};\nexport default Branches;\n","import { DivElementMap } from \"@sorocraft/ui\";\nimport { useRef, useState } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as menuModels from \"src/models/menu\";\n\nimport Header from \"./Header\";\nimport Categories from \"./Categories\";\nimport Products from \"./Products\";\nimport Branches from \"./Branches\";\n\ninterface Props {\n\tdata: menuModels.PublicMenuData;\n}\n\nconst PublicMenu = ({ data }: Props) => {\n\tconst {\n\t\tname,\n\t\tcoverImage,\n\t\tlogoImage,\n\t\tbranches = [],\n\t\tbranchId,\n\t\tlanguage,\n\t\tcategories,\n\t\tproducts,\n\t\tcurrency,\n\t\tdefaultCover = \"\",\n\t\tdefaultLogo = \"\",\n\t} = data || {};\n\n\tconst hasSingleBranch = branches.length <= 1;\n\tconst selectedBranch = branches.find((item) => item.id === Number(branchId));\n\tconst venueName = hasSingleBranch || !selectedBranch?.name ? name : selectedBranch?.name || \"\";\n\n\tconst coverImageSource = coverImage || defaultCover;\n\tconst logoImageSource = logoImage || defaultLogo;\n\n\tconst [selectedCategoryId, setSelectedCategoryId] = useState<number>(categories?.[0]?.id);\n\tconst productBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToProductBlock = (categoryId: number) => {\n\t\tconst productBlock = productBlocksRef?.current?.[categoryId];\n\t\tif (!productBlock) return;\n\n\t\tproductBlock.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\t};\n\n\tconst handleSelectCategory = (categoryId: number) => {\n\t\tsetSelectedCategoryId(categoryId);\n\n\t\tscrollToProductBlock(categoryId);\n\t};\n\n\tconst handleCategoryInView = (categoryId: number) => {\n\t\tif (categoryId !== selectedCategoryId) {\n\t\t\tsetSelectedCategoryId(categoryId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Header\n\t\t\t\tbranch={selectedBranch}\n\t\t\t\tname={venueName}\n\t\t\t\tcoverImage={coverImageSource}\n\t\t\t\tlogoImage={logoImageSource}\n\t\t\t/>\n\t\t\t{!hasSingleBranch && !branchId ? (\n\t\t\t\t<Branches branches={branches} />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<Categories\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tselectedCategoryId={selectedCategoryId}\n\t\t\t\t\t\tonSelectCategory={handleSelectCategory}\n\t\t\t\t\t/>\n\t\t\t\t\t<Products\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tproducts={products}\n\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tproductBlocksRef={productBlocksRef}\n\t\t\t\t\t\tonCategoryInView={handleCategoryInView}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default PublicMenu;\n"],"names":["Header","branch","coverImage","logoImage","name","address","latitude","longitude","noBranch","isEmpty","googleMapLink","_jsxs","jsxs","className","styles","children","_jsx","jsx","src","alt","Column","fullWidth","fullHeight","alignItems","justifyContent","Row","gap","href","target","rel","SVGIcon","icon","MarkerPin","theme","IconLink","Wifi","size","shape","Phone","Whatsapp","Instagram","Telegram","Tiktok","Facebook","Categories","categories","language","selectedCategoryId","onSelectCategory","categoryBlocksRef","useRef","handleSelectCategory","id","categoryId","categoryBlock","_a","current","scrollIntoView","behavior","inline","scrollToCategoryBlock","Carousel","map","translations","find","item","CarouselItem","Chip","onClick","type","UIElementType","BORDERED_PRIMARY","active","ref","el","ProductsListItem","product","currency","price","imageUrl","description","formattedPrice","priceFormatter","container","data","image","Products","products","productBlocksRef","onCategoryInView","groupedProducts","groupBy","useEffect","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","Number","getAttribute","root","threshold","Object","values","block","observe","disconnect","keys","category","_b","call","categoryUtils.getCategoryTranslation","list","Branches","branches","Container","Card","noBottomMargin","Flex","branchId","defaultCover","defaultLogo","hasSingleBranch","length","selectedBranch","venueName","coverImageSource","logoImageSource","setSelectedCategoryId","useState","_Fragment","Fragment","productBlock","scrollToProductBlock"],"mappings":"4iBAwBA,MAAMA,EAAS,EAAGC,SAAQC,aAAYC,YAAWC,WAChD,MAAMC,QAAEA,EAAOC,SAAEA,EAAQC,UAAEA,GAAcN,GAAU,CAAA,EAC7CO,EAAWC,UAAQR,GAEnBS,EAAgB,qCAAqCJ,KAAYC,IAgCvE,OACCI,EAAAC,KAAA,MAAA,CAAKC,UAAWC,EAAgBC,SAAA,CAC/BC,EAAKC,IAAA,MAAA,CAAAC,IAAKhB,EAAYiB,IAAKf,EAAMS,UAAWC,IAC5CH,EAAAA,KAAK,MAAA,CAAAE,UAAWC,YACdN,EAAWQ,EAACC,KAbK,IACpBN,EAAAC,KAACQ,SAAM,CAACC,WAAS,EAACC,YAAU,EAACC,WAAW,SAASC,eAAe,SAC/DT,SAAA,CAAAC,MAAA,MAAA,CAAKE,IAAKf,EAAWgB,IAAKf,EAAMS,UAAWC,IAC3CE,EAAAA,IAAK,MAAA,CAAAH,UAAWC,WACfE,EAAIC,IAAA,KAAA,CAAAJ,UAAWC,EAAcC,SAAAX,UASD,IAAGY,OAlCf,IAClBL,OAACc,EAAAA,IAAI,CAAAC,IAAK,EAACX,SAAA,CACVC,aAAKE,IAAKf,EAAWgB,IAAKf,EAAMS,UAAWC,IAC3CH,cAAKE,UAAWC,YACfE,MAAI,KAAA,CAAAH,UAAWC,EAAcC,SAAAX,IAE7BY,EACCC,IAAA,IAAA,CAAAJ,UAAWC,EACXa,KAAMjB,EACNkB,OAAO,SACPC,IAAI,sBAEJd,SAAAJ,EAAAC,KAACa,EAAGA,IAAC,CAAAF,WAAW,SAASG,IAAK,GAAGX,SAAA,CAChCC,EAAAA,IAACc,EAAAA,QAAO,CAACC,KAAMC,YAAWC,MAAM,SAChCjB,uBAAOX,gBAoBoC,CAAA,IAC3CG,GACDQ,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAaC,SAC5BC,MAACI,EAAAA,OAAM,CAACG,WAAW,SAASC,eAAe,SAASE,IAAK,IAAMJ,YAC9D,EAAAP,SAAAC,EAAAC,IAACiB,WAAQ,CAACH,KAAMI,OAAMR,KAAK,IAAIS,KAAK,KAAKC,MAAM,mBAKjD7B,GACDQ,EAAKC,IAAA,MAAA,CAAAJ,UAAWC,EACfC,SAAAC,MAAA,MAAA,CAAKH,UAAWC,EACfC,SAAAJ,EAAAA,KAACc,EAAGA,IAAA,CAACF,WAAW,SAASC,eAAe,SAASE,IAAK,GAAGX,SAAA,CACxDC,EAAAA,IAACkB,EAAQA,SAAC,CAAAH,KAAMO,EAAKA,MAAEX,KAAK,IAAIS,KAAK,KAAKC,MAAM,SAASJ,MAAM,UAC/DjB,EAACC,IAAAiB,WAAS,CAAAH,KAAMQ,EAAAA,SAAUZ,KAAK,IAAIS,KAAK,KAAKC,MAAM,SAASJ,MAAM,UAClEjB,MAACkB,EAAAA,UAASH,KAAMS,EAAAA,UAAWb,KAAK,IAAIS,KAAK,KAAKC,MAAM,SAASJ,MAAM,UACnEjB,EAAAC,IAACiB,EAAQA,SAAA,CAACH,KAAMU,WAAUd,KAAK,IAAIS,KAAK,KAAKC,MAAM,SAASJ,MAAM,UAClEjB,EAAAC,IAACiB,WAAQ,CAACH,KAAMW,EAAAA,OAAQf,KAAK,IAAIS,KAAK,KAAKC,MAAM,SAASJ,MAAM,UAChEjB,EAAAA,IAACkB,EAAQA,SAAC,CAAAH,KAAMY,WAAUhB,KAAK,IAAIS,KAAK,KAAKC,MAAM,SAASJ,MAAM,mBAMtE,EC1EGW,EAAa,EAAGC,aAAYC,WAAUC,qBAAoBC,uBAC/D,MAAMC,EAAoBC,SAAsB,CAAA,GAS1CC,EAAwBC,IAPA,CAACC,UAC9B,MAAMC,EAA6C,QAA7BC,EAAAN,aAAA,EAAAA,EAAmBO,eAAU,IAAAD,OAAA,EAAAA,EAAAF,GAC9CC,GAELA,EAAcG,eAAe,CAAEC,SAAU,SAAUC,OAAQ,UAAW,EAItEC,CAAsBR,GACtBJ,EAAiBI,EAAG,EAGrB,OACCpC,EAAAA,IAAK,MAAA,CAAAH,UAAWC,EACfC,SAAAC,MAAC6C,EAAAA,SAAQ,CAACnC,IAAK,EACbX,SAAA8B,EAAWiB,KAAI,EAAGV,KAAIW,mBACtB,MAAM3D,KAAEA,GAAS2D,EAAaC,MAAMC,GAASA,EAAKnB,WAAaA,KAAa,GAE5E,OACC9B,EAAAA,IAACkD,EAAAA,aACA,CAAAnD,SAAAC,EAAAC,IAACkD,EAAIA,KACJ,CAAAC,QAAS,IAAMjB,EAAqBC,GACpCiB,KAAMC,EAAAA,cAAcC,iBACpBC,OAAQpB,IAAOL,EAEfhC,SAAAC,EAAAC,IAAA,MAAA,CAAKwD,IAAMC,GAAQzB,EAAkBO,QAAQJ,GAAMsB,EAAM3D,SAAAX,OANxCgD,EASlB,OAIJ,6uBCjDI,MCeDuB,EAAmB,EAAGC,UAASC,WAAU/B,eAC9C,MAAMiB,aAAEA,EAAYe,MAAEA,EAAKC,SAAEA,GAAaH,GAAW,CAAA,GAC/CxE,KAAEA,EAAI4E,YAAEA,GAAgBjB,EAAaC,MAAMC,GAASA,EAAKnB,WAAaA,KAAa,CAAA,EACnFmC,EAAiBC,EAAAA,eAAeJ,EAAOD,GDlBd,MCkB4C/B,GAE3E,OACC9B,EAAAA,IAAK,MAAA,CAAAH,UAAWC,EAAOqE,UAASpE,SAC/BJ,EAAAA,KAACc,EAAAA,KAAID,eAAe,gBACnBT,SAAA,CAAAC,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAOsE,cACtBzE,EAAAA,KAACS,EAAAA,OAAO,CAAAM,IAAK,GAAGX,SAAA,CACfC,EAAIC,IAAA,KAAA,CAAAJ,UAAWC,EAAOV,KAAOW,SAAAX,IAC7BY,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAOkE,YAAcjE,SAAAiE,IACrChE,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAOgE,eAAQG,SAGhCF,GAAY/D,aAAKE,IAAK6D,EAAU5D,IAAKf,EAAMS,UAAWC,EAAOuE,YAG/D,ECZGC,EAAW,EAChBC,WACA1C,aACAgC,WACA/B,WACA0C,mBACAC,uBAIA,MAAMC,EAAkBC,EAAAA,QAAQJ,EAAU,cA6B1C,OA3BAK,EAAAA,WAAU,KACT,MAAMC,EAAW,IAAIC,sBACnBC,IACAA,EAAQC,SAASC,IAChB,GAAIA,EAAMC,eAAgB,CACzB,MAAM7C,EAAa8C,OAAOF,EAAMrE,OAAOwE,aAAa,qBACpDX,EAAiBpC,EACjB,IACA,GAEH,CACCgD,KAAM,KACNC,UAAW,KAUb,OANAC,OAAOC,QAAOhB,eAAAA,EAAkBhC,UAAW,CAAA,GAAIwC,SAASS,IACnDA,GACHZ,EAASa,QAAQD,EACjB,IAGK,KACNZ,EAASc,YAAY,CACrB,GACC,CAACnB,EAAkBC,IAGrBzE,EAAAA,WAAKH,UAAWC,EAAOqE,UAOtBpE,SAAAC,EAAAC,IAACG,EAAMA,OAAA,CAAAL,SACLwF,OAAOK,KAAKlB,GAAiB5B,KAAKT,IAClC,MAAMwD,EAAYhE,EAAWmB,MAAK,EAAGZ,QAASA,IAAO+C,OAAO9C,MAC3D,CAAA,GACKjD,KAAEA,GCtEyB,EACrCyG,EACA/D,aAEA,OAAuC,QAA/BgE,EAAsB,QAAtBvD,EAAAsD,aAAQ,EAARA,EAAU9C,oBAAY,IAAAR,OAAA,EAAAA,EAAES,YAAO,IAAA8C,OAAA,EAAAA,EAAAC,KAAAxD,GAACU,GAASA,EAAKnB,WAAaA,MAClE,EAA2B,EDiEPkE,CAAqCH,EAAU/D,GAEhE,OACCnC,cACCE,UAAWC,EAAOyE,SAElBd,IAAMC,GAAQc,EAAkBhC,QAASqD,EAASzD,IAAMsB,EAAG,mBACzCrB,EAElBtC,SAAA,CAAAC,EAAAC,IAAA,KAAA,CAAIJ,UAAWC,EAAO+F,SAAQ9F,SAAGX,IACjCY,EAAAA,WAAKH,UAAWC,EAAOmG,KAAIlG,SAC1BC,EAAAA,IAACI,EAAAA,OAAM,CAACM,IAAK,WACXgE,EAAgBrC,GAAYS,KAAKc,GACjC5D,EAAAC,IAAC0D,EACA,CAAAC,QAASA,EACTC,SAAUA,EACV/B,SAAUA,GACL8B,EAAQxB,YAZZC,EAkBL,OAIJ,0GEzFH,MAAM6D,EAAW,EAAGC,WAAW,MAE7BnG,EAAAC,IAAA,MAAA,CAAKJ,UAAWC,EACfC,SAAAC,EAAAA,IAACoG,EAAAA,UAAU,CAAAvG,UAAWC,EAAWC,SAC/BoG,EAASrD,KAAI,EAAGV,KAAIhD,UACpBY,EAAYC,IAAA,IAAA,CAAAU,KAAK,IAAGZ,SACnBC,EAAAA,IAACqG,EAAAA,KAAK,CAAAC,gBACL,EAAAvG,SAAAC,EAAAA,IAACuG,EAAIA,KAAC,CAAA/F,eAAe,SAASD,WAAW,SAASD,YACjD,EAAAP,SAAAC,EAAAA,IAAA,KAAA,CAAIH,UAAWC,EAAcC,SAAAX,SAHxBgD,4BCCM,EAAGgC,iBACrB,MAAMhF,KACLA,EAAIF,WACJA,EAAUC,UACVA,EAASgH,SACTA,EAAW,GAAEK,SACbA,EAAQ1E,SACRA,EAAQD,WACRA,EAAU0C,SACVA,EAAQV,SACRA,EAAQ4C,aACRA,EAAe,GAAEC,YACjBA,EAAc,IACXtC,GAAQ,GAENuC,EAAkBR,EAASS,QAAU,EACrCC,EAAiBV,EAASnD,MAAMC,GAASA,EAAKb,KAAO+C,OAAOqB,KAC5DM,EAAYH,KAAoBE,aAAc,EAAdA,EAAgBzH,MAAOA,GAAOyH,aAAc,EAAdA,EAAgBzH,OAAQ,GAEtF2H,EAAmB7H,GAAcuH,EACjCO,EAAkB7H,GAAauH,GAE9B3E,EAAoBkF,GAAyBC,EAAQA,SAA0B,QAAjB3E,EAAAV,aAAU,EAAVA,EAAa,UAAI,IAAAU,OAAA,EAAAA,EAAAH,IAChFoC,EAAmBtC,SAAsB,CAAA,GAqB/C,OACCvC,cAAKE,UAAWC,EACfC,SAAA,CAAAC,EAAAC,IAACjB,EAAM,CACNC,OAAQ4H,EACRzH,KAAM0H,EACN5H,WAAY6H,EACZ5H,UAAW6H,IAEVL,GAAoBH,EAGrB7G,EAAAC,KAAAuH,EAAAC,SAAA,CAAArH,SAAA,CACCC,MAAC4B,EAAU,CACVC,WAAYA,EACZC,SAAUA,EACVC,mBAAoBA,EACpBC,iBA5ByBK,IAC7B4E,EAAsB5E,GARM,CAACA,UAC7B,MAAMgF,EAA2C,QAA5B9E,EAAAiC,aAAA,EAAAA,EAAkBhC,eAAU,IAAAD,OAAA,EAAAA,EAAAF,GAC5CgF,GAELA,EAAa5E,eAAe,CAAEC,SAAU,SAAU+C,MAAO,SAAU,EAMnE6B,CAAqBjF,EAAW,IA2B7BrC,EAAAA,IAACsE,EACA,CAAAzC,WAAYA,EACZ0C,SAAUA,EACVV,SAAUA,EACV/B,SAAUA,EACV0C,iBAAkBA,EAClBC,iBA9ByBpC,IACzBA,IAAeN,GAClBkF,EAAsB5E,EACtB,OAYCrC,EAAAA,IAACkG,EAAQ,CAACC,SAAUA,MAoBrB"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/PublicMenu/Header/Header.tsx","../src/components/PublicMenu/Categories.tsx","../src/components/PublicMenu/PublicMenu.constants.ts","../src/components/PublicMenu/ProductsListItem/ProductsListItem.tsx","../src/components/PublicMenu/Products/Products.tsx","../src/utils/category.ts","../src/components/PublicMenu/Branches/Branches.tsx","../src/components/PublicMenu/PublicMenu.tsx"],"sourcesContent":["import { Column, IconLink, Row, SVGIcon } from \"@sorocraft/ui\";\nimport {\n\tMarkerPin,\n\tPhone,\n\tWifi,\n\tInstagram,\n\tWhatsapp,\n\tTiktok,\n\tFacebook,\n\tTelegram,\n} from \"@sorocraft/ui/icons\";\nimport { isEmpty } from \"@sorocraft/js-utils\";\n\nimport styles from \"./Header.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\nimport * as menuModels from \"src/models/menu\";\n\ninterface Props\n\textends Pick<\n\t\tmenuModels.PublicMenuData,\n\t\t| \"coverImage\"\n\t\t| \"logoImage\"\n\t\t| \"name\"\n\t\t| \"instagram\"\n\t\t| \"facebook\"\n\t\t| \"whatsapp\"\n\t\t| \"telegram\"\n\t\t| \"tiktok\"\n\t> {\n\tbranch?: branchModels.Branch;\n}\n\nconst Header = ({\n\tbranch,\n\tcoverImage,\n\tlogoImage,\n\tname,\n\tinstagram,\n\tfacebook,\n\twhatsapp,\n\ttelegram,\n\ttiktok,\n}: Props) => {\n\tconst { address, latitude, longitude, phone } = branch || {};\n\tconst noBranch = isEmpty(branch);\n\n\tconst googleMapLink = `https://www.google.com/maps/place/${latitude},${longitude}`;\n\n\t// const languageOptions = useMemo(\n\t// \t() =>\n\t// \t\t[\"az\", \"en\"].map((language) => ({\n\t// \t\t\tvalue: language,\n\t// \t\t\tlabel: language,\n\t// \t\t})),\n\t// \t[]\n\t// );\n\n\tconst BranchInfo = () => (\n\t\t<Row gap={1}>\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\n\t\t\t\t<a\n\t\t\t\t\tclassName={styles.address}\n\t\t\t\t\thref={googleMapLink}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t<Row alignItems=\"center\" gap={0.5}>\n\t\t\t\t\t\t<SVGIcon icon={MarkerPin} theme=\"dark\" />\n\t\t\t\t\t\t<span>{address}</span>\n\t\t\t\t\t</Row>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</Row>\n\t);\n\n\tconst BusinessInfo = () => (\n\t\t<Column fullWidth fullHeight alignItems=\"center\" justifyContent=\"center\">\n\t\t\t<img src={logoImage} alt={name} className={styles.logo} />\n\t\t\t<div className={styles.info}>\n\t\t\t\t<h1 className={styles.name}>{name}</h1>\n\t\t\t</div>\n\t\t</Column>\n\t);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<img src={coverImage} alt={name} className={styles.cover} />\n\t\t\t<div className={styles.content}>{noBranch ? <BusinessInfo /> : <BranchInfo />}</div>\n\t\t\t{!noBranch && (\n\t\t\t\t<div className={styles.social}>\n\t\t\t\t\t<div className={styles.links}>\n\t\t\t\t\t\t<Row gap={2}>\n\t\t\t\t\t\t\t<Row alignItems=\"center\" justifyContent=\"center\" gap={0.5}>\n\t\t\t\t\t\t\t\t{phone && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Phone}\n\t\t\t\t\t\t\t\t\t\thref={`tel:+${phone}`}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{whatsapp && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Whatsapp}\n\t\t\t\t\t\t\t\t\t\thref={`https://wa.me/${whatsapp}`}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{instagram && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Instagram}\n\t\t\t\t\t\t\t\t\t\thref={instagram}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{telegram && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Telegram}\n\t\t\t\t\t\t\t\t\t\thref={telegram}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{tiktok && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Tiktok}\n\t\t\t\t\t\t\t\t\t\thref={tiktok}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{facebook && (\n\t\t\t\t\t\t\t\t\t<IconLink\n\t\t\t\t\t\t\t\t\t\ticon={Facebook}\n\t\t\t\t\t\t\t\t\t\thref={facebook}\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\t\t\t\t\t\ttheme=\"light\"\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Row>\n\t\t\t\t\t\t\t<Row>\n\t\t\t\t\t\t\t\t<SVGIcon icon={Wifi} size=\"sm\" />\n\t\t\t\t\t\t\t</Row>\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default Header;\n","import { Carousel, CarouselItem, Chip, DivElementMap, UIElementType } from \"@sorocraft/ui\";\nimport { useRef } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as categoryModels from \"src/models/category\";\n\ninterface Props {\n\tcategories: categoryModels.Category[];\n\tlanguage: string;\n\tselectedCategoryId: number;\n\tonSelectCategory: (id: number) => void;\n}\n\nconst Categories = ({ categories, language, selectedCategoryId, onSelectCategory }: Props) => {\n\tconst categoryBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToCategoryBlock = (categoryId: number) => {\n\t\tconst categoryBlock = categoryBlocksRef?.current?.[categoryId];\n\t\tif (!categoryBlock) return;\n\n\t\tcategoryBlock.scrollIntoView({ behavior: \"smooth\", inline: \"center\" });\n\t};\n\n\tconst handleSelectCategory = (id: number) => {\n\t\tscrollToCategoryBlock(id);\n\t\tonSelectCategory(id);\n\t};\n\n\treturn (\n\t\t<div className={styles.categories}>\n\t\t\t<Carousel gap={1}>\n\t\t\t\t{categories.map(({ id, translations }) => {\n\t\t\t\t\tconst { name } = translations.find((item) => item.language === language) || {};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CarouselItem key={id}>\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tonClick={() => handleSelectCategory(id)}\n\t\t\t\t\t\t\t\ttype={UIElementType.BORDERED_PRIMARY}\n\t\t\t\t\t\t\t\tactive={id === selectedCategoryId}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div ref={(el) => (categoryBlocksRef.current[id] = el)}>{name}</div>\n\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t</CarouselItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Carousel>\n\t\t</div>\n\t);\n};\nexport default Categories;\n","export const DEFAULT_CURRENCY = \"AZN\";\n","import { Column, Row } from \"@sorocraft/ui\";\nimport { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport styles from \"./ProductsListItem.module.scss\";\n\nimport * as productModels from \"src/models/product\";\n\nimport { DEFAULT_CURRENCY } from \"../PublicMenu.constants\";\n\ninterface Props {\n\tproduct: productModels.Product;\n\tcurrency: string;\n\tlanguage: string;\n}\n\nconst ProductsListItem = ({ product, currency, language }: Props) => {\n\tconst { translations, price, imageUrl } = product || {};\n\tconst { name, description } = translations.find((item) => item.language === language) || {};\n\tconst formattedPrice = priceFormatter(price, currency || DEFAULT_CURRENCY, language);\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Row justifyContent=\"space-between\">\n\t\t\t\t<div className={styles.data}>\n\t\t\t\t\t<Column gap={0.5}>\n\t\t\t\t\t\t<h3 className={styles.name}>{name}</h3>\n\t\t\t\t\t\t<div className={styles.description}>{description}</div>\n\t\t\t\t\t\t<div className={styles.price}>{formattedPrice}</div>\n\t\t\t\t\t</Column>\n\t\t\t\t</div>\n\t\t\t\t{imageUrl && <img src={imageUrl} alt={name} className={styles.image} />}\n\t\t\t</Row>\n\t\t</div>\n\t);\n};\nexport default ProductsListItem;\n","import { RefObject, useEffect, memo, useCallback } from \"react\";\nimport { Column, DivElementMap } from \"@sorocraft/ui\";\nimport { groupBy } from \"@sorocraft/js-utils\";\nimport styles from \"./Products.module.scss\";\nimport * as productModels from \"src/models/product\";\nimport * as categoryModels from \"src/models/category\";\nimport * as categoryUtils from \"src/utils/category\";\nimport ProductsListItem from \"../ProductsListItem\";\n\ninterface Props {\n\tproducts: productModels.Product[];\n\tcategories: categoryModels.Category[];\n\tproductBlocksRef: RefObject<DivElementMap>;\n\tcurrency: string;\n\tlanguage: string;\n\tonCategoryInView: (categoryId: number) => void;\n}\n\nconst Products = memo(\n\t({ products, categories, currency, language, productBlocksRef, onCategoryInView }: Props) => {\n\t\tconst groupedProducts = groupBy(products, \"categoryId\");\n\n\t\tconst handleIntersection = useCallback(\n\t\t\t(entries: IntersectionObserverEntry[]) => {\n\t\t\t\tlet bestMatchCategoryId: number | null = null;\n\t\t\t\tlet maxVisibility = 0;\n\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tconst categoryId = Number(entry.target.getAttribute(\"data-category-id\"));\n\t\t\t\t\tconst visiblePercentage = entry.intersectionRatio;\n\n\t\t\t\t\t// Track the category block that has the highest visible percentage\n\t\t\t\t\tif (visiblePercentage > maxVisibility) {\n\t\t\t\t\t\tmaxVisibility = visiblePercentage;\n\t\t\t\t\t\tbestMatchCategoryId = categoryId;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Only update if the best matching category is different from the currently selected one\n\t\t\t\tif (bestMatchCategoryId) {\n\t\t\t\t\tonCategoryInView(bestMatchCategoryId);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onCategoryInView]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst observer = new IntersectionObserver(handleIntersection, {\n\t\t\t\troot: null,\n\t\t\t\tthreshold: [0.1, 0.5, 0.75], // Different levels of visibility\n\t\t\t});\n\n\t\t\tObject.values(productBlocksRef?.current || {}).forEach((block) => {\n\t\t\t\tif (block) {\n\t\t\t\t\tobserver.observe(block);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tobserver.disconnect();\n\t\t\t};\n\t\t}, [productBlocksRef, handleIntersection]);\n\n\t\treturn (\n\t\t\t<div className={styles.container}>\n\t\t\t\t<Column>\n\t\t\t\t\t{Object.keys(groupedProducts).map((categoryId) => {\n\t\t\t\t\t\tconst category = (categories.find(({ id }) => id === Number(categoryId)) ||\n\t\t\t\t\t\t\t{}) as categoryModels.Category;\n\t\t\t\t\t\tconst { name } = categoryUtils.getCategoryTranslation(category, language);\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={styles.products}\n\t\t\t\t\t\t\t\tkey={categoryId}\n\t\t\t\t\t\t\t\tref={(el) => (productBlocksRef!.current![category.id] = el)}\n\t\t\t\t\t\t\t\tdata-category-id={categoryId}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<h2 className={styles.category}>{name}</h2>\n\t\t\t\t\t\t\t\t<div className={styles.list}>\n\t\t\t\t\t\t\t\t\t<Column gap={2}>\n\t\t\t\t\t\t\t\t\t\t{groupedProducts[categoryId].map((product) => (\n\t\t\t\t\t\t\t\t\t\t\t<ProductsListItem\n\t\t\t\t\t\t\t\t\t\t\t\tproduct={product}\n\t\t\t\t\t\t\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\t\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\t\t\t\t\t\t\tkey={product.id}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Column>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</Column>\n\t\t\t</div>\n\t\t);\n\t},\n\t(prevProps, nextProps) => {\n\t\treturn (\n\t\t\tprevProps.products === nextProps.products &&\n\t\t\tprevProps.categories === nextProps.categories &&\n\t\t\tprevProps.currency === nextProps.currency &&\n\t\t\tprevProps.language === nextProps.language\n\t\t);\n\t}\n);\n\nexport default Products;\n","import { Category, CategoryTranslation } from \"src/models/category\";\n\nexport const getCategoryTranslation = (\n\tcategory: Category,\n\tlanguage: string\n): CategoryTranslation => {\n\treturn (category?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as CategoryTranslation;\n};\n","import { Card, Container, Flex } from \"@sorocraft/ui\";\n\nimport styles from \"./Branches.module.scss\";\n\nimport * as branchModels from \"src/models/branch\";\n\ninterface Props {\n\tbranches: branchModels.Branch[];\n}\n\nconst Branches = ({ branches = [] }: Props) => {\n\treturn (\n\t\t<div className={styles.branches}>\n\t\t\t<Container className={styles.list}>\n\t\t\t\t{branches.map(({ id, name }) => (\n\t\t\t\t\t<a key={id} href=\"/\">\n\t\t\t\t\t\t<Card noBottomMargin>\n\t\t\t\t\t\t\t<Flex justifyContent=\"center\" alignItems=\"center\" fullHeight>\n\t\t\t\t\t\t\t\t<h2 className={styles.name}>{name}</h2>\n\t\t\t\t\t\t\t</Flex>\n\t\t\t\t\t\t</Card>\n\t\t\t\t\t</a>\n\t\t\t\t))}\n\t\t\t</Container>\n\t\t</div>\n\t);\n};\nexport default Branches;\n","import { DivElementMap } from \"@sorocraft/ui\";\nimport { useRef, useState } from \"react\";\n\nimport styles from \"./PublicMenu.module.scss\";\n\nimport * as menuModels from \"src/models/menu\";\n\nimport Header from \"./Header\";\nimport Categories from \"./Categories\";\nimport Products from \"./Products\";\nimport Branches from \"./Branches\";\n\ninterface Props {\n\tdata: menuModels.PublicMenuData;\n}\n\nconst PublicMenu = ({ data }: Props) => {\n\tconst {\n\t\tname,\n\t\tcoverImage,\n\t\tlogoImage,\n\t\tbranches = [],\n\t\tbranchId,\n\t\tlanguage,\n\t\tcategories,\n\t\tproducts,\n\t\tcurrency,\n\t\tdefaultCover = \"\",\n\t\tdefaultLogo = \"\",\n\t\tinstagram,\n\t\tfacebook,\n\t\twhatsapp,\n\t\ttelegram,\n\t\ttiktok,\n\t} = data || {};\n\n\tconst hasSingleBranch = branches.length <= 1;\n\tconst selectedBranch = branches.find((item) => item.id === Number(branchId));\n\tconst venueName = hasSingleBranch || !selectedBranch?.name ? name : selectedBranch?.name || \"\";\n\n\tconst coverImageSource = coverImage || defaultCover;\n\tconst logoImageSource = logoImage || defaultLogo;\n\n\tconst [selectedCategoryId, setSelectedCategoryId] = useState<number>(categories?.[0]?.id);\n\tconst productBlocksRef = useRef<DivElementMap>({});\n\n\tconst scrollToProductBlock = (categoryId: number) => {\n\t\tconst productBlock = productBlocksRef?.current?.[categoryId];\n\t\tif (!productBlock) return;\n\n\t\tproductBlock.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\t};\n\n\tconst handleSelectCategory = (categoryId: number) => {\n\t\tsetSelectedCategoryId(categoryId);\n\n\t\tscrollToProductBlock(categoryId);\n\t};\n\n\tconst handleCategoryInView = (categoryId: number) => {\n\t\tif (categoryId !== selectedCategoryId) {\n\t\t\tsetSelectedCategoryId(categoryId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<Header\n\t\t\t\tbranch={selectedBranch}\n\t\t\t\tname={venueName}\n\t\t\t\tcoverImage={coverImageSource}\n\t\t\t\tlogoImage={logoImageSource}\n\t\t\t\tinstagram={instagram}\n\t\t\t\tfacebook={facebook}\n\t\t\t\twhatsapp={whatsapp}\n\t\t\t\ttelegram={telegram}\n\t\t\t\ttiktok={tiktok}\n\t\t\t/>\n\t\t\t{!hasSingleBranch && !branchId ? (\n\t\t\t\t<Branches branches={branches} />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<Categories\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tselectedCategoryId={selectedCategoryId}\n\t\t\t\t\t\tonSelectCategory={handleSelectCategory}\n\t\t\t\t\t/>\n\t\t\t\t\t<Products\n\t\t\t\t\t\tcategories={categories}\n\t\t\t\t\t\tproducts={products}\n\t\t\t\t\t\tcurrency={currency}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tproductBlocksRef={productBlocksRef}\n\t\t\t\t\t\tonCategoryInView={handleCategoryInView}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\nexport default PublicMenu;\n"],"names":["Header","branch","coverImage","logoImage","name","instagram","facebook","whatsapp","telegram","tiktok","address","latitude","longitude","phone","noBranch","isEmpty","googleMapLink","_jsxs","jsxs","className","styles","children","_jsx","src","alt","jsx","Column","fullWidth","fullHeight","alignItems","justifyContent","Row","gap","href","target","rel","SVGIcon","icon","MarkerPin","theme","IconLink","Phone","size","shape","Whatsapp","Instagram","Telegram","Tiktok","Facebook","Wifi","Categories","categories","language","selectedCategoryId","onSelectCategory","categoryBlocksRef","useRef","handleSelectCategory","id","categoryId","categoryBlock","_a","current","scrollIntoView","behavior","inline","scrollToCategoryBlock","Carousel","map","translations","find","item","CarouselItem","Chip","onClick","type","UIElementType","BORDERED_PRIMARY","active","ref","el","ProductsListItem","product","currency","price","imageUrl","description","formattedPrice","priceFormatter","container","data","image","Products","memo","products","productBlocksRef","onCategoryInView","groupedProducts","groupBy","handleIntersection","useCallback","entries","bestMatchCategoryId","maxVisibility","forEach","entry","Number","getAttribute","visiblePercentage","intersectionRatio","useEffect","observer","IntersectionObserver","root","threshold","Object","values","block","observe","disconnect","keys","category","_b","call","categoryUtils.getCategoryTranslation","list","prevProps","nextProps","Branches","branches","Container","Card","noBottomMargin","Flex","branchId","defaultCover","defaultLogo","hasSingleBranch","length","selectedBranch","venueName","coverImageSource","logoImageSource","setSelectedCategoryId","useState","_Fragment","productBlock","scrollToProductBlock"],"mappings":"4gBAiCA,MAAMA,EAAS,EACdC,SACAC,aACAC,YACAC,OACAC,YACAC,WACAC,WACAC,WACAC,aAEA,MAAMC,QAAEA,EAAOC,SAAEA,EAAQC,UAAEA,EAASC,MAAEA,GAAUZ,GAAU,GACpDa,EAAWC,UAAQd,GAEnBe,EAAgB,qCAAqCL,KAAYC,IAyCvE,OACCK,EAAAC,KAAA,MAAA,CAAKC,UAAWC,EACfC,SAAA,CAAAC,MAAA,MAAA,CAAKC,IAAKrB,EAAYsB,IAAKpB,EAAMe,UAAWC,IAC5CE,MAAK,MAAA,CAAAH,UAAWC,EAAcC,SAAGP,EAAWQ,EAAAG,KAZzB,IACpBR,EAAAC,KAACQ,SAAM,CAACC,WAAS,EAACC,YAAU,EAACC,WAAW,SAASC,eAAe,SAC/DT,SAAA,CAAAC,MAAA,MAAA,CAAKC,IAAKpB,EAAWqB,IAAKpB,EAAMe,UAAWC,IAC3CE,EAAAA,IAAK,MAAA,CAAAH,UAAWC,WACfE,EAAIG,IAAA,KAAA,CAAAN,UAAWC,EAAcC,SAAAjB,UAQ2B,CAAA,GAAMkB,EAAAA,KAjC9C,IAClBL,OAACc,EAAAA,IAAI,CAAAC,IAAK,EAACX,SAAA,CACVC,aAAKC,IAAKpB,EAAWqB,IAAKpB,EAAMe,UAAWC,IAC3CH,cAAKE,UAAWC,YACfE,MAAI,KAAA,CAAAH,UAAWC,EAAcC,SAAAjB,IAE7BkB,EACCG,IAAA,IAAA,CAAAN,UAAWC,EACXa,KAAMjB,EACNkB,OAAO,SACPC,IAAI,sBAEJd,SAAAJ,EAAAC,KAACa,EAAGA,IAAC,CAAAF,WAAW,SAASG,IAAK,GAAGX,SAAA,CAChCC,EAAAA,IAACc,EAAAA,QAAO,CAACC,KAAMC,YAAWC,MAAM,SAChCjB,uBAAOZ,gBAmBmE,OAC3EI,GACDQ,EAAAA,IAAK,MAAA,CAAAH,UAAWC,EAAaC,SAC5BC,MAAK,MAAA,CAAAH,UAAWC,EAAYC,SAC3BJ,EAAAA,KAACc,EAAGA,KAACC,IAAK,EAACX,SAAA,CACVJ,EAAAA,KAACc,EAAGA,IAAA,CAACF,WAAW,SAASC,eAAe,SAASE,IAAK,aACpDnB,GACAS,MAACkB,EAAAA,SACA,CAAAH,KAAMI,EAAKA,MACXR,KAAM,QAAQpB,IACd6B,KAAK,KACLC,MAAM,SACNJ,MAAM,UAGPhC,GACAe,EAAAA,IAACkB,EAAQA,SACR,CAAAH,KAAMO,WACNX,KAAM,iBAAiB1B,IACvBmC,KAAK,KACLC,MAAM,SACNJ,MAAM,QACNL,OAAO,WAGR7B,GACAiB,MAACkB,EAAAA,SAAQ,CACRH,KAAMQ,EAASA,UACfZ,KAAM5B,EACNqC,KAAK,KACLC,MAAM,SACNJ,MAAM,QACNL,OAAO,WAGR1B,GACAc,MAACkB,WAAQ,CACRH,KAAMS,EAAAA,SACNb,KAAMzB,EACNkC,KAAK,KACLC,MAAM,SACNJ,MAAM,QACNL,OAAO,WAGRzB,GACAa,EAAAA,IAACkB,EAAQA,SACR,CAAAH,KAAMU,SACNd,KAAMxB,EACNiC,KAAK,KACLC,MAAM,SACNJ,MAAM,QACNL,OAAO,WAGR5B,GACAgB,EAACG,IAAAe,YACAH,KAAMW,EAAAA,SACNf,KAAM3B,EACNoC,KAAK,KACLC,MAAM,SACNJ,MAAM,QACNL,OAAO,cAIVZ,MAACS,EAAAA,IACA,CAAAV,SAAAC,EAAAG,IAACW,UAAO,CAACC,KAAMY,EAAAA,KAAMP,KAAK,kBAO/B,ECvJGQ,EAAa,EAAGC,aAAYC,WAAUC,qBAAoBC,uBAC/D,MAAMC,EAAoBC,SAAsB,CAAA,GAS1CC,EAAwBC,IAPA,CAACC,UAC9B,MAAMC,EAA6C,QAA7BC,EAAAN,aAAA,EAAAA,EAAmBO,eAAU,IAAAD,OAAA,EAAAA,EAAAF,GAC9CC,GAELA,EAAcG,eAAe,CAAEC,SAAU,SAAUC,OAAQ,UAAW,EAItEC,CAAsBR,GACtBJ,EAAiBI,EAAG,EAGrB,OACCpC,EAAAA,IAAK,MAAA,CAAAH,UAAWC,EACfC,SAAAC,MAAC6C,EAAAA,SAAQ,CAACnC,IAAK,EACbX,SAAA8B,EAAWiB,KAAI,EAAGV,KAAIW,mBACtB,MAAMjE,KAAEA,GAASiE,EAAaC,MAAMC,GAASA,EAAKnB,WAAaA,KAAa,GAE5E,OACC9B,EAAAA,IAACkD,EAAAA,aACA,CAAAnD,SAAAC,EAAAG,IAACgD,EAAIA,KACJ,CAAAC,QAAS,IAAMjB,EAAqBC,GACpCiB,KAAMC,EAAAA,cAAcC,iBACpBC,OAAQpB,IAAOL,EAEfhC,SAAAC,EAAAG,IAAA,MAAA,CAAKsD,IAAMC,GAAQzB,EAAkBO,QAAQJ,GAAMsB,EAAM3D,SAAAjB,OANxCsD,EASlB,OAIJ,6uBCjDI,MCeDuB,EAAmB,EAAGC,UAASC,WAAU/B,eAC9C,MAAMiB,aAAEA,EAAYe,MAAEA,EAAKC,SAAEA,GAAaH,GAAW,CAAA,GAC/C9E,KAAEA,EAAIkF,YAAEA,GAAgBjB,EAAaC,MAAMC,GAASA,EAAKnB,WAAaA,KAAa,CAAA,EACnFmC,EAAiBC,EAAAA,eAAeJ,EAAOD,GDlBd,MCkB4C/B,GAE3E,OACC9B,EAAAA,IAAK,MAAA,CAAAH,UAAWC,EAAOqE,UAASpE,SAC/BJ,EAAAA,KAACc,EAAAA,KAAID,eAAe,gBACnBT,SAAA,CAAAC,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAOsE,cACtBzE,EAAAA,KAACS,EAAAA,OAAO,CAAAM,IAAK,GAAGX,SAAA,CACfC,EAAIG,IAAA,KAAA,CAAAN,UAAWC,EAAOhB,KAAOiB,SAAAjB,IAC7BkB,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAOkE,YAAcjE,SAAAiE,IACrChE,EAAAA,IAAA,MAAA,CAAKH,UAAWC,EAAOgE,eAAQG,SAGhCF,GAAY/D,aAAKC,IAAK8D,EAAU7D,IAAKpB,EAAMe,UAAWC,EAAOuE,YAG/D,ECfGC,EAAWC,EAAAA,MAChB,EAAGC,WAAU3C,aAAYgC,WAAU/B,WAAU2C,mBAAkBC,uBAC9D,MAAMC,EAAkBC,EAAAA,QAAQJ,EAAU,cAEpCK,EAAqBC,eACzBC,IACA,IAAIC,EAAqC,KACrCC,EAAgB,EAEpBF,EAAQG,SAASC,IAChB,MAAM9C,EAAa+C,OAAOD,EAAMvE,OAAOyE,aAAa,qBAC9CC,EAAoBH,EAAMI,kBAG5BD,EAAoBL,IACvBA,EAAgBK,EAChBN,EAAsB3C,EACtB,IAIE2C,GACHN,EAAiBM,EACjB,GAEF,CAACN,IAoBF,OAjBAc,EAAAA,WAAU,KACT,MAAMC,EAAW,IAAIC,qBAAqBb,EAAoB,CAC7Dc,KAAM,KACNC,UAAW,CAAC,GAAK,GAAK,OASvB,OANAC,OAAOC,QAAOrB,eAAAA,EAAkBjC,UAAW,CAAA,GAAI0C,SAASa,IACnDA,GACHN,EAASO,QAAQD,EACjB,IAGK,KACNN,EAASQ,YAAY,CACrB,GACC,CAACxB,EAAkBI,IAGrB7E,EAAAA,WAAKH,UAAWC,EAAOqE,UACtBpE,SAAAC,EAAAG,IAACC,EAAMA,OAAA,CAAAL,SACL8F,OAAOK,KAAKvB,GAAiB7B,KAAKT,IAClC,MAAM8D,EAAYtE,EAAWmB,MAAK,EAAGZ,QAASA,IAAOgD,OAAO/C,MAC3D,CAAA,GACKvD,KAAEA,GCnEwB,EACrCqH,EACArE,aAEA,OAAuC,QAA/BsE,EAAsB,QAAtB7D,EAAA4D,aAAQ,EAARA,EAAUpD,oBAAY,IAAAR,OAAA,EAAAA,EAAES,YAAO,IAAAoD,OAAA,EAAAA,EAAAC,KAAA9D,GAACU,GAASA,EAAKnB,WAAaA,MAClE,EAA2B,ED8DNwE,CAAqCH,EAAUrE,GAEhE,OACCnC,cACCE,UAAWC,EAAO0E,SAElBf,IAAMC,GAAQe,EAAkBjC,QAAS2D,EAAS/D,IAAMsB,EAAG,mBACzCrB,EAElBtC,SAAA,CAAAC,EAAAG,IAAA,KAAA,CAAIN,UAAWC,EAAOqG,SAAQpG,SAAGjB,IACjCkB,EAAAA,WAAKH,UAAWC,EAAOyG,KAAIxG,SAC1BC,EAAAA,IAACI,EAAAA,OAAM,CAACM,IAAK,WACXiE,EAAgBtC,GAAYS,KAAKc,GACjC5D,EAAAG,IAACwD,EACA,CAAAC,QAASA,EACTC,SAAUA,EACV/B,SAAUA,GACL8B,EAAQxB,YAZZC,EAkBL,OAIJ,IAEH,CAACmE,EAAWC,IAEVD,EAAUhC,WAAaiC,EAAUjC,UACjCgC,EAAU3E,aAAe4E,EAAU5E,YACnC2E,EAAU3C,WAAa4C,EAAU5C,UACjC2C,EAAU1E,WAAa2E,EAAU3E,mHE7FpC,MAAM4E,EAAW,EAAGC,WAAW,MAE7B3G,EAAAG,IAAA,MAAA,CAAKN,UAAWC,EACfC,SAAAC,EAAAA,IAAC4G,EAAAA,UAAU,CAAA/G,UAAWC,EAAWC,SAC/B4G,EAAS7D,KAAI,EAAGV,KAAItD,UACpBkB,EAAYG,IAAA,IAAA,CAAAQ,KAAK,IAAGZ,SACnBC,EAAAA,IAAC6G,EAAAA,KAAK,CAAAC,gBACL,EAAA/G,SAAAC,EAAAA,IAAC+G,EAAIA,KAAC,CAAAvG,eAAe,SAASD,WAAW,SAASD,YACjD,EAAAP,SAAAC,EAAAA,IAAA,KAAA,CAAIH,UAAWC,EAAcC,SAAAjB,SAHxBsD,4BCCM,EAAGgC,iBACrB,MAAMtF,KACLA,EAAIF,WACJA,EAAUC,UACVA,EAAS8H,SACTA,EAAW,GAAEK,SACbA,EAAQlF,SACRA,EAAQD,WACRA,EAAU2C,SACVA,EAAQX,SACRA,EAAQoD,aACRA,EAAe,GAAEC,YACjBA,EAAc,GAAEnI,UAChBA,EAASC,SACTA,EAAQC,SACRA,EAAQC,SACRA,EAAQC,OACRA,GACGiF,GAAQ,GAEN+C,EAAkBR,EAASS,QAAU,EACrCC,EAAiBV,EAAS3D,MAAMC,GAASA,EAAKb,KAAOgD,OAAO4B,KAC5DM,EAAYH,KAAoBE,aAAc,EAAdA,EAAgBvI,MAAOA,GAAOuI,aAAc,EAAdA,EAAgBvI,OAAQ,GAEtFyI,EAAmB3I,GAAcqI,EACjCO,EAAkB3I,GAAaqI,GAE9BnF,EAAoB0F,GAAyBC,EAAQA,SAA0B,QAAjBnF,EAAAV,aAAU,EAAVA,EAAa,UAAI,IAAAU,OAAA,EAAAA,EAAAH,IAChFqC,EAAmBvC,SAAsB,CAAA,GAqB/C,OACCvC,EAAAA,KAAK,MAAA,CAAAE,UAAWC,EACfC,SAAA,CAAAC,EAAAA,IAACtB,EAAM,CACNC,OAAQ0I,EACRvI,KAAMwI,EACN1I,WAAY2I,EACZ1I,UAAW2I,EACXzI,UAAWA,EACXC,SAAUA,EACVC,SAAUA,EACVC,SAAUA,EACVC,OAAQA,IAEPgI,GAAoBH,EAGrBrH,EACCC,KAAA+H,WAAA,CAAA5H,SAAA,CAAAC,EAAAA,IAAC4B,EAAU,CACVC,WAAYA,EACZC,SAAUA,EACVC,mBAAoBA,EACpBC,iBAjCyBK,IAC7BoF,EAAsBpF,GARM,CAACA,UAC7B,MAAMuF,EAA2C,QAA5BrF,EAAAkC,aAAA,EAAAA,EAAkBjC,eAAU,IAAAD,OAAA,EAAAA,EAAAF,GAC5CuF,GAELA,EAAanF,eAAe,CAAEC,SAAU,SAAUqD,MAAO,SAAU,EAMnE8B,CAAqBxF,EAAW,IAgC7BrC,EAAAG,IAACmE,EAAQ,CACRzC,WAAYA,EACZ2C,SAAUA,EACVX,SAAUA,EACV/B,SAAUA,EACV2C,iBAAkBA,EAClBC,iBAnCyBrC,IACzBA,IAAeN,GAClB0F,EAAsBpF,EACtB,OAiBCrC,EAAAG,IAACuG,EAAQ,CAACC,SAAUA,MAoBrB"}
@@ -13,4 +13,9 @@ export interface PublicMenuData {
13
13
  language: string;
14
14
  defaultCover: string;
15
15
  defaultLogo: string;
16
+ instagram?: string;
17
+ facebook?: string;
18
+ whatsapp?: string;
19
+ telegram?: string;
20
+ tiktok?: string;
16
21
  }
@@ -0,0 +1 @@
1
+ export declare function throttle(callback: (...args: any[]) => void, delay: number): (...args: any[]) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@restaround/react",
3
- "version": "1.0.2",
3
+ "version": "1.0.6",
4
4
  "description": "React Library by restaround.co",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",