@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.
- package/README.md +30 -2
- package/dist/AddPriceGroupDialog.vue_vue_type_script_setup_true_lang-DhKyG3gY.js +20 -0
- package/dist/App-C6k--u1c.js +8316 -0
- package/dist/ApplyProduct.vue_vue_type_script_setup_true_lang-C9OSr8ft.js +98 -0
- package/dist/BindingLinkDialog.vue_vue_type_script_setup_true_lang-BZVQRyRI.js +180 -0
- package/dist/BindingTable.vue_vue_type_script_setup_true_lang-DBzjWI_6.js +179 -0
- package/dist/Catalog-DEYN4dMN.js +374 -0
- package/dist/CatalogBinding-NnPKdPvx.js +315 -0
- package/dist/CatalogEditTabs.vue_vue_type_script_setup_true_lang-OshqaPTE.js +97 -0
- package/dist/CatalogEditor.vue_vue_type_script_setup_true_lang-poznuDXu.js +447 -0
- package/dist/CatalogLinkProductAction.vue_vue_type_script_setup_true_lang-BSMAIkQ2.js +117 -0
- package/dist/Category-BdUP0o34.js +13 -0
- package/dist/Category-CkQiwP9e.js +52 -0
- package/dist/CategoryList.vue_vue_type_script_setup_true_lang-UgNVpYgp.js +797 -0
- package/dist/CookingGuide-CtDkm74r.js +842 -0
- package/dist/FormItem.vue_vue_type_script_setup_true_lang-C2S6QCyR.js +26 -0
- package/dist/FormSection.vue_vue_type_script_setup_true_lang-pY-_msnM.js +1774 -0
- package/dist/Group-D2HngOjr.js +52 -0
- package/dist/Group-DSj7_16V.js +13 -0
- package/dist/GroupList.vue_vue_type_script_setup_true_lang-BmmsSKTt.js +2183 -0
- package/dist/Ingredient-BHqz7kjQ.js +463 -0
- package/dist/LinkProductSideSheet.vue_vue_type_script_setup_true_lang-D9jK-Fhn.js +709 -0
- package/dist/ListCountTag.vue_vue_type_script_setup_true_lang-0bjk8Aly.js +15 -0
- package/dist/MenuSetting-DF-cJH7N.js +1228 -0
- package/dist/OrderPacing-CejS9dEI.js +698 -0
- package/dist/OrderPacingFields.vue_vue_type_script_setup_true_lang-C2mixGUk.js +55 -0
- package/dist/PageLayout.vue_vue_type_script_setup_true_lang-B3szUH39.js +41 -0
- package/dist/Preview-1C7jGJuY.js +327 -0
- package/dist/PriceTierNotice.vue_vue_type_script_setup_true_lang-CxKHCptJ.js +26 -0
- package/dist/PrintRoute-BNnMcgTf.js +473 -0
- package/dist/Product-BoUKxogB.js +44 -0
- package/dist/ProductChipSummary.vue_vue_type_script_setup_true_lang-D8DygCBl.js +110 -0
- package/dist/ProductEditorHost.vue_vue_type_script_setup_true_lang-Bm8_FTvr.js +83 -0
- package/dist/ProductFilterMenu.vue_vue_type_script_setup_true_lang-Cgc0Ms_n.js +101 -0
- package/dist/ProductGroupCreateSheet.vue_vue_type_script_setup_true_lang-Cx_mW05R.js +1246 -0
- package/dist/ProductImageEditorDialog.vue_vue_type_script_setup_true_lang-CUeYaXYg.js +1955 -0
- package/dist/ProductInlineCreateHost.vue_vue_type_script_setup_true_lang-CeYyZX7g.js +5401 -0
- package/dist/ProductInternalTools-b3sy8bWy.js +2147 -0
- package/dist/ProductInventoryDialog-DO0D8e3Z.js +4 -0
- package/dist/ProductInventoryDialog.vue_vue_type_script_setup_true_lang-y9Mz__o9.js +187 -0
- package/dist/ProductList.vue_vue_type_script_setup_true_lang-n_UYIwwt.js +10353 -0
- package/dist/ProductVariantTranslationSheet.vue_vue_type_script_setup_true_lang-ClG3Prfm.js +218 -0
- package/dist/Products-7vlFJB0P.js +155 -0
- package/dist/Publish-DTP-CgV-.js +1261 -0
- package/dist/Recipe-C1W8_15H.js +350 -0
- package/dist/Scheduler-JRjozwP_.js +637 -0
- package/dist/ServingSequence-BGT5m7JB.js +336 -0
- package/dist/Setting-CS_M1gMN.js +173 -0
- package/dist/Subcategory-Cgy9CQCz.js +412 -0
- package/dist/Takeaway-Bpo9XA-j.js +48 -0
- package/dist/Takeaway-DO2dmFGP.js +13 -0
- package/dist/TakeawayList.vue_vue_type_script_setup_true_lang-C7KexF7H.js +554 -0
- package/dist/TranslationLanguageSelector.vue_vue_type_script_setup_true_lang-BJZ6VcrT.js +161 -0
- package/dist/TranslationSideSheet.vue_vue_type_script_setup_true_lang-B0j2PNih.js +158 -0
- package/dist/TranslationViewChip.vue_vue_type_script_setup_true_lang-CAkLEmSA.js +69 -0
- package/dist/TreeEditorOpenner.vue_vue_type_script_setup_true_lang-BHxmPO7F.js +1213 -0
- package/dist/Unit-Bn5UzMp1.js +385 -0
- package/dist/Variant-DmeGEEkw.js +538 -0
- package/dist/_id_-DC1dJIaj.js +28 -0
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
- package/dist/app-Bd7W2PYm.js +2008 -0
- package/dist/app.js +8 -0
- package/dist/apps/mf-menu/src/App.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/Entry.vue.d.ts +4 -0
- package/dist/apps/mf-menu/src/app.d.ts +16771 -0
- package/dist/apps/mf-menu/src/assets/icons/index.d.ts +4 -0
- package/dist/apps/mf-menu/src/components/CatalogBindingList.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/components/CatalogList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/CategoryImageField.vue.d.ts +17 -0
- package/dist/apps/mf-menu/src/components/CategoryList.vue.d.ts +28 -0
- package/dist/apps/mf-menu/src/components/Fields/RangeSlider.vue.d.ts +23 -0
- package/dist/apps/mf-menu/src/components/GroupList.vue.d.ts +28 -0
- package/dist/apps/mf-menu/src/components/GroupTranslationSideSheet.vue.d.ts +14 -0
- package/dist/apps/mf-menu/src/components/IngredientList.vue.d.ts +15 -0
- package/dist/apps/mf-menu/src/components/MenuHeaderContext.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/MenuRestaurantSelector.vue.d.ts +7 -0
- package/dist/apps/mf-menu/src/components/MenuSetting/AddMemberTierDialog.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/MenuSetting/AddPriceGroupDialog.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/MenuSetting/ConfigurationTab.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/MenuSetting/MemberPricingTab.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/MenuSetting/PriceGroupTab.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/MenuSetting/RuleGroupsTab.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/Navigator.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/OrderPacingList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/PriceTier/PriceTierNotice.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/PrintRouteList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/Product/LocalizedCurrencySymbol.vue.d.ts +5 -0
- package/dist/apps/mf-menu/src/components/Product/ProductAttributeFilter.vue.d.ts +13 -0
- package/dist/apps/mf-menu/src/components/Product/ProductCategorySelector.vue.d.ts +11 -0
- package/dist/apps/mf-menu/src/components/Product/ProductChipSummary.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/components/Product/ProductChoicePicker.vue.d.ts +15 -0
- package/dist/apps/mf-menu/src/components/Product/ProductEditorHost.vue.d.ts +26 -0
- package/dist/apps/mf-menu/src/components/Product/ProductFilterMenu.vue.d.ts +26 -0
- package/dist/apps/mf-menu/src/components/Product/ProductForm.vue.d.ts +42 -0
- package/dist/apps/mf-menu/src/components/Product/ProductFormSection.vue.d.ts +41 -0
- package/dist/apps/mf-menu/src/components/Product/ProductGroupCreateSheet.vue.d.ts +19 -0
- package/dist/apps/mf-menu/src/components/Product/ProductGroupSheet.vue.d.ts +56 -0
- package/dist/apps/mf-menu/src/components/Product/ProductInlineCategoryCreateField.vue.d.ts +10 -0
- package/dist/apps/mf-menu/src/components/Product/ProductInlineCreateHost.vue.d.ts +38 -0
- package/dist/apps/mf-menu/src/components/Product/ProductInlineSubcategoryCreateField.vue.d.ts +10 -0
- package/dist/apps/mf-menu/src/components/Product/ProductInventoryDialog.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/Product/ProductLocaleBadge.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/Product/ProductMemberPriceTooltip.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/Product/ProductMoneyField.vue.d.ts +25 -0
- package/dist/apps/mf-menu/src/components/Product/ProductOverviewSheet.vue.d.ts +11 -0
- package/dist/apps/mf-menu/src/components/Product/ProductPacingSheet.vue.d.ts +13 -0
- package/dist/apps/mf-menu/src/components/Product/ProductPriceTierButton.vue.d.ts +11 -0
- package/dist/apps/mf-menu/src/components/Product/ProductPricingSheet.vue.d.ts +26 -0
- package/dist/apps/mf-menu/src/components/Product/ProductPrintRouteSheet.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/Product/ProductQuantityField.vue.d.ts +16 -0
- package/dist/apps/mf-menu/src/components/Product/ProductSummaryCard.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/components/Product/ProductTakeawaySheet.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/Product/ProductTranslationDialog.vue.d.ts +16 -0
- package/dist/apps/mf-menu/src/components/Product/ProductVariantCreateSheet.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/Product/ProductVariantTranslationSheet.vue.d.ts +13 -0
- package/dist/apps/mf-menu/src/components/Product/inlineCreate.d.ts +23 -0
- package/dist/apps/mf-menu/src/components/Product/labels.d.ts +15 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageBadge.vue.d.ts +7 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageDownloadDialog.vue.d.ts +15 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageFormatChips.vue.d.ts +13 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageLegacyChip.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageProgressDialog.vue.d.ts +11 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageResult.vue.d.ts +14 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageReview.vue.d.ts +21 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageThumb.vue.d.ts +15 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageUpdateFlow.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/BatchImageUpdateSheet.vue.d.ts +34 -0
- package/dist/apps/mf-menu/src/components/ProductBatchImage/batchImageFiles.d.ts +53 -0
- package/dist/apps/mf-menu/src/components/ProductImage/ProductImageCustomFormatDialog.vue.d.ts +40 -0
- package/dist/apps/mf-menu/src/components/ProductImage/ProductImageEditorDialog.vue.d.ts +82 -0
- package/dist/apps/mf-menu/src/components/ProductImage/ProductImageField.vue.d.ts +42 -0
- package/dist/apps/mf-menu/src/components/ProductImage/ProductImageManageSheet.vue.d.ts +47 -0
- package/dist/apps/mf-menu/src/components/ProductImage/ProductImageRegenerateDialog.vue.d.ts +44 -0
- package/dist/apps/mf-menu/src/components/ProductImage/imageBrowser.d.ts +18 -0
- package/dist/apps/mf-menu/src/components/ProductList.vue.d.ts +18 -0
- package/dist/apps/mf-menu/src/components/PublishList.vue.d.ts +14 -0
- package/dist/apps/mf-menu/src/components/RecipeList.vue.d.ts +11 -0
- package/dist/apps/mf-menu/src/components/SchedulerList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/ServingSequenceList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/SubcategoryList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/TakeawayList.vue.d.ts +26 -0
- package/dist/apps/mf-menu/src/components/TranslationSideSheet.vue.d.ts +36 -0
- package/dist/apps/mf-menu/src/components/UnitList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/V3ToV4MigrationBanner.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/V3ToV4MigrationConfirmDialog.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/VariantList.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/catalog/CatalogEditor.vue.d.ts +14 -0
- package/dist/apps/mf-menu/src/components/catalog/CatalogLinkProductAction.vue.d.ts +7 -0
- package/dist/apps/mf-menu/src/components/catalog/CatalogUsage.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/catalog/tableSemantics.d.ts +7 -0
- package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProduct.vue.d.ts +33 -0
- package/dist/apps/mf-menu/src/components/feature/CookingGuide/RemoveCookingGuideConfirmation.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/Icon.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/index.d.ts +1 -0
- package/dist/apps/mf-menu/src/components/feature/EmptyDataTemplate/index.vue.d.ts +18 -0
- package/dist/apps/mf-menu/src/components/feature/InventoryBinding/BindingLinkDialog.vue.d.ts +49 -0
- package/dist/apps/mf-menu/src/components/feature/InventoryBinding/BindingTable.vue.d.ts +38 -0
- package/dist/apps/mf-menu/src/components/feature/LinkProduct/LinkProductSideSheet.vue.d.ts +65 -0
- package/dist/apps/mf-menu/src/components/feature/OrderPacing/DeleteOrderPacingConfirmation.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/feature/OrderPacing/OrderPacingFields.vue.d.ts +17 -0
- package/dist/apps/mf-menu/src/components/feature/PrintRoute/RemoveRouteConfirmation.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/feature/TreeEditor/TreeEditorOpenner.vue.d.ts +18 -0
- package/dist/apps/mf-menu/src/components/feature/TreeEditor/openner.d.ts +7 -0
- package/dist/apps/mf-menu/src/components/info/TextChip.vue.d.ts +13 -0
- package/dist/apps/mf-menu/src/components/layout/FlatInlineSort.vue.d.ts +25 -0
- package/dist/apps/mf-menu/src/components/layout/FormColumn.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/layout/FormItem.vue.d.ts +17 -0
- package/dist/apps/mf-menu/src/components/layout/FormRow.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/components/layout/FormSection.vue.d.ts +18 -0
- package/dist/apps/mf-menu/src/components/layout/FullScreenForm.vue.d.ts +31 -0
- package/dist/apps/mf-menu/src/components/layout/FullWrapper.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/components/layout/LabeledTextField.vue.d.ts +16 -0
- package/dist/apps/mf-menu/src/components/layout/ListCountTag.vue.d.ts +5 -0
- package/dist/apps/mf-menu/src/components/layout/LottieAnimation.vue.d.ts +39 -0
- package/dist/apps/mf-menu/src/components/layout/PageLayout.vue.d.ts +19 -0
- package/dist/apps/mf-menu/src/components/layout/ProgressBar.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/components/loading/AppLoading.vue.d.ts +20 -0
- package/dist/apps/mf-menu/src/components/loading/PageLoading.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/components/loading/index.d.ts +1 -0
- package/dist/apps/mf-menu/src/components/placeholder/PlaceholderView.vue.d.ts +5 -0
- package/dist/apps/mf-menu/src/components/preview/MenuPreview.vue.d.ts +13 -0
- package/dist/apps/mf-menu/src/components/preview/simulatorPort.d.ts +23 -0
- package/dist/apps/mf-menu/src/components/publish/PublishRevertPreview.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/publish/PublishScheduleDetails.vue.d.ts +6 -0
- package/dist/apps/mf-menu/src/components/publish/publishStatus.d.ts +15 -0
- package/dist/apps/mf-menu/src/components/translation/TranslationLanguageSelector.vue.d.ts +21 -0
- package/dist/apps/mf-menu/src/components/translation/TranslationViewChip.vue.d.ts +12 -0
- package/dist/apps/mf-menu/src/components/translation/localeName.d.ts +11 -0
- package/dist/apps/mf-menu/src/components/translation/localeSymbol.d.ts +15 -0
- package/dist/apps/mf-menu/src/composable/elementPosition.d.ts +17 -0
- package/dist/apps/mf-menu/src/composable/menuNotifier.d.ts +14 -0
- package/dist/apps/mf-menu/src/composable/navigator.d.ts +16 -0
- package/dist/apps/mf-menu/src/composable/useActionFeedback.d.ts +81 -0
- package/dist/apps/mf-menu/src/composable/useEditorValidation.d.ts +21 -0
- package/dist/apps/mf-menu/src/init.d.ts +1 -0
- package/dist/apps/mf-menu/src/main.d.ts +2 -0
- package/dist/apps/mf-menu/src/plugins.d.ts +4 -0
- package/dist/apps/mf-menu/src/router/index.d.ts +2 -0
- package/dist/apps/mf-menu/src/router/shared.d.ts +65 -0
- package/dist/apps/mf-menu/src/sdk/host.d.ts +9 -0
- package/dist/apps/mf-menu/src/sdk/import-export.d.ts +9 -0
- package/dist/apps/mf-menu/src/sdk/provide.d.ts +33 -0
- package/dist/apps/mf-menu/src/sdk/useReadModel.d.ts +16 -0
- package/dist/apps/mf-menu/src/sdk/useSdkMessage.d.ts +11 -0
- package/dist/apps/mf-menu/src/stores/app.d.ts +17 -0
- package/dist/apps/mf-menu/src/utils/ruleValueKey.d.ts +12 -0
- package/dist/apps/mf-menu/src/utils/worker-loader.d.ts +12 -0
- package/dist/apps/mf-menu/src/utils/worker.d.ts +4 -0
- package/dist/apps/mf-menu/src/views/Catalog/Catalog.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/CatalogEditTabs.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/Category.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/Group.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/MainSetting.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/NamedSetting.vue.d.ts +5 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/Product.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/Setting.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/Takeaway.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Catalog/Edit/[id].vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/CatalogBinding/CatalogBinding.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Category/Category.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/CookingGuide/CookingGuide.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Group/Group.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/ImportExport/ImportDiffPreview.vue.d.ts +25 -0
- package/dist/apps/mf-menu/src/views/ImportExport/ImportExport.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/views/ImportExport/ImportV3DiffPreview.vue.d.ts +26 -0
- package/dist/apps/mf-menu/src/views/ImportExport/PreviewImportTable.vue.d.ts +30 -0
- package/dist/apps/mf-menu/src/views/Ingredient/Ingredient.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/CategoryRenameDialog.vue.d.ts +26 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/DetailPane.vue.d.ts +23 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/EditorHistoryControls.vue.d.ts +22 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/MenuManagementEditor.vue.d.ts +10 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/RestaurantAttributesFilter.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/ScopeSwitcher.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/TreeFilter.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/TreePanel.vue.d.ts +9 -0
- package/dist/apps/mf-menu/src/views/MenuManagementEditor/TreeRow.vue.d.ts +25 -0
- package/dist/apps/mf-menu/src/views/MenuSetting/MenuSetting.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/OrderPacing/OrderPacing.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Preview/Preview.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/PrintRoute/PrintRoute.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Product/ProductInternalTools.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Product/Products.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Publish/Publish.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Recipe/Recipe.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Scheduler/Scheduler.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/ServingSequence/ServingSequence.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Subcategory/Subcategory.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Takeaway/Takeaway.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Unit/Unit.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/views/Variant/Variant.vue.d.ts +2 -0
- package/dist/apps/mf-menu/src/workers/menu-compute.d.ts +1 -0
- package/dist/apps/mf-menu/src/workers/validate-menu.d.ts +1 -0
- package/dist/apps/mf-menu/tsconfig.app.tsbuildinfo +1 -0
- package/dist/assets/menu-compute-okel5FLc.js +260 -0
- package/dist/assets/validate-menu-DEFGpnQh.js +130 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-CGPDazqs.js +57 -0
- package/dist/mf-menu-portal.css +1 -0
- package/dist/provide-Tmjfji09.js +190840 -0
- package/dist/ruleValueKey-BF52PuHb.js +10 -0
- package/dist/tableSemantics-C9WFO_I_.js +22 -0
- package/dist/useActionFeedback-DoFeBFpl.js +95 -0
- package/dist/useEditorValidation-Ctef5Bxt.js +63 -0
- package/package.json +79 -3
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
modelValue: number | null;
|
|
3
|
+
currency?: string | null;
|
|
4
|
+
commitOnInput?: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare var __VLS_15: {}, __VLS_17: {};
|
|
7
|
+
type __VLS_Slots = {} & {
|
|
8
|
+
append?: (props: typeof __VLS_15) => any;
|
|
9
|
+
} & {
|
|
10
|
+
'helper-text'?: (props: typeof __VLS_17) => any;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<__VLS_Props, {
|
|
13
|
+
inputEl: import("vue").ComputedRef<HTMLInputElement | null>;
|
|
14
|
+
focus: () => void | undefined;
|
|
15
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
|
+
"update:modelValue": (value: number | null) => any;
|
|
17
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
|
+
"onUpdate:modelValue"?: ((value: number | null) => any) | undefined;
|
|
19
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, __VLS_Slots>;
|
|
20
|
+
export default _default;
|
|
21
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
22
|
+
new (): {
|
|
23
|
+
$slots: S;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AsyncState, ItemOverviewView } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
modelValue: boolean;
|
|
4
|
+
state: AsyncState<ItemOverviewView> | null;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
7
|
+
"update:modelValue": (value: boolean) => any;
|
|
8
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
10
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MenuBinding } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
sdk: MenuBinding;
|
|
4
|
+
initialProductIds: readonly string[];
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
7
|
+
close: () => any;
|
|
8
|
+
created: (name: string) => any;
|
|
9
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onClose?: (() => any) | undefined;
|
|
11
|
+
onCreated?: ((name: string) => any) | undefined;
|
|
12
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
configured: boolean;
|
|
3
|
+
label: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
7
|
+
open: () => any;
|
|
8
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onOpen?: (() => any) | undefined;
|
|
10
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ItemPricingSession } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
session: ItemPricingSession;
|
|
4
|
+
onCreatePriceGroup?: (title: string) => Promise<boolean>;
|
|
5
|
+
/** Nested member pricing must be above the pricing sheet that opened it. */
|
|
6
|
+
zIndex?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Whether the member sheet names the base price "Main Pricing" when it
|
|
9
|
+
* configures no named tier. Legacy's item price section passes that label
|
|
10
|
+
* (TreeEditor/item/ProductPrice.vue:234); its group option table passes
|
|
11
|
+
* none, so the line is empty there (OptionTable.vue:436).
|
|
12
|
+
*/
|
|
13
|
+
mainPricingLabel?: boolean;
|
|
14
|
+
};
|
|
15
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
|
+
close: () => any;
|
|
17
|
+
suggest: () => any;
|
|
18
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
19
|
+
onClose?: (() => any) | undefined;
|
|
20
|
+
onSuggest?: (() => any) | undefined;
|
|
21
|
+
}>, {
|
|
22
|
+
zIndex: number;
|
|
23
|
+
onCreatePriceGroup: (title: string) => Promise<boolean>;
|
|
24
|
+
mainPricingLabel: boolean;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MenuBinding } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
sdk: MenuBinding;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
6
|
+
close: () => any;
|
|
7
|
+
created: (name: string) => any;
|
|
8
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onClose?: (() => any) | undefined;
|
|
10
|
+
onCreated?: ((name: string) => any) | undefined;
|
|
11
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Issue } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
label: string;
|
|
4
|
+
accessibleName: string;
|
|
5
|
+
toggleAccessibleName?: string;
|
|
6
|
+
fieldAccessibleName?: string;
|
|
7
|
+
modelValue: number | null;
|
|
8
|
+
issue?: Issue;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
12
|
+
"update:modelValue": (value: number | null) => any;
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
|
+
"onUpdate:modelValue"?: ((value: number | null) => any) | undefined;
|
|
15
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ItemSummaryView } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
summary: ItemSummaryView;
|
|
4
|
+
variant?: 'full' | 'dialog';
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
7
|
+
variant: "dialog" | "full";
|
|
8
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MenuBinding } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
sdk: MenuBinding;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
6
|
+
close: () => any;
|
|
7
|
+
created: (name: string) => any;
|
|
8
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onClose?: (() => any) | undefined;
|
|
10
|
+
onCreated?: ((name: string) => any) | undefined;
|
|
11
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ItemEditorSession, ItemEditorView } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
modelValue: boolean;
|
|
4
|
+
view: ItemEditorView;
|
|
5
|
+
session: ItemEditorSession;
|
|
6
|
+
/** Which field group opens expanded, as legacy's two entry points do. */
|
|
7
|
+
initialSection?: 'name' | 'description';
|
|
8
|
+
};
|
|
9
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
10
|
+
"update:modelValue": (value: boolean) => any;
|
|
11
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
12
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
13
|
+
}>, {
|
|
14
|
+
initialSection: "name" | "description";
|
|
15
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MenuBinding } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
sdk: MenuBinding;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
6
|
+
close: () => any;
|
|
7
|
+
created: (name: string) => any;
|
|
8
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onClose?: (() => any) | undefined;
|
|
10
|
+
onCreated?: ((name: string) => any) | undefined;
|
|
11
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { VariantTranslationSession } from '@feedmepos/menu-sdk';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
session: VariantTranslationSession;
|
|
4
|
+
expandedSection: 'variant' | 'options';
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
7
|
+
close: () => any;
|
|
8
|
+
save: () => any;
|
|
9
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onClose?: (() => any) | undefined;
|
|
11
|
+
onSave?: (() => any) | undefined;
|
|
12
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kinds of entity the product form can ask to have created without leaving
|
|
3
|
+
* it, and the dialog copy for the two that are just a name.
|
|
4
|
+
*
|
|
5
|
+
* Separate from the host component only because `<script setup>` cannot export
|
|
6
|
+
* a type, and both the product page and the editor's detail pane need to name
|
|
7
|
+
* this one.
|
|
8
|
+
*/
|
|
9
|
+
export declare const INLINE_CREATE: {
|
|
10
|
+
readonly category: {
|
|
11
|
+
readonly title: "menu.category.manager.dialog.add.title";
|
|
12
|
+
readonly label: "menu.category.name";
|
|
13
|
+
readonly action: "menu.category.manager.dialog.add.action";
|
|
14
|
+
readonly success: "menu.category.manager.dialog.add.success";
|
|
15
|
+
};
|
|
16
|
+
readonly subcategory: {
|
|
17
|
+
readonly title: "menu.subcategory.manager.dialog.add.title";
|
|
18
|
+
readonly label: "menu.subcategory.name";
|
|
19
|
+
readonly action: "menu.subcategory.manager.dialog.add.action";
|
|
20
|
+
readonly success: "menu.subcategory.manager.dialog.add.success";
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export type InlineCreateKind = keyof typeof INLINE_CREATE | 'priceGroup' | 'pacing' | 'group' | 'variant' | 'printRoute' | 'takeaway';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AddonGroupType, OrderFrom } from '@feedmepos/menu-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Enum-to-locale-key maps for the product surfaces.
|
|
4
|
+
*
|
|
5
|
+
* Written as WHOLE literals rather than interpolating the enum value into the
|
|
6
|
+
* key's last segment: the i18n gate finds a code by matching a literal or a
|
|
7
|
+
* namespace-prefixed template, and a template it cannot expand is a hard failure
|
|
8
|
+
* with a named remedy — pass the whole key. A map keeps every key visible to the
|
|
9
|
+
* scanner and keeps the lowercase-namespace convention out of the render path,
|
|
10
|
+
* where a translator can neither see nor override it.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ORDER_FROM_LABEL: Readonly<Record<OrderFrom, string>>;
|
|
13
|
+
export declare const ADDON_GROUP_TYPE_LABEL: Readonly<Record<AddonGroupType, string>>;
|
|
14
|
+
/** List chips use the short availability labels observed in ProductTable. */
|
|
15
|
+
export declare const ORDER_FROM_TABLE_LABEL: Readonly<Record<OrderFrom, string>>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type BatchImageBadgeVariant = 'success' | 'info' | 'warning' | 'critical' | 'neutral' | 'cover';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
label: string;
|
|
4
|
+
variant: BatchImageBadgeVariant;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type BatchImageOverview } from '@feedmepos/menu-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Download images: pick formats and images, then the SDK plans the archive
|
|
4
|
+
* (paths, and the manifest that lets it come back) and the browser fetches
|
|
5
|
+
* and zips it.
|
|
6
|
+
*/
|
|
7
|
+
type __VLS_Props = {
|
|
8
|
+
overview: BatchImageOverview;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
11
|
+
close: () => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onClose?: (() => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BatchImageFormatChip, BatchImageNewFormat } from '@feedmepos/menu-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* The formats of one image as tinted static badges, each led by a glyph in
|
|
4
|
+
* the format's own aspect ratio. The tint carries the state — the SDK decides
|
|
5
|
+
* the state, this only names it. `FmChip` is not used: its variants paint a
|
|
6
|
+
* solid fill with white text and it is interactive, whereas these are
|
|
7
|
+
* read-only status marks (the same reason `TextChip` exists).
|
|
8
|
+
*/
|
|
9
|
+
type __VLS_Props = {
|
|
10
|
+
formats: readonly (BatchImageFormatChip | BatchImageNewFormat)[];
|
|
11
|
+
};
|
|
12
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BatchImageProgress } from '@feedmepos/menu-sdk';
|
|
2
|
+
/** The running update: steps, overall progress and each product's state. */
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
progress: BatchImageProgress;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
7
|
+
stop: () => any;
|
|
8
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onStop?: (() => any) | undefined;
|
|
10
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BatchImageResult } from '@feedmepos/menu-sdk';
|
|
2
|
+
/** What the run did, product by product, while AI formats finish. */
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
result: BatchImageResult;
|
|
5
|
+
sourceLabel: string;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
8
|
+
close: () => any;
|
|
9
|
+
retry: () => any;
|
|
10
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
11
|
+
onClose?: (() => any) | undefined;
|
|
12
|
+
onRetry?: (() => any) | undefined;
|
|
13
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BatchImageAttentionRow, BatchImageImportSession, BatchImageImportView } from '@feedmepos/menu-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Review step: what each product will end up with, the files that need a
|
|
4
|
+
* decision, and the files no product claimed. Every row, count and label is
|
|
5
|
+
* the session's; the controls forward intents back to it.
|
|
6
|
+
*/
|
|
7
|
+
type __VLS_Props = {
|
|
8
|
+
session: BatchImageImportSession;
|
|
9
|
+
view: BatchImageImportView;
|
|
10
|
+
previews: Map<string, string>;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
13
|
+
start: () => any;
|
|
14
|
+
crop: (row: BatchImageAttentionRow) => any;
|
|
15
|
+
back: () => any;
|
|
16
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
|
+
onStart?: (() => any) | undefined;
|
|
18
|
+
onCrop?: ((row: BatchImageAttentionRow) => any) | undefined;
|
|
19
|
+
onBack?: (() => any) | undefined;
|
|
20
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One product photo in the batch image tool, framed the way the product list
|
|
3
|
+
* frames its thumbnail (`FmCard` outlined, cover-cropped). An empty frame
|
|
4
|
+
* shows the library's image icon.
|
|
5
|
+
*/
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
src?: string | null;
|
|
8
|
+
alt: string;
|
|
9
|
+
size?: 'sm' | 'md' | 'lg';
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
12
|
+
src: string | null;
|
|
13
|
+
size: "md" | "sm" | "lg";
|
|
14
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
2
|
+
close: () => any;
|
|
3
|
+
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
4
|
+
onClose?: (() => any) | undefined;
|
|
5
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BatchImageImportSession, BatchImageImportView } from '@feedmepos/menu-sdk';
|
|
2
|
+
import { type PickedFile } from './batchImageFiles';
|
|
3
|
+
/**
|
|
4
|
+
* Setup step of Update images: pick files, see how they will be matched, and
|
|
5
|
+
* choose what happens to existing images. Everything shown is the session's
|
|
6
|
+
* view; the choices are forwarded as intents.
|
|
7
|
+
*/
|
|
8
|
+
type __VLS_Props = {
|
|
9
|
+
session: BatchImageImportSession;
|
|
10
|
+
view: BatchImageImportView;
|
|
11
|
+
productCount: number;
|
|
12
|
+
reading: {
|
|
13
|
+
done: number;
|
|
14
|
+
total: number;
|
|
15
|
+
} | null;
|
|
16
|
+
};
|
|
17
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
18
|
+
cancel: () => any;
|
|
19
|
+
clear: () => any;
|
|
20
|
+
pick: (files: PickedFile[], meta: {
|
|
21
|
+
label: string;
|
|
22
|
+
kind: "files" | "zip" | "folder";
|
|
23
|
+
}) => any;
|
|
24
|
+
review: () => any;
|
|
25
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
26
|
+
onCancel?: (() => any) | undefined;
|
|
27
|
+
onClear?: (() => any) | undefined;
|
|
28
|
+
onPick?: ((files: PickedFile[], meta: {
|
|
29
|
+
label: string;
|
|
30
|
+
kind: "files" | "zip" | "folder";
|
|
31
|
+
}) => any) | undefined;
|
|
32
|
+
onReview?: (() => any) | undefined;
|
|
33
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
34
|
+
export default _default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type BatchImageDownloadPlan, type BatchImagePreparedFile, type BatchImageSourceInput } from '@feedmepos/menu-sdk';
|
|
2
|
+
import { type RenderedImage } from '@/components/ProductImage/imageBrowser';
|
|
3
|
+
/**
|
|
4
|
+
* Browser work for the batch image tool: reading archives and folders,
|
|
5
|
+
* hashing, re-encoding, and writing the download archive.
|
|
6
|
+
*
|
|
7
|
+
* None of it decides anything. The SDK's `productBatchImage` facade reads the
|
|
8
|
+
* paths, matches products and plans every request; this file only turns what
|
|
9
|
+
* the merchant picked into `BatchImageSourceInput` and turns a download plan
|
|
10
|
+
* into a ZIP (ADR-0002 §1 — file-format adaptation is a host capability, the
|
|
11
|
+
* same split `sdk/import-export.ts` uses for workbooks).
|
|
12
|
+
*/
|
|
13
|
+
export interface PickedFile {
|
|
14
|
+
/** `/`-separated path inside the picked folder or archive. */
|
|
15
|
+
readonly path: string;
|
|
16
|
+
readonly file: File;
|
|
17
|
+
}
|
|
18
|
+
export declare function pickedFromInput(files: FileList | readonly File[]): PickedFile[];
|
|
19
|
+
/** Walks dropped folders; a plain file drop yields its name as the path. */
|
|
20
|
+
export declare function pickedFromDrop(transfer: DataTransfer): Promise<PickedFile[]>;
|
|
21
|
+
export interface BuiltSource {
|
|
22
|
+
readonly source: BatchImageSourceInput;
|
|
23
|
+
/** Object URLs for previews, by file key; revoke with `revokePreviews`. */
|
|
24
|
+
readonly previews: Map<string, string>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Reads, hashes and re-encodes every picked image.
|
|
28
|
+
*
|
|
29
|
+
* Every upload is re-encoded under the limit the product editor uses
|
|
30
|
+
* (`compressImageFile`), so an oversized photo is fixed here rather than
|
|
31
|
+
* refused; the hash is taken of the bytes as picked, which is what an export
|
|
32
|
+
* manifest recorded.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildSource(picked: readonly PickedFile[], meta: {
|
|
35
|
+
readonly label: string;
|
|
36
|
+
readonly kind: BatchImageSourceInput['kind'];
|
|
37
|
+
}, onProgress?: (done: number, total: number) => void): Promise<BuiltSource>;
|
|
38
|
+
export declare function revokePreviews(previews: Map<string, string>): void;
|
|
39
|
+
/** A cropped replacement, in the same prepared shape the SDK already holds. */
|
|
40
|
+
export declare function preparedFromRendered(rendered: RenderedImage): BatchImagePreparedFile;
|
|
41
|
+
/**
|
|
42
|
+
* Fetches every planned file, hashes it, and zips it with the manifest the
|
|
43
|
+
* SDK writes from those hashes. Images are already compressed, so the archive
|
|
44
|
+
* stores them rather than deflating them again.
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildDownloadArchive(plan: BatchImageDownloadPlan, manifestFor: (hashes: Record<string, string>) => {
|
|
47
|
+
readonly path: string;
|
|
48
|
+
readonly content: string;
|
|
49
|
+
}, onProgress?: (done: number, total: number) => void): Promise<{
|
|
50
|
+
readonly blob: Blob;
|
|
51
|
+
readonly failed: number;
|
|
52
|
+
}>;
|
|
53
|
+
export declare function saveBlob(blob: Blob, fileName: string): void;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { MenuBinding, RatioId } from '@feedmepos/menu-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Adding a custom aspect ratio.
|
|
4
|
+
*
|
|
5
|
+
* The rule AND the ratio's identity are both the SDK's: `customRatio`
|
|
6
|
+
* validates the two numbers and returns the id to submit. That is what keeps
|
|
7
|
+
* the media wire form out of the presentation layer (ADR-0049 decision 1) —
|
|
8
|
+
* an earlier version composed `${width}x${height}` here, which put the same
|
|
9
|
+
* encoding on both sides of the boundary where it could drift.
|
|
10
|
+
*
|
|
11
|
+
* Confirm stays CLICKABLE on an invalid form, which is what legacy does and
|
|
12
|
+
* what the frozen golden shows: the press closes it and reports the SDK rejection. This dialog
|
|
13
|
+
* disabled it at first, which looked like an improvement and was a
|
|
14
|
+
* difference nobody approved.
|
|
15
|
+
*
|
|
16
|
+
* The two fields are sized rather than stretched: legacy gives each 187px
|
|
17
|
+
* and leaves the rest of the row trailing, and a dimension pair reads as one
|
|
18
|
+
* ratio rather than as two fields filling a dialog. ADR-0003 §5 as amended
|
|
19
|
+
* 2026-09-21 makes this ordinary layout work — what that section forbids is
|
|
20
|
+
* a bespoke `div`-and-CSS control standing in for a library one, not sizing
|
|
21
|
+
* the library's own. Everything here is `FmDialog`, `FmTextField` and
|
|
22
|
+
* `FmButton`; only their geometry is set.
|
|
23
|
+
*
|
|
24
|
+
* The wrapper carries the width because `FmTextField` sizes its own root, so
|
|
25
|
+
* a class or style on the component itself does nothing. The wrapper is 11px
|
|
26
|
+
* wider than the field it contains.
|
|
27
|
+
*/
|
|
28
|
+
type __VLS_Props = {
|
|
29
|
+
sdk: MenuBinding;
|
|
30
|
+
/** Ratio ids already on the image, so a duplicate can be refused. */
|
|
31
|
+
existingIds: readonly RatioId[];
|
|
32
|
+
};
|
|
33
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
34
|
+
close: () => any;
|
|
35
|
+
confirm: (ratioId: RatioId) => any;
|
|
36
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
37
|
+
onClose?: (() => any) | undefined;
|
|
38
|
+
onConfirm?: ((ratioId: RatioId) => any) | undefined;
|
|
39
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
40
|
+
export default _default;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import 'vue-advanced-cropper/dist/style.css';
|
|
2
|
+
import type { ProductImageEditView } from '@feedmepos/menu-sdk';
|
|
3
|
+
/**
|
|
4
|
+
* The crop editor, in its two modes.
|
|
5
|
+
*
|
|
6
|
+
* `upload` — opened by the gallery for each accepted file. The merchant
|
|
7
|
+
* chooses the shape, and Confirm produces the bytes the upload intent
|
|
8
|
+
* sends.
|
|
9
|
+
*
|
|
10
|
+
* `replace` — opened by the Manage drawer for ONE aspect ratio
|
|
11
|
+
* (`ManageImageDrawer.vue:411-431`). The ratio is locked by the row, the
|
|
12
|
+
* merchant picks the photo INSIDE the dialog, and the bytes become that
|
|
13
|
+
* ratio's final image. The two approved scenarios on this mode are
|
|
14
|
+
* observations of the dialog itself: `synthetic/ratio-locked-replace`
|
|
15
|
+
* checks that it names the locked target and states what it accepts, and
|
|
16
|
+
* `synthetic/ratio-replace-no-file` checks that Confirm with nothing picked
|
|
17
|
+
* reports the no-file refusal and leaves the drawer unchanged. An earlier
|
|
18
|
+
* version reached this gesture by clicking a hidden file input, which has
|
|
19
|
+
* no dialog to observe and — because cancelling an OS chooser fires no
|
|
20
|
+
* `change` event — made the refusal unreachable.
|
|
21
|
+
*
|
|
22
|
+
* Everything here is a BROWSER capability, not a domain rule: cropping,
|
|
23
|
+
* zooming and rotating are operations on pixels, and the SDK is
|
|
24
|
+
* framework-agnostic and never sees them. What leaves this dialog is a
|
|
25
|
+
* `Blob` plus its dimensions — or `null`, which the caller hands to the SDK
|
|
26
|
+
* so the refusal is the SDK's and not a message invented here.
|
|
27
|
+
*
|
|
28
|
+
* Confirm is never disabled. The merchant may upload the photo untouched —
|
|
29
|
+
* that is the common case, and legacy's subtitle says so in as many words
|
|
30
|
+
* ("Crop or zoom if you want to. Confirm uploads the whole photo."). A
|
|
31
|
+
* dialog that demanded a crop would invent a requirement.
|
|
32
|
+
*
|
|
33
|
+
* The preset list is presentation: it names the shapes the merchant can
|
|
34
|
+
* choose between, and none of them is the aspect-ratio SET the business
|
|
35
|
+
* generates — that is the drawer's concern and lives in media-service. In
|
|
36
|
+
* `replace` the list is absent entirely, because the row already decided.
|
|
37
|
+
*/
|
|
38
|
+
type __VLS_Props = {
|
|
39
|
+
/** Absent in `replace`, where the merchant picks inside the dialog. */
|
|
40
|
+
file?: File | null;
|
|
41
|
+
mode?: 'upload' | 'replace' | 'edit';
|
|
42
|
+
editView?: ProductImageEditView | null;
|
|
43
|
+
/** Locks the crop shape. Display form, e.g. `3:2`. Only `replace`. */
|
|
44
|
+
ratioLabel?: string | null;
|
|
45
|
+
/** SDK-derived numeric crop lock for replacement mode. */
|
|
46
|
+
aspectRatio?: number | null;
|
|
47
|
+
/**
|
|
48
|
+
* Replaces the subtitle. The batch image tool opens `upload` with a
|
|
49
|
+
* required crop, where "Confirm uploads the whole photo" is untrue.
|
|
50
|
+
*/
|
|
51
|
+
hint?: string | null;
|
|
52
|
+
/** Position in the batch, so the subtitle can count. */
|
|
53
|
+
index?: number;
|
|
54
|
+
total?: number;
|
|
55
|
+
};
|
|
56
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
57
|
+
cancel: () => any;
|
|
58
|
+
confirm: (value: {
|
|
59
|
+
blob: Blob;
|
|
60
|
+
width: number;
|
|
61
|
+
height: number;
|
|
62
|
+
fileName: string;
|
|
63
|
+
} | null) => any;
|
|
64
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
65
|
+
onCancel?: (() => any) | undefined;
|
|
66
|
+
onConfirm?: ((value: {
|
|
67
|
+
blob: Blob;
|
|
68
|
+
width: number;
|
|
69
|
+
height: number;
|
|
70
|
+
fileName: string;
|
|
71
|
+
} | null) => any) | undefined;
|
|
72
|
+
}>, {
|
|
73
|
+
mode: "replace" | "upload" | "edit";
|
|
74
|
+
file: File | null;
|
|
75
|
+
index: number;
|
|
76
|
+
editView: ProductImageEditView | null;
|
|
77
|
+
ratioLabel: string | null;
|
|
78
|
+
aspectRatio: number | null;
|
|
79
|
+
hint: string | null;
|
|
80
|
+
total: number;
|
|
81
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
82
|
+
export default _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MenuBinding, ProductImageTarget } from '@feedmepos/menu-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* The product's image gallery, and the surface every other product-image
|
|
4
|
+
* overlay is reached from.
|
|
5
|
+
*
|
|
6
|
+
* Everything it renders is an SDK view model: which tile is the cover,
|
|
7
|
+
* whether a tile can be managed or removed, and whether adding is possible
|
|
8
|
+
* at all are decided in `sdk.productImage`, not here. The component's whole
|
|
9
|
+
* job is to draw them and forward intent (ADR-0002 §1, ADR-0003).
|
|
10
|
+
*
|
|
11
|
+
* Four things worth knowing before changing it:
|
|
12
|
+
*
|
|
13
|
+
* 1. **The gallery is DRAFT state, addressed through an opaque handle.**
|
|
14
|
+
* `target` comes from `ItemEditorSession.images`; a confirmed upload is
|
|
15
|
+
* written into the product form's draft by the SDK and persisted by the
|
|
16
|
+
* enclosing save. Nothing here routes the outcome — an earlier version
|
|
17
|
+
* emitted the created images to a parent that bound no listener, so a
|
|
18
|
+
* confirmed upload left bytes in media-service that no menu document
|
|
19
|
+
* referenced.
|
|
20
|
+
* 2. **Picking files is ONE gesture and therefore one intent.** The SDK's
|
|
21
|
+
* `upload` takes the whole batch. What is per-file is the TYPE verdict:
|
|
22
|
+
* legacy raises one snackbar per unsupported file and lets the rest
|
|
23
|
+
* through (`ProductImageField.vue:394-401`), which one batch outcome
|
|
24
|
+
* cannot express, so `screenFile` is asked per file and the survivors go
|
|
25
|
+
* as one batch.
|
|
26
|
+
* 3. **Every accepted file is reviewed in the crop editor first.** That is
|
|
27
|
+
* where the JPEG re-encode happens, which is why a confirmed PNG reaches
|
|
28
|
+
* media-service as `image/jpeg` — as the frozen upload request records.
|
|
29
|
+
* 4. **A failed upload leaves the gallery untouched.** The SDK applies the
|
|
30
|
+
* batch only after the whole of it confirms, so there is no optimistic
|
|
31
|
+
* tile to roll back and none is invented here.
|
|
32
|
+
*/
|
|
33
|
+
type __VLS_Props = {
|
|
34
|
+
sdk: MenuBinding;
|
|
35
|
+
/**
|
|
36
|
+
* The product whose gallery this is, as the item editor addresses it.
|
|
37
|
+
* Opaque — it is passed to the SDK and never read.
|
|
38
|
+
*/
|
|
39
|
+
target: ProductImageTarget | null;
|
|
40
|
+
};
|
|
41
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
42
|
+
export default _default;
|