@webiny/app-website-builder 6.6.0-alpha.0 → 6.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/BaseEditor/commandHandlers/CloneElement.d.ts +1 -0
  2. package/BaseEditor/commandHandlers/CloneElement.js +17 -0
  3. package/BaseEditor/commandHandlers/CloneElement.js.map +1 -0
  4. package/BaseEditor/commandHandlers/index.js +2 -1
  5. package/BaseEditor/commandHandlers/index.js.map +1 -1
  6. package/BaseEditor/commands.d.ts +3 -0
  7. package/BaseEditor/commands.js +2 -0
  8. package/BaseEditor/commands.js.map +1 -1
  9. package/BaseEditor/defaultConfig/Content/AddressBar/usePreviewLink.js +4 -1
  10. package/BaseEditor/defaultConfig/Content/AddressBar/usePreviewLink.js.map +1 -1
  11. package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
  12. package/BaseEditor/defaultConfig/Content/Preview/Iframe.d.ts +2 -2
  13. package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlays.d.ts +2 -2
  14. package/BaseEditor/defaultConfig/DefaultEditorConfig.js +9 -0
  15. package/BaseEditor/defaultConfig/DefaultEditorConfig.js.map +1 -1
  16. package/BaseEditor/defaultConfig/DocumentStateEditor/DocumentStateEditor.d.ts +2 -2
  17. package/BaseEditor/defaultConfig/ElementInputRenderers.js +4 -0
  18. package/BaseEditor/defaultConfig/ElementInputRenderers.js.map +1 -1
  19. package/BaseEditor/defaultConfig/Sidebar/ElementActions/CloneElementAction.d.ts +2 -0
  20. package/BaseEditor/defaultConfig/Sidebar/ElementActions/CloneElementAction.js +25 -0
  21. package/BaseEditor/defaultConfig/Sidebar/ElementActions/CloneElementAction.js.map +1 -0
  22. package/BaseEditor/defaultConfig/Sidebar/ElementActions/DeleteElementAction.d.ts +2 -0
  23. package/BaseEditor/defaultConfig/Sidebar/ElementActions/DeleteElementAction.js +26 -0
  24. package/BaseEditor/defaultConfig/Sidebar/ElementActions/DeleteElementAction.js.map +1 -0
  25. package/BaseEditor/defaultConfig/Sidebar/ElementPreview.js +12 -2
  26. package/BaseEditor/defaultConfig/Sidebar/ElementPreview.js.map +1 -1
  27. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementInputs.js +1 -6
  28. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementInputs.js.map +1 -1
  29. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettings.js +11 -2
  30. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettings.js.map +1 -1
  31. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.d.ts +6 -2
  32. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.d.ts +6 -2
  33. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.d.ts +6 -2
  34. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.d.ts +6 -2
  35. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.d.ts +2 -2
  36. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.d.ts +2 -2
  37. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.d.ts +2 -2
  38. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.d.ts +2 -2
  39. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.d.ts +6 -2
  40. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.d.ts +2 -2
  41. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.d.ts +2 -2
  42. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.d.ts +2 -2
  43. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.d.ts +2 -2
  44. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleProperties.js +7 -7
  45. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleProperties.js.map +1 -1
  46. package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.d.ts +2 -2
  47. package/DocumentEditor/DocumentEditor.d.ts +14 -5
  48. package/DocumentEditor/DocumentEditor.js +10 -6
  49. package/DocumentEditor/DocumentEditor.js.map +1 -1
  50. package/DocumentEditor/StateInspector.d.ts +4 -2
  51. package/Extension.js +7 -1
  52. package/Extension.js.map +1 -1
  53. package/ecommerce/components/ResourcePage.d.ts +6 -2
  54. package/ecommerce/components/ResourcesList.d.ts +4 -4
  55. package/ecommerce/components/ResourcesPicker.d.ts +9 -4
  56. package/editorSdk/CommandBus.js.map +1 -1
  57. package/editorSdk/utils/$cloneElement.d.ts +2 -0
  58. package/editorSdk/utils/$cloneElement.js +112 -0
  59. package/editorSdk/utils/$cloneElement.js.map +1 -0
  60. package/editorSdk/utils/index.d.ts +1 -0
  61. package/editorSdk/utils/index.js +1 -0
  62. package/features/experiments/ExperimentsGateway.d.ts +30 -0
  63. package/features/experiments/ExperimentsGateway.js +326 -0
  64. package/features/experiments/ExperimentsGateway.js.map +1 -0
  65. package/features/experiments/abstractions.d.ts +25 -0
  66. package/features/experiments/abstractions.js +5 -0
  67. package/features/experiments/abstractions.js.map +1 -0
  68. package/features/experiments/feature.d.ts +3 -0
  69. package/features/experiments/feature.js +17 -0
  70. package/features/experiments/feature.js.map +1 -0
  71. package/features/experiments/index.d.ts +3 -0
  72. package/features/experiments/index.js +2 -0
  73. package/features/experiments/types.d.ts +61 -0
  74. package/features/experiments/types.js +0 -0
  75. package/inputRenderers/ColorPickerInput.d.ts +3 -0
  76. package/inputRenderers/ColorPickerInput.js +29 -0
  77. package/inputRenderers/ColorPickerInput.js.map +1 -0
  78. package/inputRenderers/FileInput.js +93 -8
  79. package/inputRenderers/FileInput.js.map +1 -1
  80. package/inputRenderers/LexicalInput/LexicalEditor.js +15 -8
  81. package/inputRenderers/LexicalInput/LexicalEditor.js.map +1 -1
  82. package/inputRenderers/LexicalInput/TypographyDropDown.js +3 -2
  83. package/inputRenderers/LexicalInput/TypographyDropDown.js.map +1 -1
  84. package/inputRenderers/LexicalInput/wbStaticToolbar.css +72 -103
  85. package/modules/AbTesting.d.ts +2 -0
  86. package/modules/AbTesting.js +19 -0
  87. package/modules/AbTesting.js.map +1 -0
  88. package/package.json +28 -28
  89. package/presentation/components/LanguageCodeTag.js +5 -4
  90. package/presentation/components/LanguageCodeTag.js.map +1 -1
  91. package/presentation/experiments/ExperimentForm/ExperimentFormPresenter.d.ts +30 -0
  92. package/presentation/experiments/ExperimentForm/ExperimentFormPresenter.js +202 -0
  93. package/presentation/experiments/ExperimentForm/ExperimentFormPresenter.js.map +1 -0
  94. package/presentation/experiments/ExperimentForm/abstractions/ExperimentFormPresenter.d.ts +65 -0
  95. package/presentation/experiments/ExperimentForm/abstractions/ExperimentFormPresenter.js +5 -0
  96. package/presentation/experiments/ExperimentForm/abstractions/ExperimentFormPresenter.js.map +1 -0
  97. package/presentation/experiments/ExperimentForm/components/ExperimentFormView.d.ts +12 -0
  98. package/presentation/experiments/ExperimentForm/components/ExperimentFormView.js +149 -0
  99. package/presentation/experiments/ExperimentForm/components/ExperimentFormView.js.map +1 -0
  100. package/presentation/experiments/ExperimentForm/components/VariantSplitRow.d.ts +17 -0
  101. package/presentation/experiments/ExperimentForm/components/VariantSplitRow.js +122 -0
  102. package/presentation/experiments/ExperimentForm/components/VariantSplitRow.js.map +1 -0
  103. package/presentation/experiments/ExperimentForm/feature.d.ts +3 -0
  104. package/presentation/experiments/ExperimentForm/feature.js +17 -0
  105. package/presentation/experiments/ExperimentForm/feature.js.map +1 -0
  106. package/presentation/experiments/ExperimentForm/index.d.ts +3 -0
  107. package/presentation/experiments/ExperimentForm/index.js +3 -0
  108. package/presentation/experiments/ExperimentsEditor/ExperimentsEditorDataSource.d.ts +18 -0
  109. package/presentation/experiments/ExperimentsEditor/ExperimentsEditorDataSource.js +25 -0
  110. package/presentation/experiments/ExperimentsEditor/ExperimentsEditorDataSource.js.map +1 -0
  111. package/presentation/experiments/ExperimentsEditor/ExperimentsEditorPresenter.d.ts +67 -0
  112. package/presentation/experiments/ExperimentsEditor/ExperimentsEditorPresenter.js +224 -0
  113. package/presentation/experiments/ExperimentsEditor/ExperimentsEditorPresenter.js.map +1 -0
  114. package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorDataSource.d.ts +10 -0
  115. package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorDataSource.js +5 -0
  116. package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorDataSource.js.map +1 -0
  117. package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorPresenter.d.ts +58 -0
  118. package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorPresenter.js +5 -0
  119. package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorPresenter.js.map +1 -0
  120. package/presentation/experiments/ExperimentsEditor/components/ExperimentIndicator.d.ts +15 -0
  121. package/presentation/experiments/ExperimentsEditor/components/ExperimentIndicator.js +110 -0
  122. package/presentation/experiments/ExperimentsEditor/components/ExperimentIndicator.js.map +1 -0
  123. package/presentation/experiments/ExperimentsEditor/components/ExperimentPreviewToolbar.d.ts +9 -0
  124. package/presentation/experiments/ExperimentsEditor/components/ExperimentPreviewToolbar.js +178 -0
  125. package/presentation/experiments/ExperimentsEditor/components/ExperimentPreviewToolbar.js.map +1 -0
  126. package/presentation/experiments/ExperimentsEditor/components/ExperimentsButton.d.ts +11 -0
  127. package/presentation/experiments/ExperimentsEditor/components/ExperimentsButton.js +51 -0
  128. package/presentation/experiments/ExperimentsEditor/components/ExperimentsButton.js.map +1 -0
  129. package/presentation/experiments/ExperimentsEditor/components/ExperimentsSwitcher.d.ts +14 -0
  130. package/presentation/experiments/ExperimentsEditor/components/ExperimentsSwitcher.js +147 -0
  131. package/presentation/experiments/ExperimentsEditor/components/ExperimentsSwitcher.js.map +1 -0
  132. package/presentation/experiments/ExperimentsEditor/feature.d.ts +3 -0
  133. package/presentation/experiments/ExperimentsEditor/feature.js +21 -0
  134. package/presentation/experiments/ExperimentsEditor/feature.js.map +1 -0
  135. package/presentation/experiments/ExperimentsEditor/index.d.ts +4 -0
  136. package/presentation/experiments/ExperimentsEditor/index.js +3 -0
  137. package/presentation/experiments/ExperimentsManager/ExperimentsManagerPresenter.d.ts +39 -0
  138. package/presentation/experiments/ExperimentsManager/ExperimentsManagerPresenter.js +219 -0
  139. package/presentation/experiments/ExperimentsManager/ExperimentsManagerPresenter.js.map +1 -0
  140. package/presentation/experiments/ExperimentsManager/abstractions/ExperimentsManagerPresenter.d.ts +52 -0
  141. package/presentation/experiments/ExperimentsManager/abstractions/ExperimentsManagerPresenter.js +5 -0
  142. package/presentation/experiments/ExperimentsManager/abstractions/ExperimentsManagerPresenter.js.map +1 -0
  143. package/presentation/experiments/ExperimentsManager/components/ExperimentCard.d.ts +10 -0
  144. package/presentation/experiments/ExperimentsManager/components/ExperimentCard.js +296 -0
  145. package/presentation/experiments/ExperimentsManager/components/ExperimentCard.js.map +1 -0
  146. package/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.d.ts +2 -0
  147. package/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.js +92 -0
  148. package/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.js.map +1 -0
  149. package/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.d.ts +6 -0
  150. package/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.js +103 -0
  151. package/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.js.map +1 -0
  152. package/presentation/experiments/ExperimentsManager/components/ExperimentsListView.d.ts +9 -0
  153. package/presentation/experiments/ExperimentsManager/components/ExperimentsListView.js +58 -0
  154. package/presentation/experiments/ExperimentsManager/components/ExperimentsListView.js.map +1 -0
  155. package/presentation/experiments/ExperimentsManager/feature.d.ts +3 -0
  156. package/presentation/experiments/ExperimentsManager/feature.js +17 -0
  157. package/presentation/experiments/ExperimentsManager/feature.js.map +1 -0
  158. package/presentation/experiments/ExperimentsManager/index.d.ts +4 -0
  159. package/presentation/experiments/ExperimentsManager/index.js +3 -0
  160. package/presentation/experiments/VariantPageEditorConfig.d.ts +7 -0
  161. package/presentation/experiments/VariantPageEditorConfig.js +26 -0
  162. package/presentation/experiments/VariantPageEditorConfig.js.map +1 -0
  163. package/presentation/experiments/config/ExperimentsEditorConfig.d.ts +8 -0
  164. package/presentation/experiments/config/ExperimentsEditorConfig.js +21 -0
  165. package/presentation/experiments/config/ExperimentsEditorConfig.js.map +1 -0
  166. package/presentation/experiments/config/VariantAutoSave.d.ts +5 -0
  167. package/presentation/experiments/config/VariantAutoSave.js +41 -0
  168. package/presentation/experiments/config/VariantAutoSave.js.map +1 -0
  169. package/presentation/experiments/shared/variantColors.d.ts +11 -0
  170. package/presentation/experiments/shared/variantColors.js +13 -0
  171. package/presentation/experiments/shared/variantColors.js.map +1 -0
  172. package/presentation/experiments/shared/variantDocument.d.ts +16 -0
  173. package/presentation/experiments/shared/variantDocument.js +31 -0
  174. package/presentation/experiments/shared/variantDocument.js.map +1 -0
  175. package/presentation/navigation/Extension.js +9 -5
  176. package/presentation/navigation/Extension.js.map +1 -1
  177. package/presentation/navigation/NextjsConfig/NextjsConfigDialog.d.ts +2 -2
  178. package/presentation/navigation/StarterKitConfigDialog.js +1 -1
  179. package/presentation/navigation/StarterKitConfigDialog.js.map +1 -1
  180. package/presentation/pages/CreatePage/CreatePageDialog.d.ts +2 -2
  181. package/presentation/pages/CreatePage/CreatePagePresenter.js +1 -1
  182. package/presentation/pages/CreatePage/CreatePagePresenter.js.map +1 -1
  183. package/presentation/pages/CreatePage/WithLanguageSelector.js +3 -3
  184. package/presentation/pages/CreatePage/WithLanguageSelector.js.map +1 -1
  185. package/presentation/pages/CreatePage/feature.js +3 -3
  186. package/presentation/pages/CreatePage/feature.js.map +1 -1
  187. package/presentation/pages/PageEditor/PageEditor.experiments.d.ts +2 -0
  188. package/presentation/pages/PageEditor/PageEditor.experiments.js +54 -0
  189. package/presentation/pages/PageEditor/PageEditor.experiments.js.map +1 -0
  190. package/presentation/pages/PageEditor/PageEditorSurface.d.ts +15 -0
  191. package/presentation/pages/PageEditor/PageEditorSurface.js +63 -0
  192. package/presentation/pages/PageEditor/PageEditorSurface.js.map +1 -0
  193. package/presentation/pages/PageEditor/TopBar/PageSettingsDrawer.d.ts +2 -2
  194. package/presentation/pages/PageEditor/pageDocument.d.ts +4 -0
  195. package/presentation/pages/PageEditor/pageDocument.js +15 -0
  196. package/presentation/pages/PageEditor/pageDocument.js.map +1 -0
  197. package/presentation/pages/PageList/components/BulkActions/BulkActionDelete.d.ts +2 -2
  198. package/presentation/pages/PageList/components/BulkActions/BulkActionDuplicate.d.ts +2 -2
  199. package/presentation/pages/PageList/components/BulkActions/BulkActionMovePage.d.ts +2 -2
  200. package/presentation/pages/PageList/components/BulkActions/BulkActionPublish.d.ts +2 -2
  201. package/presentation/pages/PageList/components/BulkActions/BulkActionUnpublish.d.ts +2 -2
  202. package/presentation/pages/PageList/components/DocumentList.d.ts +2 -2
  203. package/presentation/pages/PageList/components/PagesList.js +2 -1
  204. package/presentation/pages/PageList/components/PagesList.js.map +1 -1
  205. package/presentation/pages/PageList/components/Table/Table.d.ts +2 -2
  206. package/presentation/pages/PageList/components/WbPagesBreadcrumbs.d.ts +9 -0
  207. package/presentation/pages/PageList/components/WbPagesBreadcrumbs.js +40 -0
  208. package/presentation/pages/PageList/components/WbPagesBreadcrumbs.js.map +1 -0
  209. package/presentation/pages/TranslatePage/TranslatePageConfig.d.ts +1 -1
  210. package/presentation/pages/TranslatePage/TranslatePageConfig.js +6 -2
  211. package/presentation/pages/TranslatePage/TranslatePageConfig.js.map +1 -1
  212. package/presentation/pages/TranslatePage/TranslatePageDialog.js +22 -10
  213. package/presentation/pages/TranslatePage/TranslatePageDialog.js.map +1 -1
  214. package/presentation/pages/TranslatePage/translatePageSchema.d.ts +1 -1
  215. package/presentation/pages/TranslatePage/translatePageSchema.js +1 -1
  216. package/presentation/pages/TranslatePage/translatePageSchema.js.map +1 -1
  217. package/presentation/pages/TrashBin/WbTrashBin.d.ts +2 -2
  218. package/presentation/redirects/RedirectList/components/BulkActionDelete.d.ts +2 -2
  219. package/presentation/redirects/RedirectList/components/BulkActionMove.d.ts +2 -2
  220. package/presentation/redirects/RedirectList/components/CreateRedirectDialog.d.ts +2 -2
  221. package/presentation/redirects/RedirectList/components/DocumentList.d.ts +2 -2
  222. package/presentation/redirects/RedirectList/components/EditRedirectDialog.d.ts +2 -2
  223. package/presentation/redirects/RedirectList/components/Table/Table.d.ts +2 -2
  224. package/shared/fileManagerItemToValue.d.ts +8 -9
  225. package/shared/fileManagerItemToValue.js +22 -7
  226. package/shared/fileManagerItemToValue.js.map +1 -1
  227. package/inputRenderers/LexicalInput/icons/list-ol.js +0 -20
  228. package/inputRenderers/LexicalInput/icons/list-ol.js.map +0 -1
  229. package/inputRenderers/LexicalInput/icons/list-ol.svg +0 -1
  230. package/inputRenderers/LexicalInput/icons/list-ul.js +0 -18
  231. package/inputRenderers/LexicalInput/icons/list-ul.js.map +0 -1
  232. package/inputRenderers/LexicalInput/icons/list-ul.svg +0 -1
  233. package/static/svg/list-ol.d64946f3.svg +0 -1
  234. package/static/svg/list-ul.1d54da3f.svg +0 -1
