@feedmepos/mf-menu-portal 0.0.0-stage → 1.0.1-dev.1

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 (263) hide show
  1. package/README.md +30 -2
  2. package/dist/AddPriceGroupDialog.vue_vue_type_script_setup_true_lang-DhKyG3gY.js +20 -0
  3. package/dist/App-C6k--u1c.js +8316 -0
  4. package/dist/ApplyProduct.vue_vue_type_script_setup_true_lang-C9OSr8ft.js +98 -0
  5. package/dist/BindingLinkDialog.vue_vue_type_script_setup_true_lang-BZVQRyRI.js +180 -0
  6. package/dist/BindingTable.vue_vue_type_script_setup_true_lang-DBzjWI_6.js +179 -0
  7. package/dist/Catalog-DEYN4dMN.js +374 -0
  8. package/dist/CatalogBinding-NnPKdPvx.js +315 -0
  9. package/dist/CatalogEditTabs.vue_vue_type_script_setup_true_lang-OshqaPTE.js +97 -0
  10. package/dist/CatalogEditor.vue_vue_type_script_setup_true_lang-poznuDXu.js +447 -0
  11. package/dist/CatalogLinkProductAction.vue_vue_type_script_setup_true_lang-BSMAIkQ2.js +117 -0
  12. package/dist/Category-BdUP0o34.js +13 -0
  13. package/dist/Category-CkQiwP9e.js +52 -0
  14. package/dist/CategoryList.vue_vue_type_script_setup_true_lang-UgNVpYgp.js +797 -0
  15. package/dist/CookingGuide-CtDkm74r.js +842 -0
  16. package/dist/FormItem.vue_vue_type_script_setup_true_lang-C2S6QCyR.js +26 -0
  17. package/dist/FormSection.vue_vue_type_script_setup_true_lang-pY-_msnM.js +1774 -0
  18. package/dist/Group-D2HngOjr.js +52 -0
  19. package/dist/Group-DSj7_16V.js +13 -0
  20. package/dist/GroupList.vue_vue_type_script_setup_true_lang-BmmsSKTt.js +2183 -0
  21. package/dist/Ingredient-BHqz7kjQ.js +463 -0
  22. package/dist/LinkProductSideSheet.vue_vue_type_script_setup_true_lang-D9jK-Fhn.js +709 -0
  23. package/dist/ListCountTag.vue_vue_type_script_setup_true_lang-0bjk8Aly.js +15 -0
  24. package/dist/MenuSetting-DF-cJH7N.js +1228 -0
  25. package/dist/OrderPacing-CejS9dEI.js +698 -0
  26. package/dist/OrderPacingFields.vue_vue_type_script_setup_true_lang-C2mixGUk.js +55 -0
  27. package/dist/PageLayout.vue_vue_type_script_setup_true_lang-B3szUH39.js +41 -0
  28. package/dist/Preview-1C7jGJuY.js +327 -0
  29. package/dist/PriceTierNotice.vue_vue_type_script_setup_true_lang-CxKHCptJ.js +26 -0
  30. package/dist/PrintRoute-BNnMcgTf.js +473 -0
  31. package/dist/Product-BoUKxogB.js +44 -0
  32. package/dist/ProductChipSummary.vue_vue_type_script_setup_true_lang-D8DygCBl.js +110 -0
  33. package/dist/ProductEditorHost.vue_vue_type_script_setup_true_lang-Bm8_FTvr.js +83 -0
  34. package/dist/ProductFilterMenu.vue_vue_type_script_setup_true_lang-Cgc0Ms_n.js +101 -0
  35. package/dist/ProductGroupCreateSheet.vue_vue_type_script_setup_true_lang-Cx_mW05R.js +1246 -0
  36. package/dist/ProductImageEditorDialog.vue_vue_type_script_setup_true_lang-CUeYaXYg.js +1955 -0
  37. package/dist/ProductInlineCreateHost.vue_vue_type_script_setup_true_lang-CeYyZX7g.js +5401 -0
  38. package/dist/ProductInternalTools-b3sy8bWy.js +2147 -0
  39. package/dist/ProductInventoryDialog-DO0D8e3Z.js +4 -0
  40. package/dist/ProductInventoryDialog.vue_vue_type_script_setup_true_lang-y9Mz__o9.js +187 -0
  41. package/dist/ProductList.vue_vue_type_script_setup_true_lang-n_UYIwwt.js +10353 -0
  42. package/dist/ProductVariantTranslationSheet.vue_vue_type_script_setup_true_lang-ClG3Prfm.js +218 -0
  43. package/dist/Products-7vlFJB0P.js +155 -0
  44. package/dist/Publish-DTP-CgV-.js +1261 -0
  45. package/dist/Recipe-C1W8_15H.js +350 -0
  46. package/dist/Scheduler-JRjozwP_.js +637 -0
  47. package/dist/ServingSequence-BGT5m7JB.js +336 -0
  48. package/dist/Setting-CS_M1gMN.js +173 -0
  49. package/dist/Subcategory-Cgy9CQCz.js +412 -0
  50. package/dist/Takeaway-Bpo9XA-j.js +48 -0
  51. package/dist/Takeaway-DO2dmFGP.js +13 -0
  52. package/dist/TakeawayList.vue_vue_type_script_setup_true_lang-C7KexF7H.js +554 -0
  53. package/dist/TranslationLanguageSelector.vue_vue_type_script_setup_true_lang-BJZ6VcrT.js +161 -0
  54. package/dist/TranslationSideSheet.vue_vue_type_script_setup_true_lang-B0j2PNih.js +158 -0
  55. package/dist/TranslationViewChip.vue_vue_type_script_setup_true_lang-CAkLEmSA.js +69 -0
  56. package/dist/TreeEditorOpenner.vue_vue_type_script_setup_true_lang-BHxmPO7F.js +1213 -0
  57. package/dist/Unit-Bn5UzMp1.js +385 -0
  58. package/dist/Variant-DmeGEEkw.js +538 -0
  59. package/dist/_id_-DC1dJIaj.js +28 -0
  60. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  61. package/dist/app-Bd7W2PYm.js +2008 -0
  62. package/dist/app.js +8 -0
  63. package/dist/apps/mf-menu/src/App.vue.d.ts +2 -0
  64. package/dist/apps/mf-menu/src/Entry.vue.d.ts +4 -0
  65. package/dist/apps/mf-menu/src/app.d.ts +16771 -0
  66. package/dist/apps/mf-menu/src/assets/icons/index.d.ts +4 -0
  67. package/dist/apps/mf-menu/src/components/CatalogBindingList.vue.d.ts +9 -0
  68. package/dist/apps/mf-menu/src/components/CatalogList.vue.d.ts +6 -0
  69. package/dist/apps/mf-menu/src/components/CategoryImageField.vue.d.ts +17 -0
  70. package/dist/apps/mf-menu/src/components/CategoryList.vue.d.ts +28 -0
  71. package/dist/apps/mf-menu/src/components/Fields/RangeSlider.vue.d.ts +23 -0
  72. package/dist/apps/mf-menu/src/components/GroupList.vue.d.ts +28 -0
  73. package/dist/apps/mf-menu/src/components/GroupTranslationSideSheet.vue.d.ts +14 -0
  74. package/dist/apps/mf-menu/src/components/IngredientList.vue.d.ts +15 -0
  75. package/dist/apps/mf-menu/src/components/MenuHeaderContext.vue.d.ts +2 -0
  76. package/dist/apps/mf-menu/src/components/MenuRestaurantSelector.vue.d.ts +7 -0
  77. package/dist/apps/mf-menu/src/components/MenuSetting/AddMemberTierDialog.vue.d.ts +2 -0
  78. package/dist/apps/mf-menu/src/components/MenuSetting/AddPriceGroupDialog.vue.d.ts +2 -0
  79. package/dist/apps/mf-menu/src/components/MenuSetting/ConfigurationTab.vue.d.ts +6 -0
  80. package/dist/apps/mf-menu/src/components/MenuSetting/MemberPricingTab.vue.d.ts +6 -0
  81. package/dist/apps/mf-menu/src/components/MenuSetting/PriceGroupTab.vue.d.ts +6 -0
  82. package/dist/apps/mf-menu/src/components/MenuSetting/RuleGroupsTab.vue.d.ts +6 -0
  83. package/dist/apps/mf-menu/src/components/Navigator.vue.d.ts +2 -0
  84. package/dist/apps/mf-menu/src/components/OrderPacingList.vue.d.ts +6 -0
  85. package/dist/apps/mf-menu/src/components/PriceTier/PriceTierNotice.vue.d.ts +6 -0
  86. package/dist/apps/mf-menu/src/components/PrintRouteList.vue.d.ts +6 -0
  87. package/dist/apps/mf-menu/src/components/Product/LocalizedCurrencySymbol.vue.d.ts +5 -0
  88. package/dist/apps/mf-menu/src/components/Product/ProductAttributeFilter.vue.d.ts +13 -0
  89. package/dist/apps/mf-menu/src/components/Product/ProductCategorySelector.vue.d.ts +11 -0
  90. package/dist/apps/mf-menu/src/components/Product/ProductChipSummary.vue.d.ts +9 -0
  91. package/dist/apps/mf-menu/src/components/Product/ProductChoicePicker.vue.d.ts +15 -0
  92. package/dist/apps/mf-menu/src/components/Product/ProductEditorHost.vue.d.ts +26 -0
  93. package/dist/apps/mf-menu/src/components/Product/ProductFilterMenu.vue.d.ts +26 -0
  94. package/dist/apps/mf-menu/src/components/Product/ProductForm.vue.d.ts +42 -0
  95. package/dist/apps/mf-menu/src/components/Product/ProductFormSection.vue.d.ts +41 -0
  96. package/dist/apps/mf-menu/src/components/Product/ProductGroupCreateSheet.vue.d.ts +19 -0
  97. package/dist/apps/mf-menu/src/components/Product/ProductGroupSheet.vue.d.ts +56 -0
  98. package/dist/apps/mf-menu/src/components/Product/ProductInlineCategoryCreateField.vue.d.ts +10 -0
  99. package/dist/apps/mf-menu/src/components/Product/ProductInlineCreateHost.vue.d.ts +38 -0
  100. package/dist/apps/mf-menu/src/components/Product/ProductInlineSubcategoryCreateField.vue.d.ts +10 -0
  101. package/dist/apps/mf-menu/src/components/Product/ProductInventoryDialog.vue.d.ts +12 -0
  102. package/dist/apps/mf-menu/src/components/Product/ProductLocaleBadge.vue.d.ts +6 -0
  103. package/dist/apps/mf-menu/src/components/Product/ProductMemberPriceTooltip.vue.d.ts +6 -0
  104. package/dist/apps/mf-menu/src/components/Product/ProductMoneyField.vue.d.ts +25 -0
  105. package/dist/apps/mf-menu/src/components/Product/ProductOverviewSheet.vue.d.ts +11 -0
  106. package/dist/apps/mf-menu/src/components/Product/ProductPacingSheet.vue.d.ts +13 -0
  107. package/dist/apps/mf-menu/src/components/Product/ProductPriceTierButton.vue.d.ts +11 -0
  108. package/dist/apps/mf-menu/src/components/Product/ProductPricingSheet.vue.d.ts +26 -0
  109. package/dist/apps/mf-menu/src/components/Product/ProductPrintRouteSheet.vue.d.ts +12 -0
  110. package/dist/apps/mf-menu/src/components/Product/ProductQuantityField.vue.d.ts +16 -0
  111. package/dist/apps/mf-menu/src/components/Product/ProductSummaryCard.vue.d.ts +9 -0
  112. package/dist/apps/mf-menu/src/components/Product/ProductTakeawaySheet.vue.d.ts +12 -0
  113. package/dist/apps/mf-menu/src/components/Product/ProductTranslationDialog.vue.d.ts +16 -0
  114. package/dist/apps/mf-menu/src/components/Product/ProductVariantCreateSheet.vue.d.ts +12 -0
  115. package/dist/apps/mf-menu/src/components/Product/ProductVariantTranslationSheet.vue.d.ts +13 -0
  116. package/dist/apps/mf-menu/src/components/Product/inlineCreate.d.ts +23 -0
  117. package/dist/apps/mf-menu/src/components/Product/labels.d.ts +15 -0
  118. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageBadge.vue.d.ts +7 -0
  119. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageDownloadDialog.vue.d.ts +15 -0
  120. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageFormatChips.vue.d.ts +13 -0
  121. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageLegacyChip.vue.d.ts +2 -0
  122. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageProgressDialog.vue.d.ts +11 -0
  123. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageResult.vue.d.ts +14 -0
  124. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageReview.vue.d.ts +21 -0
  125. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageThumb.vue.d.ts +15 -0
  126. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageUpdateFlow.vue.d.ts +6 -0
  127. package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageUpdateSheet.vue.d.ts +34 -0
  128. package/dist/apps/mf-menu/src/components/ProductBatchImage/batchImageFiles.d.ts +53 -0
  129. package/dist/apps/mf-menu/src/components/ProductImage/ProductImageCustomFormatDialog.vue.d.ts +40 -0
  130. package/dist/apps/mf-menu/src/components/ProductImage/ProductImageEditorDialog.vue.d.ts +82 -0
  131. package/dist/apps/mf-menu/src/components/ProductImage/ProductImageField.vue.d.ts +42 -0
  132. package/dist/apps/mf-menu/src/components/ProductImage/ProductImageManageSheet.vue.d.ts +47 -0
  133. package/dist/apps/mf-menu/src/components/ProductImage/ProductImageRegenerateDialog.vue.d.ts +44 -0
  134. package/dist/apps/mf-menu/src/components/ProductImage/imageBrowser.d.ts +18 -0
  135. package/dist/apps/mf-menu/src/components/ProductList.vue.d.ts +18 -0
  136. package/dist/apps/mf-menu/src/components/PublishList.vue.d.ts +14 -0
  137. package/dist/apps/mf-menu/src/components/RecipeList.vue.d.ts +11 -0
  138. package/dist/apps/mf-menu/src/components/SchedulerList.vue.d.ts +6 -0
  139. package/dist/apps/mf-menu/src/components/ServingSequenceList.vue.d.ts +6 -0
  140. package/dist/apps/mf-menu/src/components/SubcategoryList.vue.d.ts +6 -0
  141. package/dist/apps/mf-menu/src/components/TakeawayList.vue.d.ts +26 -0
  142. package/dist/apps/mf-menu/src/components/TranslationSideSheet.vue.d.ts +36 -0
  143. package/dist/apps/mf-menu/src/components/UnitList.vue.d.ts +6 -0
  144. package/dist/apps/mf-menu/src/components/V3ToV4MigrationBanner.vue.d.ts +6 -0
  145. package/dist/apps/mf-menu/src/components/V3ToV4MigrationConfirmDialog.vue.d.ts +12 -0
  146. package/dist/apps/mf-menu/src/components/VariantList.vue.d.ts +6 -0
  147. package/dist/apps/mf-menu/src/components/catalog/CatalogEditor.vue.d.ts +14 -0
  148. package/dist/apps/mf-menu/src/components/catalog/CatalogLinkProductAction.vue.d.ts +7 -0
  149. package/dist/apps/mf-menu/src/components/catalog/CatalogUsage.vue.d.ts +6 -0
  150. package/dist/apps/mf-menu/src/components/catalog/tableSemantics.d.ts +7 -0
  151. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProduct.vue.d.ts +33 -0
  152. package/dist/apps/mf-menu/src/components/feature/CookingGuide/RemoveCookingGuideConfirmation.vue.d.ts +6 -0
  153. package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/Icon.vue.d.ts +2 -0
  154. package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/index.d.ts +1 -0
  155. package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/index.vue.d.ts +18 -0
  156. package/dist/apps/mf-menu/src/components/feature/InventoryBinding/BindingLinkDialog.vue.d.ts +49 -0
  157. package/dist/apps/mf-menu/src/components/feature/InventoryBinding/BindingTable.vue.d.ts +38 -0
  158. package/dist/apps/mf-menu/src/components/feature/LinkProduct/LinkProductSideSheet.vue.d.ts +65 -0
  159. package/dist/apps/mf-menu/src/components/feature/OrderPacing/DeleteOrderPacingConfirmation.vue.d.ts +6 -0
  160. package/dist/apps/mf-menu/src/components/feature/OrderPacing/OrderPacingFields.vue.d.ts +17 -0
  161. package/dist/apps/mf-menu/src/components/feature/PrintRoute/RemoveRouteConfirmation.vue.d.ts +6 -0
  162. package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeEditorOpenner.vue.d.ts +18 -0
  163. package/dist/apps/mf-menu/src/components/feature/TreeEditor/openner.d.ts +7 -0
  164. package/dist/apps/mf-menu/src/components/info/TextChip.vue.d.ts +13 -0
  165. package/dist/apps/mf-menu/src/components/layout/FlatInlineSort.vue.d.ts +25 -0
  166. package/dist/apps/mf-menu/src/components/layout/FormColumn.vue.d.ts +12 -0
  167. package/dist/apps/mf-menu/src/components/layout/FormItem.vue.d.ts +17 -0
  168. package/dist/apps/mf-menu/src/components/layout/FormRow.vue.d.ts +9 -0
  169. package/dist/apps/mf-menu/src/components/layout/FormSection.vue.d.ts +18 -0
  170. package/dist/apps/mf-menu/src/components/layout/FullScreenForm.vue.d.ts +31 -0
  171. package/dist/apps/mf-menu/src/components/layout/FullWrapper.vue.d.ts +9 -0
  172. package/dist/apps/mf-menu/src/components/layout/LabeledTextField.vue.d.ts +16 -0
  173. package/dist/apps/mf-menu/src/components/layout/ListCountTag.vue.d.ts +5 -0
  174. package/dist/apps/mf-menu/src/components/layout/LottieAnimation.vue.d.ts +39 -0
  175. package/dist/apps/mf-menu/src/components/layout/PageLayout.vue.d.ts +19 -0
  176. package/dist/apps/mf-menu/src/components/layout/ProgressBar.vue.d.ts +9 -0
  177. package/dist/apps/mf-menu/src/components/loading/AppLoading.vue.d.ts +20 -0
  178. package/dist/apps/mf-menu/src/components/loading/PageLoading.vue.d.ts +2 -0
  179. package/dist/apps/mf-menu/src/components/loading/index.d.ts +1 -0
  180. package/dist/apps/mf-menu/src/components/placeholder/PlaceholderView.vue.d.ts +5 -0
  181. package/dist/apps/mf-menu/src/components/preview/MenuPreview.vue.d.ts +13 -0
  182. package/dist/apps/mf-menu/src/components/preview/simulatorPort.d.ts +23 -0
  183. package/dist/apps/mf-menu/src/components/publish/PublishRevertPreview.vue.d.ts +6 -0
  184. package/dist/apps/mf-menu/src/components/publish/PublishScheduleDetails.vue.d.ts +6 -0
  185. package/dist/apps/mf-menu/src/components/publish/publishStatus.d.ts +15 -0
  186. package/dist/apps/mf-menu/src/components/translation/TranslationLanguageSelector.vue.d.ts +21 -0
  187. package/dist/apps/mf-menu/src/components/translation/TranslationViewChip.vue.d.ts +12 -0
  188. package/dist/apps/mf-menu/src/components/translation/localeName.d.ts +11 -0
  189. package/dist/apps/mf-menu/src/components/translation/localeSymbol.d.ts +15 -0
  190. package/dist/apps/mf-menu/src/composable/elementPosition.d.ts +17 -0
  191. package/dist/apps/mf-menu/src/composable/menuNotifier.d.ts +14 -0
  192. package/dist/apps/mf-menu/src/composable/navigator.d.ts +16 -0
  193. package/dist/apps/mf-menu/src/composable/useActionFeedback.d.ts +81 -0
  194. package/dist/apps/mf-menu/src/composable/useEditorValidation.d.ts +21 -0
  195. package/dist/apps/mf-menu/src/init.d.ts +1 -0
  196. package/dist/apps/mf-menu/src/main.d.ts +2 -0
  197. package/dist/apps/mf-menu/src/plugins.d.ts +4 -0
  198. package/dist/apps/mf-menu/src/router/index.d.ts +2 -0
  199. package/dist/apps/mf-menu/src/router/shared.d.ts +65 -0
  200. package/dist/apps/mf-menu/src/sdk/host.d.ts +9 -0
  201. package/dist/apps/mf-menu/src/sdk/import-export.d.ts +9 -0
  202. package/dist/apps/mf-menu/src/sdk/provide.d.ts +33 -0
  203. package/dist/apps/mf-menu/src/sdk/useReadModel.d.ts +16 -0
  204. package/dist/apps/mf-menu/src/sdk/useSdkMessage.d.ts +11 -0
  205. package/dist/apps/mf-menu/src/stores/app.d.ts +17 -0
  206. package/dist/apps/mf-menu/src/utils/ruleValueKey.d.ts +12 -0
  207. package/dist/apps/mf-menu/src/utils/worker-loader.d.ts +12 -0
  208. package/dist/apps/mf-menu/src/utils/worker.d.ts +4 -0
  209. package/dist/apps/mf-menu/src/views/Catalog/Catalog.vue.d.ts +2 -0
  210. package/dist/apps/mf-menu/src/views/Catalog/Edit/CatalogEditTabs.vue.d.ts +2 -0
  211. package/dist/apps/mf-menu/src/views/Catalog/Edit/Category.vue.d.ts +2 -0
  212. package/dist/apps/mf-menu/src/views/Catalog/Edit/Group.vue.d.ts +2 -0
  213. package/dist/apps/mf-menu/src/views/Catalog/Edit/MainSetting.vue.d.ts +2 -0
  214. package/dist/apps/mf-menu/src/views/Catalog/Edit/NamedSetting.vue.d.ts +5 -0
  215. package/dist/apps/mf-menu/src/views/Catalog/Edit/Product.vue.d.ts +2 -0
  216. package/dist/apps/mf-menu/src/views/Catalog/Edit/Setting.vue.d.ts +2 -0
  217. package/dist/apps/mf-menu/src/views/Catalog/Edit/Takeaway.vue.d.ts +2 -0
  218. package/dist/apps/mf-menu/src/views/Catalog/Edit/[id].vue.d.ts +2 -0
  219. package/dist/apps/mf-menu/src/views/CatalogBinding/CatalogBinding.vue.d.ts +2 -0
  220. package/dist/apps/mf-menu/src/views/Category/Category.vue.d.ts +2 -0
  221. package/dist/apps/mf-menu/src/views/CookingGuide/CookingGuide.vue.d.ts +2 -0
  222. package/dist/apps/mf-menu/src/views/Group/Group.vue.d.ts +2 -0
  223. package/dist/apps/mf-menu/src/views/ImportExport/ImportDiffPreview.vue.d.ts +25 -0
  224. package/dist/apps/mf-menu/src/views/ImportExport/ImportExport.vue.d.ts +9 -0
  225. package/dist/apps/mf-menu/src/views/ImportExport/ImportV3DiffPreview.vue.d.ts +26 -0
  226. package/dist/apps/mf-menu/src/views/ImportExport/PreviewImportTable.vue.d.ts +30 -0
  227. package/dist/apps/mf-menu/src/views/Ingredient/Ingredient.vue.d.ts +2 -0
  228. package/dist/apps/mf-menu/src/views/MenuManagementEditor/CategoryRenameDialog.vue.d.ts +26 -0
  229. package/dist/apps/mf-menu/src/views/MenuManagementEditor/DetailPane.vue.d.ts +23 -0
  230. package/dist/apps/mf-menu/src/views/MenuManagementEditor/EditorHistoryControls.vue.d.ts +22 -0
  231. package/dist/apps/mf-menu/src/views/MenuManagementEditor/MenuManagementEditor.vue.d.ts +10 -0
  232. package/dist/apps/mf-menu/src/views/MenuManagementEditor/RestaurantAttributesFilter.vue.d.ts +2 -0
  233. package/dist/apps/mf-menu/src/views/MenuManagementEditor/ScopeSwitcher.vue.d.ts +2 -0
  234. package/dist/apps/mf-menu/src/views/MenuManagementEditor/TreeFilter.vue.d.ts +2 -0
  235. package/dist/apps/mf-menu/src/views/MenuManagementEditor/TreePanel.vue.d.ts +9 -0
  236. package/dist/apps/mf-menu/src/views/MenuManagementEditor/TreeRow.vue.d.ts +25 -0
  237. package/dist/apps/mf-menu/src/views/MenuSetting/MenuSetting.vue.d.ts +2 -0
  238. package/dist/apps/mf-menu/src/views/OrderPacing/OrderPacing.vue.d.ts +2 -0
  239. package/dist/apps/mf-menu/src/views/Preview/Preview.vue.d.ts +2 -0
  240. package/dist/apps/mf-menu/src/views/PrintRoute/PrintRoute.vue.d.ts +2 -0
  241. package/dist/apps/mf-menu/src/views/Product/ProductInternalTools.vue.d.ts +2 -0
  242. package/dist/apps/mf-menu/src/views/Product/Products.vue.d.ts +2 -0
  243. package/dist/apps/mf-menu/src/views/Publish/Publish.vue.d.ts +2 -0
  244. package/dist/apps/mf-menu/src/views/Recipe/Recipe.vue.d.ts +2 -0
  245. package/dist/apps/mf-menu/src/views/Scheduler/Scheduler.vue.d.ts +2 -0
  246. package/dist/apps/mf-menu/src/views/ServingSequence/ServingSequence.vue.d.ts +2 -0
  247. package/dist/apps/mf-menu/src/views/Subcategory/Subcategory.vue.d.ts +2 -0
  248. package/dist/apps/mf-menu/src/views/Takeaway/Takeaway.vue.d.ts +2 -0
  249. package/dist/apps/mf-menu/src/views/Unit/Unit.vue.d.ts +2 -0
  250. package/dist/apps/mf-menu/src/views/Variant/Variant.vue.d.ts +2 -0
  251. package/dist/apps/mf-menu/src/workers/menu-compute.d.ts +1 -0
  252. package/dist/apps/mf-menu/src/workers/validate-menu.d.ts +1 -0
  253. package/dist/apps/mf-menu/tsconfig.app.tsbuildinfo +1 -0
  254. package/dist/assets/menu-compute-okel5FLc.js +260 -0
  255. package/dist/assets/validate-menu-DEFGpnQh.js +130 -0
  256. package/dist/index.vue_vue_type_script_setup_true_lang-CGPDazqs.js +57 -0
  257. package/dist/mf-menu-portal.css +1 -0
  258. package/dist/provide-Tmjfji09.js +190840 -0
  259. package/dist/ruleValueKey-BF52PuHb.js +10 -0
  260. package/dist/tableSemantics-C9WFO_I_.js +22 -0
  261. package/dist/useActionFeedback-DoFeBFpl.js +95 -0
  262. package/dist/useEditorValidation-Ctef5Bxt.js +63 -0
  263. package/package.json +79 -3
