@feedmepos/mf-menu 0.0.2 → 0.0.54

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 (382) hide show
  1. package/README.md +1 -1
  2. package/dist/App-DohOU1oV.js +12631 -0
  3. package/dist/ApplyProduct.vue_vue_type_script_setup_true_lang-i6t88Eel.js +161 -0
  4. package/dist/BottomSheetMenuItem.vue_vue_type_script_setup_true_lang-DhrXKy3b.js +74 -0
  5. package/dist/Catalog-DLqeJUzk.js +641 -0
  6. package/dist/Category-B1_5y7Mc.js +392 -0
  7. package/dist/CookingGuide-L4a90U-7.js +880 -0
  8. package/dist/FormItem.vue_vue_type_script_setup_true_lang-BmPAVphe.js +26 -0
  9. package/dist/FormSection.vue_vue_type_script_setup_true_lang-CO4YGYLB.js +50 -0
  10. package/dist/Group-4FKRzniJ.js +48 -0
  11. package/dist/Group-Cggfw5se.js +4 -0
  12. package/dist/Group.vue_vue_type_script_setup_true_lang-DP3PgguY.js +594 -0
  13. package/dist/GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-DsoLGvHp.js +211 -0
  14. package/dist/ImportProductDialog.vue_vue_type_script_setup_true_lang-DJ70FzxC.js +72778 -0
  15. package/dist/Ingredient-BiIebw2u.js +495 -0
  16. package/dist/InventoryBinding.vue_vue_type_script_setup_true_lang-DhEEjc_i.js +21910 -0
  17. package/dist/LinkProductSideSheet-u1jj74-0.js +110 -0
  18. package/dist/MenuSelector.vue_vue_type_script_setup_true_lang-BShs7c1r.js +68 -0
  19. package/dist/MenuSetting-Dqd5iQG6.js +185 -0
  20. package/dist/PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js +34 -0
  21. package/dist/PrintRoute-Cne9zCcz.js +420 -0
  22. package/dist/Product-kFxciKdY.js +4 -0
  23. package/dist/Product.vue_vue_type_script_setup_true_lang-CbcEfD6X.js +9408 -0
  24. package/dist/Products-CGWuSZFG.js +2660 -0
  25. package/dist/Publish-zzFK26fy.js +547 -0
  26. package/dist/Recipe-CYCPMkar.js +330 -0
  27. package/dist/ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js +38 -0
  28. package/dist/Scheduler-Dl881fmO.js +227 -0
  29. package/dist/SchedulerSelector.vue_vue_type_script_setup_true_lang-BOfrY4Jc.js +33 -0
  30. package/dist/ServingSequence-C1EmqZWu.js +347 -0
  31. package/dist/Setting-CwAoMp-i.js +258 -0
  32. package/dist/Takeaway-CcRWIXdA.js +64 -0
  33. package/dist/Takeaway-DIrpbY-C.js +4 -0
  34. package/dist/Takeaway.vue_vue_type_script_setup_true_lang-bykZsQyj.js +306 -0
  35. package/dist/TextChip.vue_vue_type_script_setup_true_lang-8frWuZFL.js +20 -0
  36. package/dist/Thumbnail.vue_vue_type_script_setup_true_lang-CvOTKNYT.js +63 -0
  37. package/dist/TreeEditorOpenner.vue_vue_type_script_setup_true_lang-BikIegit.js +6170 -0
  38. package/dist/Unit-Cux3fhlO.js +144 -0
  39. package/dist/Variant-CCtG3acp.js +229 -0
  40. package/dist/_id_-Mp6ineI6.js +196 -0
  41. package/dist/app-B1I12pXb.js +2030 -0
  42. package/dist/app-D9DQSTFD.js +68 -0
  43. package/dist/app.js +8 -128
  44. package/dist/{App.vue.d.ts → apps/mf-menu/src/App.vue.d.ts} +1 -1
  45. package/dist/apps/mf-menu/src/Entry.vue.d.ts +3 -0
  46. package/dist/apps/mf-menu/src/api/index.d.ts +5 -0
  47. package/dist/apps/mf-menu/src/api/menu.d.ts +31 -0
  48. package/dist/apps/mf-menu/src/api/public.d.ts +5 -0
  49. package/dist/apps/mf-menu/src/app.d.ts +4486 -0
  50. package/dist/apps/mf-menu/src/assets/icons/index.d.ts +4 -0
  51. package/dist/apps/mf-menu/src/components/ApplyProducts.vue.d.ts +44 -0
  52. package/dist/apps/mf-menu/src/components/CustomAttributeChip.vue.d.ts +29 -0
  53. package/dist/{Entry.vue.d.ts → apps/mf-menu/src/components/Migrate.vue.d.ts} +1 -1
  54. package/dist/{components → apps/mf-menu/src/components}/Navigator.vue.d.ts +1 -1
  55. package/dist/apps/mf-menu/src/components/NumberPrecisionInput.vue.d.ts +26 -0
  56. package/dist/apps/mf-menu/src/components/OrderFromChip.vue.d.ts +15 -0
  57. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProduct.vue.d.ts +1034 -0
  58. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProductDialog.vue.d.ts +533 -0
  59. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/index.d.ts +3194 -0
  60. package/dist/apps/mf-menu/src/components/feature/CatalogManager/Form.vue.d.ts +13 -0
  61. package/dist/apps/mf-menu/src/components/feature/CatalogManager/index.d.ts +25 -0
  62. package/dist/apps/mf-menu/src/components/feature/CatalogSchedulerSelector.vue.d.ts +19 -0
  63. package/dist/apps/mf-menu/src/components/feature/CategoryManager/Form.vue.d.ts +27 -0
  64. package/dist/apps/mf-menu/src/components/feature/CategoryManager/index.d.ts +43 -0
  65. package/dist/apps/mf-menu/src/components/feature/CategorySelector.vue.d.ts +6 -0
  66. package/dist/apps/mf-menu/src/components/feature/CategorySelectorSingle.vue.d.ts +18 -0
  67. package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/Icon.vue.d.ts +2 -0
  68. package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/index.d.ts +1 -0
  69. package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/index.vue.d.ts +27 -0
  70. package/dist/apps/mf-menu/src/components/feature/Fields/CurrencyInput.vue.d.ts +45 -0
  71. package/dist/apps/mf-menu/src/components/feature/Fields/ImageDropField.vue.d.ts +21 -0
  72. package/dist/apps/mf-menu/src/components/feature/Fields/OrderFrom.vue.d.ts +91 -0
  73. package/dist/apps/mf-menu/src/components/feature/GroupManager/AddForm.vue.d.ts +11 -0
  74. package/dist/apps/mf-menu/src/components/feature/GroupManager/Form.vue.d.ts +42 -0
  75. package/dist/apps/mf-menu/src/components/feature/GroupManager/OptionTable.vue.d.ts +793 -0
  76. package/dist/apps/mf-menu/src/components/feature/GroupManager/UpdateForm.vue.d.ts +537 -0
  77. package/dist/apps/mf-menu/src/components/feature/GroupManager/index.d.ts +2231 -0
  78. package/dist/apps/mf-menu/src/components/feature/InventoryManager/Form.vue.d.ts +67 -0
  79. package/dist/apps/mf-menu/src/components/feature/InventoryManager/InventoryBinding.vue.d.ts +54 -0
  80. package/dist/apps/mf-menu/src/components/feature/InventoryManager/index.d.ts +223 -0
  81. package/dist/apps/mf-menu/src/components/feature/LinkProduct/LinkProductSideSheet.vue.d.ts +64 -0
  82. package/dist/apps/mf-menu/src/components/feature/MenuSelector.vue.d.ts +47 -0
  83. package/dist/apps/mf-menu/src/components/feature/Picker.vue.d.ts +37 -0
  84. package/dist/apps/mf-menu/src/components/feature/PriceTier/LinkPriceTier.vue.d.ts +12 -0
  85. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierButton.vue.d.ts +1593 -0
  86. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierForm.vue.d.ts +1606 -0
  87. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierNotice.vue.d.ts +15 -0
  88. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierSheet.vue.d.ts +27 -0
  89. package/dist/apps/mf-menu/src/components/feature/PrintDeptManager/Form.vue.d.ts +25 -0
  90. package/dist/apps/mf-menu/src/components/feature/PrintDeptManager/index.d.ts +43 -0
  91. package/dist/apps/mf-menu/src/components/feature/RecipeManager/Form.vue.d.ts +45 -0
  92. package/dist/apps/mf-menu/src/components/feature/RecipeManager/index.d.ts +70 -0
  93. package/dist/apps/mf-menu/src/components/feature/RemyButton.vue.d.ts +15 -0
  94. package/dist/apps/mf-menu/src/components/feature/RemyDialog.vue.d.ts +15 -0
  95. package/dist/apps/mf-menu/src/components/feature/ResponsiveFabButton.vue.d.ts +12 -0
  96. package/dist/apps/mf-menu/src/components/feature/RevertDialog.vue.d.ts +15 -0
  97. package/dist/apps/mf-menu/src/components/feature/SchedulerSelector.vue.d.ts +2 -0
  98. package/dist/apps/mf-menu/src/components/feature/SelectGroupDialog.vue.d.ts +15 -0
  99. package/dist/apps/mf-menu/src/components/feature/SelectVariantDialog.vue.d.ts +15 -0
  100. package/dist/apps/mf-menu/src/components/feature/ServingSequenceManager/Form.vue.d.ts +32 -0
  101. package/dist/apps/mf-menu/src/components/feature/ServingSequenceManager/index.d.ts +62 -0
  102. package/dist/apps/mf-menu/src/components/feature/SkuManager/Form.vue.d.ts +49 -0
  103. package/dist/apps/mf-menu/src/components/feature/SkuManager/index.d.ts +85 -0
  104. package/dist/apps/mf-menu/src/components/feature/TakeAwayManager/Form.vue.d.ts +35 -0
  105. package/dist/apps/mf-menu/src/components/feature/TakeAwayManager/index.d.ts +95 -0
  106. package/dist/apps/mf-menu/src/components/feature/TreeEditor/ProductsTree.vue.d.ts +22 -0
  107. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeEditor.vue.d.ts +19 -0
  108. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeEditorForm.vue.d.ts +36 -0
  109. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeEditorLayout.vue.d.ts +11 -0
  110. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeEditorOpenner.vue.d.ts +12 -0
  111. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreePanel.vue.d.ts +22 -0
  112. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeTopButton.vue.d.ts +17 -0
  113. package/dist/apps/mf-menu/src/components/feature/TreeEditor/components/OrderFrom.vue.d.ts +15 -0
  114. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/catalog.d.ts +9 -0
  115. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/category.d.ts +32 -0
  116. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/item.d.ts +786 -0
  117. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/scheduler.d.ts +1165 -0
  118. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/tree.d.ts +12 -0
  119. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/useItemFormManagement.d.ts +788 -0
  120. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/useItemSelection.d.ts +8 -0
  121. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/variant.d.ts +3 -0
  122. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/FmTipTreeIcon.vue.d.ts +35 -0
  123. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/FmTree.vue.d.ts +26 -0
  124. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/FmTreeChip.vue.d.ts +15 -0
  125. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/FmTreeIcon.vue.d.ts +31 -0
  126. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/FmTreeNode.vue.d.ts +52 -0
  127. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/HighlightableSpan.vue.d.ts +17 -0
  128. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/dragging.d.ts +36 -0
  129. package/dist/apps/mf-menu/src/components/feature/TreeEditor/fmtree/type.d.ts +70 -0
  130. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/AddForm.vue.d.ts +11 -0
  131. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/Form.vue.d.ts +42 -0
  132. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/OptionTable.vue.d.ts +793 -0
  133. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/UpdateForm.vue.d.ts +537 -0
  134. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/index.d.ts +2231 -0
  135. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/SelectGroupDialog.vue.d.ts +15 -0
  136. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/SelectVariantDialog.vue.d.ts +15 -0
  137. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/VariantManagerForm.vue.d.ts +24 -0
  138. package/dist/apps/mf-menu/src/components/feature/TreeEditor/history/index.d.ts +15 -0
  139. package/dist/apps/mf-menu/src/components/feature/TreeEditor/image/ImageUploadDialog.vue.d.ts +3 -0
  140. package/dist/apps/mf-menu/src/components/feature/TreeEditor/image/ImageUploadForm.vue.d.ts +32 -0
  141. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ItemForm.vue.d.ts +2393 -0
  142. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductDetail.vue.d.ts +19 -0
  143. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductGroup.vue.d.ts +19 -0
  144. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductInventory.vue.d.ts +27 -0
  145. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductPrice.vue.d.ts +18 -0
  146. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductPrint.vue.d.ts +24 -0
  147. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductTakeaway.vue.d.ts +19 -0
  148. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ProductVariants.vue.d.ts +19 -0
  149. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/anchor.d.ts +9 -0
  150. package/dist/apps/mf-menu/src/components/feature/TreeEditor/menuUtils.d.ts +823 -0
  151. package/dist/apps/mf-menu/src/components/feature/TreeEditor/openner.d.ts +2 -0
  152. package/dist/apps/mf-menu/src/components/feature/TreeEditor/service/menuLocal.d.ts +16 -0
  153. package/dist/apps/mf-menu/src/components/feature/TreeEditor/store/menuV2.d.ts +6986 -0
  154. package/dist/apps/mf-menu/src/components/feature/TreeEditor/store/tree.d.ts +641 -0
  155. package/dist/apps/mf-menu/src/components/feature/TreeEditor/treeUtils.d.ts +59 -0
  156. package/dist/apps/mf-menu/src/components/feature/TreeEditor/type.d.ts +73 -0
  157. package/dist/apps/mf-menu/src/components/feature/UnitManager/Form.vue.d.ts +27 -0
  158. package/dist/apps/mf-menu/src/components/feature/UnitManager/UnitMeasurement.vue.d.ts +75 -0
  159. package/dist/apps/mf-menu/src/components/feature/UnitManager/index.d.ts +40 -0
  160. package/dist/apps/mf-menu/src/components/feature/VariantManager/Form.vue.d.ts +30 -0
  161. package/dist/apps/mf-menu/src/components/feature/VariantManager/index.d.ts +40 -0
  162. package/dist/apps/mf-menu/src/components/feature/overview/OverviewSheet.vue.d.ts +12 -0
  163. package/dist/apps/mf-menu/src/components/feature/overview/ProductOverview.vue.d.ts +29 -0
  164. package/dist/apps/mf-menu/src/components/feature/overview/ViewLayout.vue.d.ts +46 -0
  165. package/dist/apps/mf-menu/src/components/feature/overview/comp/ProductBaseInfo.vue.d.ts +12 -0
  166. package/dist/apps/mf-menu/src/components/feature/overview/comp/ProductViewer.vue.d.ts +12 -0
  167. package/dist/apps/mf-menu/src/components/feature/overview/type.d.ts +5 -0
  168. package/dist/apps/mf-menu/src/components/feature/overview/views/GroupView.vue.d.ts +12 -0
  169. package/dist/apps/mf-menu/src/components/feature/overview/views/GroupViewTable.vue.d.ts +24 -0
  170. package/dist/apps/mf-menu/src/components/feature/overview/views/ProductView.vue.d.ts +12 -0
  171. package/dist/apps/mf-menu/src/components/feature/overview/views/ProductViewTable.vue.d.ts +18 -0
  172. package/dist/apps/mf-menu/src/components/feature/overview/views/SchedulerView.vue.d.ts +2 -0
  173. package/dist/apps/mf-menu/src/components/feature/overview/views/VariantView.vue.d.ts +2 -0
  174. package/dist/apps/mf-menu/src/components/feature/publish.d.ts +27 -0
  175. package/dist/apps/mf-menu/src/components/import/ImportButton.vue.d.ts +12 -0
  176. package/dist/apps/mf-menu/src/components/import/ItemCard.vue.d.ts +18 -0
  177. package/dist/apps/mf-menu/src/components/import/PreviewAddonContent.vue.d.ts +71 -0
  178. package/dist/apps/mf-menu/src/components/import/PreviewContent.vue.d.ts +36 -0
  179. package/dist/apps/mf-menu/src/components/import/PreviewContent2.vue.d.ts +55 -0
  180. package/dist/apps/mf-menu/src/components/import/PreviewImportForm.vue.d.ts +26 -0
  181. package/dist/apps/mf-menu/src/components/import/PreviewImportFormFeedme.vue.d.ts +27 -0
  182. package/dist/apps/mf-menu/src/components/layout/FullScreenForm.vue.d.ts +30 -0
  183. package/dist/apps/mf-menu/src/components/layout/PageLayout.vue.d.ts +23 -0
  184. package/dist/apps/mf-menu/src/components/layout/ToggleCard.vue.d.ts +28 -0
  185. package/dist/apps/mf-menu/src/composable/dragResize.d.ts +16 -0
  186. package/dist/apps/mf-menu/src/composable/menu.d.ts +9 -0
  187. package/dist/apps/mf-menu/src/composable/menuNotifer.d.ts +3 -0
  188. package/dist/apps/mf-menu/src/composable/navigator.d.ts +11 -0
  189. package/dist/apps/mf-menu/src/composable/search.d.ts +5 -0
  190. package/dist/apps/mf-menu/src/helper/check.d.ts +6 -0
  191. package/dist/apps/mf-menu/src/helper/currency.d.ts +2 -0
  192. package/dist/apps/mf-menu/src/helper/feedmeModify/definitions.d.ts +449 -0
  193. package/dist/apps/mf-menu/src/helper/feedmeModify/fromExcel.d.ts +8 -0
  194. package/dist/apps/mf-menu/src/helper/feedmeModify/toExcel.d.ts +19 -0
  195. package/dist/apps/mf-menu/src/helper/import-export.d.ts +7070 -0
  196. package/dist/apps/mf-menu/src/helper/item.d.ts +22 -0
  197. package/dist/apps/mf-menu/src/helper/iteration.d.ts +7 -0
  198. package/dist/apps/mf-menu/src/helper/menu.d.ts +872 -0
  199. package/dist/apps/mf-menu/src/helper/number.d.ts +14 -0
  200. package/dist/apps/mf-menu/src/helper/object.d.ts +6 -0
  201. package/dist/apps/mf-menu/src/helper/recipe.d.ts +3 -0
  202. package/dist/apps/mf-menu/src/helper/remy.d.ts +5 -0
  203. package/dist/apps/mf-menu/src/helper/setting/catalogSetting.d.ts +37 -0
  204. package/dist/apps/mf-menu/src/helper/sku.d.ts +9 -0
  205. package/dist/apps/mf-menu/src/helper/string.d.ts +1 -0
  206. package/dist/apps/mf-menu/src/init.d.ts +1 -0
  207. package/dist/apps/mf-menu/src/manager/cooking_guide.d.ts +5 -0
  208. package/dist/apps/mf-menu/src/manager/menu/catalog.d.ts +27 -0
  209. package/dist/apps/mf-menu/src/manager/menu/category.d.ts +38 -0
  210. package/dist/apps/mf-menu/src/manager/menu/group.d.ts +62 -0
  211. package/dist/apps/mf-menu/src/manager/menu/item.d.ts +6919 -0
  212. package/dist/apps/mf-menu/src/manager/menu/priceTier.d.ts +15 -0
  213. package/dist/apps/mf-menu/src/manager/menu/scheduler.d.ts +26 -0
  214. package/dist/apps/mf-menu/src/manager/menu/takeaway.d.ts +6 -0
  215. package/dist/apps/mf-menu/src/manager/print_department.d.ts +5 -0
  216. package/dist/apps/mf-menu/src/manager/scheduler.d.ts +5 -0
  217. package/dist/apps/mf-menu/src/plugins.d.ts +4 -0
  218. package/dist/apps/mf-menu/src/router/shared.d.ts +17 -0
  219. package/dist/apps/mf-menu/src/stores/app.d.ts +217 -0
  220. package/dist/apps/mf-menu/src/stores/manager/catalog.d.ts +7 -0
  221. package/dist/apps/mf-menu/src/stores/manager/item.d.ts +2384 -0
  222. package/dist/apps/mf-menu/src/stores/manager/recipe.d.ts +733 -0
  223. package/dist/apps/mf-menu/src/stores/manager/scheduler.d.ts +1165 -0
  224. package/dist/apps/mf-menu/src/stores/manager/sku.d.ts +1621 -0
  225. package/dist/apps/mf-menu/src/stores/manager/takeaway.d.ts +107 -0
  226. package/dist/apps/mf-menu/src/stores/manager/unit.d.ts +397 -0
  227. package/dist/apps/mf-menu/src/stores/manager/variant.d.ts +11 -0
  228. package/dist/apps/mf-menu/src/stores/menu.d.ts +6983 -0
  229. package/dist/apps/mf-menu/src/stores/menuEdit.d.ts +7 -0
  230. package/dist/apps/mf-menu/src/types/recipe.d.ts +4 -0
  231. package/dist/apps/mf-menu/src/types/rule.d.ts +64 -0
  232. package/dist/apps/mf-menu/src/utils/createComponentProgrammatically.d.ts +7 -0
  233. package/dist/apps/mf-menu/src/utils/input.d.ts +1 -0
  234. package/dist/apps/mf-menu/src/utils/inventory.d.ts +6 -0
  235. package/dist/apps/mf-menu/src/utils/table.d.ts +1 -0
  236. package/dist/apps/mf-menu/src/utils/tooltip.d.ts +8 -0
  237. package/dist/apps/mf-menu/src/utils/worker.d.ts +1 -0
  238. package/dist/{views → apps/mf-menu/src/views}/Catalog/Catalog.vue.d.ts +1 -1
  239. package/dist/apps/mf-menu/src/views/Catalog/CatalogUsageTable.vue.d.ts +16 -0
  240. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddCategoryDialogContentComponent.vue.d.ts +14 -0
  241. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/Form.vue.d.ts +1595 -0
  242. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductDetail.vue.d.ts +20 -0
  243. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductGroup.vue.d.ts +19 -0
  244. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductInventory.vue.d.ts +27 -0
  245. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductPrice.vue.d.ts +18 -0
  246. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductPrint.vue.d.ts +24 -0
  247. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductTakeaway.vue.d.ts +19 -0
  248. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/ProductVariants.vue.d.ts +19 -0
  249. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/index.d.ts +3981 -0
  250. package/dist/apps/mf-menu/src/views/Catalog/Edit/Group.vue.d.ts +6 -0
  251. package/dist/apps/mf-menu/src/views/Catalog/Edit/GroupMarkupPriceDialog.vue.d.ts +31 -0
  252. package/dist/apps/mf-menu/src/views/Catalog/Edit/ImportProductDialog.vue.d.ts +18 -0
  253. package/dist/apps/mf-menu/src/views/Catalog/Edit/Product.vue.d.ts +2 -0
  254. package/dist/apps/mf-menu/src/views/Catalog/Edit/ProductTable.vue.d.ts +37 -0
  255. package/dist/apps/mf-menu/src/views/Catalog/Edit/SelectUploadFile.vue.d.ts +23 -0
  256. package/dist/apps/mf-menu/src/views/Catalog/Edit/SelectUploadFiles.vue.d.ts +21 -0
  257. package/dist/apps/mf-menu/src/views/Catalog/Edit/Setting.vue.d.ts +2 -0
  258. package/dist/apps/mf-menu/src/views/Catalog/Edit/Takeaway.vue.d.ts +6 -0
  259. package/dist/apps/mf-menu/src/views/Catalog/Edit/Thumbnail.vue.d.ts +20 -0
  260. package/dist/apps/mf-menu/src/views/Catalog/Edit/[id].vue.d.ts +2 -0
  261. package/dist/apps/mf-menu/src/views/Catalog/type.d.ts +16 -0
  262. package/dist/apps/mf-menu/src/views/Category/Category.vue.d.ts +2 -0
  263. package/dist/apps/mf-menu/src/views/Category/CategoryTable.vue.d.ts +2 -0
  264. package/dist/{views → apps/mf-menu/src/views}/CookingGuide/CookingGuide.vue.d.ts +1 -1
  265. package/dist/apps/mf-menu/src/views/CookingGuide/CookingGuideDialog.vue.d.ts +186 -0
  266. package/dist/apps/mf-menu/src/views/CookingGuide/CookingGuideStepDialog.vue.d.ts +36 -0
  267. package/dist/apps/mf-menu/src/views/CookingGuide/CookingGuideStepOverrideDialog.vue.d.ts +70 -0
  268. package/dist/apps/mf-menu/src/views/Group/Group.vue.d.ts +2 -0
  269. package/dist/apps/mf-menu/src/views/Ingredient/Ingredient.vue.d.ts +2 -0
  270. package/dist/apps/mf-menu/src/views/MenuSetting/AddPriceGroupDialog.vue.d.ts +2 -0
  271. package/dist/apps/mf-menu/src/views/MenuSetting/MenuSetting.vue.d.ts +2 -0
  272. package/dist/{views → apps/mf-menu/src/views}/Overview/Overview.vue.d.ts +1 -1
  273. package/dist/apps/mf-menu/src/views/PrintRoute/PrintDepartmentDialog.vue.d.ts +35 -0
  274. package/dist/apps/mf-menu/src/views/PrintRoute/PrintRoute.vue.d.ts +7 -0
  275. package/dist/apps/mf-menu/src/views/Product/Products.vue.d.ts +2 -0
  276. package/dist/apps/mf-menu/src/views/ProductOverviewDemo.vue.d.ts +2 -0
  277. package/dist/{views → apps/mf-menu/src/views}/Publish/Publish.vue.d.ts +1 -1
  278. package/dist/apps/mf-menu/src/views/Publish/UpdateCatalogDialog.vue.d.ts +3473 -0
  279. package/dist/apps/mf-menu/src/views/Recipe/Recipe.vue.d.ts +6 -0
  280. package/dist/apps/mf-menu/src/views/Scheduler/FilterForm.vue.d.ts +847 -0
  281. package/dist/{views → apps/mf-menu/src/views}/Scheduler/Scheduler.vue.d.ts +1 -1
  282. package/dist/apps/mf-menu/src/views/Scheduler/SchedulerDialog.vue.d.ts +862 -0
  283. package/dist/apps/mf-menu/src/views/ServingSequence/ServingSequence.vue.d.ts +2 -0
  284. package/dist/apps/mf-menu/src/views/Takeaway/Takeaway.vue.d.ts +2 -0
  285. package/dist/apps/mf-menu/src/views/TaxSetting/TaxSetting.vue.d.ts +2 -0
  286. package/dist/apps/mf-menu/src/views/TreeEditorDemo.vue.d.ts +2 -0
  287. package/dist/apps/mf-menu/src/views/Unit/Unit.vue.d.ts +2 -0
  288. package/dist/{views → apps/mf-menu/src/views}/Variant/Variant.vue.d.ts +1 -1
  289. package/dist/apps/mf-menu/tsconfig.app.tsbuildinfo +1 -0
  290. package/dist/assets/linked-status-T3O-XXdn.js +24 -0
  291. package/dist/assets/override-menu-CPwBtTX9.js +24 -0
  292. package/dist/assets/validate-menu-CkDDM692.js +24 -0
  293. package/dist/catalog-B1UQHu6j.js +202 -0
  294. package/dist/catalogSetting-DdxZ0nKg.js +65 -0
  295. package/dist/check-C9mY6LiX.js +9 -0
  296. package/dist/createComponentProgrammatically-Bt2rn1IQ.js +11 -0
  297. package/dist/createForm-BoUQeZTd.js +16 -0
  298. package/dist/currency-Bmje2XMW.js +7 -0
  299. package/dist/dayjs.min-CcDoWv_V.js +6 -0
  300. package/dist/discardConfirm-Br8AbO7y.js +3704 -0
  301. package/dist/index-Ce4v8o7D.js +106 -0
  302. package/dist/index-DJ2C-NTK.js +273 -0
  303. package/dist/index-wAygpONg.js +239 -0
  304. package/dist/index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js +57 -0
  305. package/dist/item-DIYt3BTF.js +6897 -0
  306. package/dist/menu-BqPh15La.js +34 -0
  307. package/dist/menu-NS-_m-8z.js +126229 -0
  308. package/dist/mf-menu.css +1 -0
  309. package/dist/object-VfpKsK3I.js +166 -0
  310. package/dist/packages/shared/src/api/index.d.ts +3 -0
  311. package/dist/packages/shared/src/api/public.d.ts +5 -0
  312. package/dist/packages/shared/src/components/button/ResponsiveFabButton.vue.d.ts +12 -0
  313. package/dist/packages/shared/src/components/dialog/ConfirmActionDialog.vue.d.ts +30 -0
  314. package/dist/packages/shared/src/components/form/DynamicSheet.vue.d.ts +19 -0
  315. package/dist/packages/shared/src/components/form/FormLabel.vue.d.ts +33 -0
  316. package/dist/packages/shared/src/components/form/ImageDropField.vue.d.ts +46 -0
  317. package/dist/packages/shared/src/components/form/RestaurantSelector.vue.d.ts +37 -0
  318. package/dist/packages/shared/src/components/form/RestaurantSelectorMultiple.vue.d.ts +22 -0
  319. package/dist/packages/shared/src/components/info/InfoBasic.vue.d.ts +20 -0
  320. package/dist/packages/shared/src/components/info/Summary.vue.d.ts +19 -0
  321. package/dist/packages/shared/src/components/info/TextChip.vue.d.ts +36 -0
  322. package/dist/packages/shared/src/components/layout/FormColumn.vue.d.ts +21 -0
  323. package/dist/packages/shared/src/components/layout/FormItem.vue.d.ts +23 -0
  324. package/dist/packages/shared/src/components/layout/FormRow.vue.d.ts +9 -0
  325. package/dist/packages/shared/src/components/layout/FormSection.vue.d.ts +24 -0
  326. package/dist/packages/shared/src/components/layout/FullScreenForm.vue.d.ts +45 -0
  327. package/dist/packages/shared/src/components/layout/FullWrapper.vue.d.ts +9 -0
  328. package/dist/packages/shared/src/components/layout/HorizontalSplitter.vue.d.ts +2 -0
  329. package/dist/packages/shared/src/components/layout/Indent.vue.d.ts +9 -0
  330. package/dist/packages/shared/src/components/layout/ListLayout.vue.d.ts +2 -0
  331. package/dist/packages/shared/src/components/layout/LottieAnimation.vue.d.ts +39 -0
  332. package/dist/packages/shared/src/components/layout/MobileXScrollable.vue.d.ts +9 -0
  333. package/dist/packages/shared/src/components/layout/PageLayout.vue.d.ts +24 -0
  334. package/dist/packages/shared/src/components/loading/AppLoading.vue.d.ts +20 -0
  335. package/dist/packages/shared/src/components/loading/PageLoading.vue.d.ts +2 -0
  336. package/dist/packages/shared/src/components/loading/index.d.ts +1 -0
  337. package/dist/packages/shared/src/components/map/GoogleMap.vue.d.ts +79 -0
  338. package/dist/packages/shared/src/components/menu/BottomSheetMenu.vue.d.ts +10 -0
  339. package/dist/packages/shared/src/components/menu/BottomSheetMenuItem.vue.d.ts +24 -0
  340. package/dist/packages/shared/src/components/menu/ResponsiveContextMenu.vue.d.ts +22 -0
  341. package/dist/packages/shared/src/components/table/EmptyDataTemplate/Icon.vue.d.ts +2 -0
  342. package/dist/packages/shared/src/components/table/EmptyDataTemplate/index.d.ts +1 -0
  343. package/dist/packages/shared/src/components/table/EmptyDataTemplate/index.vue.d.ts +27 -0
  344. package/dist/packages/shared/src/components/types.d.ts +95 -0
  345. package/dist/packages/shared/src/composable/clipboard.d.ts +3 -0
  346. package/dist/packages/shared/src/composable/dateRange.d.ts +18 -0
  347. package/dist/packages/shared/src/composable/discardConfirm.d.ts +1 -0
  348. package/dist/packages/shared/src/composable/elementPosition.d.ts +17 -0
  349. package/dist/packages/shared/src/composable/filterSelector.d.ts +12 -0
  350. package/dist/packages/shared/src/composable/loading.d.ts +29 -0
  351. package/dist/packages/shared/src/composable/prompt.d.ts +9 -0
  352. package/dist/packages/shared/src/composable/sheet.d.ts +17 -0
  353. package/dist/packages/shared/src/feature/featureMinVersion.d.ts +34 -0
  354. package/dist/packages/shared/src/helpers/actionButton.d.ts +8 -0
  355. package/dist/packages/shared/src/helpers/browser.d.ts +1 -0
  356. package/dist/packages/shared/src/helpers/contextMenu.d.ts +13 -0
  357. package/dist/packages/shared/src/helpers/createComponent.d.ts +7 -0
  358. package/dist/packages/shared/src/helpers/createForm.d.ts +2 -0
  359. package/dist/packages/shared/src/helpers/iteration.d.ts +11 -0
  360. package/dist/packages/shared/src/helpers/map.d.ts +370 -0
  361. package/dist/packages/shared/src/helpers/object.d.ts +6 -0
  362. package/dist/packages/shared/src/helpers/rules.d.ts +1 -0
  363. package/dist/packages/shared/src/helpers/string.d.ts +12 -0
  364. package/dist/packages/shared/src/stores/app.d.ts +217 -0
  365. package/dist/packages/shared/src/types/types.d.ts +5 -0
  366. package/dist/priceTier-xXhsXzsB.js +87 -0
  367. package/dist/scheduler-B2Mo-xyA.js +473 -0
  368. package/dist/search-BAPEUu1R.js +15 -0
  369. package/dist/string-DpfFixWH.js +4 -0
  370. package/dist/toExcel-D_BNnNoP.js +1439 -0
  371. package/dist/tooltip-B5BiPMx9.js +32 -0
  372. package/dist/unit--oJkBunJ.js +370 -0
  373. package/dist/vuedraggable-CK8z7qA8.js +1728 -0
  374. package/package.json +55 -13
  375. package/dist/api/index.d.ts +0 -1
  376. package/dist/app.d.ts +0 -2
  377. package/dist/router/shared.d.ts +0 -2
  378. package/dist/stores/counter.d.ts +0 -13
  379. package/dist/tsconfig.app.tsbuildinfo +0 -1
  380. package/dist/views/PrintRoute/PrintRoute.vue.d.ts +0 -2
  381. /package/dist/{main.d.ts → apps/mf-menu/src/main.d.ts} +0 -0
  382. /package/dist/{router → apps/mf-menu/src/router}/index.d.ts +0 -0
