@mattermost/playwright-lib 10.6.0-0

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 (203) hide show
  1. package/README.md +214 -0
  2. package/dist/asset/mattermost-icon_128x128.png +0 -0
  3. package/dist/browser_context.d.ts +17 -0
  4. package/dist/browser_context.js +71 -0
  5. package/dist/browser_context.js.map +1 -0
  6. package/dist/constant.d.ts +3 -0
  7. package/dist/constant.js +8 -0
  8. package/dist/constant.js.map +1 -0
  9. package/dist/file.d.ts +42 -0
  10. package/dist/file.js +74 -0
  11. package/dist/file.js.map +1 -0
  12. package/dist/flag.d.ts +7 -0
  13. package/dist/flag.js +76 -0
  14. package/dist/flag.js.map +1 -0
  15. package/dist/global_setup.d.ts +3 -0
  16. package/dist/global_setup.js +173 -0
  17. package/dist/global_setup.js.map +1 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.js +47 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/mock_browser_api.d.ts +31 -0
  22. package/dist/mock_browser_api.js +71 -0
  23. package/dist/mock_browser_api.js.map +1 -0
  24. package/dist/server/channel.d.ts +12 -0
  25. package/dist/server/channel.js +25 -0
  26. package/dist/server/channel.js.map +1 -0
  27. package/dist/server/client.d.ts +16 -0
  28. package/dist/server/client.js +39 -0
  29. package/dist/server/client.js.map +1 -0
  30. package/dist/server/default_config.d.ts +2 -0
  31. package/dist/server/default_config.js +755 -0
  32. package/dist/server/default_config.js.map +1 -0
  33. package/dist/server/index.d.ts +7 -0
  34. package/dist/server/init.d.ts +23 -0
  35. package/dist/server/init.js +73 -0
  36. package/dist/server/init.js.map +1 -0
  37. package/dist/server/post.d.ts +2 -0
  38. package/dist/server/post.js +31 -0
  39. package/dist/server/post.js.map +1 -0
  40. package/dist/server/team.d.ts +2 -0
  41. package/dist/server/team.js +18 -0
  42. package/dist/server/team.js.map +1 -0
  43. package/dist/server/user.d.ts +3 -0
  44. package/dist/server/user.js +33 -0
  45. package/dist/server/user.js.map +1 -0
  46. package/dist/test_action.d.ts +4 -0
  47. package/dist/test_action.js +24 -0
  48. package/dist/test_action.js.map +1 -0
  49. package/dist/test_config.d.ts +20 -0
  50. package/dist/test_config.js +82 -0
  51. package/dist/test_config.js.map +1 -0
  52. package/dist/test_fixture.d.ts +72 -0
  53. package/dist/test_fixture.js +172 -0
  54. package/dist/test_fixture.js.map +1 -0
  55. package/dist/types.d.ts +91 -0
  56. package/dist/ui/components/channels/app_bar.d.ts +7 -0
  57. package/dist/ui/components/channels/app_bar.js +20 -0
  58. package/dist/ui/components/channels/app_bar.js.map +1 -0
  59. package/dist/ui/components/channels/center_view.d.ts +52 -0
  60. package/dist/ui/components/channels/center_view.js +124 -0
  61. package/dist/ui/components/channels/center_view.js.map +1 -0
  62. package/dist/ui/components/channels/delete_post_confirmation_dialog.d.ts +11 -0
  63. package/dist/ui/components/channels/delete_post_confirmation_dialog.js +35 -0
  64. package/dist/ui/components/channels/delete_post_confirmation_dialog.js.map +1 -0
  65. package/dist/ui/components/channels/delete_post_modal.d.ts +8 -0
  66. package/dist/ui/components/channels/delete_post_modal.js +26 -0
  67. package/dist/ui/components/channels/delete_post_modal.js.map +1 -0
  68. package/dist/ui/components/channels/emoji_gif_picker.d.ts +16 -0
  69. package/dist/ui/components/channels/emoji_gif_picker.js +50 -0
  70. package/dist/ui/components/channels/emoji_gif_picker.js.map +1 -0
  71. package/dist/ui/components/channels/find_channels_modal.d.ts +8 -0
  72. package/dist/ui/components/channels/find_channels_modal.js +22 -0
  73. package/dist/ui/components/channels/find_channels_modal.js.map +1 -0
  74. package/dist/ui/components/channels/generic_confirm_modal.d.ts +16 -0
  75. package/dist/ui/components/channels/generic_confirm_modal.js +40 -0
  76. package/dist/ui/components/channels/generic_confirm_modal.js.map +1 -0
  77. package/dist/ui/components/channels/header.d.ts +6 -0
  78. package/dist/ui/components/channels/header.js +18 -0
  79. package/dist/ui/components/channels/header.js.map +1 -0
  80. package/dist/ui/components/channels/message_priority.d.ts +18 -0
  81. package/dist/ui/components/channels/message_priority.js +66 -0
  82. package/dist/ui/components/channels/message_priority.js.map +1 -0
  83. package/dist/ui/components/channels/post.d.ts +29 -0
  84. package/dist/ui/components/channels/post.js +63 -0
  85. package/dist/ui/components/channels/post.js.map +1 -0
  86. package/dist/ui/components/channels/post_create.d.ts +41 -0
  87. package/dist/ui/components/channels/post_create.js +118 -0
  88. package/dist/ui/components/channels/post_create.js.map +1 -0
  89. package/dist/ui/components/channels/post_dot_menu.d.ts +20 -0
  90. package/dist/ui/components/channels/post_dot_menu.js +47 -0
  91. package/dist/ui/components/channels/post_dot_menu.js.map +1 -0
  92. package/dist/ui/components/channels/post_edit.d.ts +21 -0
  93. package/dist/ui/components/channels/post_edit.js +76 -0
  94. package/dist/ui/components/channels/post_edit.js.map +1 -0
  95. package/dist/ui/components/channels/post_menu.d.ts +26 -0
  96. package/dist/ui/components/channels/post_menu.js +54 -0
  97. package/dist/ui/components/channels/post_menu.js.map +1 -0
  98. package/dist/ui/components/channels/post_reminder_menu.d.ts +11 -0
  99. package/dist/ui/components/channels/post_reminder_menu.js +29 -0
  100. package/dist/ui/components/channels/post_reminder_menu.js.map +1 -0
  101. package/dist/ui/components/channels/restore_post_confirmation_dialog.d.ts +10 -0
  102. package/dist/ui/components/channels/restore_post_confirmation_dialog.js +30 -0
  103. package/dist/ui/components/channels/restore_post_confirmation_dialog.js.map +1 -0
  104. package/dist/ui/components/channels/scheduled_draft_menu.d.ts +8 -0
  105. package/dist/ui/components/channels/scheduled_draft_menu.js +23 -0
  106. package/dist/ui/components/channels/scheduled_draft_menu.js.map +1 -0
  107. package/dist/ui/components/channels/scheduled_draft_modal.d.ts +20 -0
  108. package/dist/ui/components/channels/scheduled_draft_modal.js +84 -0
  109. package/dist/ui/components/channels/scheduled_draft_modal.js.map +1 -0
  110. package/dist/ui/components/channels/search_popover.d.ts +15 -0
  111. package/dist/ui/components/channels/search_popover.js +43 -0
  112. package/dist/ui/components/channels/search_popover.js.map +1 -0
  113. package/dist/ui/components/channels/settings/notification_settings.d.ts +13 -0
  114. package/dist/ui/components/channels/settings/notification_settings.js +41 -0
  115. package/dist/ui/components/channels/settings/notification_settings.js.map +1 -0
  116. package/dist/ui/components/channels/settings/settings_modal.d.ts +11 -0
  117. package/dist/ui/components/channels/settings/settings_modal.js +32 -0
  118. package/dist/ui/components/channels/settings/settings_modal.js.map +1 -0
  119. package/dist/ui/components/channels/sidebar_left.d.ts +24 -0
  120. package/dist/ui/components/channels/sidebar_left.js +54 -0
  121. package/dist/ui/components/channels/sidebar_left.js.map +1 -0
  122. package/dist/ui/components/channels/sidebar_right.d.ts +38 -0
  123. package/dist/ui/components/channels/sidebar_right.js +87 -0
  124. package/dist/ui/components/channels/sidebar_right.js.map +1 -0
  125. package/dist/ui/components/channels/thread_footer.d.ts +11 -0
  126. package/dist/ui/components/channels/thread_footer.js +27 -0
  127. package/dist/ui/components/channels/thread_footer.js.map +1 -0
  128. package/dist/ui/components/channels/user_profile_popover.d.ts +7 -0
  129. package/dist/ui/components/channels/user_profile_popover.js +21 -0
  130. package/dist/ui/components/channels/user_profile_popover.js.map +1 -0
  131. package/dist/ui/components/footer.d.ts +11 -0
  132. package/dist/ui/components/footer.js +28 -0
  133. package/dist/ui/components/footer.js.map +1 -0
  134. package/dist/ui/components/global_header.d.ts +15 -0
  135. package/dist/ui/components/global_header.js +46 -0
  136. package/dist/ui/components/global_header.js.map +1 -0
  137. package/dist/ui/components/index.d.ts +73 -0
  138. package/dist/ui/components/index.js +77 -0
  139. package/dist/ui/components/index.js.map +1 -0
  140. package/dist/ui/components/main_header.d.ts +8 -0
  141. package/dist/ui/components/main_header.js +22 -0
  142. package/dist/ui/components/main_header.js.map +1 -0
  143. package/dist/ui/components/system_console/navbar.d.ts +6 -0
  144. package/dist/ui/components/system_console/navbar.js +18 -0
  145. package/dist/ui/components/system_console/navbar.js.map +1 -0
  146. package/dist/ui/components/system_console/sections/system_users/column_toggle_menu.d.ts +22 -0
  147. package/dist/ui/components/system_console/sections/system_users/column_toggle_menu.js +47 -0
  148. package/dist/ui/components/system_console/sections/system_users/column_toggle_menu.js.map +1 -0
  149. package/dist/ui/components/system_console/sections/system_users/feature_discovery.d.ts +10 -0
  150. package/dist/ui/components/system_console/sections/system_users/feature_discovery.js +24 -0
  151. package/dist/ui/components/system_console/sections/system_users/feature_discovery.js.map +1 -0
  152. package/dist/ui/components/system_console/sections/system_users/filter_menu.d.ts +21 -0
  153. package/dist/ui/components/system_console/sections/system_users/filter_menu.js +42 -0
  154. package/dist/ui/components/system_console/sections/system_users/filter_menu.js.map +1 -0
  155. package/dist/ui/components/system_console/sections/system_users/filter_popover.d.ts +30 -0
  156. package/dist/ui/components/system_console/sections/system_users/filter_popover.js +61 -0
  157. package/dist/ui/components/system_console/sections/system_users/filter_popover.js.map +1 -0
  158. package/dist/ui/components/system_console/sections/system_users/mobile_security.d.ts +23 -0
  159. package/dist/ui/components/system_console/sections/system_users/mobile_security.js +56 -0
  160. package/dist/ui/components/system_console/sections/system_users/mobile_security.js.map +1 -0
  161. package/dist/ui/components/system_console/sections/system_users/system_users.d.ts +58 -0
  162. package/dist/ui/components/system_console/sections/system_users/system_users.js +114 -0
  163. package/dist/ui/components/system_console/sections/system_users/system_users.js.map +1 -0
  164. package/dist/ui/components/system_console/sidebar.d.ts +17 -0
  165. package/dist/ui/components/system_console/sidebar.js +37 -0
  166. package/dist/ui/components/system_console/sidebar.js.map +1 -0
  167. package/dist/ui/pages/channels.d.ts +31 -0
  168. package/dist/ui/pages/channels.js +79 -0
  169. package/dist/ui/pages/channels.js.map +1 -0
  170. package/dist/ui/pages/drafts.d.ts +30 -0
  171. package/dist/ui/pages/drafts.js +114 -0
  172. package/dist/ui/pages/drafts.js.map +1 -0
  173. package/dist/ui/pages/index.d.ts +19 -0
  174. package/dist/ui/pages/index.js +34 -0
  175. package/dist/ui/pages/index.js.map +1 -0
  176. package/dist/ui/pages/landing_login.d.ts +11 -0
  177. package/dist/ui/pages/landing_login.js +36 -0
  178. package/dist/ui/pages/landing_login.js.map +1 -0
  179. package/dist/ui/pages/login.d.ts +25 -0
  180. package/dist/ui/pages/login.js +62 -0
  181. package/dist/ui/pages/login.js.map +1 -0
  182. package/dist/ui/pages/reset_password.d.ts +15 -0
  183. package/dist/ui/pages/reset_password.js +44 -0
  184. package/dist/ui/pages/reset_password.js.map +1 -0
  185. package/dist/ui/pages/scheduled_draft.d.ts +38 -0
  186. package/dist/ui/pages/scheduled_draft.js +144 -0
  187. package/dist/ui/pages/scheduled_draft.js.map +1 -0
  188. package/dist/ui/pages/signup.d.ts +31 -0
  189. package/dist/ui/pages/signup.js +78 -0
  190. package/dist/ui/pages/signup.js.map +1 -0
  191. package/dist/ui/pages/system_console.d.ts +26 -0
  192. package/dist/ui/pages/system_console.js +64 -0
  193. package/dist/ui/pages/system_console.js.map +1 -0
  194. package/dist/util.d.ts +29 -0
  195. package/dist/util.js +51 -0
  196. package/dist/util.js.map +1 -0
  197. package/dist/visual/index.d.ts +3 -0
  198. package/dist/visual/index.js +37 -0
  199. package/dist/visual/index.js.map +1 -0
  200. package/dist/visual/percy.d.ts +2 -0
  201. package/dist/visual/percy.js +23 -0
  202. package/dist/visual/percy.js.map +1 -0
  203. package/package.json +68 -0
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+ var notification_settings = require('./notification_settings.js');
5
+
6
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
7
+ // See LICENSE.txt for license information.
8
+ class SettingsModal {
9
+ container;
10
+ notificationsSettingsTab;
11
+ notificationsSettings;
12
+ constructor(container) {
13
+ this.container = container;
14
+ this.notificationsSettingsTab = container.locator('#notificationsButton');
15
+ this.notificationsSettings = new notification_settings(container.locator('#notificationsSettings'));
16
+ }
17
+ async toBeVisible() {
18
+ await test.expect(this.container).toBeVisible();
19
+ }
20
+ async openNotificationsTab() {
21
+ await test.expect(this.notificationsSettingsTab).toBeVisible();
22
+ await this.notificationsSettingsTab.click();
23
+ await this.notificationsSettings.toBeVisible();
24
+ }
25
+ async closeModal() {
26
+ await this.container.getByLabel('Close').click();
27
+ await test.expect(this.container).not.toBeVisible();
28
+ }
29
+ }
30
+
31
+ module.exports = SettingsModal;
32
+ //# sourceMappingURL=settings_modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings_modal.js","sources":["../../../../../src/ui/components/channels/settings/settings_modal.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nimport NotificationsSettings from './notification_settings';\n\nexport default class SettingsModal {\n readonly container: Locator;\n\n readonly notificationsSettingsTab;\n readonly notificationsSettings;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.notificationsSettingsTab = container.locator('#notificationsButton');\n this.notificationsSettings = new NotificationsSettings(container.locator('#notificationsSettings'));\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n async openNotificationsTab() {\n await expect(this.notificationsSettingsTab).toBeVisible();\n await this.notificationsSettingsTab.click();\n\n await this.notificationsSettings.toBeVisible();\n }\n\n async closeModal() {\n await this.container.getByLabel('Close').click();\n\n await expect(this.container).not.toBeVisible();\n }\n}\n"],"names":["NotificationsSettings","expect"],"mappings":";;;;;AAAA;AACA;AAMc,MAAO,aAAa,CAAA;AACrB,IAAA,SAAS;AAET,IAAA,wBAAwB;AACxB,IAAA,qBAAqB;AAE9B,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAE1B,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC;AACzE,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAIA,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;;AAGvG,IAAA,MAAM,WAAW,GAAA;QACb,MAAMC,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAG9C,IAAA,MAAM,oBAAoB,GAAA;QACtB,MAAMA,WAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE;AACzD,QAAA,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;AAE3C,QAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;;AAGlD,IAAA,MAAM,UAAU,GAAA;QACZ,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE;QAEhD,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;;AAErD;;;;"}
@@ -0,0 +1,24 @@
1
+ import { Locator } from '@playwright/test';
2
+ export default class ChannelsSidebarLeft {
3
+ readonly container: Locator;
4
+ readonly findChannelButton: Locator;
5
+ readonly scheduledDraftCountonLHS: Locator;
6
+ constructor(container: Locator);
7
+ toBeVisible(): Promise<void>;
8
+ assertNoPendingScheduledDraft(): Promise<void>;
9
+ assertscheduledDraftCountLHS(count: string): Promise<void>;
10
+ /**
11
+ * Clicks on the sidebar channel link with the given name.
12
+ * It can be any sidebar item name including channels, direct messages, or group messages, threads, etc.
13
+ * @param channelName
14
+ */
15
+ goToItem(channelName: string): Promise<void>;
16
+ /**
17
+ * Verifies 'Drafts' as a sidebar link exists in LHS.
18
+ */
19
+ draftsVisible(): Promise<void>;
20
+ /**
21
+ * Verifies 'Drafts' as a sidebar link does not exist in LHS.
22
+ */
23
+ draftsNotVisible(): Promise<void>;
24
+ }
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+
5
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
6
+ // See LICENSE.txt for license information.
7
+ class ChannelsSidebarLeft {
8
+ container;
9
+ findChannelButton;
10
+ scheduledDraftCountonLHS;
11
+ constructor(container) {
12
+ this.container = container;
13
+ this.findChannelButton = container.getByRole('button', { name: 'Find Channels' });
14
+ this.scheduledDraftCountonLHS = container.locator('span.scheduledPostBadge');
15
+ }
16
+ async toBeVisible() {
17
+ await test.expect(this.container).toBeVisible();
18
+ }
19
+ async assertNoPendingScheduledDraft() {
20
+ await test.expect(this.scheduledDraftCountonLHS).not.toBeVisible();
21
+ }
22
+ async assertscheduledDraftCountLHS(count) {
23
+ await test.expect(this.scheduledDraftCountonLHS).toBeVisible();
24
+ await test.expect(this.scheduledDraftCountonLHS).toHaveText(count);
25
+ }
26
+ /**
27
+ * Clicks on the sidebar channel link with the given name.
28
+ * It can be any sidebar item name including channels, direct messages, or group messages, threads, etc.
29
+ * @param channelName
30
+ */
31
+ async goToItem(channelName) {
32
+ const channel = this.container.locator(`#sidebarItem_${channelName}`);
33
+ await channel.waitFor();
34
+ await channel.click();
35
+ }
36
+ /**
37
+ * Verifies 'Drafts' as a sidebar link exists in LHS.
38
+ */
39
+ async draftsVisible() {
40
+ const draftSidebarLink = this.container.getByText('Drafts', { exact: true });
41
+ await draftSidebarLink.waitFor();
42
+ await test.expect(draftSidebarLink).toBeVisible();
43
+ }
44
+ /**
45
+ * Verifies 'Drafts' as a sidebar link does not exist in LHS.
46
+ */
47
+ async draftsNotVisible() {
48
+ const channel = this.container.getByText('Drafts', { exact: true });
49
+ await test.expect(channel).not.toBeVisible();
50
+ }
51
+ }
52
+
53
+ module.exports = ChannelsSidebarLeft;
54
+ //# sourceMappingURL=sidebar_left.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar_left.js","sources":["../../../../src/ui/components/channels/sidebar_left.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class ChannelsSidebarLeft {\n readonly container: Locator;\n readonly findChannelButton;\n readonly scheduledDraftCountonLHS;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.findChannelButton = container.getByRole('button', {name: 'Find Channels'});\n this.scheduledDraftCountonLHS = container.locator('span.scheduledPostBadge');\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n async assertNoPendingScheduledDraft() {\n await expect(this.scheduledDraftCountonLHS).not.toBeVisible();\n }\n\n async assertscheduledDraftCountLHS(count: string) {\n await expect(this.scheduledDraftCountonLHS).toBeVisible();\n await expect(this.scheduledDraftCountonLHS).toHaveText(count);\n }\n\n /**\n * Clicks on the sidebar channel link with the given name.\n * It can be any sidebar item name including channels, direct messages, or group messages, threads, etc.\n * @param channelName\n */\n async goToItem(channelName: string) {\n const channel = this.container.locator(`#sidebarItem_${channelName}`);\n await channel.waitFor();\n await channel.click();\n }\n\n /**\n * Verifies 'Drafts' as a sidebar link exists in LHS.\n */\n async draftsVisible() {\n const draftSidebarLink = this.container.getByText('Drafts', {exact: true});\n await draftSidebarLink.waitFor();\n await expect(draftSidebarLink).toBeVisible();\n }\n\n /**\n * Verifies 'Drafts' as a sidebar link does not exist in LHS.\n */\n async draftsNotVisible() {\n const channel = this.container.getByText('Drafts', {exact: true});\n await expect(channel).not.toBeVisible();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,mBAAmB,CAAA;AAC3B,IAAA,SAAS;AACT,IAAA,iBAAiB;AACjB,IAAA,wBAAwB;AAEjC,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,eAAe,EAAC,CAAC;QAC/E,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC;;AAGhF,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAG9C,IAAA,MAAM,6BAA6B,GAAA;QAC/B,MAAMA,WAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;;IAGjE,MAAM,4BAA4B,CAAC,KAAa,EAAA;QAC5C,MAAMA,WAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE;QACzD,MAAMA,WAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;;AAGjE;;;;AAIG;IACH,MAAM,QAAQ,CAAC,WAAmB,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAgB,aAAA,EAAA,WAAW,CAAE,CAAA,CAAC;AACrE,QAAA,MAAM,OAAO,CAAC,OAAO,EAAE;AACvB,QAAA,MAAM,OAAO,CAAC,KAAK,EAAE;;AAGzB;;AAEG;AACH,IAAA,MAAM,aAAa,GAAA;AACf,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;AAC1E,QAAA,MAAM,gBAAgB,CAAC,OAAO,EAAE;AAChC,QAAA,MAAMA,WAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE;;AAGhD;;AAEG;AACH,IAAA,MAAM,gBAAgB,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;QACjE,MAAMA,WAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;;AAE9C;;;;"}
@@ -0,0 +1,38 @@
1
+ import { Locator } from '@playwright/test';
2
+ import ChannelsPostCreate from './post_create';
3
+ import ChannelsPostEdit from './post_edit';
4
+ import ChannelsPost from './post';
5
+ export default class ChannelsSidebarRight {
6
+ readonly container: Locator;
7
+ readonly closeButton: Locator;
8
+ readonly postCreate: ChannelsPostCreate;
9
+ readonly rhsPostBody: Locator;
10
+ readonly postBoxIndicator: Locator;
11
+ readonly scheduledDraftChannelInfoMessage: Locator;
12
+ readonly scheduledDraftSeeAllLink: Locator;
13
+ readonly scheduledDraftChannelInfoMessageText: Locator;
14
+ readonly editTextbox: Locator;
15
+ readonly postEdit: ChannelsPostEdit;
16
+ readonly currentVersionEditedPosttext: (postID: any) => Locator;
17
+ readonly restorePreviousPostVersionIcon: Locator;
18
+ constructor(container: Locator);
19
+ toBeVisible(): Promise<void>;
20
+ /**
21
+ * Returns the RHS post by post id
22
+ * @param postId Just the ID without the prefix
23
+ */
24
+ getPostById(postId: string): Promise<ChannelsPost>;
25
+ /**
26
+ * Return the last post in the RHS
27
+ */
28
+ getLastPost(): Promise<ChannelsPost>;
29
+ getFirstPost(): Promise<ChannelsPost>;
30
+ /**
31
+ * Closes the RHS
32
+ */
33
+ close(): Promise<void>;
34
+ clickOnSeeAllscheduledDrafts(): Promise<void>;
35
+ toContainText(text: string): Promise<void>;
36
+ verifyCurrentVersionPostMessage(postID: string | null, postMessageContent: string): Promise<void>;
37
+ restorePreviousPostVersion(): Promise<void>;
38
+ }
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+ var post_create = require('./post_create.js');
5
+ var post_edit = require('./post_edit.js');
6
+ var post = require('./post.js');
7
+
8
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
9
+ // See LICENSE.txt for license information.
10
+ class ChannelsSidebarRight {
11
+ container;
12
+ closeButton;
13
+ postCreate;
14
+ rhsPostBody;
15
+ postBoxIndicator;
16
+ scheduledDraftChannelInfoMessage;
17
+ scheduledDraftSeeAllLink;
18
+ scheduledDraftChannelInfoMessageText;
19
+ editTextbox;
20
+ postEdit;
21
+ currentVersionEditedPosttext;
22
+ restorePreviousPostVersionIcon;
23
+ constructor(container) {
24
+ this.container = container;
25
+ this.postBoxIndicator = container.locator('div.postBoxIndicator');
26
+ this.scheduledDraftChannelInfoMessage = container.locator('div.ScheduledPostIndicator span');
27
+ this.scheduledDraftSeeAllLink = container.locator('a:has-text("See all")');
28
+ this.scheduledDraftChannelInfoMessageText = container.locator('span:has-text("Message scheduled for")');
29
+ this.rhsPostBody = container.locator('.post-message__text');
30
+ this.postCreate = new post_create(container.getByTestId('comment-create'), true);
31
+ this.closeButton = container.locator('.sidebar--right__close');
32
+ this.editTextbox = container.locator('#edit_textbox');
33
+ this.postEdit = new post_edit(container.locator('.post-edit__container'));
34
+ this.currentVersionEditedPosttext = (postID) => container.locator(`#rhsPostMessageText_${postID} p`);
35
+ this.restorePreviousPostVersionIcon = container.locator('button[aria-label="Select to restore an old message."]');
36
+ }
37
+ async toBeVisible() {
38
+ await test.expect(this.container).toBeVisible();
39
+ }
40
+ /**
41
+ * Returns the RHS post by post id
42
+ * @param postId Just the ID without the prefix
43
+ */
44
+ async getPostById(postId) {
45
+ const post$1 = this.container.locator(`[id="rhsPost_${postId}"]`);
46
+ await post$1.waitFor();
47
+ return new post(post$1);
48
+ }
49
+ /**
50
+ * Return the last post in the RHS
51
+ */
52
+ async getLastPost() {
53
+ const post$1 = this.container.getByTestId('rhsPostView').last();
54
+ await post$1.waitFor();
55
+ return new post(post$1);
56
+ }
57
+ async getFirstPost() {
58
+ const post$1 = this.container.getByTestId('rhsPostView').first();
59
+ await post$1.waitFor();
60
+ return new post(post$1);
61
+ }
62
+ /**
63
+ * Closes the RHS
64
+ */
65
+ async close() {
66
+ await this.closeButton.waitFor();
67
+ await this.closeButton.click();
68
+ await test.expect(this.container).not.toBeVisible();
69
+ }
70
+ async clickOnSeeAllscheduledDrafts() {
71
+ await this.scheduledDraftSeeAllLink.isVisible();
72
+ await this.scheduledDraftSeeAllLink.click();
73
+ }
74
+ async toContainText(text) {
75
+ await test.expect(this.container).toContainText(text);
76
+ }
77
+ async verifyCurrentVersionPostMessage(postID, postMessageContent) {
78
+ test.expect(await this.currentVersionEditedPosttext(postID).textContent()).toBe(postMessageContent);
79
+ }
80
+ async restorePreviousPostVersion() {
81
+ await this.restorePreviousPostVersionIcon.isVisible();
82
+ await this.restorePreviousPostVersionIcon.click();
83
+ }
84
+ }
85
+
86
+ module.exports = ChannelsSidebarRight;
87
+ //# sourceMappingURL=sidebar_right.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar_right.js","sources":["../../../../src/ui/components/channels/sidebar_right.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nimport ChannelsPostCreate from './post_create';\nimport ChannelsPostEdit from './post_edit';\nimport ChannelsPost from './post';\n\nexport default class ChannelsSidebarRight {\n readonly container: Locator;\n\n readonly closeButton;\n readonly postCreate;\n readonly rhsPostBody;\n readonly postBoxIndicator;\n readonly scheduledDraftChannelInfoMessage;\n readonly scheduledDraftSeeAllLink;\n readonly scheduledDraftChannelInfoMessageText;\n readonly editTextbox;\n readonly postEdit;\n readonly currentVersionEditedPosttext;\n readonly restorePreviousPostVersionIcon;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.postBoxIndicator = container.locator('div.postBoxIndicator');\n this.scheduledDraftChannelInfoMessage = container.locator('div.ScheduledPostIndicator span');\n this.scheduledDraftSeeAllLink = container.locator('a:has-text(\"See all\")');\n this.scheduledDraftChannelInfoMessageText = container.locator('span:has-text(\"Message scheduled for\")');\n this.rhsPostBody = container.locator('.post-message__text');\n this.postCreate = new ChannelsPostCreate(container.getByTestId('comment-create'), true);\n this.closeButton = container.locator('.sidebar--right__close');\n\n this.editTextbox = container.locator('#edit_textbox');\n this.postEdit = new ChannelsPostEdit(container.locator('.post-edit__container'));\n this.currentVersionEditedPosttext = (postID: any) => container.locator(`#rhsPostMessageText_${postID} p`);\n this.restorePreviousPostVersionIcon = container.locator(\n 'button[aria-label=\"Select to restore an old message.\"]',\n );\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n /**\n * Returns the RHS post by post id\n * @param postId Just the ID without the prefix\n */\n async getPostById(postId: string) {\n const post = this.container.locator(`[id=\"rhsPost_${postId}\"]`);\n await post.waitFor();\n return new ChannelsPost(post);\n }\n\n /**\n * Return the last post in the RHS\n */\n async getLastPost() {\n const post = this.container.getByTestId('rhsPostView').last();\n await post.waitFor();\n return new ChannelsPost(post);\n }\n\n async getFirstPost() {\n const post = this.container.getByTestId('rhsPostView').first();\n await post.waitFor();\n return new ChannelsPost(post);\n }\n\n /**\n * Closes the RHS\n */\n async close() {\n await this.closeButton.waitFor();\n await this.closeButton.click();\n\n await expect(this.container).not.toBeVisible();\n }\n\n async clickOnSeeAllscheduledDrafts() {\n await this.scheduledDraftSeeAllLink.isVisible();\n await this.scheduledDraftSeeAllLink.click();\n }\n\n async toContainText(text: string) {\n await expect(this.container).toContainText(text);\n }\n\n async verifyCurrentVersionPostMessage(postID: string | null, postMessageContent: string) {\n expect(await this.currentVersionEditedPosttext(postID).textContent()).toBe(postMessageContent);\n }\n\n async restorePreviousPostVersion() {\n await this.restorePreviousPostVersionIcon.isVisible();\n await this.restorePreviousPostVersionIcon.click();\n }\n}\n"],"names":["ChannelsPostCreate","ChannelsPostEdit","expect","post","ChannelsPost"],"mappings":";;;;;;;AAAA;AACA;AAQc,MAAO,oBAAoB,CAAA;AAC5B,IAAA,SAAS;AAET,IAAA,WAAW;AACX,IAAA,UAAU;AACV,IAAA,WAAW;AACX,IAAA,gBAAgB;AAChB,IAAA,gCAAgC;AAChC,IAAA,wBAAwB;AACxB,IAAA,oCAAoC;AACpC,IAAA,WAAW;AACX,IAAA,QAAQ;AACR,IAAA,4BAA4B;AAC5B,IAAA,8BAA8B;AAEvC,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAE1B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC;QACjE,IAAI,CAAC,gCAAgC,GAAG,SAAS,CAAC,OAAO,CAAC,iCAAiC,CAAC;QAC5F,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC;QAC1E,IAAI,CAAC,oCAAoC,GAAG,SAAS,CAAC,OAAO,CAAC,wCAAwC,CAAC;QACvG,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC3D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAIA,WAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC;QACvF,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,wBAAwB,CAAC;QAE9D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAIC,SAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,4BAA4B,GAAG,CAAC,MAAW,KAAK,SAAS,CAAC,OAAO,CAAC,CAAA,oBAAA,EAAuB,MAAM,CAAA,EAAA,CAAI,CAAC;QACzG,IAAI,CAAC,8BAA8B,GAAG,SAAS,CAAC,OAAO,CACnD,wDAAwD,CAC3D;;AAGL,IAAA,MAAM,WAAW,GAAA;QACb,MAAMC,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAG9C;;;AAGG;IACH,MAAM,WAAW,CAAC,MAAc,EAAA;AAC5B,QAAA,MAAMC,MAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAgB,aAAA,EAAA,MAAM,CAAI,EAAA,CAAA,CAAC;AAC/D,QAAA,MAAMA,MAAI,CAAC,OAAO,EAAE;AACpB,QAAA,OAAO,IAAIC,IAAY,CAACD,MAAI,CAAC;;AAGjC;;AAEG;AACH,IAAA,MAAM,WAAW,GAAA;AACb,QAAA,MAAMA,MAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;AAC7D,QAAA,MAAMA,MAAI,CAAC,OAAO,EAAE;AACpB,QAAA,OAAO,IAAIC,IAAY,CAACD,MAAI,CAAC;;AAGjC,IAAA,MAAM,YAAY,GAAA;AACd,QAAA,MAAMA,MAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE;AAC9D,QAAA,MAAMA,MAAI,CAAC,OAAO,EAAE;AACpB,QAAA,OAAO,IAAIC,IAAY,CAACD,MAAI,CAAC;;AAGjC;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;AACP,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;QAE9B,MAAMD,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;;AAGlD,IAAA,MAAM,4BAA4B,GAAA;AAC9B,QAAA,MAAM,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE;AAC/C,QAAA,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;;IAG/C,MAAM,aAAa,CAAC,IAAY,EAAA;QAC5B,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;;AAGpD,IAAA,MAAM,+BAA+B,CAAC,MAAqB,EAAE,kBAA0B,EAAA;AACnF,QAAAA,WAAM,CAAC,MAAM,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAGlG,IAAA,MAAM,0BAA0B,GAAA;AAC5B,QAAA,MAAM,IAAI,CAAC,8BAA8B,CAAC,SAAS,EAAE;AACrD,QAAA,MAAM,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE;;AAExD;;;;"}
@@ -0,0 +1,11 @@
1
+ import { Locator } from '@playwright/test';
2
+ export default class ThreadFooter {
3
+ readonly container: Locator;
4
+ readonly replyButton: Locator;
5
+ constructor(container: Locator);
6
+ toBeVisible(): Promise<void>;
7
+ /**
8
+ * Clicks on the reply button in the thread footer to open the thread in RHS.
9
+ */
10
+ reply(): Promise<void>;
11
+ }
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+
5
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
6
+ // See LICENSE.txt for license information.
7
+ class ThreadFooter {
8
+ container;
9
+ replyButton;
10
+ constructor(container) {
11
+ this.container = container;
12
+ this.replyButton = container.locator('.ReplyButton');
13
+ }
14
+ async toBeVisible() {
15
+ await test.expect(this.container).toBeVisible();
16
+ }
17
+ /**
18
+ * Clicks on the reply button in the thread footer to open the thread in RHS.
19
+ */
20
+ async reply() {
21
+ await this.replyButton.waitFor();
22
+ await this.replyButton.click();
23
+ }
24
+ }
25
+
26
+ module.exports = ThreadFooter;
27
+ //# sourceMappingURL=thread_footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread_footer.js","sources":["../../../../src/ui/components/channels/thread_footer.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class ThreadFooter {\n readonly container: Locator;\n\n readonly replyButton: Locator;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.replyButton = container.locator('.ReplyButton');\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n /**\n * Clicks on the reply button in the thread footer to open the thread in RHS.\n */\n async reply() {\n await this.replyButton.waitFor();\n await this.replyButton.click();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,YAAY,CAAA;AACpB,IAAA,SAAS;AAET,IAAA,WAAW;AAEpB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAE1B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;;AAGxD,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAG9C;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;AACP,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;;AAErC;;;;"}
@@ -0,0 +1,7 @@
1
+ import { Locator } from '@playwright/test';
2
+ export default class UserProfilePopover {
3
+ readonly container: Locator;
4
+ constructor(container: Locator);
5
+ toBeVisible(): Promise<void>;
6
+ close(): Promise<void>;
7
+ }
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+
5
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
6
+ // See LICENSE.txt for license information.
7
+ class UserProfilePopover {
8
+ container;
9
+ constructor(container) {
10
+ this.container = container;
11
+ }
12
+ async toBeVisible() {
13
+ await test.expect(this.container).toBeVisible();
14
+ }
15
+ async close() {
16
+ await this.container.getByLabel('Close user profile popover').click();
17
+ }
18
+ }
19
+
20
+ module.exports = UserProfilePopover;
21
+ //# sourceMappingURL=user_profile_popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_profile_popover.js","sources":["../../../../src/ui/components/channels/user_profile_popover.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class UserProfilePopover {\n readonly container: Locator;\n\n constructor(container: Locator) {\n this.container = container;\n }\n\n async toBeVisible() {\n await expect(this.container).toBeVisible();\n }\n\n async close() {\n await this.container.getByLabel('Close user profile popover').click();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,kBAAkB,CAAA;AAC1B,IAAA,SAAS;AAElB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAG9B,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAG9C,IAAA,MAAM,KAAK,GAAA;QACP,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE;;AAE5E;;;;"}
@@ -0,0 +1,11 @@
1
+ import { Locator } from '@playwright/test';
2
+ export default class Footer {
3
+ readonly container: Locator;
4
+ readonly copyright: Locator;
5
+ readonly aboutLink: Locator;
6
+ readonly privacyPolicyLink: Locator;
7
+ readonly termsLink: Locator;
8
+ readonly helpLink: Locator;
9
+ constructor(container: Locator);
10
+ toBeVisible(): Promise<void>;
11
+ }
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+
5
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
6
+ // See LICENSE.txt for license information.
7
+ class Footer {
8
+ container;
9
+ copyright;
10
+ aboutLink;
11
+ privacyPolicyLink;
12
+ termsLink;
13
+ helpLink;
14
+ constructor(container) {
15
+ this.container = container;
16
+ this.copyright = container.locator('.footer-copyright');
17
+ this.aboutLink = container.locator('text=About');
18
+ this.privacyPolicyLink = container.locator('text=Privacy Policy');
19
+ this.termsLink = container.locator('text=Terms');
20
+ this.helpLink = container.locator('text=Help');
21
+ }
22
+ async toBeVisible() {
23
+ await test.expect(this.copyright).toBeVisible();
24
+ }
25
+ }
26
+
27
+ module.exports = Footer;
28
+ //# sourceMappingURL=footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.js","sources":["../../../src/ui/components/footer.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class Footer {\n readonly container: Locator;\n\n readonly copyright;\n readonly aboutLink;\n readonly privacyPolicyLink;\n readonly termsLink;\n readonly helpLink;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.copyright = container.locator('.footer-copyright');\n this.aboutLink = container.locator('text=About');\n this.privacyPolicyLink = container.locator('text=Privacy Policy');\n this.termsLink = container.locator('text=Terms');\n this.helpLink = container.locator('text=Help');\n }\n\n async toBeVisible() {\n await expect(this.copyright).toBeVisible();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,MAAM,CAAA;AACd,IAAA,SAAS;AAET,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,iBAAiB;AACjB,IAAA,SAAS;AACT,IAAA,QAAQ;AAEjB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAE1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC;;AAGlD,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;;AAEjD;;;;"}
@@ -0,0 +1,15 @@
1
+ import { Locator } from '@playwright/test';
2
+ export default class GlobalHeader {
3
+ readonly container: Locator;
4
+ readonly productSwitchMenu: Locator;
5
+ readonly recentMentionsButton: Locator;
6
+ readonly settingsButton: Locator;
7
+ readonly searchBox: Locator;
8
+ constructor(container: Locator);
9
+ toBeVisible(name: string): Promise<void>;
10
+ switchProduct(name: string): Promise<void>;
11
+ openSettings(): Promise<void>;
12
+ openRecentMentions(): Promise<void>;
13
+ openSearch(): Promise<void>;
14
+ closeSearch(): Promise<void>;
15
+ }
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var test = require('@playwright/test');
4
+
5
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
6
+ // See LICENSE.txt for license information.
7
+ class GlobalHeader {
8
+ container;
9
+ productSwitchMenu;
10
+ recentMentionsButton;
11
+ settingsButton;
12
+ searchBox;
13
+ constructor(container) {
14
+ this.container = container;
15
+ this.productSwitchMenu = container.getByRole('button', { name: 'Product switch menu' });
16
+ this.recentMentionsButton = container.getByRole('button', { name: 'Recent mentions' });
17
+ this.settingsButton = container.getByRole('button', { name: 'Settings' });
18
+ this.searchBox = container.locator('#searchFormContainer');
19
+ }
20
+ async toBeVisible(name) {
21
+ await test.expect(this.container.getByRole('heading', { name })).toBeVisible();
22
+ }
23
+ async switchProduct(name) {
24
+ await this.productSwitchMenu.click();
25
+ await this.container.getByRole('link', { name }).click();
26
+ }
27
+ async openSettings() {
28
+ await test.expect(this.settingsButton).toBeVisible();
29
+ await this.settingsButton.click();
30
+ }
31
+ async openRecentMentions() {
32
+ await test.expect(this.recentMentionsButton).toBeVisible();
33
+ await this.recentMentionsButton.click();
34
+ }
35
+ async openSearch() {
36
+ await test.expect(this.searchBox).toBeVisible();
37
+ await this.searchBox.click();
38
+ }
39
+ async closeSearch() {
40
+ await test.expect(this.searchBox).toBeVisible();
41
+ await this.searchBox.getByTestId('searchBoxClose').click();
42
+ }
43
+ }
44
+
45
+ module.exports = GlobalHeader;
46
+ //# sourceMappingURL=global_header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global_header.js","sources":["../../../src/ui/components/global_header.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Locator, expect} from '@playwright/test';\n\nexport default class GlobalHeader {\n readonly container: Locator;\n\n readonly productSwitchMenu;\n readonly recentMentionsButton;\n readonly settingsButton;\n readonly searchBox;\n\n constructor(container: Locator) {\n this.container = container;\n\n this.productSwitchMenu = container.getByRole('button', {name: 'Product switch menu'});\n this.recentMentionsButton = container.getByRole('button', {name: 'Recent mentions'});\n this.settingsButton = container.getByRole('button', {name: 'Settings'});\n this.searchBox = container.locator('#searchFormContainer');\n }\n\n async toBeVisible(name: string) {\n await expect(this.container.getByRole('heading', {name})).toBeVisible();\n }\n\n async switchProduct(name: string) {\n await this.productSwitchMenu.click();\n await this.container.getByRole('link', {name}).click();\n }\n\n async openSettings() {\n await expect(this.settingsButton).toBeVisible();\n await this.settingsButton.click();\n }\n\n async openRecentMentions() {\n await expect(this.recentMentionsButton).toBeVisible();\n await this.recentMentionsButton.click();\n }\n\n async openSearch() {\n await expect(this.searchBox).toBeVisible();\n await this.searchBox.click();\n }\n\n async closeSearch() {\n await expect(this.searchBox).toBeVisible();\n await this.searchBox.getByTestId('searchBoxClose').click();\n }\n}\n"],"names":["expect"],"mappings":";;;;AAAA;AACA;AAIc,MAAO,YAAY,CAAA;AACpB,IAAA,SAAS;AAET,IAAA,iBAAiB;AACjB,IAAA,oBAAoB;AACpB,IAAA,cAAc;AACd,IAAA,SAAS;AAElB,IAAA,WAAA,CAAY,SAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,qBAAqB,EAAC,CAAC;AACrF,QAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,iBAAiB,EAAC,CAAC;AACpF,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC;QACvE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC;;IAG9D,MAAM,WAAW,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC,WAAW,EAAE;;IAG3E,MAAM,aAAa,CAAC,IAAY,EAAA;AAC5B,QAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACpC,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC,KAAK,EAAE;;AAG1D,IAAA,MAAM,YAAY,GAAA;QACd,MAAMA,WAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE;AAC/C,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;AAGrC,IAAA,MAAM,kBAAkB,GAAA;QACpB,MAAMA,WAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE;AACrD,QAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;;AAG3C,IAAA,MAAM,UAAU,GAAA;QACZ,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;AAC1C,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;AAGhC,IAAA,MAAM,WAAW,GAAA;QACb,MAAMA,WAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;;AAEjE;;;;"}
@@ -0,0 +1,73 @@
1
+ import ChannelsHeader from './channels/header';
2
+ import ChannelsAppBar from './channels/app_bar';
3
+ import ChannelsPostCreate from './channels/post_create';
4
+ import ChannelsPost from './channels/post';
5
+ import ChannelsCenterView from './channels/center_view';
6
+ import ChannelsSidebarLeft from './channels/sidebar_left';
7
+ import ChannelsSidebarRight from './channels/sidebar_right';
8
+ import DeletePostModal from './channels/delete_post_modal';
9
+ import FindChannelsModal from './channels/find_channels_modal';
10
+ import SettingsModal from './channels/settings/settings_modal';
11
+ import Footer from './footer';
12
+ import GlobalHeader from './global_header';
13
+ import SearchPopover from './channels/search_popover';
14
+ import MainHeader from './main_header';
15
+ import PostDotMenu from './channels/post_dot_menu';
16
+ import PostReminderMenu from './channels/post_reminder_menu';
17
+ import PostMenu from './channels/post_menu';
18
+ import ThreadFooter from './channels/thread_footer';
19
+ import EmojiGifPicker from './channels/emoji_gif_picker';
20
+ import GenericConfirmModal from './channels/generic_confirm_modal';
21
+ import MessagePriority from './channels/message_priority';
22
+ import ScheduledDraftMenu from './channels/scheduled_draft_menu';
23
+ import ScheduledDraftModal from './channels/scheduled_draft_modal';
24
+ import UserProfilePopover from './channels/user_profile_popover';
25
+ import SystemConsoleSidebar from './system_console/sidebar';
26
+ import SystemConsoleNavbar from './system_console/navbar';
27
+ import SystemUsers from './system_console/sections/system_users/system_users';
28
+ import SystemUsersFilterPopover from './system_console/sections/system_users/filter_popover';
29
+ import SystemUsersFilterMenu from './system_console/sections/system_users/filter_menu';
30
+ import SystemUsersColumnToggleMenu from './system_console/sections/system_users/column_toggle_menu';
31
+ import ChannelsPostEdit from './channels/post_edit';
32
+ import DeletePostConfirmationDialog from './channels/delete_post_confirmation_dialog';
33
+ import RestorePostConfirmationDialog from './channels/restore_post_confirmation_dialog';
34
+ import SystemConsoleFeatureDiscovery from './system_console/sections/system_users/feature_discovery';
35
+ import SystemConsoleMobileSecurity from './system_console/sections/system_users/mobile_security';
36
+ declare const components: {
37
+ GlobalHeader: typeof GlobalHeader;
38
+ SearchPopover: typeof SearchPopover;
39
+ ChannelsCenterView: typeof ChannelsCenterView;
40
+ ChannelsSidebarLeft: typeof ChannelsSidebarLeft;
41
+ ChannelsSidebarRight: typeof ChannelsSidebarRight;
42
+ ChannelsAppBar: typeof ChannelsAppBar;
43
+ ChannelsHeader: typeof ChannelsHeader;
44
+ ChannelsPostCreate: typeof ChannelsPostCreate;
45
+ ChannelsPostEdit: typeof ChannelsPostEdit;
46
+ ChannelsPost: typeof ChannelsPost;
47
+ FindChannelsModal: typeof FindChannelsModal;
48
+ DeletePostModal: typeof DeletePostModal;
49
+ SettingsModal: typeof SettingsModal;
50
+ PostDotMenu: typeof PostDotMenu;
51
+ PostMenu: typeof PostMenu;
52
+ ThreadFooter: typeof ThreadFooter;
53
+ Footer: typeof Footer;
54
+ MainHeader: typeof MainHeader;
55
+ PostReminderMenu: typeof PostReminderMenu;
56
+ EmojiGifPicker: typeof EmojiGifPicker;
57
+ GenericConfirmModal: typeof GenericConfirmModal;
58
+ ScheduledDraftMenu: typeof ScheduledDraftMenu;
59
+ ScheduledDraftModal: typeof ScheduledDraftModal;
60
+ SystemConsoleSidebar: typeof SystemConsoleSidebar;
61
+ SystemConsoleNavbar: typeof SystemConsoleNavbar;
62
+ SystemUsers: typeof SystemUsers;
63
+ SystemUsersFilterPopover: typeof SystemUsersFilterPopover;
64
+ SystemUsersFilterMenu: typeof SystemUsersFilterMenu;
65
+ SystemUsersColumnToggleMenu: typeof SystemUsersColumnToggleMenu;
66
+ SystemConsoleFeatureDiscovery: typeof SystemConsoleFeatureDiscovery;
67
+ SystemConsoleMobileSecurity: typeof SystemConsoleMobileSecurity;
68
+ MessagePriority: typeof MessagePriority;
69
+ UserProfilePopover: typeof UserProfilePopover;
70
+ DeletePostConfirmationDialog: typeof DeletePostConfirmationDialog;
71
+ RestorePostConfirmationDialog: typeof RestorePostConfirmationDialog;
72
+ };
73
+ export { components, GlobalHeader, ChannelsCenterView, ChannelsSidebarLeft, ChannelsSidebarRight, ChannelsAppBar, ChannelsHeader, ChannelsPostCreate, ChannelsPostEdit, ChannelsPost, FindChannelsModal, DeletePostModal, PostDotMenu, PostMenu, ThreadFooter, MessagePriority, DeletePostConfirmationDialog, };
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ require('@playwright/test');
4
+ var app_bar = require('./channels/app_bar.js');
5
+ require('node:path');
6
+ require('uuid');
7
+ require('../../file.js');
8
+ require('async-wait-until');
9
+ var center_view = require('./channels/center_view.js');
10
+ var sidebar_left = require('./channels/sidebar_left.js');
11
+ var sidebar_right = require('./channels/sidebar_right.js');
12
+ var delete_post_modal = require('./channels/delete_post_modal.js');
13
+ var find_channels_modal = require('./channels/find_channels_modal.js');
14
+ var settings_modal = require('./channels/settings/settings_modal.js');
15
+ var footer = require('./footer.js');
16
+ var global_header = require('./global_header.js');
17
+ var search_popover = require('./channels/search_popover.js');
18
+ var main_header = require('./main_header.js');
19
+ var post_dot_menu = require('./channels/post_dot_menu.js');
20
+ var post_reminder_menu = require('./channels/post_reminder_menu.js');
21
+ var emoji_gif_picker = require('./channels/emoji_gif_picker.js');
22
+ var generic_confirm_modal = require('./channels/generic_confirm_modal.js');
23
+ var message_priority = require('./channels/message_priority.js');
24
+ var scheduled_draft_menu = require('./channels/scheduled_draft_menu.js');
25
+ var scheduled_draft_modal = require('./channels/scheduled_draft_modal.js');
26
+ var user_profile_popover = require('./channels/user_profile_popover.js');
27
+ var sidebar = require('./system_console/sidebar.js');
28
+ var navbar = require('./system_console/navbar.js');
29
+ var system_users = require('./system_console/sections/system_users/system_users.js');
30
+ var filter_popover = require('./system_console/sections/system_users/filter_popover.js');
31
+ var filter_menu = require('./system_console/sections/system_users/filter_menu.js');
32
+ var column_toggle_menu = require('./system_console/sections/system_users/column_toggle_menu.js');
33
+ var feature_discovery = require('./system_console/sections/system_users/feature_discovery.js');
34
+ var mobile_security = require('./system_console/sections/system_users/mobile_security.js');
35
+
36
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
37
+ // See LICENSE.txt for license information.
38
+ const components = {
39
+ GlobalHeader: global_header,
40
+ SearchPopover: search_popover,
41
+ ChannelsCenterView: center_view,
42
+ ChannelsSidebarLeft: sidebar_left,
43
+ ChannelsSidebarRight: sidebar_right,
44
+ ChannelsAppBar: app_bar,
45
+ FindChannelsModal: find_channels_modal,
46
+ DeletePostModal: delete_post_modal,
47
+ SettingsModal: settings_modal,
48
+ PostDotMenu: post_dot_menu,
49
+ Footer: footer,
50
+ MainHeader: main_header,
51
+ PostReminderMenu: post_reminder_menu,
52
+ EmojiGifPicker: emoji_gif_picker,
53
+ GenericConfirmModal: generic_confirm_modal,
54
+ ScheduledDraftMenu: scheduled_draft_menu,
55
+ ScheduledDraftModal: scheduled_draft_modal,
56
+ SystemConsoleSidebar: sidebar,
57
+ SystemConsoleNavbar: navbar,
58
+ SystemUsers: system_users,
59
+ SystemUsersFilterPopover: filter_popover,
60
+ SystemUsersFilterMenu: filter_menu,
61
+ SystemUsersColumnToggleMenu: column_toggle_menu,
62
+ SystemConsoleFeatureDiscovery: feature_discovery,
63
+ SystemConsoleMobileSecurity: mobile_security,
64
+ MessagePriority: message_priority,
65
+ UserProfilePopover: user_profile_popover};
66
+
67
+ exports.ChannelsAppBar = app_bar;
68
+ exports.ChannelsCenterView = center_view;
69
+ exports.ChannelsSidebarLeft = sidebar_left;
70
+ exports.ChannelsSidebarRight = sidebar_right;
71
+ exports.DeletePostModal = delete_post_modal;
72
+ exports.FindChannelsModal = find_channels_modal;
73
+ exports.GlobalHeader = global_header;
74
+ exports.PostDotMenu = post_dot_menu;
75
+ exports.MessagePriority = message_priority;
76
+ exports.components = components;
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/ui/components/index.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport ChannelsHeader from './channels/header';\nimport ChannelsAppBar from './channels/app_bar';\nimport ChannelsPostCreate from './channels/post_create';\nimport ChannelsPost from './channels/post';\nimport ChannelsCenterView from './channels/center_view';\nimport ChannelsSidebarLeft from './channels/sidebar_left';\nimport ChannelsSidebarRight from './channels/sidebar_right';\nimport DeletePostModal from './channels/delete_post_modal';\nimport FindChannelsModal from './channels/find_channels_modal';\nimport SettingsModal from './channels/settings/settings_modal';\nimport Footer from './footer';\nimport GlobalHeader from './global_header';\nimport SearchPopover from './channels/search_popover';\nimport MainHeader from './main_header';\nimport PostDotMenu from './channels/post_dot_menu';\nimport PostReminderMenu from './channels/post_reminder_menu';\nimport PostMenu from './channels/post_menu';\nimport ThreadFooter from './channels/thread_footer';\nimport EmojiGifPicker from './channels/emoji_gif_picker';\nimport GenericConfirmModal from './channels/generic_confirm_modal';\nimport MessagePriority from './channels/message_priority';\nimport ScheduledDraftMenu from './channels/scheduled_draft_menu';\nimport ScheduledDraftModal from './channels/scheduled_draft_modal';\nimport UserProfilePopover from './channels/user_profile_popover';\nimport SystemConsoleSidebar from './system_console/sidebar';\nimport SystemConsoleNavbar from './system_console/navbar';\nimport SystemUsers from './system_console/sections/system_users/system_users';\nimport SystemUsersFilterPopover from './system_console/sections/system_users/filter_popover';\nimport SystemUsersFilterMenu from './system_console/sections/system_users/filter_menu';\nimport SystemUsersColumnToggleMenu from './system_console/sections/system_users/column_toggle_menu';\nimport ChannelsPostEdit from './channels/post_edit';\nimport DeletePostConfirmationDialog from './channels/delete_post_confirmation_dialog';\nimport RestorePostConfirmationDialog from './channels/restore_post_confirmation_dialog';\nimport SystemConsoleFeatureDiscovery from './system_console/sections/system_users/feature_discovery';\nimport SystemConsoleMobileSecurity from './system_console/sections/system_users/mobile_security';\n\nconst components = {\n GlobalHeader,\n SearchPopover,\n ChannelsCenterView,\n ChannelsSidebarLeft,\n ChannelsSidebarRight,\n ChannelsAppBar,\n ChannelsHeader,\n ChannelsPostCreate,\n ChannelsPostEdit,\n ChannelsPost,\n FindChannelsModal,\n DeletePostModal,\n SettingsModal,\n PostDotMenu,\n PostMenu,\n ThreadFooter,\n Footer,\n MainHeader,\n PostReminderMenu,\n EmojiGifPicker,\n GenericConfirmModal,\n ScheduledDraftMenu,\n ScheduledDraftModal,\n SystemConsoleSidebar,\n SystemConsoleNavbar,\n SystemUsers,\n SystemUsersFilterPopover,\n SystemUsersFilterMenu,\n SystemUsersColumnToggleMenu,\n SystemConsoleFeatureDiscovery,\n SystemConsoleMobileSecurity,\n MessagePriority,\n UserProfilePopover,\n DeletePostConfirmationDialog,\n RestorePostConfirmationDialog,\n};\n\nexport {\n components,\n GlobalHeader,\n ChannelsCenterView,\n ChannelsSidebarLeft,\n ChannelsSidebarRight,\n ChannelsAppBar,\n ChannelsHeader,\n ChannelsPostCreate,\n ChannelsPostEdit,\n ChannelsPost,\n FindChannelsModal,\n DeletePostModal,\n PostDotMenu,\n PostMenu,\n ThreadFooter,\n MessagePriority,\n DeletePostConfirmationDialog,\n};\n"],"names":["GlobalHeader","SearchPopover","ChannelsCenterView","ChannelsSidebarLeft","ChannelsSidebarRight","ChannelsAppBar","FindChannelsModal","DeletePostModal","SettingsModal","PostDotMenu","Footer","MainHeader","PostReminderMenu","EmojiGifPicker","GenericConfirmModal","ScheduledDraftMenu","ScheduledDraftModal","SystemConsoleSidebar","SystemConsoleNavbar","SystemUsers","SystemUsersFilterPopover","SystemUsersFilterMenu","SystemUsersColumnToggleMenu","SystemConsoleFeatureDiscovery","SystemConsoleMobileSecurity","MessagePriority","UserProfilePopover"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAsCA,MAAM,UAAU,GAAG;kBACfA,aAAY;mBACZC,cAAa;wBACbC,WAAkB;yBAClBC,YAAmB;0BACnBC,aAAoB;oBACpBC,OAAc;uBAKdC,mBAAiB;qBACjBC,iBAAe;mBACfC,cAAa;iBACbC,aAAW;YAGXC,MAAM;gBACNC,WAAU;sBACVC,kBAAgB;oBAChBC,gBAAc;yBACdC,qBAAmB;wBACnBC,oBAAkB;yBAClBC,qBAAmB;0BACnBC,OAAoB;yBACpBC,MAAmB;iBACnBC,YAAW;8BACXC,cAAwB;2BACxBC,WAAqB;iCACrBC,kBAA2B;mCAC3BC,iBAA6B;iCAC7BC,eAA2B;qBAC3BC,gBAAe;wBACfC;;;;;;;;;;;;;"}