@@ -0,0 +1,1246 @@
1
+ import { defineComponent as W, computed as U, toDisplayString as $, ref as oe, watch as fe, openBlock as m, createBlock as O, withKeys as Le, createSlots as ye, withCtx as d, renderSlot as se, createElementBlock as h, createVNode as r, createCommentVNode as B, nextTick as Ae, resolveComponent as y, unref as n, createElementVNode as v, Fragment as G, renderList as Q, shallowRef as Ie, onBeforeUnmount as xe, h as _, mergeProps as ae } from "vue";
2
+ import { useI18n as X, CustomAttributesForm as ve } from "@feedmepos/mf-common";
3
+ import { useDialog as he, components as K } from "@feedmepos/ui-library";
4
+ import { RemyButton as _e } from "@feedmepos/mf-remy-panel";
5
+ import { _ as ze } from "./AddPriceGroupDialog.vue_vue_type_script_setup_true_lang-DhKyG3gY.js";
6
+ import { u as we } from "./useEditorValidation-Ctef5Bxt.js";
7
+ import { b as ke, u as ue } from "./provide-Tmjfji09.js";
8
+ import { _ as Ne } from "./TranslationSideSheet.vue_vue_type_script_setup_true_lang-B0j2PNih.js";
9
+ import { _ as J, b as Ue } from "./TranslationLanguageSelector.vue_vue_type_script_setup_true_lang-BJZ6VcrT.js";
10
+ import { a as Be, _ as le } from "./FormSection.vue_vue_type_script_setup_true_lang-pY-_msnM.js";
11
+ import { _ as re } from "./FormItem.vue_vue_type_script_setup_true_lang-C2S6QCyR.js";
12
+ import { _ as De } from "./_plugin-vue_export-helper-CHgC5LLL.js";
13
+ import { a as Ee, A as Me, _ as Ke } from "./LinkProductSideSheet.vue_vue_type_script_setup_true_lang-D9jK-Fhn.js";
14
+ import { u as Re } from "./useActionFeedback-DoFeBFpl.js";
15
+ const Fe = /* @__PURE__ */ W({
16
+ __name: "LocalizedCurrencySymbol",
17
+ props: {
18
+ currency: {}
19
+ },
20
+ setup(I) {
21
+ const S = I, { n: g } = X(), f = U(() => {
22
+ if (!S.currency) return "";
23
+ const e = g(0, {
24
+ useGrouping: !1,
25
+ minimumFractionDigits: 0,
26
+ maximumFractionDigits: 0
27
+ });
28
+ return g(0, {
29
+ style: "currency",
30
+ currency: S.currency,
31
+ currencyDisplay: "narrowSymbol",
32
+ useGrouping: !1,
33
+ minimumFractionDigits: 0,
34
+ maximumFractionDigits: 0
35
+ }).replace(e, "").trim() || S.currency;
36
+ });
37
+ return (e, k) => $(f.value);
38
+ }
39
+ }), Ge = { key: 0 }, ie = /* @__PURE__ */ W({
40
+ __name: "ProductMoneyField",
41
+ props: {
42
+ modelValue: {},
43
+ currency: {},
44
+ commitOnInput: { type: Boolean }
45
+ },
46
+ emits: ["update:modelValue"],
47
+ setup(I, { expose: S, emit: g }) {
48
+ const f = I, e = g, { n: k, locale: L } = X(), T = oe();
49
+ S({
50
+ inputEl: U(() => {
51
+ var b;
52
+ return ((b = T.value) == null ? void 0 : b.inputEl) ?? null;
53
+ }),
54
+ focus: () => {
55
+ var b, C;
56
+ return (C = (b = T.value) == null ? void 0 : b.inputEl) == null ? void 0 : C.focus();
57
+ }
58
+ });
59
+ const p = U(
60
+ () => f.modelValue === null ? "" : k(f.modelValue, {
61
+ minimumFractionDigits: 2,
62
+ maximumFractionDigits: 2,
63
+ useGrouping: !1
64
+ })
65
+ ), a = oe(p.value);
66
+ fe(p, (b) => {
67
+ a.value = b;
68
+ });
69
+ async function j() {
70
+ var z, E, q;
71
+ const b = ((E = (z = T.value) == null ? void 0 : z.inputEl) == null ? void 0 : E.value) ?? "", C = ((q = new Intl.NumberFormat(L.value).formatToParts(1.5).find((i) => i.type === "decimal")) == null ? void 0 : q.value) ?? ".", P = b.trim() === "" ? null : Number(b.replace(C, "."));
72
+ (P === null || Number.isFinite(P)) && e("update:modelValue", P), await Ae(), a.value = p.value;
73
+ }
74
+ async function l(b) {
75
+ var z;
76
+ if (a.value = String(b ?? ""), !f.commitOnInput) return;
77
+ const C = ((z = new Intl.NumberFormat(L.value).formatToParts(1.5).find((E) => E.type === "decimal")) == null ? void 0 : z.value) ?? ".", P = a.value.trim() === "" ? null : Number(a.value.replace(C, "."));
78
+ (P === null || Number.isFinite(P)) && e("update:modelValue", P);
79
+ }
80
+ function F(b) {
81
+ var C, P;
82
+ b ? (P = (C = T.value) == null ? void 0 : C.inputEl) == null || P.select() : j();
83
+ }
84
+ return (b, C) => (m(), O(J, {
85
+ ref_key: "field",
86
+ ref: T,
87
+ "model-value": a.value,
88
+ inputmode: "decimal",
89
+ "onUpdate:modelValue": l,
90
+ onFocusChanged: F,
91
+ onKeydown: Le(j, ["enter"])
92
+ }, ye({
93
+ prepend: d(() => [
94
+ b.currency ? (m(), h("span", Ge, [
95
+ r(Fe, { currency: b.currency }, null, 8, ["currency"])
96
+ ])) : B("", !0)
97
+ ]),
98
+ append: d(() => [
99
+ se(b.$slots, "append")
100
+ ]),
101
+ _: 2
102
+ }, [
103
+ b.$slots["helper-text"] ? {
104
+ name: "helper-text",
105
+ fn: d(() => [
106
+ se(b.$slots, "helper-text")
107
+ ]),
108
+ key: "0"
109
+ } : void 0
110
+ ]), 1032, ["model-value"]));
111
+ }
112
+ }), Ro = /* @__PURE__ */ W({
113
+ __name: "ProductPriceTierButton",
114
+ props: {
115
+ configured: { type: Boolean },
116
+ label: {},
117
+ disabled: { type: Boolean }
118
+ },
119
+ emits: ["open"],
120
+ setup(I, { emit: S }) {
121
+ const g = S, { t: f } = X();
122
+ return (e, k) => {
123
+ const L = y("FmButton"), T = y("FmTooltip");
124
+ return m(), O(T, {
125
+ content: n(f)("menu.price_tier.price_tier_config"),
126
+ "z-index": 999,
127
+ placement: "top"
128
+ }, {
129
+ default: d(() => [
130
+ r(L, {
131
+ icon: "price_change",
132
+ variant: "tertiary",
133
+ "text-color": "neutral-gray-400",
134
+ "overwrite-icon-outline": e.configured ? "filled" : "outline",
135
+ "aria-label": e.label,
136
+ disabled: e.disabled,
137
+ onClick: k[0] || (k[0] = (p) => g("open"))
138
+ }, null, 8, ["overwrite-icon-outline", "aria-label", "disabled"])
139
+ ]),
140
+ _: 1
141
+ }, 8, ["content"]);
142
+ };
143
+ }
144
+ }), je = { class: "flex flex-col gap-8 p-8" }, Ye = { class: "fm-typo-en-body-md-600" }, He = { class: "flex flex-col gap-4" }, qe = { key: 0 }, Je = /* @__PURE__ */ W({
145
+ __name: "ProductMemberPriceTooltip",
146
+ props: {
147
+ prices: {},
148
+ currency: {}
149
+ },
150
+ setup(I) {
151
+ const S = I, { t: g, n: f } = X(), e = U(
152
+ () => Object.entries(S.prices).flatMap(
153
+ ([k, L]) => L === null ? [] : [{ name: k, amount: L }]
154
+ )
155
+ );
156
+ return (k, L) => {
157
+ const T = y("FmIcon"), p = y("FmTooltip");
158
+ return m(), O(p, {
159
+ variant: "plain",
160
+ placement: "right",
161
+ "z-index": 100
162
+ }, {
163
+ default: d(() => [
164
+ r(T, {
165
+ name: "info",
166
+ outline: ""
167
+ })
168
+ ]),
169
+ content: d(() => [
170
+ v("div", je, [
171
+ v("p", Ye, $(n(g)("menu.member_pricing.title")), 1),
172
+ v("ul", He, [
173
+ e.value.length === 0 ? (m(), h("li", qe, $(n(g)("menu.member_pricing.tooltip.no_member_price")), 1)) : B("", !0),
174
+ (m(!0), h(G, null, Q(e.value, (a) => (m(), h("li", {
175
+ key: a.name,
176
+ class: "fm-typo-en-body-md-400"
177
+ }, $(n(g)("menu.common.labels.a11y_labelled_name", {
178
+ label: a.name,
179
+ name: n(f)(
180
+ a.amount,
181
+ k.currency ? { style: "currency", currency: k.currency, minimumFractionDigits: 2 } : { minimumFractionDigits: 2 }
182
+ )
183
+ })), 1))), 128))
184
+ ])
185
+ ])
186
+ ]),
187
+ _: 1
188
+ });
189
+ };
190
+ }
191
+ }), Qe = { class: "fm-typo-en-title-md-600" }, We = {
192
+ key: 0,
193
+ class: "flex flex-col gap-32"
194
+ }, Xe = { class: "flex flex-col fm-corner-radius-lg p-16 border border-fm-color-neutral-gray-100 gap-4" }, Ze = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, eo = {
195
+ key: 0,
196
+ class: "fm-typo-en-body-lg-600"
197
+ }, oo = { class: "flex flex-col gap-24" }, no = { class: "fm-typo-en-title-sm-600" }, to = { class: "flex flex-col gap-16" }, lo = { class: "flex flex-col gap-4" }, ao = { class: "fm-typo-en-body-lg-600" }, io = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, ro = {
198
+ key: 1,
199
+ class: "py-16 space-y-32"
200
+ }, so = { class: "space-y-8" }, uo = { class: "flex items-center justify-between" }, mo = { class: "space-y-8" }, co = { class: "fm-typo-en-body-lg-600" }, po = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, go = { class: "flex gap-8" }, Go = /* @__PURE__ */ W({
201
+ __name: "ProductPricingSheet",
202
+ props: {
203
+ session: {},
204
+ onCreatePriceGroup: { type: Function, default: void 0 },
205
+ zIndex: { default: void 0 },
206
+ mainPricingLabel: { type: Boolean, default: !0 }
207
+ },
208
+ emits: ["close", "suggest"],
209
+ setup(I, { emit: S }) {
210
+ const g = I, f = S, { t: e } = X(), k = he(), L = ke(), T = ue(g.session), p = U(
211
+ () => T.value.status === "ready" ? T.value.value : null
212
+ ), a = we(() => g.session);
213
+ function j(i, s) {
214
+ var w;
215
+ const x = a.issue(((w = p.value) == null ? void 0 : w.fieldIssues) ?? {}, `rows.${i}.amount`) ?? s.issue;
216
+ return x ? [L(x)] : [];
217
+ }
218
+ function l(i) {
219
+ var x;
220
+ const s = a.issue(
221
+ ((x = p.value) == null ? void 0 : x.fieldIssues) ?? {},
222
+ `rows.0.members.${i.key}`
223
+ ) ?? i.issue;
224
+ return s ? [L(s)] : [];
225
+ }
226
+ const F = Ie(null);
227
+ function b() {
228
+ var i;
229
+ (i = F.value) == null || i.dispose(), F.value = null;
230
+ }
231
+ function C(i) {
232
+ b(), F.value = g.session.memberEditor(i);
233
+ }
234
+ xe(b);
235
+ const P = U(() => [
236
+ {
237
+ accessorKey: "key",
238
+ header: () => e(
239
+ "menu.product.form.member_price.configure.member_selling_price.table.tier"
240
+ ),
241
+ enableSorting: !1
242
+ },
243
+ {
244
+ id: "amount",
245
+ header: () => e(
246
+ "menu.product.form.member_price.configure.member_selling_price.table.selling_price"
247
+ ),
248
+ enableSorting: !1,
249
+ cell: ({ row: i }) => _(
250
+ ie,
251
+ {
252
+ modelValue: i.original.amount,
253
+ commitOnInput: !0,
254
+ "aria-label": i.original.key,
255
+ errorMessages: l(i.original),
256
+ ...a.field(
257
+ `rows.0.members.${i.original.key}`,
258
+ (s) => {
259
+ var x, w;
260
+ return g.session.setAmount(
261
+ ((w = (x = p.value) == null ? void 0 : x.rows[0]) == null ? void 0 : w.tier) ?? null,
262
+ i.original.key,
263
+ s
264
+ );
265
+ }
266
+ )
267
+ },
268
+ {
269
+ append: () => {
270
+ var s;
271
+ return (s = p.value) != null && s.showSuggestion ? _(_e, {
272
+ pureStyling: !0,
273
+ class: "shrink-0 scale-75",
274
+ "aria-label": e("menu.product.remy.pricing"),
275
+ onClick: () => f("suggest")
276
+ }) : null;
277
+ }
278
+ }
279
+ )
280
+ }
281
+ ]), z = U(() => [
282
+ {
283
+ accessorKey: "tier",
284
+ header: () => e("menu.price_tier.form.table.columns.name"),
285
+ enableSorting: !1
286
+ },
287
+ {
288
+ id: "amount",
289
+ header: () => e("menu.price_tier.form.table.columns.price"),
290
+ enableSorting: !1,
291
+ cell: ({ row: i }) => _(ie, {
292
+ modelValue: i.original.amount,
293
+ commitOnInput: !0,
294
+ // Every tier row rendered this field under one name, so a step naming
295
+ // a particular tier's price had nothing to distinguish the rows by.
296
+ // Qualify it with the tier, as the frozen baselines name it
297
+ // ("Default selling price: DISC TIER CLEAR").
298
+ "aria-label": i.original.tier ? e("menu.common.labels.a11y_labelled_name", {
299
+ label: e(
300
+ "menu.product.form.member_price.configure.default_selling_price"
301
+ ),
302
+ name: i.original.tier
303
+ }) : e(
304
+ "menu.product.form.member_price.configure.default_selling_price"
305
+ ),
306
+ errorMessages: j(i.index, i.original),
307
+ ...a.field(
308
+ `rows.${i.index}.amount`,
309
+ (s) => g.session.setAmount(i.original.tier, null, s)
310
+ )
311
+ })
312
+ },
313
+ {
314
+ id: "members",
315
+ header: () => e("menu.price_tier.form.table.columns.member_price"),
316
+ enableSorting: !1,
317
+ cell: ({ row: i }) => {
318
+ var w;
319
+ const s = i.original.members.filter(
320
+ (D) => D.amount !== null
321
+ ).length, x = s ? e("menu.product.form.member_price.configure.title_with_tier", {
322
+ num: s
323
+ }) : e("menu.product.form.member_price.configure.title");
324
+ return _("div", { class: "flex items-center justify-between" }, [
325
+ _(
326
+ K.FmButton,
327
+ {
328
+ variant: "plain",
329
+ label: x,
330
+ // This is the nested pricing-sheet action. Keep it distinct from
331
+ // the product form's row-level "Member price" action while
332
+ // qualifying the tier, so both independently reachable surfaces
333
+ // stay semantic.
334
+ "aria-label": s ? x : i.original.tier ? e("menu.common.labels.a11y_labelled_name", {
335
+ label: e(
336
+ "menu.product.form.member_price.configure.title"
337
+ ),
338
+ name: i.original.tier
339
+ }) : void 0,
340
+ onClick: () => i.original.tier && C(i.original.tier)
341
+ },
342
+ {
343
+ default: () => _(
344
+ "span",
345
+ { class: "underline line-clamp-2 break-all" },
346
+ x
347
+ )
348
+ }
349
+ ),
350
+ _(Je, {
351
+ prices: Object.fromEntries(
352
+ i.original.members.map((D) => [D.key, D.amount])
353
+ ),
354
+ currency: (w = p.value) == null ? void 0 : w.currency
355
+ })
356
+ ]);
357
+ }
358
+ }
359
+ ]);
360
+ function E() {
361
+ var s;
362
+ if (g.session.apply()) {
363
+ f("close");
364
+ return;
365
+ }
366
+ const i = Object.entries(((s = p.value) == null ? void 0 : s.fieldIssues) ?? {}).flatMap(
367
+ ([x, w]) => (w ?? []).map((D) => ({ ...D, field: x }))
368
+ );
369
+ a.submit(async () => ({ kind: "rejected", issues: i }));
370
+ }
371
+ function q() {
372
+ g.onCreatePriceGroup && k.open({
373
+ zIndex: 200,
374
+ title: e("menu.price_tier.add_price_group"),
375
+ contentComponent: ze,
376
+ primaryActions: {
377
+ text: e("menu.category.manager.dialog.add.action"),
378
+ close: !1
379
+ },
380
+ secondaryActions: {
381
+ text: e("menu.common.actions.cancel"),
382
+ close: !0
383
+ }
384
+ }).onPrimary(async (i) => {
385
+ const s = String(i ?? "");
386
+ await g.onCreatePriceGroup(s) && (g.session.addTier(s), k.close());
387
+ });
388
+ }
389
+ return (i, s) => {
390
+ var R;
391
+ const x = y("FmTable"), w = y("FmButton"), D = y("FmSideSheet"), Z = y("ProductPricingSheet", !0);
392
+ return m(), h(G, null, [
393
+ r(D, {
394
+ "model-value": !0,
395
+ "z-index": g.zIndex ?? 300,
396
+ "max-width": ((R = p.value) == null ? void 0 : R.mode) === "members" ? 720 : 560,
397
+ "is-container": n(K).FmForm,
398
+ "is-container-props": {
399
+ onValidationSuccess: E,
400
+ blameFormChildOnValidationFailed: !0
401
+ },
402
+ "onUpdate:modelValue": s[2] || (s[2] = (N) => !N && f("close"))
403
+ }, {
404
+ "side-sheet-header": d(() => {
405
+ var N;
406
+ return [
407
+ v("p", Qe, $(n(e)(
408
+ ((N = p.value) == null ? void 0 : N.mode) === "tiers" ? "menu.price_tier.price_tier_config" : "menu.product.form.member_price.configure.title"
409
+ )), 1)
410
+ ];
411
+ }),
412
+ "side-sheet-footer": d(() => {
413
+ var N, Y, M;
414
+ return [
415
+ v("div", go, [
416
+ r(w, {
417
+ label: ((N = p.value) == null ? void 0 : N.mode) === "tiers" ? n(e)("menu.common.actions.update") : n(e)("menu.common.actions.apply"),
418
+ "aria-label": ((Y = p.value) == null ? void 0 : Y.mode) === "tiers" ? n(e)("menu.price_tier.action.update") : void 0,
419
+ variant: "primary",
420
+ size: "lg",
421
+ type: "button",
422
+ onClick: E
423
+ }, null, 8, ["label", "aria-label"]),
424
+ r(w, {
425
+ label: n(e)("menu.common.actions.cancel"),
426
+ "aria-label": ((M = p.value) == null ? void 0 : M.mode) === "tiers" ? n(e)("menu.price_tier.action.cancel") : n(e)("menu.product.form.member_price.configure.cancel"),
427
+ variant: "tertiary",
428
+ size: "lg",
429
+ onClick: s[1] || (s[1] = (ee) => f("close"))
430
+ }, null, 8, ["label", "aria-label"])
431
+ ])
432
+ ];
433
+ }),
434
+ default: d(() => {
435
+ var N, Y;
436
+ return [
437
+ ((N = p.value) == null ? void 0 : N.mode) === "members" ? (m(), h("div", We, [
438
+ v("div", Xe, [
439
+ v("p", Ze, $(n(e)("menu.product.form.member_price.configure.current_configuration")), 1),
440
+ p.value.configurationName || i.mainPricingLabel ? (m(), h("p", eo, $(p.value.configurationName ?? n(e)("menu.product.form.member_price.configure.main_pricing")), 1)) : B("", !0)
441
+ ]),
442
+ v("div", oo, [
443
+ v("p", no, $(n(e)("menu.product.form.member_price.configure.pricing_grid")), 1),
444
+ (m(!0), h(G, null, Q(p.value.rows, (M, ee) => (m(), O(ie, ae(
445
+ {
446
+ key: M.tier ?? "base",
447
+ class: "w-[258px] xs:w-full",
448
+ label: n(e)("menu.product.form.member_price.configure.default_selling_price"),
449
+ "model-value": M.amount,
450
+ "commit-on-input": "",
451
+ currency: p.value.currency,
452
+ "error-messages": j(ee, M)
453
+ },
454
+ { ref_for: !0 },
455
+ n(a).field(
456
+ `rows.${ee}.amount`,
457
+ (ne) => i.session.setAmount(M.tier, null, ne)
458
+ )
459
+ ), {
460
+ append: d(() => [
461
+ p.value.showSuggestion ? (m(), O(n(_e), {
462
+ key: 0,
463
+ "pure-styling": "",
464
+ class: "shrink-0 scale-75",
465
+ "aria-label": n(e)("menu.product.remy.pricing"),
466
+ onClick: s[0] || (s[0] = (ne) => f("suggest"))
467
+ }, null, 8, ["aria-label"])) : B("", !0)
468
+ ]),
469
+ _: 2
470
+ }, 1040, ["label", "model-value", "currency", "error-messages"]))), 128))
471
+ ]),
472
+ v("div", to, [
473
+ v("div", lo, [
474
+ v("p", ao, $(n(e)(
475
+ "menu.product.form.member_price.configure.member_selling_price.label"
476
+ )), 1),
477
+ v("p", io, $(n(e)(
478
+ "menu.product.form.member_price.configure.member_selling_price.sublabel"
479
+ )), 1)
480
+ ]),
481
+ r(x, {
482
+ "column-defs": P.value,
483
+ "row-data": [...((Y = p.value.rows[0]) == null ? void 0 : Y.members) ?? []],
484
+ "hide-footer": ""
485
+ }, null, 8, ["column-defs", "row-data"])
486
+ ])
487
+ ])) : p.value ? (m(), h("div", ro, [
488
+ v("div", so, [
489
+ v("div", uo, [
490
+ v("div", mo, [
491
+ v("p", co, $(n(e)("menu.price_tier.price_group")), 1),
492
+ v("p", po, $(n(e)("menu.price_tier.description")), 1)
493
+ ]),
494
+ g.onCreatePriceGroup ? (m(), O(w, {
495
+ key: 0,
496
+ class: "min-w-fit",
497
+ label: n(e)("menu.price_tier.add_price_group"),
498
+ icon: "add",
499
+ variant: "secondary",
500
+ onClick: q
501
+ }, null, 8, ["label"])) : B("", !0)
502
+ ]),
503
+ r(x, {
504
+ "column-defs": z.value,
505
+ "row-data": [...p.value.rows],
506
+ "hide-footer": ""
507
+ }, null, 8, ["column-defs", "row-data"])
508
+ ])
509
+ ])) : B("", !0)
510
+ ];
511
+ }),
512
+ _: 1
513
+ }, 8, ["z-index", "max-width", "is-container", "is-container-props"]),
514
+ F.value ? (m(), O(Z, {
515
+ key: 0,
516
+ session: F.value,
517
+ "z-index": (g.zIndex ?? 300) + 100,
518
+ "main-pricing-label": i.mainPricingLabel,
519
+ onClose: b
520
+ }, null, 8, ["session", "z-index", "main-pricing-label"])) : B("", !0)
521
+ ], 64);
522
+ };
523
+ }
524
+ }), bo = {}, vo = { class: "flex gap-16" };
525
+ function _o(I, S) {
526
+ return m(), h("div", vo, [
527
+ se(I.$slots, "default")
528
+ ]);
529
+ }
530
+ const fo = /* @__PURE__ */ De(bo, [["render", _o]]), yo = { class: "fm-typo-en-title-md-600" }, xo = {
531
+ key: 0,
532
+ class: "pt-8 space-y-32"
533
+ }, ho = { class: "xs:overflow-x-scroll" }, wo = { class: "xs:min-w-[640px]" }, ko = { class: "flex gap-8 items-center justify-start" }, Fo = { class: "fm-typo-en-title-md-600" }, Co = { class: "pt-8 space-y-24" }, $o = { class: "flex gap-8 flex-wrap" }, So = { class: "fm-typo-en-body-md-600 text-fm-color-primary" }, To = { class: "flex gap-8" }, jo = /* @__PURE__ */ W({
534
+ __name: "ProductGroupCreateSheet",
535
+ props: {
536
+ sdk: {},
537
+ presentation: {}
538
+ },
539
+ emits: ["close", "created"],
540
+ setup(I, { emit: S }) {
541
+ const g = I, f = S, { t: e } = X(), k = y("i18n-t"), L = ke(), { run: T } = Re(), p = he(), a = g.sdk.group.creationEditor(
542
+ g.presentation === "tree" ? { surface: "editor" } : void 0
543
+ ), j = ue(a), l = U(
544
+ () => j.value.status === "ready" ? j.value.value : null
545
+ ), F = we(() => a), b = U(
546
+ () => {
547
+ var o;
548
+ return Object.fromEntries(
549
+ Object.entries(((o = l.value) == null ? void 0 : o.attributeValueOptions) ?? {}).map(
550
+ ([t, V]) => [t, [...V]]
551
+ )
552
+ );
553
+ }
554
+ ), C = ue(g.sdk.linkProduct.catalogue), P = U(
555
+ () => C.value.status === "ready" ? C.value.value : null
556
+ ), z = oe(!1), E = oe({}), q = U(
557
+ () => {
558
+ var o;
559
+ return (((o = l.value) == null ? void 0 : o.options) ?? []).map((t) => ({
560
+ ...t,
561
+ subRows: t.variants
562
+ }));
563
+ }
564
+ ), i = (o) => o.combinationKey ? `${o.id}:${o.combinationKey}` : o.id, s = (o, t, V, H) => o.combinationKey ? e("menu.common.labels.a11y_labelled_name", {
565
+ label: e(V),
566
+ name: o.name || o.inheritedName
567
+ }) : H ? e(H, { index: t + 1 }) : e("menu.group.a11y.row", { label: e(V), index: t + 1 });
568
+ function x(o) {
569
+ a.setProducts([...o]), z.value = !1;
570
+ }
571
+ function w() {
572
+ a.cancelTranslation();
573
+ }
574
+ function D() {
575
+ var o;
576
+ if (!((o = l.value) != null && o.translationDirty)) {
577
+ a.cancelTranslation();
578
+ return;
579
+ }
580
+ p.open({
581
+ title: e("menu.common.dialog.discard.title"),
582
+ message: e("menu.common.dialog.discard.message"),
583
+ primaryActions: {
584
+ text: e("menu.common.actions.discard"),
585
+ close: !0,
586
+ variant: "destructive"
587
+ },
588
+ secondaryActions: {
589
+ text: e("menu.common.actions.cancel"),
590
+ close: !0
591
+ }
592
+ }).onPrimary(() => a.cancelTranslation());
593
+ }
594
+ xe(() => a.dispose());
595
+ const Z = (o) => l.value ? F.issue(l.value.fieldIssues, o) ?? l.value.issues.find((t) => t.field === o) : void 0, R = (o) => {
596
+ const t = Z(o);
597
+ return t ? L(t) : "";
598
+ }, N = ["NORMAL", "PRODUCT", "DYNAMIC"], Y = oe(0);
599
+ function M() {
600
+ a.confirmTypeChange(!1), Y.value += 1;
601
+ }
602
+ fe(
603
+ () => {
604
+ var o;
605
+ return (o = l.value) == null ? void 0 : o.typeChange;
606
+ },
607
+ (o) => {
608
+ o && p.open({
609
+ title: e("menu.common.dialog.change_type.title"),
610
+ message: e("menu.common.dialog.change_type.message"),
611
+ primaryActions: { text: e("menu.common.actions.yes"), close: !0 },
612
+ secondaryActions: { text: e("menu.common.actions.no"), close: !0 }
613
+ }).onPrimary(() => a.confirmTypeChange(!0)).onSecondary(() => M()).onClose(() => M());
614
+ }
615
+ );
616
+ async function ee() {
617
+ var V;
618
+ const o = ((V = l.value) == null ? void 0 : V.name) ?? "";
619
+ (await T(() => F.submit(() => a.submit()), {
620
+ showLoading: () => {
621
+ var H;
622
+ return ((H = l.value) == null ? void 0 : H.status) === "submitting";
623
+ }
624
+ })).kind === "success" && (f("created", o), f("close"));
625
+ }
626
+ const ne = U(() => [
627
+ {
628
+ accessorKey: "isDefault",
629
+ size: 35,
630
+ header: () => e("menu.group.option.is_default"),
631
+ enableSorting: !1,
632
+ cell: (o) => (
633
+ // A product with variants has no default of its own; its
634
+ // combinations do (OptionTable.vue:143-145).
635
+ o.row.original.variants.length ? null : _(K.FmCheckbox, {
636
+ modelValue: o.row.original.isDefault,
637
+ value: i(o.row.original),
638
+ "aria-label": s(
639
+ o.row.original,
640
+ o.row.index,
641
+ "menu.group.option.is_default"
642
+ ),
643
+ "onUpdate:modelValue": (t) => {
644
+ a.setOption(
645
+ o.row.original.id,
646
+ { isDefault: t },
647
+ o.row.original.combinationKey
648
+ ), F.touch("options");
649
+ }
650
+ })
651
+ )
652
+ },
653
+ {
654
+ accessorKey: "code",
655
+ size: 100,
656
+ header: () => e("menu.group.option.code"),
657
+ enableSorting: !1,
658
+ cell: (o) => _("div", { class: "break-all max-w-[100px]" }, o.row.original.code)
659
+ },
660
+ {
661
+ accessorKey: "name",
662
+ header: () => {
663
+ var o;
664
+ return _("div", { class: "flex items-center w-full gap-8" }, [
665
+ _("span", e("menu.group.option.product_title")),
666
+ ((o = l.value) == null ? void 0 : o.showTranslation) === !1 ? null : _(K.FmButton, {
667
+ icon: "g_translate",
668
+ variant: "tertiary",
669
+ textColor: "neutral-gray-400",
670
+ // Distinct from the group-name translate button below, AND from
671
+ // every field's own name: `getByLabel` is substring-matching, so
672
+ // "Translate group name" made the "Group name" textbox resolve two
673
+ // elements and the frozen create input could not run at all. Both
674
+ // are named so that no control's accessible name contains another's
675
+ // (including the collision that the first renaming created).
676
+ // Distinct from the group-name translate button below: both are
677
+ // `g_translate` FmButtons inside one side sheet, and one shared
678
+ // name made two controls of one role indistinguishable — the same
679
+ // ADR-0003 §1 condition as on the option cells. Neither name is
680
+ // visible, so this changes no rendering.
681
+ "aria-label": e("menu.group.translation.translate_options"),
682
+ onClick: () => a.beginTranslation("options")
683
+ })
684
+ ]);
685
+ },
686
+ enableSorting: !1,
687
+ cell: (o) => _(
688
+ J,
689
+ {
690
+ class: "min-w-[300px]",
691
+ modelValue: o.row.original.name,
692
+ placeholder: o.row.original.inheritedName,
693
+ errorMessages: Z(`option.${o.row.original.id}.name`) ? [R(`option.${o.row.original.id}.name`)] : [],
694
+ // Named PER ROW: "Option 1 title", "Option 2 title", …
695
+ //
696
+ // The accessible name is an addition the MIGRATED app owns — legacy
697
+ // renders these cells unlabelled, with no accessible name at all, so
698
+ // nothing here is matched to legacy's DOM. One shared name was the
699
+ // first attempt and it could not work: after the second "Add option"
700
+ // two textboxes answer to it, so a locator that must resolve one
701
+ // element fails. The index has to lead rather than trail, because
702
+ // `getByLabel` is substring-matching — "Option title 1"
703
+ // and "Option title 2" would both still match a recorded
704
+ // "Option title", while "Option 1 title" is not a substring of
705
+ // "Option 2 title". Owner-approved 2026-09-08 together with the
706
+ // baseline refresh that re-records the four steps against these names.
707
+ //
708
+ // The visible column header stays "Title", which is what the golden
709
+ // shows; this is the accessible name only.
710
+ "aria-label": s(
711
+ o.row.original,
712
+ o.row.index,
713
+ "menu.group.option.product_title",
714
+ "menu.group.option.option_title_numbered"
715
+ ),
716
+ ...F.field(
717
+ `option.${o.row.original.id}.name`,
718
+ (t) => a.setOption(
719
+ o.row.original.id,
720
+ { name: t },
721
+ o.row.original.combinationKey
722
+ )
723
+ )
724
+ },
725
+ o.row.original.variants.length ? {
726
+ // Legacy puts the toggle inside the title field
727
+ // (OptionTable.vue:228-243).
728
+ append: () => _(
729
+ "button",
730
+ {
731
+ type: "button",
732
+ class: "flex",
733
+ "aria-label": e(
734
+ o.row.getIsExpanded() ? "menu.apply_product.table.collapse_combinations" : "menu.apply_product.table.expand_combinations",
735
+ {
736
+ name: o.row.original.name || o.row.original.inheritedName
737
+ }
738
+ ),
739
+ onClick: o.row.getToggleExpandedHandler()
740
+ },
741
+ _(K.FmIcon, {
742
+ name: "keyboard_arrow_up",
743
+ class: [
744
+ "cursor-pointer transition-transform",
745
+ o.row.getIsExpanded() ? "rotate-180" : ""
746
+ ]
747
+ })
748
+ )
749
+ } : void 0
750
+ )
751
+ },
752
+ {
753
+ accessorKey: "priceAmount",
754
+ size: 400,
755
+ header: () => _(
756
+ k,
757
+ { keypath: "menu.group.option.price", tag: "span" },
758
+ {
759
+ symbol: () => {
760
+ var o;
761
+ return _(Fe, { currency: (o = l.value) == null ? void 0 : o.currency });
762
+ }
763
+ }
764
+ ),
765
+ enableSorting: !1,
766
+ cell: (o) => (
767
+ // Legacy wraps the price control in `flex items-center gap-8`
768
+ // (`portal .../GroupManager/OptionTable.vue:290`), so the input takes
769
+ // its natural width inside the 400px column instead of stretching to
770
+ // fill it. Without the wrapper the field runs ~127px wider than the
771
+ // frozen `group/v3-create/form-normal` golden shows.
772
+ _("div", { class: "flex items-center gap-8" }, [
773
+ _(ie, {
774
+ modelValue: o.row.original.priceAmount,
775
+ // Indexed for the same reason as the title above; the visible
776
+ // header keeps its currency symbol.
777
+ "aria-label": s(
778
+ o.row.original,
779
+ o.row.index,
780
+ "menu.group.option.price",
781
+ "menu.group.option.option_price_numbered"
782
+ ),
783
+ "onUpdate:modelValue": (t) => a.setOption(
784
+ o.row.original.id,
785
+ { priceAmount: t },
786
+ o.row.original.combinationKey
787
+ )
788
+ })
789
+ ])
790
+ )
791
+ },
792
+ {
793
+ accessorKey: "orderFrom",
794
+ size: 100,
795
+ header: () => e("menu.common.labels.order_from"),
796
+ enableSorting: !1,
797
+ cell: (o) => _(K.FmSelect, {
798
+ modelValue: o.row.original.orderFrom,
799
+ disabled: !o.row.original.editOrderFrom,
800
+ "aria-label": s(
801
+ o.row.original,
802
+ o.row.index,
803
+ "menu.common.labels.order_from"
804
+ ),
805
+ items: ["ALL", "POS_ONLY", "NONE"].map((t) => ({
806
+ value: t,
807
+ label: e(Ee[t])
808
+ })),
809
+ "onUpdate:modelValue": (t) => a.setOption(
810
+ o.row.original.id,
811
+ { orderFrom: t },
812
+ o.row.original.combinationKey
813
+ )
814
+ })
815
+ },
816
+ {
817
+ id: "action",
818
+ meta: { cellClass: "" },
819
+ size: 80,
820
+ enableSorting: !1,
821
+ cell: (o) => {
822
+ var t;
823
+ return _("div", { class: "flex items-center justify-end" }, [
824
+ // Legacy offers inventory binding on an option row for every V4 group
825
+ // and, on V3, only for a NORMAL one. It is rendered disabled for the
826
+ // same reason as the nested-group affordance below: no approved
827
+ // scenario in this module covers an inventory intent, so there is
828
+ // nothing to open, but the button's presence is part of the frozen
829
+ // `group/v3-create/form-normal` layout — it is what narrows the Price
830
+ // column to the width the golden shows.
831
+ ...(t = l.value) != null && t.showInventory ? [
832
+ _(K.FmButton, {
833
+ prependIcon: "inventory_2",
834
+ variant: "tertiary",
835
+ textColor: "neutral-gray-400",
836
+ disabled: !0,
837
+ "aria-label": s(
838
+ o.row.original,
839
+ o.row.index,
840
+ "menu.group.option.inventory"
841
+ )
842
+ })
843
+ ] : [],
844
+ // Legacy retains the disabled nested-group affordance on empty rows.
845
+ // There is no nested edit intent when the product links no groups.
846
+ ...o.row.original.nestedGroupCount ? [] : [
847
+ _(K.FmButton, {
848
+ prependIcon: "arrow_split",
849
+ variant: "tertiary",
850
+ textColor: "neutral-gray-400",
851
+ disabled: !0,
852
+ "aria-label": s(
853
+ o.row.original,
854
+ o.row.index,
855
+ "menu.group.nested.title"
856
+ )
857
+ })
858
+ ],
859
+ _(K.FmButton, {
860
+ prependIcon: "delete",
861
+ variant: "tertiary",
862
+ textColor: "neutral-gray-400",
863
+ "aria-label": s(
864
+ o.row.original,
865
+ o.row.index,
866
+ "menu.common.actions.remove"
867
+ ),
868
+ // A combination is removed with its product (OptionTable.vue:547-556).
869
+ disabled: !!o.row.original.combinationKey,
870
+ onClick: () => a.removeOption(o.row.original.id)
871
+ })
872
+ ]);
873
+ }
874
+ }
875
+ ]);
876
+ return (o, t) => {
877
+ var pe, ge, be;
878
+ const V = y("FmButton"), H = y("FmTooltip"), me = y("FmStepperField"), ce = y("FmFormGroup"), Ce = y("FmRadio"), $e = y("FmRadioGroup"), Se = y("FmSwitch"), Te = y("FmTable"), de = y("FmSideSheet"), Pe = y("FmChip"), Ve = y("FmSelect");
879
+ return m(), h(G, null, [
880
+ r(de, {
881
+ "model-value": !0,
882
+ "max-width": o.presentation === "tree" ? 720 : 800,
883
+ "is-container": n(K).FmForm,
884
+ "is-container-props": { onValidationSuccess: ee },
885
+ "onUpdate:modelValue": t[9] || (t[9] = (u) => !u && f("close"))
886
+ }, {
887
+ "side-sheet-header": d(() => [
888
+ v("p", yo, $(n(e)("menu.group.add")), 1)
889
+ ]),
890
+ "side-sheet-footer": d(() => {
891
+ var u;
892
+ return [
893
+ v("div", ko, [
894
+ r(V, {
895
+ label: n(e)("menu.common.actions.add"),
896
+ disabled: ((u = l.value) == null ? void 0 : u.submit.state) !== "allowed",
897
+ size: "lg",
898
+ type: "submit",
899
+ variant: "primary"
900
+ }, null, 8, ["label", "disabled"]),
901
+ r(V, {
902
+ label: n(e)("menu.common.actions.cancel"),
903
+ size: "lg",
904
+ variant: "tertiary",
905
+ onClick: t[8] || (t[8] = (c) => f("close"))
906
+ }, null, 8, ["label"])
907
+ ])
908
+ ];
909
+ }),
910
+ default: d(() => [
911
+ l.value ? (m(), h("div", xo, [
912
+ r(Be, null, {
913
+ default: d(() => {
914
+ var u;
915
+ return [
916
+ r(J, ae({
917
+ autofocus: "",
918
+ label: n(e)("menu.common.labels.group_name"),
919
+ "model-value": l.value.name,
920
+ "error-messages": Z("name") ? [R("name")] : []
921
+ }, n(F).field("name", n(a).setName)), ye({ _: 2 }, [
922
+ l.value.showTranslation !== !1 ? {
923
+ name: "append",
924
+ fn: d(() => [
925
+ r(H, {
926
+ variant: "plain",
927
+ placement: "top",
928
+ "z-index": 999
929
+ }, {
930
+ default: d(() => [
931
+ r(V, {
932
+ variant: "tertiary",
933
+ icon: "g_translate",
934
+ disabled: !l.value.canTranslateName,
935
+ "aria-label": n(e)("menu.group.translation.translate_name"),
936
+ onClick: t[0] || (t[0] = (c) => n(a).beginTranslation("group"))
937
+ }, null, 8, ["disabled", "aria-label"])
938
+ ]),
939
+ _: 1
940
+ })
941
+ ]),
942
+ key: "0"
943
+ } : void 0
944
+ ]), 1040, ["label", "model-value", "error-messages"]),
945
+ r(ce, {
946
+ "model-value": `${l.value.min} ${l.value.max}`,
947
+ invalid: !!R("bounds"),
948
+ "helper-text": R("bounds")
949
+ }, {
950
+ default: d(() => [
951
+ r(fo, null, {
952
+ default: d(() => [
953
+ r(me, ae({
954
+ class: "flex-1",
955
+ min: 0,
956
+ label: n(e)("menu.common.labels.min_select"),
957
+ "model-value": l.value.min
958
+ }, n(F).field("bounds", n(a).setMin)), null, 16, ["label", "model-value"]),
959
+ r(me, ae({
960
+ class: "flex-1",
961
+ min: l.value.min,
962
+ label: n(e)("menu.common.labels.max_select"),
963
+ "model-value": l.value.max
964
+ }, n(F).field("bounds", n(a).setMax)), null, 16, ["min", "label", "model-value"])
965
+ ]),
966
+ _: 1
967
+ })
968
+ ]),
969
+ _: 1
970
+ }, 8, ["model-value", "invalid", "helper-text"]),
971
+ l.value.showType ? (m(), O(re, {
972
+ key: 0,
973
+ label: n(e)("menu.common.labels.group_type")
974
+ }, {
975
+ default: d(() => [
976
+ (m(), O($e, {
977
+ key: Y.value,
978
+ "model-value": l.value.type,
979
+ "onUpdate:modelValue": t[1] || (t[1] = (c) => n(a).setType(c))
980
+ }, {
981
+ default: d(() => [
982
+ (m(), h(G, null, Q(N, (c) => r(Ce, {
983
+ key: c,
984
+ value: c,
985
+ label: n(e)(n(Me)[c])
986
+ }, null, 8, ["value", "label"])), 64))
987
+ ]),
988
+ _: 1
989
+ }, 8, ["model-value"]))
990
+ ]),
991
+ _: 1
992
+ }, 8, ["label"])) : B("", !0),
993
+ r(re, {
994
+ label: n(e)("menu.common.labels.configuration")
995
+ }, {
996
+ default: d(() => [
997
+ r(Se, {
998
+ "model-value": l.value.stackable,
999
+ label: n(e)("menu.common.labels.stackable"),
1000
+ "label-placement": "right",
1001
+ sublabel: n(e)("menu.common.labels.stackable_sublabel"),
1002
+ "onUpdate:modelValue": t[2] || (t[2] = (c) => n(a).setStackable(c))
1003
+ }, null, 8, ["model-value", "label", "sublabel"])
1004
+ ]),
1005
+ _: 1
1006
+ }, 8, ["label"]),
1007
+ (u = l.value.tagging) != null && u.visible ? (m(), h(G, { key: 1 }, [
1008
+ o.presentation === "tree" ? (m(), O(n(ve), {
1009
+ key: 0,
1010
+ entity: "group",
1011
+ "model-value": l.value.customAttributes ?? {},
1012
+ "value-options": b.value,
1013
+ "onUpdate:modelValue": t[3] || (t[3] = (c) => n(a).setCustomAttributes(c ?? null))
1014
+ }, null, 8, ["model-value", "value-options"])) : (m(), O(le, {
1015
+ key: 1,
1016
+ title: n(e)("menu.group.form.tagging.title"),
1017
+ "sub-title": n(e)("menu.group.form.tagging.subtitle")
1018
+ }, {
1019
+ default: d(() => [
1020
+ r(n(ve), {
1021
+ entity: "group",
1022
+ "model-value": l.value.customAttributes ?? {},
1023
+ "value-options": b.value,
1024
+ "onUpdate:modelValue": t[4] || (t[4] = (c) => n(a).setCustomAttributes(c ?? null))
1025
+ }, null, 8, ["model-value", "value-options"])
1026
+ ]),
1027
+ _: 1
1028
+ }, 8, ["title", "sub-title"]))
1029
+ ], 64)) : B("", !0)
1030
+ ];
1031
+ }),
1032
+ _: 1
1033
+ }),
1034
+ r(ce, {
1035
+ tag: "div",
1036
+ "model-value": l.value.options,
1037
+ invalid: !!R("options"),
1038
+ "helper-text": R("options") || n(e)("menu.common.validation.default_items_tip", {
1039
+ count: l.value.defaultCount,
1040
+ max: l.value.max
1041
+ })
1042
+ }, {
1043
+ default: d(() => [
1044
+ r(le, {
1045
+ title: n(e)("menu.group.option.title"),
1046
+ "sub-title": l.value.linkProducts && o.presentation !== "tree" ? n(e)("menu.group.option.subtitle") : ""
1047
+ }, {
1048
+ "append-title": d(() => [
1049
+ r(V, {
1050
+ variant: "secondary",
1051
+ "text-color": "primary",
1052
+ "border-color": "primary",
1053
+ "prepend-icon": l.value.linkProducts ? "link" : "add",
1054
+ label: n(e)(
1055
+ l.value.linkProducts ? "menu.group.option.link_products" : "menu.group.option.add_option"
1056
+ ),
1057
+ onClick: t[5] || (t[5] = (u) => l.value.linkProducts ? z.value = !0 : n(a).addOption())
1058
+ }, null, 8, ["prepend-icon", "label"])
1059
+ ]),
1060
+ default: d(() => [
1061
+ v("div", ho, [
1062
+ v("div", wo, [
1063
+ r(Te, {
1064
+ draggable: "",
1065
+ onDndChanged: t[6] || (t[6] = (u) => n(a).reorderOptions(
1066
+ u.map((c) => c.id)
1067
+ )),
1068
+ "column-defs": ne.value,
1069
+ "column-visibility": {
1070
+ code: l.value.showCode,
1071
+ priceAmount: l.value.showPrice,
1072
+ orderFrom: l.value.showOrderFrom
1073
+ },
1074
+ "row-data": q.value,
1075
+ "get-row-id": i,
1076
+ "expanded-state": E.value,
1077
+ "onUpdate:expandedState": t[7] || (t[7] = (u) => E.value = u),
1078
+ "page-size": Math.max(l.value.options.length, 1),
1079
+ "shrink-at": !1,
1080
+ "hide-footer": ""
1081
+ }, null, 8, ["column-defs", "column-visibility", "row-data", "expanded-state", "page-size"])
1082
+ ])
1083
+ ])
1084
+ ]),
1085
+ _: 1
1086
+ }, 8, ["title", "sub-title"])
1087
+ ]),
1088
+ _: 1
1089
+ }, 8, ["model-value", "invalid", "helper-text"])
1090
+ ])) : B("", !0)
1091
+ ]),
1092
+ _: 1
1093
+ }, 8, ["max-width", "is-container", "is-container-props"]),
1094
+ ((pe = l.value) == null ? void 0 : pe.translationMode) === "group" ? (m(), O(Ne, {
1095
+ key: 0,
1096
+ "model-value": !0,
1097
+ name: l.value.name,
1098
+ "name-locale": l.value.nameLocale,
1099
+ "supported-locales": l.value.supportedLocales,
1100
+ dirty: l.value.translationDirty,
1101
+ title: n(e)("menu.group.translation.title"),
1102
+ "name-section-label": n(e)("menu.common.translation.name_section", {
1103
+ entity: n(e)("menu.group.title")
1104
+ }),
1105
+ "onUpdate:modelValue": t[10] || (t[10] = (u) => !u && w()),
1106
+ "onUpdate:name": t[11] || (t[11] = (u) => n(a).setName(u)),
1107
+ "onUpdate:nameLocale": t[12] || (t[12] = (u) => n(a).setNameLocale(u)),
1108
+ onSave: t[13] || (t[13] = (u) => n(a).applyTranslation()),
1109
+ onDiscard: t[14] || (t[14] = (u) => n(a).cancelTranslation())
1110
+ }, null, 8, ["name", "name-locale", "supported-locales", "dirty", "title", "name-section-label"])) : B("", !0),
1111
+ ((ge = l.value) == null ? void 0 : ge.translationMode) === "options" ? (m(), O(de, {
1112
+ key: 1,
1113
+ "model-value": !0,
1114
+ "max-width": 720,
1115
+ "onUpdate:modelValue": t[17] || (t[17] = (u) => !u && w()),
1116
+ "onOn:clickedAway": D
1117
+ }, {
1118
+ "side-sheet-header": d(() => [
1119
+ v("p", Fo, $(n(e)("menu.group.translation.title")), 1)
1120
+ ]),
1121
+ "side-sheet-footer": d(() => [
1122
+ v("div", To, [
1123
+ r(V, {
1124
+ label: n(e)("menu.common.actions.save"),
1125
+ size: "lg",
1126
+ onClick: t[16] || (t[16] = (u) => n(a).applyTranslation())
1127
+ }, null, 8, ["label"]),
1128
+ r(V, {
1129
+ label: n(e)("menu.common.actions.cancel"),
1130
+ variant: "tertiary",
1131
+ size: "lg",
1132
+ onClick: D
1133
+ }, null, 8, ["label"])
1134
+ ])
1135
+ ]),
1136
+ default: d(() => [
1137
+ v("div", Co, [
1138
+ r(re, {
1139
+ label: n(e)("menu.group.translation.language")
1140
+ }, {
1141
+ default: d(() => {
1142
+ var u;
1143
+ return [
1144
+ v("div", $o, [
1145
+ (m(!0), h(G, null, Q(l.value.optionTranslationLocales, (c) => {
1146
+ var A;
1147
+ return m(), O(Pe, {
1148
+ key: c,
1149
+ removable: "",
1150
+ label: ((A = l.value.supportedLocales.find((te) => te.code === c)) == null ? void 0 : A.name) ?? c,
1151
+ onChipClosed: (te) => n(a).setOptionTranslationLocales(
1152
+ l.value.optionTranslationLocales.filter((Oe) => Oe !== c)
1153
+ )
1154
+ }, null, 8, ["label", "onChipClosed"]);
1155
+ }), 128)),
1156
+ r(Ve, {
1157
+ items: (((u = l.value) == null ? void 0 : u.supportedLocales) ?? []).filter(
1158
+ (c) => {
1159
+ var A;
1160
+ return !(((A = l.value) == null ? void 0 : A.optionTranslationLocales) ?? []).includes(c.code);
1161
+ }
1162
+ ).map((c) => ({ value: c.code, label: c.name })),
1163
+ placeholder: n(e)("menu.group.translation.add_language"),
1164
+ "model-value": null,
1165
+ "onUpdate:modelValue": t[15] || (t[15] = (c) => n(a).setOptionTranslationLocales([
1166
+ ...l.value.optionTranslationLocales,
1167
+ c
1168
+ ]))
1169
+ }, null, 8, ["items", "placeholder"])
1170
+ ])
1171
+ ];
1172
+ }),
1173
+ _: 1
1174
+ }, 8, ["label"]),
1175
+ r(le, {
1176
+ title: n(e)("menu.group.translation.group_name")
1177
+ }, {
1178
+ default: d(() => [
1179
+ r(J, {
1180
+ "model-value": l.value.name,
1181
+ readonly: ""
1182
+ }, null, 8, ["model-value"])
1183
+ ]),
1184
+ _: 1
1185
+ }, 8, ["title"]),
1186
+ r(le, {
1187
+ title: n(e)("menu.group.translation.product_name")
1188
+ }, {
1189
+ default: d(() => [
1190
+ (m(!0), h(G, null, Q(l.value.options, (u, c) => (m(), h("div", {
1191
+ key: u.id,
1192
+ class: "space-y-8"
1193
+ }, [
1194
+ v("p", So, $(n(e)("menu.group.translation.option", { number: c + 1 })), 1),
1195
+ r(J, {
1196
+ label: n(e)("menu.group.translation.option_default", { number: c + 1 }),
1197
+ "model-value": u.name,
1198
+ "onUpdate:modelValue": (A) => n(a).setOption(u.id, { name: A })
1199
+ }, null, 8, ["label", "model-value", "onUpdate:modelValue"]),
1200
+ (m(!0), h(G, null, Q(l.value.optionTranslationLocales, (A) => (m(), h("div", {
1201
+ key: A,
1202
+ class: "flex gap-8 items-center"
1203
+ }, [
1204
+ r(Ue, { code: A }, null, 8, ["code"]),
1205
+ r(J, {
1206
+ class: "flex-1",
1207
+ "aria-label": n(e)("menu.group.translation.option_translation", {
1208
+ number: c + 1,
1209
+ language: A
1210
+ }),
1211
+ "model-value": u.nameLocale[A] ?? "",
1212
+ placeholder: n(e)("menu.group.translation.placeholder"),
1213
+ "onUpdate:modelValue": (te) => n(a).setOptionNameLocale(u.id, {
1214
+ ...u.nameLocale,
1215
+ [A]: te
1216
+ })
1217
+ }, null, 8, ["aria-label", "model-value", "placeholder", "onUpdate:modelValue"])
1218
+ ]))), 128))
1219
+ ]))), 128))
1220
+ ]),
1221
+ _: 1
1222
+ }, 8, ["title"])
1223
+ ])
1224
+ ]),
1225
+ _: 1
1226
+ })) : B("", !0),
1227
+ r(Ke, {
1228
+ modelValue: z.value,
1229
+ "onUpdate:modelValue": t[18] || (t[18] = (u) => z.value = u),
1230
+ catalogue: P.value,
1231
+ "selected-product-ids": ((be = l.value) == null ? void 0 : be.selectedProductIds) ?? [],
1232
+ title: n(e)("menu.group.option.link_products"),
1233
+ onSubmit: x
1234
+ }, null, 8, ["modelValue", "catalogue", "selected-product-ids", "title"])
1235
+ ], 64);
1236
+ };
1237
+ }
1238
+ });
1239
+ export {
1240
+ fo as F,
1241
+ ie as _,
1242
+ Je as a,
1243
+ Go as b,
1244
+ Ro as c,
1245
+ jo as d
1246
+ };