@useinsider/guido 3.14.0-beta.1e474dd → 3.14.0-beta.2bae355
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/dist/components/organisms/header/EditorActions.vue.js +1 -1
- package/dist/components/organisms/header/EditorActions.vue2.js +47 -39
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +30 -28
- package/dist/{src/composables → composables}/useHtmlValidator.d.ts +2 -3
- package/dist/composables/useHtmlValidator.js +50 -50
- package/dist/{src/composables → composables}/useHttp.d.ts +6 -0
- package/dist/composables/useHttp.js +66 -59
- package/dist/config/i18n/en/labels.json.js +3 -7
- package/dist/config/migrator/recommendation/compositionMapper.js +23 -26
- package/dist/config/migrator/recommendation/htmlBuilder.js +155 -156
- package/dist/{src/config → config}/migrator/recommendation/types.d.ts +0 -1
- package/dist/{src/extensions → extensions}/Blocks/Recommendation/constants/index.d.ts +1 -1
- package/dist/{src/extensions → extensions}/Blocks/Recommendation/constants/selectors.d.ts +0 -4
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +13 -15
- package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/cardComposition/index.d.ts +5 -22
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +314 -346
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +43 -44
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +16 -16
- package/dist/extensions/Blocks/Recommendation/templates/list/template.js +16 -16
- package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/utils.d.ts +11 -12
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +120 -120
- package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +54 -55
- package/dist/{src/extensions → extensions}/Blocks/common-control.d.ts +1 -3
- package/dist/extensions/Blocks/common-control.js +35 -42
- package/dist/guido.css +1 -1
- package/package.json +1 -1
- package/dist/extensions/Blocks/Recommendation/utils/compositionKeys.js +0 -89
- package/dist/src/extensions/Blocks/Recommendation/utils/compositionKeys.d.ts +0 -52
- /package/dist/{src/@types → @types}/config/defaults.d.ts +0 -0
- /package/dist/{src/@types → @types}/config/index.d.ts +0 -0
- /package/dist/{src/@types → @types}/config/schemas.d.ts +0 -0
- /package/dist/{src/@types → @types}/config/types.d.ts +0 -0
- /package/dist/{src/@types → @types}/config/validator.d.ts +0 -0
- /package/dist/{src/@types → @types}/events.d.ts +0 -0
- /package/dist/{src/@types → @types}/extensions/block.d.ts +0 -0
- /package/dist/{src/@types → @types}/generic.d.ts +0 -0
- /package/dist/{src/@types → @types}/save-as-template.d.ts +0 -0
- /package/dist/{src/App.vue.d.ts → App.vue.d.ts} +0 -0
- /package/dist/{src/components → components}/Guido.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/AutoSaveController.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/LoadingWrapper.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/base/Toaster.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/PreviewContainer.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/amp/AmpErrorModal.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/amp/AmpToggle.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/desktop-preview/DesktopBrowserHeader.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/desktop-preview/DesktopPreview.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/mobile-preview/ContentView.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/mobile-preview/InboxView.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/email-preview/mobile-preview/MobilePreview.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/extensions/recommendation/FilterItem.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/extensions/recommendation/FilterSelectionDrawer.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/extensions/recommendation/Filters.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/extensions/recommendation/LogicAdapter.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/AutoSaveToggle.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/EditorActions.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/EditorToolbar.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/HeaderWrapper.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/LeftSlot.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/MiddleSlot.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/MigrationConfirmModal.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/RightSlot.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/ViewOptions.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/version-history/RestoreButton.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/version-history/VersionHistory.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/version-history/VersionHistoryItem.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/header/version-history/ViewOptions.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/AMPOnboarding.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/GenericOnboarding.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/ItemsOnboarding.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/NewVersionPopup.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/OnboardingWrapper.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/TextBlockOnboarding.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/onboarding/VersionHistoryOnboarding.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/save-as-template/SaveAsTemplateDrawer.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/unsubscribe/UnsubscribeBreadcrumb.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/unsubscribe/UnsubscribePageSelection.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/unsubscribe/UnsubscribeTypeSelection.vue.d.ts +0 -0
- /package/dist/{src/components → components}/organisms/unsubscribe/UnsubscribeWrapper.vue.d.ts +0 -0
- /package/dist/{src/components → components}/wrappers/WpDrawer.vue.d.ts +0 -0
- /package/dist/{src/components → components}/wrappers/WpModal.vue.d.ts +0 -0
- /package/dist/{src/composables → composables}/useActionsApi.d.ts +0 -0
- /package/dist/{src/composables → composables}/useAllowlist.d.ts +0 -0
- /package/dist/{src/composables → composables}/useAutoSave.d.ts +0 -0
- /package/dist/{src/composables → composables}/useBlocksConfig.d.ts +0 -0
- /package/dist/{src/composables → composables}/useCodeEditorApi.d.ts +0 -0
- /package/dist/{src/composables → composables}/useConfig.d.ts +0 -0
- /package/dist/{src/composables → composables}/useCortexBlueprintBridge.d.ts +0 -0
- /package/dist/{src/composables → composables}/useCustomInterfaceAppearance.d.ts +0 -0
- /package/dist/{src/composables → composables}/useDebounce.d.ts +0 -0
- /package/dist/{src/composables → composables}/useEmailTemplateApplier.d.ts +0 -0
- /package/dist/{src/composables → composables}/useExport.d.ts +0 -0
- /package/dist/{src/composables → composables}/useFullStoryBridge.d.ts +0 -0
- /package/dist/{src/composables → composables}/useGuidoActions.d.ts +0 -0
- /package/dist/{src/composables → composables}/useGuidoStateBridge.d.ts +0 -0
- /package/dist/{src/composables → composables}/useHtmlCompiler.d.ts +0 -0
- /package/dist/{src/composables → composables}/useModuleDynamicContentRepair.d.ts +0 -0
- /package/dist/{src/composables → composables}/usePartner.d.ts +0 -0
- /package/dist/{src/composables → composables}/usePreviewInteractionGuard.d.ts +0 -0
- /package/dist/{src/composables → composables}/usePreviewMode.d.ts +0 -0
- /package/dist/{src/composables → composables}/useProvideInject.d.ts +0 -0
- /package/dist/{src/composables → composables}/useRecommendation.d.ts +0 -0
- /package/dist/{src/composables → composables}/useRecommendationPreview.d.ts +0 -0
- /package/dist/{src/composables → composables}/useResponsivePreview.d.ts +0 -0
- /package/dist/{src/composables → composables}/useRibbonOffset.d.ts +0 -0
- /package/dist/{src/composables → composables}/useSave.d.ts +0 -0
- /package/dist/{src/composables → composables}/useStripo.d.ts +0 -0
- /package/dist/{src/composables → composables}/useStripoEventHandler.d.ts +0 -0
- /package/dist/{src/composables → composables}/useStripoNotifications.d.ts +0 -0
- /package/dist/{src/composables → composables}/useSyncModuleExtractor.d.ts +0 -0
- /package/dist/{src/composables → composables}/useTimerClone.d.ts +0 -0
- /package/dist/{src/composables → composables}/useToaster.d.ts +0 -0
- /package/dist/{src/composables → composables}/useTranslations.d.ts +0 -0
- /package/dist/{src/composables → composables}/useUserRole.d.ts +0 -0
- /package/dist/{src/composables → composables}/useValidation.d.ts +0 -0
- /package/dist/{src/composables → composables}/useVersionHistoryApi.d.ts +0 -0
- /package/dist/{src/composables → composables}/validators/saveAsTemplate.d.ts +0 -0
- /package/dist/{src/composables → composables}/validators/useCouponBlockValidator.d.ts +0 -0
- /package/dist/{src/composables → composables}/validators/useLiquidValidator.d.ts +0 -0
- /package/dist/{src/composables → composables}/validators/useUnsubscribeBlockValidator.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/htmlCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/itemsCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/liquidCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/outlookCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/recommendationCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/socialCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/unsubscribeCompilerRules.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/utils/recommendationCompilerUtils.d.ts +0 -0
- /package/dist/{src/config → config}/compiler/utils/recommendationIgnoreUtils.d.ts +0 -0
- /package/dist/{src/config → config}/i18n/en/index.d.ts +0 -0
- /package/dist/{src/config → config}/i18n/index.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/checkboxMigrator.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/couponBlockMigrator.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/index.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/itemsBlockMigrator.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/radioButtonMigrator.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendation/compositionMapper.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendation/extractors.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendation/htmlBuilder.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendation/parseLegacyConfig.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendation/settingsMapper.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendation/themeMapper.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/recommendationMigrator.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/socialIconMigrator.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/textBlockMigration.d.ts +0 -0
- /package/dist/{src/config → config}/migrator/unsubscribeMigrator.d.ts +0 -0
- /package/dist/{src/enums → enums}/academy.d.ts +0 -0
- /package/dist/{src/enums → enums}/block.d.ts +0 -0
- /package/dist/{src/enums → enums}/date.d.ts +0 -0
- /package/dist/{src/enums → enums}/defaults.d.ts +0 -0
- /package/dist/{src/enums → enums}/extensions/recommendationBlock.d.ts +0 -0
- /package/dist/{src/enums → enums}/html-validator.d.ts +0 -0
- /package/dist/{src/enums → enums}/onboarding.d.ts +0 -0
- /package/dist/{src/enums → enums}/preview.d.ts +0 -0
- /package/dist/{src/enums → enums}/recommendation.d.ts +0 -0
- /package/dist/{src/enums → enums}/roles.d.ts +0 -0
- /package/dist/{src/enums → enums}/toaster.d.ts +0 -0
- /package/dist/{src/enums → enums}/unsubscribe.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Checkbox/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Checkbox/control.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Checkbox/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Checkbox/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Checkbox/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Checkbox/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/constants.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/controls/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/CouponBlock/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/button/link.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/cardComposition.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/image/link.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/name/trimming.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/price/currencyLocation.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/price/currencySymbol.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/price/formattedPrice.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/price/hideDiscount.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/price/priceOrientation.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/price/singlePrice.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/controls/settingsControl.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/enums/controlEnums.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/enums/productEnums.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/enums/settingsEnums.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Items/utils/nodeConfigUtils.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/RadioButton/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/RadioButton/control.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/RadioButton/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/RadioButton/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/RadioButton/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/RadioButton/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/constants/blockIds.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/constants/controlIds.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/constants/layout.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/blockBackground/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/button/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/customAttribute/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/customAttribute/textTrim.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/image/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/currency.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/filters.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/layoutOrientation.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/locale.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/pricePlacement.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/productCount.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/main/utils.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/name/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/price/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/shared/textTrimCssRules.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/spacing/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/controls/syncInfoMessage.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/services/configService.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/services/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/store/recommendation.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/grid/migration.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/grid/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/list/elementRenderer.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/list/migration.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/templates/list/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/types/index.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/types/nodeConfig.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/useRecommendationBlockWarning.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/captureStyleTemplates.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/filterUtil.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/legacyStrategyMap.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/partnerCustomizations.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/priceFormatter.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/recommendationBlockCount.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/utils/tagName.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/validation/filterSchema.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Recommendation/validation/requiredFields.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/control.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/elements/preview.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/tagRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/utils/constants.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/Unsubscribe/utils/utils.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/_Boilerplate/block.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/_Boilerplate/control.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/_Boilerplate/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/_Boilerplate/iconsRegistry.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/_Boilerplate/settingsPanel.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/_Boilerplate/template.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/Blocks/controlFactories.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/DynamicContent/dynamic-content-modal.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/DynamicContent/dynamic-content.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/DynamicContent/extension.d.ts +0 -0
- /package/dist/{src/extensions → extensions}/ModulesTabIcons/extension.d.ts +0 -0
- /package/dist/{src/library.d.ts → library.d.ts} +0 -0
- /package/dist/{src/main.d.ts → main.d.ts} +0 -0
- /package/dist/{src/mock → mock}/api/auth.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/custom-fonts.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/default-template.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/recommendation.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/settings.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/template-library.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/unsubscribe.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/user-modal-state.d.ts +0 -0
- /package/dist/{src/mock → mock}/api/validator.d.ts +0 -0
- /package/dist/{src/mock → mock}/browser.d.ts +0 -0
- /package/dist/{src/mock → mock}/handlers.d.ts +0 -0
- /package/dist/{src/services → services}/allowlistApi.d.ts +0 -0
- /package/dist/{src/services → services}/blankTemplate.d.ts +0 -0
- /package/dist/{src/services → services}/onboardingApi.d.ts +0 -0
- /package/dist/{src/services → services}/recommendationApi.d.ts +0 -0
- /package/dist/{src/services → services}/stripoApi.d.ts +0 -0
- /package/dist/{src/services → services}/templateLibraryApi.d.ts +0 -0
- /package/dist/{src/services → services}/unsubscribeApi.d.ts +0 -0
- /package/dist/{src/stores → stores}/autosave.d.ts +0 -0
- /package/dist/{src/stores → stores}/config.d.ts +0 -0
- /package/dist/{src/stores → stores}/dynamic-content.d.ts +0 -0
- /package/dist/{src/stores → stores}/editor.d.ts +0 -0
- /package/dist/{src/stores → stores}/guido-email-editor.d.ts +0 -0
- /package/dist/{src/stores → stores}/onboarding.d.ts +0 -0
- /package/dist/{src/stores → stores}/preview.d.ts +0 -0
- /package/dist/{src/stores → stores}/recommendation.d.ts +0 -0
- /package/dist/{src/stores → stores}/save-as-template.d.ts +0 -0
- /package/dist/{src/stores → stores}/template.d.ts +0 -0
- /package/dist/{src/stores → stores}/toaster.d.ts +0 -0
- /package/dist/{src/stores → stores}/unsubscribe.d.ts +0 -0
- /package/dist/{src/stores → stores}/version-history.d.ts +0 -0
- /package/dist/{src/utils → utils}/ampErrorFilter.d.ts +0 -0
- /package/dist/{src/utils → utils}/arrayUtil.d.ts +0 -0
- /package/dist/{src/utils → utils}/base64.d.ts +0 -0
- /package/dist/{src/utils → utils}/dateUtil.d.ts +0 -0
- /package/dist/{src/utils → utils}/dynamicContentConverter.d.ts +0 -0
- /package/dist/{src/utils → utils}/environmentUtil.d.ts +0 -0
- /package/dist/{src/utils → utils}/genericUtil.d.ts +0 -0
- /package/dist/{src/utils → utils}/htmlCompiler.d.ts +0 -0
- /package/dist/{src/utils → utils}/htmlEscape.d.ts +0 -0
- /package/dist/{src/utils → utils}/migrationBannerHtml.d.ts +0 -0
- /package/dist/{src/utils → utils}/pairProductVariables.d.ts +0 -0
- /package/dist/{src/utils → utils}/preserveTextStyles.d.ts +0 -0
- /package/dist/{src/utils → utils}/stripFontTags.d.ts +0 -0
- /package/dist/{src/utils → utils}/templatePreparation.d.ts +0 -0
- /package/dist/{src/utils → utils}/timeUtil.d.ts +0 -0
- /package/dist/{src/utils → utils}/tooltipUtils.d.ts +0 -0
- /package/dist/{src/utils → utils}/urlSchemes.d.ts +0 -0
|
@@ -1,104 +1,101 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { UIElementType as
|
|
5
|
-
import { CommonControl as
|
|
6
|
-
import { ATTR_PRODUCT_IMAGE as
|
|
7
|
-
import { DEFAULT_COMPOSITION as
|
|
8
|
-
import { RecommendationConfigService as
|
|
9
|
-
import { useRecommendationExtensionStore as
|
|
10
|
-
import { ATTRIBUTE_CELL_CLASS as
|
|
11
|
-
import { listElementRenderer as
|
|
12
|
-
import { resolveInlinePriceOrder as
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
const Rt = "ui-elements-recommendation-card-composition", k = ".product-card-wrapper > tbody", Y = ".product-info-cell > table > tbody", X = "data-card-composition", O = "data-visibility", J = {
|
|
1
|
+
var tt = Object.defineProperty;
|
|
2
|
+
var et = (g, b, t) => b in g ? tt(g, b, { enumerable: !0, configurable: !0, writable: !0, value: t }) : g[b] = t;
|
|
3
|
+
var v = (g, b, t) => et(g, typeof b != "symbol" ? b + "" : b, t);
|
|
4
|
+
import { UIElementType as f, UEAttr as D, ModificationDescription as T } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
5
|
+
import { CommonControl as rt } from "../../../common-control.js";
|
|
6
|
+
import { ATTR_PRODUCT_IMAGE as k, ATTR_PRODUCT_NAME as it, ATTR_PRODUCT_PRICE as S, ATTR_PRODUCT_OLD_PRICE as N, ATTR_PRODUCT_OMNIBUS_PRICE as ot, ATTR_PRODUCT_OMNIBUS_DISCOUNT as st, ATTR_PRODUCT_BUTTON as U, ATTR_DATA_CUSTOM_ATTRIBUTES as F, ATTR_CUSTOM_PREFIX as m, BUILT_IN_DEFAULT_ATTRIBUTES as nt } from "../../constants/selectors.js";
|
|
7
|
+
import { DEFAULT_COMPOSITION as x, DEFAULT_VISIBILITY as M } from "../../constants/defaultConfig.js";
|
|
8
|
+
import { RecommendationConfigService as y } from "../../services/configService.js";
|
|
9
|
+
import { useRecommendationExtensionStore as lt } from "../../store/recommendation.js";
|
|
10
|
+
import { ATTRIBUTE_CELL_CLASS as at, gridElementRenderer as ct, DEFAULT_CELL_PADDING as dt, buildFillerCell as ut } from "../../templates/grid/elementRenderer.js";
|
|
11
|
+
import { listElementRenderer as mt } from "../../templates/list/elementRenderer.js";
|
|
12
|
+
import { resolveInlinePriceOrder as ht, toDisplayName as pt, isDefaultAttribute as gt, toDisplayableAttributeValue as bt, buildElementRenderer as V } from "../../templates/utils.js";
|
|
13
|
+
import { getTableDisplayValue as ft } from "../../utils/tagName.js";
|
|
14
|
+
import { isPartnerManagedBlock as _t, regenerateProductRowsWithStyles as yt, getCurrentLayout as Ct } from "../main/utils.js";
|
|
15
|
+
const St = "ui-elements-recommendation-card-composition", $ = ".recommendation-attribute-row", H = ".product-card-wrapper > tbody", j = ".product-info-cell > table > tbody", W = "data-card-composition", C = "data-attribute-type", E = "data-visibility", K = {
|
|
17
16
|
ADD_ATTRIBUTE: "addAttribute"
|
|
18
|
-
},
|
|
19
|
-
{ key:
|
|
20
|
-
{ key:
|
|
21
|
-
{ key:
|
|
17
|
+
}, _ = 5, O = "reorderIcon_", At = '<svg width="14" height="10" viewBox="0 0 14 10" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><circle cx="2" cy="2.5" r="1.2"/><circle cx="7" cy="2.5" r="1.2"/><circle cx="12" cy="2.5" r="1.2"/><circle cx="2" cy="7.5" r="1.2"/><circle cx="7" cy="7.5" r="1.2"/><circle cx="12" cy="7.5" r="1.2"/></svg>', h = [
|
|
18
|
+
{ key: k, label: "Product Image" },
|
|
19
|
+
{ key: it, label: "Product Name" },
|
|
20
|
+
{ key: S, label: "Product Price" },
|
|
22
21
|
{ key: N, label: "Product Original Price" },
|
|
23
|
-
{ key:
|
|
24
|
-
{ key:
|
|
25
|
-
{ key:
|
|
26
|
-
],
|
|
27
|
-
class
|
|
22
|
+
{ key: ot, label: "Omnibus Price" },
|
|
23
|
+
{ key: st, label: "Omnibus Discount" },
|
|
24
|
+
{ key: U, label: "Product Button" }
|
|
25
|
+
], Tt = new Set(h.map((g) => g.key)), I = "customAttr_", R = "deleteAttr_";
|
|
26
|
+
class qt extends rt {
|
|
28
27
|
constructor() {
|
|
29
28
|
super(...arguments);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
v(this, "store", lt());
|
|
30
|
+
v(this, "unsubscribeStore", null);
|
|
31
|
+
v(this, "eventController", null);
|
|
33
32
|
/**
|
|
34
33
|
* Guard flag: when true, onTemplateNodeUpdated skips _initializeComposition.
|
|
35
34
|
* Used during _onReorder to prevent multiple intermediate rebuilds.
|
|
36
35
|
*/
|
|
37
|
-
|
|
36
|
+
v(this, "reorderInProgress", !1);
|
|
38
37
|
}
|
|
39
38
|
getId() {
|
|
40
|
-
return
|
|
39
|
+
return St;
|
|
41
40
|
}
|
|
42
41
|
// ========================================================================
|
|
43
42
|
// Lifecycle
|
|
44
43
|
// ========================================================================
|
|
45
44
|
getTemplate() {
|
|
46
|
-
const t =
|
|
47
|
-
<div data-toggle-key="${
|
|
48
|
-
${this._GuToggle(`visibility_${
|
|
45
|
+
const t = h.map((a) => `
|
|
46
|
+
<div data-toggle-key="${a.key}" style="display: none;">
|
|
47
|
+
${this._GuToggle(`visibility_${a.key}`)}
|
|
49
48
|
</div>
|
|
50
49
|
`).join(""), e = Array.from(
|
|
51
|
-
{ length:
|
|
52
|
-
(
|
|
53
|
-
<div data-custom-select-key="${
|
|
50
|
+
{ length: _ },
|
|
51
|
+
(a, d) => `
|
|
52
|
+
<div data-custom-select-key="${I}${d}" style="display: none;">
|
|
54
53
|
${this._GuSelect({
|
|
55
|
-
name: `${
|
|
54
|
+
name: `${I}${d}`,
|
|
56
55
|
placeholder: this.api.translate("Select Attribute"),
|
|
57
|
-
options: []
|
|
58
|
-
// A partner's attribute list runs long; search beats scrolling.
|
|
59
|
-
searchable: !0
|
|
56
|
+
options: []
|
|
60
57
|
})}
|
|
61
58
|
</div>
|
|
62
59
|
`
|
|
63
|
-
).join(""), r =
|
|
60
|
+
).join(""), r = h.length + _, o = Array.from(
|
|
64
61
|
{ length: r },
|
|
65
|
-
(
|
|
66
|
-
<div data-reorder-icon-key="${
|
|
67
|
-
<${
|
|
62
|
+
(a, d) => `
|
|
63
|
+
<div data-reorder-icon-key="${O}${d}" style="display: none;">
|
|
64
|
+
<${f.BUTTON}
|
|
68
65
|
class="drag-handle-btn flat-inline flat-white"
|
|
69
|
-
${
|
|
66
|
+
${D.BUTTON.name}="${O}${d}"
|
|
70
67
|
>
|
|
71
|
-
<${
|
|
68
|
+
<${f.ICON}
|
|
72
69
|
src="reorder"
|
|
73
70
|
class="icon-button"
|
|
74
|
-
></${
|
|
75
|
-
</${
|
|
71
|
+
></${f.ICON}>
|
|
72
|
+
</${f.BUTTON}>
|
|
76
73
|
</div>
|
|
77
74
|
`
|
|
78
|
-
).join(""),
|
|
79
|
-
{ length:
|
|
80
|
-
(
|
|
81
|
-
<div data-custom-delete-key="${
|
|
82
|
-
<${
|
|
75
|
+
).join(""), i = Array.from(
|
|
76
|
+
{ length: _ },
|
|
77
|
+
(a, d) => `
|
|
78
|
+
<div data-custom-delete-key="${R}${d}" style="display: none;">
|
|
79
|
+
<${f.BUTTON}
|
|
83
80
|
class="custom-attr-delete flat-inline flat-white"
|
|
84
|
-
${
|
|
81
|
+
${D.BUTTON.name}="${R}${d}"
|
|
85
82
|
>
|
|
86
|
-
<${
|
|
83
|
+
<${f.ICON}
|
|
87
84
|
src="delete"
|
|
88
85
|
class="icon-button"
|
|
89
|
-
></${
|
|
90
|
-
</${
|
|
86
|
+
></${f.ICON}>
|
|
87
|
+
</${f.BUTTON}>
|
|
91
88
|
</div>
|
|
92
89
|
`
|
|
93
90
|
).join(""), s = "https://academy.insiderone.com/docs/new-editor-email-recommendation-block", n = this.api.translate(
|
|
94
91
|
"Drag and drop the card elements to reorder them, adjust their visibility or add new attributes up to 5."
|
|
95
|
-
),
|
|
92
|
+
), c = this.api.translate("For more information, you can"), l = this.api.translate("visit Academy");
|
|
96
93
|
return `
|
|
97
94
|
<div class="recommendation-controls-container" data-card-composition-control>
|
|
98
95
|
<div class="container">
|
|
99
96
|
<p class="card-composition-description">
|
|
100
97
|
${n}
|
|
101
|
-
${
|
|
98
|
+
${c}
|
|
102
99
|
<!-- cspell:disable-next-line -->
|
|
103
100
|
<a href="${s}" target="_blank" rel="noopener noreferrer">${l}</a>.
|
|
104
101
|
</p>
|
|
@@ -113,17 +110,17 @@ class Wt extends lt {
|
|
|
113
110
|
</div>
|
|
114
111
|
|
|
115
112
|
<div class="custom-delete-store" style="display: none;">
|
|
116
|
-
${
|
|
113
|
+
${i}
|
|
117
114
|
</div>
|
|
118
115
|
|
|
119
116
|
<div class="reorder-icon-store" style="display: none;">
|
|
120
|
-
${
|
|
117
|
+
${o}
|
|
121
118
|
</div>
|
|
122
119
|
|
|
123
120
|
<div class="orderable-list" data-composition-list></div>
|
|
124
121
|
|
|
125
122
|
${this._GuButton({
|
|
126
|
-
name:
|
|
123
|
+
name: K.ADD_ATTRIBUTE,
|
|
127
124
|
label: this.api.translate("Add Attribute"),
|
|
128
125
|
id: "guido__btn-add-attribute"
|
|
129
126
|
})}
|
|
@@ -144,7 +141,7 @@ class Wt extends lt {
|
|
|
144
141
|
const t = (r = this.getContainer()) == null ? void 0 : r.querySelector("[data-card-composition-control]");
|
|
145
142
|
if (!t)
|
|
146
143
|
return;
|
|
147
|
-
const e =
|
|
144
|
+
const e = _t(this.currentNode);
|
|
148
145
|
t.style.pointerEvents = e ? "none" : "", t.style.opacity = e ? "0.5" : "";
|
|
149
146
|
}
|
|
150
147
|
onTemplateNodeUpdated(t) {
|
|
@@ -157,19 +154,19 @@ class Wt extends lt {
|
|
|
157
154
|
// Initialization
|
|
158
155
|
// ========================================================================
|
|
159
156
|
_initializeComposition() {
|
|
160
|
-
const t = this._readCompositionFromNode(), e = this._readCustomAttributesFromNode(), r = this._readVisibilityFromRows(),
|
|
161
|
-
this.api.updateValues(
|
|
157
|
+
const t = this._readCompositionFromNode(), e = this._readCustomAttributesFromNode(), r = this._readVisibilityFromRows(), o = this._renderOrderableItems(t, e), i = this._buildVisibilityValues(r);
|
|
158
|
+
this.api.updateValues(i), o && this._initializeCustomSelects(e), this._updateAddButtonState();
|
|
162
159
|
}
|
|
163
160
|
_registerValueChangeListeners() {
|
|
164
|
-
|
|
161
|
+
h.forEach((t) => {
|
|
165
162
|
this.api.onValueChanged(`visibility_${t.key}`, (e) => {
|
|
166
163
|
this._applyVisibilityToBlock(t.key, e);
|
|
167
164
|
});
|
|
168
165
|
});
|
|
169
|
-
for (let t = 0; t <
|
|
170
|
-
const e = `${
|
|
171
|
-
this.api.onValueChanged(e, (
|
|
172
|
-
this._onCustomAttributeChanged(r,
|
|
166
|
+
for (let t = 0; t < _; t++) {
|
|
167
|
+
const e = `${I}${t}`, r = t;
|
|
168
|
+
this.api.onValueChanged(e, (o) => {
|
|
169
|
+
this._onCustomAttributeChanged(r, o);
|
|
173
170
|
});
|
|
174
171
|
}
|
|
175
172
|
}
|
|
@@ -178,64 +175,56 @@ class Wt extends lt {
|
|
|
178
175
|
// ========================================================================
|
|
179
176
|
_readCompositionFromNode() {
|
|
180
177
|
if (!this.currentNode || !("getAttribute" in this.currentNode))
|
|
181
|
-
return [...
|
|
182
|
-
const t = this.currentNode.getAttribute(
|
|
178
|
+
return [...x];
|
|
179
|
+
const t = this.currentNode.getAttribute(W);
|
|
183
180
|
if (t)
|
|
184
|
-
return
|
|
185
|
-
const { composition: e } =
|
|
186
|
-
return e != null && e.length ?
|
|
187
|
-
}
|
|
188
|
-
/** Upgrades legacy bare-name custom keys to the canonical form. (SD-147101) */
|
|
189
|
-
_normalizeComposition(t) {
|
|
190
|
-
return St(t, this.currentNode, this.store.filterList);
|
|
181
|
+
return t.split(",").filter(Boolean);
|
|
182
|
+
const { composition: e } = y.getConfig(this.currentNode);
|
|
183
|
+
return e != null && e.length ? [...e] : [...x];
|
|
191
184
|
}
|
|
192
185
|
_readCustomAttributesFromNode() {
|
|
193
186
|
if (!this.currentNode || !("getAttribute" in this.currentNode))
|
|
194
187
|
return [];
|
|
195
|
-
const t = this.currentNode.getAttribute(
|
|
188
|
+
const t = this.currentNode.getAttribute(F);
|
|
196
189
|
if (t)
|
|
197
190
|
try {
|
|
198
|
-
return
|
|
199
|
-
JSON.parse(t),
|
|
200
|
-
this.currentNode,
|
|
201
|
-
this.store.filterList
|
|
202
|
-
);
|
|
191
|
+
return JSON.parse(t);
|
|
203
192
|
} catch {
|
|
204
193
|
return [];
|
|
205
194
|
}
|
|
206
|
-
return this._readCompositionFromNode().filter((e) => e.startsWith(
|
|
195
|
+
return this._readCompositionFromNode().filter((e) => e.startsWith(m)).map((e) => e.substring(m.length));
|
|
207
196
|
}
|
|
208
197
|
_readVisibilityFromRows() {
|
|
209
198
|
if (!this.currentNode)
|
|
210
199
|
return this._getDefaultVisibilities();
|
|
211
|
-
const t = Array.from(this.currentNode.querySelectorAll(
|
|
200
|
+
const t = Array.from(this.currentNode.querySelectorAll($)), e = this._extractVisibilityFromRows(t);
|
|
212
201
|
if (Object.keys(e).length > 0)
|
|
213
202
|
return this._mergeWithDefaults(e);
|
|
214
|
-
const r =
|
|
203
|
+
const r = y.getConfig(this.currentNode).visibility;
|
|
215
204
|
return this._mergeWithDefaults({ ...r });
|
|
216
205
|
}
|
|
217
206
|
_getDefaultVisibilities() {
|
|
218
|
-
return { ...
|
|
207
|
+
return { ...M };
|
|
219
208
|
}
|
|
220
209
|
_extractVisibilityFromRows(t) {
|
|
221
210
|
const e = {};
|
|
222
211
|
return t.forEach((r) => {
|
|
223
212
|
if (!("getAttribute" in r))
|
|
224
213
|
return;
|
|
225
|
-
const
|
|
226
|
-
|
|
214
|
+
const o = r.getAttribute(C), i = r.getAttribute(E);
|
|
215
|
+
o && i !== null && (e[o] = this._parseVisibilityValue(i));
|
|
227
216
|
}), e;
|
|
228
217
|
}
|
|
229
218
|
_parseVisibilityValue(t) {
|
|
230
219
|
return t === "1" || t === "true";
|
|
231
220
|
}
|
|
232
221
|
_mergeWithDefaults(t) {
|
|
233
|
-
return Object.entries(
|
|
222
|
+
return Object.entries(M).forEach(([e, r]) => {
|
|
234
223
|
e in t || (t[e] = r);
|
|
235
224
|
}), t;
|
|
236
225
|
}
|
|
237
226
|
_buildVisibilityValues(t) {
|
|
238
|
-
return
|
|
227
|
+
return h.reduce((e, r) => (e[`visibility_${r.key}`] = t[r.key] ?? !0, e), {});
|
|
239
228
|
}
|
|
240
229
|
// ========================================================================
|
|
241
230
|
// UI Rendering (Orderable List)
|
|
@@ -249,30 +238,30 @@ class Wt extends lt {
|
|
|
249
238
|
const r = this._getControlContainer();
|
|
250
239
|
if (!r)
|
|
251
240
|
return !1;
|
|
252
|
-
const
|
|
253
|
-
if (!
|
|
241
|
+
const o = r.querySelector("[data-composition-list]");
|
|
242
|
+
if (!o)
|
|
254
243
|
return !1;
|
|
255
|
-
const
|
|
256
|
-
if (!(
|
|
244
|
+
const i = !y.getConfig(this.currentNode).priceMovedToNextLine;
|
|
245
|
+
if (!(o.dataset.inlinePrices !== String(i)) && this._tryReorderInPlace(o, t))
|
|
257
246
|
return !1;
|
|
258
|
-
|
|
259
|
-
const n = new Set(e),
|
|
260
|
-
let l = 0,
|
|
261
|
-
const
|
|
262
|
-
if (
|
|
263
|
-
return u ===
|
|
264
|
-
if (
|
|
265
|
-
const
|
|
266
|
-
return this._createBuiltInItemHtml(
|
|
247
|
+
o.dataset.inlinePrices = String(i);
|
|
248
|
+
const n = new Set(e), c = ht(t);
|
|
249
|
+
let l = 0, a = 0;
|
|
250
|
+
const d = t.map((u) => {
|
|
251
|
+
if (i && (u === S || u === N))
|
|
252
|
+
return u === c.anchor ? this._createPriceGroupItemHtml(a++, c.originalFirst) : "";
|
|
253
|
+
if (Tt.has(u)) {
|
|
254
|
+
const p = h.find((A) => A.key === u);
|
|
255
|
+
return this._createBuiltInItemHtml(p, a++);
|
|
267
256
|
}
|
|
268
|
-
if (u.startsWith(
|
|
269
|
-
const
|
|
270
|
-
if (n.has(
|
|
271
|
-
return this._createCustomItemHtml(u, l++,
|
|
257
|
+
if (u.startsWith(m)) {
|
|
258
|
+
const p = u.substring(m.length);
|
|
259
|
+
if (n.has(p))
|
|
260
|
+
return this._createCustomItemHtml(u, l++, a++);
|
|
272
261
|
}
|
|
273
262
|
return "";
|
|
274
263
|
}).join("");
|
|
275
|
-
return this._rescueTogglesToStore(r), this._rescueSelectsToStore(r), this._rescueDeleteButtonsToStore(r), this._rescueReorderIconsToStore(r),
|
|
264
|
+
return this._rescueTogglesToStore(r), this._rescueSelectsToStore(r), this._rescueDeleteButtonsToStore(r), this._rescueReorderIconsToStore(r), o.innerHTML = d, this._moveTogglesIntoItems(r), this._moveSelectsIntoItems(r, e.length), this._moveDeleteButtonsIntoItems(r, e.length), this._moveReorderIconsIntoItems(r, a), !0;
|
|
276
265
|
}
|
|
277
266
|
/**
|
|
278
267
|
* Attempts to reorder existing orderable-item elements to match the composition order.
|
|
@@ -284,27 +273,27 @@ class Wt extends lt {
|
|
|
284
273
|
const r = Array.from(t.querySelectorAll(".orderable-item"));
|
|
285
274
|
if (r.length !== e.length)
|
|
286
275
|
return !1;
|
|
287
|
-
const
|
|
288
|
-
if (
|
|
276
|
+
const o = r.map((l) => l.dataset.key).filter(Boolean);
|
|
277
|
+
if (o.length !== e.length)
|
|
289
278
|
return !1;
|
|
290
|
-
const
|
|
291
|
-
if (
|
|
279
|
+
const i = [...o].sort().join(","), s = [...e].sort().join(",");
|
|
280
|
+
if (i !== s || e.some((l) => l.startsWith(m)))
|
|
292
281
|
return !1;
|
|
293
282
|
const n = /* @__PURE__ */ new Map();
|
|
294
283
|
r.forEach((l) => {
|
|
295
|
-
const { key:
|
|
296
|
-
if (
|
|
297
|
-
const
|
|
298
|
-
|
|
284
|
+
const { key: a } = l.dataset;
|
|
285
|
+
if (a) {
|
|
286
|
+
const d = n.get(a) || [];
|
|
287
|
+
d.push(l), n.set(a, d);
|
|
299
288
|
}
|
|
300
289
|
});
|
|
301
|
-
const
|
|
290
|
+
const c = /* @__PURE__ */ new Map();
|
|
302
291
|
return e.forEach((l) => {
|
|
303
|
-
const
|
|
304
|
-
if (!
|
|
292
|
+
const a = n.get(l);
|
|
293
|
+
if (!a)
|
|
305
294
|
return;
|
|
306
|
-
const
|
|
307
|
-
|
|
295
|
+
const d = c.get(l) || 0;
|
|
296
|
+
c.set(l, d + 1), a[d] && t.appendChild(a[d]);
|
|
308
297
|
}), !0;
|
|
309
298
|
}
|
|
310
299
|
_createBuiltInItemHtml(t, e) {
|
|
@@ -325,19 +314,19 @@ class Wt extends lt {
|
|
|
325
314
|
* plain drag handle (no UE button → untouched by the reorder-icon rescue).
|
|
326
315
|
*/
|
|
327
316
|
_createPriceGroupItemHtml(t, e) {
|
|
328
|
-
var n,
|
|
329
|
-
const r = ((n =
|
|
317
|
+
var n, c;
|
|
318
|
+
const r = ((n = h.find((l) => l.key === S)) == null ? void 0 : n.label) ?? "Product Price", o = ((c = h.find((l) => l.key === N)) == null ? void 0 : c.label) ?? "Product Original Price", i = (l, a) => `
|
|
330
319
|
<div class="price-suborderable-item" draggable="true" data-subkey="${l}">
|
|
331
|
-
<span class="sub-drag-handle">${
|
|
332
|
-
<span class="item-label">${this.api.translate(
|
|
333
|
-
</div>`, s = e ?
|
|
320
|
+
<span class="sub-drag-handle">${At}</span>
|
|
321
|
+
<span class="item-label">${this.api.translate(a)}</span>
|
|
322
|
+
</div>`, s = e ? i(N, o) + i(S, r) : i(S, r) + i(N, o);
|
|
334
323
|
return `
|
|
335
324
|
<div class="orderable-item price-group-item" draggable="true"
|
|
336
|
-
data-key="${
|
|
325
|
+
data-key="${S}" data-group="prices">
|
|
337
326
|
<div class="price-group-header">
|
|
338
327
|
<span class="drag-handle" data-reorder-icon-slot="${t}"></span>
|
|
339
328
|
<span class="item-label">${this.api.translate("Product Prices")}</span>
|
|
340
|
-
<div class="item-action" data-action-for="${
|
|
329
|
+
<div class="item-action" data-action-for="${S}"></div>
|
|
341
330
|
</div>
|
|
342
331
|
<div class="price-suborderable-list">${s}</div>
|
|
343
332
|
</div>
|
|
@@ -357,34 +346,19 @@ class Wt extends lt {
|
|
|
357
346
|
`;
|
|
358
347
|
}
|
|
359
348
|
/**
|
|
360
|
-
*
|
|
361
|
-
* attribute under the same name; the type is spelled out only then, so partners
|
|
362
|
-
* without a collision keep clean labels. (SD-147101)
|
|
363
|
-
*/
|
|
364
|
-
_toOptionLabel(t, e, r) {
|
|
365
|
-
return r ? `${t} (${this.api.translate(e ? "Default" : "Custom")})` : t;
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* Builds select options from the store's filterList. Option values are
|
|
369
|
-
* `product-attr` values, so a default attribute and a same-named custom one
|
|
370
|
-
* never collapse onto a single option. (SD-147101)
|
|
349
|
+
* Builds select options from the store's filterList.
|
|
371
350
|
* Falls back to a single option for the currently selected attribute.
|
|
372
351
|
*/
|
|
373
352
|
_getSelectOptions(t, e = []) {
|
|
374
353
|
const r = this._getAddableFilters();
|
|
375
|
-
if (r.length
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
s.type === "defaultAttribute",
|
|
384
|
-
(i.get(s.attributeName) ?? 0) > 1
|
|
385
|
-
),
|
|
386
|
-
value: T(s)
|
|
387
|
-
}));
|
|
354
|
+
if (r.length > 0) {
|
|
355
|
+
const i = new Set(e);
|
|
356
|
+
return i.delete(t), r.filter((s) => !i.has(s.attributeName)).map((s) => ({
|
|
357
|
+
text: s.displayName,
|
|
358
|
+
value: s.attributeName
|
|
359
|
+
}));
|
|
360
|
+
}
|
|
361
|
+
return [{ text: this._getDisplayNameForAttribute(t), value: t }];
|
|
388
362
|
}
|
|
389
363
|
/**
|
|
390
364
|
* Initializes custom attribute selects: sets their options and current value.
|
|
@@ -394,8 +368,8 @@ class Wt extends lt {
|
|
|
394
368
|
_initializeCustomSelects(t) {
|
|
395
369
|
t.length !== 0 && setTimeout(() => {
|
|
396
370
|
t.forEach((e, r) => {
|
|
397
|
-
const
|
|
398
|
-
this.api.setUIEAttribute(
|
|
371
|
+
const o = `${I}${r}`, i = this._getSelectOptions(e, t);
|
|
372
|
+
this.api.setUIEAttribute(o, D.SELECTPICKER.items, i), this.api.updateValues({ [o]: e });
|
|
399
373
|
});
|
|
400
374
|
}, 0);
|
|
401
375
|
}
|
|
@@ -404,11 +378,11 @@ class Wt extends lt {
|
|
|
404
378
|
* Stripo initializes toggles at template parse time; moving the DOM node preserves bindings.
|
|
405
379
|
*/
|
|
406
380
|
_moveTogglesIntoItems(t) {
|
|
407
|
-
|
|
408
|
-
const r = t.querySelector(`[data-toggle-key="${e.key}"]`),
|
|
409
|
-
if (r &&
|
|
410
|
-
const
|
|
411
|
-
|
|
381
|
+
h.forEach((e) => {
|
|
382
|
+
const r = t.querySelector(`[data-toggle-key="${e.key}"]`), o = t.querySelector(`[data-action-for="${e.key}"]`);
|
|
383
|
+
if (r && o) {
|
|
384
|
+
const i = r.querySelector("ue-switcher");
|
|
385
|
+
i && o.appendChild(i);
|
|
412
386
|
}
|
|
413
387
|
});
|
|
414
388
|
}
|
|
@@ -418,9 +392,9 @@ class Wt extends lt {
|
|
|
418
392
|
*/
|
|
419
393
|
_moveSelectsIntoItems(t, e) {
|
|
420
394
|
for (let r = 0; r < e; r++) {
|
|
421
|
-
const
|
|
422
|
-
if (
|
|
423
|
-
const n =
|
|
395
|
+
const o = `${I}${r}`, i = t.querySelector(`[data-custom-select-key="${o}"]`), s = t.querySelector(`[data-custom-select-slot="${r}"]`);
|
|
396
|
+
if (i && s) {
|
|
397
|
+
const n = i.querySelector("ue-select");
|
|
424
398
|
n && s.appendChild(n);
|
|
425
399
|
}
|
|
426
400
|
}
|
|
@@ -432,11 +406,11 @@ class Wt extends lt {
|
|
|
432
406
|
* previously-moved toggles, making them permanently lost.
|
|
433
407
|
*/
|
|
434
408
|
_rescueTogglesToStore(t) {
|
|
435
|
-
|
|
436
|
-
const r = t.querySelector(`[data-toggle-key="${e.key}"]`),
|
|
437
|
-
if (
|
|
438
|
-
const
|
|
439
|
-
|
|
409
|
+
h.forEach((e) => {
|
|
410
|
+
const r = t.querySelector(`[data-toggle-key="${e.key}"]`), o = t.querySelector(`[data-action-for="${e.key}"]`);
|
|
411
|
+
if (o) {
|
|
412
|
+
const i = o.querySelector("ue-switcher");
|
|
413
|
+
i && r && r.appendChild(i);
|
|
440
414
|
}
|
|
441
415
|
});
|
|
442
416
|
}
|
|
@@ -445,11 +419,11 @@ class Wt extends lt {
|
|
|
445
419
|
* Same rescue pattern as _rescueTogglesToStore — prevents innerHTML from destroying them.
|
|
446
420
|
*/
|
|
447
421
|
_rescueSelectsToStore(t) {
|
|
448
|
-
for (let e = 0; e <
|
|
449
|
-
const r = `${
|
|
450
|
-
if (
|
|
451
|
-
const s =
|
|
452
|
-
s &&
|
|
422
|
+
for (let e = 0; e < _; e++) {
|
|
423
|
+
const r = `${I}${e}`, o = t.querySelector(`[data-custom-select-key="${r}"]`), i = t.querySelector(`[data-custom-select-slot="${e}"]`);
|
|
424
|
+
if (i) {
|
|
425
|
+
const s = i.querySelector("ue-select");
|
|
426
|
+
s && o && o.appendChild(s);
|
|
453
427
|
}
|
|
454
428
|
}
|
|
455
429
|
}
|
|
@@ -459,9 +433,9 @@ class Wt extends lt {
|
|
|
459
433
|
*/
|
|
460
434
|
_moveDeleteButtonsIntoItems(t, e) {
|
|
461
435
|
for (let r = 0; r < e; r++) {
|
|
462
|
-
const
|
|
463
|
-
if (
|
|
464
|
-
const n =
|
|
436
|
+
const o = `${R}${r}`, i = t.querySelector(`[data-custom-delete-key="${o}"]`), s = t.querySelector(`[data-custom-delete-slot="${r}"]`);
|
|
437
|
+
if (i && s) {
|
|
438
|
+
const n = i.querySelector("ue-button");
|
|
465
439
|
n && s.appendChild(n);
|
|
466
440
|
}
|
|
467
441
|
}
|
|
@@ -471,11 +445,11 @@ class Wt extends lt {
|
|
|
471
445
|
* Same rescue pattern as _rescueSelectsToStore — prevents innerHTML from destroying them.
|
|
472
446
|
*/
|
|
473
447
|
_rescueDeleteButtonsToStore(t) {
|
|
474
|
-
for (let e = 0; e <
|
|
475
|
-
const r = `${
|
|
476
|
-
if (
|
|
477
|
-
const s =
|
|
478
|
-
s &&
|
|
448
|
+
for (let e = 0; e < _; e++) {
|
|
449
|
+
const r = `${R}${e}`, o = t.querySelector(`[data-custom-delete-key="${r}"]`), i = t.querySelector(`[data-custom-delete-slot="${e}"]`);
|
|
450
|
+
if (i) {
|
|
451
|
+
const s = i.querySelector("ue-button");
|
|
452
|
+
s && o && o.appendChild(s);
|
|
479
453
|
}
|
|
480
454
|
}
|
|
481
455
|
}
|
|
@@ -485,9 +459,9 @@ class Wt extends lt {
|
|
|
485
459
|
*/
|
|
486
460
|
_moveReorderIconsIntoItems(t, e) {
|
|
487
461
|
for (let r = 0; r < e; r++) {
|
|
488
|
-
const
|
|
489
|
-
if (
|
|
490
|
-
const n =
|
|
462
|
+
const o = `${O}${r}`, i = t.querySelector(`[data-reorder-icon-key="${o}"]`), s = t.querySelector(`[data-reorder-icon-slot="${r}"]`);
|
|
463
|
+
if (i && s) {
|
|
464
|
+
const n = i.querySelector("ue-button");
|
|
491
465
|
n && s.appendChild(n);
|
|
492
466
|
}
|
|
493
467
|
}
|
|
@@ -497,12 +471,12 @@ class Wt extends lt {
|
|
|
497
471
|
* Same rescue pattern as _rescueDeleteButtonsToStore — prevents innerHTML from destroying them.
|
|
498
472
|
*/
|
|
499
473
|
_rescueReorderIconsToStore(t) {
|
|
500
|
-
const e =
|
|
474
|
+
const e = h.length + _;
|
|
501
475
|
for (let r = 0; r < e; r++) {
|
|
502
|
-
const
|
|
476
|
+
const o = `${O}${r}`, i = t.querySelector(`[data-reorder-icon-key="${o}"]`), s = t.querySelector(`[data-reorder-icon-slot="${r}"]`);
|
|
503
477
|
if (s) {
|
|
504
478
|
const n = s.querySelector("ue-button");
|
|
505
|
-
n &&
|
|
479
|
+
n && i && i.appendChild(n);
|
|
506
480
|
}
|
|
507
481
|
}
|
|
508
482
|
}
|
|
@@ -514,10 +488,10 @@ class Wt extends lt {
|
|
|
514
488
|
const { signal: t } = this.eventController, e = this._getControlContainer();
|
|
515
489
|
if (!e)
|
|
516
490
|
return;
|
|
517
|
-
const r = e.querySelector("[data-composition-list]"),
|
|
518
|
-
r && (this._setupDragAndDrop(r, t), this._setupDeleteHandler(r, t)),
|
|
519
|
-
const
|
|
520
|
-
s && this._onAddAttribute(
|
|
491
|
+
const r = e.querySelector("[data-composition-list]"), o = e.querySelector("#guido__btn-add-attribute");
|
|
492
|
+
r && (this._setupDragAndDrop(r, t), this._setupDeleteHandler(r, t)), o && o.addEventListener("click", () => {
|
|
493
|
+
const i = new Set(this._readCustomAttributesFromNode()), s = this._getAddableFilters().find((n) => !i.has(n.attributeName));
|
|
494
|
+
s && this._onAddAttribute(s.attributeName, s.displayName);
|
|
521
495
|
}, { signal: t });
|
|
522
496
|
}
|
|
523
497
|
/**
|
|
@@ -528,11 +502,11 @@ class Wt extends lt {
|
|
|
528
502
|
_extractCompositionOrder(t) {
|
|
529
503
|
const e = [];
|
|
530
504
|
return t.querySelectorAll(".orderable-item").forEach((r) => {
|
|
531
|
-
const
|
|
532
|
-
|
|
533
|
-
const s =
|
|
505
|
+
const o = r;
|
|
506
|
+
o.dataset.group === "prices" ? o.querySelectorAll(".price-suborderable-item").forEach((i) => {
|
|
507
|
+
const s = i.dataset.subkey;
|
|
534
508
|
s && e.push(s);
|
|
535
|
-
}) :
|
|
509
|
+
}) : o.dataset.key && e.push(o.dataset.key);
|
|
536
510
|
}), e;
|
|
537
511
|
}
|
|
538
512
|
_setupDragAndDrop(t, e) {
|
|
@@ -555,42 +529,42 @@ class Wt extends lt {
|
|
|
555
529
|
* identically.
|
|
556
530
|
*/
|
|
557
531
|
_registerDragHandlers(t, e, r) {
|
|
558
|
-
let
|
|
532
|
+
let o = null, i = null;
|
|
559
533
|
const s = (n) => n.target.closest(r.itemSelector);
|
|
560
534
|
t.addEventListener("dragstart", (n) => {
|
|
561
|
-
var
|
|
562
|
-
const
|
|
563
|
-
if (r.ignoreSelector &&
|
|
535
|
+
var a;
|
|
536
|
+
const c = n.target;
|
|
537
|
+
if (r.ignoreSelector && c.closest(r.ignoreSelector))
|
|
564
538
|
return;
|
|
565
539
|
const l = s(n);
|
|
566
|
-
l && (
|
|
540
|
+
l && (o = l, l.classList.add("dragging"), (a = n.dataTransfer) == null || a.setData("text/plain", l.dataset.key ?? l.dataset.subkey ?? ""));
|
|
567
541
|
}, { signal: e }), t.addEventListener("dragend", () => {
|
|
568
|
-
|
|
542
|
+
o == null || o.classList.remove("dragging"), i == null || i.classList.remove("drag-over"), o = null, i = null;
|
|
569
543
|
}, { signal: e }), t.addEventListener("dragover", (n) => {
|
|
570
|
-
if (!
|
|
544
|
+
if (!o)
|
|
571
545
|
return;
|
|
572
|
-
const
|
|
573
|
-
if (!
|
|
546
|
+
const c = s(n);
|
|
547
|
+
if (!c)
|
|
574
548
|
return;
|
|
575
549
|
n.preventDefault();
|
|
576
|
-
const l =
|
|
577
|
-
l !==
|
|
550
|
+
const l = c !== o ? c : null;
|
|
551
|
+
l !== i && (i == null || i.classList.remove("drag-over"), i = l, i == null || i.classList.add("drag-over"));
|
|
578
552
|
}, { signal: e }), t.addEventListener("drop", (n) => {
|
|
579
|
-
var
|
|
580
|
-
const
|
|
581
|
-
if (!
|
|
553
|
+
var d;
|
|
554
|
+
const c = o && s(n);
|
|
555
|
+
if (!o || !c || c === o)
|
|
582
556
|
return;
|
|
583
557
|
n.preventDefault();
|
|
584
|
-
const l =
|
|
585
|
-
(
|
|
558
|
+
const l = c.getBoundingClientRect(), a = n.clientY < l.top + l.height / 2;
|
|
559
|
+
(d = r.getDropParent(c)) == null || d.insertBefore(o, a ? c : c.nextSibling), i == null || i.classList.remove("drag-over"), o.classList.remove("dragging"), o = null, i = null, this._onReorder(this._extractCompositionOrder(t));
|
|
586
560
|
}, { signal: e });
|
|
587
561
|
}
|
|
588
562
|
_setupDeleteHandler(t, e) {
|
|
589
563
|
t.addEventListener("click", (r) => {
|
|
590
|
-
const
|
|
591
|
-
if (!
|
|
564
|
+
const i = r.target.closest(".custom-attr-delete");
|
|
565
|
+
if (!i)
|
|
592
566
|
return;
|
|
593
|
-
const s =
|
|
567
|
+
const s = i.closest("[data-custom-index]"), n = s == null ? void 0 : s.dataset.customIndex;
|
|
594
568
|
n !== void 0 && this._onDeleteCustomAttribute(Number(n));
|
|
595
569
|
}, { signal: e });
|
|
596
570
|
}
|
|
@@ -598,10 +572,10 @@ class Wt extends lt {
|
|
|
598
572
|
// Actions (Add, Delete, Reorder)
|
|
599
573
|
// ========================================================================
|
|
600
574
|
_onAddAttribute(t, e) {
|
|
601
|
-
const r =
|
|
602
|
-
|
|
603
|
-
const
|
|
604
|
-
this._updateBothAttributes(
|
|
575
|
+
const r = `${m}${t}`, o = this._readCompositionFromNode();
|
|
576
|
+
o.push(r);
|
|
577
|
+
const i = [...this._readCustomAttributesFromNode(), t];
|
|
578
|
+
this._updateBothAttributes(o, i), this._injectCustomAttributeHtml(t, e, r, o), this._renderOrderableItems(o, i), this._initializeCustomSelects(i), this._updateAddButtonState();
|
|
605
579
|
}
|
|
606
580
|
/**
|
|
607
581
|
* Removes a single custom attribute by its index in the customAttrs array.
|
|
@@ -611,7 +585,7 @@ class Wt extends lt {
|
|
|
611
585
|
const e = this._readCustomAttributesFromNode();
|
|
612
586
|
if (e[t] === void 0)
|
|
613
587
|
return;
|
|
614
|
-
const
|
|
588
|
+
const o = this._readCompositionFromNode(), i = this._findNthCustomKeyIndex(o, t), s = o.filter((c, l) => l !== i), n = e.filter((c, l) => l !== t);
|
|
615
589
|
this._updateBothAttributes(s, n), this._removeCustomAttributeHtml(s), this._renderOrderableItems(s, n), this._initializeCustomSelects(n), this._updateAddButtonState();
|
|
616
590
|
}
|
|
617
591
|
/**
|
|
@@ -619,21 +593,21 @@ class Wt extends lt {
|
|
|
619
593
|
* Uses the customIndex to target only the specific instance, supporting duplicates.
|
|
620
594
|
*/
|
|
621
595
|
_onCustomAttributeChanged(t, e) {
|
|
622
|
-
const r = this._readCustomAttributesFromNode(),
|
|
623
|
-
if (
|
|
596
|
+
const r = this._readCustomAttributesFromNode(), o = r[t];
|
|
597
|
+
if (o === void 0 || o === e)
|
|
624
598
|
return;
|
|
625
|
-
const
|
|
626
|
-
n !== -1 && (s[n] =
|
|
627
|
-
const
|
|
628
|
-
this._updateBothAttributes(s, r), this._injectCustomAttributeHtml(e,
|
|
599
|
+
const i = `${m}${e}`, s = this._readCompositionFromNode(), n = this._findNthCustomKeyIndex(s, t);
|
|
600
|
+
n !== -1 && (s[n] = i), r[t] = e;
|
|
601
|
+
const c = this._getDisplayNameForAttribute(e);
|
|
602
|
+
this._updateBothAttributes(s, r), this._injectCustomAttributeHtml(e, c, i, s), this._renderOrderableItems(s, r), this._initializeCustomSelects(r);
|
|
629
603
|
}
|
|
630
604
|
_onReorder(t) {
|
|
631
|
-
const e = t.filter((r) => r.startsWith(
|
|
605
|
+
const e = t.filter((r) => r.startsWith(m)).map((r) => r.substring(m.length));
|
|
632
606
|
this.reorderInProgress = !0;
|
|
633
607
|
try {
|
|
634
608
|
this._updateBothAttributes(t, e);
|
|
635
|
-
const r = !
|
|
636
|
-
this._getCurrentLayout() === "grid" && !r ? this._reorderProductAttributes(t) : this.currentNode &&
|
|
609
|
+
const r = !y.getConfig(this.currentNode).priceMovedToNextLine;
|
|
610
|
+
this._getCurrentLayout() === "grid" && !r ? this._reorderProductAttributes(t) : this.currentNode && yt({
|
|
637
611
|
currentNode: this.currentNode,
|
|
638
612
|
documentModifier: this.api.getDocumentModifier()
|
|
639
613
|
});
|
|
@@ -645,75 +619,67 @@ class Wt extends lt {
|
|
|
645
619
|
// ========================================================================
|
|
646
620
|
// HTML Injection / Removal (Product Card DOM)
|
|
647
621
|
// ========================================================================
|
|
648
|
-
|
|
649
|
-
* Outer HTML of an existing attribute row, rewritten to the canonical key when
|
|
650
|
-
* the row still carries a legacy bare-name one. Copying rows this way lets the
|
|
651
|
-
* DOM converge on the next composition change without writing on open.
|
|
652
|
-
*/
|
|
653
|
-
_getExistingRowHtml(t, e) {
|
|
654
|
-
const r = Tt(t, e);
|
|
655
|
-
if (r && "getOuterHTML" in r)
|
|
656
|
-
return G(r.getOuterHTML(), e);
|
|
657
|
-
const i = t.querySelector(
|
|
658
|
-
`${v}[${R}="${e}"]`
|
|
659
|
-
);
|
|
660
|
-
return i && "getOuterHTML" in i ? G(i.getOuterHTML(), e) : "";
|
|
661
|
-
}
|
|
662
|
-
_injectCustomAttributeHtml(t, e, r, i) {
|
|
622
|
+
_injectCustomAttributeHtml(t, e, r, o) {
|
|
663
623
|
if (!this.currentNode)
|
|
664
624
|
return;
|
|
665
|
-
this._getCurrentLayout() === "grid" ? this._injectGridAttributeRow(t, e, r,
|
|
625
|
+
this._getCurrentLayout() === "grid" ? this._injectGridAttributeRow(t, e, r, o) : this._injectListAttributeRow(t, e, r, o);
|
|
666
626
|
}
|
|
667
|
-
_injectGridAttributeRow(t, e, r,
|
|
668
|
-
const
|
|
669
|
-
if (!(
|
|
627
|
+
_injectGridAttributeRow(t, e, r, o) {
|
|
628
|
+
const i = this.currentNode.querySelectorAll(H);
|
|
629
|
+
if (!(i != null && i.length))
|
|
670
630
|
return;
|
|
671
|
-
const s =
|
|
672
|
-
let
|
|
673
|
-
|
|
674
|
-
var
|
|
675
|
-
const
|
|
676
|
-
if (
|
|
677
|
-
const
|
|
678
|
-
{ length:
|
|
679
|
-
(
|
|
680
|
-
const
|
|
631
|
+
const s = y.getConfig(this.currentNode), c = `0 ${Math.floor(s.columnSpacing / 2)}px`, l = this.api.getDocumentModifier(), a = this.store.recommendationProducts.length;
|
|
632
|
+
let d = 0;
|
|
633
|
+
i.forEach((u) => {
|
|
634
|
+
var w;
|
|
635
|
+
const p = u.querySelector($), A = ((w = p == null ? void 0 : p.querySelectorAll(`.${at}`)) == null ? void 0 : w.length) || 1, q = (100 / A).toFixed(2), { bgStyle: G, bgAttr: z } = this._extractSegmentBgFromCard(u), L = a > 0 ? Math.min(A, a - d) : A, Y = o.map((B) => {
|
|
636
|
+
if (B === r) {
|
|
637
|
+
const X = Array.from(
|
|
638
|
+
{ length: L },
|
|
639
|
+
($t, Q) => {
|
|
640
|
+
const Z = this._resolveAttributeContent(
|
|
681
641
|
t,
|
|
682
642
|
e,
|
|
683
|
-
|
|
643
|
+
d + Q
|
|
684
644
|
);
|
|
685
645
|
return this._getGridCellHtml(
|
|
686
646
|
t,
|
|
687
|
-
ot,
|
|
688
|
-
x,
|
|
689
|
-
Q,
|
|
690
647
|
Z,
|
|
691
|
-
|
|
648
|
+
q,
|
|
649
|
+
G,
|
|
650
|
+
z,
|
|
651
|
+
c
|
|
692
652
|
);
|
|
693
653
|
}
|
|
694
|
-
).join(""),
|
|
695
|
-
return `<tr class="recommendation-attribute-row" ${
|
|
654
|
+
).join(""), J = ut(q, c).repeat(A - L);
|
|
655
|
+
return `<tr class="recommendation-attribute-row" ${C}="${r}" ${E}="1">${X}${J}</tr>`;
|
|
696
656
|
}
|
|
697
|
-
|
|
657
|
+
const P = u.querySelector(
|
|
658
|
+
`${$}[${C}="${B}"]`
|
|
659
|
+
);
|
|
660
|
+
return P && "getOuterHTML" in P ? P.getOuterHTML() : "";
|
|
698
661
|
}).join("");
|
|
699
|
-
|
|
700
|
-
}), l.apply(new
|
|
662
|
+
d += L, a > 0 && d >= a && (d = 0), l.modifyHtml(u).setInnerHtml(Y);
|
|
663
|
+
}), l.apply(new T(`${this.api.translate("Add custom attribute")}: ${e}`));
|
|
701
664
|
}
|
|
702
|
-
_injectListAttributeRow(t, e, r,
|
|
703
|
-
const
|
|
704
|
-
if (!(
|
|
665
|
+
_injectListAttributeRow(t, e, r, o) {
|
|
666
|
+
const i = this.currentNode.querySelectorAll(j);
|
|
667
|
+
if (!(i != null && i.length))
|
|
705
668
|
return;
|
|
706
|
-
const s =
|
|
707
|
-
|
|
708
|
-
const
|
|
709
|
-
if (
|
|
710
|
-
const
|
|
711
|
-
return this._getListRowHtml(t,
|
|
669
|
+
const s = o.filter((c) => c !== k && c !== U), n = this.api.getDocumentModifier();
|
|
670
|
+
i.forEach((c, l) => {
|
|
671
|
+
const a = s.map((d) => {
|
|
672
|
+
if (d === r) {
|
|
673
|
+
const p = this._resolveAttributeContent(t, e, l);
|
|
674
|
+
return this._getListRowHtml(t, p, r);
|
|
712
675
|
}
|
|
713
|
-
|
|
676
|
+
const u = c.querySelector(
|
|
677
|
+
`${$}[${C}="${d}"]`
|
|
678
|
+
);
|
|
679
|
+
return u && "getOuterHTML" in u ? u.getOuterHTML() : "";
|
|
714
680
|
}).join("");
|
|
715
|
-
n.modifyHtml(
|
|
716
|
-
}), n.apply(new
|
|
681
|
+
n.modifyHtml(c).setInnerHtml(a);
|
|
682
|
+
}), n.apply(new T(`${this.api.translate("Add custom attribute")}: ${e}`));
|
|
717
683
|
}
|
|
718
684
|
/**
|
|
719
685
|
* Removes a custom attribute by rebuilding product card content without it.
|
|
@@ -724,19 +690,19 @@ class Wt extends lt {
|
|
|
724
690
|
return;
|
|
725
691
|
const e = this._getCurrentLayout(), r = this.api.getDocumentModifier();
|
|
726
692
|
if (e === "grid") {
|
|
727
|
-
const
|
|
728
|
-
|
|
729
|
-
const s = this._buildCompositionHtml(
|
|
730
|
-
r.modifyHtml(
|
|
693
|
+
const o = this.currentNode.querySelectorAll(H);
|
|
694
|
+
o == null || o.forEach((i) => {
|
|
695
|
+
const s = this._buildCompositionHtml(i, t);
|
|
696
|
+
r.modifyHtml(i).setInnerHtml(s);
|
|
731
697
|
});
|
|
732
698
|
} else {
|
|
733
|
-
const
|
|
734
|
-
|
|
735
|
-
const n = this._buildCompositionHtml(s,
|
|
699
|
+
const o = t.filter((s) => s !== k && s !== U), i = this.currentNode.querySelectorAll(j);
|
|
700
|
+
i == null || i.forEach((s) => {
|
|
701
|
+
const n = this._buildCompositionHtml(s, o);
|
|
736
702
|
r.modifyHtml(s).setInnerHtml(n);
|
|
737
703
|
});
|
|
738
704
|
}
|
|
739
|
-
r.apply(new
|
|
705
|
+
r.apply(new T(this.api.translate("Remove custom attribute")));
|
|
740
706
|
}
|
|
741
707
|
// ========================================================================
|
|
742
708
|
// DOM Mutation (Block Root Attributes, Reorder)
|
|
@@ -752,10 +718,10 @@ class Wt extends lt {
|
|
|
752
718
|
if (!this.currentNode)
|
|
753
719
|
return;
|
|
754
720
|
const r = {
|
|
755
|
-
...
|
|
721
|
+
...y.getConfig(this.currentNode),
|
|
756
722
|
composition: t
|
|
757
723
|
};
|
|
758
|
-
this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(
|
|
724
|
+
this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(W, t.join(",")).setAttribute(F, JSON.stringify(e)).setNodeConfig(r).apply(new T(this.api.translate("Update card composition")));
|
|
759
725
|
}
|
|
760
726
|
/**
|
|
761
727
|
* Reorders attribute rows within each product card based on composition order.
|
|
@@ -764,21 +730,24 @@ class Wt extends lt {
|
|
|
764
730
|
_reorderProductAttributes(t) {
|
|
765
731
|
if (!this.currentNode)
|
|
766
732
|
return;
|
|
767
|
-
const e = this.currentNode.querySelectorAll(
|
|
733
|
+
const e = this.currentNode.querySelectorAll(H);
|
|
768
734
|
if (!(e != null && e.length))
|
|
769
735
|
return;
|
|
770
736
|
const r = this.api.getDocumentModifier();
|
|
771
|
-
e.forEach((
|
|
772
|
-
const
|
|
773
|
-
r.modifyHtml(
|
|
774
|
-
}), r.apply(new
|
|
737
|
+
e.forEach((o) => {
|
|
738
|
+
const i = this._buildCompositionHtml(o, t);
|
|
739
|
+
r.modifyHtml(o).setInnerHtml(i);
|
|
740
|
+
}), r.apply(new T(this.api.translate("Reorder product attributes")));
|
|
775
741
|
}
|
|
776
742
|
/**
|
|
777
743
|
* Builds HTML string with attributes ordered according to composition.
|
|
778
744
|
* Queries existing rows from the container by data-attribute-type.
|
|
779
745
|
*/
|
|
780
746
|
_buildCompositionHtml(t, e) {
|
|
781
|
-
return e.reduce((r,
|
|
747
|
+
return e.reduce((r, o) => {
|
|
748
|
+
const i = t.querySelector(`${$}[${C}="${o}"]`);
|
|
749
|
+
return i && "getOuterHTML" in i ? r + i.getOuterHTML() : r;
|
|
750
|
+
}, "");
|
|
782
751
|
}
|
|
783
752
|
// ========================================================================
|
|
784
753
|
// Visibility
|
|
@@ -786,19 +755,19 @@ class Wt extends lt {
|
|
|
786
755
|
_applyVisibilityToBlock(t, e) {
|
|
787
756
|
if (!this.currentNode)
|
|
788
757
|
return;
|
|
789
|
-
const r =
|
|
758
|
+
const r = this.currentNode.querySelectorAll(`${$}[${C}="${t}"]`);
|
|
790
759
|
if (!(r != null && r.length))
|
|
791
760
|
return;
|
|
792
|
-
const
|
|
761
|
+
const o = e ? "1" : "0", i = e ? this.api.translate("visible") : this.api.translate("hidden"), s = `${this.api.translate("Set visibility")}: ${t} → ${i}`, n = this.api.getDocumentModifier();
|
|
793
762
|
r.forEach((l) => {
|
|
794
|
-
const
|
|
795
|
-
n.modifyHtml(l).setStyle("display",
|
|
763
|
+
const a = ft(l), d = e ? a : "none";
|
|
764
|
+
n.modifyHtml(l).setStyle("display", d).setAttribute(E, o);
|
|
796
765
|
});
|
|
797
|
-
const
|
|
798
|
-
...
|
|
766
|
+
const c = {
|
|
767
|
+
...y.getConfig(this.currentNode),
|
|
799
768
|
visibility: { ...this._readVisibilityFromRows(), [t]: e }
|
|
800
769
|
};
|
|
801
|
-
n.modifyHtml(this.currentNode).setNodeConfig(
|
|
770
|
+
n.modifyHtml(this.currentNode).setNodeConfig(c), n.apply(new T(s));
|
|
802
771
|
}
|
|
803
772
|
// ========================================================================
|
|
804
773
|
// Utilities
|
|
@@ -810,16 +779,16 @@ class Wt extends lt {
|
|
|
810
779
|
*/
|
|
811
780
|
_findNthCustomKeyIndex(t, e) {
|
|
812
781
|
let r = 0;
|
|
813
|
-
for (let
|
|
814
|
-
if (t[
|
|
782
|
+
for (let o = 0; o < t.length; o++)
|
|
783
|
+
if (t[o].startsWith(m)) {
|
|
815
784
|
if (r === e)
|
|
816
|
-
return
|
|
785
|
+
return o;
|
|
817
786
|
r++;
|
|
818
787
|
}
|
|
819
788
|
return -1;
|
|
820
789
|
}
|
|
821
790
|
_getCurrentLayout() {
|
|
822
|
-
return this.store.recommendationConfigs.orientation ||
|
|
791
|
+
return this.store.recommendationConfigs.orientation || Ct(this.currentNode);
|
|
823
792
|
}
|
|
824
793
|
/**
|
|
825
794
|
* Extracts background color properties from existing card elements.
|
|
@@ -828,7 +797,7 @@ class Wt extends lt {
|
|
|
828
797
|
* Used when injecting new attribute cells to match the card's current background.
|
|
829
798
|
*/
|
|
830
799
|
_extractSegmentBgFromCard(t) {
|
|
831
|
-
var
|
|
800
|
+
var o;
|
|
832
801
|
const e = t.querySelector(".product-card-segment");
|
|
833
802
|
if (e && "getAttribute" in e) {
|
|
834
803
|
const s = (e.getAttribute("style") || "").match(/background-color:\s*([^;]+)/);
|
|
@@ -837,12 +806,12 @@ class Wt extends lt {
|
|
|
837
806
|
return { bgStyle: `background-color: ${s[1].trim()};`, bgAttr: n };
|
|
838
807
|
}
|
|
839
808
|
}
|
|
840
|
-
const r = (
|
|
809
|
+
const r = (o = this.currentNode) == null ? void 0 : o.querySelector(".product-card-wrapper");
|
|
841
810
|
if (r && "getStyle" in r) {
|
|
842
|
-
const
|
|
843
|
-
if (
|
|
811
|
+
const i = r.getStyle("background-color");
|
|
812
|
+
if (i && i !== "transparent") {
|
|
844
813
|
const s = "getAttribute" in r && r.getAttribute("bgcolor") || "";
|
|
845
|
-
return { bgStyle: `background-color: ${
|
|
814
|
+
return { bgStyle: `background-color: ${i};`, bgAttr: s };
|
|
846
815
|
}
|
|
847
816
|
}
|
|
848
817
|
return { bgStyle: "", bgAttr: "" };
|
|
@@ -871,11 +840,11 @@ class Wt extends lt {
|
|
|
871
840
|
* or when all available filters have already been added (no unused attributes left).
|
|
872
841
|
*/
|
|
873
842
|
_updateAddButtonState() {
|
|
874
|
-
const t = this._readCustomAttributesFromNode(), e = t.length >=
|
|
843
|
+
const t = this._readCustomAttributesFromNode(), e = t.length >= _, r = new Set(t), o = this._getAddableFilters(), i = o.length > 0 && o.every((s) => r.has(s.attributeName));
|
|
875
844
|
this.api.setUIEAttribute(
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
e ||
|
|
845
|
+
K.ADD_ATTRIBUTE,
|
|
846
|
+
D.BUTTON.disabled,
|
|
847
|
+
e || i ? "true" : "false"
|
|
879
848
|
);
|
|
880
849
|
}
|
|
881
850
|
/**
|
|
@@ -888,55 +857,54 @@ class Wt extends lt {
|
|
|
888
857
|
this.unsubscribeStore = this.store.$subscribe(() => {
|
|
889
858
|
const r = this.store.recommendationConfigs.orientation;
|
|
890
859
|
r !== t && (t = r, this._updateOrderableState());
|
|
891
|
-
const
|
|
892
|
-
|
|
860
|
+
const o = Object.keys(this.store.filterList).sort().join(",");
|
|
861
|
+
o !== e && (e = o, this._initializeComposition());
|
|
893
862
|
});
|
|
894
863
|
}
|
|
895
864
|
/**
|
|
896
|
-
* Returns filters eligible for the custom attribute dropdown,
|
|
897
|
-
* attributes already covered by built-in toggle items.
|
|
865
|
+
* Returns filters eligible for the custom attribute dropdown,
|
|
866
|
+
* excluding default attributes already covered by built-in toggle items.
|
|
898
867
|
*/
|
|
899
868
|
_getAddableFilters() {
|
|
900
|
-
return Object.values(this.store.filterList).filter((t) => !(t.type === "defaultAttribute" &&
|
|
869
|
+
return Object.values(this.store.filterList).filter((t) => !(t.type === "defaultAttribute" && nt.has(t.attributeName)));
|
|
901
870
|
}
|
|
902
871
|
/**
|
|
903
|
-
* Looks up the display name for
|
|
904
|
-
*
|
|
905
|
-
* resolve to their own entry. Falls back to Title Case of the bare name.
|
|
872
|
+
* Looks up the display name for an attribute from the store's filterList.
|
|
873
|
+
* Falls back to Title Case conversion of the snake_case attribute name.
|
|
906
874
|
*/
|
|
907
875
|
_getDisplayNameForAttribute(t) {
|
|
908
|
-
const e = Object.values(this.store.filterList).find((r) =>
|
|
909
|
-
return e ? e.displayName :
|
|
876
|
+
const e = Object.values(this.store.filterList).find((r) => r.attributeName === t);
|
|
877
|
+
return e ? e.displayName : pt(t);
|
|
910
878
|
}
|
|
911
879
|
/**
|
|
912
880
|
* Resolves the display content for a custom attribute cell.
|
|
913
881
|
* Uses the real product value from the store when available, falls back to displayName.
|
|
914
882
|
*/
|
|
915
883
|
_resolveAttributeContent(t, e, r) {
|
|
916
|
-
var
|
|
917
|
-
const
|
|
918
|
-
return
|
|
919
|
-
}
|
|
920
|
-
_getGridCellHtml(t, e, r,
|
|
921
|
-
const n =
|
|
922
|
-
[
|
|
923
|
-
product_attributes: { [
|
|
884
|
+
var n;
|
|
885
|
+
const i = this.store.recommendationProducts[r], s = gt(t, this.store.filterList) ? i == null ? void 0 : i[t] : (n = i == null ? void 0 : i.product_attributes) == null ? void 0 : n[t];
|
|
886
|
+
return bt(s) ?? e;
|
|
887
|
+
}
|
|
888
|
+
_getGridCellHtml(t, e, r, o = "", i = "", s = "") {
|
|
889
|
+
const n = `${m}${t}`, c = V(ct, [n], this.store.filterList), l = {
|
|
890
|
+
[t]: e,
|
|
891
|
+
product_attributes: { [t]: e }
|
|
924
892
|
};
|
|
925
|
-
let
|
|
926
|
-
return
|
|
927
|
-
`padding: ${
|
|
893
|
+
let a = c[n](l);
|
|
894
|
+
return a = a.replace("<td", `<td width="${r}%"`), s && (a = a.replace(
|
|
895
|
+
`padding: ${dt}`,
|
|
928
896
|
`padding: ${s}`
|
|
929
|
-
)),
|
|
897
|
+
)), o && (a = a.replace(/style="table-layout: fixed;"/, `style="table-layout: fixed; ${o}"`)), i && (a = a.replace(/border="0"/, `border="0" bgcolor="${i}"`)), a;
|
|
930
898
|
}
|
|
931
899
|
_getListRowHtml(t, e, r) {
|
|
932
|
-
const
|
|
933
|
-
[
|
|
934
|
-
product_attributes: { [
|
|
935
|
-
},
|
|
936
|
-
return `<tr class="recommendation-attribute-row" ${
|
|
900
|
+
const o = V(mt, [r], this.store.filterList), i = {
|
|
901
|
+
[t]: e,
|
|
902
|
+
product_attributes: { [t]: e }
|
|
903
|
+
}, n = o[r](i).replace(/<tr>/, "").replace(/<\/tr>/, "");
|
|
904
|
+
return `<tr class="recommendation-attribute-row" ${C}="${r}" ${E}="1">${n}</tr>`;
|
|
937
905
|
}
|
|
938
906
|
}
|
|
939
907
|
export {
|
|
940
|
-
|
|
941
|
-
|
|
908
|
+
St as COMPOSITION_CONTROL_BLOCK_ID,
|
|
909
|
+
qt as RecommendationCardCompositionControl
|
|
942
910
|
};
|