@tabres/react 1.0.31 → 1.0.33

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.
Files changed (91) hide show
  1. package/dist/components/BackIcon/BackIcon.d.ts +1 -1
  2. package/dist/components/Events/Events.d.ts +1 -1
  3. package/dist/components/Events/EventsToolbar.d.ts +1 -1
  4. package/dist/components/PublicMenu/Branches/BranchCard/BranchCard.d.ts +1 -1
  5. package/dist/components/PublicMenu/Branches/BranchCard/Parent.d.ts +1 -1
  6. package/dist/components/PublicMenu/Branches/Branches.d.ts +1 -1
  7. package/dist/components/PublicMenu/Categories/Categories.d.ts +1 -1
  8. package/dist/components/PublicMenu/Customer/CustomerAddress/AddressContent/AddressContent.d.ts +1 -1
  9. package/dist/components/PublicMenu/Customer/CustomerAddress/CustomerAddress.d.ts +1 -1
  10. package/dist/components/PublicMenu/Customer/CustomerAddress/NoAddressContent/NoAddressContent.d.ts +1 -1
  11. package/dist/components/PublicMenu/Header/BranchBusinessHours/BranchBusinessHours.d.ts +1 -1
  12. package/dist/components/PublicMenu/Header/BranchBusinessHours/HoursList/HoursList.d.ts +1 -1
  13. package/dist/components/PublicMenu/Header/BranchHeader/BranchHeader.d.ts +1 -1
  14. package/dist/components/PublicMenu/Header/BranchHeader/HeaderLinks/HeaderLinks.d.ts +1 -1
  15. package/dist/components/PublicMenu/Header/BusinessHeader/BusinessHeader.d.ts +1 -1
  16. package/dist/components/PublicMenu/Header/Header.d.ts +1 -1
  17. package/dist/components/PublicMenu/Header/Languages/Languages.d.ts +1 -1
  18. package/dist/components/PublicMenu/MenuContent/MenuContent.d.ts +1 -1
  19. package/dist/components/PublicMenu/Modals/AddUpdateAddress/AddUpdateAddress.d.ts +1 -1
  20. package/dist/components/PublicMenu/Modals/AddUpdateNote/AddUpdateNote.d.ts +1 -1
  21. package/dist/components/PublicMenu/Modals/Auth/Auth.d.ts +1 -1
  22. package/dist/components/PublicMenu/Modals/Auth/EmailStep.d.ts +1 -1
  23. package/dist/components/PublicMenu/Modals/Auth/OTPStep.d.ts +1 -1
  24. package/dist/components/PublicMenu/Modals/Auth/PhoneStep.d.ts +1 -1
  25. package/dist/components/PublicMenu/Modals/BranchBusinessHours/BranchBusinessHours.d.ts +1 -1
  26. package/dist/components/PublicMenu/OrderDrawer/OrderDrawer.d.ts +1 -1
  27. package/dist/components/PublicMenu/OrderDrawer/OrderDrawerCart.d.ts +1 -1
  28. package/dist/components/PublicMenu/OrderDrawer/OrderDrawerCompleted.d.ts +1 -1
  29. package/dist/components/PublicMenu/OrderDrawer/OrderDrawerDetails.d.ts +1 -1
  30. package/dist/components/PublicMenu/OrderDrawer/OrderDrawerFooter.d.ts +1 -1
  31. package/dist/components/PublicMenu/OrderDrawer/OrderTable/OrderTable.d.ts +1 -1
  32. package/dist/components/PublicMenu/OrderDrawer/OrderTable/OrderTableUI.d.ts +1 -1
  33. package/dist/components/PublicMenu/OrderFAB/OrderFAB.d.ts +1 -1
  34. package/dist/components/PublicMenu/OrderFAB/OrderFABContainer.d.ts +1 -1
  35. package/dist/components/PublicMenu/OrderItemsList/OrderItemsList.d.ts +1 -1
  36. package/dist/components/PublicMenu/OrderItemsList/OrderNoItems.d.ts +1 -1
  37. package/dist/components/PublicMenu/OrderListItem/OrderListItem.d.ts +1 -1
  38. package/dist/components/PublicMenu/OrderMethods/OrderMethods.d.ts +1 -1
  39. package/dist/components/PublicMenu/OrderPaymentSummary/OrderPaymentSummary.d.ts +1 -1
  40. package/dist/components/PublicMenu/OrderStepper/OrderStepper.d.ts +1 -1
  41. package/dist/components/PublicMenu/ProductAddons/ProductAddons.d.ts +1 -1
  42. package/dist/components/PublicMenu/ProductDetails/ProductDetails.d.ts +1 -1
  43. package/dist/components/PublicMenu/ProductDetails/ProductDetailsUI.d.ts +1 -1
  44. package/dist/components/PublicMenu/ProductInOrder/ProductInOrder.d.ts +1 -1
  45. package/dist/components/PublicMenu/ProductQuantity/ProductQuantity.d.ts +1 -1
  46. package/dist/components/PublicMenu/ProductVariants/ProductVariants.d.ts +1 -1
  47. package/dist/components/PublicMenu/Products/Products.d.ts +1 -1
  48. package/dist/components/PublicMenu/ProductsGridItem/ProductsGridItem.d.ts +1 -1
  49. package/dist/components/PublicMenu/ProductsGridItem/ProductsGridItemContainer.d.ts +1 -1
  50. package/dist/components/PublicMenu/ProductsListItem/ProductsListItem.d.ts +1 -1
  51. package/dist/components/PublicMenu/PublicMenu.d.ts +1 -1
  52. package/dist/components/PublicMenu/Videos/Video/Actions/Actions.d.ts +1 -1
  53. package/dist/components/PublicMenu/Videos/Video/Video.d.ts +1 -1
  54. package/dist/components/PublicMenu/Videos/Video/VideoData/VideoData.d.ts +1 -1
  55. package/dist/components/PublicMenu/Videos/VideoFeed/VideoFeed.d.ts +1 -1
  56. package/dist/components/Quantity/Quantity.d.ts +1 -1
  57. package/dist/components/ScrollToTop/ScrollToTop.d.ts +1 -1
  58. package/dist/constants/index.esm.js.map +1 -1
  59. package/dist/constants/index.js.map +1 -1
  60. package/dist/index.esm.js +1 -1
  61. package/dist/index.esm.js.map +1 -1
  62. package/dist/index.js +1 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/models/index.esm.js +1 -1
  65. package/dist/models/index.esm.js.map +1 -1
  66. package/dist/models/index.js +1 -1
  67. package/dist/models/index.js.map +1 -1
  68. package/dist/models/modules/branch/models.d.ts +2 -0
  69. package/dist/models/modules/order/constants.d.ts +1 -1
  70. package/dist/models/modules/order/models.d.ts +1 -1
  71. package/dist/models/modules/user/models.d.ts +7 -2
  72. package/dist/models/store/index.d.ts +1 -1
  73. package/dist/models/store/order.d.ts +1 -1
  74. package/dist/modules/branch/models.d.ts +2 -0
  75. package/dist/modules/order/constants.d.ts +1 -1
  76. package/dist/modules/order/models.d.ts +1 -1
  77. package/dist/modules/order/preview.d.ts +1 -1
  78. package/dist/modules/user/models.d.ts +7 -2
  79. package/dist/store/index.d.ts +1 -1
  80. package/dist/store/order.d.ts +1 -1
  81. package/dist/utils/index.esm.js +1 -1
  82. package/dist/utils/index.esm.js.map +1 -1
  83. package/dist/utils/index.js +1 -1
  84. package/dist/utils/index.js.map +1 -1
  85. package/dist/utils/modules/branch/models.d.ts +2 -0
  86. package/dist/utils/modules/order/constants.d.ts +1 -1
  87. package/dist/utils/modules/order/models.d.ts +1 -1
  88. package/dist/utils/modules/user/models.d.ts +7 -2
  89. package/dist/utils/store/index.d.ts +1 -1
  90. package/dist/utils/store/order.d.ts +1 -1
  91. package/package.json +12 -11
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/modules/product/models.ts","../../../src/modules/product/utils/listing-price.ts","../../../src/modules/addon/models.ts","../../../src/modules/product/utils/order-price.ts","../../../src/modules/order/models.ts","../../../src/modules/order/constants.ts","../../../src/modules/order/utils/item-price.ts","../../../src/modules/customer/models.ts","../../../src/modules/feature/models.ts","../../../src/modules/feature/constants.ts","../../../src/modules/view/constants.ts","../../../src/modules/view/utils.ts","../../../src/modules/category/utils.ts","../../../src/modules/user/models.ts","../../../src/modules/order/utils.ts","../../../src/modules/customer/utils.ts","../../../src/modules/addon/utils.ts","../../../src/modules/user/utils.ts","../../../src/modules/feature/utils.ts","../../../src/modules/product/utils.ts","../../../src/modules/menu/utils.ts"],"sourcesContent":["import { MenuAddon } from \"../addon/models\";\n\nexport interface LocalizedContent {\n\tname: string;\n\tdescription: string;\n}\n\nexport interface ProductVariant {\n\tid?: number;\n\t/** Net price (tax-exclusive) — server-of-record value. */\n\tprice: number;\n\t/**\n\t * Gross price for menu display: net price plus any branch taxes flagged\n\t * `addToListingPrice`. Equals `price` when no branch context is supplied.\n\t */\n\tlistingPrice: number;\n\t/** Title keyed by language code, e.g. { en: \"Large\", az: \"Böyük\" }. */\n\ttitle: Record<string, string>;\n\tproductId?: number;\n\tremove?: boolean;\n}\n\nexport interface Product {\n\tid: number;\n\tcategoryId: number;\n\t/** Net price (tax-exclusive). Nullable when the product has no own price (variant-only). */\n\tprice: number;\n\t/**\n\t * Gross price for menu display: net price plus any branch taxes flagged\n\t * `addToListingPrice`. Equals `price` when no branch context is supplied,\n\t * and is null when `price` itself is null.\n\t */\n\tlistingPrice?: number | null;\n\tvolume?: string; // 100qr/250ml/1kq\n\timage160?: string;\n\timage580?: string;\n\timage1024?: string;\n\ttranslations: Record<string, LocalizedContent>;\n\tvariants: ProductVariant[];\n\taddons: MenuAddon[];\n\tavailable?: boolean;\n\tvisible?: boolean;\n\tposition?: number;\n\tvideoUrl?: string;\n\tsellUnitType?: SellUnitType;\n\ttaxClassId?: number | null;\n}\n\nexport enum ProductView {\n\tLIST = \"list\",\n\tGRID = \"grid\",\n}\n\nexport interface DashboardProduct extends Omit<Product, \"addons\"> {\n\taddons: number[];\n}\n\nexport enum SellUnitType {\n\tPIECE = \"PIECE\",\n\tWEIGHT = \"WEIGHT\",\n\tVOLUME = \"VOLUME\",\n}\n","import { priceFormatter } from \"@sorocraft/js-utils\";\nimport { Product, ProductVariant } from \"../models\";\nimport { MenuAddonOption } from \"src/models\";\n\nexport const getUnitListingPrice = (item: {\n\tprice?: number | null;\n\tlistingPrice?: number | null;\n}) => item?.listingPrice ?? item?.price ?? 0;\n\nexport const getProductListingPrice = (product: Product, currency: string, language: string) => {\n\tconst listingPrice = getUnitListingPrice(product);\n\treturn priceFormatter(listingPrice, currency, language);\n};\n\nexport const getVariantListingPrice = (\n\tvariant: ProductVariant,\n\tcurrency: string,\n\tlanguage: string,\n) => {\n\tconst listingPrice = getUnitListingPrice(variant);\n\treturn priceFormatter(listingPrice, currency, language);\n};\n\nexport const getOptionListingPrice = (\n\toption: MenuAddonOption,\n\tcurrency: string,\n\tlanguage: string,\n) => {\n\tconst listingPrice = getUnitListingPrice(option);\n\treturn priceFormatter(listingPrice, currency, language);\n};\n","export enum MenuAddonSelectType {\n\tSINGLE = \"SINGLE\",\n\tMULTIPLE = \"MULTIPLE\",\n}\n\nexport interface MenuAddonOption {\n\tid?: number;\n\t/** Net price (tax-exclusive) — server-of-record value. */\n\tprice: number;\n\t/**\n\t * Gross price for menu display: net price plus the parent product's\n\t * `addToListingPrice` taxes. Equals `price` when no branch context is\n\t * supplied (e.g. addon detached from a branch tax setup).\n\t */\n\tlistingPrice: number;\n\ttitle: Record<string, string>;\n\tremove?: boolean;\n}\n\nexport interface MenuAddon {\n\tid?: number;\n\tselectType: MenuAddonSelectType;\n\toptions: MenuAddonOption[];\n\tbusinessId?: number;\n\ttitle: Record<string, string>;\n}\n","import { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport { MenuAddonSelectType } from \"src/modules/addon/models\";\nimport * as orderModels from \"src/modules/order/models\";\n\nimport { Product } from \"../models\";\nimport { getUnitListingPrice } from \"./listing-price\";\n\nexport const getAllSelectedOptionsListingPrice = (\n\tproduct: Pick<Product, \"addons\">,\n\tselectedAddons: orderModels.SelectedAddons = {},\n): number => {\n\tlet total = 0;\n\n\tfor (const addon of product?.addons || []) {\n\t\tconst { id: addonId, selectType, options } = addon;\n\n\t\tif (!Object.prototype.hasOwnProperty.call(selectedAddons, addonId)) continue;\n\n\t\tconst selection = selectedAddons[addonId];\n\t\tconst selectedOptionIds =\n\t\t\tselectType === MenuAddonSelectType.SINGLE\n\t\t\t\t? [selection as number]\n\t\t\t\t: ((selection || []) as number[]);\n\n\t\tfor (const optionId of selectedOptionIds) {\n\t\t\tconst option = (options || []).find(({ id }) => id === optionId);\n\t\t\tif (option) total += getUnitListingPrice(option);\n\t\t}\n\t}\n\n\treturn total;\n};\n\nexport const getProductOrderPrice = ({\n\tproduct,\n\tquantity,\n\tlanguage,\n\tcurrency,\n\tvariantId,\n\tselectedAddons,\n}: {\n\tproduct: Product;\n\tquantity: number;\n\tlanguage: string;\n\tcurrency: string;\n\tvariantId?: number;\n\tselectedAddons?: Record<number, number | number[]>;\n}) => {\n\tif (!product || Object.keys(product).length === 0) {\n\t\treturn priceFormatter(0, currency, language);\n\t}\n\n\tconst variant = variantId\n\t\t? (product.variants || []).find(({ id }) => id === variantId)\n\t\t: undefined;\n\n\tconst baseUnitPrice = variantId ? getUnitListingPrice(variant) : getUnitListingPrice(product);\n\tconst optionsUnitPrice = getAllSelectedOptionsListingPrice(product, selectedAddons);\n\n\tconst totalPrice = (baseUnitPrice + optionsUnitPrice) * quantity;\n\n\treturn priceFormatter(totalPrice, currency, language);\n};\n","import * as customerModels from \"../customer/models\";\nimport * as productModels from \"../product/models\";\n\nexport enum OrderType {\n\tDINE_IN = \"DINE_IN\",\n\tPICK_UP = \"PICK_UP\",\n\tDELIVERY = \"DELIVERY\",\n}\n\nexport enum OrderStatus {\n\tDRAFT = \"DRAFT\",\n\tPENDING = \"PENDING\",\n\tCONFIRMED = \"CONFIRMED\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tOUT_FOR_DELIVERY = \"OUT_FOR_DELIVERY\",\n\tDELIVERED = \"DELIVERED\",\n\tCOMPLETED = \"COMPLETED\",\n\tCANCELLED = \"CANCELLED\",\n\tFAILED = \"FAILED\",\n}\n\nexport enum OrderItemStatus {\n\tPENDING = \"PENDING\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tSERVED = \"SERVED\",\n}\n\nexport enum PaymentMethod {\n\tCASH = \"CASH\",\n\tCARD = \"CARD\",\n\tWALLET = \"WALLET\",\n\tTERMINAL = \"TERMINAL\",\n}\n\nexport interface OrderAddonOption {\n\toptionId: number;\n\t/** Gross unit price (listingPrice from the menu listing). */\n\tprice: number;\n}\n\nexport interface OrderAddon {\n\tid?: number;\n\taddonId: number;\n\toptions: OrderAddonOption[];\n}\n\nexport interface SelectedAddons {\n\t[key: number]: number | number[];\n}\n\nexport interface OrderItemVariant {\n\tid?: number;\n\tvariantId: number;\n\t/** Gross unit price (listingPrice from the menu listing). */\n\tprice: number;\n}\n\nexport interface OrderItem {\n\tid?: number;\n\tproductId: number;\n\torderId?: number;\n\tquantity: number;\n\t/**\n\t * Gross unit price (listingPrice) at the moment the line was added. The\n\t * server recomputes authoritative totals on create/preview; this value is\n\t * what the cart UI displays.\n\t */\n\tprice?: number;\n\tvariant?: OrderItemVariant;\n\taddons: OrderAddon[];\n\tnote?: string;\n\tstatus?: OrderItemStatus;\n\tisPaid?: boolean;\n\tsellUnitType: productModels.SellUnitType;\n}\n\nexport interface Order {\n\tid?: number;\n\tbusinessId?: number;\n\tbranchId?: number;\n\tworkingDayId?: number;\n\ttableId?: number;\n\temployeeId?: number;\n\torderType: OrderType;\n\titems: OrderItem[];\n\tstatus?: OrderStatus;\n\tpaymentMethod?: PaymentMethod;\n\tnote?: string;\n\tcreatedAt?: number;\n\tupdatedAt?: number;\n\tcustomer?: customerModels.Customer;\n\tcurrency?: string;\n\ttrackingId?: string;\n}\n\nexport interface OrderItems {\n\t[key: string]: OrderItem;\n}\n\nexport enum OrderStep {\n\tCART = \"CART\",\n\tDETAILS = \"DETAILS\",\n\tCOMPLETED = \"COMPLETED\",\n}\n\nexport interface OrderPayload extends Order {\n\tcustomerAddressId: number;\n\tcustomerId: number;\n\tlanguage?: string;\n}\n\nexport interface CalculatePreviewItemRequest {\n\torderItemsId: string;\n\tproductId: number;\n\tquantity: number;\n\tvariant?: { variantId: number };\n\taddons?: Array<{\n\t\taddonId: number;\n\t\toptions: Array<{ optionId: number }>;\n\t}>;\n}\n\nexport interface CalculatePreviewRequest {\n\tbusinessId?: number;\n\tbranchId: number;\n\torderType: OrderType;\n\titems: CalculatePreviewItemRequest[];\n}\n\nexport interface CalculatePreviewTax {\n\tbranchTaxId: number;\n\tname: Record<string, string>;\n\trate: number;\n\ttype: \"percentage\" | \"fixed\";\n\taddToListingPrice: boolean;\n\tamount: number;\n}\n\nexport interface CalculatePreviewLine {\n\torderItemsId: string;\n\tproductId: number;\n\tquantity: number;\n\tprice: number;\n\ttaxes: CalculatePreviewTax[];\n}\n\nexport interface CalculatePreviewResponse {\n\ttotalPriceWithoutTax: number;\n\ttotalPriceWithTax: number;\n\ttotalPriceWithTaxAndFees: number;\n\ttotalTax: number;\n\tdeliveryFee: number;\n\tserviceFee: number;\n\titems: CalculatePreviewLine[];\n\ttaxes: CalculatePreviewTax[];\n}\n\nexport interface OrderPreviewState {\n\tdata: CalculatePreviewResponse | null;\n\tisLoading: boolean;\n\terror: string | null;\n}\n","import { OrderPreviewState, OrderStep, PaymentMethod } from \"./models\";\n\nexport const initialOrder = {\n\torderType: null,\n\tpaymentMethod: PaymentMethod.CASH,\n};\n\nexport const ORDER_STEPS = [OrderStep.CART, OrderStep.DETAILS, OrderStep.COMPLETED];\n\nexport const initialPreviewState: OrderPreviewState = {\n\tdata: null,\n\tisLoading: false,\n\terror: null,\n};\n\nexport enum OrderErrors {\n\tFIELD_REQUIRED_ERROR = \"This field is required\",\n\tTABLE_NOT_SELECTED = \"Please select a table\",\n\tADDRESS_IS_EMPTY = \"Please enter an address\",\n\tEMPTY_ITEMS = \"Please choose product\",\n\tBRANCH_NOT_SELECTED = \"Please select a branch\",\n}\n","import { priceFormatter } from \"@sorocraft/js-utils\";\nimport { OrderItem } from \"../models\";\n\nexport const getOrderItemListingRawPrice = (orderItem: OrderItem) => {\n\tconst { price, variant, addons, quantity } = orderItem || {};\n\n\tconst baseUnitPrice = variant?.price ?? price ?? 0;\n\n\tconst addonsUnitPrice = (addons || []).reduce(\n\t\t(addonSum, addon) =>\n\t\t\taddonSum +\n\t\t\t(addon?.options || []).reduce((optionSum, option) => optionSum + (option?.price ?? 0), 0),\n\t\t0,\n\t);\n\n\tconst unitPrice = baseUnitPrice + addonsUnitPrice;\n\treturn unitPrice * (quantity ?? 1);\n};\n\nexport const getOrderItemListingPrice = (\n\torderItem: OrderItem,\n\tcurrency: string,\n\tlanguage: string,\n) => {\n\tconst totalPrice = getOrderItemListingRawPrice(orderItem);\n\n\treturn priceFormatter(totalPrice, currency, language);\n};\n","export enum CustomerAuthStep {\n\tPHONE = \"PHONE\",\n\tOTP = \"OTP\",\n\tEMAIL = \"EMAIL\",\n}\n\nexport enum CustomerAddressType {\n\tHOME = \"HOME\",\n\tWORK = \"WORK\",\n\tTRAVEL = \"TRAVEL\",\n}\n\nexport interface CustomerAddress {\n\tid?: number;\n\taddressId?: number; // Update address temporary\n\tcountryCode: string;\n\tcityName: string;\n\tstreet: string;\n\thouseNumber: string;\n\tadditionalNumber?: string;\n\tpostCode?: string;\n\tinstructions?: string;\n\tfloor?: number;\n\tlongitude?: number;\n\tlatitude?: number;\n\ttitle?: string;\n\ttype?: CustomerAddressType;\n}\n\nexport interface CustomerAuthForm {\n\totp: string;\n\temail: string;\n}\n\nexport interface CustomerAuthPhoneForm {\n\tcountryCode: string;\n\tphoneNumber: string;\n}\n\nexport interface AuthResponse {\n\taccessToken: string;\n\trefreshToken: string;\n}\n\nexport interface Customer {\n\tid?: number;\n\temail: string;\n\tphoneNumber: string;\n\tfullName: string;\n\tsmsVerified?: boolean;\n\temailVerified?: boolean;\n\taddress?: CustomerAddress;\n\taddresses?: CustomerAddress[];\n}\n\nexport type CustomerUpdatePayload = Partial<Customer>;\n","export enum Feature {\n\tUPLOAD_VIDEO = \"UPLOAD_VIDEO\",\n}\nexport enum FeatureSegment {\n\tALPHA = \"ALPHA\",\n\tBETA = \"BETA\",\n\tALL = \"ALL\",\n}\n","import { Feature, FeatureSegment } from \"./models\";\n\nexport const FEATURES_LIST: { [key in FeatureSegment]: Feature[] } = {\n\t[FeatureSegment.ALPHA]: [Feature.UPLOAD_VIDEO],\n\t[FeatureSegment.BETA]: [],\n\t[FeatureSegment.ALL]: [],\n};\n","export const MODALS = {\n\tADD_UPDATE_NOTES: \"ADD_UPDATE_NOTES\",\n\tAUTH: \"AUTH\",\n\tADD_UPDATE_ADDRESS: \"ADD_UPDATE_ADDRESS\",\n\tBRANCH_BUSINESS_HOURS: \"BRANCH_BUSINESS_HOURS\",\n\tPRODUCT_DETAILS: \"PRODUCT_DETAILS\",\n};\n\nexport const SUPPORTED_LOCALES = [\"en\", \"az\", \"nl\", \"et\", \"tr\", \"ru\", \"pl\", \"pt\", \"hr\"];\nexport const SUPPORTED_COUNTRIES = [\n\t{\n\t\tname: \"Azerbaijan\",\n\t\tcode: \"AZ\",\n\t\tphoneCode: \"+994\",\n\t},\n];\n\nexport const DOMAIN = \"tabres.com\";\n\nexport const DEFAULT_HOSTNAME = DOMAIN;\n\nexport const IMAGE_BASE_URL = \"https://images.tabres.com\";\n","import { DOMAIN, IMAGE_BASE_URL } from \"./constants\";\n\ninterface ValidationResult {\n\tisValid: boolean;\n\terror?: string;\n}\n\ntype Validator = (cleanedNumber: string) => ValidationResult;\n\nconst validators: Record<string, Validator> = {\n\t\"994\": (number) => {\n\t\tconst AZERBAIJANI_PREFIXES = [\"50\", \"51\", \"10\", \"55\", \"99\", \"70\", \"77\", \"60\"];\n\t\tconst pattern = new RegExp(`^(${AZERBAIJANI_PREFIXES.join(\"|\")})\\\\d{7}$`);\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: `Azerbaijani numbers must be 9 digits and start with ${AZERBAIJANI_PREFIXES.join(\n\t\t\t\t\t\", \"\n\t\t\t\t)}`,\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n\n\t\"31\": (number) => {\n\t\tconst pattern = /^\\d{9}$/;\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: \"Dutch numbers must be exactly 9 digits\",\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n};\n\nexport function validatePhoneNumber(phoneNumber: string): ValidationResult {\n\tif (!phoneNumber) {\n\t\treturn { isValid: false, error: \"FIELD_REQUIRED\" };\n\t}\n\n\tconst cleaned = phoneNumber.replace(/\\D/g, \"\");\n\n\tconst countryCode = cleaned.startsWith(\"994\") ? \"994\" : cleaned.startsWith(\"31\") ? \"31\" : null;\n\n\tif (!countryCode) {\n\t\treturn { isValid: false, error: \"Unsupported country code\" };\n\t}\n\n\tconst nationalNumber = cleaned.slice(countryCode.length);\n\tconst validator = validators[countryCode];\n\n\treturn validator(nationalNumber);\n}\n\nexport const getBaseUrl = (hostname: string, language: string) => {\n\tconst locale = language || \"en\";\n\t// Local env\n\tif (hostname === \"localhost:3000\") {\n\t\treturn { url: `http://localhost:3000/${locale}`, domain: DOMAIN };\n\t}\n\t// Prod env\n\treturn { url: `https://${DOMAIN}/${locale}`, domain: DOMAIN };\n};\n\nexport const getRegisterUrl = (language: string, source: string) => {\n\treturn `https://app.tabres.com/auth/register?lang=${language}&utm_source=${source}`;\n};\n\nexport const getImageSource = (image?: string) => {\n\tif (!image) return \"\";\n\n\tif (image.includes(\"base64\") || image.startsWith(\"https://\")) return image;\n\n\treturn `${IMAGE_BASE_URL}/${image}`;\n};\n\nexport const getLogoImageSource = (logoImage?: string) => {\n\tif (!logoImage) return \"https://images.tabres.com/no-photo-128.webp\";\n\n\tif (logoImage.includes(\"base64\") || logoImage.startsWith(\"https://\")) return logoImage;\n\n\treturn `${IMAGE_BASE_URL}/${logoImage}`;\n};\n\nexport const getCoverPhotoSource = (coverPhoto?: string) => {\n\tif (!coverPhoto) return \"https://images.tabres.com/tabres-doodle.webp\";\n\n\tif (coverPhoto.includes(\"base64\") || coverPhoto.startsWith(\"https://\")) return coverPhoto;\n\n\treturn `${IMAGE_BASE_URL}/${coverPhoto}`;\n};\n\nconst keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nconst triplet = (e1: number, e2: number, e3: number) =>\n\tkeyStr.charAt(e1 >> 2) +\n\tkeyStr.charAt(((e1 & 3) << 4) | (e2 >> 4)) +\n\tkeyStr.charAt(((e2 & 15) << 2) | (e3 >> 6)) +\n\tkeyStr.charAt(e3 & 63);\n\nexport const rgbDataURL = (r: number, g: number, b: number) =>\n\t`data:image/gif;base64,R0lGODlhAQABAPAA${\n\t\ttriplet(0, r, g) + triplet(b, 255, 255)\n\t}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`;\n\nexport const getVideoSource = (video?: string) => {\n\tif (!video) return \"\";\n\n\tif (video.includes(\"base64\") || video.startsWith(\"https://\")) return video;\n\n\treturn `${IMAGE_BASE_URL}/${video}`;\n};\n\nexport const adjustLightness = (hex: string, deltaPct: number) => {\n\tconst n = parseInt(hex.replace(\"#\", \"\"), 16);\n\tconst r = ((n >> 16) & 0xff) / 255;\n\tconst g = ((n >> 8) & 0xff) / 255;\n\tconst b = (n & 0xff) / 255;\n\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h = 0;\n\tlet s = 0;\n\tif (max !== min) {\n\t\tconst d = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\tswitch (max) {\n\t\t\tcase r:\n\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\tbreak;\n\t\t\tcase g:\n\t\t\t\th = (b - r) / d + 2;\n\t\t\t\tbreak;\n\t\t\tcase b:\n\t\t\t\th = (r - g) / d + 4;\n\t\t\t\tbreak;\n\t\t}\n\t\th /= 6;\n\t}\n\n\tconst newL = Math.max(0, Math.min(1, l + deltaPct / 100));\n\n\tconst hueToRgb = (p: number, q: number, t: number) => {\n\t\tif (t < 0) t += 1;\n\t\tif (t > 1) t -= 1;\n\t\tif (t < 1 / 6) return p + (q - p) * 6 * t;\n\t\tif (t < 1 / 2) return q;\n\t\tif (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n\t\treturn p;\n\t};\n\n\tlet r2 = newL;\n\tlet g2 = newL;\n\tlet b2 = newL;\n\tif (s !== 0) {\n\t\tconst q = newL < 0.5 ? newL * (1 + s) : newL + s - newL * s;\n\t\tconst p = 2 * newL - q;\n\t\tr2 = hueToRgb(p, q, h + 1 / 3);\n\t\tg2 = hueToRgb(p, q, h);\n\t\tb2 = hueToRgb(p, q, h - 1 / 3);\n\t}\n\n\tconst toHex = (x: number) =>\n\t\tMath.round(x * 255)\n\t\t\t.toString(16)\n\t\t\t.padStart(2, \"0\");\n\treturn `#${toHex(r2)}${toHex(g2)}${toHex(b2)}`;\n};\n","import { isEmpty } from \"@sorocraft/js-utils\";\nimport { Category, CategoryTranslation } from \"./models\";\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\nexport const getCategoryNameById = (\n\tcategoryId: number,\n\tcategories: Category[],\n\tlanguage: string\n): string => {\n\tconst category = categories?.find?.(({ id }) => id === categoryId);\n\n\tif (isEmpty(category)) return \"\";\n\n\tconst { name } = getCategoryTranslation(category, language);\n\n\treturn name || \"\";\n};\n","export enum EmployeePermission {\n\tVIEW_BUSINESS = \"VIEW_BUSINESS\",\n\tUPDATE_BUSINESS = \"UPDATE_BUSINESS\",\n\tVIEW_BUSINESS_FINANCIALS = \"VIEW_BUSINESS_FINANCIALS\",\n\tVIEW_ORDERS = \"VIEW_ORDERS\",\n\tUPDATE_ORDER = \"UPDATE_ORDER\",\n\tCREATE_ORDER = \"CREATE_ORDER\",\n\tAPPLY_DISCOUNT = \"APPLY_DISCOUNT\",\n\tVIEW_QR_MENU = \"VIEW_QR_MENU\",\n\tUPDATE_QR_MENU = \"UPDATE_QR_MENU\",\n\tVIEW_MENU = \"VIEW_MENU\",\n\tVIEW_MENU_ITEMS = \"VIEW_MENU_ITEMS\",\n\tCREATE_MENU_ITEM = \"CREATE_MENU_ITEM\",\n\tUPDATE_MENU_ITEM = \"UPDATE_MENU_ITEM\",\n\tDELETE_MENU_ITEM = \"DELETE_MENU_ITEM\",\n\tVIEW_CATEGORIES = \"VIEW_CATEGORIES\",\n\tUPDATE_CATEGORY = \"UPDATE_CATEGORY\",\n\tCREATE_CATEGORY = \"CREATE_CATEGORY\",\n\tDELETE_CATEGORY = \"DELETE_CATEGORY\",\n\tVIEW_ADDONS = \"VIEW_ADDONS\",\n\tUPDATE_ADDON = \"UPDATE_ADDON\",\n\tCREATE_ADDON = \"CREATE_ADDON\",\n\tDELETE_ADDON = \"DELETE_ADDON\",\n\tVIEW_TABLES = \"VIEW_TABLES\",\n\tUPDATE_TABLE = \"UPDATE_TABLE\",\n\tUPDATE_TABLE_STATUS = \"UPDATE_TABLE_STATUS\",\n\tCREATE_TABLE = \"CREATE_TABLE\",\n\tDELETE_TABLE = \"DELETE_TABLE\",\n\tVIEW_BRANCHES = \"VIEW_BRANCHES\",\n\tUPDATE_BRANCH = \"UPDATE_BRANCH\",\n\tCREATE_BRANCH = \"CREATE_BRANCH\",\n\tDELETE_BRANCH = \"DELETE_BRANCH\",\n\tVIEW_EMPLOYEES = \"VIEW_EMPLOYEES\",\n\tUPDATE_EMPLOYEE = \"UPDATE_EMPLOYEE\",\n\tCREATE_EMPLOYEE = \"CREATE_EMPLOYEE\",\n\tDELETE_EMPLOYEE = \"DELETE_EMPLOYEE\",\n\tVIEW_ANALYTICS = \"VIEW_ANALYTICS\",\n\tVIEW_SALES_REPORTS = \"VIEW_SALES_REPORTS\",\n\tVIEW_SUBSCRIPTION = \"VIEW_SUBSCRIPTION\",\n\tUPDATE_SUBSCRIPTION = \"UPDATE_SUBSCRIPTION\",\n\tVIEW_QR_CODES = \"VIEW_QR_CODES\",\n\tCREATE_QR_CODE = \"CREATE_QR_CODE\",\n\tDELETE_QR_CODE = \"DELETE_QR_CODE\",\n\tALL = \"ALL\",\n\t// Inventory\n\tVIEW_INVENTORY = \"VIEW_INVENTORY\",\n\tVIEW_PURCHASES = \"VIEW_PURCHASES\",\n\tVIEW_PURCHASE_DETAIL = \"VIEW_PURCHASE_DETAIL\",\n\tCREATE_PURCHASE = \"CREATE_PURCHASE\",\n\tUPDATE_PURCHASE = \"UPDATE_PURCHASE\",\n\tDELETE_PURCHASE = \"DELETE_PURCHASE\",\n\tVIEW_INVENTORY_PRODUCTS = \"VIEW_INVENTORY_PRODUCTS\",\n\tCREATE_INVENTORY_PRODUCT = \"CREATE_INVENTORY_PRODUCT\",\n\tUPDATE_INVENTORY_PRODUCT = \"UPDATE_INVENTORY_PRODUCT\",\n\tDELETE_INVENTORY_PRODUCT = \"DELETE_INVENTORY_PRODUCT\",\n\tVIEW_BUSINESS_BALANCE = \"VIEW_BUSINESS_BALANCE\",\n\tVIEW_BRANCH_BALANCE = \"VIEW_BRANCH_BALANCE\",\n\tUPDATE_PRODUCT_INGREDIENTS = \"UPDATE_PRODUCT_INGREDIENTS\",\n\tDELETE_PRODUCT_INGREDIENTS = \"DELETE_PRODUCT_INGREDIENTS\",\n\tAI_ASSISTANT = \"AI_ASSISTANT\",\n}\n\nexport enum UserRole {\n\tOWNER = \"OWNER\",\n\tBRANCH_MANAGER = \"BRANCH_MANAGER\",\n\tGENERAL_MANAGER = \"GENERAL_MANAGER\",\n\tCHEF = \"CHEF\",\n\tSOUS_CHEF = \"SOUS_CHEF\",\n\tPASTRY_CHEF = \"PASTRY_CHEF\",\n\tLINE_COOK = \"LINE_COOK\",\n\tPREP_COOK = \"PREP_COOK\",\n\tKITCHEN_ASSISTANT = \"KITCHEN_ASSISTANT\",\n\tDISHWASHER = \"DISHWASHER\",\n\tHEAD_WAITER = \"HEAD_WAITER\",\n\tWAITER = \"WAITER\",\n\tRUNNER = \"RUNNER\",\n\tBARISTA = \"BARISTA\",\n\tBARTENDER = \"BARTENDER\",\n\tSOMMELIER = \"SOMMELIER\",\n\tACCOUNTANT = \"ACCOUNTANT\",\n\tROOM_SERVICE_STAFF = \"ROOM_SERVICE_STAFF\",\n\tDELIVERY_DRIVER = \"DELIVERY_DRIVER\",\n\tINVENTORY_MANAGER = \"INVENTORY_MANAGER\",\n\tPURCHASING_MANAGER = \"PURCHASING_MANAGER\",\n\tWAREHOUSE_STAFF = \"WAREHOUSE_STAFF\",\n}\n\nexport interface User {\n\tid?: number;\n\temail: string;\n\tfullName: string;\n\trole?: UserRole;\n\tavatar64?: string | null;\n\tavatar128?: string | null;\n\tavatar256?: string | null;\n\tbusinessId?: number;\n\tbranchId?: number | null;\n\tcreatedAt: string;\n\temailVerified?: boolean;\n\tpermissions?: EmployeePermission[];\n}\n","import { isEmpty, sortNumbers } from \"@sorocraft/js-utils\";\nimport { IconType } from \"@sorocraft/ui\";\nimport { Check, BagCheck, Delivery, Chef, FileCheck, HourglassHalf } from \"@sorocraft/ui/icons\";\n\nimport {\n\tCalculatePreviewResponse,\n\tOrder,\n\tOrderAddon,\n\tOrderAddonOption,\n\tOrderItem,\n\tOrderStatus,\n\tOrderType,\n\tSelectedAddons,\n} from \"./models\";\n\nimport * as addonModels from \"../addon/models\";\nimport * as branchModels from \"../branch/models\";\nimport { OrderErrors } from \"./constants\";\n\nexport const generateOrderItemsId = (\n\tproductId: number,\n\tvariantId: number | null,\n\tselectedAddons?: SelectedAddons,\n): string => {\n\tif (!productId) throw new Error(\"Product ID is required\");\n\n\t// Build the order items ID base with productId and variantId\n\tlet orderItemsId = `${productId}`;\n\tif (variantId) {\n\t\torderItemsId += `-${variantId}`;\n\t}\n\n\t// Build the addon part of the ID\n\tconst addonIdsPart = Object.entries(selectedAddons || {})\n\t\t.map(([addonId, option]) => {\n\t\t\tif (!addonId || !option) return null; // Skip invalid entries\n\t\t\tconst optionIds = Array.isArray(option)\n\t\t\t\t? sortNumbers(option).filter(Boolean).join(\"-\")\n\t\t\t\t: `${option}`;\n\t\t\tif (!optionIds) return null;\n\t\t\treturn `${addonId}-${optionIds}`;\n\t\t})\n\t\t.filter(Boolean) // Remove null/undefined values\n\t\t.join(\"-\");\n\n\t// Append addonIdsPart if it's not empty\n\tif (addonIdsPart) {\n\t\torderItemsId += `-${addonIdsPart}`;\n\t}\n\n\treturn orderItemsId;\n};\n\nexport const getSelectedAddonsFromOrderItems = (item: OrderItem): SelectedAddons => {\n\tconst selectedAddons: SelectedAddons = {};\n\n\tfor (const { addonId, options = [] } of item.addons || []) {\n\t\tconst optionIds = options.map(({ optionId }) => optionId);\n\t\tselectedAddons[addonId] = optionIds.length === 1 ? optionIds[0] : optionIds;\n\t}\n\n\treturn selectedAddons;\n};\n\nexport const getStatusIcon = (status: OrderStatus): IconType => {\n\tswitch (status) {\n\t\tcase OrderStatus.COMPLETED:\n\t\t\treturn Check;\n\t\tcase OrderStatus.DELIVERED:\n\t\t\treturn BagCheck;\n\t\tcase OrderStatus.OUT_FOR_DELIVERY:\n\t\t\treturn Delivery;\n\t\tcase OrderStatus.PREPARING:\n\t\t\treturn Chef;\n\t\tcase OrderStatus.CONFIRMED:\n\t\t\treturn FileCheck;\n\t\tcase OrderStatus.PENDING:\n\t\t\treturn HourglassHalf;\n\n\t\tdefault:\n\t\t\treturn HourglassHalf;\n\t}\n};\n\nexport const buildSelectedAddonsPayload = (\n\tproductAddons: addonModels.MenuAddon[] = [],\n\tselectedAddons: SelectedAddons = {},\n): OrderAddon[] => {\n\treturn Object.entries(selectedAddons).map(([addonIdStr, selected]) => {\n\t\tconst addonId = Number(addonIdStr);\n\t\tconst selectedOptionIds = Array.isArray(selected) ? selected : [selected];\n\n\t\tconst addon = productAddons.find((addon) => addon.id === addonId);\n\t\tif (isEmpty(addon)) {\n\t\t\treturn {\n\t\t\t\taddonId,\n\t\t\t\toptions: [],\n\t\t\t};\n\t\t}\n\n\t\tconst options: OrderAddonOption[] = (addon.options || [])\n\t\t\t.filter((option) => selectedOptionIds.includes(option.id))\n\t\t\t.map((option) => ({\n\t\t\t\toptionId: option.id,\n\t\t\t\tprice: option.listingPrice ?? option.price,\n\t\t\t}));\n\n\t\treturn {\n\t\t\taddonId,\n\t\t\toptions,\n\t\t};\n\t});\n};\n\nexport const getDefaultOrderType = (\n\tsettings: branchModels.BranchSettings,\n\tisOpen: boolean,\n\tisDelivering: boolean,\n): OrderType | null => {\n\tif (!settings) return null;\n\n\tconst { deliveryOrderEnabled, dineInOrderEnabled, pickupOrderEnabled } = settings;\n\n\tif (deliveryOrderEnabled && isDelivering) {\n\t\treturn OrderType.DELIVERY;\n\t}\n\n\tif (dineInOrderEnabled && isOpen) {\n\t\treturn OrderType.DINE_IN;\n\t}\n\n\tif (pickupOrderEnabled && isOpen) {\n\t\treturn OrderType.PICK_UP;\n\t}\n\n\treturn null;\n};\n\n// Defensive shape check for the /order/calculate response. The service is\n// typed as CalculatePreviewResponse, but the network can return malformed\n// payloads (empty body, HTML error page) that would corrupt preview state\n// and break price-line lookups downstream.\nexport const isValidPreviewResponse = (data: unknown): data is CalculatePreviewResponse => {\n\tif (!data || typeof data !== \"object\") return false;\n\tconst d = data as Partial<CalculatePreviewResponse>;\n\treturn (\n\t\ttypeof d.totalPriceWithoutTax === \"number\" &&\n\t\ttypeof d.totalPriceWithTax === \"number\" &&\n\t\ttypeof d.totalPriceWithTaxAndFees === \"number\" &&\n\t\ttypeof d.totalTax === \"number\" &&\n\t\ttypeof d.deliveryFee === \"number\" &&\n\t\ttypeof d.serviceFee === \"number\" &&\n\t\tArray.isArray(d.items) &&\n\t\tArray.isArray(d.taxes)\n\t);\n};\n\nexport const getOrderErrorMessages = (field: keyof Order) => {\n\tswitch (field) {\n\t\tcase \"customer\":\n\t\t\treturn OrderErrors.ADDRESS_IS_EMPTY;\n\n\t\tcase \"tableId\":\n\t\t\treturn OrderErrors.TABLE_NOT_SELECTED;\n\n\t\tcase \"items\":\n\t\t\treturn OrderErrors.EMPTY_ITEMS;\n\n\t\tcase \"branchId\":\n\t\t\treturn OrderErrors.BRANCH_NOT_SELECTED;\n\n\t\tdefault:\n\t\t\treturn OrderErrors.FIELD_REQUIRED_ERROR;\n\t}\n};\n\nexport * from \"./utils/item-price\";\n","import { FormErrors } from \"@sorocraft/ui\";\nimport { checkIsValidEmail } from \"@sorocraft/js-utils\";\n\nimport {\n\tCustomerAddress,\n\tCustomerAuthForm,\n\tCustomerAuthPhoneForm,\n\tCustomerAuthStep,\n} from \"./models\";\n\nexport const preparePhoneNumber = (form: CustomerAuthPhoneForm) => {\n\tconst phoneNumber = `${form.countryCode}${form.phoneNumber}`.replaceAll(\"+\", \"\");\n\n\treturn phoneNumber;\n};\n\nexport const validateForm = (form: CustomerAuthForm, step: CustomerAuthStep): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { email, otp } = form || {};\n\n\tswitch (step) {\n\t\tcase CustomerAuthStep.OTP: {\n\t\t\tif (!email || !checkIsValidEmail(email)) {\n\t\t\t\terrors.email = \"Invalid Email Address\";\n\t\t\t}\n\n\t\t\tif (!otp || otp.length !== 6) {\n\t\t\t\terrors.otp = \"Invalid OTP\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase CustomerAuthStep.EMAIL: {\n\t\t\tif (!email || !checkIsValidEmail(email)) {\n\t\t\t\terrors.email = \"Invalid Email Address\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn errors;\n};\n\nexport const validateAddressForm = (form: CustomerAddress): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { countryCode, cityName, street, houseNumber } = form || {};\n\n\tif (!countryCode) errors.countryCode = \"COUNTRY_REQUIRED\";\n\tif (!cityName) errors.cityName = \"CITY_REQUIRED\";\n\tif (!street) errors.street = \"STREET_REQUIRED\";\n\tif (!houseNumber) errors.houseNumber = \"STREET_NUMBER_REQUIRED\";\n\n\treturn errors;\n};\n\nexport const formatCityLine = (fields: (string | undefined)[]) => {\n\treturn (fields || []).filter(Boolean).join(\", \");\n};\n\nexport const formatAddressLine = (\n\tstreet: string,\n\thouseNumber: string,\n\tadditionalNumber: string,\n) => {\n\tconst house = [houseNumber, additionalNumber].filter(Boolean).join(\"/\");\n\tconst fullAddress = [street, house].filter(Boolean).join(\" \");\n\n\treturn fullAddress;\n};\n","import { MenuAddon, MenuAddonOption } from \"./models\";\n\nexport const getAddonTranslation = (addon: MenuAddon, language: string): string => {\n\treturn addon?.title?.[language] || \"\";\n};\n\nexport const getAddonOptionTranslation = (option: MenuAddonOption, language: string): string => {\n\treturn option?.title?.[language] || \"\";\n};\n\nexport const getOptionTitles = (\n\toptions: MenuAddonOption[],\n\toptionIds: number | number[],\n\tlanguage: string,\n): string => {\n\tif (Array.isArray(optionIds)) {\n\t\treturn (options || [])\n\t\t\t.filter(({ id }) => optionIds.includes(id))\n\t\t\t.map(({ title }) => title?.[language] || \"\")\n\t\t\t.filter(Boolean)\n\t\t\t.join(\", \");\n\t} else {\n\t\tconst option = (options || []).find(({ id }) => id === optionIds);\n\t\treturn option?.title?.[language] || \"\";\n\t}\n};\n\nexport const getAddonTitle = (addon: MenuAddon, language: string): string => {\n\treturn addon?.title?.[language] || \"\";\n};\n","import { isEmpty } from \"@sorocraft/js-utils\";\n\nimport { EmployeePermission, UserRole } from \"./models\";\n\nexport const getPermissionsByRole = (role?: UserRole) => {\n\tswitch (role) {\n\t\t/** Owner - Has every permission */\n\t\tcase UserRole.OWNER:\n\t\t\treturn [EmployeePermission.ALL];\n\n\t\t/** General Manager - All except subscription updates */\n\t\tcase UserRole.GENERAL_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_BUSINESS,\n\t\t\t\tEmployeePermission.UPDATE_BUSINESS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE,\n\t\t\t\tEmployeePermission.CREATE_TABLE,\n\t\t\t\tEmployeePermission.DELETE_TABLE,\n\t\t\t\tEmployeePermission.VIEW_BRANCHES,\n\t\t\t\tEmployeePermission.UPDATE_BRANCH,\n\t\t\t\tEmployeePermission.CREATE_BRANCH,\n\t\t\t\tEmployeePermission.DELETE_BRANCH,\n\t\t\t\tEmployeePermission.VIEW_EMPLOYEES,\n\t\t\t\tEmployeePermission.UPDATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.CREATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.DELETE_EMPLOYEE,\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.VIEW_SUBSCRIPTION,\n\t\t\t\tEmployeePermission.CREATE_QR_CODE,\n\t\t\t\tEmployeePermission.DELETE_QR_CODE,\n\t\t\t\tEmployeePermission.AI_ASSISTANT,\n\t\t\t];\n\n\t\t/** Branch Manager - Controls operations within one branch */\n\t\tcase UserRole.BRANCH_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_BUSINESS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE,\n\t\t\t\tEmployeePermission.CREATE_TABLE,\n\t\t\t\tEmployeePermission.DELETE_TABLE,\n\t\t\t\tEmployeePermission.VIEW_EMPLOYEES,\n\t\t\t\tEmployeePermission.UPDATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.CREATE_QR_CODE,\n\t\t\t\tEmployeePermission.DELETE_QR_CODE,\n\t\t\t\tEmployeePermission.AI_ASSISTANT,\n\t\t\t];\n\n\t\t/** Chef - Manages menu and kitchen orders */\n\t\tcase UserRole.CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Sous Chef - Assists chef with orders and menu */\n\t\tcase UserRole.SOUS_CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Pastry Chef - Limited to dessert menu items */\n\t\tcase UserRole.PASTRY_CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Line Cook / Prep Cook / Kitchen Assistant - Read-only menu & order updates */\n\t\tcase UserRole.LINE_COOK:\n\t\tcase UserRole.PREP_COOK:\n\t\tcase UserRole.KITCHEN_ASSISTANT:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Head Waiter - Full service control */\n\t\tcase UserRole.HEAD_WAITER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE_STATUS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t];\n\n\t\t/** Waiter - Handles orders and table service */\n\t\tcase UserRole.WAITER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE_STATUS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t];\n\n\t\t/** Runner - Sees and updates order delivery progress */\n\t\tcase UserRole.RUNNER:\n\t\t\treturn [EmployeePermission.VIEW_ORDERS, EmployeePermission.UPDATE_ORDER];\n\n\t\t/** ☕ Barista / Bartender / Sommelier / Room Service */\n\t\tcase UserRole.BARISTA:\n\t\tcase UserRole.BARTENDER:\n\t\tcase UserRole.SOMMELIER:\n\t\tcase UserRole.ROOM_SERVICE_STAFF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Accountant - Analytics, reports, subscriptions */\n\t\tcase UserRole.ACCOUNTANT:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.VIEW_SUBSCRIPTION,\n\t\t\t];\n\n\t\t/** Delivery Driver - Delivery orders only */\n\t\tcase UserRole.DELIVERY_DRIVER:\n\t\t\treturn [EmployeePermission.VIEW_ORDERS, EmployeePermission.UPDATE_ORDER];\n\n\t\t/** Inventory Manager - Controls menu stock-related items */\n\t\tcase UserRole.INVENTORY_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_PURCHASES,\n\t\t\t\tEmployeePermission.CREATE_PURCHASE,\n\t\t\t\tEmployeePermission.UPDATE_PURCHASE,\n\t\t\t\tEmployeePermission.DELETE_PURCHASE,\n\t\t\t\tEmployeePermission.VIEW_INVENTORY,\n\t\t\t\tEmployeePermission.VIEW_INVENTORY_PRODUCTS,\n\t\t\t\tEmployeePermission.CREATE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.UPDATE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.DELETE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.VIEW_PURCHASE_DETAIL,\n\t\t\t\tEmployeePermission.VIEW_BRANCH_BALANCE,\n\t\t\t\tEmployeePermission.UPDATE_PRODUCT_INGREDIENTS,\n\t\t\t\tEmployeePermission.DELETE_PRODUCT_INGREDIENTS,\n\t\t\t];\n\n\t\t/** Purchasing Manager - Similar to inventory but more on creation/deletion */\n\t\tcase UserRole.PURCHASING_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t];\n\n\t\t/** Warehouse Staff - View only */\n\t\tcase UserRole.WAREHOUSE_STAFF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t];\n\n\t\tdefault:\n\t\t\treturn [];\n\t}\n};\n\nexport const getHasUserPermission = (\n\trequiredPermissions: EmployeePermission[],\n\tuserPermissions: EmployeePermission[],\n) => {\n\tif (isEmpty(requiredPermissions)) return true;\n\tif (isEmpty(userPermissions)) return false;\n\tif (userPermissions.includes(EmployeePermission.ALL)) return true;\n\n\treturn requiredPermissions.some((permission) => userPermissions.includes(permission));\n};\n","import { getQueryParam } from \"@sorocraft/js-utils\";\n\nimport { FeatureSegment, type Feature } from \"./models\";\n\nimport { FEATURES_LIST } from \"./constants\";\n\nexport const getIsFeatureActive = (feature: Feature, businessSegment: FeatureSegment): boolean => {\n\t// Feature is force-enabled via query param\n\tif (getQueryParam(feature) === \"1\") return true;\n\n\t// Build the list of enabled segments for the current businessSegment\n\tconst enabledSegments: FeatureSegment[] =\n\t\tbusinessSegment === FeatureSegment.ALPHA\n\t\t\t? [FeatureSegment.ALPHA, FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: businessSegment === FeatureSegment.BETA\n\t\t\t? [FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: [FeatureSegment.ALL];\n\n\t// Check if feature exists in any of the enabled segments\n\treturn enabledSegments.some((segment) => FEATURES_LIST[segment]?.includes(feature));\n};\n","import { LocalizedContent, Product, ProductVariant, SellUnitType } from \"./models\";\n\nimport { MenuAddon } from \"src/modules/addon/models\";\n\nexport const getProductTranslation = (\n\tproduct: Pick<Product, \"translations\">,\n\tlanguage: string,\n): LocalizedContent => {\n\treturn product?.translations?.[language] || ({} as LocalizedContent);\n};\n\nexport const getProductVariant = (\n\tproduct: Pick<Product, \"variants\">,\n\tvariantId: number,\n): ProductVariant => {\n\treturn product?.variants?.find?.((item) => item.id === variantId) || ({} as ProductVariant);\n};\n\nexport const getProductVariantTranslation = (variant: ProductVariant, language: string): string => {\n\treturn variant?.title?.[language] || \"\";\n};\n\nexport const getProductAddon = (product: Product, addonId: number): MenuAddon => {\n\treturn (product?.addons || []).find(({ id }) => id === addonId) || ({} as MenuAddon);\n};\n\nexport const getPriceSuffix = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn \" / kg\";\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn \" / l\";\n\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n};\n\nexport const getProductSellUnitShortCuts = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn {\n\t\t\t\t\"50gr\": 0.05,\n\t\t\t\t\"100gr\": 0.1,\n\t\t\t\t\"150gr\": 0.15,\n\t\t\t\t\"200gr\": 0.2,\n\t\t\t\t\"250gr\": 0.25,\n\t\t\t\t\"300gr\": 0.3,\n\t\t\t\t\"350gr\": 0.35,\n\t\t\t\t\"400gr\": 0.4,\n\t\t\t\t\"450gr\": 0.45,\n\t\t\t\t\"500gr\": 0.5,\n\t\t\t\t\"600gr\": 0.6,\n\t\t\t\t\"700gr\": 0.7,\n\t\t\t\t\"750gr\": 0.75,\n\t\t\t\t\"800gr\": 0.8,\n\t\t\t\t\"850gr\": 0.85,\n\t\t\t\t\"900gr\": 0.9,\n\t\t\t\t\"950gr\": 0.95,\n\t\t\t\t\"1kg\": 1,\n\t\t\t\t\"2kg\": 2,\n\t\t\t\t\"5kg\": 5,\n\t\t\t\t\"10kg\": 10,\n\t\t\t\t\"20kg\": 20,\n\t\t\t};\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn {\n\t\t\t\t\"50ml\": 0.05,\n\t\t\t\t\"100ml\": 0.1,\n\t\t\t\t\"150ml\": 0.15,\n\t\t\t\t\"200ml\": 0.2,\n\t\t\t\t\"250ml\": 0.25,\n\t\t\t\t\"300ml\": 0.3,\n\t\t\t\t\"350ml\": 0.35,\n\t\t\t\t\"400ml\": 0.4,\n\t\t\t\t\"450ml\": 0.45,\n\t\t\t\t\"500ml\": 0.5,\n\t\t\t\t\"600ml\": 0.6,\n\t\t\t\t\"700ml\": 0.7,\n\t\t\t\t\"750ml\": 0.75,\n\t\t\t\t\"800ml\": 0.8,\n\t\t\t\t\"850ml\": 0.85,\n\t\t\t\t\"900ml\": 0.9,\n\t\t\t\t\"950ml\": 0.95,\n\t\t\t\t\"1l\": 1,\n\t\t\t\t\"2l\": 2,\n\t\t\t\t\"5l\": 5,\n\t\t\t\t\"10l\": 10,\n\t\t\t\t\"20l\": 20,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {};\n\t}\n};\n\nexport * from \"./utils/listing-price\";\nexport * from \"./utils/order-price\";\n","import * as categoryModels from \"src/modules/category/models\";\nimport * as productModels from \"src/modules/product/models\";\n\nimport { CategoryProductMap } from \"./models\";\n\nexport const prepareCategoryAndProductMap = (\n\tcategories: categoryModels.Category[],\n\tproducts: productModels.Product[]\n): CategoryProductMap[] => {\n\tconst productMap = products.reduce<Record<number, productModels.Product[]>>((map, product) => {\n\t\tif (!product.visible) return map;\n\n\t\tconst categoryId = Number(product.categoryId);\n\t\tif (!map[categoryId]) {\n\t\t\tmap[categoryId] = [];\n\t\t}\n\t\tmap[categoryId].push(product);\n\t\treturn map;\n\t}, {});\n\n\treturn categories\n\t\t.map((category) => ({\n\t\t\t...category,\n\t\t\tproducts: (productMap[Number(category.id)] || []) as productModels.Product[],\n\t\t}))\n\t\t.filter((category) => category?.products?.length > 0);\n};\n"],"names":["ProductView","SellUnitType","getUnitListingPrice","item","_a","_b","listingPrice","price","MenuAddonSelectType","getAllSelectedOptionsListingPrice","product","selectedAddons","total","addon","addons","id","addonId","selectType","options","Object","prototype","hasOwnProperty","call","selection","selectedOptionIds","SINGLE","optionId","option","find","OrderType","OrderStatus","OrderItemStatus","PaymentMethod","OrderStep","OrderErrors","CASH","CART","DETAILS","COMPLETED","getOrderItemListingRawPrice","orderItem","variant","quantity","baseUnitPrice","addonsUnitPrice","reduce","addonSum","optionSum","CustomerAuthStep","CustomerAddressType","Feature","FeatureSegment","FEATURES_LIST","ALPHA","UPLOAD_VIDEO","BETA","ALL","DOMAIN","IMAGE_BASE_URL","validators","number","AZERBAIJANI_PREFIXES","RegExp","join","test","isValid","error","keyStr","triplet","e1","e2","e3","charAt","getCategoryTranslation","category","language","translations","EmployeePermission","UserRole","hex","deltaPct","n","parseInt","replace","r","g","b","max","Math","min","l","h","s","d","newL","hueToRgb","p","q","t","r2","g2","b2","toHex","x","round","toString","padStart","productAddons","entries","map","addonIdStr","selected","Number","Array","isArray","isEmpty","filter","includes","street","houseNumber","additionalNumber","Boolean","fields","productId","variantId","Error","orderItemsId","addonIdsPart","optionIds","sortNumbers","title","hostname","locale","url","domain","categoryId","categories","name","coverPhoto","startsWith","settings","isOpen","isDelivering","deliveryOrderEnabled","dineInOrderEnabled","pickupOrderEnabled","DELIVERY","DINE_IN","PICK_UP","requiredPermissions","userPermissions","some","permission","image","feature","businessSegment","getQueryParam","segment","logoImage","currency","priceFormatter","field","ADDRESS_IS_EMPTY","TABLE_NOT_SELECTED","EMPTY_ITEMS","BRANCH_NOT_SELECTED","FIELD_REQUIRED_ERROR","totalPrice","role","OWNER","GENERAL_MANAGER","VIEW_BUSINESS","UPDATE_BUSINESS","VIEW_ORDERS","UPDATE_ORDER","CREATE_ORDER","VIEW_QR_MENU","VIEW_QR_CODES","VIEW_MENU","VIEW_MENU_ITEMS","UPDATE_MENU_ITEM","CREATE_MENU_ITEM","DELETE_MENU_ITEM","VIEW_CATEGORIES","UPDATE_CATEGORY","CREATE_CATEGORY","DELETE_CATEGORY","VIEW_ADDONS","UPDATE_ADDON","CREATE_ADDON","DELETE_ADDON","VIEW_TABLES","UPDATE_TABLE","CREATE_TABLE","DELETE_TABLE","VIEW_BRANCHES","UPDATE_BRANCH","CREATE_BRANCH","DELETE_BRANCH","VIEW_EMPLOYEES","UPDATE_EMPLOYEE","CREATE_EMPLOYEE","DELETE_EMPLOYEE","VIEW_ANALYTICS","VIEW_SALES_REPORTS","VIEW_SUBSCRIPTION","CREATE_QR_CODE","DELETE_QR_CODE","AI_ASSISTANT","BRANCH_MANAGER","CHEF","SOUS_CHEF","PASTRY_CHEF","LINE_COOK","PREP_COOK","KITCHEN_ASSISTANT","HEAD_WAITER","UPDATE_TABLE_STATUS","WAITER","RUNNER","BARISTA","BARTENDER","SOMMELIER","ROOM_SERVICE_STAFF","ACCOUNTANT","DELIVERY_DRIVER","INVENTORY_MANAGER","VIEW_PURCHASES","CREATE_PURCHASE","UPDATE_PURCHASE","DELETE_PURCHASE","VIEW_INVENTORY","VIEW_INVENTORY_PRODUCTS","CREATE_INVENTORY_PRODUCT","UPDATE_INVENTORY_PRODUCT","DELETE_INVENTORY_PRODUCT","VIEW_PURCHASE_DETAIL","VIEW_BRANCH_BALANCE","UPDATE_PRODUCT_INGREDIENTS","DELETE_PRODUCT_INGREDIENTS","PURCHASING_MANAGER","WAREHOUSE_STAFF","sellUnitType","WEIGHT","VOLUME","keys","length","variants","undefined","source","status","Check","DELIVERED","BagCheck","OUT_FOR_DELIVERY","Delivery","PREPARING","Chef","CONFIRMED","FileCheck","PENDING","HourglassHalf","video","data","totalPriceWithoutTax","totalPriceWithTax","totalPriceWithTaxAndFees","totalTax","deliveryFee","serviceFee","items","taxes","products","productMap","visible","push","assign","form","countryCode","phoneNumber","replaceAll","errors","cityName","step","email","otp","OTP","checkIsValidEmail","EMAIL","cleaned","nationalNumber","slice","validator"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/modules/product/models.ts","../../../src/modules/product/utils/listing-price.ts","../../../src/modules/addon/models.ts","../../../src/modules/product/utils/order-price.ts","../../../src/modules/order/models.ts","../../../src/modules/order/constants.ts","../../../src/modules/order/utils/item-price.ts","../../../src/modules/customer/models.ts","../../../src/modules/feature/models.ts","../../../src/modules/feature/constants.ts","../../../src/modules/view/constants.ts","../../../src/modules/view/utils.ts","../../../src/modules/category/utils.ts","../../../src/modules/user/models.ts","../../../src/modules/order/utils.ts","../../../src/modules/customer/utils.ts","../../../src/modules/addon/utils.ts","../../../src/modules/user/utils.ts","../../../src/modules/feature/utils.ts","../../../src/modules/product/utils.ts","../../../src/modules/menu/utils.ts"],"sourcesContent":["import { MenuAddon } from \"../addon/models\";\n\nexport interface LocalizedContent {\n\tname: string;\n\tdescription: string;\n}\n\nexport interface ProductVariant {\n\tid?: number;\n\t/** Net price (tax-exclusive) — server-of-record value. */\n\tprice: number;\n\t/**\n\t * Gross price for menu display: net price plus any branch taxes flagged\n\t * `addToListingPrice`. Equals `price` when no branch context is supplied.\n\t */\n\tlistingPrice: number;\n\t/** Title keyed by language code, e.g. { en: \"Large\", az: \"Böyük\" }. */\n\ttitle: Record<string, string>;\n\tproductId?: number;\n\tremove?: boolean;\n}\n\nexport interface Product {\n\tid: number;\n\tcategoryId: number;\n\t/** Net price (tax-exclusive). Nullable when the product has no own price (variant-only). */\n\tprice: number;\n\t/**\n\t * Gross price for menu display: net price plus any branch taxes flagged\n\t * `addToListingPrice`. Equals `price` when no branch context is supplied,\n\t * and is null when `price` itself is null.\n\t */\n\tlistingPrice?: number | null;\n\tvolume?: string; // 100qr/250ml/1kq\n\timage160?: string;\n\timage580?: string;\n\timage1024?: string;\n\ttranslations: Record<string, LocalizedContent>;\n\tvariants: ProductVariant[];\n\taddons: MenuAddon[];\n\tavailable?: boolean;\n\tvisible?: boolean;\n\tposition?: number;\n\tvideoUrl?: string;\n\tsellUnitType?: SellUnitType;\n\ttaxClassId?: number | null;\n}\n\nexport enum ProductView {\n\tLIST = \"list\",\n\tGRID = \"grid\",\n}\n\nexport interface DashboardProduct extends Omit<Product, \"addons\"> {\n\taddons: number[];\n}\n\nexport enum SellUnitType {\n\tPIECE = \"PIECE\",\n\tWEIGHT = \"WEIGHT\",\n\tVOLUME = \"VOLUME\",\n}\n","import { priceFormatter } from \"@sorocraft/js-utils\";\nimport { Product, ProductVariant } from \"../models\";\nimport { MenuAddonOption } from \"src/models\";\n\nexport const getUnitListingPrice = (item: {\n\tprice?: number | null;\n\tlistingPrice?: number | null;\n}) => item?.listingPrice ?? item?.price ?? 0;\n\nexport const getProductListingPrice = (product: Product, currency: string, language: string) => {\n\tconst listingPrice = getUnitListingPrice(product);\n\treturn priceFormatter(listingPrice, currency, language);\n};\n\nexport const getVariantListingPrice = (\n\tvariant: ProductVariant,\n\tcurrency: string,\n\tlanguage: string,\n) => {\n\tconst listingPrice = getUnitListingPrice(variant);\n\treturn priceFormatter(listingPrice, currency, language);\n};\n\nexport const getOptionListingPrice = (\n\toption: MenuAddonOption,\n\tcurrency: string,\n\tlanguage: string,\n) => {\n\tconst listingPrice = getUnitListingPrice(option);\n\treturn priceFormatter(listingPrice, currency, language);\n};\n","export enum MenuAddonSelectType {\n\tSINGLE = \"SINGLE\",\n\tMULTIPLE = \"MULTIPLE\",\n}\n\nexport interface MenuAddonOption {\n\tid?: number;\n\t/** Net price (tax-exclusive) — server-of-record value. */\n\tprice: number;\n\t/**\n\t * Gross price for menu display: net price plus the parent product's\n\t * `addToListingPrice` taxes. Equals `price` when no branch context is\n\t * supplied (e.g. addon detached from a branch tax setup).\n\t */\n\tlistingPrice: number;\n\ttitle: Record<string, string>;\n\tremove?: boolean;\n}\n\nexport interface MenuAddon {\n\tid?: number;\n\tselectType: MenuAddonSelectType;\n\toptions: MenuAddonOption[];\n\tbusinessId?: number;\n\ttitle: Record<string, string>;\n}\n","import { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport { MenuAddonSelectType } from \"src/modules/addon/models\";\nimport * as orderModels from \"src/modules/order/models\";\n\nimport { Product } from \"../models\";\nimport { getUnitListingPrice } from \"./listing-price\";\n\nexport const getAllSelectedOptionsListingPrice = (\n\tproduct: Pick<Product, \"addons\">,\n\tselectedAddons: orderModels.SelectedAddons = {},\n): number => {\n\tlet total = 0;\n\n\tfor (const addon of product?.addons || []) {\n\t\tconst { id: addonId, selectType, options } = addon;\n\n\t\tif (!Object.prototype.hasOwnProperty.call(selectedAddons, addonId)) continue;\n\n\t\tconst selection = selectedAddons[addonId];\n\t\tconst selectedOptionIds =\n\t\t\tselectType === MenuAddonSelectType.SINGLE\n\t\t\t\t? [selection as number]\n\t\t\t\t: ((selection || []) as number[]);\n\n\t\tfor (const optionId of selectedOptionIds) {\n\t\t\tconst option = (options || []).find(({ id }) => id === optionId);\n\t\t\tif (option) total += getUnitListingPrice(option);\n\t\t}\n\t}\n\n\treturn total;\n};\n\nexport const getProductOrderPrice = ({\n\tproduct,\n\tquantity,\n\tlanguage,\n\tcurrency,\n\tvariantId,\n\tselectedAddons,\n}: {\n\tproduct: Product;\n\tquantity: number;\n\tlanguage: string;\n\tcurrency: string;\n\tvariantId?: number;\n\tselectedAddons?: Record<number, number | number[]>;\n}) => {\n\tif (!product || Object.keys(product).length === 0) {\n\t\treturn priceFormatter(0, currency, language);\n\t}\n\n\tconst variant = variantId\n\t\t? (product.variants || []).find(({ id }) => id === variantId)\n\t\t: undefined;\n\n\tconst baseUnitPrice = variantId ? getUnitListingPrice(variant) : getUnitListingPrice(product);\n\tconst optionsUnitPrice = getAllSelectedOptionsListingPrice(product, selectedAddons);\n\n\tconst totalPrice = (baseUnitPrice + optionsUnitPrice) * quantity;\n\n\treturn priceFormatter(totalPrice, currency, language);\n};\n","import * as customerModels from \"../customer/models\";\nimport * as productModels from \"../product/models\";\n\nexport enum OrderType {\n\tDINE_IN = \"DINE_IN\",\n\tPICK_UP = \"PICK_UP\",\n\tDELIVERY = \"DELIVERY\",\n}\n\nexport enum OrderStatus {\n\tDRAFT = \"DRAFT\",\n\tPENDING = \"PENDING\",\n\tCONFIRMED = \"CONFIRMED\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tOUT_FOR_DELIVERY = \"OUT_FOR_DELIVERY\",\n\tDELIVERED = \"DELIVERED\",\n\tCOMPLETED = \"COMPLETED\",\n\tCANCELLED = \"CANCELLED\",\n\tFAILED = \"FAILED\",\n}\n\nexport enum OrderItemStatus {\n\tPENDING = \"PENDING\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tSERVED = \"SERVED\",\n}\n\nexport enum PaymentMethod {\n\tCASH = \"CASH\",\n\tCARD = \"CARD\",\n\tWALLET = \"WALLET\",\n\tTERMINAL = \"TERMINAL\",\n}\n\nexport interface OrderAddonOption {\n\toptionId: number;\n\t/** Gross unit price (listingPrice from the menu listing). */\n\tprice: number;\n}\n\nexport interface OrderAddon {\n\tid?: number;\n\taddonId: number;\n\toptions: OrderAddonOption[];\n}\n\nexport interface SelectedAddons {\n\t[key: number]: number | number[];\n}\n\nexport interface OrderItemVariant {\n\tid?: number;\n\tvariantId: number;\n\t/** Gross unit price (listingPrice from the menu listing). */\n\tprice: number;\n}\n\nexport interface OrderItem {\n\tid?: number;\n\tproductId: number;\n\torderId?: number;\n\tquantity: number;\n\t/**\n\t * Gross unit price (listingPrice) at the moment the line was added. The\n\t * server recomputes authoritative totals on create/preview; this value is\n\t * what the cart UI displays.\n\t */\n\tprice?: number;\n\tvariant?: OrderItemVariant;\n\taddons: OrderAddon[];\n\tnote?: string;\n\tstatus?: OrderItemStatus;\n\tisPaid?: boolean;\n\tsellUnitType: productModels.SellUnitType;\n}\n\nexport interface Order {\n\tid?: number;\n\tbusinessId?: number;\n\tbranchId?: number;\n\tworkingDayId?: number;\n\ttableId?: number;\n\temployeeId?: number;\n\torderType: OrderType;\n\titems: OrderItem[];\n\tstatus?: OrderStatus;\n\tpreferredPaymentMethod?: PaymentMethod;\n\tnote?: string;\n\tcreatedAt?: number;\n\tupdatedAt?: number;\n\tcustomer?: customerModels.Customer;\n\tcurrency?: string;\n\ttrackingId?: string;\n}\n\nexport interface OrderItems {\n\t[key: string]: OrderItem;\n}\n\nexport enum OrderStep {\n\tCART = \"CART\",\n\tDETAILS = \"DETAILS\",\n\tCOMPLETED = \"COMPLETED\",\n}\n\nexport interface OrderPayload extends Order {\n\tcustomerAddressId: number;\n\tcustomerId: number;\n\tlanguage?: string;\n}\n\nexport interface CalculatePreviewItemRequest {\n\torderItemsId: string;\n\tproductId: number;\n\tquantity: number;\n\tvariant?: { variantId: number };\n\taddons?: Array<{\n\t\taddonId: number;\n\t\toptions: Array<{ optionId: number }>;\n\t}>;\n}\n\nexport interface CalculatePreviewRequest {\n\tbusinessId?: number;\n\tbranchId: number;\n\torderType: OrderType;\n\titems: CalculatePreviewItemRequest[];\n}\n\nexport interface CalculatePreviewTax {\n\tbranchTaxId: number;\n\tname: Record<string, string>;\n\trate: number;\n\ttype: \"percentage\" | \"fixed\";\n\taddToListingPrice: boolean;\n\tamount: number;\n}\n\nexport interface CalculatePreviewLine {\n\torderItemsId: string;\n\tproductId: number;\n\tquantity: number;\n\tprice: number;\n\ttaxes: CalculatePreviewTax[];\n}\n\nexport interface CalculatePreviewResponse {\n\ttotalPriceWithoutTax: number;\n\ttotalPriceWithTax: number;\n\ttotalPriceWithTaxAndFees: number;\n\ttotalTax: number;\n\tdeliveryFee: number;\n\tserviceFee: number;\n\titems: CalculatePreviewLine[];\n\ttaxes: CalculatePreviewTax[];\n}\n\nexport interface OrderPreviewState {\n\tdata: CalculatePreviewResponse | null;\n\tisLoading: boolean;\n\terror: string | null;\n}\n","import { OrderPreviewState, OrderStep, PaymentMethod } from \"./models\";\n\nexport const initialOrder = {\n\torderType: null,\n\tpreferredPaymentMethod: PaymentMethod.CASH,\n};\n\nexport const ORDER_STEPS = [OrderStep.CART, OrderStep.DETAILS, OrderStep.COMPLETED];\n\nexport const initialPreviewState: OrderPreviewState = {\n\tdata: null,\n\tisLoading: false,\n\terror: null,\n};\n\nexport enum OrderErrors {\n\tFIELD_REQUIRED_ERROR = \"This field is required\",\n\tTABLE_NOT_SELECTED = \"Please select a table\",\n\tADDRESS_IS_EMPTY = \"Please enter an address\",\n\tEMPTY_ITEMS = \"Please choose product\",\n\tBRANCH_NOT_SELECTED = \"Please select a branch\",\n}\n","import { priceFormatter } from \"@sorocraft/js-utils\";\nimport { OrderItem } from \"../models\";\n\nexport const getOrderItemListingRawPrice = (orderItem: OrderItem) => {\n\tconst { price, variant, addons, quantity } = orderItem || {};\n\n\tconst baseUnitPrice = variant?.price ?? price ?? 0;\n\n\tconst addonsUnitPrice = (addons || []).reduce(\n\t\t(addonSum, addon) =>\n\t\t\taddonSum +\n\t\t\t(addon?.options || []).reduce((optionSum, option) => optionSum + (option?.price ?? 0), 0),\n\t\t0,\n\t);\n\n\tconst unitPrice = baseUnitPrice + addonsUnitPrice;\n\treturn unitPrice * (quantity ?? 1);\n};\n\nexport const getOrderItemListingPrice = (\n\torderItem: OrderItem,\n\tcurrency: string,\n\tlanguage: string,\n) => {\n\tconst totalPrice = getOrderItemListingRawPrice(orderItem);\n\n\treturn priceFormatter(totalPrice, currency, language);\n};\n","export enum CustomerAuthStep {\n\tPHONE = \"PHONE\",\n\tOTP = \"OTP\",\n\tEMAIL = \"EMAIL\",\n}\n\nexport enum CustomerAddressType {\n\tHOME = \"HOME\",\n\tWORK = \"WORK\",\n\tTRAVEL = \"TRAVEL\",\n}\n\nexport interface CustomerAddress {\n\tid?: number;\n\taddressId?: number; // Update address temporary\n\tcountryCode: string;\n\tcityName: string;\n\tstreet: string;\n\thouseNumber: string;\n\tadditionalNumber?: string;\n\tpostCode?: string;\n\tinstructions?: string;\n\tfloor?: number;\n\tlongitude?: number;\n\tlatitude?: number;\n\ttitle?: string;\n\ttype?: CustomerAddressType;\n}\n\nexport interface CustomerAuthForm {\n\totp: string;\n\temail: string;\n}\n\nexport interface CustomerAuthPhoneForm {\n\tcountryCode: string;\n\tphoneNumber: string;\n}\n\nexport interface AuthResponse {\n\taccessToken: string;\n\trefreshToken: string;\n}\n\nexport interface Customer {\n\tid?: number;\n\temail: string;\n\tphoneNumber: string;\n\tfullName: string;\n\tsmsVerified?: boolean;\n\temailVerified?: boolean;\n\taddress?: CustomerAddress;\n\taddresses?: CustomerAddress[];\n}\n\nexport type CustomerUpdatePayload = Partial<Customer>;\n","export enum Feature {\n\tUPLOAD_VIDEO = \"UPLOAD_VIDEO\",\n}\nexport enum FeatureSegment {\n\tALPHA = \"ALPHA\",\n\tBETA = \"BETA\",\n\tALL = \"ALL\",\n}\n","import { Feature, FeatureSegment } from \"./models\";\n\nexport const FEATURES_LIST: { [key in FeatureSegment]: Feature[] } = {\n\t[FeatureSegment.ALPHA]: [Feature.UPLOAD_VIDEO],\n\t[FeatureSegment.BETA]: [],\n\t[FeatureSegment.ALL]: [],\n};\n","export const MODALS = {\n\tADD_UPDATE_NOTES: \"ADD_UPDATE_NOTES\",\n\tAUTH: \"AUTH\",\n\tADD_UPDATE_ADDRESS: \"ADD_UPDATE_ADDRESS\",\n\tBRANCH_BUSINESS_HOURS: \"BRANCH_BUSINESS_HOURS\",\n\tPRODUCT_DETAILS: \"PRODUCT_DETAILS\",\n};\n\nexport const SUPPORTED_LOCALES = [\"en\", \"az\", \"nl\", \"et\", \"tr\", \"ru\", \"pl\", \"pt\", \"hr\"];\nexport const SUPPORTED_COUNTRIES = [\n\t{\n\t\tname: \"Azerbaijan\",\n\t\tcode: \"AZ\",\n\t\tphoneCode: \"+994\",\n\t},\n];\n\nexport const DOMAIN = \"tabres.com\";\n\nexport const DEFAULT_HOSTNAME = DOMAIN;\n\nexport const IMAGE_BASE_URL = \"https://images.tabres.com\";\n","import { DOMAIN, IMAGE_BASE_URL } from \"./constants\";\n\ninterface ValidationResult {\n\tisValid: boolean;\n\terror?: string;\n}\n\ntype Validator = (cleanedNumber: string) => ValidationResult;\n\nconst validators: Record<string, Validator> = {\n\t\"994\": (number) => {\n\t\tconst AZERBAIJANI_PREFIXES = [\"50\", \"51\", \"10\", \"55\", \"99\", \"70\", \"77\", \"60\"];\n\t\tconst pattern = new RegExp(`^(${AZERBAIJANI_PREFIXES.join(\"|\")})\\\\d{7}$`);\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: `Azerbaijani numbers must be 9 digits and start with ${AZERBAIJANI_PREFIXES.join(\n\t\t\t\t\t\", \"\n\t\t\t\t)}`,\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n\n\t\"31\": (number) => {\n\t\tconst pattern = /^\\d{9}$/;\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: \"Dutch numbers must be exactly 9 digits\",\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n};\n\nexport function validatePhoneNumber(phoneNumber: string): ValidationResult {\n\tif (!phoneNumber) {\n\t\treturn { isValid: false, error: \"FIELD_REQUIRED\" };\n\t}\n\n\tconst cleaned = phoneNumber.replace(/\\D/g, \"\");\n\n\tconst countryCode = cleaned.startsWith(\"994\") ? \"994\" : cleaned.startsWith(\"31\") ? \"31\" : null;\n\n\tif (!countryCode) {\n\t\treturn { isValid: false, error: \"Unsupported country code\" };\n\t}\n\n\tconst nationalNumber = cleaned.slice(countryCode.length);\n\tconst validator = validators[countryCode];\n\n\treturn validator(nationalNumber);\n}\n\nexport const getBaseUrl = (hostname: string, language: string) => {\n\tconst locale = language || \"en\";\n\t// Local env\n\tif (hostname === \"localhost:3000\") {\n\t\treturn { url: `http://localhost:3000/${locale}`, domain: DOMAIN };\n\t}\n\t// Prod env\n\treturn { url: `https://${DOMAIN}/${locale}`, domain: DOMAIN };\n};\n\nexport const getRegisterUrl = (language: string, source: string) => {\n\treturn `https://app.tabres.com/auth/register?lang=${language}&utm_source=${source}`;\n};\n\nexport const getImageSource = (image?: string) => {\n\tif (!image) return \"\";\n\n\tif (image.includes(\"base64\") || image.startsWith(\"https://\")) return image;\n\n\treturn `${IMAGE_BASE_URL}/${image}`;\n};\n\nexport const getLogoImageSource = (logoImage?: string) => {\n\tif (!logoImage) return \"https://images.tabres.com/no-photo-128.webp\";\n\n\tif (logoImage.includes(\"base64\") || logoImage.startsWith(\"https://\")) return logoImage;\n\n\treturn `${IMAGE_BASE_URL}/${logoImage}`;\n};\n\nexport const getCoverPhotoSource = (coverPhoto?: string) => {\n\tif (!coverPhoto) return \"https://images.tabres.com/tabres-doodle.webp\";\n\n\tif (coverPhoto.includes(\"base64\") || coverPhoto.startsWith(\"https://\")) return coverPhoto;\n\n\treturn `${IMAGE_BASE_URL}/${coverPhoto}`;\n};\n\nconst keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nconst triplet = (e1: number, e2: number, e3: number) =>\n\tkeyStr.charAt(e1 >> 2) +\n\tkeyStr.charAt(((e1 & 3) << 4) | (e2 >> 4)) +\n\tkeyStr.charAt(((e2 & 15) << 2) | (e3 >> 6)) +\n\tkeyStr.charAt(e3 & 63);\n\nexport const rgbDataURL = (r: number, g: number, b: number) =>\n\t`data:image/gif;base64,R0lGODlhAQABAPAA${\n\t\ttriplet(0, r, g) + triplet(b, 255, 255)\n\t}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`;\n\nexport const getVideoSource = (video?: string) => {\n\tif (!video) return \"\";\n\n\tif (video.includes(\"base64\") || video.startsWith(\"https://\")) return video;\n\n\treturn `${IMAGE_BASE_URL}/${video}`;\n};\n\nexport const adjustLightness = (hex: string, deltaPct: number) => {\n\tconst n = parseInt(hex.replace(\"#\", \"\"), 16);\n\tconst r = ((n >> 16) & 0xff) / 255;\n\tconst g = ((n >> 8) & 0xff) / 255;\n\tconst b = (n & 0xff) / 255;\n\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h = 0;\n\tlet s = 0;\n\tif (max !== min) {\n\t\tconst d = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\tswitch (max) {\n\t\t\tcase r:\n\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\tbreak;\n\t\t\tcase g:\n\t\t\t\th = (b - r) / d + 2;\n\t\t\t\tbreak;\n\t\t\tcase b:\n\t\t\t\th = (r - g) / d + 4;\n\t\t\t\tbreak;\n\t\t}\n\t\th /= 6;\n\t}\n\n\tconst newL = Math.max(0, Math.min(1, l + deltaPct / 100));\n\n\tconst hueToRgb = (p: number, q: number, t: number) => {\n\t\tif (t < 0) t += 1;\n\t\tif (t > 1) t -= 1;\n\t\tif (t < 1 / 6) return p + (q - p) * 6 * t;\n\t\tif (t < 1 / 2) return q;\n\t\tif (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n\t\treturn p;\n\t};\n\n\tlet r2 = newL;\n\tlet g2 = newL;\n\tlet b2 = newL;\n\tif (s !== 0) {\n\t\tconst q = newL < 0.5 ? newL * (1 + s) : newL + s - newL * s;\n\t\tconst p = 2 * newL - q;\n\t\tr2 = hueToRgb(p, q, h + 1 / 3);\n\t\tg2 = hueToRgb(p, q, h);\n\t\tb2 = hueToRgb(p, q, h - 1 / 3);\n\t}\n\n\tconst toHex = (x: number) =>\n\t\tMath.round(x * 255)\n\t\t\t.toString(16)\n\t\t\t.padStart(2, \"0\");\n\treturn `#${toHex(r2)}${toHex(g2)}${toHex(b2)}`;\n};\n","import { isEmpty } from \"@sorocraft/js-utils\";\nimport { Category, CategoryTranslation } from \"./models\";\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\nexport const getCategoryNameById = (\n\tcategoryId: number,\n\tcategories: Category[],\n\tlanguage: string\n): string => {\n\tconst category = categories?.find?.(({ id }) => id === categoryId);\n\n\tif (isEmpty(category)) return \"\";\n\n\tconst { name } = getCategoryTranslation(category, language);\n\n\treturn name || \"\";\n};\n","export enum EmployeePermission {\n\tVIEW_BUSINESS = \"VIEW_BUSINESS\",\n\tUPDATE_BUSINESS = \"UPDATE_BUSINESS\",\n\tVIEW_BUSINESS_FINANCIALS = \"VIEW_BUSINESS_FINANCIALS\",\n\tVIEW_ORDERS = \"VIEW_ORDERS\",\n\tUPDATE_ORDER = \"UPDATE_ORDER\",\n\tCREATE_ORDER = \"CREATE_ORDER\",\n\tAPPLY_DISCOUNT = \"APPLY_DISCOUNT\",\n\tVIEW_QR_MENU = \"VIEW_QR_MENU\",\n\tUPDATE_QR_MENU = \"UPDATE_QR_MENU\",\n\tVIEW_MENU = \"VIEW_MENU\",\n\tVIEW_MENU_ITEMS = \"VIEW_MENU_ITEMS\",\n\tCREATE_MENU_ITEM = \"CREATE_MENU_ITEM\",\n\tUPDATE_MENU_ITEM = \"UPDATE_MENU_ITEM\",\n\tDELETE_MENU_ITEM = \"DELETE_MENU_ITEM\",\n\tVIEW_CATEGORIES = \"VIEW_CATEGORIES\",\n\tUPDATE_CATEGORY = \"UPDATE_CATEGORY\",\n\tCREATE_CATEGORY = \"CREATE_CATEGORY\",\n\tDELETE_CATEGORY = \"DELETE_CATEGORY\",\n\tVIEW_ADDONS = \"VIEW_ADDONS\",\n\tUPDATE_ADDON = \"UPDATE_ADDON\",\n\tCREATE_ADDON = \"CREATE_ADDON\",\n\tDELETE_ADDON = \"DELETE_ADDON\",\n\tVIEW_TABLES = \"VIEW_TABLES\",\n\tUPDATE_TABLE = \"UPDATE_TABLE\",\n\tUPDATE_TABLE_STATUS = \"UPDATE_TABLE_STATUS\",\n\tCREATE_TABLE = \"CREATE_TABLE\",\n\tDELETE_TABLE = \"DELETE_TABLE\",\n\tVIEW_BRANCHES = \"VIEW_BRANCHES\",\n\tUPDATE_BRANCH = \"UPDATE_BRANCH\",\n\tCREATE_BRANCH = \"CREATE_BRANCH\",\n\tDELETE_BRANCH = \"DELETE_BRANCH\",\n\tVIEW_EMPLOYEES = \"VIEW_EMPLOYEES\",\n\tUPDATE_EMPLOYEE = \"UPDATE_EMPLOYEE\",\n\tCREATE_EMPLOYEE = \"CREATE_EMPLOYEE\",\n\tDELETE_EMPLOYEE = \"DELETE_EMPLOYEE\",\n\tVIEW_ANALYTICS = \"VIEW_ANALYTICS\",\n\tVIEW_SALES_REPORTS = \"VIEW_SALES_REPORTS\",\n\tVIEW_SUBSCRIPTION = \"VIEW_SUBSCRIPTION\",\n\tUPDATE_SUBSCRIPTION = \"UPDATE_SUBSCRIPTION\",\n\tVIEW_QR_CODES = \"VIEW_QR_CODES\",\n\tCREATE_QR_CODE = \"CREATE_QR_CODE\",\n\tDELETE_QR_CODE = \"DELETE_QR_CODE\",\n\tALL = \"ALL\",\n\t// Inventory\n\tVIEW_INVENTORY = \"VIEW_INVENTORY\",\n\tVIEW_PURCHASES = \"VIEW_PURCHASES\",\n\tVIEW_PURCHASE_DETAIL = \"VIEW_PURCHASE_DETAIL\",\n\tCREATE_PURCHASE = \"CREATE_PURCHASE\",\n\tUPDATE_PURCHASE = \"UPDATE_PURCHASE\",\n\tDELETE_PURCHASE = \"DELETE_PURCHASE\",\n\tVIEW_INVENTORY_PRODUCTS = \"VIEW_INVENTORY_PRODUCTS\",\n\tCREATE_INVENTORY_PRODUCT = \"CREATE_INVENTORY_PRODUCT\",\n\tUPDATE_INVENTORY_PRODUCT = \"UPDATE_INVENTORY_PRODUCT\",\n\tDELETE_INVENTORY_PRODUCT = \"DELETE_INVENTORY_PRODUCT\",\n\tVIEW_BUSINESS_BALANCE = \"VIEW_BUSINESS_BALANCE\",\n\tVIEW_BRANCH_BALANCE = \"VIEW_BRANCH_BALANCE\",\n\tUPDATE_PRODUCT_INGREDIENTS = \"UPDATE_PRODUCT_INGREDIENTS\",\n\tDELETE_PRODUCT_INGREDIENTS = \"DELETE_PRODUCT_INGREDIENTS\",\n\tAI_ASSISTANT = \"AI_ASSISTANT\",\n\tVIEW_PAYMENTS = \"VIEW_PAYMENTS\",\n\tTAKE_PAYMENT = \"TAKE_PAYMENT\",\n\tREFUND_PAYMENT = \"REFUND_PAYMENT\",\n\tPAYMENT_COMP = \"COMP\",\n}\n\nexport enum UserRole {\n\tOWNER = \"OWNER\",\n\tBRANCH_MANAGER = \"BRANCH_MANAGER\",\n\tGENERAL_MANAGER = \"GENERAL_MANAGER\",\n\tCHEF = \"CHEF\",\n\tSOUS_CHEF = \"SOUS_CHEF\",\n\tPASTRY_CHEF = \"PASTRY_CHEF\",\n\tLINE_COOK = \"LINE_COOK\",\n\tPREP_COOK = \"PREP_COOK\",\n\tKITCHEN_ASSISTANT = \"KITCHEN_ASSISTANT\",\n\tDISHWASHER = \"DISHWASHER\",\n\tHEAD_WAITER = \"HEAD_WAITER\",\n\tWAITER = \"WAITER\",\n\tRUNNER = \"RUNNER\",\n\tBARISTA = \"BARISTA\",\n\tBARTENDER = \"BARTENDER\",\n\tSOMMELIER = \"SOMMELIER\",\n\tACCOUNTANT = \"ACCOUNTANT\",\n\tROOM_SERVICE_STAFF = \"ROOM_SERVICE_STAFF\",\n\tDELIVERY_DRIVER = \"DELIVERY_DRIVER\",\n\tINVENTORY_MANAGER = \"INVENTORY_MANAGER\",\n\tPURCHASING_MANAGER = \"PURCHASING_MANAGER\",\n\tWAREHOUSE_STAFF = \"WAREHOUSE_STAFF\",\n\tCASHIER = \"CASHIER\"\n}\n\nexport interface User {\n\tid?: number;\n\temail: string;\n\tfullName: string;\n\trole?: UserRole;\n\tavatar64?: string | null;\n\tavatar128?: string | null;\n\tavatar256?: string | null;\n\tbusinessId?: number;\n\tbranchId?: number | null;\n\tcreatedAt: string;\n\temailVerified?: boolean;\n\tpermissions?: EmployeePermission[];\n}\n","import { isEmpty, sortNumbers } from \"@sorocraft/js-utils\";\nimport { IconType } from \"@sorocraft/ui\";\nimport { Check, BagCheck, Delivery, Chef, FileCheck, HourglassHalf } from \"@sorocraft/ui/icons\";\n\nimport {\n\tCalculatePreviewResponse,\n\tOrder,\n\tOrderAddon,\n\tOrderAddonOption,\n\tOrderItem,\n\tOrderStatus,\n\tOrderType,\n\tSelectedAddons,\n} from \"./models\";\n\nimport * as addonModels from \"../addon/models\";\nimport * as branchModels from \"../branch/models\";\nimport { OrderErrors } from \"./constants\";\n\nexport const generateOrderItemsId = (\n\tproductId: number,\n\tvariantId: number | null,\n\tselectedAddons?: SelectedAddons,\n): string => {\n\tif (!productId) throw new Error(\"Product ID is required\");\n\n\t// Build the order items ID base with productId and variantId\n\tlet orderItemsId = `${productId}`;\n\tif (variantId) {\n\t\torderItemsId += `-${variantId}`;\n\t}\n\n\t// Build the addon part of the ID\n\tconst addonIdsPart = Object.entries(selectedAddons || {})\n\t\t.map(([addonId, option]) => {\n\t\t\tif (!addonId || !option) return null; // Skip invalid entries\n\t\t\tconst optionIds = Array.isArray(option)\n\t\t\t\t? sortNumbers(option).filter(Boolean).join(\"-\")\n\t\t\t\t: `${option}`;\n\t\t\tif (!optionIds) return null;\n\t\t\treturn `${addonId}-${optionIds}`;\n\t\t})\n\t\t.filter(Boolean) // Remove null/undefined values\n\t\t.join(\"-\");\n\n\t// Append addonIdsPart if it's not empty\n\tif (addonIdsPart) {\n\t\torderItemsId += `-${addonIdsPart}`;\n\t}\n\n\treturn orderItemsId;\n};\n\nexport const getSelectedAddonsFromOrderItems = (item: OrderItem): SelectedAddons => {\n\tconst selectedAddons: SelectedAddons = {};\n\n\tfor (const { addonId, options = [] } of item.addons || []) {\n\t\tconst optionIds = options.map(({ optionId }) => optionId);\n\t\tselectedAddons[addonId] = optionIds.length === 1 ? optionIds[0] : optionIds;\n\t}\n\n\treturn selectedAddons;\n};\n\nexport const getStatusIcon = (status: OrderStatus): IconType => {\n\tswitch (status) {\n\t\tcase OrderStatus.COMPLETED:\n\t\t\treturn Check;\n\t\tcase OrderStatus.DELIVERED:\n\t\t\treturn BagCheck;\n\t\tcase OrderStatus.OUT_FOR_DELIVERY:\n\t\t\treturn Delivery;\n\t\tcase OrderStatus.PREPARING:\n\t\t\treturn Chef;\n\t\tcase OrderStatus.CONFIRMED:\n\t\t\treturn FileCheck;\n\t\tcase OrderStatus.PENDING:\n\t\t\treturn HourglassHalf;\n\n\t\tdefault:\n\t\t\treturn HourglassHalf;\n\t}\n};\n\nexport const buildSelectedAddonsPayload = (\n\tproductAddons: addonModels.MenuAddon[] = [],\n\tselectedAddons: SelectedAddons = {},\n): OrderAddon[] => {\n\treturn Object.entries(selectedAddons).map(([addonIdStr, selected]) => {\n\t\tconst addonId = Number(addonIdStr);\n\t\tconst selectedOptionIds = Array.isArray(selected) ? selected : [selected];\n\n\t\tconst addon = productAddons.find((addon) => addon.id === addonId);\n\t\tif (isEmpty(addon)) {\n\t\t\treturn {\n\t\t\t\taddonId,\n\t\t\t\toptions: [],\n\t\t\t};\n\t\t}\n\n\t\tconst options: OrderAddonOption[] = (addon.options || [])\n\t\t\t.filter((option) => selectedOptionIds.includes(option.id))\n\t\t\t.map((option) => ({\n\t\t\t\toptionId: option.id,\n\t\t\t\tprice: option.listingPrice ?? option.price,\n\t\t\t}));\n\n\t\treturn {\n\t\t\taddonId,\n\t\t\toptions,\n\t\t};\n\t});\n};\n\nexport const getDefaultOrderType = (\n\tsettings: branchModels.BranchSettings,\n\tisOpen: boolean,\n\tisDelivering: boolean,\n): OrderType | null => {\n\tif (!settings) return null;\n\n\tconst { deliveryOrderEnabled, dineInOrderEnabled, pickupOrderEnabled } = settings;\n\n\tif (deliveryOrderEnabled && isDelivering) {\n\t\treturn OrderType.DELIVERY;\n\t}\n\n\tif (dineInOrderEnabled && isOpen) {\n\t\treturn OrderType.DINE_IN;\n\t}\n\n\tif (pickupOrderEnabled && isOpen) {\n\t\treturn OrderType.PICK_UP;\n\t}\n\n\treturn null;\n};\n\n// Defensive shape check for the /order/calculate response. The service is\n// typed as CalculatePreviewResponse, but the network can return malformed\n// payloads (empty body, HTML error page) that would corrupt preview state\n// and break price-line lookups downstream.\nexport const isValidPreviewResponse = (data: unknown): data is CalculatePreviewResponse => {\n\tif (!data || typeof data !== \"object\") return false;\n\tconst d = data as Partial<CalculatePreviewResponse>;\n\treturn (\n\t\ttypeof d.totalPriceWithoutTax === \"number\" &&\n\t\ttypeof d.totalPriceWithTax === \"number\" &&\n\t\ttypeof d.totalPriceWithTaxAndFees === \"number\" &&\n\t\ttypeof d.totalTax === \"number\" &&\n\t\ttypeof d.deliveryFee === \"number\" &&\n\t\ttypeof d.serviceFee === \"number\" &&\n\t\tArray.isArray(d.items) &&\n\t\tArray.isArray(d.taxes)\n\t);\n};\n\nexport const getOrderErrorMessages = (field: keyof Order) => {\n\tswitch (field) {\n\t\tcase \"customer\":\n\t\t\treturn OrderErrors.ADDRESS_IS_EMPTY;\n\n\t\tcase \"tableId\":\n\t\t\treturn OrderErrors.TABLE_NOT_SELECTED;\n\n\t\tcase \"items\":\n\t\t\treturn OrderErrors.EMPTY_ITEMS;\n\n\t\tcase \"branchId\":\n\t\t\treturn OrderErrors.BRANCH_NOT_SELECTED;\n\n\t\tdefault:\n\t\t\treturn OrderErrors.FIELD_REQUIRED_ERROR;\n\t}\n};\n\nexport * from \"./utils/item-price\";\n","import { FormErrors } from \"@sorocraft/ui\";\nimport { checkIsValidEmail } from \"@sorocraft/js-utils\";\n\nimport {\n\tCustomerAddress,\n\tCustomerAuthForm,\n\tCustomerAuthPhoneForm,\n\tCustomerAuthStep,\n} from \"./models\";\n\nexport const preparePhoneNumber = (form: CustomerAuthPhoneForm) => {\n\tconst phoneNumber = `${form.countryCode}${form.phoneNumber}`.replaceAll(\"+\", \"\");\n\n\treturn phoneNumber;\n};\n\nexport const validateForm = (form: CustomerAuthForm, step: CustomerAuthStep): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { email, otp } = form || {};\n\n\tswitch (step) {\n\t\tcase CustomerAuthStep.OTP: {\n\t\t\tif (!email || !checkIsValidEmail(email)) {\n\t\t\t\terrors.email = \"Invalid Email Address\";\n\t\t\t}\n\n\t\t\tif (!otp || otp.length !== 6) {\n\t\t\t\terrors.otp = \"Invalid OTP\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase CustomerAuthStep.EMAIL: {\n\t\t\tif (!email || !checkIsValidEmail(email)) {\n\t\t\t\terrors.email = \"Invalid Email Address\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn errors;\n};\n\nexport const validateAddressForm = (form: CustomerAddress): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { countryCode, cityName, street, houseNumber } = form || {};\n\n\tif (!countryCode) errors.countryCode = \"COUNTRY_REQUIRED\";\n\tif (!cityName) errors.cityName = \"CITY_REQUIRED\";\n\tif (!street) errors.street = \"STREET_REQUIRED\";\n\tif (!houseNumber) errors.houseNumber = \"STREET_NUMBER_REQUIRED\";\n\n\treturn errors;\n};\n\nexport const formatCityLine = (fields: (string | undefined)[]) => {\n\treturn (fields || []).filter(Boolean).join(\", \");\n};\n\nexport const formatAddressLine = (\n\tstreet: string,\n\thouseNumber: string,\n\tadditionalNumber: string,\n) => {\n\tconst house = [houseNumber, additionalNumber].filter(Boolean).join(\"/\");\n\tconst fullAddress = [street, house].filter(Boolean).join(\" \");\n\n\treturn fullAddress;\n};\n","import { MenuAddon, MenuAddonOption } from \"./models\";\n\nexport const getAddonTranslation = (addon: MenuAddon, language: string): string => {\n\treturn addon?.title?.[language] || \"\";\n};\n\nexport const getAddonOptionTranslation = (option: MenuAddonOption, language: string): string => {\n\treturn option?.title?.[language] || \"\";\n};\n\nexport const getOptionTitles = (\n\toptions: MenuAddonOption[],\n\toptionIds: number | number[],\n\tlanguage: string,\n): string => {\n\tif (Array.isArray(optionIds)) {\n\t\treturn (options || [])\n\t\t\t.filter(({ id }) => optionIds.includes(id))\n\t\t\t.map(({ title }) => title?.[language] || \"\")\n\t\t\t.filter(Boolean)\n\t\t\t.join(\", \");\n\t} else {\n\t\tconst option = (options || []).find(({ id }) => id === optionIds);\n\t\treturn option?.title?.[language] || \"\";\n\t}\n};\n\nexport const getAddonTitle = (addon: MenuAddon, language: string): string => {\n\treturn addon?.title?.[language] || \"\";\n};\n","import { isEmpty } from \"@sorocraft/js-utils\";\n\nimport { EmployeePermission, UserRole } from \"./models\";\n\nexport const getPermissionsByRole = (role?: UserRole) => {\n\tswitch (role) {\n\t\t/** Owner - Has every permission */\n\t\tcase UserRole.OWNER:\n\t\t\treturn [EmployeePermission.ALL];\n\n\t\t/** General Manager - All except subscription updates */\n\t\tcase UserRole.GENERAL_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_BUSINESS,\n\t\t\t\tEmployeePermission.UPDATE_BUSINESS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE,\n\t\t\t\tEmployeePermission.CREATE_TABLE,\n\t\t\t\tEmployeePermission.DELETE_TABLE,\n\t\t\t\tEmployeePermission.VIEW_BRANCHES,\n\t\t\t\tEmployeePermission.UPDATE_BRANCH,\n\t\t\t\tEmployeePermission.CREATE_BRANCH,\n\t\t\t\tEmployeePermission.DELETE_BRANCH,\n\t\t\t\tEmployeePermission.VIEW_EMPLOYEES,\n\t\t\t\tEmployeePermission.UPDATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.CREATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.DELETE_EMPLOYEE,\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.VIEW_SUBSCRIPTION,\n\t\t\t\tEmployeePermission.CREATE_QR_CODE,\n\t\t\t\tEmployeePermission.DELETE_QR_CODE,\n\t\t\t\tEmployeePermission.AI_ASSISTANT,\n\t\t\t];\n\n\t\t/** Branch Manager - Controls operations within one branch */\n\t\tcase UserRole.BRANCH_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_BUSINESS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE,\n\t\t\t\tEmployeePermission.CREATE_TABLE,\n\t\t\t\tEmployeePermission.DELETE_TABLE,\n\t\t\t\tEmployeePermission.VIEW_EMPLOYEES,\n\t\t\t\tEmployeePermission.UPDATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.CREATE_QR_CODE,\n\t\t\t\tEmployeePermission.DELETE_QR_CODE,\n\t\t\t\tEmployeePermission.AI_ASSISTANT,\n\t\t\t];\n\n\t\t/** Chef - Manages menu and kitchen orders */\n\t\tcase UserRole.CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Sous Chef - Assists chef with orders and menu */\n\t\tcase UserRole.SOUS_CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Pastry Chef - Limited to dessert menu items */\n\t\tcase UserRole.PASTRY_CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Line Cook / Prep Cook / Kitchen Assistant - Read-only menu & order updates */\n\t\tcase UserRole.LINE_COOK:\n\t\tcase UserRole.PREP_COOK:\n\t\tcase UserRole.KITCHEN_ASSISTANT:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Head Waiter - Full service control */\n\t\tcase UserRole.HEAD_WAITER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE_STATUS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t];\n\n\t\t/** Waiter - Handles orders and table service */\n\t\tcase UserRole.WAITER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE_STATUS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t];\n\n\t\t/** Runner - Sees and updates order delivery progress */\n\t\tcase UserRole.RUNNER:\n\t\t\treturn [EmployeePermission.VIEW_ORDERS, EmployeePermission.UPDATE_ORDER];\n\n\t\t/** ☕ Barista / Bartender / Sommelier / Room Service */\n\t\tcase UserRole.BARISTA:\n\t\tcase UserRole.BARTENDER:\n\t\tcase UserRole.SOMMELIER:\n\t\tcase UserRole.ROOM_SERVICE_STAFF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Accountant - Analytics, reports, subscriptions */\n\t\tcase UserRole.ACCOUNTANT:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.VIEW_SUBSCRIPTION,\n\t\t\t];\n\n\t\t/** Delivery Driver - Delivery orders only */\n\t\tcase UserRole.DELIVERY_DRIVER:\n\t\t\treturn [EmployeePermission.VIEW_ORDERS, EmployeePermission.UPDATE_ORDER];\n\n\t\t/** Inventory Manager - Controls menu stock-related items */\n\t\tcase UserRole.INVENTORY_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_PURCHASES,\n\t\t\t\tEmployeePermission.CREATE_PURCHASE,\n\t\t\t\tEmployeePermission.UPDATE_PURCHASE,\n\t\t\t\tEmployeePermission.DELETE_PURCHASE,\n\t\t\t\tEmployeePermission.VIEW_INVENTORY,\n\t\t\t\tEmployeePermission.VIEW_INVENTORY_PRODUCTS,\n\t\t\t\tEmployeePermission.CREATE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.UPDATE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.DELETE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.VIEW_PURCHASE_DETAIL,\n\t\t\t\tEmployeePermission.VIEW_BRANCH_BALANCE,\n\t\t\t\tEmployeePermission.UPDATE_PRODUCT_INGREDIENTS,\n\t\t\t\tEmployeePermission.DELETE_PRODUCT_INGREDIENTS,\n\t\t\t];\n\n\t\t/** Purchasing Manager - Similar to inventory but more on creation/deletion */\n\t\tcase UserRole.PURCHASING_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t];\n\n\t\t/** Warehouse Staff - View only */\n\t\tcase UserRole.WAREHOUSE_STAFF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t];\n\n\t\tdefault:\n\t\t\treturn [];\n\t}\n};\n\nexport const getHasUserPermission = (\n\trequiredPermissions: EmployeePermission[],\n\tuserPermissions: EmployeePermission[],\n) => {\n\tif (isEmpty(requiredPermissions)) return true;\n\tif (isEmpty(userPermissions)) return false;\n\tif (userPermissions.includes(EmployeePermission.ALL)) return true;\n\n\treturn requiredPermissions.some((permission) => userPermissions.includes(permission));\n};\n","import { getQueryParam } from \"@sorocraft/js-utils\";\n\nimport { FeatureSegment, type Feature } from \"./models\";\n\nimport { FEATURES_LIST } from \"./constants\";\n\nexport const getIsFeatureActive = (feature: Feature, businessSegment: FeatureSegment): boolean => {\n\t// Feature is force-enabled via query param\n\tif (getQueryParam(feature) === \"1\") return true;\n\n\t// Build the list of enabled segments for the current businessSegment\n\tconst enabledSegments: FeatureSegment[] =\n\t\tbusinessSegment === FeatureSegment.ALPHA\n\t\t\t? [FeatureSegment.ALPHA, FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: businessSegment === FeatureSegment.BETA\n\t\t\t? [FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: [FeatureSegment.ALL];\n\n\t// Check if feature exists in any of the enabled segments\n\treturn enabledSegments.some((segment) => FEATURES_LIST[segment]?.includes(feature));\n};\n","import { LocalizedContent, Product, ProductVariant, SellUnitType } from \"./models\";\n\nimport { MenuAddon } from \"src/modules/addon/models\";\n\nexport const getProductTranslation = (\n\tproduct: Pick<Product, \"translations\">,\n\tlanguage: string,\n): LocalizedContent => {\n\treturn product?.translations?.[language] || ({} as LocalizedContent);\n};\n\nexport const getProductVariant = (\n\tproduct: Pick<Product, \"variants\">,\n\tvariantId: number,\n): ProductVariant => {\n\treturn product?.variants?.find?.((item) => item.id === variantId) || ({} as ProductVariant);\n};\n\nexport const getProductVariantTranslation = (variant: ProductVariant, language: string): string => {\n\treturn variant?.title?.[language] || \"\";\n};\n\nexport const getProductAddon = (product: Product, addonId: number): MenuAddon => {\n\treturn (product?.addons || []).find(({ id }) => id === addonId) || ({} as MenuAddon);\n};\n\nexport const getPriceSuffix = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn \" / kg\";\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn \" / l\";\n\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n};\n\nexport const getProductSellUnitShortCuts = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn {\n\t\t\t\t\"50gr\": 0.05,\n\t\t\t\t\"100gr\": 0.1,\n\t\t\t\t\"150gr\": 0.15,\n\t\t\t\t\"200gr\": 0.2,\n\t\t\t\t\"250gr\": 0.25,\n\t\t\t\t\"300gr\": 0.3,\n\t\t\t\t\"350gr\": 0.35,\n\t\t\t\t\"400gr\": 0.4,\n\t\t\t\t\"450gr\": 0.45,\n\t\t\t\t\"500gr\": 0.5,\n\t\t\t\t\"600gr\": 0.6,\n\t\t\t\t\"700gr\": 0.7,\n\t\t\t\t\"750gr\": 0.75,\n\t\t\t\t\"800gr\": 0.8,\n\t\t\t\t\"850gr\": 0.85,\n\t\t\t\t\"900gr\": 0.9,\n\t\t\t\t\"950gr\": 0.95,\n\t\t\t\t\"1kg\": 1,\n\t\t\t\t\"2kg\": 2,\n\t\t\t\t\"5kg\": 5,\n\t\t\t\t\"10kg\": 10,\n\t\t\t\t\"20kg\": 20,\n\t\t\t};\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn {\n\t\t\t\t\"50ml\": 0.05,\n\t\t\t\t\"100ml\": 0.1,\n\t\t\t\t\"150ml\": 0.15,\n\t\t\t\t\"200ml\": 0.2,\n\t\t\t\t\"250ml\": 0.25,\n\t\t\t\t\"300ml\": 0.3,\n\t\t\t\t\"350ml\": 0.35,\n\t\t\t\t\"400ml\": 0.4,\n\t\t\t\t\"450ml\": 0.45,\n\t\t\t\t\"500ml\": 0.5,\n\t\t\t\t\"600ml\": 0.6,\n\t\t\t\t\"700ml\": 0.7,\n\t\t\t\t\"750ml\": 0.75,\n\t\t\t\t\"800ml\": 0.8,\n\t\t\t\t\"850ml\": 0.85,\n\t\t\t\t\"900ml\": 0.9,\n\t\t\t\t\"950ml\": 0.95,\n\t\t\t\t\"1l\": 1,\n\t\t\t\t\"2l\": 2,\n\t\t\t\t\"5l\": 5,\n\t\t\t\t\"10l\": 10,\n\t\t\t\t\"20l\": 20,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {};\n\t}\n};\n\nexport * from \"./utils/listing-price\";\nexport * from \"./utils/order-price\";\n","import * as categoryModels from \"src/modules/category/models\";\nimport * as productModels from \"src/modules/product/models\";\n\nimport { CategoryProductMap } from \"./models\";\n\nexport const prepareCategoryAndProductMap = (\n\tcategories: categoryModels.Category[],\n\tproducts: productModels.Product[]\n): CategoryProductMap[] => {\n\tconst productMap = products.reduce<Record<number, productModels.Product[]>>((map, product) => {\n\t\tif (!product.visible) return map;\n\n\t\tconst categoryId = Number(product.categoryId);\n\t\tif (!map[categoryId]) {\n\t\t\tmap[categoryId] = [];\n\t\t}\n\t\tmap[categoryId].push(product);\n\t\treturn map;\n\t}, {});\n\n\treturn categories\n\t\t.map((category) => ({\n\t\t\t...category,\n\t\t\tproducts: (productMap[Number(category.id)] || []) as productModels.Product[],\n\t\t}))\n\t\t.filter((category) => category?.products?.length > 0);\n};\n"],"names":["ProductView","SellUnitType","getUnitListingPrice","item","_a","_b","listingPrice","price","MenuAddonSelectType","getAllSelectedOptionsListingPrice","product","selectedAddons","total","addon","addons","id","addonId","selectType","options","Object","prototype","hasOwnProperty","call","selection","selectedOptionIds","SINGLE","optionId","option","find","OrderType","OrderStatus","OrderItemStatus","PaymentMethod","OrderStep","OrderErrors","CASH","CART","DETAILS","COMPLETED","getOrderItemListingRawPrice","orderItem","variant","quantity","baseUnitPrice","addonsUnitPrice","reduce","addonSum","optionSum","CustomerAuthStep","CustomerAddressType","Feature","FeatureSegment","FEATURES_LIST","ALPHA","UPLOAD_VIDEO","BETA","ALL","DOMAIN","IMAGE_BASE_URL","validators","number","AZERBAIJANI_PREFIXES","RegExp","join","test","isValid","error","keyStr","triplet","e1","e2","e3","charAt","getCategoryTranslation","category","language","translations","EmployeePermission","UserRole","hex","deltaPct","n","parseInt","replace","r","g","b","max","Math","min","l","h","s","d","newL","hueToRgb","p","q","t","r2","g2","b2","toHex","x","round","toString","padStart","productAddons","entries","map","addonIdStr","selected","Number","Array","isArray","isEmpty","filter","includes","street","houseNumber","additionalNumber","Boolean","fields","productId","variantId","Error","orderItemsId","addonIdsPart","optionIds","sortNumbers","title","hostname","locale","url","domain","categoryId","categories","name","coverPhoto","startsWith","settings","isOpen","isDelivering","deliveryOrderEnabled","dineInOrderEnabled","pickupOrderEnabled","DELIVERY","DINE_IN","PICK_UP","requiredPermissions","userPermissions","some","permission","image","feature","businessSegment","getQueryParam","segment","logoImage","currency","priceFormatter","field","ADDRESS_IS_EMPTY","TABLE_NOT_SELECTED","EMPTY_ITEMS","BRANCH_NOT_SELECTED","FIELD_REQUIRED_ERROR","totalPrice","role","OWNER","GENERAL_MANAGER","VIEW_BUSINESS","UPDATE_BUSINESS","VIEW_ORDERS","UPDATE_ORDER","CREATE_ORDER","VIEW_QR_MENU","VIEW_QR_CODES","VIEW_MENU","VIEW_MENU_ITEMS","UPDATE_MENU_ITEM","CREATE_MENU_ITEM","DELETE_MENU_ITEM","VIEW_CATEGORIES","UPDATE_CATEGORY","CREATE_CATEGORY","DELETE_CATEGORY","VIEW_ADDONS","UPDATE_ADDON","CREATE_ADDON","DELETE_ADDON","VIEW_TABLES","UPDATE_TABLE","CREATE_TABLE","DELETE_TABLE","VIEW_BRANCHES","UPDATE_BRANCH","CREATE_BRANCH","DELETE_BRANCH","VIEW_EMPLOYEES","UPDATE_EMPLOYEE","CREATE_EMPLOYEE","DELETE_EMPLOYEE","VIEW_ANALYTICS","VIEW_SALES_REPORTS","VIEW_SUBSCRIPTION","CREATE_QR_CODE","DELETE_QR_CODE","AI_ASSISTANT","BRANCH_MANAGER","CHEF","SOUS_CHEF","PASTRY_CHEF","LINE_COOK","PREP_COOK","KITCHEN_ASSISTANT","HEAD_WAITER","UPDATE_TABLE_STATUS","WAITER","RUNNER","BARISTA","BARTENDER","SOMMELIER","ROOM_SERVICE_STAFF","ACCOUNTANT","DELIVERY_DRIVER","INVENTORY_MANAGER","VIEW_PURCHASES","CREATE_PURCHASE","UPDATE_PURCHASE","DELETE_PURCHASE","VIEW_INVENTORY","VIEW_INVENTORY_PRODUCTS","CREATE_INVENTORY_PRODUCT","UPDATE_INVENTORY_PRODUCT","DELETE_INVENTORY_PRODUCT","VIEW_PURCHASE_DETAIL","VIEW_BRANCH_BALANCE","UPDATE_PRODUCT_INGREDIENTS","DELETE_PRODUCT_INGREDIENTS","PURCHASING_MANAGER","WAREHOUSE_STAFF","sellUnitType","WEIGHT","VOLUME","keys","length","variants","undefined","source","status","Check","DELIVERED","BagCheck","OUT_FOR_DELIVERY","Delivery","PREPARING","Chef","CONFIRMED","FileCheck","PENDING","HourglassHalf","video","data","totalPriceWithoutTax","totalPriceWithTax","totalPriceWithTaxAndFees","totalTax","deliveryFee","serviceFee","items","taxes","products","productMap","visible","push","assign","form","countryCode","phoneNumber","replaceAll","errors","cityName","step","email","otp","OTP","checkIsValidEmail","EMAIL","cleaned","nationalNumber","slice","validator"],"mappings":"mFAgDA,IAAYA,EASAC,GATZ,SAAYD,GACXA,EAAA,KAAA,OACAA,EAAA,KAAA,MACA,CAHD,CAAYA,IAAAA,EAAW,CAAA,IASvB,SAAYC,GACXA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,OAAA,QACA,CAJD,CAAYA,IAAAA,EAAY,CAAA,ICrDjB,MAAMC,EAAuBC,IAG/B,IAAAC,EAAAC,EAAC,OAAiC,QAAjCA,EAAkB,QAAlBD,EAAAD,aAAI,EAAJA,EAAMG,oBAAY,IAAAF,EAAAA,EAAID,aAAI,EAAJA,EAAMI,aAAK,IAAAF,EAAAA,EAAI,GCP3C,IAAYG,GAAZ,SAAYA,GACXA,EAAA,OAAA,SACAA,EAAA,SAAA,UACA,CAHD,CAAYA,IAAAA,EAAmB,CAAA,ICQxB,MAAMC,EAAoC,CAChDC,EACAC,EAA6C,MAE7C,IAAIC,EAAQ,EAEZ,IAAK,MAAMC,KAASH,aAAO,EAAPA,EAASI,SAAU,GAAI,CAC1C,MAAQC,GAAIC,EAAOC,WAAEA,EAAUC,QAAEA,GAAYL,EAE7C,IAAKM,OAAOC,UAAUC,eAAeC,KAAKX,EAAgBK,GAAU,SAEpE,MAAMO,EAAYZ,EAAeK,GAC3BQ,EACLP,IAAeT,EAAoBiB,OAChC,CAACF,GACCA,GAAa,GAEnB,IAAK,MAAMG,KAAYF,EAAmB,CACzC,MAAMG,GAAUT,GAAW,IAAIU,KAAK,EAAGb,QAASA,IAAOW,GACnDC,IAAQf,GAASV,EAAoByB,GAC1C,CACD,CAEA,OAAOf,GC5BR,IAAYiB,EAMAC,EAaAC,EAOAC,EAwEAC,ECtFAC,GDZZ,SAAYL,GACXA,EAAA,QAAA,UACAA,EAAA,QAAA,UACAA,EAAA,SAAA,UACA,CAJD,CAAYA,IAAAA,EAAS,CAAA,IAMrB,SAAYC,GACXA,EAAA,MAAA,QACAA,EAAA,QAAA,UACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,MAAA,QACAA,EAAA,iBAAA,mBACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,OAAA,QACA,CAXD,CAAYA,IAAAA,EAAW,CAAA,IAavB,SAAYC,GACXA,EAAA,QAAA,UACAA,EAAA,UAAA,YACAA,EAAA,MAAA,QACAA,EAAA,OAAA,QACA,CALD,CAAYA,IAAAA,EAAe,CAAA,IAO3B,SAAYC,GACXA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,OAAA,SACAA,EAAA,SAAA,UACA,CALD,CAAYA,IAAAA,EAAa,CAAA,IAwEzB,SAAYC,GACXA,EAAA,KAAA,OACAA,EAAA,QAAA,UACAA,EAAA,UAAA,WACA,CAJD,CAAYA,IAAAA,EAAS,CAAA,ICjGID,EAAcG,KAGXF,EAAUG,KAAMH,EAAUI,QAASJ,EAAUK,UAQzE,SAAYJ,GACXA,EAAA,qBAAA,yBACAA,EAAA,mBAAA,wBACAA,EAAA,iBAAA,0BACAA,EAAA,YAAA,wBACAA,EAAA,oBAAA,wBACA,CAND,CAAYA,IAAAA,EAAW,CAAA,ICZhB,MAAMK,EAA+BC,YAC3C,MAAMjC,MAAEA,EAAKkC,QAAEA,EAAO3B,OAAEA,EAAM4B,SAAEA,GAAaF,GAAa,CAAA,EAEpDG,EAAuC,QAAvBtC,EAAc,QAAdD,EAAAqC,aAAO,EAAPA,EAASlC,aAAK,IAAAH,EAAAA,EAAIG,SAAK,IAAAF,EAAAA,EAAI,EAE3CuC,GAAmB9B,GAAU,IAAI+B,OACtC,CAACC,EAAUjC,IACViC,IACCjC,eAAAA,EAAOK,UAAW,IAAI2B,OAAO,CAACE,EAAWpB,KAAU,IAAAvB,EAAC,OAAA2C,GAA0B,UAAbpB,aAAM,EAANA,EAAQpB,aAAK,IAAAH,EAAAA,EAAI,IAAI,GACxF,GAID,OADkBuC,EAAgBC,IACdF,QAAAA,EAAY,IChBjC,IAAYM,EAMAC,GANZ,SAAYD,GACXA,EAAA,MAAA,QACAA,EAAA,IAAA,MACAA,EAAA,MAAA,OACA,CAJD,CAAYA,IAAAA,EAAgB,CAAA,IAM5B,SAAYC,GACXA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,OAAA,QACA,CAJD,CAAYA,IAAAA,EAAmB,CAAA,ICN/B,IAAYC,EAGAC,GAHZ,SAAYD,GACXA,EAAA,aAAA,cACA,CAFD,CAAYA,IAAAA,EAAO,CAAA,IAGnB,SAAYC,GACXA,EAAA,MAAA,QACAA,EAAA,KAAA,OACAA,EAAA,IAAA,KACA,CAJD,CAAYA,IAAAA,EAAc,CAAA,ICDnB,MAAMC,EAAwD,CACpE,CAACD,EAAeE,OAAQ,CAACH,EAAQI,cACjC,CAACH,EAAeI,MAAO,GACvB,CAACJ,EAAeK,KAAM,ICYVC,EAAS,aAITC,EAAiB,4BCZxBC,EAAwC,CAC7C,IAAQC,IACP,MAAMC,EAAuB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAGxE,OAFgB,IAAIC,OAAO,KAAKD,EAAqBE,KAAK,gBAE7CC,KAAKJ,GASX,CAAEK,SAAS,GARV,CACNA,SAAS,EACTC,MAAO,uDAAuDL,EAAqBE,KAClF,UAQJ,GAAOH,GACU,UAEHI,KAAKJ,GAOX,CAAEK,SAAS,GANV,CACNA,SAAS,EACTC,MAAO,iDAiELC,EAAS,oEAETC,EAAU,CAACC,EAAYC,EAAYC,IACxCJ,EAAOK,OAAOH,GAAM,GACpBF,EAAOK,QAAc,EAALH,IAAW,EAAMC,GAAM,GACvCH,EAAOK,QAAc,GAALF,IAAY,EAAMC,GAAM,GACxCJ,EAAOK,OAAY,GAALD,GCpGFE,EAAyB,CACrCC,EACAC,aAEA,OAAoC,QAA5BtE,EAAsB,QAAtBD,EAAAsE,aAAQ,EAARA,EAAUE,oBAAY,IAAAxE,OAAA,EAAAA,EAAEwB,YAAI,IAAAvB,OAAA,EAAAA,EAAAiB,KAAAlB,EAAID,GAASA,EAAKwE,WAAaA,KAClE,CAAA,GCRF,IAAYE,EAkEAC,GAlEZ,SAAYD,GACXA,EAAA,cAAA,gBACAA,EAAA,gBAAA,kBACAA,EAAA,yBAAA,2BACAA,EAAA,YAAA,cACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,eAAA,iBACAA,EAAA,aAAA,eACAA,EAAA,eAAA,iBACAA,EAAA,UAAA,YACAA,EAAA,gBAAA,kBACAA,EAAA,iBAAA,mBACAA,EAAA,iBAAA,mBACAA,EAAA,iBAAA,mBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,YAAA,cACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cACAA,EAAA,aAAA,eACAA,EAAA,oBAAA,sBACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,eAAA,iBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,eAAA,iBACAA,EAAA,mBAAA,qBACAA,EAAA,kBAAA,oBACAA,EAAA,oBAAA,sBACAA,EAAA,cAAA,gBACAA,EAAA,eAAA,iBACAA,EAAA,eAAA,iBACAA,EAAA,IAAA,MAEAA,EAAA,eAAA,iBACAA,EAAA,eAAA,iBACAA,EAAA,qBAAA,uBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,wBAAA,0BACAA,EAAA,yBAAA,2BACAA,EAAA,yBAAA,2BACAA,EAAA,yBAAA,2BACAA,EAAA,sBAAA,wBACAA,EAAA,oBAAA,sBACAA,EAAA,2BAAA,6BACAA,EAAA,2BAAA,6BACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBACAA,EAAA,aAAA,eACAA,EAAA,eAAA,iBACAA,EAAA,aAAA,MACA,CAhED,CAAYA,IAAAA,EAAkB,CAAA,IAkE9B,SAAYC,GACXA,EAAA,MAAA,QACAA,EAAA,eAAA,iBACAA,EAAA,gBAAA,kBACAA,EAAA,KAAA,OACAA,EAAA,UAAA,YACAA,EAAA,YAAA,cACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,kBAAA,oBACAA,EAAA,WAAA,aACAA,EAAA,YAAA,cACAA,EAAA,OAAA,SACAA,EAAA,OAAA,SACAA,EAAA,QAAA,UACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,WAAA,aACAA,EAAA,mBAAA,qBACAA,EAAA,gBAAA,kBACAA,EAAA,kBAAA,oBACAA,EAAA,mBAAA,qBACAA,EAAA,gBAAA,kBACAA,EAAA,QAAA,SACA,CAxBD,CAAYA,IAAAA,EAAQ,CAAA,4BFoDW,CAACC,EAAaC,KAC5C,MAAMC,EAAIC,SAASH,EAAII,QAAQ,IAAK,IAAK,IACnCC,GAAMH,GAAK,GAAM,KAAQ,IACzBI,GAAMJ,GAAK,EAAK,KAAQ,IACxBK,GAAS,IAAJL,GAAY,IAEjBM,EAAMC,KAAKD,IAAIH,EAAGC,EAAGC,GACrBG,EAAMD,KAAKC,IAAIL,EAAGC,EAAGC,GACrBI,GAAKH,EAAME,GAAO,EACxB,IAAIE,EAAI,EACJC,EAAI,EACR,GAAIL,IAAQE,EAAK,CAChB,MAAMI,EAAIN,EAAME,EAEhB,OADAG,EAAIF,EAAI,GAAMG,GAAK,EAAIN,EAAME,GAAOI,GAAKN,EAAME,GACvCF,GACP,KAAKH,EACJO,GAAKN,EAAIC,GAAKO,GAAKR,EAAIC,EAAI,EAAI,GAC/B,MACD,KAAKD,EACJM,GAAKL,EAAIF,GAAKS,EAAI,EAClB,MACD,KAAKP,EACJK,GAAKP,EAAIC,GAAKQ,EAAI,EAGpBF,GAAK,CACN,CAEA,MAAMG,EAAON,KAAKD,IAAI,EAAGC,KAAKC,IAAI,EAAGC,EAAIV,EAAW,MAE9Ce,EAAW,CAACC,EAAWC,EAAWC,KACnCA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,GAGR,IAAIG,EAAKL,EACLM,EAAKN,EACLO,EAAKP,EACT,GAAU,IAANF,EAAS,CACZ,MAAMK,EAAIH,EAAO,GAAMA,GAAQ,EAAIF,GAAKE,EAAOF,EAAIE,EAAOF,EACpDI,EAAI,EAAIF,EAAOG,EACrBE,EAAKJ,EAASC,EAAGC,EAAGN,EAAI,EAAI,GAC5BS,EAAKL,EAASC,EAAGC,EAAGN,GACpBU,EAAKN,EAASC,EAAGC,EAAGN,EAAI,EAAI,EAC7B,CAEA,MAAMW,EAASC,GACdf,KAAKgB,MAAU,IAAJD,GACTE,SAAS,IACTC,SAAS,EAAG,KACf,MAAO,IAAIJ,EAAMH,KAAMG,EAAMF,KAAME,EAAMD,yCGxFA,CACzCM,EAAyC,GACzChG,EAAiC,CAAA,IAE1BQ,OAAOyF,QAAQjG,GAAgBkG,IAAI,EAAEC,EAAYC,MACvD,MAAM/F,EAAUgG,OAAOF,GACjBtF,EAAoByF,MAAMC,QAAQH,GAAYA,EAAW,CAACA,GAE1DlG,EAAQ8F,EAAc/E,KAAMf,GAAUA,EAAME,KAAOC,GACzD,GAAImG,EAAAA,QAAQtG,GACX,MAAO,CACNG,UACAE,QAAS,IAIX,MAAMA,GAA+BL,EAAMK,SAAW,IACpDkG,OAAQzF,GAAWH,EAAkB6F,SAAS1F,EAAOZ,KACrD8F,IAAKlF,UAAW,MAAA,CAChBD,SAAUC,EAAOZ,GACjBR,MAA0B,UAAnBoB,EAAOrB,oBAAY,IAAAF,EAAAA,EAAIuB,EAAOpB,SAGvC,MAAO,CACNS,UACAE,uCC/C8B,CAChCoG,EACAC,EACAC,IAGoB,CAACF,EADP,CAACC,EAAaC,GAAkBJ,OAAOK,SAAS1D,KAAK,MAC/BqD,OAAOK,SAAS1D,KAAK,4BAV3B2D,IACtBA,GAAU,IAAIN,OAAOK,SAAS1D,KAAK,mCDxCR,CACnC4D,EACAC,EACAjH,KAEA,IAAKgH,EAAW,MAAM,IAAIE,MAAM,0BAGhC,IAAIC,EAAe,GAAGH,IAClBC,IACHE,GAAgB,IAAIF,KAIrB,MAAMG,EAAe5G,OAAOyF,QAAQjG,GAAkB,CAAA,GACpDkG,IAAI,EAAE7F,EAASW,MACf,IAAKX,IAAYW,EAAQ,OAAO,KAChC,MAAMqG,EAAYf,MAAMC,QAAQvF,GAC7BsG,EAAAA,YAAYtG,GAAQyF,OAAOK,SAAS1D,KAAK,KACzC,GAAGpC,IACN,OAAKqG,EACE,GAAGhH,KAAWgH,IADE,OAGvBZ,OAAOK,SACP1D,KAAK,KAOP,OAJIgE,IACHD,GAAgB,IAAIC,KAGdD,qCE5CiC,CAACnG,EAAyBgD,WAClE,OAAoB,QAAbvE,EAAAuB,aAAM,EAANA,EAAQuG,aAAK,IAAA9H,OAAA,EAAAA,EAAGuE,KAAa,0BAoBR,CAAC9D,EAAkB8D,WAC/C,OAAmB,QAAZvE,EAAAS,aAAK,EAALA,EAAOqH,aAAK,IAAA9H,OAAA,EAAAA,EAAGuE,KAAa,gCA1BD,CAAC9D,EAAkB8D,WACrD,OAAmB,QAAZvE,EAAAS,aAAK,EAALA,EAAOqH,aAAK,IAAA9H,OAAA,EAAAA,EAAGuE,KAAa,mELwDV,CAACwD,EAAkBxD,KAC5C,MAAMyD,EAASzD,GAAY,KAE3B,MAAiB,mBAAbwD,EACI,CAAEE,IAAK,yBAAyBD,IAAUE,OAAQ7E,GAGnD,CAAE4E,IAAK,WAAW5E,KAAU2E,IAAUE,OAAQ7E,gCCvDnB,CAClC8E,EACAC,EACA7D,WAEA,MAAMD,EAA2B,QAAhBtE,EAAAoI,aAAU,EAAVA,EAAY5G,YAAI,IAAAxB,OAAA,EAAAA,EAAAkB,KAAAkH,EAAG,EAAGzH,QAASA,IAAOwH,GAEvD,GAAIpB,EAAAA,QAAQzC,GAAW,MAAO,GAE9B,MAAM+D,KAAEA,GAAShE,EAAuBC,EAAUC,GAElD,OAAO8D,GAAQ,iEDmEoBC,GAC9BA,EAEDA,EAAWrB,SAAS,WAAaqB,EAAWC,WAAW,YAAoBD,EAExE,GAAGhF,KAAkBgF,IAJJ,2EGwBU,CAClCE,EACAC,EACAC,KAEA,IAAKF,EAAU,OAAO,KAEtB,MAAMG,qBAAEA,EAAoBC,mBAAEA,EAAkBC,mBAAEA,GAAuBL,EAEzE,OAAIG,GAAwBD,EACpBjH,EAAUqH,SAGdF,GAAsBH,EAClBhH,EAAUsH,QAGdF,GAAsBJ,EAClBhH,EAAUuH,QAGX,mCGoH4B,CACnCC,EACAC,MAEInC,EAAAA,QAAQkC,KACRlC,EAAAA,QAAQmC,OACRA,EAAgBjC,SAASxC,EAAmBrB,MAEzC6F,EAAoBE,KAAMC,GAAeF,EAAgBjC,SAASmC,4BN1L3CC,GACzBA,EAEDA,EAAMpC,SAAS,WAAaoC,EAAMd,WAAW,YAAoBc,EAE9D,GAAG/F,KAAkB+F,IAJT,8BOpEc,CAACC,EAAkBC,KAEpD,GAA+B,MAA3BC,EAAAA,cAAcF,GAAkB,OAAO,EAW3C,OAPCC,IAAoBxG,EAAeE,MAChC,CAACF,EAAeE,MAAOF,EAAeI,KAAMJ,EAAeK,KAC3DmG,IAAoBxG,EAAeI,KACnC,CAACJ,EAAeI,KAAMJ,EAAeK,KACrC,CAACL,EAAeK,MAGG+F,KAAMM,IAAW,IAAAzJ,EAAC,OAAsB,QAAtBA,EAAAgD,EAAcyG,UAAQ,IAAAzJ,OAAA,EAAAA,EAAEiH,SAASqC,iCP8DxCI,GAC7BA,EAEDA,EAAUzC,SAAS,WAAayC,EAAUnB,WAAW,YAAoBmB,EAEtE,GAAGpG,KAAkBoG,IAJL,4EV3Da,CACpCnI,EACAoI,EACApF,KAEA,MAAMrE,EAAeJ,EAAoByB,GACzC,OAAOqI,iBAAe1J,EAAcyJ,EAAUpF,4BenBhB,CAC9BzD,EACA8G,EACArD,WAEA,GAAIsC,MAAMC,QAAQc,GACjB,OAAQ9G,GAAW,IACjBkG,OAAO,EAAGrG,QAASiH,EAAUX,SAAStG,IACtC8F,IAAI,EAAGqB,YAAYA,eAAAA,EAAQvD,KAAa,IACxCyC,OAAOK,SACP1D,KAAK,MACD,CACN,MAAMpC,GAAUT,GAAW,IAAIU,KAAK,EAAGb,QAASA,IAAOiH,GACvD,OAAoB,QAAb5H,EAAAuB,aAAM,EAANA,EAAQuG,aAAK,IAAA9H,OAAA,EAAAA,EAAGuE,KAAa,EACrC,iCFqIqCsF,IACrC,OAAQA,GACP,IAAK,WACJ,OAAO/H,EAAYgI,iBAEpB,IAAK,UACJ,OAAOhI,EAAYiI,mBAEpB,IAAK,QACJ,OAAOjI,EAAYkI,YAEpB,IAAK,WACJ,OAAOlI,EAAYmI,oBAEpB,QACC,OAAOnI,EAAYoI,wDRzJkB,CACvC9H,EACAuH,EACApF,KAEA,MAAM4F,EAAahI,EAA4BC,GAE/C,OAAOwH,iBAAeO,EAAYR,EAAUpF,uEWtBR6F,IACpC,OAAQA,GAEP,KAAK1F,EAAS2F,MACb,MAAO,CAAC5F,EAAmBrB,KAG5B,KAAKsB,EAAS4F,gBACb,MAAO,CACN7F,EAAmB8F,cACnB9F,EAAmB+F,gBACnB/F,EAAmBgG,YACnBhG,EAAmBiG,aACnBjG,EAAmBkG,aACnBlG,EAAmBmG,aACnBnG,EAAmBoG,cACnBpG,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBuG,iBACnBvG,EAAmBwG,iBACnBxG,EAAmByG,iBACnBzG,EAAmB0G,gBACnB1G,EAAmB2G,gBACnB3G,EAAmB4G,gBACnB5G,EAAmB6G,gBACnB7G,EAAmB8G,YACnB9G,EAAmB+G,aACnB/G,EAAmBgH,aACnBhH,EAAmBiH,aACnBjH,EAAmBkH,YACnBlH,EAAmBmH,aACnBnH,EAAmBoH,aACnBpH,EAAmBqH,aACnBrH,EAAmBsH,cACnBtH,EAAmBuH,cACnBvH,EAAmBwH,cACnBxH,EAAmByH,cACnBzH,EAAmB0H,eACnB1H,EAAmB2H,gBACnB3H,EAAmB4H,gBACnB5H,EAAmB6H,gBACnB7H,EAAmB8H,eACnB9H,EAAmB+H,mBACnB/H,EAAmBgI,kBACnBhI,EAAmBiI,eACnBjI,EAAmBkI,eACnBlI,EAAmBmI,cAIrB,KAAKlI,EAASmI,eACb,MAAO,CACNpI,EAAmB8F,cACnB9F,EAAmBgG,YACnBhG,EAAmBiG,aACnBjG,EAAmBkG,aACnBlG,EAAmBmG,aACnBnG,EAAmBoG,cACnBpG,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBuG,iBACnBvG,EAAmBwG,iBACnBxG,EAAmByG,iBACnBzG,EAAmB0G,gBACnB1G,EAAmB2G,gBACnB3G,EAAmB4G,gBACnB5G,EAAmB6G,gBACnB7G,EAAmB8G,YACnB9G,EAAmB+G,aACnB/G,EAAmBgH,aACnBhH,EAAmBiH,aACnBjH,EAAmBkH,YACnBlH,EAAmBmH,aACnBnH,EAAmBoH,aACnBpH,EAAmBqH,aACnBrH,EAAmB0H,eACnB1H,EAAmB2H,gBACnB3H,EAAmB8H,eACnB9H,EAAmB+H,mBACnB/H,EAAmBiI,eACnBjI,EAAmBkI,eACnBlI,EAAmBmI,cAIrB,KAAKlI,EAASoI,KACb,MAAO,CACNrI,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBuG,iBACnBvG,EAAmB0G,gBACnB1G,EAAmB2G,gBACnB3G,EAAmB8G,YACnB9G,EAAmB+G,aACnB/G,EAAmBgG,YACnBhG,EAAmBiG,cAIrB,KAAKhG,EAASqI,UACb,MAAO,CACNtI,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmB0G,gBACnB1G,EAAmB8G,YACnB9G,EAAmBgG,YACnBhG,EAAmBiG,cAIrB,KAAKhG,EAASsI,YACb,MAAO,CACNvI,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBuG,iBACnBvG,EAAmBgG,YACnBhG,EAAmBiG,cAIrB,KAAKhG,EAASuI,UACd,KAAKvI,EAASwI,UACd,KAAKxI,EAASyI,kBACb,MAAO,CACN1I,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBgG,YACnBhG,EAAmBiG,cAIrB,KAAKhG,EAAS0I,YACb,MAAO,CACN3I,EAAmBgG,YACnBhG,EAAmBkG,aACnBlG,EAAmBiG,aACnBjG,EAAmBkH,YACnBlH,EAAmB4I,oBACnB5I,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmB0G,gBACnB1G,EAAmB8G,YACnB9G,EAAmBmG,aACnBnG,EAAmBoG,eAIrB,KAAKnG,EAAS4I,OACb,MAAO,CACN7I,EAAmBgG,YACnBhG,EAAmBkG,aACnBlG,EAAmBiG,aACnBjG,EAAmBkH,YACnBlH,EAAmB4I,oBACnB5I,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmB0G,gBACnB1G,EAAmB8G,aAIrB,KAAK7G,EAAS6I,OACb,MAAO,CAAC9I,EAAmBgG,YAAahG,EAAmBiG,cAG5D,KAAKhG,EAAS8I,QACd,KAAK9I,EAAS+I,UACd,KAAK/I,EAASgJ,UACd,KAAKhJ,EAASiJ,mBACb,MAAO,CACNlJ,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBgG,YACnBhG,EAAmBkG,aACnBlG,EAAmBiG,cAIrB,KAAKhG,EAASkJ,WACb,MAAO,CACNnJ,EAAmB8H,eACnB9H,EAAmB+H,mBACnB/H,EAAmBgI,mBAIrB,KAAK/H,EAASmJ,gBACb,MAAO,CAACpJ,EAAmBgG,YAAahG,EAAmBiG,cAG5D,KAAKhG,EAASoJ,kBACb,MAAO,CACNrJ,EAAmB0G,gBACnB1G,EAAmB2G,gBACnB3G,EAAmB4G,gBACnB5G,EAAmB6G,gBACnB7G,EAAmB8G,YACnB9G,EAAmB+G,aACnB/G,EAAmBgH,aACnBhH,EAAmBiH,aACnBjH,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmBuG,iBACnBvG,EAAmBwG,iBACnBxG,EAAmByG,iBACnBzG,EAAmBsJ,eACnBtJ,EAAmBuJ,gBACnBvJ,EAAmBwJ,gBACnBxJ,EAAmByJ,gBACnBzJ,EAAmB0J,eACnB1J,EAAmB2J,wBACnB3J,EAAmB4J,yBACnB5J,EAAmB6J,yBACnB7J,EAAmB8J,yBACnB9J,EAAmB+J,qBACnB/J,EAAmBgK,oBACnBhK,EAAmBiK,2BACnBjK,EAAmBkK,4BAIrB,KAAKjK,EAASkK,mBACb,MAAO,CACNnK,EAAmBqG,UACnBrG,EAAmBsG,gBACnBtG,EAAmB0G,gBACnB1G,EAAmB4G,gBACnB5G,EAAmB2G,gBACnB3G,EAAmB8G,YACnB9G,EAAmBgH,aACnBhH,EAAmB+G,cAIrB,KAAK9G,EAASmK,gBACb,MAAO,CACNpK,EAAmB0G,gBACnB1G,EAAmB8G,YACnB9G,EAAmBqG,UACnBrG,EAAmBsG,iBAGrB,QACC,MAAO,4BE7NqB+D,IAC9B,OAAQA,GACP,KAAKjP,EAAakP,OACjB,MAAO,QACR,KAAKlP,EAAamP,OACjB,MAAO,OAER,QACC,MAAO,6BAZqB,CAAC1O,EAAkBM,MACzCN,aAAO,EAAPA,EAASI,SAAU,IAAIc,KAAK,EAAGb,QAASA,IAAOC,IAAa,CAAA,iClBd/B,CAACN,EAAkBqJ,EAAkBpF,KAC1E,MAAMrE,EAAeJ,EAAoBQ,GACzC,OAAOsJ,iBAAe1J,EAAcyJ,EAAUpF,iCEuBX,EACnCjE,UACAgC,WACAiC,WACAoF,WACAnC,YACAjH,qBASA,IAAKD,GAA2C,IAAhCS,OAAOkO,KAAK3O,GAAS4O,OACpC,OAAOtF,iBAAe,EAAGD,EAAUpF,GAGpC,MAAMlC,EAAUmF,GACZlH,EAAQ6O,UAAY,IAAI3N,KAAK,EAAGb,QAASA,IAAO6G,QACjD4H,EAKGjF,GAH4BrK,EAAZ0H,EAAgCnF,EAA+B/B,GAC5DD,EAAkCC,EAASC,IAEZ+B,EAExD,OAAOsH,iBAAeO,EAAYR,EAAUpF,wCgBxBDuK,IAC3C,OAAQA,GACP,KAAKjP,EAAakP,OACjB,MAAO,CACN,OAAQ,IACR,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,GACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,MAAO,EACP,MAAO,EACP,MAAO,EACP,OAAQ,GACR,OAAQ,IAEV,KAAKlP,EAAamP,OACjB,MAAO,CACN,OAAQ,IACR,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,GACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,QAAS,GACT,QAAS,IACT,KAAM,EACN,KAAM,EACN,KAAM,EACN,MAAO,GACP,MAAO,IAET,QACC,MAAO,CAAA,kCAvF2B,CACpC1O,EACAiE,WAEA,OAA4B,QAArBvE,EAAAM,aAAO,EAAPA,EAASkE,oBAAY,IAAAxE,OAAA,EAAAA,EAAGuE,KAAc,CAAA,6BAGb,CAChCjE,EACAkH,aAEA,OAA8B,QAAvBvH,EAAiB,QAAjBD,EAAAM,aAAO,EAAPA,EAAS6O,gBAAQ,IAAAnP,OAAA,EAAAA,EAAEwB,YAAI,IAAAvB,OAAA,EAAAA,EAAAiB,KAAAlB,EAAID,GAASA,EAAKY,KAAO6G,KAAe,CAAA,wCAG3B,CAACnF,EAAyBkC,WACrE,OAAqB,QAAdvE,EAAAqC,aAAO,EAAPA,EAASyF,aAAK,IAAA9H,OAAA,EAAAA,EAAGuE,KAAa,2BRkDR,CAACA,EAAkB8K,IACzC,6CAA6C9K,gBAAuB8K,4CGjB5BtP,IAC/C,MAAMQ,EAAiC,CAAA,EAEvC,IAAK,MAAMK,QAAEA,EAAOE,QAAEA,EAAU,MAAQf,EAAKW,QAAU,GAAI,CAC1D,MAAMkH,EAAY9G,EAAQ2F,IAAI,EAAGnF,cAAeA,GAChDf,EAAeK,GAAgC,IAArBgH,EAAUsH,OAAetH,EAAU,GAAKA,CACnE,CAEA,OAAOrH,yBAGsB+O,IAC7B,OAAQA,GACP,KAAK5N,EAAYQ,UAChB,OAAOqN,EAAAA,MACR,KAAK7N,EAAY8N,UAChB,OAAOC,EAAAA,SACR,KAAK/N,EAAYgO,iBAChB,OAAOC,EAAAA,SACR,KAAKjO,EAAYkO,UAChB,OAAOC,EAAAA,KACR,KAAKnO,EAAYoO,UAChB,OAAOC,EAAAA,UACR,KAAKrO,EAAYsO,QAGjB,QACC,OAAOC,EAAAA,6EblE4B,CACrC5N,EACAsH,EACApF,KAEA,MAAMrE,EAAeJ,EAAoBuC,GACzC,OAAOuH,iBAAe1J,EAAcyJ,EAAUpF,2BU0FhB2L,GACzBA,EAEDA,EAAMjJ,SAAS,WAAaiJ,EAAM3H,WAAW,YAAoB2H,EAE9D,GAAG5M,KAAkB4M,IAJT,kCG+BmBC,IACtC,IAAKA,GAAwB,iBAATA,EAAmB,OAAO,EAC9C,MAAM1K,EAAI0K,EACV,MACmC,iBAA3B1K,EAAE2K,sBACsB,iBAAxB3K,EAAE4K,mBAC6B,iBAA/B5K,EAAE6K,0BACa,iBAAf7K,EAAE8K,UACgB,iBAAlB9K,EAAE+K,aACe,iBAAjB/K,EAAEgL,YACT5J,MAAMC,QAAQrB,EAAEiL,QAChB7J,MAAMC,QAAQrB,EAAEkL,6CMpJ0B,CAC3CvI,EACAwI,KAEA,MAAMC,EAAaD,EAASnO,OAAgD,CAACgE,EAAKnG,KACjF,IAAKA,EAAQwQ,QAAS,OAAOrK,EAE7B,MAAM0B,EAAavB,OAAOtG,EAAQ6H,YAKlC,OAJK1B,EAAI0B,KACR1B,EAAI0B,GAAc,IAEnB1B,EAAI0B,GAAY4I,KAAKzQ,GACdmG,GACL,CAAA,GAEH,OAAO2B,EACL3B,IAAKnC,GAAavD,OAAAiQ,OAAAjQ,OAAAiQ,OAAA,CAAA,EACf1M,GAAQ,CACXsM,SAAWC,EAAWjK,OAAOtC,EAAS3D,MAAQ,MAE9CqG,OAAQ1C,IAAY,IAAAtE,EAAC,OAAkB,QAAlBA,EAAAsE,aAAQ,EAARA,EAAUsM,gBAAQ,IAAA5Q,OAAA,EAAAA,EAAEkP,QAAS,gCLflB+B,GACd,GAAGA,EAAKC,cAAcD,EAAKE,cAAcC,WAAW,IAAK,uBJ8FpD,CAACpM,EAAWC,EAAWC,IAChD,yCACClB,EAAQ,EAAGgB,EAAGC,GAAKjB,EAAQkB,EAAG,IAAK,uEI7DD+L,IACnC,MAAMI,EAAqB,CAAA,GACrBH,YAAEA,EAAWI,SAAEA,EAAQpK,OAAEA,EAAMC,YAAEA,GAAgB8J,GAAQ,CAAA,EAO/D,OALKC,IAAaG,EAAOH,YAAc,oBAClCI,IAAUD,EAAOC,SAAW,iBAC5BpK,IAAQmK,EAAOnK,OAAS,mBACxBC,IAAakK,EAAOlK,YAAc,0BAEhCkK,wBAvCoB,CAACJ,EAAwBM,KACpD,MAAMF,EAAqB,CAAA,GACrBG,MAAEA,EAAKC,IAAEA,GAAQR,GAAQ,CAAA,EAE/B,OAAQM,GACP,KAAK3O,EAAiB8O,IAChBF,GAAUG,EAAAA,kBAAkBH,KAChCH,EAAOG,MAAQ,yBAGXC,GAAsB,IAAfA,EAAIvC,SACfmC,EAAOI,IAAM,eAEd,MAGD,KAAK7O,EAAiBgP,MAChBJ,GAAUG,EAAAA,kBAAkBH,KAChCH,EAAOG,MAAQ,yBASlB,OAAOH,+BJHF,SAA8BF,GACnC,IAAKA,EACJ,MAAO,CAAEtN,SAAS,EAAOC,MAAO,kBAGjC,MAAM+N,EAAUV,EAAYpM,QAAQ,MAAO,IAErCmM,EAAcW,EAAQtJ,WAAW,OAAS,MAAQsJ,EAAQtJ,WAAW,MAAQ,KAAO,KAE1F,IAAK2I,EACJ,MAAO,CAAErN,SAAS,EAAOC,MAAO,4BAGjC,MAAMgO,EAAiBD,EAAQE,MAAMb,EAAYhC,QAGjD,OAAO8C,EAFWzO,EAAW2N,IAEZY,EAClB"}
@@ -44,6 +44,8 @@ export interface Branch {
44
44
  wifiPassword?: string;
45
45
  createdAt?: number;
46
46
  coverPhoto?: string;
47
+ timezone?: string;
48
+ businessDayStart?: string;
47
49
  settings?: BranchSettings;
48
50
  openingHours?: BranchWorkDays;
49
51
  deliveryHours?: BranchWorkDays;
@@ -1,7 +1,7 @@
1
1
  import { OrderPreviewState, OrderStep, PaymentMethod } from "./models";
2
2
  export declare const initialOrder: {
3
3
  orderType: any;
4
- paymentMethod: PaymentMethod;
4
+ preferredPaymentMethod: PaymentMethod;
5
5
  };
6
6
  export declare const ORDER_STEPS: OrderStep[];
7
7
  export declare const initialPreviewState: OrderPreviewState;
@@ -76,7 +76,7 @@ export interface Order {
76
76
  orderType: OrderType;
77
77
  items: OrderItem[];
78
78
  status?: OrderStatus;
79
- paymentMethod?: PaymentMethod;
79
+ preferredPaymentMethod?: PaymentMethod;
80
80
  note?: string;
81
81
  createdAt?: number;
82
82
  updatedAt?: number;
@@ -56,7 +56,11 @@ export declare enum EmployeePermission {
56
56
  VIEW_BRANCH_BALANCE = "VIEW_BRANCH_BALANCE",
57
57
  UPDATE_PRODUCT_INGREDIENTS = "UPDATE_PRODUCT_INGREDIENTS",
58
58
  DELETE_PRODUCT_INGREDIENTS = "DELETE_PRODUCT_INGREDIENTS",
59
- AI_ASSISTANT = "AI_ASSISTANT"
59
+ AI_ASSISTANT = "AI_ASSISTANT",
60
+ VIEW_PAYMENTS = "VIEW_PAYMENTS",
61
+ TAKE_PAYMENT = "TAKE_PAYMENT",
62
+ REFUND_PAYMENT = "REFUND_PAYMENT",
63
+ PAYMENT_COMP = "COMP"
60
64
  }
61
65
  export declare enum UserRole {
62
66
  OWNER = "OWNER",
@@ -80,7 +84,8 @@ export declare enum UserRole {
80
84
  DELIVERY_DRIVER = "DELIVERY_DRIVER",
81
85
  INVENTORY_MANAGER = "INVENTORY_MANAGER",
82
86
  PURCHASING_MANAGER = "PURCHASING_MANAGER",
83
- WAREHOUSE_STAFF = "WAREHOUSE_STAFF"
87
+ WAREHOUSE_STAFF = "WAREHOUSE_STAFF",
88
+ CASHIER = "CASHIER"
84
89
  }
85
90
  export interface User {
86
91
  id?: number;
@@ -3,5 +3,5 @@ import { models as menuModels } from "src/modules/menu";
3
3
  export declare const StoreProvider: ({ children, value, }: {
4
4
  children: ReactElement;
5
5
  value: menuModels.PublicMenuData;
6
- }) => import("react/jsx-runtime").JSX.Element;
6
+ }) => import("react").JSX.Element;
7
7
  export declare const useStoreContext: () => menuModels.PublicMenuData;
@@ -37,6 +37,6 @@ type OrderProviderProps = {
37
37
  defaultBranchId?: number;
38
38
  isOrderDefaultOpen?: boolean;
39
39
  };
40
- export declare const OrderProvider: ({ children, defaultOrderType, defaultPaymentMethod, defaultBranchId, isOrderDefaultOpen, }: OrderProviderProps) => import("react/jsx-runtime").JSX.Element;
40
+ export declare const OrderProvider: ({ children, defaultOrderType, defaultPaymentMethod, defaultBranchId, isOrderDefaultOpen, }: OrderProviderProps) => import("react").JSX.Element;
41
41
  export declare const useOrderContext: () => OrderContent;
42
42
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tabres/react",
3
- "version": "1.0.31",
3
+ "version": "1.0.33",
4
4
  "description": "React Library by tabres.com",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -66,34 +66,35 @@
66
66
  },
67
67
  "devDependencies": {
68
68
  "@eslint/js": "^9.39.3",
69
- "@rollup/plugin-commonjs": "^29.0.2",
69
+ "@rollup/plugin-commonjs": "^29.0.3",
70
70
  "@rollup/plugin-node-resolve": "^16.0.3",
71
71
  "@rollup/plugin-terser": "^1.0.0",
72
72
  "@rollup/plugin-typescript": "^12.3.0",
73
73
  "@testing-library/jest-dom": "^6.9.1",
74
74
  "@testing-library/react": "^16.3.2",
75
- "@types/google.maps": "^3.58.1",
75
+ "@types/google.maps": "^3.65.1",
76
76
  "@types/jest": "^30.0.0",
77
- "@types/react": "^19.2.14",
77
+ "@types/node": "^25.0.1",
78
+ "@types/react": "^19.2.17",
78
79
  "@types/react-dom": "^19.2.3",
79
- "autoprefixer": "^10.4.27",
80
+ "autoprefixer": "^10.5.0",
80
81
  "eslint": "^9.39.3",
81
82
  "eslint-plugin-react": "^7.37.5",
82
83
  "eslint-plugin-react-hooks": "^7.0.1",
83
84
  "eslint-plugin-unicorn": "^64.0.0",
84
85
  "husky": "^9.1.7",
85
- "jest": "^30.3.0",
86
- "jest-environment-jsdom": "^30.3.0",
86
+ "jest": "^30.4.2",
87
+ "jest-environment-jsdom": "^30.4.1",
87
88
  "rimraf": "^6.1.3",
88
89
  "rollup-plugin-copy": "^3.5.0",
89
90
  "rollup-plugin-peer-deps-external": "^2.2.4",
90
91
  "rollup-plugin-postcss": "^4.0.2",
91
- "sass": "^1.98.0",
92
- "ts-jest": "^29.4.6",
92
+ "sass": "^1.100.0",
93
+ "ts-jest": "^29.4.11",
93
94
  "ts-node": "^10.9.2",
94
95
  "tslib": "^2.8.1",
95
- "typescript": "^5.9.3",
96
+ "typescript": "^6.0.3",
96
97
  "typescript-eslint": "^8.57.2",
97
- "vite": "^8.0.3"
98
+ "vite": "^8.0.16"
98
99
  }
99
100
  }