@useinsider/guido 3.12.0-beta.98baf2f → 3.12.0-beta.aa6f9ba

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/@types/config/schemas.js +13 -8
  2. package/dist/components/Guido.vue.js +6 -6
  3. package/dist/components/Guido.vue2.js +50 -49
  4. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +1 -1
  5. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +8 -8
  6. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
  7. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue2.js +10 -10
  8. package/dist/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue.js +36 -0
  9. package/dist/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue2.js +244 -0
  10. package/dist/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue.js +18 -0
  11. package/dist/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue2.js +42 -0
  12. package/dist/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue.js +20 -0
  13. package/dist/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue2.js +18 -0
  14. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue.js +20 -0
  15. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue2.js +60 -0
  16. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue.js +19 -0
  17. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue2.js +19 -0
  18. package/dist/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue.js +22 -0
  19. package/dist/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue2.js +29 -0
  20. package/dist/composables/usePreviewInteractionGuard.js +36 -11
  21. package/dist/composables/useRecommendation.js +82 -51
  22. package/dist/composables/useRecommendationPreview.js +61 -60
  23. package/dist/composables/useStrategyFilters.js +16 -0
  24. package/dist/composables/useStripoEventHandler.js +9 -12
  25. package/dist/config/migrator/recommendationMigrator.js +7 -4
  26. package/dist/enums/date.js +4 -3
  27. package/dist/enums/extensions/filteringV2.js +8 -0
  28. package/dist/enums/extensions/recommendationBlock.js +28 -22
  29. package/dist/enums/extensions/strategyDetail.js +148 -0
  30. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  31. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +12 -11
  32. package/dist/extensions/Blocks/Recommendation/controls/blockBackground/index.js +10 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +123 -109
  34. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +146 -0
  35. package/dist/extensions/Blocks/Recommendation/extension.js +23 -21
  36. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +1 -1
  37. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +41 -40
  38. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +256 -102
  39. package/dist/extensions/Blocks/Recommendation/utils/strategyHumanizer.js +97 -0
  40. package/dist/extensions/Blocks/Recommendation/utils/strategySummary.js +10 -0
  41. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +24 -12
  42. package/dist/extensions/Blocks/Unsubscribe/utils/constants.js +3 -2
  43. package/dist/extensions/Blocks/controlFactories.js +125 -75
  44. package/dist/guido.css +1 -1
  45. package/dist/services/recommendationApi.js +72 -29
  46. package/dist/services/stripoApi.js +27 -28
  47. package/dist/src/@types/config/schemas.d.ts +10 -0
  48. package/dist/src/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue.d.ts +2 -0
  49. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue.d.ts +43 -0
  50. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue.d.ts +29 -0
  51. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue.d.ts +40 -0
  52. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue.d.ts +38 -0
  53. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue.d.ts +51 -0
  54. package/dist/src/composables/useConfig.d.ts +2 -0
  55. package/dist/src/composables/usePreviewInteractionGuard.d.ts +1 -1
  56. package/dist/src/composables/useRecommendation.d.ts +2 -0
  57. package/dist/src/composables/useStrategyFilters.d.ts +24 -0
  58. package/dist/src/enums/extensions/filteringV2.d.ts +72 -0
  59. package/dist/src/enums/extensions/recommendationBlock.d.ts +10 -0
  60. package/dist/src/enums/extensions/strategyDetail.d.ts +90 -0
  61. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +1 -0
  62. package/dist/src/extensions/Blocks/Recommendation/controls/blockBackground/index.d.ts +14 -0
  63. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
  64. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +3 -1
  65. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +61 -0
  66. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +606 -1
  67. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +7 -0
  68. package/dist/src/extensions/Blocks/Recommendation/utils/strategyHumanizer.d.ts +50 -0
  69. package/dist/src/extensions/Blocks/Recommendation/utils/strategySummary.d.ts +34 -0
  70. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +3 -1
  71. package/dist/src/extensions/Blocks/Unsubscribe/utils/constants.d.ts +1 -0
  72. package/dist/src/extensions/Blocks/controlFactories.d.ts +36 -0
  73. package/dist/src/services/recommendationApi.d.ts +7 -1
  74. package/dist/src/stores/config.d.ts +18 -0
  75. package/dist/src/utils/genericUtil.d.ts +9 -0
  76. package/dist/src/utils/urlSchemes.d.ts +6 -0
  77. package/dist/static/styles/base.css.js +15 -0
  78. package/dist/utils/dateUtil.js +23 -10
  79. package/dist/utils/genericUtil.js +10 -1
  80. package/dist/utils/templatePreparation.js +62 -58
  81. package/dist/utils/urlSchemes.js +4 -0
  82. package/package.json +1 -1
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Enums for the Reusable Recommendation Strategy (RRS) detail drawer.
3
+ *
4
+ * Ported from design-system-organisms
5
+ * `src/organisms/OrgStrategyDetailModal/enums/details-modal.enum.ts` (branch `develop`).
6
+ *
7
+ * IMPORTANT — this is NOT the same operator table as `@@/Enums/extensions/filteringV2`.
8
+ * The detail modal carries its own, deliberately: it uses different operator values
9
+ * (a `-page-context` suffix where FilteringEnumsV2 uses `_dynamic`) and a different
10
+ * label per operator. The two tables humanize the same JSON for different surfaces —
11
+ * filteringV2 backs the four-row panel summary, this one backs the drawer's filter
12
+ * humanizer. Do not merge them or the drawer starts rendering the wrong operator names.
13
+ *
14
+ * One deliberate deviation from the source: the source resolves `translations[...]` at
15
+ * module-evaluation time. Guido loads translations from editor config after module init,
16
+ * so every `text` here stays a translation KEY and is resolved at render through
17
+ * `useTranslations()`. Resolving eagerly would freeze every label to `undefined`.
18
+ */
19
+ /** Discriminates a duration-based exclusion from a count-based one. */
20
+ export declare const TIME = "TIME";
21
+ export declare const COUNT = "COUNT";
22
+ export declare const OperatorAbbreviations: {
23
+ readonly OPERATOR: {
24
+ readonly IN_LAST: "in-last";
25
+ readonly IS_EMPTY: "is-empty";
26
+ readonly IS_NOT_EMPTY: "is-not-empty";
27
+ readonly IN_BETWEEN: "is-between";
28
+ readonly IS_TRUE: "true";
29
+ readonly IS_FALSE: "false";
30
+ readonly IN: "in";
31
+ readonly NOT_IN: "not-in";
32
+ };
33
+ readonly OPERATOR_EXPRESSION: {
34
+ readonly IS_EMPTY: "?";
35
+ readonly IS_NOT_EMPTY: "!?";
36
+ };
37
+ };
38
+ /** One operator option; `text` is a translation key, not a label. */
39
+ export interface DetailOperator {
40
+ value: string;
41
+ text: string;
42
+ operator: string;
43
+ }
44
+ export declare const Operators: Record<string, DetailOperator[]>;
45
+ export declare const DataTypes: {
46
+ readonly STRING: "String";
47
+ readonly BOOLEAN: "Boolean";
48
+ readonly DATE: "Date";
49
+ readonly NUMBER: "Number";
50
+ readonly TEXT: "Text";
51
+ readonly URL: "Image";
52
+ readonly NUMBERS: "Numbers";
53
+ readonly DATES: "Dates";
54
+ readonly BOOLEANS: "Booleans";
55
+ readonly STRINGS: "Strings";
56
+ };
57
+ export declare const MultiSelectDataTypes: string[];
58
+ export declare const OperatorNames: {
59
+ readonly IS_EXACTLY: "is-exactly";
60
+ readonly IS_NOT_EXACTLY: "is-not-exactly";
61
+ readonly CONTAINS: "contains";
62
+ readonly NOT_CONTAINS: "does-not-contain";
63
+ readonly IN: "in";
64
+ readonly NOT_IN: "not-in";
65
+ };
66
+ export declare const FilterTypeNames: {
67
+ readonly STANDARD_FILTER: "standardFilter";
68
+ readonly DYNAMIC_FILTER: "dynamicFilter";
69
+ readonly USER_CONTEXT_FILTER: "userContextFilter";
70
+ readonly USER_ATTRIBUTE_FILTER: "userAttributeFilter";
71
+ readonly USER_EVENT_FILTER: "userEventFilter";
72
+ readonly EVENT_BASED_FILTER: "eventBasedFilter";
73
+ };
74
+ export declare const UserEventKeys: {
75
+ readonly CURRENTLY_VIEWED_ITEM: "page";
76
+ readonly LEGACY_CURRENTLY_VIEWED_ITEM: "currentlyViewedItem";
77
+ };
78
+ /** `text` is a translation key, resolved at render. */
79
+ export declare const UserEvents: {
80
+ value: string;
81
+ text: string;
82
+ }[];
83
+ /** Channel value that must render as the email product's own label. */
84
+ export declare const EMAIL_CHANNEL = "email";
85
+ export declare const PageTypeTranslationKeys: Record<string, string>;
86
+ /** Drawer tab identifiers. */
87
+ export declare const DetailTabs: {
88
+ readonly GENERAL: "general";
89
+ readonly OTHER: "other";
90
+ };
@@ -3,6 +3,7 @@
3
3
  * These IDs are returned by the getId() method of each control