@@ -0,0 +1,296 @@
1
+ import react from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { Button, Text } from "@webiny/admin-ui";
4
+ import { useConfirmationDialog, useSnackbar } from "@webiny/app-admin";
5
+ import { ReactComponent } from "@webiny/icons/play_arrow.svg";
6
+ import { ReactComponent as pause_svg_ReactComponent } from "@webiny/icons/pause.svg";
7
+ import { ReactComponent as edit_svg_ReactComponent } from "@webiny/icons/edit.svg";
8
+ import { ReactComponent as delete_svg_ReactComponent } from "@webiny/icons/delete.svg";
9
+ const Dot = ({ color })=>/*#__PURE__*/ react.createElement("span", {
10
+ style: {
11
+ width: 8,
12
+ height: 8,
13
+ borderRadius: "50%",
14
+ background: color,
15
+ flexShrink: 0
16
+ }
17
+ });
18
+ const Thumbnail = ({ band })=>/*#__PURE__*/ react.createElement("div", {
19
+ style: {
20
+ border: "1px solid #e5e7eb",
21
+ borderRadius: 6,
22
+ overflow: "hidden",
23
+ background: "#fff"
24
+ }
25
+ }, /*#__PURE__*/ react.createElement("div", {
26
+ style: {
27
+ height: 18,
28
+ background: "#000"
29
+ }
30
+ }), /*#__PURE__*/ react.createElement("div", {
31
+ style: {
32
+ padding: "8px 8px 0"
33
+ }
34
+ }, /*#__PURE__*/ react.createElement("div", {
35
+ style: {
36
+ height: 4,
37
+ borderRadius: 2,
38
+ background: "#e5e7eb",
39
+ width: "70%"
40
+ }
41
+ }), /*#__PURE__*/ react.createElement("div", {
42
+ style: {
43
+ height: 4,
44
+ borderRadius: 2,
45
+ background: "#eef0f2",
46
+ width: "45%",
47
+ marginTop: 4
48
+ }
49
+ })), /*#__PURE__*/ react.createElement("div", {
50
+ style: {
51
+ height: 14,
52
+ background: band,
53
+ marginTop: 8
54
+ }
55
+ }));
56
+ const ExperimentCard_ExperimentCard = observer(function({ presenter, card }) {
57
+ const { experiment, active, buckets, variantCount } = card;
58
+ const { showSnackbar } = useSnackbar();
59
+ const { showConfirmation } = useConfirmationDialog({
60
+ title: "Delete experiment",
61
+ loading: "Deleting experiment...",
62
+ message: /*#__PURE__*/ react.createElement(Text, null, "You are about to permanently delete this experiment and all of its variants. This cannot be undone.")
63
+ });
64
+ const activate = async ()=>{
65
+ try {
66
+ await presenter.activateExperiment(experiment);
67
+ showSnackbar(`"${experiment.name}" is now active.`);
68
+ } catch (ex) {
69
+ showSnackbar(ex.message || "Could not activate the experiment.");
70
+ }
71
+ };
72
+ const deactivate = async ()=>{
73
+ try {
74
+ await presenter.deactivateExperiment(experiment);
75
+ showSnackbar(`"${experiment.name}" was deactivated.`);
76
+ } catch (ex) {
77
+ showSnackbar(ex.message || "Could not deactivate the experiment.");
78
+ }
79
+ };
80
+ const remove = ()=>showConfirmation(async ()=>{
81
+ try {
82
+ await presenter.deleteExperiment(experiment);
83
+ showSnackbar(`"${experiment.name}" was deleted.`);
84
+ } catch (ex) {
85
+ showSnackbar(ex.message || "Could not delete the experiment.");
86
+ }
87
+ });
88
+ return /*#__PURE__*/ react.createElement("div", {
89
+ style: {
90
+ border: active ? "1px solid #b7e4c7" : "1px solid #e5e7eb",
91
+ background: active ? "#f4fbf6" : "#fff",
92
+ borderRadius: 12,
93
+ padding: 16,
94
+ marginBottom: 16
95
+ }
96
+ }, /*#__PURE__*/ react.createElement("div", {
97
+ style: {
98
+ display: "flex",
99
+ alignItems: "flex-start",
100
+ justifyContent: "space-between",
101
+ gap: 8
102
+ }
103
+ }, /*#__PURE__*/ react.createElement("div", {
104
+ style: {
105
+ minWidth: 0
106
+ }
107
+ }, /*#__PURE__*/ react.createElement("div", {
108
+ style: {
109
+ display: "flex",
110
+ alignItems: "center",
111
+ gap: 10
112
+ }
113
+ }, /*#__PURE__*/ react.createElement("span", {
114
+ style: {
115
+ fontWeight: 600,
116
+ fontSize: 15,
117
+ whiteSpace: "nowrap",
118
+ overflow: "hidden",
119
+ textOverflow: "ellipsis"
120
+ }
121
+ }, experiment.name), /*#__PURE__*/ react.createElement("span", {
122
+ style: {
123
+ display: "inline-flex",
124
+ alignItems: "center",
125
+ gap: 5,
126
+ fontSize: 12,
127
+ fontWeight: 500,
128
+ color: active ? "#0f9d58" : "#6b7280",
129
+ background: active ? "transparent" : "#f2f2f2",
130
+ borderRadius: 6,
131
+ padding: active ? 0 : "1px 8px",
132
+ whiteSpace: "nowrap"
133
+ }
134
+ }, active ? /*#__PURE__*/ react.createElement(Dot, {
135
+ color: "#10b981"
136
+ }) : null, active ? "Active" : "Inactive")), /*#__PURE__*/ react.createElement("div", {
137
+ style: {
138
+ fontSize: 13,
139
+ color: "#6b7280",
140
+ marginTop: 4
141
+ }
142
+ }, variantCount, " variant", 1 === variantCount ? "" : "s", " \xb7 splitting traffic")), active ? /*#__PURE__*/ react.createElement(Button, {
143
+ variant: "secondary",
144
+ icon: /*#__PURE__*/ react.createElement(pause_svg_ReactComponent, null),
145
+ text: "Deactivate",
146
+ onClick: deactivate
147
+ }) : /*#__PURE__*/ react.createElement("button", {
148
+ type: "button",
149
+ onClick: activate,
150
+ style: {
151
+ display: "inline-flex",
152
+ alignItems: "center",
153
+ gap: 6,
154
+ border: "none",
155
+ background: "#10b981",
156
+ color: "#fff",
157
+ borderRadius: 8,
158
+ padding: "7px 14px",
159
+ fontWeight: 600,
160
+ fontSize: 13,
161
+ cursor: "pointer",
162
+ whiteSpace: "nowrap"
163
+ }
164
+ }, /*#__PURE__*/ react.createElement(ReactComponent, {
165
+ style: {
166
+ width: 18,
167
+ height: 18,
168
+ fill: "currentColor"
169
+ }
170
+ }), "Activate")), /*#__PURE__*/ react.createElement("div", {
171
+ style: {
172
+ display: "grid",
173
+ gridTemplateColumns: `repeat(${buckets.length}, 1fr)`,
174
+ gap: 10,
175
+ marginTop: 16
176
+ }
177
+ }, buckets.map((bucket)=>/*#__PURE__*/ react.createElement("div", {
178
+ key: bucket.key
179
+ }, /*#__PURE__*/ react.createElement(Thumbnail, {
180
+ band: bucket.band
181
+ }), /*#__PURE__*/ react.createElement("div", {
182
+ style: {
183
+ display: "flex",
184
+ alignItems: "center",
185
+ justifyContent: "space-between",
186
+ gap: 6,
187
+ marginTop: 8
188
+ }
189
+ }, /*#__PURE__*/ react.createElement("span", {
190
+ style: {
191
+ display: "flex",
192
+ alignItems: "center",
193
+ gap: 6,
194
+ minWidth: 0
195
+ }
196
+ }, /*#__PURE__*/ react.createElement(Dot, {
197
+ color: bucket.dot
198
+ }), /*#__PURE__*/ react.createElement("span", {
199
+ style: {
200
+ fontSize: 13,
201
+ fontWeight: 600,
202
+ whiteSpace: "nowrap",
203
+ overflow: "hidden",
204
+ textOverflow: "ellipsis"
205
+ }
206
+ }, bucket.name)), /*#__PURE__*/ react.createElement("span", {
207
+ style: {
208
+ fontSize: 13,
209
+ color: "#6b7280"
210
+ }
211
+ }, bucket.weight, "%"))))), /*#__PURE__*/ react.createElement("div", {
212
+ style: {
213
+ display: "flex",
214
+ height: 8,
215
+ borderRadius: 4,
216
+ overflow: "hidden",
217
+ marginTop: 16,
218
+ background: "#eef0f2"
219
+ }
220
+ }, buckets.map((bucket)=>/*#__PURE__*/ react.createElement("div", {
221
+ key: bucket.key,
222
+ style: {
223
+ width: `${bucket.weight}%`,
224
+ background: bucket.dot
225
+ }
226
+ }))), /*#__PURE__*/ react.createElement("div", {
227
+ style: {
228
+ display: "flex",
229
+ flexWrap: "wrap",
230
+ alignItems: "center",
231
+ gap: 16,
232
+ marginTop: 12
233
+ }
234
+ }, buckets.map((bucket)=>/*#__PURE__*/ react.createElement("span", {
235
+ key: bucket.key,
236
+ style: {
237
+ display: "flex",
238
+ alignItems: "center",
239
+ gap: 6,
240
+ fontSize: 13
241
+ }
242
+ }, /*#__PURE__*/ react.createElement(Dot, {
243
+ color: bucket.dot
244
+ }), /*#__PURE__*/ react.createElement("span", {
245
+ style: {
246
+ color: "#374151"
247
+ }
248
+ }, bucket.name), /*#__PURE__*/ react.createElement("span", {
249
+ style: {
250
+ color: "#9ca3af"
251
+ }
252
+ }, "\xb7"), /*#__PURE__*/ react.createElement("span", {
253
+ style: {
254
+ fontWeight: 600
255
+ }
256
+ }, bucket.weight, "%")))), /*#__PURE__*/ react.createElement("div", {
257
+ style: {
258
+ display: "flex",
259
+ alignItems: "center",
260
+ justifyContent: "space-between",
261
+ marginTop: 16,
262
+ paddingTop: 14,
263
+ borderTop: "1px solid #eef0f2"
264
+ }
265
+ }, /*#__PURE__*/ react.createElement(Button, {
266
+ variant: "secondary",
267
+ icon: /*#__PURE__*/ react.createElement(edit_svg_ReactComponent, null),
268
+ text: "Edit",
269
+ onClick: ()=>presenter.startEdit(experiment)
270
+ }), /*#__PURE__*/ react.createElement("button", {
271
+ type: "button",
272
+ onClick: remove,
273
+ style: {
274
+ display: "inline-flex",
275
+ alignItems: "center",
276
+ gap: 6,
277
+ border: "1px solid #f0d0cb",
278
+ background: "#fff",
279
+ color: "#d93025",
280
+ borderRadius: 8,
281
+ padding: "7px 14px",
282
+ fontWeight: 600,
283
+ fontSize: 13,
284
+ cursor: "pointer"
285
+ }
286
+ }, /*#__PURE__*/ react.createElement(delete_svg_ReactComponent, {
287
+ style: {
288
+ width: 18,
289
+ height: 18,
290
+ fill: "currentColor"
291
+ }
292
+ }), "Delete")));
293
+ });
294
+ export { ExperimentCard_ExperimentCard as ExperimentCard };
295
+
296
+ //# sourceMappingURL=ExperimentCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/experiments/ExperimentsManager/components/ExperimentCard.js","sources":["../../../../../src/presentation/experiments/ExperimentsManager/components/ExperimentCard.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Button, Text } from \"@webiny/admin-ui\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { ReactComponent as PlayIcon } from \"@webiny/icons/play_arrow.svg\";\nimport { ReactComponent as PauseIcon } from \"@webiny/icons/pause.svg\";\nimport { ReactComponent as EditIcon } from \"@webiny/icons/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport type {\n ExperimentCardViewModel,\n IExperimentsManagerPresenter\n} from \"../abstractions/ExperimentsManagerPresenter.js\";\n\ninterface Props {\n presenter: IExperimentsManagerPresenter;\n card: ExperimentCardViewModel;\n}\n\nconst Dot = ({ color }: { color: string }) => (\n <span style={{ width: 8, height: 8, borderRadius: \"50%\", background: color, flexShrink: 0 }} />\n);\n\n/** A single page thumbnail — a black header, a couple of placeholder lines and a coloured band. */\nconst Thumbnail = ({ band }: { band: string }) => (\n <div\n style={{\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n overflow: \"hidden\",\n background: \"#fff\"\n }}\n >\n <div style={{ height: 18, background: \"#000\" }} />\n <div style={{ padding: \"8px 8px 0\" }}>\n <div style={{ height: 4, borderRadius: 2, background: \"#e5e7eb\", width: \"70%\" }} />\n <div\n style={{\n height: 4,\n borderRadius: 2,\n background: \"#eef0f2\",\n width: \"45%\",\n marginTop: 4\n }}\n />\n </div>\n <div style={{ height: 14, background: band, marginTop: 8 }} />\n </div>\n);\n\nexport const ExperimentCard = observer(function ExperimentCard({ presenter, card }: Props) {\n const { experiment, active, buckets, variantCount } = card;\n const { showSnackbar } = useSnackbar();\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete experiment\",\n loading: \"Deleting experiment...\",\n message: (\n <Text>\n You are about to permanently delete this experiment and all of its variants. This\n cannot be undone.\n </Text>\n )\n });\n\n const activate = async () => {\n try {\n await presenter.activateExperiment(experiment);\n showSnackbar(`\"${experiment.name}\" is now active.`);\n } catch (ex: any) {\n showSnackbar(ex.message || \"Could not activate the experiment.\");\n }\n };\n\n const deactivate = async () => {\n try {\n await presenter.deactivateExperiment(experiment);\n showSnackbar(`\"${experiment.name}\" was deactivated.`);\n } catch (ex: any) {\n showSnackbar(ex.message || \"Could not deactivate the experiment.\");\n }\n };\n\n const remove = () =>\n showConfirmation(async () => {\n try {\n await presenter.deleteExperiment(experiment);\n showSnackbar(`\"${experiment.name}\" was deleted.`);\n } catch (ex: any) {\n showSnackbar(ex.message || \"Could not delete the experiment.\");\n }\n });\n\n return (\n <div\n style={{\n border: active ? \"1px solid #b7e4c7\" : \"1px solid #e5e7eb\",\n background: active ? \"#f4fbf6\" : \"#fff\",\n borderRadius: 12,\n padding: 16,\n marginBottom: 16\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 8\n }}\n >\n <div style={{ minWidth: 0 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span\n style={{\n fontWeight: 600,\n fontSize: 15,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\"\n }}\n >\n {experiment.name}\n </span>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 5,\n fontSize: 12,\n fontWeight: 500,\n color: active ? \"#0f9d58\" : \"#6b7280\",\n background: active ? \"transparent\" : \"#f2f2f2\",\n borderRadius: 6,\n padding: active ? 0 : \"1px 8px\",\n whiteSpace: \"nowrap\"\n }}\n >\n {active ? <Dot color=\"#10b981\" /> : null}\n {active ? \"Active\" : \"Inactive\"}\n </span>\n </div>\n <div style={{ fontSize: 13, color: \"#6b7280\", marginTop: 4 }}>\n {variantCount} variant{variantCount === 1 ? \"\" : \"s\"} · splitting traffic\n </div>\n </div>\n {active ? (\n <Button\n variant=\"secondary\"\n icon={<PauseIcon />}\n text=\"Deactivate\"\n onClick={deactivate}\n />\n ) : (\n <button\n type=\"button\"\n onClick={activate}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n border: \"none\",\n background: \"#10b981\",\n color: \"#fff\",\n borderRadius: 8,\n padding: \"7px 14px\",\n fontWeight: 600,\n fontSize: 13,\n cursor: \"pointer\",\n whiteSpace: \"nowrap\"\n }}\n >\n <PlayIcon style={{ width: 18, height: 18, fill: \"currentColor\" }} />\n Activate\n </button>\n )}\n </div>\n\n {/* Thumbnails */}\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${buckets.length}, 1fr)`,\n gap: 10,\n marginTop: 16\n }}\n >\n {buckets.map(bucket => (\n <div key={bucket.key}>\n <Thumbnail band={bucket.band} />\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 6,\n marginTop: 8\n }}\n >\n <span\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0\n }}\n >\n <Dot color={bucket.dot} />\n <span\n style={{\n fontSize: 13,\n fontWeight: 600,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\"\n }}\n >\n {bucket.name}\n </span>\n </span>\n <span style={{ fontSize: 13, color: \"#6b7280\" }}>{bucket.weight}%</span>\n </div>\n </div>\n ))}\n </div>\n\n {/* Traffic bar */}\n <div\n style={{\n display: \"flex\",\n height: 8,\n borderRadius: 4,\n overflow: \"hidden\",\n marginTop: 16,\n background: \"#eef0f2\"\n }}\n >\n {buckets.map(bucket => (\n <div\n key={bucket.key}\n style={{ width: `${bucket.weight}%`, background: bucket.dot }}\n />\n ))}\n </div>\n\n {/* Legend */}\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: 16,\n marginTop: 12\n }}\n >\n {buckets.map(bucket => (\n <span\n key={bucket.key}\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 13 }}\n >\n <Dot color={bucket.dot} />\n <span style={{ color: \"#374151\" }}>{bucket.name}</span>\n <span style={{ color: \"#9ca3af\" }}>·</span>\n <span style={{ fontWeight: 600 }}>{bucket.weight}%</span>\n </span>\n ))}\n </div>\n\n {/* Footer */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: 16,\n paddingTop: 14,\n borderTop: \"1px solid #eef0f2\"\n }}\n >\n <Button\n variant=\"secondary\"\n icon={<EditIcon />}\n text=\"Edit\"\n onClick={() => presenter.startEdit(experiment)}\n />\n <button\n type=\"button\"\n onClick={remove}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n border: \"1px solid #f0d0cb\",\n background: \"#fff\",\n color: \"#d93025\",\n borderRadius: 8,\n padding: \"7px 14px\",\n fontWeight: 600,\n fontSize: 13,\n cursor: \"pointer\"\n }}\n >\n <DeleteIcon style={{ width: 18, height: 18, fill: \"currentColor\" }} />\n Delete\n </button>\n </div>\n </div>\n );\n});\n"],"names":["Dot","color","Thumbnail","band","ExperimentCard","observer","presenter","card","experiment","active","buckets","variantCount","showSnackbar","useSnackbar","showConfirmation","useConfirmationDialog","Text","activate","ex","deactivate","remove","Button","PauseIcon","PlayIcon","bucket","EditIcon","DeleteIcon"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const ExperimentsDrawerView: () => React.JSX.Element;
@@ -0,0 +1,92 @@
1
+ import react, { useEffect, useMemo } from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { DiContainerProvider, useContainer, useFeature } from "@webiny/app";
4
+ import { Drawer, IconButton } from "@webiny/admin-ui";
5
+ import { ReactComponent } from "@webiny/icons/science.svg";
6
+ import { ReactComponent as arrow_back_svg_ReactComponent } from "@webiny/icons/arrow_back.svg";
7
+ import { ExperimentFormView } from "../../ExperimentForm/index.js";
8
+ import { ExperimentsManagerPresenterFeature } from "../feature.js";
9
+ import { ExperimentsListView } from "./ExperimentsListView.js";
10
+ const ExperimentsDrawerView_ExperimentsDrawerViewInner = observer(function() {
11
+ const { presenter } = useFeature(ExperimentsManagerPresenterFeature);
12
+ useEffect(()=>{
13
+ presenter.init();
14
+ return ()=>presenter.dispose();
15
+ }, [
16
+ presenter
17
+ ]);
18
+ const { open, view, editInitial } = presenter.vm;
19
+ const flask = /*#__PURE__*/ react.createElement(ReactComponent, {
20
+ style: {
21
+ width: 20,
22
+ height: 20
23
+ }
24
+ });
25
+ const back = /*#__PURE__*/ react.createElement(IconButton, {
26
+ variant: "ghost",
27
+ size: "sm",
28
+ icon: /*#__PURE__*/ react.createElement(arrow_back_svg_ReactComponent, {
29
+ style: {
30
+ width: 18,
31
+ height: 18
32
+ }
33
+ }),
34
+ onClick: ()=>presenter.showList()
35
+ });
36
+ let title;
37
+ title = "create" === view ? /*#__PURE__*/ react.createElement("span", {
38
+ style: {
39
+ display: "flex",
40
+ alignItems: "center",
41
+ gap: 8
42
+ }
43
+ }, back, flask, "New experiment") : "edit" === view ? /*#__PURE__*/ react.createElement("span", {
44
+ style: {
45
+ display: "flex",
46
+ alignItems: "center",
47
+ gap: 8
48
+ }
49
+ }, back, flask, "Edit experiment") : /*#__PURE__*/ react.createElement("span", {
50
+ style: {
51
+ display: "flex",
52
+ alignItems: "center",
53
+ gap: 8
54
+ }
55
+ }, flask, "Experiments");
56
+ return /*#__PURE__*/ react.createElement(Drawer, {
57
+ open: open,
58
+ onClose: ()=>presenter.close(),
59
+ modal: true,
60
+ width: 520,
61
+ title: title,
62
+ headerSeparator: true,
63
+ bodyPadding: false,
64
+ className: "flex flex-col"
65
+ }, "list" === view ? /*#__PURE__*/ react.createElement(ExperimentsListView, {
66
+ presenter: presenter
67
+ }) : null, "create" === view ? /*#__PURE__*/ react.createElement(ExperimentFormView, {
68
+ onCancel: ()=>presenter.showList(),
69
+ onSubmit: (payload)=>presenter.createExperiment(payload),
70
+ submitLabel: "Create experiment"
71
+ }) : null, "edit" === view && editInitial ? /*#__PURE__*/ react.createElement(ExperimentFormView, {
72
+ initial: editInitial,
73
+ allowStructureChange: false,
74
+ submitLabel: "Save changes",
75
+ onCancel: ()=>presenter.showList(),
76
+ onSubmit: (payload)=>presenter.updateExperiment(payload)
77
+ }) : null);
78
+ });
79
+ const ExperimentsDrawerView = ()=>{
80
+ const container = useContainer();
81
+ const scopedContainer = useMemo(()=>{
82
+ const child = container.createChildContainer();
83
+ ExperimentsManagerPresenterFeature.register(child);
84
+ return child;
85
+ }, []);
86
+ return /*#__PURE__*/ react.createElement(DiContainerProvider, {
87
+ container: scopedContainer
88
+ }, /*#__PURE__*/ react.createElement(ExperimentsDrawerView_ExperimentsDrawerViewInner, null));
89
+ };
90
+ export { ExperimentsDrawerView };
91
+
92
+ //# sourceMappingURL=ExperimentsDrawerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.js","sources":["../../../../../src/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { DiContainerProvider, useContainer, useFeature } from \"@webiny/app\";\nimport { Drawer, IconButton } from \"@webiny/admin-ui\";\nimport { ReactComponent as ScienceIcon } from \"@webiny/icons/science.svg\";\nimport { ReactComponent as BackIcon } from \"@webiny/icons/arrow_back.svg\";\nimport { ExperimentFormView } from \"../../ExperimentForm/index.js\";\nimport { ExperimentsManagerPresenterFeature } from \"../feature.js\";\nimport { ExperimentsListView } from \"./ExperimentsListView.js\";\n\nconst ExperimentsDrawerViewInner = observer(function ExperimentsDrawerViewInner() {\n const { presenter } = useFeature(ExperimentsManagerPresenterFeature);\n\n useEffect(() => {\n presenter.init();\n return () => presenter.dispose();\n }, [presenter]);\n\n const { open, view, editInitial } = presenter.vm;\n\n const flask = <ScienceIcon style={{ width: 20, height: 20 }} />;\n const back = (\n <IconButton\n variant=\"ghost\"\n size=\"sm\"\n icon={<BackIcon style={{ width: 18, height: 18 }} />}\n onClick={() => presenter.showList()}\n />\n );\n\n let title: React.ReactNode;\n if (view === \"create\") {\n title = (\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {back}\n {flask}\n New experiment\n </span>\n );\n } else if (view === \"edit\") {\n title = (\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {back}\n {flask}\n Edit experiment\n </span>\n );\n } else {\n title = (\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {flask}\n Experiments\n </span>\n );\n }\n\n return (\n <Drawer\n open={open}\n onClose={() => presenter.close()}\n modal={true}\n width={520}\n title={title}\n headerSeparator={true}\n bodyPadding={false}\n className={\"flex flex-col\"}\n >\n {view === \"list\" ? <ExperimentsListView presenter={presenter} /> : null}\n {view === \"create\" ? (\n <ExperimentFormView\n onCancel={() => presenter.showList()}\n onSubmit={payload => presenter.createExperiment(payload)}\n submitLabel=\"Create experiment\"\n />\n ) : null}\n {view === \"edit\" && editInitial ? (\n <ExperimentFormView\n initial={editInitial}\n allowStructureChange={false}\n submitLabel=\"Save changes\"\n onCancel={() => presenter.showList()}\n onSubmit={payload => presenter.updateExperiment(payload)}\n />\n ) : null}\n </Drawer>\n );\n});\n\nexport const ExperimentsDrawerView = () => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n ExperimentsManagerPresenterFeature.register(child);\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <ExperimentsDrawerViewInner />\n </DiContainerProvider>\n );\n};\n"],"names":["ExperimentsDrawerViewInner","observer","presenter","useFeature","ExperimentsManagerPresenterFeature","useEffect","open","view","editInitial","flask","ScienceIcon","back","IconButton","BackIcon","title","Drawer","ExperimentsListView","ExperimentFormView","payload","ExperimentsDrawerView","container","useContainer","scopedContainer","useMemo","child","DiContainerProvider"],"mappings":";;;;;;;;;AAUA,MAAMA,mDAA6BC,SAAS;IACxC,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IAEjCC,UAAU;QACNH,UAAU,IAAI;QACd,OAAO,IAAMA,UAAU,OAAO;IAClC,GAAG;QAACA;KAAU;IAEd,MAAM,EAAEI,IAAI,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGN,UAAU,EAAE;IAEhD,MAAMO,QAAQ,WAARA,GAAQ,oBAACC,gBAAWA;QAAC,OAAO;YAAE,OAAO;YAAI,QAAQ;QAAG;;IAC1D,MAAMC,OAAO,WAAPA,GACF,oBAACC,YAAUA;QACP,SAAQ;QACR,MAAK;QACL,oBAAM,oBAACC,+BAAQA;YAAC,OAAO;gBAAE,OAAO;gBAAI,QAAQ;YAAG;;QAC/C,SAAS,IAAMX,UAAU,QAAQ;;IAIzC,IAAIY;IAEAA,QADAP,AAAS,aAATA,OACQ,WAARO,GACI,oBAAC;QAAK,OAAO;YAAE,SAAS;YAAQ,YAAY;YAAU,KAAK;QAAE;OACxDH,MACAF,OAAM,oBAIRF,AAAS,WAATA,OACC,WAARO,GACI,oBAAC;QAAK,OAAO;YAAE,SAAS;YAAQ,YAAY;YAAU,KAAK;QAAE;OACxDH,MACAF,OAAM,qBAKP,WAARK,GACI,oBAAC;QAAK,OAAO;YAAE,SAAS;YAAQ,YAAY;YAAU,KAAK;QAAE;OACxDL,OAAM;IAMnB,OAAO,WAAP,GACI,oBAACM,QAAMA;QACH,MAAMT;QACN,SAAS,IAAMJ,UAAU,KAAK;QAC9B,OAAO;QACP,OAAO;QACP,OAAOY;QACP,iBAAiB;QACjB,aAAa;QACb,WAAW;OAEVP,AAAS,WAATA,OAAkB,WAAT,GAAS,oBAACS,qBAAmBA;QAAC,WAAWd;SAAgB,MAClEK,AAAS,aAATA,OAAoB,WAAX,GACN,oBAACU,oBAAkBA;QACf,UAAU,IAAMf,UAAU,QAAQ;QAClC,UAAUgB,CAAAA,UAAWhB,UAAU,gBAAgB,CAACgB;QAChD,aAAY;SAEhB,MACHX,AAAS,WAATA,QAAmBC,cAAc,WAAdA,GAChB,oBAACS,oBAAkBA;QACf,SAAST;QACT,sBAAsB;QACtB,aAAY;QACZ,UAAU,IAAMN,UAAU,QAAQ;QAClC,UAAUgB,CAAAA,UAAWhB,UAAU,gBAAgB,CAACgB;SAEpD;AAGhB;AAEO,MAAMC,wBAAwB;IACjC,MAAMC,YAAYC;IAElB,MAAMC,kBAAkBC,QAAQ;QAC5B,MAAMC,QAAQJ,UAAU,oBAAoB;QAC5ChB,mCAAmC,QAAQ,CAACoB;QAC5C,OAAOA;IACX,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACC,qBAAmBA;QAAC,WAAWH;qBAC5B,oBAACtB,kDAA0BA;AAGvC"}
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ interface Props {
3
+ onCreateExperiment: () => void;
4
+ }
5
+ export declare const ExperimentsEmptyState: ({ onCreateExperiment }: Props) => React.JSX.Element;
6
+ export {};
@@ -0,0 +1,103 @@
1
+ import react from "react";
2
+ import { Button, Heading, Link, Text } from "@webiny/admin-ui";
3
+ import { ReactComponent } from "@webiny/icons/add.svg";
4
+ const Illustration = ()=>{
5
+ const card = {
6
+ width: 96,
7
+ height: 64,
8
+ borderRadius: 8,
9
+ border: "1px solid var(--wby-color-neutral-muted, #e0e0e0)",
10
+ overflow: "hidden",
11
+ background: "#fff"
12
+ };
13
+ const bar = {
14
+ height: 16,
15
+ background: "#1a1a1a"
16
+ };
17
+ const line = {
18
+ height: 4,
19
+ width: 48,
20
+ margin: 8,
21
+ borderRadius: 4,
22
+ background: "#d5d5d5"
23
+ };
24
+ return /*#__PURE__*/ react.createElement("div", {
25
+ style: {
26
+ position: "relative",
27
+ display: "flex",
28
+ alignItems: "center",
29
+ justifyContent: "center",
30
+ gap: 24,
31
+ marginBottom: 24
32
+ }
33
+ }, /*#__PURE__*/ react.createElement("div", {
34
+ style: card
35
+ }, /*#__PURE__*/ react.createElement("div", {
36
+ style: bar
37
+ }), /*#__PURE__*/ react.createElement("div", {
38
+ style: line
39
+ })), /*#__PURE__*/ react.createElement("div", {
40
+ style: card
41
+ }, /*#__PURE__*/ react.createElement("div", {
42
+ style: bar
43
+ }), /*#__PURE__*/ react.createElement("div", {
44
+ style: line
45
+ }), /*#__PURE__*/ react.createElement("div", {
46
+ style: {
47
+ height: 12,
48
+ background: "#ffb59b",
49
+ margin: "4px 8px",
50
+ borderRadius: 4
51
+ }
52
+ })), /*#__PURE__*/ react.createElement("div", {
53
+ style: {
54
+ position: "absolute",
55
+ left: "50%",
56
+ transform: "translateX(-50%)",
57
+ width: 38,
58
+ height: 38,
59
+ borderRadius: "50%",
60
+ background: "#ffe9e1",
61
+ color: "#e2572a",
62
+ display: "flex",
63
+ alignItems: "center",
64
+ justifyContent: "center",
65
+ fontSize: 12,
66
+ fontWeight: 600
67
+ }
68
+ }, "A/B"));
69
+ };
70
+ const ExperimentsEmptyState = ({ onCreateExperiment })=>/*#__PURE__*/ react.createElement("div", {
71
+ style: {
72
+ display: "flex",
73
+ flexDirection: "column",
74
+ alignItems: "center",
75
+ textAlign: "center",
76
+ padding: 32,
77
+ maxWidth: 420,
78
+ margin: "48px auto 0"
79
+ }
80
+ }, /*#__PURE__*/ react.createElement(Illustration, null), /*#__PURE__*/ react.createElement(Heading, {
81
+ level: 5
82
+ }, "No experiments on this page"), /*#__PURE__*/ react.createElement("div", {
83
+ style: {
84
+ margin: "12px 0 24px"
85
+ }
86
+ }, /*#__PURE__*/ react.createElement(Text, {
87
+ size: "sm"
88
+ }, "Create an A/B experiment to test variants of this page against each other. Split traffic across full-page variants and run one experiment live at a time.")), /*#__PURE__*/ react.createElement(Button, {
89
+ variant: "primary",
90
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
91
+ text: "Create experiment",
92
+ onClick: onCreateExperiment
93
+ }), /*#__PURE__*/ react.createElement("div", {
94
+ style: {
95
+ marginTop: 16
96
+ }
97
+ }, /*#__PURE__*/ react.createElement(Link, {
98
+ to: "https://www.webiny.com/docs",
99
+ target: "_blank"
100
+ }, "Learn about A/B testing")));
101
+ export { ExperimentsEmptyState };
102
+
103
+ //# sourceMappingURL=ExperimentsEmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.js","sources":["../../../../../src/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button, Heading, Text, Link } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\n\ninterface Props {\n onCreateExperiment: () => void;\n}\n\n/** A/B illustration for the empty state — two page thumbnails with an A/B badge between them. */\nconst Illustration = () => {\n const card: React.CSSProperties = {\n width: 96,\n height: 64,\n borderRadius: 8,\n border: \"1px solid var(--wby-color-neutral-muted, #e0e0e0)\",\n overflow: \"hidden\",\n background: \"#fff\"\n };\n const bar: React.CSSProperties = { height: 16, background: \"#1a1a1a\" };\n const line: React.CSSProperties = {\n height: 4,\n width: 48,\n margin: 8,\n borderRadius: 4,\n background: \"#d5d5d5\"\n };\n\n return (\n <div\n style={{\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 24,\n marginBottom: 24\n }}\n >\n <div style={card}>\n <div style={bar} />\n <div style={line} />\n </div>\n <div style={card}>\n <div style={bar} />\n <div style={line} />\n <div\n style={{\n height: 12,\n background: \"#ffb59b\",\n margin: \"4px 8px\",\n borderRadius: 4\n }}\n />\n </div>\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 38,\n height: 38,\n borderRadius: \"50%\",\n background: \"#ffe9e1\",\n color: \"#e2572a\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 12,\n fontWeight: 600\n }}\n >\n A/B\n </div>\n </div>\n );\n};\n\nexport const ExperimentsEmptyState = ({ onCreateExperiment }: Props) => {\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n textAlign: \"center\",\n padding: 32,\n maxWidth: 420,\n margin: \"48px auto 0\"\n }}\n >\n <Illustration />\n <Heading level={5}>No experiments on this page</Heading>\n <div style={{ margin: \"12px 0 24px\" }}>\n <Text size=\"sm\">\n Create an A/B experiment to test variants of this page against each other. Split\n traffic across full-page variants and run one experiment live at a time.\n </Text>\n </div>\n <Button\n variant=\"primary\"\n icon={<AddIcon />}\n text=\"Create experiment\"\n onClick={onCreateExperiment}\n />\n <div style={{ marginTop: 16 }}>\n <Link to=\"https://www.webiny.com/docs\" target=\"_blank\">\n Learn about A/B testing\n </Link>\n </div>\n </div>\n );\n};\n"],"names":["Illustration","card","bar","line","ExperimentsEmptyState","onCreateExperiment","Heading","Text","Button","AddIcon","Link"],"mappings":";;;AASA,MAAMA,eAAe;IACjB,MAAMC,OAA4B;QAC9B,OAAO;QACP,QAAQ;QACR,cAAc;QACd,QAAQ;QACR,UAAU;QACV,YAAY;IAChB;IACA,MAAMC,MAA2B;QAAE,QAAQ;QAAI,YAAY;IAAU;IACrE,MAAMC,OAA4B;QAC9B,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,cAAc;QACd,YAAY;IAChB;IAEA,OAAO,WAAP,GACI,oBAAC;QACG,OAAO;YACH,UAAU;YACV,SAAS;YACT,YAAY;YACZ,gBAAgB;YAChB,KAAK;YACL,cAAc;QAClB;qBAEA,oBAAC;QAAI,OAAOF;qBACR,oBAAC;QAAI,OAAOC;sBACZ,oBAAC;QAAI,OAAOC;uBAEhB,oBAAC;QAAI,OAAOF;qBACR,oBAAC;QAAI,OAAOC;sBACZ,oBAAC;QAAI,OAAOC;sBACZ,oBAAC;QACG,OAAO;YACH,QAAQ;YACR,YAAY;YACZ,QAAQ;YACR,cAAc;QAClB;uBAGR,oBAAC;QACG,OAAO;YACH,UAAU;YACV,MAAM;YACN,WAAW;YACX,OAAO;YACP,QAAQ;YACR,cAAc;YACd,YAAY;YACZ,OAAO;YACP,SAAS;YACT,YAAY;YACZ,gBAAgB;YAChB,UAAU;YACV,YAAY;QAChB;OACH;AAKb;AAEO,MAAMC,wBAAwB,CAAC,EAAEC,kBAAkB,EAAS,GACxD,WAAP,GACI,oBAAC;QACG,OAAO;YACH,SAAS;YACT,eAAe;YACf,YAAY;YACZ,WAAW;YACX,SAAS;YACT,UAAU;YACV,QAAQ;QACZ;qBAEA,oBAACL,cAAYA,OAAAA,WAAAA,GACb,oBAACM,SAAOA;QAAC,OAAO;OAAG,8CACnB,oBAAC;QAAI,OAAO;YAAE,QAAQ;QAAc;qBAChC,oBAACC,MAAIA;QAAC,MAAK;OAAK,6KAKpB,oBAACC,QAAMA;QACH,SAAQ;QACR,oBAAM,oBAACC,gBAAOA;QACd,MAAK;QACL,SAASJ;sBAEb,oBAAC;QAAI,OAAO;YAAE,WAAW;QAAG;qBACxB,oBAACK,MAAIA;QAAC,IAAG;QAA8B,QAAO;OAAS"}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import type { IExperimentsManagerPresenter } from "../abstractions/ExperimentsManagerPresenter.js";
3
+ interface Props {
4
+ presenter: IExperimentsManagerPresenter;
5
+ }
6
+ export declare const ExperimentsListView: (({ presenter }: Props) => React.JSX.Element) & React.NamedExoticComponent<Props> & {
7
+ readonly type: ({ presenter }: Props) => React.JSX.Element;
8
+ };
9
+ export {};
@@ -0,0 +1,58 @@
1
+ import react from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { Text } from "@webiny/admin-ui";
4
+ import { ReactComponent } from "@webiny/icons/add.svg";
5
+ import { ExperimentsEmptyState } from "./ExperimentsEmptyState.js";
6
+ import { ExperimentCard } from "./ExperimentCard.js";
7
+ const ExperimentsListView_ExperimentsListView = observer(function({ presenter }) {
8
+ const { cards } = presenter.vm;
9
+ if (0 === cards.length) return /*#__PURE__*/ react.createElement(ExperimentsEmptyState, {
10
+ onCreateExperiment: ()=>presenter.showCreate()
11
+ });
12
+ return /*#__PURE__*/ react.createElement("div", {
13
+ style: {
14
+ padding: 24
15
+ }
16
+ }, /*#__PURE__*/ react.createElement("div", {
17
+ style: {
18
+ display: "flex",
19
+ alignItems: "flex-start",
20
+ justifyContent: "space-between",
21
+ gap: 16,
22
+ marginBottom: 20
23
+ }
24
+ }, /*#__PURE__*/ react.createElement(Text, {
25
+ size: "sm"
26
+ }, "Only one experiment can be active at a time. Activating one deactivates the currently active experiment."), /*#__PURE__*/ react.createElement("button", {
27
+ type: "button",
28
+ onClick: ()=>presenter.showCreate(),
29
+ style: {
30
+ display: "inline-flex",
31
+ alignItems: "center",
32
+ gap: 6,
33
+ border: "none",
34
+ background: "#e2572a",
35
+ color: "#fff",
36
+ borderRadius: 8,
37
+ padding: "7px 14px",
38
+ fontWeight: 600,
39
+ fontSize: 13,
40
+ cursor: "pointer",
41
+ whiteSpace: "nowrap",
42
+ flexShrink: 0
43
+ }
44
+ }, /*#__PURE__*/ react.createElement(ReactComponent, {
45
+ style: {
46
+ width: 18,
47
+ height: 18,
48
+ fill: "currentColor"
49
+ }
50
+ }), "New")), cards.map((card)=>/*#__PURE__*/ react.createElement(ExperimentCard, {
51
+ key: card.experiment.id,
52
+ presenter: presenter,
53
+ card: card
54
+ })));
55
+ });
56
+ export { ExperimentsListView_ExperimentsListView as ExperimentsListView };
57
+
58
+ //# sourceMappingURL=ExperimentsListView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/experiments/ExperimentsManager/components/ExperimentsListView.js","sources":["../../../../../src/presentation/experiments/ExperimentsManager/components/ExperimentsListView.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Text } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ExperimentsEmptyState } from \"./ExperimentsEmptyState.js\";\nimport { ExperimentCard } from \"./ExperimentCard.js\";\nimport type { IExperimentsManagerPresenter } from \"../abstractions/ExperimentsManagerPresenter.js\";\n\ninterface Props {\n presenter: IExperimentsManagerPresenter;\n}\n\nexport const ExperimentsListView = observer(function ExperimentsListView({ presenter }: Props) {\n const { cards } = presenter.vm;\n\n if (cards.length === 0) {\n return <ExperimentsEmptyState onCreateExperiment={() => presenter.showCreate()} />;\n }\n\n return (\n <div style={{ padding: 24 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 16,\n marginBottom: 20\n }}\n >\n <Text size=\"sm\">\n Only one experiment can be active at a time. Activating one deactivates the\n currently active experiment.\n </Text>\n <button\n type=\"button\"\n onClick={() => presenter.showCreate()}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n border: \"none\",\n background: \"#e2572a\",\n color: \"#fff\",\n borderRadius: 8,\n padding: \"7px 14px\",\n fontWeight: 600,\n fontSize: 13,\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n flexShrink: 0\n }}\n >\n <AddIcon style={{ width: 18, height: 18, fill: \"currentColor\" }} />\n New\n </button>\n </div>\n\n {cards.map(card => (\n <ExperimentCard key={card.experiment.id} presenter={presenter} card={card} />\n ))}\n </div>\n );\n});\n"],"names":["ExperimentsListView","observer","presenter","cards","ExperimentsEmptyState","Text","AddIcon","card","ExperimentCard"],"mappings":";;;;;;AAYO,MAAMA,0CAAsBC,SAAS,SAA6B,EAAEC,SAAS,EAAS;IACzF,MAAM,EAAEC,KAAK,EAAE,GAAGD,UAAU,EAAE;IAE9B,IAAIC,AAAiB,MAAjBA,MAAM,MAAM,EACZ,OAAO,WAAP,GAAO,oBAACC,uBAAqBA;QAAC,oBAAoB,IAAMF,UAAU,UAAU;;IAGhF,OAAO,WAAP,GACI,oBAAC;QAAI,OAAO;YAAE,SAAS;QAAG;qBACtB,oBAAC;QACG,OAAO;YACH,SAAS;YACT,YAAY;YACZ,gBAAgB;YAChB,KAAK;YACL,cAAc;QAClB;qBAEA,oBAACG,MAAIA;QAAC,MAAK;OAAK,2HAIhB,oBAAC;QACG,MAAK;QACL,SAAS,IAAMH,UAAU,UAAU;QACnC,OAAO;YACH,SAAS;YACT,YAAY;YACZ,KAAK;YACL,QAAQ;YACR,YAAY;YACZ,OAAO;YACP,cAAc;YACd,SAAS;YACT,YAAY;YACZ,UAAU;YACV,QAAQ;YACR,YAAY;YACZ,YAAY;QAChB;qBAEA,oBAACI,gBAAOA;QAAC,OAAO;YAAE,OAAO;YAAI,QAAQ;YAAI,MAAM;QAAe;QAAK,SAK1EH,MAAM,GAAG,CAACI,CAAAA,OAAAA,WAAAA,GACP,oBAACC,gBAAcA;YAAC,KAAKD,KAAK,UAAU,CAAC,EAAE;YAAE,WAAWL;YAAW,MAAMK;;AAIrF"}
@@ -0,0 +1,3 @@
1
+ export declare const ExperimentsManagerPresenterFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ presenter: import("./index.js").IExperimentsManagerPresenter;
3
+ }, []>;