@@ -0,0 +1,2030 @@
1
+ import { ref as T, computed as ee, defineComponent as re, createElementBlock as O, openBlock as A, Fragment as me, renderList as ge, normalizeClass as Ze, createElementVNode as R, createCommentVNode as fe, toDisplayString as K, pushScopeId as et, popScopeId as tt, watch as he, nextTick as ye, onMounted as at, onBeforeUnmount as it, normalizeStyle as ot, renderSlot as nt, resolveComponent as rt, createBlock as lt, withCtx as st, createVNode as ct, defineAsyncComponent as ut } from "vue";
2
+ import { useBreakpoints as dt } from "@feedmepos/ui-library";
3
+ let j;
4
+ const pt = new Uint8Array(16);
5
+ function mt() {
6
+ if (!j && (j = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !j))
7
+ throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
8
+ return j(pt);
9
+ }
10
+ const v = [];
11
+ for (let e = 0; e < 256; ++e)
12
+ v.push((e + 256).toString(16).slice(1));
13
+ function gt(e, t = 0) {
14
+ return v[e[t + 0]] + v[e[t + 1]] + v[e[t + 2]] + v[e[t + 3]] + "-" + v[e[t + 4]] + v[e[t + 5]] + "-" + v[e[t + 6]] + v[e[t + 7]] + "-" + v[e[t + 8]] + v[e[t + 9]] + "-" + v[e[t + 10]] + v[e[t + 11]] + v[e[t + 12]] + v[e[t + 13]] + v[e[t + 14]] + v[e[t + 15]];
15
+ }
16
+ const ft = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), _e = {
17
+ randomUUID: ft
18
+ };
19
+ function ht(e, t, a) {
20
+ if (_e.randomUUID && !e)
21
+ return _e.randomUUID();
22
+ e = e || {};
23
+ const i = e.random || (e.rng || mt)();
24
+ return i[6] = i[6] & 15 | 64, i[8] = i[8] & 63 | 128, gt(i);
25
+ }
26
+ function Pe(e, t) {
27
+ return function() {
28
+ return e.apply(t, arguments);
29
+ };
30
+ }
31
+ const { toString: yt } = Object.prototype, { getPrototypeOf: le } = Object, z = /* @__PURE__ */ ((e) => (t) => {
32
+ const a = yt.call(t);
33
+ return e[a] || (e[a] = a.slice(8, -1).toLowerCase());
34
+ })(/* @__PURE__ */ Object.create(null)), x = (e) => (e = e.toLowerCase(), (t) => z(t) === e), V = (e) => (t) => typeof t === e, { isArray: q } = Array, I = V("undefined");
35
+ function _t(e) {
36
+ return e !== null && !I(e) && e.constructor !== null && !I(e.constructor) && w(e.constructor.isBuffer) && e.constructor.isBuffer(e);
37
+ }
38
+ const Te = x("ArrayBuffer");
39
+ function bt(e) {
40
+ let t;
41
+ return typeof ArrayBuffer < "u" && ArrayBuffer.isView ? t = ArrayBuffer.isView(e) : t = e && e.buffer && Te(e.buffer), t;
42
+ }
43
+ const vt = V("string"), w = V("function"), qe = V("number"), G = (e) => e !== null && typeof e == "object", kt = (e) => e === !0 || e === !1, B = (e) => {
44
+ if (z(e) !== "object")
45
+ return !1;
46
+ const t = le(e);
47
+ return (t === null || t === Object.prototype || Object.getPrototypeOf(t) === null) && !(Symbol.toStringTag in e) && !(Symbol.iterator in e);
48
+ }, wt = x("Date"), At = x("File"), St = x("Blob"), xt = x("FileList"), Ot = (e) => G(e) && w(e.pipe), Ct = (e) => {
49
+ let t;
50
+ return e && (typeof FormData == "function" && e instanceof FormData || w(e.append) && ((t = z(e)) === "formdata" || // detect form-data instance
51
+ t === "object" && w(e.toString) && e.toString() === "[object FormData]"));
52
+ }, Et = x("URLSearchParams"), Rt = (e) => e.trim ? e.trim() : e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
53
+ function D(e, t, { allOwnKeys: a = !1 } = {}) {
54
+ if (e === null || typeof e > "u")
55
+ return;
56
+ let i, o;
57
+ if (typeof e != "object" && (e = [e]), q(e))
58
+ for (i = 0, o = e.length; i < o; i++)
59
+ t.call(null, e[i], i, e);
60
+ else {
61
+ const n = a ? Object.getOwnPropertyNames(e) : Object.keys(e), r = n.length;
62
+ let c;
63
+ for (i = 0; i < r; i++)
64
+ c = n[i], t.call(null, e[c], c, e);
65
+ }
66
+ }
67
+ function Ne(e, t) {
68
+ t = t.toLowerCase();
69
+ const a = Object.keys(e);
70
+ let i = a.length, o;
71
+ for (; i-- > 0; )
72
+ if (o = a[i], t === o.toLowerCase())
73
+ return o;
74
+ return null;
75
+ }
76
+ const Ue = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : global, Ie = (e) => !I(e) && e !== Ue;
77
+ function te() {
78
+ const { caseless: e } = Ie(this) && this || {}, t = {}, a = (i, o) => {
79
+ const n = e && Ne(t, o) || o;
80
+ B(t[n]) && B(i) ? t[n] = te(t[n], i) : B(i) ? t[n] = te({}, i) : q(i) ? t[n] = i.slice() : t[n] = i;
81
+ };
82
+ for (let i = 0, o = arguments.length; i < o; i++)
83
+ arguments[i] && D(arguments[i], a);
84
+ return t;
85
+ }
86
+ const Pt = (e, t, a, { allOwnKeys: i } = {}) => (D(t, (o, n) => {
87
+ a && w(o) ? e[n] = Pe(o, a) : e[n] = o;
88
+ }, { allOwnKeys: i }), e), Tt = (e) => (e.charCodeAt(0) === 65279 && (e = e.slice(1)), e), qt = (e, t, a, i) => {
89
+ e.prototype = Object.create(t.prototype, i), e.prototype.constructor = e, Object.defineProperty(e, "super", {
90
+ value: t.prototype
91
+ }), a && Object.assign(e.prototype, a);
92
+ }, Nt = (e, t, a, i) => {
93
+ let o, n, r;
94
+ const c = {};
95
+ if (t = t || {}, e == null)
96
+ return t;
97
+ do {
98
+ for (o = Object.getOwnPropertyNames(e), n = o.length; n-- > 0; )
99
+ r = o[n], (!i || i(r, e, t)) && !c[r] && (t[r] = e[r], c[r] = !0);
100
+ e = a !== !1 && le(e);
101
+ } while (e && (!a || a(e, t)) && e !== Object.prototype);
102
+ return t;
103
+ }, Ut = (e, t, a) => {
104
+ e = String(e), (a === void 0 || a > e.length) && (a = e.length), a -= t.length;
105
+ const i = e.indexOf(t, a);
106
+ return i !== -1 && i === a;
107
+ }, It = (e) => {
108
+ if (!e)
109
+ return null;
110
+ if (q(e))
111
+ return e;
112
+ let t = e.length;
113
+ if (!qe(t))
114
+ return null;
115
+ const a = new Array(t);
116
+ for (; t-- > 0; )
117
+ a[t] = e[t];
118
+ return a;
119
+ }, Dt = /* @__PURE__ */ ((e) => (t) => e && t instanceof e)(typeof Uint8Array < "u" && le(Uint8Array)), Lt = (e, t) => {
120
+ const a = (e && e[Symbol.iterator]).call(e);
121
+ let i;
122
+ for (; (i = a.next()) && !i.done; ) {
123
+ const o = i.value;
124
+ t.call(e, o[0], o[1]);
125
+ }
126
+ }, jt = (e, t) => {
127
+ let a;
128
+ const i = [];
129
+ for (; (a = e.exec(t)) !== null; )
130
+ i.push(a);
131
+ return i;
132
+ }, Bt = x("HTMLFormElement"), Ft = (e) => e.toLowerCase().replace(
133
+ /[-_\s]([a-z\d])(\w*)/g,
134
+ function(t, a, i) {
135
+ return a.toUpperCase() + i;
136
+ }
137
+ ), be = (({ hasOwnProperty: e }) => (t, a) => e.call(t, a))(Object.prototype), Mt = x("RegExp"), De = (e, t) => {
138
+ const a = Object.getOwnPropertyDescriptors(e), i = {};
139
+ D(a, (o, n) => {
140
+ let r;
141
+ (r = t(o, n, e)) !== !1 && (i[n] = r || o);
142
+ }), Object.defineProperties(e, i);
143
+ }, $t = (e) => {
144
+ De(e, (t, a) => {
145
+ if (w(e) && ["arguments", "caller", "callee"].indexOf(a) !== -1)
146
+ return !1;
147
+ const i = e[a];
148
+ if (w(i)) {
149
+ if (t.enumerable = !1, "writable" in t) {
150
+ t.writable = !1;
151
+ return;
152
+ }
153
+ t.set || (t.set = () => {
154
+ throw Error("Can not rewrite read-only method '" + a + "'");
155
+ });
156
+ }
157
+ });
158
+ }, zt = (e, t) => {
159
+ const a = {}, i = (o) => {
160
+ o.forEach((n) => {
161
+ a[n] = !0;
162
+ });
163
+ };
164
+ return q(e) ? i(e) : i(String(e).split(t)), a;
165
+ }, Vt = () => {
166
+ }, Gt = (e, t) => (e = +e, Number.isFinite(e) ? e : t), Y = "abcdefghijklmnopqrstuvwxyz", ve = "0123456789", Le = {
167
+ DIGIT: ve,
168
+ ALPHA: Y,
169
+ ALPHA_DIGIT: Y + Y.toUpperCase() + ve
170
+ }, Ht = (e = 16, t = Le.ALPHA_DIGIT) => {
171
+ let a = "";
172
+ const { length: i } = t;
173
+ for (; e--; )
174
+ a += t[Math.random() * i | 0];
175
+ return a;
176
+ };
177
+ function Jt(e) {
178
+ return !!(e && w(e.append) && e[Symbol.toStringTag] === "FormData" && e[Symbol.iterator]);
179
+ }
180
+ const Wt = (e) => {
181
+ const t = new Array(10), a = (i, o) => {
182
+ if (G(i)) {
183
+ if (t.indexOf(i) >= 0)
184
+ return;
185
+ if (!("toJSON" in i)) {
186
+ t[o] = i;
187
+ const n = q(i) ? [] : {};
188
+ return D(i, (r, c) => {
189
+ const p = a(r, o + 1);
190
+ !I(p) && (n[c] = p);
191
+ }), t[o] = void 0, n;
192
+ }
193
+ }
194
+ return i;
195
+ };
196
+ return a(e, 0);
197
+ }, Kt = x("AsyncFunction"), Yt = (e) => e && (G(e) || w(e)) && w(e.then) && w(e.catch), l = {
198
+ isArray: q,
199
+ isArrayBuffer: Te,
200
+ isBuffer: _t,
201
+ isFormData: Ct,
202
+ isArrayBufferView: bt,
203
+ isString: vt,
204
+ isNumber: qe,
205
+ isBoolean: kt,
206
+ isObject: G,
207
+ isPlainObject: B,
208
+ isUndefined: I,
209
+ isDate: wt,
210
+ isFile: At,
211
+ isBlob: St,
212
+ isRegExp: Mt,
213
+ isFunction: w,
214
+ isStream: Ot,
215
+ isURLSearchParams: Et,
216
+ isTypedArray: Dt,
217
+ isFileList: xt,
218
+ forEach: D,
219
+ merge: te,
220
+ extend: Pt,
221
+ trim: Rt,
222
+ stripBOM: Tt,
223
+ inherits: qt,
224
+ toFlatObject: Nt,
225
+ kindOf: z,
226
+ kindOfTest: x,
227
+ endsWith: Ut,
228
+ toArray: It,
229
+ forEachEntry: Lt,
230
+ matchAll: jt,
231
+ isHTMLForm: Bt,
232
+ hasOwnProperty: be,
233
+ hasOwnProp: be,
234
+ // an alias to avoid ESLint no-prototype-builtins detection
235
+ reduceDescriptors: De,
236
+ freezeMethods: $t,
237
+ toObjectSet: zt,
238
+ toCamelCase: Ft,
239
+ noop: Vt,
240
+ toFiniteNumber: Gt,
241
+ findKey: Ne,
242
+ global: Ue,
243
+ isContextDefined: Ie,
244
+ ALPHABET: Le,
245
+ generateString: Ht,
246
+ isSpecCompliantForm: Jt,
247
+ toJSONObject: Wt,
248
+ isAsyncFn: Kt,
249
+ isThenable: Yt
250
+ };
251
+ function f(e, t, a, i, o) {
252
+ Error.call(this), Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : this.stack = new Error().stack, this.message = e, this.name = "AxiosError", t && (this.code = t), a && (this.config = a), i && (this.request = i), o && (this.response = o);
253
+ }
254
+ l.inherits(f, Error, {
255
+ toJSON: function() {
256
+ return {
257
+ // Standard
258
+ message: this.message,
259
+ name: this.name,
260
+ // Microsoft
261
+ description: this.description,
262
+ number: this.number,
263
+ // Mozilla
264
+ fileName: this.fileName,
265
+ lineNumber: this.lineNumber,
266
+ columnNumber: this.columnNumber,
267
+ stack: this.stack,
268
+ // Axios
269
+ config: l.toJSONObject(this.config),
270
+ code: this.code,
271
+ status: this.response && this.response.status ? this.response.status : null
272
+ };
273
+ }
274
+ });
275
+ const je = f.prototype, Be = {};
276
+ [
277
+ "ERR_BAD_OPTION_VALUE",
278
+ "ERR_BAD_OPTION",
279
+ "ECONNABORTED",
280
+ "ETIMEDOUT",
281
+ "ERR_NETWORK",
282
+ "ERR_FR_TOO_MANY_REDIRECTS",
283
+ "ERR_DEPRECATED",
284
+ "ERR_BAD_RESPONSE",
285
+ "ERR_BAD_REQUEST",
286
+ "ERR_CANCELED",
287
+ "ERR_NOT_SUPPORT",
288
+ "ERR_INVALID_URL"
289
+ // eslint-disable-next-line func-names
290
+ ].forEach((e) => {
291
+ Be[e] = { value: e };
292
+ });
293
+ Object.defineProperties(f, Be);
294
+ Object.defineProperty(je, "isAxiosError", { value: !0 });
295
+ f.from = (e, t, a, i, o, n) => {
296
+ const r = Object.create(je);
297
+ return l.toFlatObject(e, r, function(c) {
298
+ return c !== Error.prototype;
299
+ }, (c) => c !== "isAxiosError"), f.call(r, e.message, t, a, i, o), r.cause = e, r.name = e.name, n && Object.assign(r, n), r;
300
+ };
301
+ const Xt = null;
302
+ function ae(e) {
303
+ return l.isPlainObject(e) || l.isArray(e);
304
+ }
305
+ function Fe(e) {
306
+ return l.endsWith(e, "[]") ? e.slice(0, -2) : e;
307
+ }
308
+ function ke(e, t, a) {
309
+ return e ? e.concat(t).map(function(i, o) {
310
+ return i = Fe(i), !a && o ? "[" + i + "]" : i;
311
+ }).join(a ? "." : "") : t;
312
+ }
313
+ function Qt(e) {
314
+ return l.isArray(e) && !e.some(ae);
315
+ }
316
+ const Zt = l.toFlatObject(l, {}, null, function(e) {
317
+ return /^is[A-Z]/.test(e);
318
+ });
319
+ function H(e, t, a) {
320
+ if (!l.isObject(e))
321
+ throw new TypeError("target must be an object");
322
+ t = t || new FormData(), a = l.toFlatObject(a, {
323
+ metaTokens: !0,
324
+ dots: !1,
325
+ indexes: !1
326
+ }, !1, function(g, u) {
327
+ return !l.isUndefined(u[g]);
328
+ });
329
+ const i = a.metaTokens, o = a.visitor || d, n = a.dots, r = a.indexes, c = (a.Blob || typeof Blob < "u" && Blob) && l.isSpecCompliantForm(t);
330
+ if (!l.isFunction(o))
331
+ throw new TypeError("visitor must be a function");
332
+ function p(g) {
333
+ if (g === null)
334
+ return "";
335
+ if (l.isDate(g))
336
+ return g.toISOString();
337
+ if (!c && l.isBlob(g))
338
+ throw new f("Blob is not supported. Use a Buffer instead.");
339
+ return l.isArrayBuffer(g) || l.isTypedArray(g) ? c && typeof Blob == "function" ? new Blob([g]) : Buffer.from(g) : g;
340
+ }
341
+ function d(g, u, y) {
342
+ let k = g;
343
+ if (g && !y && typeof g == "object") {
344
+ if (l.endsWith(u, "{}"))
345
+ u = i ? u : u.slice(0, -2), g = JSON.stringify(g);
346
+ else if (l.isArray(g) && Qt(g) || (l.isFileList(g) || l.endsWith(u, "[]")) && (k = l.toArray(g)))
347
+ return u = Fe(u), k.forEach(function(W, Qe) {
348
+ !(l.isUndefined(W) || W === null) && t.append(
349
+ // eslint-disable-next-line no-nested-ternary
350
+ r === !0 ? ke([u], Qe, n) : r === null ? u : u + "[]",
351
+ p(W)
352
+ );
353
+ }), !1;
354
+ }
355
+ return ae(g) ? !0 : (t.append(ke(y, u, n), p(g)), !1);
356
+ }
357
+ const s = [], m = Object.assign(Zt, {
358
+ defaultVisitor: d,
359
+ convertValue: p,
360
+ isVisitable: ae
361
+ });
362
+ function h(g, u) {
363
+ if (!l.isUndefined(g)) {
364
+ if (s.indexOf(g) !== -1)
365
+ throw Error("Circular reference detected in " + u.join("."));
366
+ s.push(g), l.forEach(g, function(y, k) {
367
+ (!(l.isUndefined(y) || y === null) && o.call(
368
+ t,
369
+ y,
370
+ l.isString(k) ? k.trim() : k,
371
+ u,
372
+ m
373
+ )) === !0 && h(y, u ? u.concat(k) : [k]);
374
+ }), s.pop();
375
+ }
376
+ }
377
+ if (!l.isObject(e))
378
+ throw new TypeError("data must be an object");
379
+ return h(e), t;
380
+ }
381
+ function we(e) {
382
+ const t = {
383
+ "!": "%21",
384
+ "'": "%27",
385
+ "(": "%28",
386
+ ")": "%29",
387
+ "~": "%7E",
388
+ "%20": "+",
389
+ "%00": "\0"
390
+ };
391
+ return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g, function(a) {
392
+ return t[a];
393
+ });
394
+ }
395
+ function se(e, t) {
396
+ this._pairs = [], e && H(e, this, t);
397
+ }
398
+ const Me = se.prototype;
399
+ Me.append = function(e, t) {
400
+ this._pairs.push([e, t]);
401
+ };
402
+ Me.toString = function(e) {
403
+ const t = e ? function(a) {
404
+ return e.call(this, a, we);
405
+ } : we;
406
+ return this._pairs.map(function(a) {
407
+ return t(a[0]) + "=" + t(a[1]);
408
+ }, "").join("&");
409
+ };
410
+ function ea(e) {
411
+ return encodeURIComponent(e).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
412
+ }
413
+ function $e(e, t, a) {
414
+ if (!t)
415
+ return e;
416
+ const i = a && a.encode || ea, o = a && a.serialize;
417
+ let n;
418
+ if (o ? n = o(t, a) : n = l.isURLSearchParams(t) ? t.toString() : new se(t, a).toString(i), n) {
419
+ const r = e.indexOf("#");
420
+ r !== -1 && (e = e.slice(0, r)), e += (e.indexOf("?") === -1 ? "?" : "&") + n;
421
+ }
422
+ return e;
423
+ }
424
+ class Ae {
425
+ constructor() {
426
+ this.handlers = [];
427
+ }
428
+ /**
429
+ * Add a new interceptor to the stack
430
+ *
431
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
432
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
433
+ *
434
+ * @return {Number} An ID used to remove interceptor later
435
+ */
436
+ use(t, a, i) {
437
+ return this.handlers.push({
438
+ fulfilled: t,
439
+ rejected: a,
440
+ synchronous: i ? i.synchronous : !1,
441
+ runWhen: i ? i.runWhen : null
442
+ }), this.handlers.length - 1;
443
+ }
444
+ /**
445
+ * Remove an interceptor from the stack
446
+ *
447
+ * @param {Number} id The ID that was returned by `use`
448
+ *
449
+ * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise
450
+ */
451
+ eject(t) {
452
+ this.handlers[t] && (this.handlers[t] = null);
453
+ }
454
+ /**
455
+ * Clear all interceptors from the stack
456
+ *
457
+ * @returns {void}
458
+ */
459
+ clear() {
460
+ this.handlers && (this.handlers = []);
461
+ }
462
+ /**
463
+ * Iterate over all the registered interceptors
464
+ *
465
+ * This method is particularly useful for skipping over any
466
+ * interceptors that may have become `null` calling `eject`.
467
+ *
468
+ * @param {Function} fn The function to call for each interceptor
469
+ *
470
+ * @returns {void}
471
+ */
472
+ forEach(t) {
473
+ l.forEach(this.handlers, function(a) {
474
+ a !== null && t(a);
475
+ });
476
+ }
477
+ }
478
+ const ze = {
479
+ silentJSONParsing: !0,
480
+ forcedJSONParsing: !0,
481
+ clarifyTimeoutError: !1
482
+ }, ta = typeof URLSearchParams < "u" ? URLSearchParams : se, aa = typeof FormData < "u" ? FormData : null, ia = typeof Blob < "u" ? Blob : null, oa = {
483
+ isBrowser: !0,
484
+ classes: {
485
+ URLSearchParams: ta,
486
+ FormData: aa,
487
+ Blob: ia
488
+ },
489
+ protocols: ["http", "https", "file", "blob", "url", "data"]
490
+ }, Ve = typeof window < "u" && typeof document < "u", na = ((e) => Ve && ["ReactNative", "NativeScript", "NS"].indexOf(e) < 0)(typeof navigator < "u" && navigator.product), ra = typeof WorkerGlobalScope < "u" && // eslint-disable-next-line no-undef
491
+ self instanceof WorkerGlobalScope && typeof self.importScripts == "function", la = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
492
+ __proto__: null,
493
+ hasBrowserEnv: Ve,
494
+ hasStandardBrowserEnv: na,
495
+ hasStandardBrowserWebWorkerEnv: ra
496
+ }, Symbol.toStringTag, { value: "Module" })), S = {
497
+ ...la,
498
+ ...oa
499
+ };
500
+ function sa(e, t) {
501
+ return H(e, new S.classes.URLSearchParams(), Object.assign({
502
+ visitor: function(a, i, o, n) {
503
+ return S.isNode && l.isBuffer(a) ? (this.append(i, a.toString("base64")), !1) : n.defaultVisitor.apply(this, arguments);
504
+ }
505
+ }, t));
506
+ }
507
+ function ca(e) {
508
+ return l.matchAll(/\w+|\[(\w*)]/g, e).map((t) => t[0] === "[]" ? "" : t[1] || t[0]);
509
+ }
510
+ function ua(e) {
511
+ const t = {}, a = Object.keys(e);
512
+ let i;
513
+ const o = a.length;
514
+ let n;
515
+ for (i = 0; i < o; i++)
516
+ n = a[i], t[n] = e[n];
517
+ return t;
518
+ }
519
+ function Ge(e) {
520
+ function t(a, i, o, n) {
521
+ let r = a[n++];
522
+ if (r === "__proto__")
523
+ return !0;
524
+ const c = Number.isFinite(+r), p = n >= a.length;
525
+ return r = !r && l.isArray(o) ? o.length : r, p ? (l.hasOwnProp(o, r) ? o[r] = [o[r], i] : o[r] = i, !c) : ((!o[r] || !l.isObject(o[r])) && (o[r] = []), t(a, i, o[r], n) && l.isArray(o[r]) && (o[r] = ua(o[r])), !c);
526
+ }
527
+ if (l.isFormData(e) && l.isFunction(e.entries)) {
528
+ const a = {};
529
+ return l.forEachEntry(e, (i, o) => {
530
+ t(ca(i), o, a, 0);
531
+ }), a;
532
+ }
533
+ return null;
534
+ }
535
+ function da(e, t, a) {
536
+ if (l.isString(e))
537
+ try {
538
+ return (t || JSON.parse)(e), l.trim(e);
539
+ } catch (i) {
540
+ if (i.name !== "SyntaxError")
541
+ throw i;
542
+ }
543
+ return (a || JSON.stringify)(e);
544
+ }
545
+ const ce = {
546
+ transitional: ze,
547
+ adapter: ["xhr", "http"],
548
+ transformRequest: [function(e, t) {
549
+ const a = t.getContentType() || "", i = a.indexOf("application/json") > -1, o = l.isObject(e);
550
+ if (o && l.isHTMLForm(e) && (e = new FormData(e)), l.isFormData(e))
551
+ return i && i ? JSON.stringify(Ge(e)) : e;
552
+ if (l.isArrayBuffer(e) || l.isBuffer(e) || l.isStream(e) || l.isFile(e) || l.isBlob(e))
553
+ return e;
554
+ if (l.isArrayBufferView(e))
555
+ return e.buffer;
556
+ if (l.isURLSearchParams(e))
557
+ return t.setContentType("application/x-www-form-urlencoded;charset=utf-8", !1), e.toString();
558
+ let n;
559
+ if (o) {
560
+ if (a.indexOf("application/x-www-form-urlencoded") > -1)
561
+ return sa(e, this.formSerializer).toString();
562
+ if ((n = l.isFileList(e)) || a.indexOf("multipart/form-data") > -1) {
563
+ const r = this.env && this.env.FormData;
564
+ return H(
565
+ n ? { "files[]": e } : e,
566
+ r && new r(),
567
+ this.formSerializer
568
+ );
569
+ }
570
+ }
571
+ return o || i ? (t.setContentType("application/json", !1), da(e)) : e;
572
+ }],
573
+ transformResponse: [function(e) {
574
+ const t = this.transitional || ce.transitional, a = t && t.forcedJSONParsing, i = this.responseType === "json";
575
+ if (e && l.isString(e) && (a && !this.responseType || i)) {
576
+ const o = !(t && t.silentJSONParsing) && i;
577
+ try {
578
+ return JSON.parse(e);
579
+ } catch (n) {
580
+ if (o)
581
+ throw n.name === "SyntaxError" ? f.from(n, f.ERR_BAD_RESPONSE, this, null, this.response) : n;
582
+ }
583
+ }
584
+ return e;
585
+ }],
586
+ /**
587
+ * A timeout in milliseconds to abort a request. If set to 0 (default) a
588
+ * timeout is not created.
589
+ */
590
+ timeout: 0,
591
+ xsrfCookieName: "XSRF-TOKEN",
592
+ xsrfHeaderName: "X-XSRF-TOKEN",
593
+ maxContentLength: -1,
594
+ maxBodyLength: -1,
595
+ env: {
596
+ FormData: S.classes.FormData,
597
+ Blob: S.classes.Blob
598
+ },
599
+ validateStatus: function(e) {
600
+ return e >= 200 && e < 300;
601
+ },
602
+ headers: {
603
+ common: {
604
+ Accept: "application/json, text/plain, */*",
605
+ "Content-Type": void 0
606
+ }
607
+ }
608
+ };
609
+ l.forEach(["delete", "get", "head", "post", "put", "patch"], (e) => {
610
+ ce.headers[e] = {};
611
+ });
612
+ const ue = ce, pa = l.toObjectSet([
613
+ "age",
614
+ "authorization",
615
+ "content-length",
616
+ "content-type",
617
+ "etag",
618
+ "expires",
619
+ "from",
620
+ "host",
621
+ "if-modified-since",
622
+ "if-unmodified-since",
623
+ "last-modified",
624
+ "location",
625
+ "max-forwards",
626
+ "proxy-authorization",
627
+ "referer",
628
+ "retry-after",
629
+ "user-agent"
630
+ ]), ma = (e) => {
631
+ const t = {};
632
+ let a, i, o;
633
+ return e && e.split(`
634
+ `).forEach(function(n) {
635
+ o = n.indexOf(":"), a = n.substring(0, o).trim().toLowerCase(), i = n.substring(o + 1).trim(), !(!a || t[a] && pa[a]) && (a === "set-cookie" ? t[a] ? t[a].push(i) : t[a] = [i] : t[a] = t[a] ? t[a] + ", " + i : i);
636
+ }), t;
637
+ }, Se = Symbol("internals");
638
+ function N(e) {
639
+ return e && String(e).trim().toLowerCase();
640
+ }
641
+ function F(e) {
642
+ return e === !1 || e == null ? e : l.isArray(e) ? e.map(F) : String(e);
643
+ }
644
+ function ga(e) {
645
+ const t = /* @__PURE__ */ Object.create(null), a = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
646
+ let i;
647
+ for (; i = a.exec(e); )
648
+ t[i[1]] = i[2];
649
+ return t;
650
+ }
651
+ const fa = (e) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());
652
+ function X(e, t, a, i, o) {
653
+ if (l.isFunction(i))
654
+ return i.call(this, t, a);
655
+ if (o && (t = a), !!l.isString(t)) {
656
+ if (l.isString(i))
657
+ return t.indexOf(i) !== -1;
658
+ if (l.isRegExp(i))
659
+ return i.test(t);
660
+ }
661
+ }
662
+ function ha(e) {
663
+ return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (t, a, i) => a.toUpperCase() + i);
664
+ }
665
+ function ya(e, t) {
666
+ const a = l.toCamelCase(" " + t);
667
+ ["get", "set", "has"].forEach((i) => {
668
+ Object.defineProperty(e, i + a, {
669
+ value: function(o, n, r) {
670
+ return this[i].call(this, t, o, n, r);
671
+ },
672
+ configurable: !0
673
+ });
674
+ });
675
+ }
676
+ class J {
677
+ constructor(t) {
678
+ t && this.set(t);
679
+ }
680
+ set(t, a, i) {
681
+ const o = this;
682
+ function n(c, p, d) {
683
+ const s = N(p);
684
+ if (!s)
685
+ throw new Error("header name must be a non-empty string");
686
+ const m = l.findKey(o, s);
687
+ (!m || o[m] === void 0 || d === !0 || d === void 0 && o[m] !== !1) && (o[m || p] = F(c));
688
+ }
689
+ const r = (c, p) => l.forEach(c, (d, s) => n(d, s, p));
690
+ return l.isPlainObject(t) || t instanceof this.constructor ? r(t, a) : l.isString(t) && (t = t.trim()) && !fa(t) ? r(ma(t), a) : t != null && n(a, t, i), this;
691
+ }
692
+ get(t, a) {
693
+ if (t = N(t), t) {
694
+ const i = l.findKey(this, t);
695
+ if (i) {
696
+ const o = this[i];
697
+ if (!a)
698
+ return o;
699
+ if (a === !0)
700
+ return ga(o);
701
+ if (l.isFunction(a))
702
+ return a.call(this, o, i);
703
+ if (l.isRegExp(a))
704
+ return a.exec(o);
705
+ throw new TypeError("parser must be boolean|regexp|function");
706
+ }
707
+ }
708
+ }
709
+ has(t, a) {
710
+ if (t = N(t), t) {
711
+ const i = l.findKey(this, t);
712
+ return !!(i && this[i] !== void 0 && (!a || X(this, this[i], i, a)));
713
+ }
714
+ return !1;
715
+ }
716
+ delete(t, a) {
717
+ const i = this;
718
+ let o = !1;
719
+ function n(r) {
720
+ if (r = N(r), r) {
721
+ const c = l.findKey(i, r);
722
+ c && (!a || X(i, i[c], c, a)) && (delete i[c], o = !0);
723
+ }
724
+ }
725
+ return l.isArray(t) ? t.forEach(n) : n(t), o;
726
+ }
727
+ clear(t) {
728
+ const a = Object.keys(this);
729
+ let i = a.length, o = !1;
730
+ for (; i--; ) {
731
+ const n = a[i];
732
+ (!t || X(this, this[n], n, t, !0)) && (delete this[n], o = !0);
733
+ }
734
+ return o;
735
+ }
736
+ normalize(t) {
737
+ const a = this, i = {};
738
+ return l.forEach(this, (o, n) => {
739
+ const r = l.findKey(i, n);
740
+ if (r) {
741
+ a[r] = F(o), delete a[n];
742
+ return;
743
+ }
744
+ const c = t ? ha(n) : String(n).trim();
745
+ c !== n && delete a[n], a[c] = F(o), i[c] = !0;
746
+ }), this;
747
+ }
748
+ concat(...t) {
749
+ return this.constructor.concat(this, ...t);
750
+ }
751
+ toJSON(t) {
752
+ const a = /* @__PURE__ */ Object.create(null);
753
+ return l.forEach(this, (i, o) => {
754
+ i != null && i !== !1 && (a[o] = t && l.isArray(i) ? i.join(", ") : i);
755
+ }), a;
756
+ }
757
+ [Symbol.iterator]() {
758
+ return Object.entries(this.toJSON())[Symbol.iterator]();
759
+ }
760
+ toString() {
761
+ return Object.entries(this.toJSON()).map(([t, a]) => t + ": " + a).join(`
762
+ `);
763
+ }
764
+ get [Symbol.toStringTag]() {
765
+ return "AxiosHeaders";
766
+ }
767
+ static from(t) {
768
+ return t instanceof this ? t : new this(t);
769
+ }
770
+ static concat(t, ...a) {
771
+ const i = new this(t);
772
+ return a.forEach((o) => i.set(o)), i;
773
+ }
774
+ static accessor(t) {
775
+ const a = (this[Se] = this[Se] = {
776
+ accessors: {}
777
+ }).accessors, i = this.prototype;
778
+ function o(n) {
779
+ const r = N(n);
780
+ a[r] || (ya(i, n), a[r] = !0);
781
+ }
782
+ return l.isArray(t) ? t.forEach(o) : o(t), this;
783
+ }
784
+ }
785
+ J.accessor(["Content-Type", "Content-Length", "Accept", "Accept-Encoding", "User-Agent", "Authorization"]);
786
+ l.reduceDescriptors(J.prototype, ({ value: e }, t) => {
787
+ let a = t[0].toUpperCase() + t.slice(1);
788
+ return {
789
+ get: () => e,
790
+ set(i) {
791
+ this[a] = i;
792
+ }
793
+ };
794
+ });
795
+ l.freezeMethods(J);
796
+ const C = J;
797
+ function Q(e, t) {
798
+ const a = this || ue, i = t || a, o = C.from(i.headers);
799
+ let n = i.data;
800
+ return l.forEach(e, function(r) {
801
+ n = r.call(a, n, o.normalize(), t ? t.status : void 0);
802
+ }), o.normalize(), n;
803
+ }
804
+ function He(e) {
805
+ return !!(e && e.__CANCEL__);
806
+ }
807
+ function L(e, t, a) {
808
+ f.call(this, e ?? "canceled", f.ERR_CANCELED, t, a), this.name = "CanceledError";
809
+ }
810
+ l.inherits(L, f, {
811
+ __CANCEL__: !0
812
+ });
813
+ function _a(e, t, a) {
814
+ const i = a.config.validateStatus;
815
+ !a.status || !i || i(a.status) ? e(a) : t(new f(
816
+ "Request failed with status code " + a.status,
817
+ [f.ERR_BAD_REQUEST, f.ERR_BAD_RESPONSE][Math.floor(a.status / 100) - 4],
818
+ a.config,
819
+ a.request,
820
+ a
821
+ ));
822
+ }
823
+ const ba = S.hasStandardBrowserEnv ? (
824
+ // Standard browser envs support document.cookie
825
+ {
826
+ write(e, t, a, i, o, n) {
827
+ const r = [e + "=" + encodeURIComponent(t)];
828
+ l.isNumber(a) && r.push("expires=" + new Date(a).toGMTString()), l.isString(i) && r.push("path=" + i), l.isString(o) && r.push("domain=" + o), n === !0 && r.push("secure"), document.cookie = r.join("; ");
829
+ },
830
+ read(e) {
831
+ const t = document.cookie.match(new RegExp("(^|;\\s*)(" + e + ")=([^;]*)"));
832
+ return t ? decodeURIComponent(t[3]) : null;
833
+ },
834
+ remove(e) {
835
+ this.write(e, "", Date.now() - 864e5);
836
+ }
837
+ }
838
+ ) : (
839
+ // Non-standard browser env (web workers, react-native) lack needed support.
840
+ {
841
+ write() {
842
+ },
843
+ read() {
844
+ return null;
845
+ },
846
+ remove() {
847
+ }
848
+ }
849
+ );
850
+ function va(e) {
851
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(e);
852
+ }
853
+ function ka(e, t) {
854
+ return t ? e.replace(/\/?\/$/, "") + "/" + t.replace(/^\/+/, "") : e;
855
+ }
856
+ function Je(e, t) {
857
+ return e && !va(t) ? ka(e, t) : t;
858
+ }
859
+ const wa = S.hasStandardBrowserEnv ? (
860
+ // Standard browser envs have full support of the APIs needed to test
861
+ // whether the request URL is of the same origin as current location.
862
+ function() {
863
+ const e = /(msie|trident)/i.test(navigator.userAgent), t = document.createElement("a");
864
+ let a;
865
+ function i(o) {
866
+ let n = o;
867
+ return e && (t.setAttribute("href", n), n = t.href), t.setAttribute("href", n), {
868
+ href: t.href,
869
+ protocol: t.protocol ? t.protocol.replace(/:$/, "") : "",
870
+ host: t.host,
871
+ search: t.search ? t.search.replace(/^\?/, "") : "",
872
+ hash: t.hash ? t.hash.replace(/^#/, "") : "",
873
+ hostname: t.hostname,
874
+ port: t.port,
875
+ pathname: t.pathname.charAt(0) === "/" ? t.pathname : "/" + t.pathname
876
+ };
877
+ }
878
+ return a = i(window.location.href), function(o) {
879
+ const n = l.isString(o) ? i(o) : o;
880
+ return n.protocol === a.protocol && n.host === a.host;
881
+ };
882
+ }()
883
+ ) : (
884
+ // Non standard browser envs (web workers, react-native) lack needed support.
885
+ /* @__PURE__ */ function() {
886
+ return function() {
887
+ return !0;
888
+ };
889
+ }()
890
+ );
891
+ function Aa(e) {
892
+ const t = /^([-+\w]{1,25})(:?\/\/|:)/.exec(e);
893
+ return t && t[1] || "";
894
+ }
895
+ function Sa(e, t) {
896
+ e = e || 10;
897
+ const a = new Array(e), i = new Array(e);
898
+ let o = 0, n = 0, r;
899
+ return t = t !== void 0 ? t : 1e3, function(c) {
900
+ const p = Date.now(), d = i[n];
901
+ r || (r = p), a[o] = c, i[o] = p;
902
+ let s = n, m = 0;
903
+ for (; s !== o; )
904
+ m += a[s++], s = s % e;
905
+ if (o = (o + 1) % e, o === n && (n = (n + 1) % e), p - r < t)
906
+ return;
907
+ const h = d && p - d;
908
+ return h ? Math.round(m * 1e3 / h) : void 0;
909
+ };
910
+ }
911
+ function xe(e, t) {
912
+ let a = 0;
913
+ const i = Sa(50, 250);
914
+ return (o) => {
915
+ const n = o.loaded, r = o.lengthComputable ? o.total : void 0, c = n - a, p = i(c), d = n <= r;
916
+ a = n;
917
+ const s = {
918
+ loaded: n,
919
+ total: r,
920
+ progress: r ? n / r : void 0,
921
+ bytes: c,
922
+ rate: p || void 0,
923
+ estimated: p && r && d ? (r - n) / p : void 0,
924
+ event: o
925
+ };
926
+ s[t ? "download" : "upload"] = !0, e(s);
927
+ };
928
+ }
929
+ const xa = typeof XMLHttpRequest < "u", Oa = xa && function(e) {
930
+ return new Promise(function(t, a) {
931
+ let i = e.data;
932
+ const o = C.from(e.headers).normalize();
933
+ let { responseType: n, withXSRFToken: r } = e, c;
934
+ function p() {
935
+ e.cancelToken && e.cancelToken.unsubscribe(c), e.signal && e.signal.removeEventListener("abort", c);
936
+ }
937
+ let d;
938
+ if (l.isFormData(i)) {
939
+ if (S.hasStandardBrowserEnv || S.hasStandardBrowserWebWorkerEnv)
940
+ o.setContentType(!1);
941
+ else if ((d = o.getContentType()) !== !1) {
942
+ const [u, ...y] = d ? d.split(";").map((k) => k.trim()).filter(Boolean) : [];
943
+ o.setContentType([u || "multipart/form-data", ...y].join("; "));
944
+ }
945
+ }
946
+ let s = new XMLHttpRequest();
947
+ if (e.auth) {
948
+ const u = e.auth.username || "", y = e.auth.password ? unescape(encodeURIComponent(e.auth.password)) : "";
949
+ o.set("Authorization", "Basic " + btoa(u + ":" + y));
950
+ }
951
+ const m = Je(e.baseURL, e.url);
952
+ s.open(e.method.toUpperCase(), $e(m, e.params, e.paramsSerializer), !0), s.timeout = e.timeout;
953
+ function h() {
954
+ if (!s)
955
+ return;
956
+ const u = C.from(
957
+ "getAllResponseHeaders" in s && s.getAllResponseHeaders()
958
+ ), y = {
959
+ data: !n || n === "text" || n === "json" ? s.responseText : s.response,
960
+ status: s.status,
961
+ statusText: s.statusText,
962
+ headers: u,
963
+ config: e,
964
+ request: s
965
+ };
966
+ _a(function(k) {
967
+ t(k), p();
968
+ }, function(k) {
969
+ a(k), p();
970
+ }, y), s = null;
971
+ }
972
+ if ("onloadend" in s ? s.onloadend = h : s.onreadystatechange = function() {
973
+ !s || s.readyState !== 4 || s.status === 0 && !(s.responseURL && s.responseURL.indexOf("file:") === 0) || setTimeout(h);
974
+ }, s.onabort = function() {
975
+ s && (a(new f("Request aborted", f.ECONNABORTED, e, s)), s = null);
976
+ }, s.onerror = function() {
977
+ a(new f("Network Error", f.ERR_NETWORK, e, s)), s = null;
978
+ }, s.ontimeout = function() {
979
+ let u = e.timeout ? "timeout of " + e.timeout + "ms exceeded" : "timeout exceeded";
980
+ const y = e.transitional || ze;
981
+ e.timeoutErrorMessage && (u = e.timeoutErrorMessage), a(new f(
982
+ u,
983
+ y.clarifyTimeoutError ? f.ETIMEDOUT : f.ECONNABORTED,
984
+ e,
985
+ s
986
+ )), s = null;
987
+ }, S.hasStandardBrowserEnv && (r && l.isFunction(r) && (r = r(e)), r || r !== !1 && wa(m))) {
988
+ const u = e.xsrfHeaderName && e.xsrfCookieName && ba.read(e.xsrfCookieName);
989
+ u && o.set(e.xsrfHeaderName, u);
990
+ }
991
+ i === void 0 && o.setContentType(null), "setRequestHeader" in s && l.forEach(o.toJSON(), function(u, y) {
992
+ s.setRequestHeader(y, u);
993
+ }), l.isUndefined(e.withCredentials) || (s.withCredentials = !!e.withCredentials), n && n !== "json" && (s.responseType = e.responseType), typeof e.onDownloadProgress == "function" && s.addEventListener("progress", xe(e.onDownloadProgress, !0)), typeof e.onUploadProgress == "function" && s.upload && s.upload.addEventListener("progress", xe(e.onUploadProgress)), (e.cancelToken || e.signal) && (c = (u) => {
994
+ s && (a(!u || u.type ? new L(null, e, s) : u), s.abort(), s = null);
995
+ }, e.cancelToken && e.cancelToken.subscribe(c), e.signal && (e.signal.aborted ? c() : e.signal.addEventListener("abort", c)));
996
+ const g = Aa(m);
997
+ if (g && S.protocols.indexOf(g) === -1) {
998
+ a(new f("Unsupported protocol " + g + ":", f.ERR_BAD_REQUEST, e));
999
+ return;
1000
+ }
1001
+ s.send(i || null);
1002
+ });
1003
+ }, ie = {
1004
+ http: Xt,
1005
+ xhr: Oa
1006
+ };
1007
+ l.forEach(ie, (e, t) => {
1008
+ if (e) {
1009
+ try {
1010
+ Object.defineProperty(e, "name", { value: t });
1011
+ } catch {
1012
+ }
1013
+ Object.defineProperty(e, "adapterName", { value: t });
1014
+ }
1015
+ });
1016
+ const Oe = (e) => `- ${e}`, Ca = (e) => l.isFunction(e) || e === null || e === !1, We = {
1017
+ getAdapter: (e) => {
1018
+ e = l.isArray(e) ? e : [e];
1019
+ const { length: t } = e;
1020
+ let a, i;
1021
+ const o = {};
1022
+ for (let n = 0; n < t; n++) {
1023
+ a = e[n];
1024
+ let r;
1025
+ if (i = a, !Ca(a) && (i = ie[(r = String(a)).toLowerCase()], i === void 0))
1026
+ throw new f(`Unknown adapter '${r}'`);
1027
+ if (i)
1028
+ break;
1029
+ o[r || "#" + n] = i;
1030
+ }
1031
+ if (!i) {
1032
+ const n = Object.entries(o).map(
1033
+ ([c, p]) => `adapter ${c} ` + (p === !1 ? "is not supported by the environment" : "is not available in the build")
1034
+ );
1035
+ let r = t ? n.length > 1 ? `since :
1036
+ ` + n.map(Oe).join(`
1037
+ `) : " " + Oe(n[0]) : "as no adapter specified";
1038
+ throw new f(
1039
+ "There is no suitable adapter to dispatch the request " + r,
1040
+ "ERR_NOT_SUPPORT"
1041
+ );
1042
+ }
1043
+ return i;
1044
+ },
1045
+ adapters: ie
1046
+ };
1047
+ function Z(e) {
1048
+ if (e.cancelToken && e.cancelToken.throwIfRequested(), e.signal && e.signal.aborted)
1049
+ throw new L(null, e);
1050
+ }
1051
+ function Ce(e) {
1052
+ return Z(e), e.headers = C.from(e.headers), e.data = Q.call(
1053
+ e,
1054
+ e.transformRequest
1055
+ ), ["post", "put", "patch"].indexOf(e.method) !== -1 && e.headers.setContentType("application/x-www-form-urlencoded", !1), We.getAdapter(e.adapter || ue.adapter)(e).then(function(t) {
1056
+ return Z(e), t.data = Q.call(
1057
+ e,
1058
+ e.transformResponse,
1059
+ t
1060
+ ), t.headers = C.from(t.headers), t;
1061
+ }, function(t) {
1062
+ return He(t) || (Z(e), t && t.response && (t.response.data = Q.call(
1063
+ e,
1064
+ e.transformResponse,
1065
+ t.response
1066
+ ), t.response.headers = C.from(t.response.headers))), Promise.reject(t);
1067
+ });
1068
+ }
1069
+ const Ee = (e) => e instanceof C ? e.toJSON() : e;
1070
+ function P(e, t) {
1071
+ t = t || {};
1072
+ const a = {};
1073
+ function i(d, s, m) {
1074
+ return l.isPlainObject(d) && l.isPlainObject(s) ? l.merge.call({ caseless: m }, d, s) : l.isPlainObject(s) ? l.merge({}, s) : l.isArray(s) ? s.slice() : s;
1075
+ }
1076
+ function o(d, s, m) {
1077
+ if (l.isUndefined(s)) {
1078
+ if (!l.isUndefined(d))
1079
+ return i(void 0, d, m);
1080
+ } else
1081
+ return i(d, s, m);
1082
+ }
1083
+ function n(d, s) {
1084
+ if (!l.isUndefined(s))
1085
+ return i(void 0, s);
1086
+ }
1087
+ function r(d, s) {
1088
+ if (l.isUndefined(s)) {
1089
+ if (!l.isUndefined(d))
1090
+ return i(void 0, d);
1091
+ } else
1092
+ return i(void 0, s);
1093
+ }
1094
+ function c(d, s, m) {
1095
+ if (m in t)
1096
+ return i(d, s);
1097
+ if (m in e)
1098
+ return i(void 0, d);
1099
+ }
1100
+ const p = {
1101
+ url: n,
1102
+ method: n,
1103
+ data: n,
1104
+ baseURL: r,
1105
+ transformRequest: r,
1106
+ transformResponse: r,
1107
+ paramsSerializer: r,
1108
+ timeout: r,
1109
+ timeoutMessage: r,
1110
+ withCredentials: r,
1111
+ withXSRFToken: r,
1112
+ adapter: r,
1113
+ responseType: r,
1114
+ xsrfCookieName: r,
1115
+ xsrfHeaderName: r,
1116
+ onUploadProgress: r,
1117
+ onDownloadProgress: r,
1118
+ decompress: r,
1119
+ maxContentLength: r,
1120
+ maxBodyLength: r,
1121
+ beforeRedirect: r,
1122
+ transport: r,
1123
+ httpAgent: r,
1124
+ httpsAgent: r,
1125
+ cancelToken: r,
1126
+ socketPath: r,
1127
+ responseEncoding: r,
1128
+ validateStatus: c,
1129
+ headers: (d, s) => o(Ee(d), Ee(s), !0)
1130
+ };
1131
+ return l.forEach(Object.keys(Object.assign({}, e, t)), function(d) {
1132
+ const s = p[d] || o, m = s(e[d], t[d], d);
1133
+ l.isUndefined(m) && s !== c || (a[d] = m);
1134
+ }), a;
1135
+ }
1136
+ const Ke = "1.6.5", de = {};
1137
+ ["object", "boolean", "number", "function", "string", "symbol"].forEach((e, t) => {
1138
+ de[e] = function(a) {
1139
+ return typeof a === e || "a" + (t < 1 ? "n " : " ") + e;
1140
+ };
1141
+ });
1142
+ const Re = {};
1143
+ de.transitional = function(e, t, a) {
1144
+ function i(o, n) {
1145
+ return "[Axios v" + Ke + "] Transitional option '" + o + "'" + n + (a ? ". " + a : "");
1146
+ }
1147
+ return (o, n, r) => {
1148
+ if (e === !1)
1149
+ throw new f(
1150
+ i(n, " has been removed" + (t ? " in " + t : "")),
1151
+ f.ERR_DEPRECATED
1152
+ );
1153
+ return t && !Re[n] && (Re[n] = !0, console.warn(
1154
+ i(
1155
+ n,
1156
+ " has been deprecated since v" + t + " and will be removed in the near future"
1157
+ )
1158
+ )), e ? e(o, n, r) : !0;
1159
+ };
1160
+ };
1161
+ function Ea(e, t, a) {
1162
+ if (typeof e != "object")
1163
+ throw new f("options must be an object", f.ERR_BAD_OPTION_VALUE);
1164
+ const i = Object.keys(e);
1165
+ let o = i.length;
1166
+ for (; o-- > 0; ) {
1167
+ const n = i[o], r = t[n];
1168
+ if (r) {
1169
+ const c = e[n], p = c === void 0 || r(c, n, e);
1170
+ if (p !== !0)
1171
+ throw new f("option " + n + " must be " + p, f.ERR_BAD_OPTION_VALUE);
1172
+ continue;
1173
+ }
1174
+ if (a !== !0)
1175
+ throw new f("Unknown option " + n, f.ERR_BAD_OPTION);
1176
+ }
1177
+ }
1178
+ const oe = {
1179
+ assertOptions: Ea,
1180
+ validators: de
1181
+ }, E = oe.validators;
1182
+ class $ {
1183
+ constructor(t) {
1184
+ this.defaults = t, this.interceptors = {
1185
+ request: new Ae(),
1186
+ response: new Ae()
1187
+ };
1188
+ }
1189
+ /**
1190
+ * Dispatch a request
1191
+ *
1192
+ * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
1193
+ * @param {?Object} config
1194
+ *
1195
+ * @returns {Promise} The Promise to be fulfilled
1196
+ */
1197
+ request(t, a) {
1198
+ typeof t == "string" ? (a = a || {}, a.url = t) : a = t || {}, a = P(this.defaults, a);
1199
+ const { transitional: i, paramsSerializer: o, headers: n } = a;
1200
+ i !== void 0 && oe.assertOptions(i, {
1201
+ silentJSONParsing: E.transitional(E.boolean),
1202
+ forcedJSONParsing: E.transitional(E.boolean),
1203
+ clarifyTimeoutError: E.transitional(E.boolean)
1204
+ }, !1), o != null && (l.isFunction(o) ? a.paramsSerializer = {
1205
+ serialize: o
1206
+ } : oe.assertOptions(o, {
1207
+ encode: E.function,
1208
+ serialize: E.function
1209
+ }, !0)), a.method = (a.method || this.defaults.method || "get").toLowerCase();
1210
+ let r = n && l.merge(
1211
+ n.common,
1212
+ n[a.method]
1213
+ );
1214
+ n && l.forEach(
1215
+ ["delete", "get", "head", "post", "put", "patch", "common"],
1216
+ (u) => {
1217
+ delete n[u];
1218
+ }
1219
+ ), a.headers = C.concat(r, n);
1220
+ const c = [];
1221
+ let p = !0;
1222
+ this.interceptors.request.forEach(function(u) {
1223
+ typeof u.runWhen == "function" && u.runWhen(a) === !1 || (p = p && u.synchronous, c.unshift(u.fulfilled, u.rejected));
1224
+ });
1225
+ const d = [];
1226
+ this.interceptors.response.forEach(function(u) {
1227
+ d.push(u.fulfilled, u.rejected);
1228
+ });
1229
+ let s, m = 0, h;
1230
+ if (!p) {
1231
+ const u = [Ce.bind(this), void 0];
1232
+ for (u.unshift.apply(u, c), u.push.apply(u, d), h = u.length, s = Promise.resolve(a); m < h; )
1233
+ s = s.then(u[m++], u[m++]);
1234
+ return s;
1235
+ }
1236
+ h = c.length;
1237
+ let g = a;
1238
+ for (m = 0; m < h; ) {
1239
+ const u = c[m++], y = c[m++];
1240
+ try {
1241
+ g = u(g);
1242
+ } catch (k) {
1243
+ y.call(this, k);
1244
+ break;
1245
+ }
1246
+ }
1247
+ try {
1248
+ s = Ce.call(this, g);
1249
+ } catch (u) {
1250
+ return Promise.reject(u);
1251
+ }
1252
+ for (m = 0, h = d.length; m < h; )
1253
+ s = s.then(d[m++], d[m++]);
1254
+ return s;
1255
+ }
1256
+ getUri(t) {
1257
+ t = P(this.defaults, t);
1258
+ const a = Je(t.baseURL, t.url);
1259
+ return $e(a, t.params, t.paramsSerializer);
1260
+ }
1261
+ }
1262
+ l.forEach(["delete", "get", "head", "options"], function(e) {
1263
+ $.prototype[e] = function(t, a) {
1264
+ return this.request(P(a || {}, {
1265
+ method: e,
1266
+ url: t,
1267
+ data: (a || {}).data
1268
+ }));
1269
+ };
1270
+ });
1271
+ l.forEach(["post", "put", "patch"], function(e) {
1272
+ function t(a) {
1273
+ return function(i, o, n) {
1274
+ return this.request(P(n || {}, {
1275
+ method: e,
1276
+ headers: a ? {
1277
+ "Content-Type": "multipart/form-data"
1278
+ } : {},
1279
+ url: i,
1280
+ data: o
1281
+ }));
1282
+ };
1283
+ }
1284
+ $.prototype[e] = t(), $.prototype[e + "Form"] = t(!0);
1285
+ });
1286
+ const M = $;
1287
+ class pe {
1288
+ constructor(t) {
1289
+ if (typeof t != "function")
1290
+ throw new TypeError("executor must be a function.");
1291
+ let a;
1292
+ this.promise = new Promise(function(o) {
1293
+ a = o;
1294
+ });
1295
+ const i = this;
1296
+ this.promise.then((o) => {
1297
+ if (!i._listeners)
1298
+ return;
1299
+ let n = i._listeners.length;
1300
+ for (; n-- > 0; )
1301
+ i._listeners[n](o);
1302
+ i._listeners = null;
1303
+ }), this.promise.then = (o) => {
1304
+ let n;
1305
+ const r = new Promise((c) => {
1306
+ i.subscribe(c), n = c;
1307
+ }).then(o);
1308
+ return r.cancel = function() {
1309
+ i.unsubscribe(n);
1310
+ }, r;
1311
+ }, t(function(o, n, r) {
1312
+ i.reason || (i.reason = new L(o, n, r), a(i.reason));
1313
+ });
1314
+ }
1315
+ /**
1316
+ * Throws a `CanceledError` if cancellation has been requested.
1317
+ */
1318
+ throwIfRequested() {
1319
+ if (this.reason)
1320
+ throw this.reason;
1321
+ }
1322
+ /**
1323
+ * Subscribe to the cancel signal
1324
+ */
1325
+ subscribe(t) {
1326
+ if (this.reason) {
1327
+ t(this.reason);
1328
+ return;
1329
+ }
1330
+ this._listeners ? this._listeners.push(t) : this._listeners = [t];
1331
+ }
1332
+ /**
1333
+ * Unsubscribe from the cancel signal
1334
+ */
1335
+ unsubscribe(t) {
1336
+ if (!this._listeners)
1337
+ return;
1338
+ const a = this._listeners.indexOf(t);
1339
+ a !== -1 && this._listeners.splice(a, 1);
1340
+ }
1341
+ /**
1342
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
1343
+ * cancels the `CancelToken`.
1344
+ */
1345
+ static source() {
1346
+ let t;
1347
+ return {
1348
+ token: new pe(function(a) {
1349
+ t = a;
1350
+ }),
1351
+ cancel: t
1352
+ };
1353
+ }
1354
+ }
1355
+ const Ra = pe;
1356
+ function Pa(e) {
1357
+ return function(t) {
1358
+ return e.apply(null, t);
1359
+ };
1360
+ }
1361
+ function Ta(e) {
1362
+ return l.isObject(e) && e.isAxiosError === !0;
1363
+ }
1364
+ const ne = {
1365
+ Continue: 100,
1366
+ SwitchingProtocols: 101,
1367
+ Processing: 102,
1368
+ EarlyHints: 103,
1369
+ Ok: 200,
1370
+ Created: 201,
1371
+ Accepted: 202,
1372
+ NonAuthoritativeInformation: 203,
1373
+ NoContent: 204,
1374
+ ResetContent: 205,
1375
+ PartialContent: 206,
1376
+ MultiStatus: 207,
1377
+ AlreadyReported: 208,
1378
+ ImUsed: 226,
1379
+ MultipleChoices: 300,
1380
+ MovedPermanently: 301,
1381
+ Found: 302,
1382
+ SeeOther: 303,
1383
+ NotModified: 304,
1384
+ UseProxy: 305,
1385
+ Unused: 306,
1386
+ TemporaryRedirect: 307,
1387
+ PermanentRedirect: 308,
1388
+ BadRequest: 400,
1389
+ Unauthorized: 401,
1390
+ PaymentRequired: 402,
1391
+ Forbidden: 403,
1392
+ NotFound: 404,
1393
+ MethodNotAllowed: 405,
1394
+ NotAcceptable: 406,
1395
+ ProxyAuthenticationRequired: 407,
1396
+ RequestTimeout: 408,
1397
+ Conflict: 409,
1398
+ Gone: 410,
1399
+ LengthRequired: 411,
1400
+ PreconditionFailed: 412,
1401
+ PayloadTooLarge: 413,
1402
+ UriTooLong: 414,
1403
+ UnsupportedMediaType: 415,
1404
+ RangeNotSatisfiable: 416,
1405
+ ExpectationFailed: 417,
1406
+ ImATeapot: 418,
1407
+ MisdirectedRequest: 421,
1408
+ UnprocessableEntity: 422,
1409
+ Locked: 423,
1410
+ FailedDependency: 424,
1411
+ TooEarly: 425,
1412
+ UpgradeRequired: 426,
1413
+ PreconditionRequired: 428,
1414
+ TooManyRequests: 429,
1415
+ RequestHeaderFieldsTooLarge: 431,
1416
+ UnavailableForLegalReasons: 451,
1417
+ InternalServerError: 500,
1418
+ NotImplemented: 501,
1419
+ BadGateway: 502,
1420
+ ServiceUnavailable: 503,
1421
+ GatewayTimeout: 504,
1422
+ HttpVersionNotSupported: 505,
1423
+ VariantAlsoNegotiates: 506,
1424
+ InsufficientStorage: 507,
1425
+ LoopDetected: 508,
1426
+ NotExtended: 510,
1427
+ NetworkAuthenticationRequired: 511
1428
+ };
1429
+ Object.entries(ne).forEach(([e, t]) => {
1430
+ ne[t] = e;
1431
+ });
1432
+ const qa = ne;
1433
+ function Ye(e) {
1434
+ const t = new M(e), a = Pe(M.prototype.request, t);
1435
+ return l.extend(a, M.prototype, t, { allOwnKeys: !0 }), l.extend(a, t, null, { allOwnKeys: !0 }), a.create = function(i) {
1436
+ return Ye(P(e, i));
1437
+ }, a;
1438
+ }
1439
+ const b = Ye(ue);
1440
+ b.Axios = M;
1441
+ b.CanceledError = L;
1442
+ b.CancelToken = Ra;
1443
+ b.isCancel = He;
1444
+ b.VERSION = Ke;
1445
+ b.toFormData = H;
1446
+ b.AxiosError = f;
1447
+ b.Cancel = b.CanceledError;
1448
+ b.all = function(e) {
1449
+ return Promise.all(e);
1450
+ };
1451
+ b.spread = Pa;
1452
+ b.isAxiosError = Ta;
1453
+ b.mergeConfig = P;
1454
+ b.AxiosHeaders = C;
1455
+ b.formToJSON = (e) => Ge(l.isHTMLForm(e) ? new FormData(e) : e);
1456
+ b.getAdapter = We.getAdapter;
1457
+ b.HttpStatusCode = qa;
1458
+ b.default = b;
1459
+ class Na {
1460
+ constructor({
1461
+ context: t,
1462
+ client: a,
1463
+ chatboxRef: i,
1464
+ onClose: o
1465
+ }) {
1466
+ this.logs = [], this.chatboxRef = null, this.id = ht(), this.context = t, this.client = a, this.chatboxRef = i, this.onClose = o, this.log({ value: t.input });
1467
+ }
1468
+ log({ message: t, query: a, value: i }) {
1469
+ this.logs.push({ timestamp: (/* @__PURE__ */ new Date()).toISOString(), message: t, query: a, value: i });
1470
+ }
1471
+ setChatboxRef(t) {
1472
+ this.chatboxRef = t;
1473
+ }
1474
+ async query({ action: t, path: a, body: i, params: o }) {
1475
+ var n, r;
1476
+ switch (t) {
1477
+ case "get":
1478
+ case "delete":
1479
+ return (n = await this.client[t](a, { params: o })) == null ? void 0 : n.data;
1480
+ case "post":
1481
+ case "put":
1482
+ return (r = await this.client[t](a, i, { params: o })) == null ? void 0 : r.data;
1483
+ }
1484
+ }
1485
+ async integrateChatbox(t, a, i = !1) {
1486
+ let o = {
1487
+ message: "",
1488
+ data: null
1489
+ };
1490
+ const n = async () => (o = await a(), o);
1491
+ return i && this.chatboxRef ? await this.chatboxRef.ask(t, n) : await n(), o;
1492
+ }
1493
+ async getItemIngredients(t, a = !1) {
1494
+ const i = {
1495
+ action: "get",
1496
+ path: "items/ingredients",
1497
+ params: { item_name: t.name }
1498
+ }, o = `Suggest ingredients for ${t.name}`;
1499
+ this.log({ message: o, query: i });
1500
+ const n = await this.integrateChatbox(
1501
+ o,
1502
+ async () => ({
1503
+ message: "",
1504
+ data: {
1505
+ value: await this.query(i),
1506
+ action: "selection"
1507
+ }
1508
+ }),
1509
+ a
1510
+ ) || [];
1511
+ return this.log({ message: n == null ? void 0 : n.message, value: n == null ? void 0 : n.data }), n;
1512
+ }
1513
+ async getItemDescription(t, a = !1) {
1514
+ const i = {
1515
+ action: "get",
1516
+ path: "items/description",
1517
+ params: { item_name: t.name }
1518
+ }, o = `Suggest description for ${t.name}`;
1519
+ this.log({ message: o, query: i });
1520
+ const n = await this.integrateChatbox(
1521
+ o,
1522
+ async () => {
1523
+ const r = await this.query(i);
1524
+ return {
1525
+ message: r || "",
1526
+ data: {
1527
+ value: r
1528
+ }
1529
+ };
1530
+ },
1531
+ a
1532
+ );
1533
+ return this.log({ message: n == null ? void 0 : n.message, value: n == null ? void 0 : n.data }), n;
1534
+ }
1535
+ async getItemPricing(t, a = !1) {
1536
+ const i = {
1537
+ action: "get",
1538
+ path: "items/pricing",
1539
+ params: {
1540
+ item_name: t.name,
1541
+ lat: t.lat || 4.210484,
1542
+ lon: t.lon || 101.975769
1543
+ }
1544
+ }, o = `Suggest pricing for ${t.name}`;
1545
+ this.log({ message: o, query: i });
1546
+ const n = await this.integrateChatbox(
1547
+ o,
1548
+ async () => {
1549
+ const r = await this.query(i);
1550
+ let c = (r.match(/\d+(\.\d+)?/g) || []).map((p) => parseFloat(p));
1551
+ return c = [...new Set(c)], c.sort((p, d) => p - d), {
1552
+ message: r,
1553
+ data: {
1554
+ value: c,
1555
+ action: "selection"
1556
+ }
1557
+ };
1558
+ },
1559
+ a
1560
+ );
1561
+ return this.log({ message: n == null ? void 0 : n.message, value: n == null ? void 0 : n.data }), n;
1562
+ }
1563
+ async autocompleteIngredient(t, a = !1) {
1564
+ const i = {
1565
+ action: "get",
1566
+ path: "ingredients/autocomplete",
1567
+ params: { input: t.name }
1568
+ }, o = `Autocomplete ingredients for ${t.name}`;
1569
+ this.log({ message: o, query: i });
1570
+ const n = await this.integrateChatbox(
1571
+ o,
1572
+ async () => {
1573
+ const r = await this.query(i);
1574
+ return {
1575
+ message: r || "",
1576
+ data: { value: r || "" }
1577
+ };
1578
+ },
1579
+ a
1580
+ );
1581
+ return this.log({ message: n == null ? void 0 : n.message, value: n == null ? void 0 : n.data }), n;
1582
+ }
1583
+ close(t) {
1584
+ var a;
1585
+ this.log({ value: t }), (a = this.onClose) == null || a.call(this, this.id);
1586
+ }
1587
+ }
1588
+ class Ua {
1589
+ constructor(t, a) {
1590
+ this.sessions = [], this.context = t, this.chatboxRef = a, this.client = b.create({ baseURL: t.url }), this.setToken(t.token);
1591
+ }
1592
+ setToken(t) {
1593
+ this.client.defaults.headers.common.Authorization = `Bearer ${t}`;
1594
+ }
1595
+ setChatboxRef(t) {
1596
+ this.chatboxRef = t;
1597
+ }
1598
+ startSession(t, a) {
1599
+ const i = new Na({
1600
+ context: t,
1601
+ client: this.client,
1602
+ chatboxRef: this.chatboxRef || a || null,
1603
+ onClose: (o) => this.closeSession(o)
1604
+ });
1605
+ return this.sessions.push(i), i;
1606
+ }
1607
+ closeSession(t) {
1608
+ this.sessions = this.sessions.filter((a) => a.id !== t);
1609
+ }
1610
+ }
1611
+ function si(e) {
1612
+ const t = T(new Ua(e)), a = ee(() => t.value.sessions || []), i = ee(() => {
1613
+ var c;
1614
+ return (c = t.value.sessions) == null ? void 0 : c[t.value.sessions.length - 1];
1615
+ });
1616
+ function o(c) {
1617
+ t.value.setChatboxRef(c);
1618
+ }
1619
+ function n(c) {
1620
+ var p;
1621
+ return (p = t.value.chatboxRef) == null || p.clear(), t.value.startSession(c);
1622
+ }
1623
+ function r(c) {
1624
+ t.value.setToken(c);
1625
+ }
1626
+ return {
1627
+ linkChatbox: o,
1628
+ startSession: n,
1629
+ closeSession: (c) => {
1630
+ var p;
1631
+ return (p = i == null ? void 0 : i.value) == null ? void 0 : p.close(c);
1632
+ },
1633
+ setToken: r,
1634
+ getItemDescription: (...c) => {
1635
+ var p;
1636
+ return (p = i.value) == null ? void 0 : p.getItemDescription(...c);
1637
+ },
1638
+ getItemPricing: (...c) => i.value.getItemPricing(...c),
1639
+ getItemIngredients: (...c) => i.value.getItemIngredients(...c),
1640
+ autocompleteIngredient: (...c) => i.value.autocompleteIngredient(...c),
1641
+ session: i,
1642
+ sessions: a
1643
+ };
1644
+ }
1645
+ const Xe = (e) => (et("data-v-97b727dd"), e = e(), tt(), e), Ia = {
1646
+ class: "chatbox",
1647
+ id: "chatbox"
1648
+ }, Da = { class: "user-name" }, La = {
1649
+ key: 0,
1650
+ class: "message-bubble"
1651
+ }, ja = /* @__PURE__ */ Xe(() => /* @__PURE__ */ R("div", { class: "spinner" }, [
1652
+ /* @__PURE__ */ R("div", { class: "bounce1" }),
1653
+ /* @__PURE__ */ R("div", { class: "bounce2" }),
1654
+ /* @__PURE__ */ R("div", { class: "bounce3" })
1655
+ ], -1)), Ba = [
1656
+ ja
1657
+ ], Fa = {
1658
+ key: 1,
1659
+ class: "message-bubble message"
1660
+ }, Ma = {
1661
+ key: 2,
1662
+ class: "selection-container"
1663
+ }, $a = /* @__PURE__ */ Xe(() => /* @__PURE__ */ R("div", { class: "message select-label" }, "Suggestion:", -1)), za = ["id", "onClick"], Va = /* @__PURE__ */ re({
1664
+ __name: "Chatbox",
1665
+ emits: ["select"],
1666
+ setup(e, { expose: t, emit: a }) {
1667
+ const i = T([]), o = a;
1668
+ async function n(d, s) {
1669
+ i.value.push({
1670
+ isUser: !0,
1671
+ message: d,
1672
+ data: null
1673
+ }), c();
1674
+ let m = {
1675
+ isUser: !1,
1676
+ message: "waiting response...",
1677
+ data: null,
1678
+ isLoading: !0
1679
+ };
1680
+ const h = i.value.push(m) - 1;
1681
+ console.log(h), c();
1682
+ let g;
1683
+ try {
1684
+ g = await s(), i.value[h].data = g.data, i.value[h].message = g.message;
1685
+ } catch (u) {
1686
+ console.error(u), i.value[h].message = "failed to response";
1687
+ } finally {
1688
+ i.value[h].isLoading = !1;
1689
+ }
1690
+ return i.value = [...i.value], c(), g;
1691
+ }
1692
+ function r(d) {
1693
+ o("select", d);
1694
+ }
1695
+ function c() {
1696
+ setTimeout(() => {
1697
+ const d = document.getElementById("chatbox");
1698
+ d.scrollTop = d.scrollHeight;
1699
+ }, 100);
1700
+ }
1701
+ function p() {
1702
+ i.value = [];
1703
+ }
1704
+ return t({
1705
+ ask: n,
1706
+ clear: p
1707
+ }), (d, s) => (A(), O("div", Ia, [
1708
+ (A(!0), O(me, null, ge(i.value, (m, h) => {
1709
+ var g;
1710
+ return A(), O("div", {
1711
+ key: h,
1712
+ class: Ze(m.isUser ? "user-message" : "remy-message")
1713
+ }, [
1714
+ R("div", Da, K(m.isUser ? "" : "Remy"), 1),
1715
+ m.isLoading ? (A(), O("div", La, Ba)) : m.message ? (A(), O("div", Fa, K(m.message), 1)) : fe("", !0),
1716
+ ((g = m.data) == null ? void 0 : g.action) === "selection" && m.data.value.length > 0 ? (A(), O("div", Ma, [
1717
+ $a,
1718
+ (A(!0), O(me, null, ge(m.data.value, (u, y) => (A(), O("div", {
1719
+ class: "message-bubble message selection",
1720
+ key: y,
1721
+ id: `remy-chatbox-selection-${y}`,
1722
+ onClick: () => r(u)
1723
+ }, K(u), 9, za))), 128))
1724
+ ])) : fe("", !0)
1725
+ ], 2);
1726
+ }), 128))
1727
+ ]));
1728
+ }
1729
+ }), Ga = (e, t) => {
1730
+ const a = e.__vccOpts || e;
1731
+ for (const [i, o] of t)
1732
+ a[i] = o;
1733
+ return a;
1734
+ }, Ha = /* @__PURE__ */ Ga(Va, [["__scopeId", "data-v-97b727dd"]]), Ja = {
1735
+ install(e) {
1736
+ e.component("Chatbox", Ha);
1737
+ }
1738
+ };
1739
+ function Wa(e, t) {
1740
+ const a = T({ top: 0, bottom: 0, left: 0, right: 0 });
1741
+ function i() {
1742
+ if (e.value) {
1743
+ const o = e.value.getBoundingClientRect();
1744
+ a.value = {
1745
+ top: o.top,
1746
+ bottom: o.bottom,
1747
+ left: o.left,
1748
+ right: o.right
1749
+ };
1750
+ }
1751
+ }
1752
+ return he(t, async () => {
1753
+ await ye(), i();
1754
+ }), he(e, async (o) => {
1755
+ o && (await ye(), i());
1756
+ }), at(() => {
1757
+ window.addEventListener("resize", i);
1758
+ }), it(() => {
1759
+ window.removeEventListener("resize", i);
1760
+ }), a;
1761
+ }
1762
+ const Ka = /* @__PURE__ */ re({
1763
+ __name: "FullWrapper",
1764
+ setup(e) {
1765
+ const t = dt(), a = T(null), i = Wa(a), o = ee(() => {
1766
+ var c;
1767
+ const r = t.isAtMost("sm") ? 56 : 0;
1768
+ return {
1769
+ height: `calc(100dvh - ${((c = i.value) == null ? void 0 : c.top) + 24 + r}px)`
1770
+ };
1771
+ });
1772
+ return (n, r) => (A(), O("div", {
1773
+ ref_key: "wrapper",
1774
+ ref: a,
1775
+ style: ot(o.value)
1776
+ }, [
1777
+ nt(n.$slots, "default")
1778
+ ], 4));
1779
+ }
1780
+ }), Ya = { class: "flex justify-center items-center h-full w-full" }, Xa = /* @__PURE__ */ re({
1781
+ __name: "PageLoading",
1782
+ setup(e) {
1783
+ return (t, a) => {
1784
+ const i = rt("FmCircularProgress");
1785
+ return A(), lt(Ka, null, {
1786
+ default: st(() => [
1787
+ R("div", Ya, [
1788
+ ct(i, { size: "xl" })
1789
+ ])
1790
+ ]),
1791
+ _: 1
1792
+ });
1793
+ };
1794
+ }
1795
+ }), _ = (e) => ut({
1796
+ loader: e,
1797
+ loadingComponent: Xa
1798
+ });
1799
+ function ci() {
1800
+ const e = T({}), t = (a) => {
1801
+ var i;
1802
+ ((i = a.data) == null ? void 0 : i.type) === "publish-notifier" && (e.value = a.data.data);
1803
+ };
1804
+ return window.addEventListener("message", t), { navigatorStatus: e, stop: () => window.removeEventListener("message", t) };
1805
+ }
1806
+ const Qa = /* @__PURE__ */ JSON.parse(`{"title":"Menu","common":{"actions":{"update":"Update","cancel":"Cancel","add":"Add","search":"Search","delete":"Delete","remove":"Remove","deselect_all":"Deselect all","move":"Move","edit":"Edit","download":"Download","save":"Save","confirm":"Confirm","yes":"Yes","no":"No","link":"Link","migrate":"Migrate","add_new_variant":"Add new variant","add_group":"Add group","apply_product":"Apply product","link_product":"Link product","deselect":"Deselect"},"labels":{"name":"Name","detail":"Detail","items_linked":"{count} items linked","search_placeholder":"Search {type}","symbol":"Symbol","products_linked":"{count} product(s) linked","product_linked_singular":"{count} product linked","product_linked_plural":"{count} products linked","enter_name":"Enter name here","product":"Product","selected_items":"{count} items selected","all":"All","category":"Category: {name}","group_name":"Group name","min_select":"Min. select","max_select":"Max. select","group_type":"Group type","stackable":"Stackable","stackable_sublabel":"Customer can choose same option more than once","configuration":"Configuration","variant":"Variant","product_title":"Product title","price":"Price ({symbol})","order_from":"Order from","inventory":"Inventory","search_groups":"Search groups","search_variants":"Search variants","product_count":"{count} product(s) applied","search_product":"Search product","product_image":"Product image","optional":"(optional)","products_selected":"{count} product(s) selected","items_selected":"{count} item(s) selected","catalog":"Catalog","scheduler":"Scheduler","all_time":"All time","main":"Main","unknown":"Unknown","all_day":"All Day","scheduler_title":"Scheduler: {label}","link_product_title":"Link product","products_count":"{count} product(s) selected","search":"Search","status":"Status"},"dialog":{"remove_confirmation":"Are you sure to remove {name}?","change_type":{"title":"Change addon group type","message":"Change addon group type will clear all products. Are you sure to proceed?"},"remove":{"catalog":{"title":"Remove catalog","message":"Are you sure to remove {name}?"},"category":{"title":"Remove category","message":"Are you sure to remove {name}?"},"product":{"title":"Remove products","message":"Are you sure to remove {name}?","success":"Product successfully removed."},"recipe":{"title":"Remove recipe","message":"Do you want to remove recipe {name}?"},"ingredient":{"title":"Remove ingredient","message":"Do you want to remove ingredient {name}?"},"takeaway":{"title":"Remove takeaway","message":"Do you want to remove {name}?"},"unit":{"title":"Remove unit","message":"Do you want to remove unit {name}?"},"variant":{"title":"Remove variant","message":"Do you want to remove {name}?"}}},"validation":{"required":"{field} is required","min_max":"Min. select must be less than or equal to Max. select","product_title_required":"Product title is required","min_value":"Min value is {value}","max_value":"Max value is {value}","field_required":"The {field} is required","required_field":"Required","invalid_amount":"Invalid amount","max_default_items":"Number of default item(s) can't be larger than {max}","default_items_tip":"{count} / {max} default product(s) selected, default products are auto selected when ordering."},"file":{"accepts":"Accepts .jpg, .jpeg, .png, .gif"},"empty":{"no_group":{"title":"No group found","subtitle":"Seems like you don't have groups created"},"no_variant":{"title":"No variant found","subtitle":"Seems like you don't have variants created"}}},"category":{"title":"Category","add":"Add category","detail":"Category detail","name":"Category name","empty":{"title":"Group your products into category","subtitle":"Use category to organize your products.","no_group":{"title":"No group found","subtitle":"Seems like you don't have groups created"}},"columns":{"title":"Category title","products":"Apply products"},"dialog":{"remove":{"title":"Remove category","error":"Can't delete this category"},"add":{"title":"Add Category","name":{"label":"Category name","placeholder":"Enter category name here","required":"Category name is required"}}},"products":{"title":"Product","add":"Add product","linked_count":"{count} product(s) linked","search":"Search","columns":{"name":"Product name","code":"Product code"}},"selector":{"all":"All","title":"Category: {label}"},"manager":{"dialog":{"add":{"title":"Add Category","action":"Create"},"update":{"title":"Update Category","action":"Update"}}}},"variant":{"title":"Variant","add":"Add variant","columns":{"name":"Variant name","options":"Option values","applied_products":"Applied products"},"mobile":{"value":"Value: {values}"},"empty":{"title":"Add variant","subtitle":"Variant configuration provides merchants with the capability to offer customizable product options.","no_variant":{"title":"No variant found","subtitle":"Seems like you don't have variants created"}},"select":{"title":"Select variant","subtitle":"Select variant to apply changes"},"form":{"title":{"add":"Add variant","edit":"Edit variant"},"detail":"Variant detail","name":{"label":"Variant name","placeholder":"Cup sizes","helper":"Name this set of options. For example, you could call this option set Cup sizes or Sugar levels.","required":"Variant name is required"},"options":{"title":"Option values","placeholder":"Options","min_required":"Required at least 1 option","name_required":"Option name is required"},"applied_product":"Applied product"}},"unit":{"title":"Unit","add":"Add unit","update":"Update unit","precision":"Precision","precision_placeholder":"Enter a number","empty":{"title":"Add your first unit","subtitle":"Units are used to specify how you want to measure your products."},"columns":{"name":"Name","symbol":"Symbol"},"measurement":{"add":"Add measurement","title":"Measurement {number}","name":"Name","symbol":"Symbol","conversion":"Conversion","preview":"1 {name} equal to {value} {unit}","preview_label":"Preview"}},"print_dept":{"title":"Print Route","add":"Add print route","update":"Edit print route","columns":{"name":"Print route name","products":"Applied product"}},"sku":{"title":"Ingredient","add":"Add ingredient","update":"Update ingredient","columns":{"code":"Code","name":"Name","unit":"Unit"},"empty":{"no_unit":"No unit found","subtitle":"Add a unit to start adding your ingredient."},"validation":{"code_used":"Code used by other ingredient"},"errors":{"select_recipe_ingredient":"Select recipe or ingredient to convert"},"convertible":{"label":"Convertible","sublabel":"Convertible from other recipe or ingredients","convert_to":"Recipes and ingredients convert to"}},"recipe":{"title":"Recipe","add":"Add recipe","update":"Update recipe","columns":{"name":"Name"},"validation":{"bind_required":"Bind at least one recipe or ingredient"},"table":{"columns":{"name":"Name","ingredients":"Ingredients"},"search":{"placeholder":"Search recipes"}},"empty":{"title":"Add your first recipe","subtitle":"Create recipes to standardize your food preparation process","action":"Add recipe"},"actions":{"add":"Add recipe"}},"serving_sequence":{"title":"Serving sequence","add":"Add sequence","update":"Update sequence","columns":{"name":"Sequence name"},"empty":{"title":"No serving sequence","subtitle":"Set up the order in which your dishes are served, ensuring a smooth and organized dining experience."}},"group":{"title":"Group","add":"Add Group","update":"Update group","option":{"title":"Product","link_products":"Link products","add_option":"Add option","product_title":"Title","product_title_required":"Product title is required","price":"Price ({symbol})","inventory":"Inventory","variant":"Variant","code":"Code","is_default":"Default","should_link_at_least_one_variant":"Should link at least one variant of {name}"},"types":{"normal":"Normal","product":"Product","dynamic":"Dynamic"},"select":{"title":"Select group","subtitle":"Select group to apply changes"},"empty":{"title":"No group found","subtitle":"Seems like you don't have addon groups created."},"search":{"placeholder":"Search groups"},"type":{"title":"Group: {type} type","all":"All type","normal":"Normal type","product":"Product type","dynamic":"Dynamic type"},"list":{"items_linked":"{count} items linked","products_linked":"{count} product(s) linked","columns":{"name":"Group name","products":"Products","type":"Type","applied_products":"Applied products"},"types":{"normal":"Normal","product":"Product","dynamic":"Dynamic"},"variants":"{ count } variant","more_items":"& { count } more"},"actions":{"add":"Add group","duplicate":{"title":"Duplicate group","message":"Are you sure to duplicate {name}?"},"apply_product":"Apply product","duplicate_action":"Duplicate"},"dialogs":{"delete":{"title":"Delete group","message":"Do you want to delete {name}?"},"update":{"title":"Update group"}}},"migrate":{"title":"Migrate to new version","description":"Do you want to migrate to new version? Once migrate it will unable to revert to the older version.","message":"Migrate your menu to new version to enjoy more features. Content of new menu will remain the same as current.","notification":{"title":"New version of menu is out now!","description":"Migrate your current menu version to the latest to enjoy more features such as product sequential dispatch, serving sequence, scheduler and more! Your content and current setting will be preserved."},"errors":{"no_restaurant":"Required at least one restaurant to migrate","pos_version":"Upgrade POS to V{version} to use new menu: {restaurants}"}},"scheduler":{"title":"Scheduler","select":{"title":"Select scheduler","all_time":"All time"},"empty":{"title":"No scheduler found","subtitle":"Add a scheduler to schedule time for your product to display.","action":"Add scheduler"},"table":{"columns":{"name":"Scheduler name","repeat":"Repeat","period":"Period","products":"Apply product"},"products_linked":"{count} item linked","search":{"placeholder":"Search schedulers"}},"repeat":{"daily":"Daily","weekdays":"Weekdays","weekends":"Weekends","except":"Daily except {day}","range":"{start} to {end}"},"days":{"monday":"Monday","tuesday":"Tuesday","wednesday":"Wednesday","thursday":"Thursday","friday":"Friday","saturday":"Saturday","sunday":"Sunday"},"dialog":{"add":{"title":"Add scheduler","action":"Add"},"update":{"title":"Update scheduler","action":"Update"},"sections":{"detail":{"title":"Scheduler detail","name":{"label":"Scheduler name","placeholder":"Placeholder","required":"Required"}},"availability":{"title":"Availability","daily":"Daily","weekly":"Weekly"},"period":{"title":"Active period","all_day":"All day","custom":"Custom period","add":"Add period"},"autolink":{"title":"Autolink product","label":"Auto link product","sublabel":"Automatically link products based on filters","all_items":"Auto link all items","filter_message":"Auto link items matching following filters.","tooltip":"You can use wildcards ('*' for any characters, '$' for any numeric characters) in filter values. For example, A*1 matches A1, AG1, AC51, but not A2, B1, C9, A$ matches A1, A11, A124 but not AQ1, AG1, AC"},"filter":{"add":"Add filter","matches":"matches","or":"or","types":{"code":"Code","category":"Category"},"placeholder":{"category":"Select category"}},"products":{"title":"Apply product","link":"Link product"}},"actions":{"cancel":"Cancel"}},"dialogs":{"remove":{"title":"Remove scheduler","message":"Are you sure to remove scheduler {name}?"}}},"revert":{"title":"Revert menu","description":"Revert {name}'s menu to the last published version. Delivery catalog will be set to Main if it's not in last published version.","labels":{"restaurant":"Restaurant","revert_to":"Revert to","default":"Default","pos_takeaway":"POS Takeaway","pickup":"Pick up","additional_catalogs":"Additional catalogs"}},"remy":{"title":"Remy","description":"Your AI assistant","actions":{"start":"Start with Remy","close":"Close Remy"},"messages":{"welcome":"Hi! I'm Remy, your AI assistant. How can I help you today?","thinking":"Thinking...","error":"Sorry, I encountered an error. Please try again."}},"picker":{"title":"Select {type}","search":"Search {type}","no_results":"No {type} found","selected":"{count} selected"},"apply_product":{"title":"Apply product","link":{"title":"Link product","subtitle":"Link products to apply changes"},"table":{"category_count":"{name} ({count})","inventory":"Inventory","value":"Value: {values}"}},"catalog":{"title":"Catalog","detail":"Catalog Detail","main":"Master product","form":{"name":"Catalog name","tax":{"title":"Tax calculation","auto":{"label":"Automatic","sublabel":"All price default to exclusive, when order through delivery company it will automatically become tax inclusive"},"manual":{"label":"Manual","sublabel":"You can specify own tax calculation for this catalog"},"inclusive":"{code} inclusive"},"link":{"title":"Link product configuration","auto_link":{"label":"Auto link item","sublabel":"Auto-link products to the main catalog for availability"},"options":{"all":"Available for all","pos_only":"Order on POS only"}},"markup":{"title":"Price markup configuration","auto":{"label":"Auto markup price","sublabel":"Auto-markup prices for catalog, groups, and schedules"},"add":"Add markup configuration","config":"Configuration {number}","percentage":"Markup percentage: {value}%","products":"{count} product(s) linked","all_items":"Apply for all items"}},"validation":{"name_used":"Catalog name used","name_required":"Catalog name is required"},"edit":{"back":"Back to catalog","export":"Export","import":"Import","link_product":"Link product","apply_scheduler":"Apply scheduler","tabs":{"product":"Product","group":"Group","takeaway":"Takeaway","setting":"Setting"},"scheduler":{"remove":{"title":"Remove scheduler","message":"Are you sure to remove scheduler {name}?"}}},"usage":{"title":"Catalog usage","tax_calculation":"Tax calculation","products":"{count} products","restaurant":"Restaurant","usage":"Usage"},"table":{"columns":{"title":"Catalog title","tax_calculation":"Tax calculation","auto_link":"Auto link item"}},"empty":{"title":"Build your menu catalog","subtitle":"Organize your menu with a catalog. Add products, set prices, and customize for dine-in, takeout, or delivery."},"actions":{"add":"Add catalog","view_usage":"Catalog usage"},"dialogs":{"remove":{"title":"Remove catalog","message":"Are you sure to remove {name}?","error":"Catalog used by {restaurants} restaurants"}}},"currency":{"input":{"field":"field"}},"order":{"from":{"options":{"all":"Available for all","pos_only":"POS only","none":"None"}}},"inventory":{"title":"Inventory","subtitle":"Adjust ingredient and customise recipe for your product","columns":{"product_name":"Product name","ingredient":"Ingredient","recipe":"Recipe"},"status":{"sku_linked":"{count} sku linked","recipe_linked":"{count} recipe linked","not_set":"Not set"},"dialog":{"title":"{name} inventory"},"form":{"title":"Inventory","product_name":"Product name"},"binding":{"recipe":{"title":"Recipe","columns":{"name":"Recipe","amount":"Amount"}},"ingredient":{"title":"Ingredient","columns":{"name":"Ingredient","amount":"Amount","unit":"Unit"},"select_unit":"Select Unit","loop_warning":"Opps! there's a loop detected on this {type}. Please verify or remove it."},"link":{"title":"Link {type}","recipe":"recipe","ingredient":"ingredient"}}},"link_product":{"title":"Apply products"},"catalog_scheduler":{"title":"Update product from","subtitle":"Select the catalog and scheduler you wanted to update your product"},"apply_products":{"category":{"count":"{selected}/{total}"}},"markup":{"dialog":{"title":{"add":"Add markup configuration","update":"Update markup configuration"},"fields":{"percentage":{"label":"Markup percentage","placeholder":"0","required":"Markup percentage is required"}},"options":{"all":"Apply for all products","custom":"Custom products"},"products":{"link":"Link product","count":"{count} product(s) linked"}}},"import":{"dialog":{"title":"Import products","info":"Please don't change any header line from the original template otherwise the import will fail.","fields":{"type":"Menu type","file":{"replace":"Replace file"}},"actions":{"import":"Import"},"errors":{"select_file":"Please select a file to import"}}},"product":{"form":{"title":{"add":"Add product","update":"Update product"},"summary":{"title":"Product summary","fields":{"code":"Product code","name":"Product name","category":"Category","order_from":"Order from","selling_price":"Selling price","tax":"Tax","inventory":"Inventory","takeaway":"Takeaway"}},"sections":{"general":{"title":"General setting","description":"Use a different general setting"},"tagging":{"title":"Tagging","subtitle":"Group your products by tags to streamline reporting and management"},"price":{"title":"Update price","description":"Use a different price setting"},"print":{"title":"Update print","description":"Use a different print setting"},"variant":{"title":"Update variant","description":"Use a different variant setting"},"group":{"title":"Update group","description":"Use a different group setting"},"inventory":{"title":"Update inventory","description":"Use a different inventory setting"},"takeaway":{"title":"Update takeaway","description":"Use a different takeaway setting"}},"detail":{"title":"Product detail","fields":{"code":{"label":"Product code","placeholder":"No code"},"name":{"label":"Product name","required":"Name is required","duplicate_warning":"This product shares the same name as {count} other items. They will be grouped as one product in reports."},"description":{"label":"Description","optional":"(optional)","placeholder":"No description"}},"category":{"label":"Category","required":"Category is required","add_new":"Add new Category","add_first":"Please add a product category first","options":{"product":{"label":"Sell as product with add on","sublabel":"Product will appear as a-lar-carte"},"addon":{"label":"Sell as add-on only","sublabel":"Product will appear as add-on only"}}},"order_from":{"label":"Order from","default":"Follows main"}},"group":{"title":"Groups","subtitle":"Add group to your product to sell them as a combo set","add":"Add group","circularError":"Circular linking detected, group {groupName} is already linked to product {productName}","columns":{"title":"Group title","type":"Type"}},"price":{"title":"Price","fields":{"selling_price":{"label":"Selling price","required":"Price is required"},"tax":{"label":"Tax options not available","label_with_code":"{code} (applicable if restaurant profile {code} is set)"}},"settings":{"title":"Price setting","open_price":{"label":"Open price","sublabel":"Allow adjust price without permission"},"sell_by_unit":{"label":"Sell by unit","sublabel":"Sell products by specific units (weight, length, etc.).","per_unit":{"label":"Per","placeholder":"Enter amount","required":"Per unit is required","min":"Per unit must be greater than 0"},"unit":{"placeholder":"Enter unit","required":"Unit is required"}},"track_costing":{"label":"Track costing"},"min_price":{"label":"Has a minimum price after apply discount"}}},"print":{"title":"Printing","config":{"label":"Printing configuration","group_parent":{"label":"Group with parent","sublabel":"Print this product with its parent when serving as an Add-On"}},"kds":{"label":"KDS configuration","options":{"all":{"label":"All at once","description":"Send products to all departments simultaneously for faster preparation"},"sequential":{"label":"Sequential Dispatch","description":"Send the product to each department sequentially for step-by-step preparation"}}},"routes":{"label":"Linked routes","add":"Add route"}},"takeaway":{"title":"Takeaway","subtitle":"Select a takeaway charge to your products","columns":{"variant":"Variant","product":"Product","takeaway":"Takeaway"},"options":{"follows_main":"Follows main","no_preset":"No preset takeaway","add_new":"Add new Takeaway"}},"variant":{"title":"Variants","subtitle":"Add options like size, color or types","add":"Add variant","columns":{"variant":"Variant","code":"Code","order_from":"Order from","price":"Price","min_price":"Min price"},"validation":{"max_variants":"You can only add up to {max} variants"},"placeholders":{"no_code":"No code","follow_general":"Follow general"}}},"empty":{"with_create":{"title":"Add your products","subtitle":"Start by stocking your store with products your customers will love","action":"Add product"},"no_scheduler":{"title":"No product linked","subtitle":"Add product in this catalog by linking products from main catalog."},"with_scheduler":{"title":"No product applied","subtitle":"Apply product in this scheduler by linking products from main catalog."}},"table":{"columns":{"code":"Code","name":"Product name","category":"Category","price":"Price ({ currency })","order_from":"Order from","tagging":"Tag"},"tagging":{"all":"All tagging","collapse":"Collapse","expand":"+ {count} more"},"bulk_edit":{"title":"Bulk edit products","actions":{"reset_all":"Reset all","save":"Save"}},"selection":{"count":"{count} items selected","actions":{"deselect_all":"Deselect all","remove":"Remove"}},"empty":{"title":"Add your products","subtitle":"Start by stocking your store with products your customers will love","actions":{"add":"Add product","import":"Import"}},"search":{"placeholder":"Search products"},"validation":{"name_required":"Name is required","price_min":"Price must be greater or equal than 0"}}},"setting":{"catalog":{"title":"Catalog Detail","fields":{"name":{"label":"Catalog name","required":"Catalog name is required","used":"Catalog name used"}},"warnings":{"delivery":"This catalog is being use by delivery company and other order method. This may cause wrong price calculation, please review the price for each catalog usage."}},"tax":{"title":"Tax calculation","modes":{"auto":{"label":"Automatic","sublabel":"All price default to exclusive, when order through delivery company it will automatically become tax inclusive"},"manual":{"label":"Manual","sublabel":"You can specify own tax calculation for this catalog"}},"inclusive":"{code} inclusive"},"link":{"title":"Link product configuration","auto_link":{"label":"Auto link item","sublabel":"Auto-link products to the main catalog for availability"},"options":{"all":"Available for all","pos_only":"Order on POS only"}},"markup":{"title":"Price markup configuration","auto_markup":{"label":"Auto markup price","sublabel":"Auto-markup prices for catalog, groups, and schedules"},"add":"Add markup configuration","config":"Configuration {number}","percentage":"Markup percentage: {value}%","products":{"all":"Apply for all products","linked":"{count} product(s) linked"}}},"takeaway":{"actions":{"add":"Add takeaway"},"title":"Takeaway","add":"Add takeaway","update":"Update takeaway","columns":{"title":"Takeaway title","price":"Price"},"placeholders":{"title":"Enter takeaway title here"},"empty":{"title":"No takeaway found","subtitle":"Seems like you don't have takeaway created.","action":"Add takeaway"},"table":{"columns":{"name":"Takeaway name","price":"Price ({symbol})","products":"Apply products"},"items_linked":"{count} items linked","search":{"placeholder":"Search takeaways"}}},"thumbnail":{"alt":{"default":"item","with_name":"{name}"}},"cooking_guide":{"title":"Cooking guide","empty":{"title":"Add cooking guide","subtitle":"The cooking guide configuration tool enables merchants to establish standardized cooking instructions for dishes across multiple outlets.","action":"Add guide"},"table":{"columns":{"name":"Guide name","products":"Product linked","steps":"{count} step"},"search":{"placeholder":"Search guides"},"mobile":{"products_linked":"{count} products linked"}},"dialogs":{"remove":{"title":"Remove cooking guide","message":{"prefix":"Are you sure to remove cooking guide ","products_using":"There are ","products_count":" products using this cooking guide. "}}},"actions":{"add":"Add guide","remove":"Remove","cancel":"Cancel"},"dialog":{"add":{"title":"Add guide","action":"Add"},"update":{"title":"Update guide","action":"Update"},"sections":{"guide_detail":{"title":"Guide detail","name":{"label":"Guide name","placeholder":"Placeholder","required":"Required"}},"steps":{"title":"Steps","add":"Add step","empty":"No steps added yet"},"apply_product":{"title":"Apply product","link":"Link product","products_linked":"{count} product(s) linked","search":"Search"}},"actions":{"cancel":"Cancel"}},"step_dialog":{"add":{"title":"Add step","action":"Add"},"update":{"title":"Update step","action":"Update"},"sections":{"variables":{"title":"Variables","add":"Add variable","columns":{"key":"Key","value":"Value"},"placeholders":{"key":"key","value":"Default value"},"validation":{"required":"Required","lowercase":"Lower case alphabet only","duplicate":"Duplicate key"}},"instruction":{"title":"Instruction"}},"actions":{"cancel":"Cancel","back":"Back"}},"step_override_dialog":{"title":"Customize cooking step","columns":{"instructions":"Instructions","variables":"Variables","value":"Value"},"actions":{"save":"Save","cancel":"Cancel"}}},"ingredient":{"title":"Ingredient","empty":{"title":"Add your first ingredient","subtitle":"Ingredients are crucial components in food and beverages. Managing them involves sourcing quality products, ensuring storage compliance, and maintaining safety standards, as they significantly impact flavor and quality.","action":"Add ingredient"},"table":{"columns":{"code":"Code","name":"Name","unit":"Unit"},"search":{"placeholder":"Search ingredients"},"mobile":{"code":"Code: {code}","unit":"Unit: {unit}"}},"actions":{"add":"Add ingredient"}},"print_route":{"title":"Print route","empty":{"title":"No route found","subtitle":"Customize your printing destinations to ensure efficient order management by section.","action":"Add route"},"table":{"columns":{"name":"Print route name","products":"Product linked","products_count":"{count} products"},"search":{"placeholder":"Search routes"},"mobile":{"products_linked":"{count} product(s) linked"}},"dialogs":{"remove":{"title":"Remove print route","message":{"prefix":"Are you sure to remove print route? ","products_using":"There are ","products_count":" products using this print route. "}}},"actions":{"add":"Add route","remove":"Remove","cancel":"Cancel"},"department_dialog":{"add":{"title":"Add route","action":"Add"},"update":{"title":"Update route","action":"Update"},"sections":{"route_detail":{"title":"Route detail","name":{"label":"Route name","placeholder":"Placeholder","required":"Required"}},"link_product":{"title":"Link product","link":"Link product","products_linked":"{count} product(s) linked","search":"Search"}},"actions":{"cancel":"Cancel"}}},"products":{"title":"Products","actions":{"export":"Export","import":"Import","add":"Add product","link":"Link product","apply_scheduler":"Apply scheduler"}},"publish":{"title":"Publish","table":{"columns":{"restaurant":"Restaurant","default":"Default","pos_takeaway":"POS takeaway","pickup":"Pick up","version":"Version"},"search":{"placeholder":"Search"},"status":{"latest":"Latest","outdated":"Outdated"}},"empty":{"title":"Create restaurant","subtitle":"You have not created any restaurant yet. Add a restaurant to start publishing menu","action":"Create restaurant"},"actions":{"publish":"Publish","publish_all":"Publish all","revert":"Revert Menu"},"labels":{"main_version":"Main version: {version}","catalog":{"main":"Main","invalid":"Invalid catalog"}},"update_catalog_dialog":{"title":"Update catalog","sections":{"default":{"label":"Default catalog","use_default":"Use default"},"pos_takeaway":{"label":"POS takeaway catalog"},"pickup":{"label":"Pick up catalog"},"additional":{"title":"Additional catalog","subtitle":"Additional catalogs can be utilized by table"}},"actions":{"update":"Update","cancel":"Cancel"}}},"tax_setting":{"title":"Tax setting"},"menu_setting":{"title":"Menu setting","fields":{"low_stock":{"not_set":"Not set","must_be_integer":"Value must be an integer","title":"Product threshold for online orders","subtitle":"Disable online orders when stock falls below this limit","helper_text":"If stock reaches or drops below this number, the product will be prompted to be removed from online ordering","updated":"Menu setting updated"}},"tabs":{"menu_configuration":"Menu configuration","price_group":"Price group"}},"price_tier":{"price_group":"Price group","description":"Set different price groups for your products and link them to multiple catalogs","add_price_group":"Add price group","add_price_group_success":"Price group created successfully","group_title":"Group title","price_group_description":"Current catalog is linked to price group \\"{group}\\". Please manage price in main catalog.","delete_dialog":{"title":"Delete price group","message":"Are you sure to delete price group {name}?","success":"Price group deleted successfully"},"settings_table":{"columns":{"name":"Name"}},"form":{"table":{"columns":{"name":"Group title","price":"Selling price"}}},"price_tier_config":"Price group setting","link_price_group":"Link price group","link_price_group_description":"Select a price group to apply it to a catalog. If no group is linked, the Base Price will be used by default.","not_linked":"Not linked"},"tree_editor":{"title":"Menu management","actions":{"add_category":"Add new category","expand_all":"Expand all","collapse_all":"Collapse all","add_product":"Add product","delete_product":"Delete product","edit_category":"Edit category","delete_category":"Delete category","link_category_to_catalog":"Link category to catalog","link_product_to_catalog":"Link product to catalog","unlink_product_from_catalog":"Unlink product from catalog"},"labels":{"main_catalog":"Main catalog","all_time":"All time","products":"{count} product(s)","variants":"{count} variant(s)","groups":"{count} group(s)","addon":"Addon","unknown":"Unknown","please_select_a_product_to_edit":"Please select a product to edit","no_items":"No items to display"}}}`), Za = {
1807
+ menu: Qa
1808
+ }, ei = /* @__PURE__ */ JSON.parse(`{"title":"เมนู","common":{"actions":{"update":"อัปเดต","cancel":"ยกเลิก","add":"เพิ่ม","search":"ค้นหา","delete":"ลบ","remove":"ลบออก","deselect_all":"ยกเลิกการเลือกทั้งหมด","move":"ย้าย","edit":"แก้ไข","download":"ดาวน์โหลด","save":"บันทึก","confirm":"ยืนยัน","yes":"ใช่","no":"ไม่ใช่","link":"ลิงก์","migrate":"ย้ายข้อมูล","add_new_variant":"เพิ่มตัวแปรใหม่","add_group":"เพิ่มกลุ่ม","apply_product":"ใช้ผลิตภัณฑ์","link_product":"ลิงก์ผลิตภัณฑ์","deselect":"ยกเลิกการเลือก"},"labels":{"name":"ชื่อ","detail":"รายละเอียด","items_linked":"เชื่อมโยง {count} รายการ","search_placeholder":"ค้นหา {type}","symbol":"สัญลักษณ์","products_linked":"เชื่อมโยง {count} ผลิตภัณฑ์","product_linked_singular":"เชื่อมโยง {count} ผลิตภัณฑ์","product_linked_plural":"เชื่อมโยง {count} ผลิตภัณฑ์","enter_name":"ป้อนชื่อที่นี่","product":"ผลิตภัณฑ์","selected_items":"เลือก {count} รายการ","all":"ทั้งหมด","category":"หมวดหมู่: {name}","group_name":"ชื่อกลุ่ม","min_select":"เลือกขั้นต่ำ","max_select":"เลือกสูงสุด","group_type":"ประเภทกลุ่ม","stackable":"ซ้อนได้","stackable_sublabel":"ลูกค้าสามารถเลือกตัวเลือกเดียวกันได้มากกว่าหนึ่งครั้ง","configuration":"การกำหนดค่า","variant":"ตัวแปร","product_title":"ชื่อผลิตภัณฑ์","price":"ราคา ({symbol})","order_from":"สั่งซื้อจาก","inventory":"สินค้าคงคลัง","search_groups":"ค้นหากลุ่ม","search_variants":"ค้นหาตัวแปร","product_count":"ใช้ {count} ผลิตภัณฑ์","search_product":"ค้นหาผลิตภัณฑ์","product_image":"รูปภาพผลิตภัณฑ์","optional":"(ทางเลือก)","products_selected":"เลือก {count} ผลิตภัณฑ์","items_selected":"เลือก {count} รายการ","catalog":"แคตตาล็อก","scheduler":"ตัวกำหนดเวลา","all_time":"ตลอดเวลา","main":"หลัก","unknown":"ไม่ทราบ","all_day":"ตลอดทั้งวัน","scheduler_title":"ผู้จัดกำหนดการ: {label}","link_product_title":"เชื่อมโยงผลิตภัณฑ์","products_count":"เลือกผลิตภัณฑ์ {count} รายการ","search":"ค้นหา","status":"สถานะ"},"dialog":{"remove_confirmation":"คุณแน่ใจหรือไม่ที่จะลบ {name}","change_type":{"title":"เปลี่ยนประเภทกลุ่มแอดออน","message":"การเปลี่ยนประเภทกลุ่มแอดออนจะล้างผลิตภัณฑ์ทั้งหมด คุณแน่ใจหรือไม่ที่จะดำเนินการต่อ"},"remove":{"catalog":{"title":"ลบแคตตาล็อก","message":"คุณแน่ใจหรือไม่ที่จะลบ {name}"},"category":{"title":"ลบหมวดหมู่","message":"คุณแน่ใจหรือไม่ที่จะลบ {name}"},"product":{"title":"ลบผลิตภัณฑ์","message":"คุณแน่ใจหรือไม่ที่จะลบ {name}","success":"ลบผลิตภัณฑ์ออกเรียบร้อยแล้ว"},"recipe":{"title":"ลบสูตร","message":"คุณต้องการลบสูตร {name} หรือไม่"},"ingredient":{"title":"ลบส่วนผสม","message":"คุณต้องการลบส่วนผสม {name} หรือไม่"},"takeaway":{"title":"ลบรายการนำกลับบ้าน","message":"คุณต้องการลบ {name} หรือไม่"},"unit":{"title":"ลบหน่วย","message":"คุณต้องการลบหน่วย {name} หรือไม่"},"variant":{"title":"ลบตัวแปร","message":"คุณต้องการลบ {name} หรือไม่"}}},"validation":{"required":"{field} จำเป็นต้องระบุ","min_max":"การเลือกขั้นต่ำต้องน้อยกว่าหรือเท่ากับค่าสูงสุด เลือก","product_title_required":"ชื่อผลิตภัณฑ์เป็นสิ่งจำเป็น","min_value":"ค่าต่ำสุดคือ {value}","max_value":"ค่าสูงสุดคือ {value}","field_required":"{field} เป็นสิ่งจำเป็น","required_field":"จำเป็น","invalid_amount":"จำนวนไม่ถูกต้อง","max_default_items":"จำนวนสินค้าเริ่มต้นไม่สามารถมากกว่า {max} ได้","default_items_tip":"เลือกผลิตภัณฑ์เริ่มต้น {count} / {max} รายการ ผลิตภัณฑ์เริ่มต้นจะถูกเลือกโดยอัตโนมัติเมื่อสั่งซื้อ"},"file":{"accepts":"ยอมรับ .jpg, .jpeg, .png, .gif"},"empty":{"no_group":{"title":"ไม่พบกลุ่ม","subtitle":"ดูเหมือนว่าคุณยังไม่ได้สร้างกลุ่ม"},"no_variant":{"title":"ไม่พบตัวแปร","subtitle":"ดูเหมือนว่าคุณยังไม่ได้สร้างตัวแปร"}}},"category":{"title":"หมวดหมู่","add":"เพิ่มหมวดหมู่","detail":"รายละเอียดหมวดหมู่","name":"ชื่อหมวดหมู่","empty":{"title":"จัดกลุ่มผลิตภัณฑ์ของคุณเป็นหมวดหมู่","subtitle":"ใช้หมวดหมู่เพื่อจัดระเบียบผลิตภัณฑ์ของคุณ","no_group":{"title":"ไม่พบกลุ่ม","subtitle":"ดูเหมือนว่าคุณไม่ได้สร้างกลุ่ม"}},"columns":{"title":"ชื่อหมวดหมู่","products":"ใช้ผลิตภัณฑ์"},"dialog":{"remove":{"title":"ลบหมวดหมู่","error":"ไม่สามารถลบหมวดหมู่นี้ได้"},"add":{"title":"เพิ่มหมวดหมู่","name":{"label":"ชื่อหมวดหมู่","placeholder":"ป้อนชื่อหมวดหมู่ที่นี่","required":"จำเป็นต้องระบุชื่อหมวดหมู่"}}},"products":{"title":"ผลิตภัณฑ์","add":"เพิ่มผลิตภัณฑ์","linked_count":"เชื่อมโยง {count} ผลิตภัณฑ์ที่","search":"ค้นหา","columns":{"name":"ชื่อผลิตภัณฑ์","code":"รหัสผลิตภัณฑ์"}},"selector":{"all":"ทั้งหมด","title":"หมวดหมู่: {label}"},"manager":{"dialog":{"add":{"title":"เพิ่มหมวดหมู่","action":"สร้าง"},"update":{"title":"อัปเดตหมวดหมู่","action":"อัปเดต"}}}},"variant":{"title":"เวอร์ชัน","add":"เพิ่มตัวแปร","columns":{"name":"ชื่อตัวแปร","options":"ค่าตัวเลือก","applied_products":"ผลิตภัณฑ์ที่นำไปใช้"},"mobile":{"value":"ค่า: {values}"},"empty":{"title":"เพิ่มตัวแปร","subtitle":"การกำหนดค่าตัวแปรช่วยให้ผู้ค้าสามารถเสนอตัวเลือกผลิตภัณฑ์ที่ปรับแต่งได้","no_variant":{"title":"ไม่พบตัวแปร","subtitle":"ดูเหมือนว่าคุณไม่มีตัวแปรที่สร้างขึ้น"}},"select":{"title":"เลือกตัวแปร","subtitle":"เลือกตัวแปรที่จะใช้การเปลี่ยนแปลง"},"form":{"title":{"add":"เพิ่มตัวแปร","edit":"แก้ไขตัวแปร"},"detail":"รายละเอียดตัวแปร","name":{"label":"ชื่อตัวแปร","placeholder":"ขนาดคัพ","helper":"ตั้งชื่อชุดตัวเลือกนี้ ตัวอย่างเช่น คุณสามารถเรียกชุดตัวเลือกนี้ว่าขนาดคัพหรือระดับน้ำตาล","required":"ชื่อตัวแปรเป็นสิ่งจำเป็น"},"options":{"title":"ค่าตัวเลือก","placeholder":"ตัวเลือก","min_required":"จำเป็นต้องมีอย่างน้อย 1 ตัวเลือก","name_required":"จำเป็นต้องมีชื่อตัวเลือก"},"applied_product":"ผลิตภัณฑ์ที่นำไปใช้"}},"unit":{"title":"หน่วย","add":"เพิ่มหน่วย","update":"อัปเดตหน่วย","precision":"ความแม่นยำ","precision_placeholder":"ป้อนตัวเลข","empty":{"title":"เพิ่มหน่วยแรกของคุณ","subtitle":"หน่วยใช้เพื่อระบุว่าคุณต้องการวัดผลิตภัณฑ์ของคุณอย่างไร"},"columns":{"name":"ชื่อ","symbol":"สัญลักษณ์"},"measurement":{"add":"เพิ่มการวัด","title":"การวัด {number}","name":"ชื่อ","symbol":"สัญลักษณ์","conversion":"การแปลง","preview":"1 {name} เท่ากับ {value} {unit}","preview_label":"ดูตัวอย่าง"}},"print_dept":{"title":"เส้นทางการพิมพ์","add":"เพิ่มเส้นทางการพิมพ์","update":"แก้ไขเส้นทางการพิมพ์","columns":{"name":"พิมพ์ชื่อเส้นทาง","products":"ผลิตภัณฑ์ที่นำไปใช้"}},"sku":{"title":"ส่วนผสม","add":"เพิ่มส่วนผสม","update":"อัปเดตส่วนผสม","columns":{"code":"รหัส","name":"ชื่อ","unit":"หน่วย"},"empty":{"no_unit":"ไม่พบหน่วย","subtitle":"เพิ่มหน่วยเพื่อเริ่มเพิ่มส่วนผสมของคุณ"},"validation":{"code_used":"รหัสที่ใช้โดยส่วนผสมอื่น"},"errors":{"select_recipe_ingredient":"เลือกสูตรหรือส่วนผสมที่จะแปลง"},"convertible":{"label":"แปลงได้","sublabel":"แปลงได้จากสูตรหรือส่วนผสมอื่น","convert_to":"แปลงสูตรอาหารและส่วนผสมเป็น"}},"recipe":{"title":"สูตร","add":"เพิ่มสูตรอาหาร","update":"อัปเดตสูตรอาหาร","columns":{"name":"ชื่อ"},"validation":{"bind_required":"ผูกสูตรอาหารหรือส่วนผสมอย่างน้อยหนึ่งสูตร"},"table":{"columns":{"name":"ชื่อ","ingredients":"ส่วนผสม"},"search":{"placeholder":"ค้นหาสูตรอาหาร"}},"empty":{"title":"เพิ่มสูตรอาหารแรกของคุณ","subtitle":"สร้างสูตรอาหารเพื่อทำให้กระบวนการเตรียมอาหารของคุณเป็นมาตรฐาน","action":"เพิ่มสูตรอาหาร"},"actions":{"add":"เพิ่มสูตรอาหาร"}},"serving_sequence":{"title":"ลำดับการเสิร์ฟ","add":"เพิ่มลำดับ","update":"อัปเดตลำดับ","columns":{"name":"ชื่อลำดับ"},"empty":{"title":"ไม่มีลำดับการเสิร์ฟ","subtitle":"ตั้งค่าลำดับการเสิร์ฟอาหารของคุณ เพื่อให้แน่ใจว่าจะได้ประสบการณ์การรับประทานอาหารที่ราบรื่นและเป็นระเบียบ"}},"group":{"title":"กลุ่ม","add":"เพิ่มกลุ่ม","update":"อัปเดตกลุ่ม","option":{"title":"ผลิตภัณฑ์","link_products":"เชื่อมโยงผลิตภัณฑ์","add_option":"เพิ่มตัวเลือก","product_title":"ชื่อ","product_title_required":"ชื่อผลิตภัณฑ์เป็นสิ่งจำเป็น","price":"ราคา ({symbol})","inventory":"สินค้าคงคลัง","variant":"ตัวแปร","code":"รหัส","is_default":"ค่าเริ่มต้น"},"types":{"normal":"ปกติ","product":"ผลิตภัณฑ์","dynamic":"ไดนามิก"},"select":{"title":"เลือกกลุ่ม","subtitle":"เลือกกลุ่มที่จะใช้การเปลี่ยนแปลง"},"empty":{"title":"ไม่พบกลุ่ม","subtitle":"ดูเหมือนว่าคุณไม่ได้สร้างกลุ่มเสริม"},"search":{"placeholder":"ค้นหากลุ่ม"},"type":{"title":"กลุ่ม: ประเภท {type}","all":"ประเภททั้งหมด","normal":"ประเภทปกติ","product":"ประเภทผลิตภัณฑ์","dynamic":"ประเภทไดนามิก"},"list":{"items_linked":"รายการเชื่อมโยง {count} รายการ","products_linked":"ผลิตภัณฑ์เชื่อมโยง {count} รายการ","columns":{"name":"ชื่อกลุ่ม","products":"ผลิตภัณฑ์","type":"ประเภท","applied_products":"ผลิตภัณฑ์ที่ใช้"},"types":{"normal":"ปกติ","product":"ผลิตภัณฑ์","dynamic":"ไดนามิก"},"variants":"{ count } ตัวแปร","more_items":"และอีก { count } รายการ"},"actions":{"add":"เพิ่มกลุ่ม","duplicate":{"title":"กลุ่มที่ซ้ำกัน","message":"คุณแน่ใจหรือไม่ที่จะทำซ้ำ {name}"},"apply_product":"ใช้ผลิตภัณฑ์","duplicate_action":"ทำซ้ำ"},"dialogs":{"delete":{"title":"ลบกลุ่ม","message":"คุณต้องการลบ {name} หรือไม่"},"update":{"title":"อัปเดตกลุ่ม"}}},"migrate":{"title":"ย้ายไปยังเวอร์ชันใหม่","description":"คุณต้องการย้ายไปยังเวอร์ชันใหม่หรือไม่ เมื่อย้ายแล้วจะไม่สามารถย้อนกลับไปใช้เวอร์ชันเก่าได้","message":"ย้ายเมนูของคุณไปยังเวอร์ชันใหม่เพื่อใช้งานฟีเจอร์ต่างๆ ได้มากขึ้น เนื้อหาของเมนูใหม่จะยังคงเหมือนเดิม","notification":{"title":"เวอร์ชันใหม่ของเมนูออกแล้ว!","description":"ย้ายเวอร์ชั่นเมนูปัจจุบันของคุณไปเป็นเวอร์ชั่นล่าสุดเพื่อเพลิดเพลินกับฟีเจอร์ต่างๆ เพิ่มเติม เช่น การจัดส่งผลิตภัณฑ์ตามลำดับ ลำดับการเสิร์ฟ ตัวกำหนดเวลา และอื่นๆ อีกมากมาย เนื้อหาและการตั้งค่าปัจจุบันของคุณจะถูกเก็บรักษาไว้"},"errors":{"no_restaurant":"ต้องมีร้านอาหารอย่างน้อยหนึ่งร้านที่จะย้ายข้อมูล","pos_version":"อัปเกรด POS เป็น V{version} เพื่อใช้เมนูใหม่: {restaurants}"}},"scheduler":{"title":"ตัวจัดตารางเวลา","select":{"title":"เลือกตัวจัดตารางเวลา","all_time":"ตลอดเวลา"},"empty":{"title":"ไม่พบตัวจัดตารางเวลา","subtitle":"เพิ่มตัวจัดตารางเวลาเพื่อกำหนดเวลาให้ผลิตภัณฑ์ของคุณแสดง","action":"เพิ่มตัวจัดตารางเวลา"},"table":{"columns":{"name":"ชื่อตัวจัดตารางเวลา","repeat":"ทำซ้ำ","period":"ระยะเวลา","products":"ใช้ผลิตภัณฑ์"},"products_linked":"เชื่อมโยงรายการ {count} รายการ","search":{"placeholder":"ค้นหาตัวจัดตารางเวลา"}},"repeat":{"daily":"รายวัน","weekdays":"วันธรรมดา","weekends":"สุดสัปดาห์","except":"รายวัน ยกเว้น {day}","range":"{start} ถึง {end}"},"days":{"monday":"วันจันทร์","tuesday":"วันอังคาร","wednesday":"วันพุธ","thursday":"วันพฤหัสบดี","friday":"วันศุกร์","saturday":"วันเสาร์","sunday":"วันอาทิตย์"},"dialog":{"add":{"title":"เพิ่มตัวจัดตารางเวลา","action":"เพิ่ม"},"update":{"title":"อัปเดตตัวจัดตารางเวลา","action":"อัปเดต"},"sections":{"detail":{"title":"รายละเอียดตัวจัดตารางเวลา","name":{"label":"ชื่อตัวจัดตารางเวลา","placeholder":"ตัวแทน","required":"จำเป็น"}},"availability":{"title":"ความพร้อมใช้งาน","daily":"รายวัน","weekly":"รายสัปดาห์"},"period":{"title":"ระยะเวลาใช้งาน","all_day":"ตลอดทั้งวัน","custom":"ระยะเวลาที่กำหนดเอง","add":"เพิ่มระยะเวลา"},"autolink":{"title":"เชื่อมโยงผลิตภัณฑ์โดยอัตโนมัติ","label":"เชื่อมโยงผลิตภัณฑ์โดยอัตโนมัติ","sublabel":"เชื่อมโยงผลิตภัณฑ์โดยอัตโนมัติตามตัวกรอง","all_items":"เชื่อมโยงรายการทั้งหมดโดยอัตโนมัติ","filter_message":"เชื่อมโยงรายการที่ตรงกับตัวกรองต่อไปนี้โดยอัตโนมัติ","tooltip":"คุณสามารถใช้ไวด์การ์ด ('*' สำหรับอักขระใดๆ และ '$' สำหรับอักขระตัวเลขใดๆ) ในค่าตัวกรอง ตัวอย่างเช่น A*1 ตรงกับ A1, AG1, AC51 แต่ไม่ตรงกับ A2, B1, C9 ส่วน A$ ตรงกับ A1, A11, A124 แต่ไม่ตรงกับ AQ1, AG1, AC"},"filter":{"add":"เพิ่มตัวกรอง","matches":"รายการที่ตรงกัน","or":"หรือ","types":{"code":"รหัส","category":"หมวดหมู่"},"placeholder":{"category":"เลือกหมวดหมู่"}},"products":{"title":"ใช้ผลิตภัณฑ์","link":"เชื่อมโยงผลิตภัณฑ์"}},"actions":{"cancel":"ยกเลิก"}},"dialogs":{"remove":{"title":"ลบตัวกำหนดเวลา","message":"คุณแน่ใจหรือไม่ว่าต้องการลบตัวกำหนดเวลา {name}"}}},"revert":{"title":"ย้อนกลับเมนู","description":"ย้อนกลับเมนูของ {name} เป็นเวอร์ชันที่เผยแพร่ล่าสุด แคตตาล็อกการจัดส่งจะถูกตั้งค่าเป็นหน้าหลักหากไม่อยู่ในเวอร์ชันที่เผยแพร่ล่าสุด","labels":{"restaurant":"ร้านอาหาร","revert_to":"กลับสู่","default":"ค่าเริ่มต้น","pos_takeaway":"POS Takeaway","pickup":"รับสินค้า","additional_catalogs":"แคตตาล็อกเพิ่มเติม"}},"remy":{"title":"Remy","description":"ผู้ช่วย AI ของคุณ","actions":{"start":"เริ่มต้นด้วย Remy","close":"ปิด Remy"},"messages":{"welcome":"สวัสดี ฉันชื่อ Remy ผู้ช่วย AI ของคุณ ฉันจะช่วยคุณได้อย่างไรในวันนี้","thinking":"กำลังคิด...","error":"ขออภัย ฉันพบข้อผิดพลาด โปรดลองอีกครั้ง"}},"picker":{"title":"เลือก {type}","search":"ค้นหา {type}","no_results":"ไม่พบ {type}","selected":"เลือก {count} รายการ"},"apply_product":{"title":"ใช้ผลิตภัณฑ์","link":{"title":"เชื่อมโยงผลิตภัณฑ์","subtitle":"เชื่อมโยงผลิตภัณฑ์เพื่อใช้การเปลี่ยนแปลง"},"table":{"category_count":"{name} ({count})","inventory":"สินค้าคงคลัง","value":"ค่า: {values}"}},"catalog":{"title":"แคตตาล็อก","detail":"รายละเอียดแคตตาล็อก","form":{"name":"ชื่อแคตตาล็อก","tax":{"title":"การคำนวณภาษี","auto":{"label":"อัตโนมัติ","sublabel":"ราคาทั้งหมดเป็นราคาปกติ เมื่อสั่งซื้อผ่านบริษัทขนส่ง ราคาจะรวมภาษีโดยอัตโนมัติ"},"manual":{"label":"คู่มือ","sublabel":"คุณสามารถระบุการคำนวณภาษีของตัวเองสำหรับแคตตาล็อกนี้ได้"},"inclusive":"รวม {code}"},"link":{"title":"เชื่อมโยงการกำหนดค่าผลิตภัณฑ์","auto_link":{"label":"เชื่อมโยงรายการโดยอัตโนมัติ","sublabel":"เชื่อมโยงผลิตภัณฑ์โดยอัตโนมัติไปยังแคตตาล็อกหลักเพื่อความพร้อมใช้งาน"},"options":{"all":"พร้อมใช้งานสำหรับทั้งหมด","pos_only":"สั่งซื้อบน POS เท่านั้น"}},"markup":{"title":"กำหนดค่ามาร์กอัปราคา","auto":{"label":"กำหนดราคามาร์กอัปโดยอัตโนมัติ","sublabel":"กำหนดราคามาร์กอัปโดยอัตโนมัติสำหรับแคตตาล็อก กลุ่ม และกำหนดการ"},"add":"เพิ่มการกำหนดค่ามาร์กอัป","config":"การกำหนดค่า {number}","percentage":"เปอร์เซ็นต์มาร์กอัป: {value}%","products":"เชื่อมโยงผลิตภัณฑ์ {count} รายการ","all_items":"นำไปใช้กับรายการทั้งหมด"}},"validation":{"name_used":"ชื่อแคตตาล็อกที่ใช้","name_required":"จำเป็นต้องระบุชื่อแคตตาล็อก"},"edit":{"back":"กลับไปที่แคตตาล็อก","export":"ส่งออก","import":"นำเข้า","link_product":"เชื่อมโยงผลิตภัณฑ์","apply_scheduler":"ใช้ตัวกำหนดเวลา","tabs":{"product":"ผลิตภัณฑ์","group":"กลุ่ม","takeaway":"นำกลับบ้าน","setting":"การตั้งค่า"},"scheduler":{"remove":{"title":"ลบตัวกำหนดเวลา","message":"คุณแน่ใจหรือไม่ว่าต้องการลบตัวกำหนดเวลา {name}?"}}},"usage":{"title":"การใช้งานแคตตาล็อก","tax_calculation":"การคำนวณภาษี","products":"ผลิตภัณฑ์ {count} รายการ","restaurant":"ร้านอาหาร","usage":"การใช้งาน"},"table":{"columns":{"title":"ชื่อแคตตาล็อก","tax_calculation":"การคำนวณภาษี","auto_link":"การเชื่อมโยงรายการอัตโนมัติ"}},"empty":{"title":"สร้างแคตตาล็อกเมนูของคุณ","subtitle":"จัดระเบียบเมนูของคุณด้วยแคตตาล็อก เพิ่มผลิตภัณฑ์ กำหนดราคา และปรับแต่งสำหรับการรับประทานในร้าน ซื้อกลับบ้าน หรือจัดส่ง"},"actions":{"add":"เพิ่มแคตตาล็อก","view_usage":"การใช้งานแคตตาล็อก"},"dialogs":{"remove":{"title":"ลบแคตตาล็อก","message":"คุณแน่ใจหรือไม่ว่าต้องการลบ {name}","error":"แคตตาล็อกที่ใช้โดยร้านอาหาร {restaurants}"}}},"currency":{"input":{"field":"ฟิลด์"}},"order":{"from":{"options":{"all":"พร้อมใช้งานสำหรับทั้งหมด","pos_only":"POS เท่านั้น","none":"ไม่มี"}}},"inventory":{"title":"สินค้าคงคลัง","subtitle":"ปรับส่วนผสมและปรับแต่งสูตรสำหรับผลิตภัณฑ์ของคุณ","columns":{"product_name":"ชื่อผลิตภัณฑ์","ingredient":"ส่วนผสม","recipe":"สูตร"},"status":{"sku_linked":"{count} sku เชื่อมโยง","recipe_linked":"{count} สูตรเชื่อมโยง","not_set":"ไม่ได้ตั้งค่า"},"dialog":{"title":"สินค้าคงคลัง {name}"},"form":{"title":"สินค้าคงคลัง","product_name":"ชื่อผลิตภัณฑ์"},"binding":{"recipe":{"title":"สูตร","columns":{"name":"สูตร","amount":"จำนวน"}},"ingredient":{"title":"ส่วนผสม","columns":{"name":"ส่วนผสม","amount":"จำนวน","unit":"หน่วย"},"select_unit":"เลือกหน่วย","loop_warning":"อุ๊ย! ตรวจพบลูปใน {type} นี้ โปรดตรวจสอบหรือลบลูปนั้น"},"link":{"title":"ลิงก์ {type}","recipe":"สูตรอาหาร","ingredient":"ส่วนผสม"}}},"link_product":{"title":"ใช้ผลิตภัณฑ์"},"catalog_scheduler":{"title":"อัปเดตผลิตภัณฑ์จาก","subtitle":"เลือกแคตตาล็อกและตัวกำหนดเวลาที่คุณต้องการอัปเดตผลิตภัณฑ์ของคุณ"},"apply_products":{"category":{"count":"{selected}/{total}"}},"markup":{"dialog":{"title":{"add":"เพิ่มการกำหนดค่ามาร์กอัป","update":"อัปเดตการกำหนดค่ามาร์กอัป"},"fields":{"percentage":{"label":"เปอร์เซ็นต์มาร์กอัป","required":"จำเป็นต้องมีเปอร์เซ็นต์มาร์กอัป"}},"options":{"all":"ใช้กับผลิตภัณฑ์ทั้งหมด","custom":"ผลิตภัณฑ์ที่กำหนดเอง"},"products":{"link":"ลิงก์ผลิตภัณฑ์","count":"ลิงก์ผลิตภัณฑ์ {count} รายการ"}}},"import":{"dialog":{"title":"นำเข้าผลิตภัณฑ์","info":"โปรดอย่าเปลี่ยนบรรทัดส่วนหัวใดๆ จากเทมเพลตเดิม มิฉะนั้น การนำเข้าจะล้มเหลว","fields":{"type":"ประเภทเมนู","file":{"replace":"แทนที่ไฟล์"}},"actions":{"import":"นำเข้า"},"errors":{"select_file":"โปรดเลือกไฟล์ที่จะนำเข้า"}}},"product":{"form":{"title":{"add":"เพิ่มผลิตภัณฑ์","update":"อัปเดตผลิตภัณฑ์"},"summary":{"title":"สรุปผลิตภัณฑ์","fields":{"code":"รหัสผลิตภัณฑ์","name":"ชื่อผลิตภัณฑ์","category":"หมวดหมู่","order_from":"สั่งซื้อจาก","selling_price":"ราคาขาย","tax":"ภาษี","inventory":"สินค้าคงคลัง","takeaway":"อาหารนำกลับบ้าน"}},"sections":{"general":{"title":"การตั้งค่าทั่วไป","description":"ใช้การตั้งค่าทั่วไปอื่น"},"tagging":{"title":"การแท็ก","subtitle":"จัดกลุ่มผลิตภัณฑ์ของคุณตามแท็กเพื่อปรับปรุงการรายงานและการจัดการ"},"price":{"title":"อัปเดตราคา","description":"ใช้การตั้งค่าราคาอื่น"},"print":{"title":"อัปเดตการพิมพ์","description":"ใช้การตั้งค่าการพิมพ์อื่น"},"variant":{"title":"อัปเดตตัวแปร","description":"ใช้การตั้งค่าตัวแปรอื่น"},"group":{"title":"อัปเดตกลุ่ม","description":"ใช้การตั้งค่ากลุ่มที่แตกต่างกัน"},"inventory":{"title":"อัปเดตสินค้าคงคลัง","description":"ใช้การตั้งค่าสินค้าคงคลังอื่น"},"takeaway":{"title":"อัปเดตข้อมูลนำกลับบ้าน","description":"ใช้การตั้งค่านำกลับบ้านอื่น"}},"detail":{"title":"รายละเอียดผลิตภัณฑ์","fields":{"code":{"label":"รหัสผลิตภัณฑ์","placeholder":"ไม่มีรหัส"},"name":{"label":"ชื่อผลิตภัณฑ์","required":"จำเป็นต้องระบุชื่อ","duplicate_warning":"ผลิตภัณฑ์นี้มีชื่อเดียวกันกับสินค้าอื่นอีก {count} รายการ ซึ่งจะถูกจัดกลุ่มเป็นผลิตภัณฑ์เดียวในรายงาน"},"description":{"label":"คำอธิบาย","optional":"(ไม่บังคับ)","placeholder":"ไม่มีคำอธิบาย"}},"category":{"label":"หมวดหมู่","required":"จำเป็นต้องระบุหมวดหมู่","add_new":"เพิ่มหมวดหมู่ใหม่","add_first":"กรุณาเพิ่มหมวดหมู่สินค้าก่อน","options":{"product":{"label":"ขายเป็นสินค้าพร้อมส่วนเสริม","sublabel":"สินค้าจะปรากฏเป็นรายการสั่งซื้อ"},"addon":{"label":"ขายเป็นรายการเสริมเท่านั้น","sublabel":"สินค้าจะปรากฏเป็นรายการเสริมเท่านั้น"}}},"order_from":{"label":"สั่งซื้อจาก","default":"ติดตามหน้าหลัก"}},"group":{"title":"กลุ่ม","subtitle":"เพิ่มกลุ่มให้กับผลิตภัณฑ์ของคุณเพื่อขายเป็นชุดคอมโบ","add":"เพิ่มกลุ่ม","columns":{"title":"ชื่อกลุ่ม","type":"ประเภท"}},"price":{"title":"ราคา","fields":{"selling_price":{"label":"ราคาขาย","required":"จำเป็นต้องมีราคา"},"tax":{"label":"ตัวเลือกภาษีไม่พร้อมใช้งาน","label_with_code":"{code} (ใช้ได้หากตั้งค่าโปรไฟล์ร้านอาหารเป็น {code})"}},"settings":{"title":"การกำหนดราคา","open_price":{"label":"ราคาเปิด","sublabel":"อนุญาตให้ปรับราคาได้โดยไม่ต้องขออนุญาต"},"sell_by_unit":{"label":"ขายตามหน่วย","sublabel":"ขายผลิตภัณฑ์ตามหน่วยที่กำหนด (น้ำหนัก ความยาว ฯลฯ)","per_unit":{"label":"ต่อ","placeholder":"ป้อนจำนวน","required":"ต่อหน่วยเป็นสิ่งจำเป็น","min":"ต่อหน่วยต้องมากกว่า 0"},"unit":{"placeholder":"ป้อนหน่วย","required":"จำเป็นต้องมีหน่วย"}},"track_costing":{"label":"ติดตามต้นทุน"},"min_price":{"label":"มีราคาขั้นต่ำหลังจากใช้ส่วนลด"}}},"print":{"title":"การพิมพ์","config":{"label":"การกำหนดค่าการพิมพ์","group_parent":{"label":"จัดกลุ่มกับผลิตภัณฑ์หลัก","sublabel":"พิมพ์ผลิตภัณฑ์นี้พร้อมกับผลิตภัณฑ์หลักเมื่อทำหน้าที่เป็น Add-On"}},"kds":{"label":"การกำหนดค่า KDS","options":{"all":{"label":"ทั้งหมดในครั้งเดียว","description":"ส่งผลิตภัณฑ์ไปยังทุกแผนกพร้อมกันเพื่อการเตรียมการที่รวดเร็วยิ่งขึ้น"},"sequential":{"label":"การจัดส่งแบบต่อเนื่อง","description":"ส่งผลิตภัณฑ์ไปยังแต่ละแผนกตามลำดับเพื่อการเตรียมการแบบทีละขั้นตอน"}}},"routes":{"label":"เส้นทางที่เชื่อมโยง","add":"เพิ่มเส้นทาง"}},"takeaway":{"title":"การนำกลับบ้าน","subtitle":"เลือกค่าธรรมเนียมการนำกลับบ้านสำหรับผลิตภัณฑ์ของคุณ","columns":{"variant":"ตัวแปร","product":"ผลิตภัณฑ์","takeaway":"การนำกลับบ้าน"},"options":{"follows_main":"ปฏิบัติตามหลัก","no_preset":"ไม่มีการนำกลับบ้านที่ตั้งไว้ล่วงหน้า","add_new":"เพิ่มการนำกลับบ้านใหม่"}},"variant":{"title":"ตัวแปร","subtitle":"เพิ่มตัวเลือก เช่น ขนาด สี หรือประเภท","add":"เพิ่มตัวแปร","columns":{"variant":"ตัวแปร","code":"รหัส","order_from":"สั่งซื้อจาก","price":"ราคา","min_price":"ราคาต่ำสุด"},"validation":{"max_variants":"คุณสามารถเพิ่มตัวแปรได้สูงสุด {max} รายการ"},"placeholders":{"no_code":"ไม่มีรหัส","follow_general":"ปฏิบัติตามทั่วไป"}}},"empty":{"with_create":{"title":"เพิ่มผลิตภัณฑ์ของคุณ","subtitle":"เริ่มต้นด้วยการสต็อกสินค้าในร้านของคุณซึ่งลูกค้าของคุณจะชื่นชอบ","action":"เพิ่มผลิตภัณฑ์"},"no_scheduler":{"title":"ไม่มีการเชื่อมโยงผลิตภัณฑ์","subtitle":"เพิ่มผลิตภัณฑ์ในแค็ตตาล็อกนี้โดยการเชื่อมโยงผลิตภัณฑ์จากแค็ตตาล็อกหลัก"},"with_scheduler":{"title":"ไม่มีการใช้ผลิตภัณฑ์","subtitle":"ใช้ผลิตภัณฑ์ในตัวกำหนดเวลานี้โดยการเชื่อมโยงผลิตภัณฑ์จากแค็ตตาล็อกหลัก"}},"table":{"columns":{"code":"รหัส","name":"ชื่อผลิตภัณฑ์","category":"หมวดหมู่","price":"ราคา ({ currency })","order_from":"สั่งซื้อจาก","tagging":"แท็ก"},"tagging":{"all":"แท็กทั้งหมด","collapse":"ยุบ","expand":"+ เพิ่มเติมอีก {count} รายการ"},"bulk_edit":{"title":"แก้ไขผลิตภัณฑ์จำนวนมาก","actions":{"reset_all":"รีเซ็ตทั้งหมด","save":"บันทึก"}},"selection":{"count":"เลือกรายการ {count} รายการ","actions":{"deselect_all":"ยกเลิกการเลือกทั้งหมด","remove":"ลบ"}},"empty":{"title":"เพิ่มผลิตภัณฑ์ของคุณ","subtitle":"เริ่มต้นด้วยการสต็อกสินค้าในร้านของคุณที่ลูกค้าของคุณจะชื่นชอบ","actions":{"add":"เพิ่มผลิตภัณฑ์","import":"นำเข้า"}},"search":{"placeholder":"ค้นหาผลิตภัณฑ์"},"validation":{"name_required":"จำเป็นต้องระบุชื่อ","price_min":"ราคาต้องมากกว่าหรือเท่ากับ 0"}}},"setting":{"catalog":{"title":"รายละเอียดแคตตาล็อก","fields":{"name":{"label":"ชื่อแคตตาล็อก","required":"จำเป็นต้องระบุชื่อแคตตาล็อก","used":"ชื่อแคตตาล็อกที่ใช้"}},"warnings":{"delivery":"แคตตาล็อกนี้กำลังถูกใช้โดยบริษัทขนส่งและวิธีการสั่งซื้ออื่นๆ ซึ่งอาจทำให้คำนวณราคาผิดพลาดได้ โปรดตรวจสอบราคาสำหรับการใช้แคตตาล็อกแต่ละรายการ"}},"tax":{"title":"การคำนวณภาษี","modes":{"auto":{"label":"อัตโนมัติ","sublabel":"ราคาทั้งหมดเป็นค่าเริ่มต้นแบบไม่รวม เมื่อสั่งซื้อผ่านบริษัทขนส่ง ราคาจะกลายเป็นราคาที่รวมภาษีโดยอัตโนมัติ"},"manual":{"label":"ด้วยตนเอง","sublabel":"คุณสามารถระบุการคำนวณภาษีสำหรับแคตตาล็อกนี้ได้ด้วยตัวเอง"}},"inclusive":"{code} รวม"},"link":{"title":"เชื่อมโยงการกำหนดค่าผลิตภัณฑ์","auto_link":{"label":"เชื่อมโยงรายการโดยอัตโนมัติ","sublabel":"เชื่อมโยงผลิตภัณฑ์โดยอัตโนมัติไปยังแคตตาล็อกหลักเพื่อให้ทราบถึงความพร้อมใช้งาน"},"options":{"all":"พร้อมใช้งานสำหรับทั้งหมด","pos_only":"สั่งซื้อบน POS เท่านั้น"}},"markup":{"title":"กำหนดค่ามาร์กอัปราคา","auto_markup":{"label":"กำหนดราคามาร์กอัปโดยอัตโนมัติ","sublabel":"กำหนดราคามาร์กอัปโดยอัตโนมัติสำหรับแคตตาล็อก กลุ่ม และกำหนดการ"},"add":"เพิ่มการกำหนดค่ามาร์กอัป","config":"กำหนดค่า {number}","percentage":"เปอร์เซ็นต์มาร์กอัป: {value}%","products":{"all":"นำไปใช้กับผลิตภัณฑ์ทั้งหมด","linked":"{count} ผลิตภัณฑ์เชื่อมโยง"}}},"takeaway":{"actions":{"add":"เพิ่มการซื้อกลับบ้าน"},"title":"การซื้อกลับบ้าน","add":"เพิ่มรายการอาหารนำกลับบ้าน","update":"อัปเดตรายการอาหารนำกลับบ้าน","columns":{"title":"ชื่อรายการอาหารนำกลับบ้าน","price":"ราคา"},"placeholders":{"title":"ใส่ชื่อรายการอาหารนำกลับบ้านที่นี่"},"empty":{"title":"ไม่พบรายการอาหารนำกลับบ้าน","subtitle":"ดูเหมือนว่าคุณยังไม่ได้สร้างรายการอาหารนำกลับบ้าน","action":"เพิ่มรายการอาหารนำกลับบ้าน"},"table":{"columns":{"name":"ชื่อรายการอาหารนำกลับบ้าน","price":"ราคา ({symbol})","products":"ใช้ผลิตภัณฑ์"},"items_linked":"เชื่อมโยงรายการ {count} รายการ","search":{"placeholder":"ค้นหารายการอาหารนำกลับบ้าน"}}},"thumbnail":{"alt":{"default":"รายการ","with_name":"{name}"}},"cooking_guide":{"title":"คู่มือการทำอาหาร","empty":{"title":"เพิ่มคู่มือการทำอาหาร","subtitle":"เครื่องมือกำหนดค่าคำแนะนำการปรุงอาหารช่วยให้ผู้ค้าสามารถกำหนดคำแนะนำการปรุงอาหารที่เป็นมาตรฐานสำหรับอาหารต่าง ๆ ในหลาย ๆ ร้านค้า","action":"เพิ่มคู่มือ"},"table":{"columns":{"name":"ชื่อคู่มือ","products":"เชื่อมโยงผลิตภัณฑ์","steps":"ขั้นตอน {count}"},"search":{"placeholder":"ค้นหาคู่มือ"},"mobile":{"products_linked":"เชื่อมโยงผลิตภัณฑ์ {count}"}},"dialogs":{"remove":{"title":"ลบคู่มือการทำอาหาร","message":{"prefix":"คุณแน่ใจหรือไม่ว่าต้องการลบคู่มือการทำอาหาร","products_using":"มี","products_count":"ผลิตภัณฑ์ที่ใช้คู่มือการทำอาหารนี้"}}},"actions":{"add":"เพิ่มคู่มือ","remove":"ลบ","cancel":"ยกเลิก"},"dialog":{"add":{"title":"เพิ่มคู่มือ","action":"เพิ่ม"},"update":{"title":"อัปเดตคู่มือ","action":"อัปเดต"},"sections":{"guide_detail":{"title":"รายละเอียดคู่มือ","name":{"label":"ชื่อคู่มือ","placeholder":"ตัวแทน","required":"จำเป็น"}},"steps":{"title":"ขั้นตอน","add":"เพิ่มขั้นตอน","empty":"ยังไม่มีการเพิ่มขั้นตอน"},"apply_product":{"title":"ใช้ผลิตภัณฑ์","link":"เชื่อมโยงผลิตภัณฑ์","products_linked":"เชื่อมโยงผลิตภัณฑ์ {count} รายการ","search":"ค้นหา"}},"actions":{"cancel":"ยกเลิก"}},"step_dialog":{"add":{"title":"เพิ่มขั้นตอน","action":"เพิ่ม"},"update":{"title":"อัปเดตขั้นตอน","action":"อัปเดต"},"sections":{"variables":{"title":"ตัวแปร","add":"เพิ่มตัวแปร","columns":{"key":"คีย์","value":"มูลค่า"},"placeholders":{"key":"คีย์","value":"ค่าเริ่มต้น"},"validation":{"required":"จำเป็น","lowercase":"ตัวอักษรพิมพ์เล็กเท่านั้น","duplicate":"คีย์ซ้ำ"}},"instruction":{"title":"คำแนะนำ"}},"actions":{"cancel":"ยกเลิก","back":"ย้อนกลับ"}},"step_override_dialog":{"title":"ปรับแต่งขั้นตอนการปรุงอาหาร","columns":{"instructions":"คำแนะนำ","variables":"ตัวแปร","value":"มูลค่า"},"actions":{"save":"บันทึก","cancel":"ยกเลิก"}}},"ingredient":{"title":"ส่วนผสม","empty":{"title":"เพิ่มส่วนผสมแรกของคุณ","subtitle":"ส่วนผสมเป็นส่วนประกอบที่สำคัญในอาหารและเครื่องดื่ม การจัดการส่วนผสมเกี่ยวข้องกับการจัดหาผลิตภัณฑ์ที่มีคุณภาพ การตรวจสอบความสอดคล้องของการจัดเก็บ และการรักษามาตรฐานความปลอดภัย เนื่องจากส่วนผสมเหล่านี้ส่งผลกระทบอย่างมากต่อรสชาติและคุณภาพ","action":"เพิ่มส่วนผสม"},"table":{"columns":{"code":"รหัส","name":"ชื่อ","unit":"หน่วย"},"search":{"placeholder":"ค้นหาส่วนผสม"},"mobile":{"code":"รหัส: {code}","unit":"หน่วย: {unit}"}},"actions":{"add":"เพิ่มส่วนผสม"}},"print_route":{"title":"พิมพ์เส้นทาง","empty":{"title":"ไม่พบเส้นทาง","subtitle":"ปรับแต่งปลายทางการพิมพ์ของคุณเพื่อให้แน่ใจว่าการจัดการคำสั่งซื้อตามส่วนมีประสิทธิภาพ","action":"เพิ่มเส้นทาง"},"table":{"columns":{"name":"พิมพ์ชื่อเส้นทาง","products":"เชื่อมโยงผลิตภัณฑ์","products_count":"ผลิตภัณฑ์ {count} รายการ"},"search":{"placeholder":"ค้นหาเส้นทาง"},"mobile":{"products_linked":"เชื่อมโยงผลิตภัณฑ์ {count} รายการ"}},"dialogs":{"remove":{"title":"ลบเส้นทางการพิมพ์","message":{"prefix":"คุณแน่ใจหรือไม่ว่าจะลบเส้นทางการพิมพ์?","products_using":"มี","products_count":"ผลิตภัณฑ์ที่ใช้เส้นทางการพิมพ์นี้"}}},"actions":{"add":"เพิ่มเส้นทาง","remove":"ลบ","cancel":"ยกเลิก"},"department_dialog":{"add":{"title":"เพิ่มเส้นทาง","action":"เพิ่ม"},"update":{"title":"อัปเดตเส้นทาง","action":"อัปเดต"},"sections":{"route_detail":{"title":"รายละเอียดเส้นทาง","name":{"label":"ชื่อเส้นทาง","placeholder":"ตัวแทน","required":"จำเป็น"}},"link_product":{"title":"เชื่อมโยงผลิตภัณฑ์","link":"เชื่อมโยงผลิตภัณฑ์","products_linked":"เชื่อมโยงผลิตภัณฑ์ {count} รายการ","search":"ค้นหา"}},"actions":{"cancel":"ยกเลิก"}}},"products":{"title":"ผลิตภัณฑ์","actions":{"export":"ส่งออก","import":"นำเข้า","add":"เพิ่มผลิตภัณฑ์","link":"เชื่อมโยงผลิตภัณฑ์","apply_scheduler":"ใช้ตัวกำหนดเวลา"}},"publish":{"title":"เผยแพร่","table":{"columns":{"restaurant":"ร้านอาหาร","default":"ค่าเริ่มต้น","pos_takeaway":"POS takeaway","pickup":"รับสินค้า","version":"เวอร์ชัน"},"search":{"placeholder":"ค้นหา"},"status":{"latest":"ล่าสุด","outdated":"ล้าสมัย"}},"empty":{"title":"สร้างร้านอาหาร","subtitle":"คุณยังไม่ได้สร้างร้านอาหาร เพิ่มร้านอาหารเพื่อเริ่มเผยแพร่เมนู","action":"สร้างร้านอาหาร"},"actions":{"publish":"เผยแพร่","publish_all":"เผยแพร่ทั้งหมด","revert":"ย้อนกลับเมนู"},"labels":{"main_version":"เวอร์ชันหลัก: {version}","catalog":{"main":"หลัก","invalid":"แคตตาล็อกไม่ถูกต้อง"}},"update_catalog_dialog":{"title":"อัปเดตแคตตาล็อก","sections":{"default":{"label":"แคตตาล็อกเริ่มต้น","use_default":"ใช้แคตตาล็อกเริ่มต้น"},"pos_takeaway":{"label":"POS takeaway"},"pickup":{"label":"แคตตาล็อกรับสินค้า"},"additional":{"title":"แคตตาล็อกเพิ่มเติม","subtitle":"สามารถใช้แคตตาล็อกเพิ่มเติมโดยตารางได้"}},"actions":{"update":"อัปเดต","cancel":"ยกเลิก"}}},"tax_setting":{"title":"การตั้งค่าภาษี"},"menu_setting":{"title":"การตั้งค่าเมนู","fields":{"low_stock":{"not_set":"ไม่ตั้งค่า","must_be_integer":"ค่าต้องเป็นจำนวนเต็ม","title":"จำนวนสินค้าสำหรับการสั่งซื้อออนไลน์","subtitle":"ปิดการสั่งซื้อออนไลน์เมื่อสินค้าลดลงเกินจำนวนนี้","helper_text":"ถ้าสินค้าลดลงเกินจำนวนนี้ สินค้าจะถูกแจ้งให้ลบออกจากการสั่งซื้อออนไลน์","updated":"การตั้งค่าเมนูอัปเดตแล้ว"}},"tabs":{"menu_configuration":"การตั้งค่าเมนู","price_group":"กลุ่มราคา"}},"price_tier":{"price_group":"กลุ่มราคา","description":"ตั้งค่ากลุ่มราคาที่แตกต่างกันสำหรับผลิตภัณฑ์ของคุณและเชื่อมโยงไปยังหลายแคตตาล็อก","add_price_group":"เพิ่มกลุ่มราคา","add_price_group_success":"กลุ่มราคาเพิ่มขึ้นเรียบร้อย","group_title":"ชื่อกลุ่ม","price_group_description":"ปัจจุบันกลุ่มราคานี้เชื่อมโยงกับแคตตาล็อก \\"{group}\\" กรุณาจัดการราคาในแคตตาล็อกหลัก","delete_dialog":{"title":"ลบกลุ่มราคา","message":"คุณแน่ใจหรือไม่ว่าจะลบกลุ่มราคา {name}?","success":"กลุ่มราคาลบออกเรียบร้อย"},"settings_table":{"columns":{"name":"ชื่อ"}},"form":{"table":{"columns":{"name":"ชื่อกลุ่ม","price":"ราคาขาย"}}},"price_tier_config":"การตั้งค่ากลุ่มราคา","link_price_group":"เชื่อมโยงกลุ่มราคา","link_price_group_description":"เลือกกลุ่มราคาเพื่อใช้งานในแคตตาล็อก หากไม่มีกลุ่มราคาเชื่อมโยง ราคาฐานจะใช้งานเป็นค่าเริ่มต้น","not_linked":"ไม่เชื่อมโยง"},"tree_editor":{"title":"การจัดการเมนู","actions":{"add_category":"เพิ่มหมวดหมู่ใหม่","expand_all":"ขยายทั้งหมด","collapse_all":"ยุบทั้งหมด","add_product":"เพิ่มผลิตภัณฑ์","delete_product":"ลบผลิตภัณฑ์","edit_category":"แก้ไขหมวดหมู่","delete_category":"ลบหมวดหมู่","link_category_to_catalog":"เชื่อมโยงหมวดหมู่ไปยังแคตตาล็อก","link_product_to_catalog":"เชื่อมโยงผลิตภัณฑ์ไปยังแคตตาล็อก","unlink_product_from_catalog":"ยกเลิกเชื่อมโยงผลิตภัณฑ์จากแคตตาล็อก"},"labels":{"main_catalog":"แคตตาล็อกหลัก","all_time":"ทั้งหมด","products":"{count} ผลิตภัณฑ์","variants":"{count} รูปแบบ","groups":"{count} กลุ่ม","addon":"ส่วนเสริม","unknown":"ไม่ทราบ","please_select_a_product_to_edit":"กรุณาเลือกผลิตภัณฑ์เพื่อแก้ไข","no_items":"ไม่มีผลิตภัณฑ์ที่สามารถแสดง"}}}`), ti = {
1809
+ menu: ei
1810
+ }, ai = /* @__PURE__ */ JSON.parse(`{"title":"菜单","common":{"actions":{"update":"更新","cancel":"取消","add":"添加","search":"搜索","delete":"删除","remove":"移除","deselect_all":"取消选择","move":"移动","edit":"编辑","download":"下载","save":"保存","confirm":"确认","yes":"是","no":"否","link":"链接","migrate":"迁移","add_new_variant":"添加新规格","add_group":"添加组","apply_product":"应用产品","link_product":"链接产品","deselect":"取消选择"},"labels":{"name":"名称","detail":"详情","items_linked":"{count} 个项目已链接","search_placeholder":"搜索 {type}","symbol":"符号","products_linked":"{count} 个产品已链接","product_linked_singular":"{count} 个产品已链接","product_linked_plural":"{count} 个产品已链接","enter_name":"输入名称","product":"产品","selected_items":"{count} 个项目已选择","all":"全部","category":"分类:{name}","group_name":"组名称","min_select":"最少选择","max_select":"最多选择","group_type":"组类型","stackable":"可堆叠","stackable_sublabel":"顾客可以多次选择相同选项","configuration":"配置","variant":"规格","product_title":"产品标题","price":"价格 ({symbol})","order_from":"下单来源","inventory":"库存","search_groups":"搜索组","search_variants":"搜索规格","product_count":"{count} 个产品已应用","search_product":"搜索产品","product_image":"产品图片","optional":"(可选)","products_selected":"{count} 个产品已选择","items_selected":"{count} 个项目已选择","catalog":"目录","scheduler":"调度器","all_time":"全天","main":"主","unknown":"未知","all_day":"全天","scheduler_title":"调度器:{label}","link_product_title":"链接产品","products_count":"已选 {count} 个产品","search":"搜索","status":"状态"},"dialog":{"remove_confirmation":"确定要移除 {name} 吗?","change_type":{"title":"更改附加组类型","message":"更改附加组类型将清除所有产品。确定要继续吗?"},"remove":{"catalog":{"title":"移除目录","message":"确定要移除 {name} 吗?"},"category":{"title":"移除分类","message":"确定要移除 {name} 吗?"},"product":{"title":"移除产品","message":"确定要移除 {name} 吗?","success":"产品已成功移除。"},"recipe":{"title":"移除配方","message":"确定要移除配方 {name} 吗?"},"ingredient":{"title":"移除配料","message":"确定要移除配料 {name} 吗?"},"takeaway":{"title":"移除外带","message":"确定要移除 {name} 吗?"},"unit":{"title":"移除单位","message":"确定要移除单位 {name} 吗?"},"variant":{"title":"移除规格","message":"确定要移除 {name} 吗?"}}},"validation":{"required":"{field} 为必填项","min_max":"最小选择数必须小于或等于最大选择数","product_title_required":"产品标题为必填项","min_value":"最小值为 {value}","max_value":"最大值为 {value}","field_required":"{field} 为必填项","required_field":"必填项","invalid_amount":"无效金额","max_default_items":"组中的默认产品数量不得多于 {max}","default_items_tip":"已选择 {count} / {max} 个默认产品,默认产品下单时将自动选中"},"file":{"accepts":"接受 .jpg、.jpeg、.png、.gif 格式"},"empty":{"no_group":{"title":"未找到组","subtitle":"您还未创建组"},"no_variant":{"title":"未找到规格","subtitle":"您还没创建任何规格"}}},"category":{"title":"分类","add":"添加分类","detail":"分类详情","name":"分类名称","empty":{"title":"将产品分组到分类中","subtitle":"使用分类来组织您的产品。","no_group":{"title":"未找到分组","subtitle":"看起来您还没有创建任何分组"}},"columns":{"title":"分类标题","products":"应用产品"},"dialog":{"remove":{"title":"移除分类","error":"无法删除此分类"},"add":{"title":"添加分类","name":{"label":"分类名称","placeholder":"在此输入分类名称","required":"分类名称为必填项"}}},"products":{"title":"产品","add":"添加产品","linked_count":"已链接 {count} 个产品","search":"搜索","columns":{"name":"产品名称","code":"代码"}},"selector":{"all":"全部","title":"分类:{label}"},"manager":{"dialog":{"add":{"title":"添加分类","action":"创建"},"update":{"title":"更新分类","action":"更新"}}}},"variant":{"title":"规格","add":"添加规格","columns":{"name":"规格名称","options":"选项值","applied_products":"已应用产品"},"mobile":{"value":"值:{values}"},"empty":{"title":"添加规格","subtitle":"规格配置为商家提供自定义产品选项的功能。","no_variant":{"title":"未找到规格","subtitle":"看起来您还没有创建规格"}},"select":{"title":"选择规格","subtitle":"选择规格以应用更改"},"form":{"title":{"add":"添加规格","edit":"编辑规格"},"detail":"规格详情","name":{"label":"规格名称","placeholder":"杯型尺寸","helper":"为这组选项命名。例如,您可以将此选项组命名为杯型尺寸或糖度。","required":"规格名称为必填项"},"options":{"title":"选项值","placeholder":"选项","min_required":"至少需要 1 个选项","name_required":"选项名称为必填项"},"applied_product":"已应用产品"}},"unit":{"title":"单位","add":"添加单位","update":"更新单位","precision":"精度","precision_placeholder":"输入一个数字","empty":{"title":"添加您的第一个单位","subtitle":"单位用于指定您希望如何测量产品。"},"columns":{"name":"名称","symbol":"符号"},"measurement":{"add":"添加测量","title":"测量 {number}","name":"名称","symbol":"符号","conversion":"转换","preview":"1 {name} 等于 {value} {unit}","preview_label":"预览"}},"print_dept":{"title":"打印路线","add":"添加打印路线","update":"编辑打印路线","columns":{"name":"打印路线名称","products":"已应用产品"}},"sku":{"title":"配料","add":"添加配料","update":"更新配料","columns":{"code":"代码","name":"名称","unit":"单位"},"empty":{"no_unit":"未找到单位","subtitle":"添加单位以开始添加配料。"},"validation":{"code_used":"代码已被其他配料使用"},"errors":{"select_recipe_ingredient":"选择配方或配料以转换"},"convertible":{"label":"可转换","sublabel":"可从其他配方或配料转换","convert_to":"配方和配料转换为"}},"recipe":{"title":"配方","add":"添加配方","update":"更新配方","columns":{"name":"名称"},"validation":{"bind_required":"绑定至少一个配方或配料"},"table":{"columns":{"name":"名称","ingredients":"配料"},"search":{"placeholder":"搜索配方"}},"empty":{"title":"添加您的第一个配方","subtitle":"创建配方以标准化您的食品制备流程","action":"添加配方"},"actions":{"add":"添加配方"}},"serving_sequence":{"title":"上菜顺序","add":"添加顺序","update":"更新顺序","columns":{"name":"顺序名称"},"empty":{"title":"没有上菜顺序","subtitle":"设置订单顺序,以确保用餐体验流畅有序。"}},"group":{"title":"组","add":"添加组","update":"更新组","option":{"title":"产品","link_products":"链接产品","add_option":"添加选项","product_title":"名称","product_title_required":"产品标题为必填项","price":"价格 ({symbol})","inventory":"库存","variant":"规格","code":"代码","is_default":"默认","should_link_at_least_one_variant":"至少需要链接\\"{name}\\"的一个规格"},"types":{"normal":"正常","product":"产品","dynamic":"动态"},"select":{"title":"选择组","subtitle":"选择组以应用更改"},"empty":{"title":"未找到组","subtitle":"看起来您还没有添加附加组。"},"search":{"placeholder":"搜索组"},"type":{"title":"组:{type} 类型","all":"所有类型","normal":"正常类型","product":"产品类型","dynamic":"动态类型"},"list":{"items_linked":"{count} 个项目已链接","products_linked":"{count} 个产品已链接","columns":{"name":"组名称","products":"产品","type":"类型","applied_products":"已应用产品"},"types":{"normal":"正常","product":"产品","dynamic":"动态"},"variants":"{ count } 种规格","more_items":"与其他 { count } 个"},"actions":{"add":"添加组","duplicate":{"title":"复制组","message":"您确定要复制 {name} 吗?"},"apply_product":"应用产品","duplicate_action":"复制"},"dialogs":{"delete":{"title":"删除组","message":"您确定要删除 {name} 吗?"},"update":{"title":"更新组"}}},"migrate":{"title":"迁移到新版本","description":"您想迁移到新版本吗?一旦迁移,将无法恢复到旧版本。","message":"将您的菜单迁移到新版本,以享受更多功能。新菜单的内容将与当前相同。","notification":{"title":"新版本的菜单已发布!","description":"将当前菜单版本迁移到最新版本,以享受更多功能,例如产品顺序分发、上菜顺序、调度器等!您的内容和当前设置将被保留。"},"errors":{"no_restaurant":"至少需要一个餐厅才能迁移","pos_version":"升级 POS 到 V{version} 以使用新菜单:{restaurants}"}},"scheduler":{"title":"调度器","select":{"title":"选择调度器","all_time":"全天"},"empty":{"title":"未找到调度器","subtitle":"添加调度器以安排产品显示时间。","action":"添加调度器"},"table":{"columns":{"name":"调度器名称","repeat":"重复","period":" 时段","products":"应用产品"},"products_linked":"{count} 个项目已链接","search":{"placeholder":"搜索调度器"}},"repeat":{"daily":"每日","weekdays":"工作日","weekends":"周末","except":"每日除外 {day}","range":"{start} 到 {end}"},"days":{"monday":"周一","tuesday":"周二","wednesday":"周三","thursday":"周四","friday":"周五","saturday":"周六","sunday":"周日"},"dialog":{"add":{"title":"添加调度器","action":"添加"},"update":{"title":"更新调度器","action":"更新"},"sections":{"detail":{"title":"调度器详情","name":{"label":"调度器名称","placeholder":"占位符","required":"必填项"}},"availability":{"title":"可用性","daily":"每日","weekly":"每周"},"period":{"title":"启用时段","all_day":"全天","custom":"自定义时段","add":"添加时段"},"autolink":{"title":"自动链接产品","label":"自动链接产品","sublabel":"根据过滤器自动链接产品","all_items":"自动链接所有项目","filter_message":"自动链接符合以下过滤条件的项目。","tooltip":"您可以在过滤值中使用通配符('*' 用于任何字符,'$' 用于任何数字字符)。例如,A*1 匹配 A1、AG1、AC51,但不匹配 A2、B1、C9、A$ 匹配 A1、A11、A124,但不匹配 AQ1、AG1、AC"},"filter":{"add":"添加过滤器","matches":"匹配","or":"或","types":{"code":"代码","category":"分类"},"placeholder":{"category":"选择分类"}},"products":{"title":"应用产品","link":"链接产品"}},"actions":{"cancel":"取消"}},"dialogs":{"remove":{"title":"移除调度器","message":"您确定要移除调度器 {name} 吗?"}}},"revert":{"title":"恢复菜单","description":"将 {name} 的菜单恢复到上次发布的版本。如果它不在上次发布的版本中,则将外送目录设置为主目录。","labels":{"restaurant":"餐厅","revert_to":"恢复到","default":"默认","pos_takeaway":"POS 外带","pickup":"自取","additional_catalogs":"附加目录"}},"remy":{"title":"Remy","description":"您的 AI 助手","actions":{"start":"与 Remy 开始","close":"关闭 Remy"},"messages":{"welcome":"你好!我是 Remy,您的 AI 助手。今天我能为您做什么?","thinking":"正在思考...","error":"抱歉,我遇到了错误。请再试一次。"}},"picker":{"title":"选择 {type}","search":"搜索 {type}","no_results":"未找到 {type}","selected":"{count} 已选择"},"apply_product":{"title":"应用产品","link":{"title":"链接产品","subtitle":"链接产品以应用更改"},"table":{"category_count":"{name} ({count})","inventory":"库存","value":"值:{values}"}},"catalog":{"title":"目录","detail":"目录详情","main":"主产品","form":{"name":"目录名称","tax":{"title":"税计算","auto":{"label":"自动","sublabel":"所有价格默认排除,当通过外送公司订购时将自动变为含税"},"manual":{"label":"手动","sublabel":"您可以为此目录指定自己的税计算"},"inclusive":"{code} 包含"},"link":{"title":"链接产品配置","auto_link":{"label":"自动链接项目","sublabel":"自动将产品链接至主目录以供可用性"},"options":{"all":"可供所有人使用","pos_only":"仅在 POS 上订购"}},"markup":{"title":"价格加价配置","auto":{"label":"自动加价价格","sublabel":"自动加价价格适用于目录、组和调度"},"add":"添加加价配置","config":"配置 {number}","percentage":"加价百分比:{value}%","products":"{count} 个产品已链接","all_items":"适用于所有项目"}},"validation":{"name_used":"目录名称已使用","name_required":"目录名称必填"},"edit":{"back":"返回目录","export":"导出","import":"导入","link_product":"链接产品","apply_scheduler":"应用调度器","tabs":{"product":"产品","group":"组","takeaway":"外带","setting":"设置"},"scheduler":{"remove":{"title":"移除调度器","message":"您确定要移除调度器 {name} 吗?"}}},"usage":{"title":"目录概览","tax_calculation":"税计算","products":"{count} 个产品","restaurant":"餐厅","usage":"使用"},"table":{"columns":{"title":"目录标题","tax_calculation":"税计算","auto_link":"自动链接项目"}},"empty":{"title":"构建您的菜单目录","subtitle":"使用目录组织菜单。添加产品、设置价格并根据用餐、外带或外送进行定制。"},"actions":{"add":"添加目录","view_usage":"目录概览"},"dialogs":{"remove":{"title":"移除目录","message":"您确定要移除 {name} 吗?","error":"目录被 {restaurants} 家餐厅使用"}}},"currency":{"input":{"field":"字段"}},"order":{"from":{"options":{"all":"可供所有人使用","pos_only":"仅在 POS 上订购","none":"无"}}},"inventory":{"title":"库存","subtitle":"调整配料并自定义产品配方","columns":{"product_name":"产品名称","ingredient":"配料","recipe":"配方"},"status":{"sku_linked":"已链接 {count} 个配料","recipe_linked":"已链接 {count} 个配方","not_set":"未设置"},"dialog":{"title":"{name} 库存"},"form":{"title":"库存","product_name":"产品名称"},"binding":{"recipe":{"title":"配方","columns":{"name":"配方","amount":"数量"}},"ingredient":{"title":"配料","columns":{"name":"配料","amount":"数量","unit":"单位"},"select_unit":"选择单位","loop_warning":"哎呀!检测到循环。请验证或删除它。"},"link":{"title":"链接 {type}","recipe":"配方","ingredient":"配料"}}},"link_product":{"title":"应用产品"},"catalog_scheduler":{"title":"更新产品来源","subtitle":"选择目录和调度器以更新产品"},"apply_products":{"category":{"count":"{selected}/{total}"}},"markup":{"dialog":{"title":{"add":"添加加价配置","update":"更新加价配置"},"fields":{"percentage":{"label":"加价百分比","placeholder":"0","required":"加价百分比必填"}},"options":{"all":"适用于所有产品","custom":"自定义产品"},"products":{"link":"链接产品","count":"{count} 个产品已链接"}}},"import":{"dialog":{"title":"导入产品","info":"请不要更改原始模板中的任何标题行,否则导入将失败。","fields":{"type":"菜单类型","file":{"replace":"替换文件"}},"actions":{"import":"导入"},"errors":{"select_file":"请选择要导入的文件"}}},"product":{"form":{"title":{"add":"添加产品","update":"更新产品"},"summary":{"title":"产品摘要","fields":{"code":"产品代码","name":"产品名称","category":"分类","order_from":"下单来源","selling_price":"销售价格","tax":"税","inventory":"库存","takeaway":"外带"}},"sections":{"general":{"title":"通用设置","description":"使用不同的通用设置"},"tagging":{"title":"标签","subtitle":"通过标签对产品进行分组,以简化报告和管理"},"price":{"title":"更新价格","description":"使用不同的价格设置"},"print":{"title":"更新打印","description":"使用不同的打印设置"},"variant":{"title":"更新规格","description":"使用不同的规格设置"},"group":{"title":"更新组","description":"使用不同的组设置"},"inventory":{"title":"更新库存","description":"使用不同的库存设置"},"takeaway":{"title":"更新外带","description":"使用不同的外带设置"}},"detail":{"title":"产品详情","fields":{"code":{"label":"产品代码","placeholder":"无代码"},"name":{"label":"产品名称","required":"名称必填","duplicate_warning":"此产品与 {count} 其他项目共享相同名称。它们将在报告中作为一种产品分组。"},"description":{"label":"描述","optional":"(可选)","placeholder":"无描述"}},"category":{"label":"分类","required":"分类必填","add_new":"添加新分类","add_first":"请先添加产品分类","options":{"product":{"label":"作为产品或附加项销售","sublabel":"产品可单独销售,也可作为附加项销售"},"addon":{"label":"仅作为附加项销售","sublabel":"产品将作为附加项出现"}}},"order_from":{"label":"下单来源","default":"跟随主目录"}},"group":{"title":"组","subtitle":"为您的产添加组以作为套餐销售","add":"添加组","circularError":"检测到循环链接,组 {groupName} 已链接到产品 {productName}","columns":{"title":"组标题","type":"类型"}},"price":{"title":"价格","fields":{"selling_price":{"label":"销售价格","required":"价格必填"},"tax":{"label":"税选项不可用","label_with_code":"{code}(适用于餐厅配置 {code} 已设置)"}},"settings":{"title":"价格设置","open_price":{"label":"开放价格","sublabel":"允许在不获得许可的情况下调整价格"},"sell_by_unit":{"label":"按单位销售","sublabel":"按特定单位(重量、长度等)销售产品。","per_unit":{"label":"每","placeholder":"输入数量","required":"每单位必填","min":"每单位必须大于 0"},"unit":{"placeholder":"输入单位","required":"单位必填"}},"track_costing":{"label":"跟踪成本"},"min_price":{"label":"在应用折扣后有最低价格"}}},"print":{"title":"打印","config":{"label":"打印配置","group_parent":{"label":"与父级组","sublabel":"在作为附加项提供时打印此产品及其父级"}},"kds":{"label":"KDS 配置","options":{"all":{"label":"一次性发送","description":"将产品一次性发送至所有部门,以加快准备速度"},"sequential":{"label":"顺序分发","description":"将产品按顺序发送至每个部门,逐步准备"}}},"routes":{"label":"链接路线","add":"添加路线"}},"takeaway":{"title":"外带","subtitle":"选择外带费用以添加到产品中","columns":{"variant":"规格","product":"产品","takeaway":"外带"},"options":{"follows_main":"跟随主目录","no_preset":"没有预设外带","add_new":"添加新外带"}},"variant":{"title":"规格","subtitle":"添加选项,如大小、颜色或类型","add":"添加规格","columns":{"variant":"规格","code":"代码","order_from":"下单来源","price":"价格","min_price":"最低价格"},"validation":{"max_variants":"您只能添加 {max} 个规格"},"placeholders":{"no_code":"无代码","follow_general":"跟随通用"}}},"empty":{"with_create":{"title":"添加您的产品","subtitle":"首先通过进货您的商店,为您的顾客提供他们喜爱的产品","action":"添加产品"},"no_scheduler":{"title":"没有产品链接","subtitle":"通过从主目录链接产品来添加此目录中的产品。"},"with_scheduler":{"title":"没有应用产品","subtitle":"通过从主目录链接产品来应用此调度器中的产品。"}},"table":{"columns":{"code":"代码","name":"产品名称","category":"分类","price":"价格 ({ currency })","order_from":"下单来源","tagging":"标签"},"bulk_edit":{"title":"批量编辑产品","actions":{"reset_all":"重置所有","save":"保存"}},"selection":{"count":"{count} 项已选择","actions":{"deselect_all":"取消选择所有","remove":"移除"}},"empty":{"title":"添加您的产品","subtitle":"首先通过进货您的商店,为您的顾客提供他们喜爱的产品","actions":{"add":"添加产品","import":"导入"}},"search":{"placeholder":"搜索产品"},"validation":{"name_required":"名称必填","price_min":"价格必须大于或等于 0"},"tagging":{"all":"所有标签","expand":"+ {count} 个","collapse":"收起"}}},"setting":{"catalog":{"title":"目录详情","fields":{"name":{"label":"目录名称","required":"目录名称必填","used":"目录名称已使用"}},"warnings":{"delivery":"此目录正在被外送公司和其他订单方法使用。这可能会导致价格计算错误,请审查每个目录使用的价格。"}},"tax":{"title":"税计算","modes":{"auto":{"label":"自动","sublabel":"所有价格默认排除,当通过外送公司订购时将自动变为含税"},"manual":{"label":"手动","sublabel":"您可以为此目录指定自己的税计算"}},"inclusive":"{code} 包含"},"link":{"title":"链接产品配置","auto_link":{"label":"自动链接项目","sublabel":"自动将产品链接至主目录以供可用性"},"options":{"all":"可供所有人使用","pos_only":"仅在 POS 上订购"}},"markup":{"title":"价格加价配置","auto_markup":{"label":"自动加价价格","sublabel":"自动加价价格适用于目录、组和调度"},"add":"添加加价配置","config":"配置 {number}","percentage":"加价百分比:{value}%","products":{"all":"适用于所有产品","linked":"{count} 个产品已链接"}}},"takeaway":{"actions":{"add":"添加外带"},"title":"外带","add":"添加外带","update":"更新外带","columns":{"title":"外带标题","price":"价格"},"placeholders":{"title":"在此输入外带标题"},"empty":{"title":"未找到外带","subtitle":"看起来您还没有创建外带。","action":"添加外带"},"table":{"columns":{"name":"外带名称","price":"价格 ({symbol})","products":"应用产品"},"items_linked":"{count} 项已链接","search":{"placeholder":"搜索外带"}}},"thumbnail":{"alt":{"default":"项目","with_name":"{name}"}},"cooking_guide":{"title":"烹饪指南","empty":{"title":"添加烹饪指南","subtitle":"烹饪指南配置工具使商家能够为多个分店的标准化烹饪说明。","action":"添加指南"},"table":{"columns":{"name":"指南名称","products":"已链接产品","steps":"{count} 步"},"search":{"placeholder":"搜索指南"},"mobile":{"products_linked":"{count} 个产品已链接"}},"dialogs":{"remove":{"title":"移除烹饪指南","message":{"prefix":"您确定要移除烹饪指南 ","products_using":"有 ","products_count":" 个产品使用此烹饪指南。 "}}},"actions":{"add":"添加指南","remove":"移除","cancel":"取消"},"dialog":{"add":{"title":"添加指南","action":"添加"},"update":{"title":"更新指南","action":"更新"},"sections":{"guide_detail":{"title":"指南详情","name":{"label":"指南名称","placeholder":"占位符","required":"必填项"}},"steps":{"title":"步骤","add":"添加步骤","empty":"尚未添加任何步骤"},"apply_product":{"title":"应用产品","link":"链接产品","products_linked":"{count} 个产品已链接","search":"搜索"}},"actions":{"cancel":"取消"}},"step_dialog":{"add":{"title":"添加步骤","action":"添加"},"update":{"title":"更新步骤","action":"更新"},"sections":{"variables":{"title":"变量","add":"添加变量","columns":{"key":"键","value":"值"},"placeholders":{"key":"键","value":"默认值"},"validation":{"required":"必填项","lowercase":"仅小写字母","duplicate":"重复键"}},"instruction":{"title":"指令"}},"actions":{"cancel":"取消","back":"返回"}},"step_override_dialog":{"title":"自定义烹饪步骤","columns":{"instructions":"指令","variables":"变量","value":"值"},"actions":{"save":"保存","cancel":"取消"}}},"ingredient":{"title":"配料","empty":{"title":"添加您的第一个配料","subtitle":"配料是食物和饮料的重要组成部分。管理它们涉及采购高质量产品、确保存储合规性以及维护安全标准,因为它们对风味和质量有显著影响。","action":"添加配料"},"table":{"columns":{"code":"代码","name":"名称","unit":"单位"},"search":{"placeholder":"搜索配料"},"mobile":{"code":"代码:{code}","unit":"单位:{unit}"}},"actions":{"add":"添加配料"}},"print_route":{"title":"打印路线","empty":{"title":"未找到路线","subtitle":"根据您的打印目的地进行定制,以确保高效的订单管理。","action":"添加路线"},"table":{"columns":{"name":"打印路线名称","products":"已链接产品","products_count":"{count} 个产品"},"search":{"placeholder":"搜索路线"},"mobile":{"products_linked":"{count} 个产品已链接"}},"dialogs":{"remove":{"title":"移除打印路线","message":{"prefix":"您确定要移除打印路线吗? ","products_using":"有 ","products_count":" 个产品使用此打印路线。 "}}},"actions":{"add":"添加路线","remove":"移除","cancel":"取消"},"department_dialog":{"add":{"title":"添加路线","action":"添加"},"update":{"title":"更新路线","action":"更新"},"sections":{"route_detail":{"title":"路线详情","name":{"label":"路线名称","placeholder":"占位符","required":"必填项"}},"link_product":{"title":"链接产品","link":"链接产品","products_linked":"{count} 个产品已链接","search":"搜索"}},"actions":{"cancel":"取消"}}},"products":{"title":"产品","actions":{"export":"导出","import":"导入","add":"添加产品","link":"链接产品","apply_scheduler":"应用调度器"}},"publish":{"title":"发布","table":{"columns":{"restaurant":"餐厅","default":"默认","pos_takeaway":"POS 外带","pickup":"自取","version":"版本"},"search":{"placeholder":"搜索"},"status":{"latest":"最新","outdated":"已过时"}},"empty":{"title":"创建餐厅","subtitle":"您还没有创建任何餐厅。添加餐厅以开始发布菜单","action":"创建餐厅"},"actions":{"publish":"发布","publish_all":"发布所有","revert":"恢复菜单"},"labels":{"main_version":"主版本:{version}","catalog":{"main":"主","invalid":"无效目录"}},"update_catalog_dialog":{"title":"更新目录","sections":{"default":{"label":"默认目录","use_default":"使用默认"},"pos_takeaway":{"label":"POS 外带目录"},"pickup":{"label":"自取目录"},"additional":{"title":"附加目录","subtitle":"附加目录可以用于桌号"}},"actions":{"update":"更新","cancel":"取消"}}},"tax_setting":{"title":"税设置"},"menu_setting":{"title":"菜单设置","fields":{"low_stock":{"not_set":"未设置","must_be_integer":"值必须为整数","title":"在线点单的产品阈值","subtitle":"当库存低于此限制时禁用在线点单","helper_text":"如果库存达到或低于此数量,产品将被提示从在线点单中移除","updated":"菜单设置已更新"}},"tabs":{"menu_configuration":"菜单配置","price_group":"价格组"}},"price_tier":{"price_group":"价格组","description":"设置不同价格组以应用于多个目录","add_price_group":"添加价格组","group_title":"组标题","price_group_description":"当前目录已链接到价格组 \\"{group}\\"。请在主目录中管理价格。","delete_dialog":{"title":"删除价格组","message":"您确定要删除价格组 {name} 吗?","success":"价格组删除成功"},"settings_table":{"columns":{"name":"名称"}},"form":{"table":{"columns":{"name":"组标题","price":"销售价格"}}},"price_tier_config":"价格组设置","link_price_group":"链接价格组","link_price_group_description":"选择一个价格组以应用于目录。如果没有链接,将使用基础价格。","not_linked":"未链接"},"tree_editor":{"title":"菜单管理","actions":{"add_category":"添加新分类","expand_all":"展开所有","collapse_all":"折叠所有","add_product":"添加产品","delete_product":"删除产品","edit_category":"编辑","delete_category":"删除分类","link_category_to_catalog":"链接分类到目录","link_product_to_catalog":"链接产品到目录","unlink_product_from_catalog":"取消链接产品"},"labels":{"main_catalog":"主目录","all_time":"所有时间","products":"产品: {count}","variants":"规格: {count}","groups":"组: {count}","addon":"附加项","unknown":"未知","please_select_a_product_to_edit":"请选择一个产品进行编辑","no_items":"没有产品可显示"}}}`), ii = {
1811
+ menu: ai
1812
+ }, U = T(!1);
1813
+ window.addEventListener("message", (e) => {
1814
+ var t;
1815
+ ((t = e.data) == null ? void 0 : t.type) === "menu-version-notifier" && (U.value = e.data.data.isV4);
1816
+ });
1817
+ var oi = /* @__PURE__ */ ((e) => (e.OVERVIEW = "$menu-overview", e.CATALOG = "$menu-catalog", e.EDIT_CATALOG = "$menu-catalog-edit", e.EDIT_CATALOG_PRODUCT = "$menu-catalog-edit-product", e.EDIT_CATALOG_GROUP = "$menu-catalog-edit-group", e.EDIT_CATALOG_TAKEAWAY = "$menu-catalog-edit-takeaway", e.EDIT_CATALOG_SETTING = "$menu-catalog-edit-setting", e.SCHEDULER = "$menu-scheduler", e.VARIANT = "$menu-variant", e.COOKING_GUIDE = "$menu-cooking-guide", e.PRINT_ROUTE = "$menu-print-route", e.PUBLISH = "$menu-publish", e))(oi || {});
1818
+ const ui = [
1819
+ {
1820
+ path: "/",
1821
+ redirect: "$menu-products"
1822
+ },
1823
+ {
1824
+ path: "/product",
1825
+ name: "$menu-products",
1826
+ component: _(() => import("./Products-CGWuSZFG.js")),
1827
+ meta: {
1828
+ isNavItem: !0,
1829
+ i18nId: "menu.products.title"
1830
+ }
1831
+ },
1832
+ {
1833
+ path: "/category",
1834
+ name: "$menu-category",
1835
+ component: _(() => import("./Category-B1_5y7Mc.js")),
1836
+ meta: {
1837
+ isNavItem: !0,
1838
+ i18nId: "menu.category.title"
1839
+ }
1840
+ },
1841
+ {
1842
+ path: "/group",
1843
+ name: "$menu-group",
1844
+ component: _(() => import("./Group-4FKRzniJ.js")),
1845
+ meta: {
1846
+ isNavItem: !0,
1847
+ i18nId: "menu.group.title"
1848
+ }
1849
+ },
1850
+ {
1851
+ path: "/takeaway",
1852
+ name: "$menu-takeaway",
1853
+ component: _(() => import("./Takeaway-CcRWIXdA.js")),
1854
+ meta: {
1855
+ isNavItem: !0,
1856
+ i18nId: "menu.takeaway.title"
1857
+ }
1858
+ },
1859
+ {
1860
+ path: "/scheduler",
1861
+ name: "$menu-scheduler",
1862
+ component: _(() => import("./Scheduler-Dl881fmO.js")),
1863
+ meta: {
1864
+ isNavItem: !0,
1865
+ i18nId: "menu.scheduler.title"
1866
+ }
1867
+ },
1868
+ {
1869
+ path: "/variant",
1870
+ name: "$menu-variant",
1871
+ component: _(() => import("./Variant-CCtG3acp.js")),
1872
+ meta: {
1873
+ isNavItem: !0,
1874
+ i18nId: "menu.variant.title"
1875
+ }
1876
+ },
1877
+ {
1878
+ path: "/recipe",
1879
+ name: "$menu-recipe",
1880
+ component: _(() => import("./Recipe-CYCPMkar.js")),
1881
+ meta: {
1882
+ isNavItem: () => !U.value,
1883
+ i18nId: "menu.recipe.title"
1884
+ }
1885
+ },
1886
+ {
1887
+ path: "/ingredient",
1888
+ name: "$menu-ingredient",
1889
+ component: _(() => import("./Ingredient-BiIebw2u.js")),
1890
+ meta: {
1891
+ isNavItem: () => !U.value,
1892
+ i18nId: "menu.ingredient.title"
1893
+ }
1894
+ },
1895
+ {
1896
+ path: "/unit",
1897
+ name: "$menu-unit",
1898
+ component: _(() => import("./Unit-Cux3fhlO.js")),
1899
+ meta: {
1900
+ isNavItem: () => !U.value,
1901
+ i18nId: "menu.unit.title"
1902
+ }
1903
+ },
1904
+ {
1905
+ path: "/cooking-guide",
1906
+ name: "$menu-cooking-guide",
1907
+ component: _(() => import("./CookingGuide-L4a90U-7.js")),
1908
+ meta: {
1909
+ isNavItem: !0,
1910
+ i18nId: "menu.cooking_guide.title"
1911
+ }
1912
+ },
1913
+ {
1914
+ path: "/print-route",
1915
+ name: "$menu-print-route",
1916
+ component: _(() => import("./PrintRoute-Cne9zCcz.js")),
1917
+ meta: {
1918
+ isNavItem: !0,
1919
+ i18nId: "menu.print_route.title"
1920
+ }
1921
+ },
1922
+ {
1923
+ path: "/serving-sequence",
1924
+ name: "$menu-serving-sequence",
1925
+ component: _(() => import("./ServingSequence-C1EmqZWu.js")),
1926
+ meta: {
1927
+ isNavItem: () => U.value,
1928
+ i18nId: "menu.serving_sequence.title"
1929
+ }
1930
+ },
1931
+ {
1932
+ path: "/publish",
1933
+ name: "$menu-publish",
1934
+ component: _(() => import("./Publish-zzFK26fy.js")),
1935
+ meta: {
1936
+ isNavItem: !0,
1937
+ i18nId: "menu.publish.title"
1938
+ }
1939
+ },
1940
+ {
1941
+ path: "/:pathMatch(.*)*",
1942
+ redirect: "/catalog"
1943
+ },
1944
+ {
1945
+ path: "/setting",
1946
+ name: "$menu-menu-setting",
1947
+ component: _(() => import("./MenuSetting-Dqd5iQG6.js")),
1948
+ meta: {
1949
+ isNavItem: !0,
1950
+ i18nId: "menu.menu_setting.title"
1951
+ }
1952
+ },
1953
+ {
1954
+ path: "/taxsetting",
1955
+ name: "$menu-tax-setting",
1956
+ redirect: "/setting"
1957
+ }
1958
+ ], di = [
1959
+ {
1960
+ path: "/catalog",
1961
+ name: "$menu-catalog",
1962
+ component: _(() => import("./Catalog-DLqeJUzk.js")),
1963
+ meta: {
1964
+ isNavItem: !0,
1965
+ i18nId: "menu.catalog.title"
1966
+ }
1967
+ },
1968
+ {
1969
+ path: "/catalog/edit/:id",
1970
+ component: _(() => import("./_id_-Mp6ineI6.js")),
1971
+ name: "$menu-catalog-edit",
1972
+ children: [
1973
+ {
1974
+ path: "/catalog/edit/:id",
1975
+ redirect: {
1976
+ name: "$menu-catalog-edit-product"
1977
+ /* EDIT_CATALOG_PRODUCT */
1978
+ }
1979
+ },
1980
+ {
1981
+ path: "/catalog/edit/:id/product",
1982
+ component: _(() => import("./Product-kFxciKdY.js")),
1983
+ name: "$menu-catalog-edit-product"
1984
+ /* EDIT_CATALOG_PRODUCT */
1985
+ },
1986
+ {
1987
+ path: "/catalog/edit/:id/group",
1988
+ component: _(() => import("./Group-Cggfw5se.js")),
1989
+ name: "$menu-catalog-edit-group"
1990
+ /* EDIT_CATALOG_GROUP */
1991
+ },
1992
+ {
1993
+ path: "/catalog/edit/:id/takeaway",
1994
+ component: _(() => import("./Takeaway-DIrpbY-C.js")),
1995
+ name: "$menu-catalog-edit-takeaway"
1996
+ /* EDIT_CATALOG_TAKEAWAY */
1997
+ },
1998
+ {
1999
+ path: "/catalog/edit/:id/setting",
2000
+ component: _(() => import("./Setting-CwAoMp-i.js")),
2001
+ name: "$menu-catalog-edit-setting"
2002
+ /* EDIT_CATALOG_SETTING */
2003
+ }
2004
+ ]
2005
+ }
2006
+ ], ni = "treeEditorOpen", pi = () => {
2007
+ window.postMessage({ type: ni }, "*");
2008
+ }, mi = _(() => import("./App-DohOU1oV.js"));
2009
+ function gi(e, t) {
2010
+ e.use(Ja);
2011
+ }
2012
+ const fi = {
2013
+ "en-US": Za,
2014
+ "zh-CN": ii,
2015
+ "th-TH": ti
2016
+ };
2017
+ export {
2018
+ mi as F,
2019
+ si as I,
2020
+ oi as R,
2021
+ ni as T,
2022
+ Ka as _,
2023
+ gi as a,
2024
+ ci as b,
2025
+ di as c,
2026
+ fi as i,
2027
+ pi as o,
2028
+ ui as r,
2029
+ Wa as u
2030
+ };