4
4
  */
5
5
  export declare enum RecommendationControlId {
6
+ BLOCK_BACKGROUND = "recommendation-block-background-color-control",
6
7
  BUTTON_ALIGN = "recommendation-block-button-align-control",
7
8
  BUTTON_BORDER = "recommendation-block-button-border-control",
8
9
  BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control",
@@ -0,0 +1,14 @@
1
+ export declare const BlockBackgroundColorControl: {
2
+ new (): {
3
+ getId(): string;
4
+ getLabels(): {
5
+ title: string;
6
+ };
7
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
8
+ getAdditionalModifications(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
9
+ getParentControlId(): string;
10
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
11
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
12
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
13
+ };
14
+ };
@@ -20,6 +20,7 @@ export { ButtonControls } from './button';
20
20
  export { ImageControls } from './image';
21
21
  export { CustomAttributeControls } from './customAttribute';
22
22
  export { SpacingControl, SPACING_CONTROL_ID } from './spacing';
23
+ export { BlockBackgroundColorControl } from './blockBackground';
23
24
  export { CardBackgroundColorControl, CARD_BACKGROUND_COLOR_CONTROL_ID } from './cardBackground';
24
25
  export { RecommendationCardCompositionControl, COMPOSITION_CONTROL_BLOCK_ID } from './cardComposition';
25
26
  export { SyncInfoMessageControl, SYNC_INFO_MESSAGE_CONTROL_ID } from './syncInfoMessage';
@@ -9,8 +9,9 @@ import { PricePlacementControl, PRICE_PLACEMENT_CONTROL_ID } from './pricePlacem
9
9
  import { ProductCountControl, PRODUCT_COUNT_CONTROL_ID } from './productCount';
10
10
  import { ProductLayoutControl, PRODUCT_LAYOUT_CONTROL_ID } from './productLayout';
11
11
  import { ShuffleControl, SHUFFLE_CONTROL_ID } from './shuffle';
12
+ import { StrategyControl, STRATEGY_CONTROL_ID } from './strategy';
12
13
  export declare const CONTROL_BLOCK_ID = "ui-elements-recommendation-block";
13
- export { AlgorithmControl, ALGORITHM_CONTROL_ID, LocaleControl, LOCALE_CONTROL_ID, CurrencyControl, CURRENCY_CONTROL_ID, ProductCountControl, PRODUCT_COUNT_CONTROL_ID, ProductLayoutControl, PRODUCT_LAYOUT_CONTROL_ID, FiltersControl, FILTERS_CONTROL_ID, ShuffleControl, SHUFFLE_CONTROL_ID, LayoutOrientationControl, LAYOUT_ORIENTATION_CONTROL_ID, PricePlacementControl, PRICE_PLACEMENT_CONTROL_ID, };
14
+ export { AlgorithmControl, ALGORITHM_CONTROL_ID, LocaleControl, LOCALE_CONTROL_ID, CurrencyControl, CURRENCY_CONTROL_ID, ProductCountControl, PRODUCT_COUNT_CONTROL_ID, ProductLayoutControl, PRODUCT_LAYOUT_CONTROL_ID, FiltersControl, FILTERS_CONTROL_ID, ShuffleControl, SHUFFLE_CONTROL_ID, LayoutOrientationControl, LAYOUT_ORIENTATION_CONTROL_ID, PricePlacementControl, PRICE_PLACEMENT_CONTROL_ID, StrategyControl, STRATEGY_CONTROL_ID, };
14
15
  export * from './utils';
15
16
  /**
16
17
  * Main recommendation block control that composes all sub-controls
@@ -21,6 +22,7 @@ export declare class RecommendationBlockControl extends CommonControl {
21
22
  private storeUnsubscription;
22
23
  private syncedBlockIds;
23
24
  private algorithmControl;
25
+ private strategyControl;
24
26
  private localeControl;
25
27
  private currencyControl;
26
28
  private productCountControl;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Reusable Recommendation Strategy (RRS) Selection Control
3
+ *
4
+ * Lets the marketer pick a named strategy defined in Smart Recommender instead
5
+ * of configuring an algorithm per block. The selected strategy id is stored in
6
+ * node config (persists with the template) and decides the block's
7
+ * recommendation URL at compile time.
8
+ *
9
+ * Rendered only when the `reusableRecommendationStrategy` feature is enabled;
10
+ * otherwise the block keeps using AlgorithmControl.
11
+ *
12
+ * Beside the dropdown sits an icon button that opens the strategy detail drawer.
13
+ * The RRS listing page shows these details in an `InSelect` hover card, which
14
+ * cannot be reproduced here — `_GuSelect` has no `infoBoxProps` equivalent — so
15
+ * the details move out of the 425px panel and over the editor instead.
16
+ *
17
+ * ponytail: selecting a strategy only drives the URL — Number of Products,
18
+ * Locale, Currency and Filters stay independently editable in the panel. The
19
+ * product decision on which of those become strategy-owned is still open
20
+ * (see the Figma "which settings stay in the editor" note), so nothing is
21
+ * locked or overwritten here. Add that only once the decision lands.
22
+ */
23
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
24
+ import { CommonControl } from '../../../common-control';
25
+ export declare const STRATEGY_CONTROL_ID = "recommendation-strategy-control";
26
+ /**
27
+ * Control for selecting a Reusable Recommendation Strategy
28
+ */
29
+ export declare class StrategyControl extends CommonControl {
30
+ private store;
31
+ private detailsListener;
32
+ private detailsButton;
33
+ getId(): string;
34
+ getTemplate(): string;
35
+ onRender(): void;
36
+ onDestroy(): void;
37
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
38
+ _setFormValues(): void;
39
+ _initializeSelectItems(): void;
40
+ /**
41
+ * Reconciles the panel with the strategy listing: loading, empty, and
42
+ * deleted-strategy states.
43
+ *
44
+ * A strategy the partner deleted in Smart Recommender still lives in this
45
+ * block's saved config. The id is deliberately left in place and surfaced
46
+ * instead of being cleared — silently dropping it would make a template that
47
+ * compiles a broken feed URL look correctly configured.
48
+ *
49
+ * ponytail: one message element, three texts. Severity styling (warning vs
50
+ * info) is not drawn in Figma and pending design sign-off — see open question
51
+ * 4 in the handoff. Vary `type` once that lands.
52
+ */
53
+ _refreshSelectionState(): void;
54
+ _setDisabled(element: string, disabled: boolean): void;
55
+ _showMessage(text: string): void;
56
+ _hideMessage(): void;
57
+ _onDetailsClick(): void;
58
+ _setupDetailsButtonListener(): void;
59
+ _onStrategyChange(value: string): void;
60
+ _listenToFormUpdates(): void;
61
+ }