@bigbinary/neeto-playwright-commons 1.21.4 → 1.22.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.
package/index.cjs.js CHANGED
@@ -3,11 +3,11 @@
3
3
  var fs$d = require('fs');
4
4
  var Path = require('path');
5
5
  var test$1 = require('@playwright/test');
6
- var neetoCist = require('@bigbinary/neeto-cist');
7
- var child_process = require('child_process');
8
- var ramda = require('ramda');
9
6
  var playwrightI18nextFixture = require('playwright-i18next-fixture');
10
7
  var require$$0$2 = require('util');
8
+ var ramda = require('ramda');
9
+ var neetoCist = require('@bigbinary/neeto-cist');
10
+ var child_process = require('child_process');
11
11
  var faker = require('@faker-js/faker');
12
12
  var Stream$4 = require('stream');
13
13
  var require$$0$4 = require('node:buffer');
@@ -124,844 +124,6 @@ let TagsApi$1 = class TagsApi {
124
124
  }
125
125
  };
126
126
 
127
- const COMMON_SELECTORS = {
128
- emailInputError: "email-input-error",
129
- pane: "pane-wrapper",
130
- sideBar: "sidebar",
131
- copyButton: "copy-button",
132
- resetButton: "reset-button",
133
- spinner: ".neeto-ui-spinner",
134
- uiSpinner: "neeto-ui-spinner",
135
- subheaderText: "subheader-left",
136
- alertTitle: "alert-title",
137
- alertModalMessage: "alert-message",
138
- alertModalSubmitButton: "alert-submit-button",
139
- checkbox: "nui-checkbox-input",
140
- checkboxLabel: "nui-checkbox-label",
141
- dropdownContainer: "nui-dropdown-container",
142
- dropdownIcon: "nui-dropdown-icon",
143
- heading: "main-header",
144
- paneBody: "pane-body",
145
- paneHeader: "pane-header",
146
- profileSidebar: "profile-section",
147
- selectOption: (label) => `${neetoCist.hyphenate(label)}-select-option`,
148
- radioLabel: (embedLabel) => `${neetoCist.hyphenate(embedLabel)}-radio-label`,
149
- toastMessage: (type) => `toastr-${type}-container`,
150
- toastCloseButton: "toastr-close-button",
151
- windowAlert: "#alert-box",
152
- body: "body",
153
- toastIcon: ".Toastify__toast-icon",
154
- toastContainer: ".Toastify__toast-container",
155
- paneModalCrossIcon: "pane-close-button",
156
- inputField: "nui-input-field",
157
- alertBox: "alert-box",
158
- tableContainer: "table-container",
159
- alertConfirmationText: "alert-confirmation-text",
160
- alertCancelButton: "alert-cancel-button",
161
- alertModalCrossIcon: "modal-close-button",
162
- saveChangesButton: "save-changes-button",
163
- cancelButton: "cancel-button",
164
- inputFieldError: "nui-input-error",
165
- selectDropDownError: "nui-select-error",
166
- subTitleHeading: "menubar-subtitle-heading",
167
- noDataTitle: "no-data-title",
168
- noDataDescription: "no-data-description",
169
- noDataHelpText: "no-data-help-text",
170
- backdrop: "neeto-backdrop",
171
- menuBarHeading: "menubar-heading",
172
- dropdownWrapper: "nui-select-container-wrapper",
173
- toggleButton: "menubar-toggle-button",
174
- tooltip: "tooltip-box",
175
- articlePageTitle: ".serene-article__title",
176
- tabItem: "tab-item",
177
- labelInputError: "label-input-error",
178
- urlInputError: "url-input-error",
179
- noDataPrimaryButton: "no-data-primary-button",
180
- modalHeader: "modal-header",
181
- nameInputError: "name-input-error",
182
- selectContainer: "nui-select-container",
183
- dropdownMenu: "nui-select-menu",
184
- sidebarToggle: "neeto-molecules-sidebar-toggler",
185
- subheader: "subheader",
186
- settingsLink: "Settings",
187
- ticketFieldTextInput: (label) => `${neetoCist.hyphenate(label)}-text-input`,
188
- appSwitcherButton: "product-switcher-button",
189
- appSwitcherWrapper: "switcher-wrapper",
190
- appLink: (appName) => `${appName}-app-link`,
191
- tableSpinner: ".ant-spin",
192
- pageLoader: "neeto-molecules-pageloader",
193
- homeButton: "home-button",
194
- neetoUiSwitch: "nui-switch",
195
- floatingActionMenuButton: "floating-action-menu-container",
196
- columnsDropdownContainer: "show/hide-columns-dropdown-container",
197
- columnsDropdownButton: "columns-dropdown-button",
198
- breadcrumbHeader: "header-breadcrumb",
199
- header: "neeto-molecules-header",
200
- sidebarSubLink: (label) => `${neetoCist.hyphenate(label)}-sub-link`,
201
- sidebarGoBackButton: (label) => `${neetoCist.hyphenate(label)}-go-back-button`,
202
- selectSingleValue: "select-single-value",
203
- actionSelectIndicator: "action-select-indicator",
204
- takeActionDropdown: "take-action-dropdown-icon",
205
- columnsSearchInput: "neeto-ui-columns-search",
206
- errorToastIcon: "error-toast-icon",
207
- nuiRadioLabel: "nui-radio-label",
208
- submitButton: "submit-button",
209
- tableRow: ".ant-table-row",
210
- navigationHeaderLeftBlock: "navigation-header-left-block",
211
- fileUploadBody: "file-upload-body",
212
- modalBody: "modal-body",
213
- modalForever: "modal-footer",
214
- navigationHeader: "navigation-header",
215
- buttonSpinner: ".neeto-ui-btn__spinner",
216
- pendingTagContainer: "pending-tag-container",
217
- nextYearButton: "next-year-button",
218
- popoverTitle: "popover-title",
219
- productSwitcherSearchInput: "product-switcher-search-input",
220
- helpPopoverButton: "help-popover-button",
221
- helpPopoverDesc: "help-popover-description",
222
- helpPopoverLinkButton: "help-popover-link-button",
223
- copyToClipboardButton: "copy-to-clipboard-button",
224
- subheaderRight: "subheader-right",
225
- secretKeyInputField: "secret-key-input-field",
226
- activeSwitch: "active-switch",
227
- labelInputField: "label-input-field",
228
- imageUploadModal: "tab-container",
229
- neetoLogo: "sidebar-info",
230
- clearSelectIndicator: "clear-select-indicator",
231
- menubarContainer: "menubar-container",
232
- multiEmailInputContainer: "multi-email-input-container",
233
- linkInputError: "link-input-error",
234
- continueButton: "continue-button",
235
- clearAllButton: "clear-all-button",
236
- requiredSwitch: "required-switch",
237
- customSwitch: (switchLabel) => `${neetoCist.hyphenate(switchLabel)}-switch`,
238
- customMenuItem: (label) => `${neetoCist.hyphenate(label)}-menu-item`,
239
- customInputLabel: (name = "nui") => `${neetoCist.hyphenate(name)}-input-label`,
240
- customInputField: (name = "nui") => `${neetoCist.hyphenate(name)}-input-field`,
241
- customSelectContainer: (name) => `${neetoCist.hyphenate(name)}-select-container`,
242
- customSelectContainerWrapper: (label) => `${neetoCist.hyphenate(label)}-select-container-wrapper`,
243
- customSelectValueContainer: (label = "nui") => `${neetoCist.hyphenate(label)}-select-value-container`,
244
- customCheckboxLabel: (name) => `${neetoCist.hyphenate(name)}-checkbox-label`,
245
- errorImage: "error-image",
246
- customDropdownIcon: (label = "nui") => `${neetoCist.hyphenate(label)}-dropdown-icon`,
247
- customDropdownContainer: (label = "nui") => `${neetoCist.hyphenate(label)}-dropdown-container`,
248
- checkboxInput: (option = "i-agree") => `${neetoCist.hyphenate(option)}-checkbox-input`,
249
- radioInput: (option = "i-agree") => `${neetoCist.hyphenate(option)}-radio-input`,
250
- selectOptionError: (option) => `${neetoCist.hyphenate(option)}-select-error`,
251
- customDropDownMenu: (label = "nui") => `${neetoCist.hyphenate(label)}-select-menu`,
252
- };
253
-
254
- const THANK_YOU_SELECTORS = {
255
- settingsLink: "thank-you-settings-link",
256
- showSocialShareIconsSwitch: "show-social-share-icons-switch",
257
- showLinkToSubmitAnotherResponseSwitch: "show-link-to-submit-another-response-switch",
258
- submitAnotherResponseLinkTextInputField: "submit-another-response-link-text-input-field",
259
- previewEditorContent: "preview-editor-content",
260
- redirectToExternalLinkRadioLabel: () => "neeto-thank-you-configuration-redirect-to-url-label",
261
- thankYouConfigurationLabel: (label = "custom-message") => `neeto-thank-you-configuration-${label}-label`,
262
- saveChangesButton: "neeto-thank-you-configuration-save-button",
263
- cancelButton: "neeto-thank-you-configuration-cancel-button",
264
- thankYouPageImage: "thank-you-page-image",
265
- thankYouPageMessage: "thank-you-page-message",
266
- thankYouPageContent: "thank-you-page-content",
267
- thankYouPageResubmitLink: "thank-you-page-resubmit-link",
268
- linkInputField: "link-input-field",
269
- previewImage: "preview-image",
270
- thankYouMessageEditor: "thank-you-message-editor",
271
- thankYouMessageWrapper: "thank-you-message-wrapper",
272
- };
273
-
274
- const ENVIRONMENT = {
275
- development: "development",
276
- staging: "staging",
277
- review: "review",
278
- };
279
- const IS_STAGING_ENV = process.env.TEST_ENV === "staging";
280
- const STORAGE_STATE = "./e2e/auth/user.json";
281
- const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
282
- const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
283
- const CREDENTIALS = {
284
- name: "Oliver Smith",
285
- email: "oliver@example.com",
286
- password: "welcome",
287
- };
288
- const OTP_EMAIL_PATTERN = "is your login code";
289
- const SLACK_DEFAULT_CHANNEL = "general";
290
- const CUSTOM_DOMAIN_SUFFIX = "aceinvoice.com";
291
- const ZAPIER_TEST_EMAIL = (product) => `neeto-${product}-zapier-test@${process.env.FASTMAIL_DOMAIN_NAME}`;
292
- // constants for translation
293
- const SINGULAR = { count: 1 };
294
- const PLURAL = { count: 2 };
295
- const COLOR = {
296
- transparent: "rgba(0, 0, 0, 0)",
297
- softBlue: "rgb(230, 244, 255)",
298
- };
299
- const DATE_TEXTS = { now: "Now", nextYear: "next-year" };
300
- const EMPTY_STORAGE_STATE = {
301
- storageState: { cookies: [], origins: [] },
302
- };
303
-
304
- /* eslint-disable playwright/no-skipped-test */
305
- const execCommand = (command) => child_process.execSync(command)
306
- .toString("utf-8")
307
- .replace(/[\n\r\s]+$/, "");
308
- const joinString = (string1, string2, string3 = "", separator = " ") => {
309
- if (string3 === "") {
310
- return string1 + separator + string2;
311
- }
312
- return string1 + separator + string2 + separator + string3;
313
- };
314
- const readFileSyncIfExists = (path = STORAGE_STATE) => {
315
- try {
316
- return JSON.parse(fs__namespace.readFileSync(path, "utf8"));
317
- }
318
- catch (error) {
319
- return {};
320
- }
321
- };
322
- const getGlobalUserState = () => { var _a; return (_a = readFileSyncIfExists()) === null || _a === void 0 ? void 0 : _a.user; };
323
- const writeDataToFile = data => {
324
- try {
325
- fs__namespace.writeFileSync(STORAGE_STATE, data, "utf8");
326
- }
327
- catch (error) {
328
- console.log(error); // eslint-disable-line
329
- }
330
- return true;
331
- };
332
- const updateCredentials = ({ key, value }) => {
333
- const data = readFileSyncIfExists();
334
- data["user"][key] = value;
335
- return writeDataToFile(JSON.stringify(data));
336
- };
337
- const removeCredentialFile = () => {
338
- fs__namespace.unlink(STORAGE_STATE, error => {
339
- if (!error)
340
- return;
341
- console.log(error); // eslint-disable-line
342
- });
343
- };
344
- const clearCredentials = () => {
345
- if (shouldSkipSetupAndTeardown())
346
- return;
347
- removeCredentialFile();
348
- };
349
- /**
350
- * @deprecated Use hyphenate from neeto-cist instead.
351
- */
352
- const hyphenize = input => {
353
- const fallbackString = "";
354
- if (typeof input === "number")
355
- return String(input);
356
- if (input && typeof input === "string" && input.replace) {
357
- return input
358
- .replace(/[\s_]/g, "-")
359
- .replace(/([a-z])([A-Z])/g, "$1-$2")
360
- .replace(/-+/g, "-")
361
- .toLowerCase();
362
- }
363
- return fallbackString;
364
- };
365
- const joinHyphenCase = (...args) => args.join(" ").replace(/\s+/g, "-").toLowerCase();
366
- const skipTest = {
367
- forDevelopmentEnv: () => test$1.skip(process.env.TEST_ENV === ENVIRONMENT.development),
368
- forReviewEnv: () => test$1.skip(process.env.TEST_ENV === ENVIRONMENT.review),
369
- forAllExceptStagingEnv: () => test$1.skip(process.env.TEST_ENV !== ENVIRONMENT.staging),
370
- forNonNightlyRun: () => {
371
- const currentBranch = execCommand("git rev-parse --abbrev-ref HEAD");
372
- const isNightlyRun = currentBranch === "main" &&
373
- process.env.TEST_ENV === ENVIRONMENT.staging &&
374
- !!process.env.NEETO_CI_JOB_ID;
375
- return test$1.skip(ramda.not(isNightlyRun), "Run test only in playwright-nightly");
376
- },
377
- ifNotWithinAllowedNightlyHours: ({ reason, allowedNightlyRunHours = [0, 6, 12, 18], }) => {
378
- skipTest.forNonNightlyRun();
379
- const currentDate = new Date();
380
- const day = currentDate.getUTCDay();
381
- const hour = currentDate.getUTCHours();
382
- const isAllowedNightlyRun = 0 < day && day < 6 && allowedNightlyRunHours.includes(hour);
383
- test$1.skip(ramda.not(isAllowedNightlyRun), `Nightly run is skipped due to ${reason}`);
384
- },
385
- };
386
- const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserState()) === null || _a === void 0 ? void 0 : _a.isLoggedIn) && process.env.SKIP_SETUP === "true"; };
387
- const shouldSkipCustomDomainSetup = () => process.env.SETUP_CUSTOM_DOMAIN !== "true" || !IS_STAGING_ENV;
388
- const baseURLGenerator = (product, customSubdomain) => {
389
- const { subdomainName } = getGlobalUserState();
390
- return `https://${customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName}.neeto${product.toLowerCase()}.net`;
391
- };
392
- // trims and replaces multiple whitespace characters in a string with a single space
393
- const squish = (text) => text.trim().replace(/\s+/g, " ");
394
- const toCamelCase = (string) => string.toLowerCase().replace(/( \w)/g, letter => letter[1].toUpperCase());
395
- const getByDataQA = ramda.curry((page, dataQa) => {
396
- if (typeof dataQa === "string") {
397
- // eslint-disable-next-line playwright/no-raw-locators
398
- return page.locator(`[data-qa='${dataQa}']`);
399
- }
400
- // eslint-disable-next-line playwright/no-raw-locators
401
- return page
402
- .locator(`[data-qa='${dataQa[0]}']`)
403
- .locator(`[data-qa='${dataQa[1]}']`);
404
- });
405
- const getListCount = async ({ page, countSelector, }) => {
406
- const countText = await page.getByTestId(countSelector).textContent();
407
- return Number(countText === null || countText === void 0 ? void 0 : countText.trim().split(" ")[0]);
408
- };
409
- const getGlobalUserProps = async (page) => (await page.evaluate(() => window.globalProps.user));
410
- const getClipboardContent = (page) => page.evaluate(() => navigator.clipboard.readText());
411
- const globalShortcuts = (t) => [
412
- {
413
- description: t("neetoMolecules.keyboardShortcuts.global.openKeyboardShortcutsPane"),
414
- sequence: "shift+/",
415
- },
416
- {
417
- description: t("neetoMolecules.keyboardShortcuts.global.close"),
418
- sequence: "esc",
419
- },
420
- {
421
- description: t("neetoMolecules.keyboardShortcuts.global.submitForm"),
422
- sequence: "ctrl+enter",
423
- },
424
- ];
425
-
426
- const optionSelector = (option) => `neeto-editor-fixed-menu-${option}-option`;
427
- const fixedMenuSelector = (selector) => `neeto-editor-fixed-menu-${selector}`;
428
-
429
- const NEETO_EDITOR_SELECTORS = {
430
- fontSize: optionSelector("font-size"),
431
- boldOption: optionSelector("bold"),
432
- italicOption: optionSelector("italic"),
433
- underlineOption: optionSelector("underline"),
434
- strikeOption: optionSelector("strike"),
435
- codeBlockOption: optionSelector("code"),
436
- highlightOption: optionSelector("highlight"),
437
- emojiOption: optionSelector("emoji"),
438
- emojiDropdownIcon: "emoji-dropdown-icon",
439
- linkInput: fixedMenuSelector("link-option-input"),
440
- linkSubmitButton: fixedMenuSelector("link-option-link-button"),
441
- commandList: (index) => `neeto-editor-command-list-item-${index}`,
442
- imageUploadUrlSubmitButton: "neeto-editor-media-upload-url-submit",
443
- imageUploadUrlInputTextField: "neeto-editor-media-upload-url-input",
444
- uploadInput: "neeto-editor-media-uploader-input",
445
- editorMenuBarWrapper: fixedMenuSelector("wrapper"),
446
- undoOption: optionSelector("undo"),
447
- redoOption: optionSelector("redo"),
448
- imageWrapper: "neeto-editor-image-wrapper",
449
- contentField: "neeto-editor-content",
450
- addLinkButton: optionSelector("link"),
451
- addLinkTextField: "neeto-editor-add-link-text-input",
452
- addURLTextField: "neeto-editor-add-link-url-input",
453
- submitLinkButton: "neeto-editor-add-link",
454
- fixedMenuArrow: fixedMenuSelector("arrow"),
455
- cannedResponseOption: optionSelector("canned-responses"),
456
- cannedResponseSelectContainer: "select-a-canned-response-select-container",
457
- fixedMenuWrapper: fixedMenuSelector("wrapper"),
458
- linkOption: optionSelector("link"),
459
- addLinkUrlInput: "neeto-editor-add-link-url-input",
460
- addLinkDoneButton: "neeto-editor-add-link",
461
- unlinkButton: "neeto-editor-link-popover-unlink",
462
- editorAttachmentsButton: optionSelector("attachments"),
463
- attachmentPreviewDeleteButton: "neeto-editor-preview-delete-button",
464
- imageUploadOption: optionSelector("image-upload"),
465
- imageUploadLinkInput: "neeto-editor-media-upload-url-input",
466
- imageUploadButton: "neeto-editor-media-uploader-dnd",
467
- imageUploadLinkSubmitButton: "neeto-editor-media-upload-url-submit",
468
- applyButton: "apply-button",
469
- videoEmbedOption: optionSelector("video-embed"),
470
- videoEmbedInput: "neeto-editor-embed-input",
471
- videoEmbedSubmit: "neeto-editor-embed-cancel",
472
- videoWrapper: "neeto-editor-video-wrapper",
473
- paragraphOption: fixedMenuSelector("font-size-option-body2"),
474
- attachmentPreview: "ne-attachments-wrapper",
475
- imageUploadLinkButton: "neeto-editor-media-uploader-link-tab",
476
- errorText: "neeto-editor-error-text",
477
- content: "editor-content",
478
- imageUploadDeleteButton: "neeto-editor-image-menu-Delete",
479
- dynamicVariablesButton: "dynamic-variables-button",
480
- emojiContainer: "neeto-editor-emoji-picker",
481
- characterCount: "neeto-editor-character-count",
482
- tableOption: optionSelector("table"),
483
- tableCreateButton: "neeto-editor-fixed-menu-table-option-create-button",
484
- videoUploadOption: optionSelector("video-upload"),
485
- editorMenuWrapper: "neeto-editor-fixed-menu-wrapper",
486
- editorMediaUploaderTab: "neeto-editor-media-uploader-local-tab",
487
- dynamicVariableSelector: (variable) => `dynamic-variables-list-item-${joinHyphenCase(variable)}`,
488
- neetoEditorFixedMenuFontSize: "neeto-editor-fixed-menu-font-size-option",
489
- highlightText: (textColorIndex) => `--neeto-editor-highlight-text-${textColorIndex}`,
490
- highlightBg: (bgColorIndex) => `--neeto-editor-highlight-bg-${bgColorIndex}`,
491
- };
492
- const NEETO_TEXT_MODIFIER_SELECTORS = {
493
- strike: optionSelector("strike"),
494
- underline: optionSelector("underline"),
495
- highlight: optionSelector("highlight"),
496
- };
497
- const TEXT_MODIFIER_SELECTORS = {
498
- bold: optionSelector("bold"),
499
- italic: optionSelector("italic"),
500
- code: optionSelector("code"),
501
- blockquote: optionSelector("blockquote"),
502
- codeBlock: optionSelector("codeBlock"),
503
- };
504
- const LIST_MODIFIER_SELECTORS = {
505
- bulletList: optionSelector("bulletList"),
506
- orderedList: optionSelector("orderedList"),
507
- };
508
- const FONT_SIZE_SELECTORS = {
509
- h1: fixedMenuSelector("font-size-option-h1"),
510
- h2: fixedMenuSelector("font-size-option-h2"),
511
- h3: fixedMenuSelector("font-size-option-h3"),
512
- h4: fixedMenuSelector("font-size-option-h4"),
513
- h5: fixedMenuSelector("font-size-option-h5"),
514
- };
515
-
516
- const EMBED_SELECTORS = {
517
- iframe: (appName) => `#${appName}-iframe`,
518
- modal: (appName) => `#${appName}-modal`,
519
- close: (appName) => `#close-${appName}`,
520
- loader: (appName) => `#${appName}-loader`,
521
- inlineHeightInput: "inline-height-input-field",
522
- inlineWidthInput: "inline-width-input-field",
523
- inlineElementIdInput: "inline-element-id-input-field",
524
- codeBlock: "code-block",
525
- previewTab: "preview-tab",
526
- htmlTab: "html-tab",
527
- buttonTextInput: "button-text-input-field",
528
- buttonPositionSelectContainer: "button-position-select-value-container",
529
- buttonPositionSelectMenu: "button-position-select-menu",
530
- buttonColorLabel: "button-color-label",
531
- buttonTextColorLabel: "button-text-color-label",
532
- colorPickerTarget: "color-picker-target",
533
- colorpickerEditableInput: "colorpicker-editable-input",
534
- colorpickerEditableInputTextbox: "colorpicker-editable-input-textbox",
535
- showIconCheckbox: "show-icon-checkbox",
536
- elementIdInput: "element-id-input-field",
537
- previewElementPopupButton: "preview-element-popup-button",
538
- embedSelector: (embedType) => `[data-testid="embed-selector-card-${hyphenize(embedType)}"]`,
539
- backToEmbedSelectionButton: "back-to-embed-selection-button",
540
- };
541
-
542
- const NEETO_FILTERS_SELECTORS = {
543
- emailSelectContainer: "email-select-container-wrapper",
544
- filterPaneHeading: "neeto-filters-pane-header",
545
- neetoFiltersEmailBlock: "neeto-filters-email-block",
546
- neetoFiltersRoleBlock: "neeto-filters-role-block",
547
- neetoFiltersBarClearButton: "neeto-filters-bar-clear-btn",
548
- neetoFiltersNameFilterField: "neeto-filters-name-filter",
549
- neetoFilterNameBlock: "neeto-filters-name-block",
550
- roleSelectContainer: "role-select-container-wrapper",
551
- filterButton: "neeto-filters-toggle-btn",
552
- filtersClearButton: "neeto-filters-clear-btn",
553
- filterDoneButton: "neeto-filters-done-btn",
554
- filteredMembersCount: "ntm-filtered-members-count",
555
- allMenubarBlock: "ntm-members-menubar-all-block",
556
- filtersEmailFilter: "neeto-filters-email-filter",
557
- paneModalCrossIcon: "neeto-filters-close-button",
558
- searchTermBlock: "neeto-filters-search-term-block",
559
- categoriesFilter: "neeto-filters-categories-filter",
560
- filtersSegmentName: "neeto-filters-segment-name",
561
- activeSelectContainer: "neeto-filters-status-filter",
562
- neetoFiltersFilter: (filterName) => `neeto-filters-${neetoCist.hyphenate(filterName)}-filter`,
563
- filtersTermBlock: (filterType = "search-term") => `neeto-filters-${neetoCist.hyphenate(filterType)}-block`,
564
- dateRange: (filterName) => `neeto-filters-${neetoCist.hyphenate(filterName)}-date-range`,
565
- segmentLabel: (label) => `neeto-filters-segment-block-${neetoCist.hyphenate(label)}`,
566
- };
567
-
568
- const HELP_CENTER_SELECTORS = {
569
- helpButton: "help-button",
570
- documentationButton: "help-link-help-center-button",
571
- keyboardShortcutButton: "help-link-keyboard-shortcut-button",
572
- chatButton: "help-link-live-chat-button",
573
- whatsNewButton: "help-link-engage-button",
574
- whatsNewWidgetInfo: "h1",
575
- whatsNewWidgetCloseButton: ".ne-widget-header__btn",
576
- keyboardShortcutPaneHeading: "keyboard-shortcuts-pane-title",
577
- keyboardShortcutPaneCrossIcon: "keyboard-shortcuts-pane-close-button",
578
- statusButton: "help-link-status-button",
579
- communityButton: "help-link-community-button",
580
- };
581
-
582
- const NEETO_IMAGE_UPLOADER_SELECTORS = {
583
- imageUploaderWrapper: "image-uploader-wrapper",
584
- browseText: "neeto-image-uploader-browse-text",
585
- fileInput: "neeto-image-uploader-file-input",
586
- uploadedImage: "uploaded-image",
587
- uploadNewAsset: "upload-new-asset",
588
- basicImageUploaderRemoveButton: "basic-image-uploader-remove-button",
589
- removeButton: "image-uploader-remove-button",
590
- openImageLibraryButton: "image-uploader-open-image-library-button",
591
- openAssetLibraryButton: "open-asset-library-button",
592
- imageEditorBackButton: "image-editor-back-button",
593
- aspectRatioWidthInput: "aspect-ratio-width-input",
594
- aspectRatioHeightInput: "aspect-ratio-height-input",
595
- cropSubmitButton: "neeto-image-uploader-crop-submit-button",
596
- restrictionMessage: "neeto-image-uploader-restriction-message",
597
- progressBar: "neeto-image-uploader-progress-bar",
598
- myImagesTab: "neeto-image-uploader-my-images-tab",
599
- unsplashTab: "neeto-image-uploader-unsplash-tab",
600
- nthLibraryImage: (index) => `niu-library-image-${index}`,
601
- nthUnsplashImage: (index) => `niu-unsplash-image-${index}`,
602
- unsplashSearchInput: "niu-unsplash-image-picker-search-input",
603
- imageEditorUploadedImage: "image-editor-uploaded-image",
604
- selectOriginalImageSwitch: "select-original-image-switch",
605
- lockAspectRatioSwitch: "lock-aspect-ratio-switch",
606
- widthInputField: "width-input-field",
607
- heightInputField: "height-input-field",
608
- };
609
-
610
- const LOGIN_SELECTORS = {
611
- appleAuthenticationButton: "apple-authentication-button",
612
- emailTextField: "login-email-text-field",
613
- googleAuthenticationButton: "google-authentication-button",
614
- githubAuthenticationButton: "github-authentication-button",
615
- loginViaEmailButton: "login-via-email-button",
616
- passwordTextField: "login-password-text-field",
617
- rememberMeCheckBox: "login-remember-me-check-box",
618
- submitButton: "login-submit-button",
619
- twitterAuthenticationButton: "twitter-authentication-button",
620
- };
621
-
622
- const MEMBER_SELECTORS = {
623
- membersTab: "members-nav-tab",
624
- newButton: "ntm-add-member-button",
625
- continueButton: "ntm-manage-member-continue-button",
626
- submitButton: "ntm-manage-member-submit-button",
627
- searchTextField: "ntm-search-members-input",
628
- deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
629
- activatedMembersButton: "ntm-members-menubar-active-block",
630
- columnCheckBox: "neeto-ui-columns-checkbox",
631
- roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
632
- teamMembersTable: "ntm-members-table",
633
- dropDownIcon: "ntm-members-table-row-dropdown-button",
634
- editButton: "ntm-edit-member-button",
635
- menuBarHeading: "ntm-members-menubar-heading",
636
- removeMember: "ntm-deactivate-member-button",
637
- columnsButton: "columns-dropdown-button",
638
- columnsDropdownContainer: "columns-dropdown-container",
639
- emailDropdownItemLabel: "email-checkbox-label",
640
- roleDropdownItemLabel: "role-checkbox-label",
641
- inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
642
- heading: "ntm-manage-members-pane-header",
643
- activateButton: "ntm-activate-members-button",
644
- deactivateButton: "ntm-deactivate-members-button",
645
- rolesButton: "ntm-manage-member-roles-button",
646
- statusTag: "ntm-member-status-tag",
647
- menubarSubLink: (sublink) => `members-${sublink}-block-sub-link`,
648
- takeActionStateOption: (option = "") => `ntm-${hyphenize(option)}-members-button`,
649
- checkboxLabel: (label) => `${hyphenize(label)}-checkbox-label`,
650
- subscriptionPlanTag: "ntm-member-subscription-plan-tag",
651
- memberNameCell: (nameOrEmail) => `ntm-member-name-${hyphenize(nameOrEmail)}`,
652
- };
653
- const MEMBER_FORM_SELECTORS = {
654
- emailTextField: "email-select-input-field",
655
- firstNameTextField: "ntm-edit-member-first-name-text-field",
656
- lastNameTextField: "ntm-edit-member-last-name-text-field",
657
- emailInput: "ntm-manage-member-email-input",
658
- emailErrorField: "emails-input-error",
659
- cancelButton: "ntm-manage-member-cancel-button",
660
- };
661
-
662
- const PROFILE_SECTION_SELECTORS = {
663
- profileSectionButton: "profile-section",
664
- profilePopup: "profile-popup",
665
- myProfileButton: "my-profile-button",
666
- profileOrganizationSettingsButton: "profile-organization-settings-button",
667
- logoutButton: "profile-logout-button",
668
- neetoAuthLink: "ntm-visit-auth-button",
669
- profileSidebarCancelButton: "ntm-profile-cancel-button",
670
- profileAvatar: "profile-avatar",
671
- actionHeaderUserEmail: "floating-action-menu-header-user-email",
672
- submitButton: "ntm-profile-submit-button",
673
- };
674
-
675
- const ROLES_SELECTORS = {
676
- newButton: "ntm-add-role-button",
677
- proceedButton: "ntm-add-role-submit-button",
678
- cancelButton: "ntm-add-role-cancel-button",
679
- tableHeaderRoleName: "ntm-roles-table-role-header",
680
- nameTextField: "ntm-add-role-name-text-field",
681
- searchTextField: "ntm-search-roles-input",
682
- updateRolePaneHeading: "ntm-add-role-title",
683
- updateRoleCancelButton: "ntm-add-role-cancel-button",
684
- descriptionTextField: "ntm-add-role-description-text-field",
685
- permissionCategoryTitle: "ntm-roles-permission-category-title",
686
- headerColumn: "ntm-roles-table-header",
687
- dropDownIcon: "ntm-roles-table-header-role-dropdown-button",
688
- tableHeaderRoleTitle: "ntm-roles-table-header-role-title",
689
- permissionCheckbox: "ntm-roles-permission-checkbox",
690
- editRoleButton: "ntm-roles-table-edit-role-button",
691
- deleteRoleButton: "ntm-roles-table-delete-role-button",
692
- permissionCard: "ntm-roles-permission-card",
693
- searchPermissionsInput: "ntm-search-permissions-input",
694
- permissionDescription: "ntm-permission-category-description",
695
- rolesEditButton: "ntm-roles-table-edit-role-button",
696
- };
697
-
698
- const SIGNUP_SELECTORS = {
699
- emailTextField: "signup-email-text-field",
700
- firstNameTextField: "signup-profile-first-name-text-field",
701
- lastNameTextField: "signup-profile-last-name-text-field",
702
- organizationNameTextField: "signup-organization-name-text-field",
703
- organizationSubmitButton: "signup-organization-submit-button",
704
- otpTextBox: "otpinput-otp-number",
705
- profileSubmitButton: "signup-profile-submit-button",
706
- signupViaEmailButton: "signup-via-email-button",
707
- submitButton: "signup-email-submit-button",
708
- subdomainNameTextField: "signup-organization-subdomain-text-field",
709
- subdomainError: "subdomain-input-error",
710
- tryFreeButton: "neeto-auth-signup-link",
711
- unregisterdEmailError: "unregisterd-email-error",
712
- };
713
-
714
- const TAB_SELECTORS = {
715
- configureTab: "configure-tab",
716
- buildTab: "build-tab",
717
- themeTab: "theme-tab",
718
- shareTab: "share-tab",
719
- submissionsTab: "submissions-tab",
720
- paymentsTab: "payments-tab",
721
- settingsTab: "settings-tab",
722
- };
723
-
724
- const TAGS_SELECTORS = {
725
- newTagButton: "add-new-tag-button",
726
- tagNameTextField: "tag-name-text-field",
727
- editButton: "tags-edit-button",
728
- deleteButton: "tags-delete-button",
729
- cancelButton: "neeto-tags-manage-tag-cancel-button",
730
- submitButton: "neeto-tags-manage-tag-submit-button",
731
- searchTextField: "neeto-tags-search-text-input-field",
732
- descriptionTextArea: "tag-description-text-area",
733
- addTagButton: "neeto-tags-add-tag-button",
734
- tagSearchField: "select-tag-container",
735
- deleteTagButton: "tag-close-icon",
736
- metaDataCard: "metadata-card",
737
- metaDataBlock: "metadata-block",
738
- tagContainer: "tag-container",
739
- tagsCount: "neeto-tags-filtered-tags-count-text",
740
- };
741
- const MERGE_TAGS_SELECTORS = {
742
- mergeTagsButton: "neeto-tags-merge-tags-button",
743
- mergeButton: "neeto-tags-merge-button",
744
- sourceSearchTextField: "neeto-tags-merge-source-search-text-input-field",
745
- sourceTagsList: "neeto-tags-merge-source-tags-list",
746
- destinationTagsList: "neeto-tags-merge-destination-tags-list",
747
- destinationSearchTextField: "neeto-tags-merge-destination-search-text-input-field",
748
- cancelButton: "neeto-tags-merge-cancel-button",
749
- proceedButton: "neeto-tags-merge-proceed-button",
750
- disabledTag: ".neeto-ui-cursor-not-allowed",
751
- sourceTagRow: "neeto-tags-merge-source-tags",
752
- destinationTagRow: "neeto-tags-merge-destination-tags",
753
- };
754
-
755
- const CHAT_WIDGET_SELECTORS = {
756
- iframe: "#neetochat-iframe",
757
- spinner: ".neeto-chat-widget-spinner",
758
- helpButton: "help-button",
759
- preChatEmailInput: "neeto-chat-widget-input",
760
- preChatSubmitButton: "neeto-chat-widget-pre-chat-submit-btn",
761
- chatBubble: "neeto-chat-widget-chat-message-bubble",
762
- closeChat: "neeto-chat-widget-close-btn",
763
- chatQuestionHeader: "chat-question-header",
764
- openChat: "neeto-chat-widget-open-btn",
765
- homeScreenSubtitle: "neeto-chat-widget-home-screen-subtitle",
766
- };
767
- const CHANGELOG_WIDGET_SELECTORS = {
768
- changelogWrapper: ".ne-widget__wrapper",
769
- closeButton: "ne-widget-close-btn",
770
- publicUrlLink: "ne-widget-public-url",
771
- };
772
- const KEYBOARD_SHORTCUTS_SELECTORS = {
773
- keyboardShortcutsPane: "keyboard-shortcuts-pane",
774
- closePaneButton: "keyboard-shortcuts-pane-close-button",
775
- hotKeyItem: "hotkey-item",
776
- };
777
-
778
- const INTEGRATION_SELECTORS = {
779
- integrationCard: (integration) => `${integration}-integration-card`,
780
- connectButton: "connect-button",
781
- integrationStatusTag: "integration-status-tag",
782
- disconnectButton: "disconnect-button",
783
- manageButton: "manage-button",
784
- integrationConnectedTag: "integration-connected-tag",
785
- };
786
-
787
- const GOOGLE_LOGIN_SELECTORS = {
788
- totpNext: "#totpNext",
789
- form: "form",
790
- totpChallengeSelector: '[data-challengeid="2"]',
791
- signOutFrameLocator: 'iframe[name="account"]',
792
- };
793
-
794
- const dataQa = (value) => `[data-qa='${value}']`;
795
- const SLACK_SELECTORS = {
796
- messageContainer: dataQa("message_container"),
797
- loginEmail: dataQa("login_email"),
798
- loginPassword: dataQa("login_password"),
799
- signInButton: dataQa("signin_button"),
800
- teamPicketButtonContent: dataQa("team-picker-button-content"),
801
- redirectOpenInBrowser: dataQa("ssb_redirect_open_in_browser"),
802
- workspaceActionsButton: dataQa("workspace_actions_button"),
803
- teamMenuTrigger: dataQa("team-menu-trigger"),
804
- menuItemButton: "menu_item_button",
805
- threadsFlexpane: "threads_flexpane",
806
- replyBar: "reply_bar",
807
- markdownElement: "bk_markdown_element",
808
- virtualListItem: "virtual-list-item",
809
- channelItems: '[role="treeitem"][data-qa="virtual-list-item"]',
810
- };
811
- const SLACK_DATA_QA_SELECTORS = {
812
- sectionHeadingButton: "section_heading_button__channels",
813
- coachMarkCloseButton: "coachmark-close-button",
814
- messagePaneBannerCloseIcon: "message_pane_banner_close_icon",
815
- permissionBannerCloseIcon: "banner_close_btn",
816
- channelSectionSubmenuCreate: "channel_section_submenu_create",
817
- channelSectionMenuCreateChannel: "channel_section_menu__create_channel",
818
- skModalContent: "sk-modal-content",
819
- infiniteSpinner: "infinite-spinner",
820
- channelNameOptionsList: "channel-name-options-list",
821
- channelNameInput: "channel-name-input",
822
- createChannelNextButton: "create-channel-next-button",
823
- inviteToWorkspaceSkipButton: "invite_to_workspace_skip_button",
824
- menuItems: "menu_items",
825
- channelDetailsModal: "channel_details_modal",
826
- channelDetailsSettingsTab: "channel_details_settings_tab",
827
- };
828
-
829
- const WEBHOOK_SELECTORS = {
830
- addNewWebhook: "add-new-webhook-button",
831
- endpointInputField: "endpoint-input-field",
832
- deliveryResponseCode: "delivery-response-code",
833
- deliveryRequestPayload: "delivery-request-payload",
834
- addSecretKey: "add-secret-key",
835
- newWebhookHeader: "add-new-webhook-pane-header",
836
- endpointInputError: "endpoint-input-error",
837
- eventsSelectError: "events-select-error",
838
- regenerateSecret: "regenerate-secret",
839
- deleteSecret: "delete-secret",
840
- editWebhookButton: "neeto-webhooks-edit-button",
841
- deleteWebhookButton: "neeto-webhooks-delete-button",
842
- };
843
-
844
- const ZAPIER_SELECTORS = {
845
- zapTriggerStep: (zapId) => `[data-testid='step-node-${zapId}']`,
846
- zapAccountSubstep: "[data-testid='substep-Account']",
847
- zapOpenSubstepContainer: "[data-testid='open-sub-step-container']",
848
- modal: "[data-testid='Modal']",
849
- fmPrettytext: ".fm-prettytext",
850
- spinner: "[data-testid='spinner']",
851
- skeletonBlock: "[data-testid='SkeletonBlock']",
852
- accountsLoader: "[data-testid='accounts-loader']",
853
- floatingBox: "[data-testid='floating-box']",
854
- connection: "[data-testid='Connection']",
855
- deleteConnectionModal: "[data-testid='DeleteAuthModal-root']",
856
- deleteConnectionDropdownButton: "[data-testid='connection-list-item-dropdown-item-Delete']",
857
- usageAmounts: "css=[class$=UsageBar__amounts]",
858
- universalSidebar: "[data-testid='universalSidebar']",
859
- sidebarFooter: "css=[class$=InAppSidebarFooter__footerWrapper]",
860
- contextualSideBar: "[data-testid='contextual-sidebar']",
861
- iconContainer: "[data-testid='iconContainer']",
862
- deleteApiButton: "delete-apikey-button",
863
- zapierSubLink: "zapier-sub-link",
864
- };
865
-
866
- const TABLE_SELECTORS = {
867
- freezeUnfreezeButton: "freeze-unfreeze-column-menu-button",
868
- ascendingButton: "ascending-column-menu-button",
869
- descendingButton: "descending-column-menu-button",
870
- hideButton: "hide-column-menu-button",
871
- columnHeaderTitle: (columnName) => `${neetoCist.hyphenate(columnName)}-header-title`,
872
- columnMenuButton: "column-menu-button",
873
- };
874
-
875
- const THEMES_SELECTORS = {
876
- colorPickerDropdownContainer: (colorHex) => `${colorHex}-dropdown-container`,
877
- baseThemeStyle: (styleType) => `theme-style-${neetoCist.hyphenate(styleType)}`,
878
- introPageThemeStyle: (styleType) => `intro-page-theme-style-${neetoCist.hyphenate(styleType)}`,
879
- };
880
-
881
- const ADMIN_PANEL_SELECTORS = {
882
- settingsItemHeading: "settings-item-heading",
883
- settingsItemDescription: "settings-item-description",
884
- expiryDateInput: "expiry-date-input",
885
- };
886
- const CUSTOM_DOMAIN_SELECTORS = {
887
- addCustomDomainButton: "add-new-custom-domain-button",
888
- customDomainInputField: "custom-domain-input-field",
889
- submitCustomDomainButton: "submit-custom-domain-button",
890
- customDomainValidateButton: "validate-domain-button",
891
- editCustomDomainButton: "edit-custom-domain-button",
892
- deleteCustomDomainButton: "delete-custom-domain-button",
893
- dropdownButton: "custom-domains-more-dropdown-button",
894
- activeTagContainer: "active-tag-container",
895
- };
896
- const API_KEYS_SELECTORS = {
897
- editApiKeyButton: "api-key-edit-button",
898
- deleteApiKeyButton: "api-key-delete-button",
899
- addApiKeyButton: "add-api-key-button",
900
- apiKeysLabelField: "api-keys-label-field",
901
- apiKeysExpiresAtField: "api-keys-expires-at-field",
902
- expiryDateInputError: "expiry-date-input-error",
903
- expiryDateInput: "expiry-date-input",
904
- apiKeysField: "api-keys-label-field",
905
- tokenField: "api-keys-token-field",
906
- expiresAtField: "api-keys-expires-at-field",
907
- createdAtField: "api-keys-created-at-field",
908
- };
909
-
910
- const DATE_PICKER_SELECTORS = {
911
- pickerInput: "picker-input",
912
- datePicker: "date-picker",
913
- timePicker: "time-picker",
914
- nextYearButton: "next-year-button",
915
- prevYearButton: "prev-year-button",
916
- };
917
-
918
- const mimeTypeMap = {
919
- csv: "text/csv",
920
- avi: "video/x-msvideo",
921
- doc: "application/msword",
922
- docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
923
- flv: "video/x-flv",
924
- html: "text/html",
925
- mp3: "audio/mpeg",
926
- mp4: "video/mp4",
927
- mpg: "video/mpeg",
928
- pdf: "application/pdf",
929
- rtf: "application/rtf",
930
- txt: "text/plain",
931
- webm: "video/webm",
932
- xls: "application/vnd.ms-excel",
933
- xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
934
- wma: "audio/x-ms-wma",
935
- zip: "application/zip",
936
- jpg: "image/jpeg",
937
- jpeg: "image/jpeg",
938
- png: "image/png",
939
- gif: "image/gif",
940
- };
941
- const fillRandomBytes = (byteArray) => {
942
- const CHUNK_SIZE = 65536; //Maximum allowed per call by crypto.getRandomValues.
943
- for (let i = 0; i < byteArray.length; i += CHUNK_SIZE) {
944
- crypto.getRandomValues(byteArray.subarray(i, i + CHUNK_SIZE));
945
- }
946
- };
947
- const serializeFileForBrowser = async (file) => {
948
- const buffer = await file.arrayBuffer();
949
- return {
950
- name: file.name,
951
- type: file.type,
952
- lastModified: file.lastModified,
953
- buffer: Array.from(new Uint8Array(buffer)),
954
- };
955
- };
956
- const generateRandomFile = ({ sizeInKB, fileType, fileName = `sample.${fileType}`, }) => {
957
- const mimeType = mimeTypeMap[fileType];
958
- const byteArray = new Uint8Array(sizeInKB * 1024);
959
- fillRandomBytes(byteArray);
960
- const blob = new Blob([byteArray], { type: mimeType });
961
- const file = new File([blob], fileName, { type: mimeType });
962
- return { file, fileName };
963
- };
964
-
965
127
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
966
128
 
967
129
  function getDefaultExportFromCjs (x) {
@@ -1164,12 +326,12 @@ var implementation = implementation$1;
1164
326
 
1165
327
  var functionBind = Function.prototype.bind || implementation;
1166
328
 
1167
- var call = Function.prototype.call;
1168
- var $hasOwn = Object.prototype.hasOwnProperty;
1169
- var bind$3 = functionBind;
329
+ var call$1 = Function.prototype.call;
330
+ var $hasOwn$1 = Object.prototype.hasOwnProperty;
331
+ var bind$4 = functionBind;
1170
332
 
1171
333
  /** @type {(o: {}, p: PropertyKey) => p is keyof o} */
1172
- var hasown = bind$3.call(call, $hasOwn);
334
+ var hasown$2 = bind$4.call(call$1, $hasOwn$1);
1173
335
 
1174
336
  var undefined$2;
1175
337
 
@@ -1392,13 +554,13 @@ var LEGACY_ALIASES$1 = {
1392
554
  '%WeakSetPrototype%': ['WeakSet', 'prototype']
1393
555
  };
1394
556
 
1395
- var bind$2 = functionBind;
1396
- var hasOwn$5 = hasown;
1397
- var $concat$2 = bind$2.call(Function.call, Array.prototype.concat);
1398
- var $spliceApply$1 = bind$2.call(Function.apply, Array.prototype.splice);
1399
- var $replace$2 = bind$2.call(Function.call, String.prototype.replace);
1400
- var $strSlice$1 = bind$2.call(Function.call, String.prototype.slice);
1401
- var $exec$1 = bind$2.call(Function.call, RegExp.prototype.exec);
557
+ var bind$3 = functionBind;
558
+ var hasOwn$5 = hasown$2;
559
+ var $concat$2 = bind$3.call(Function.call, Array.prototype.concat);
560
+ var $spliceApply$1 = bind$3.call(Function.apply, Array.prototype.splice);
561
+ var $replace$2 = bind$3.call(Function.call, String.prototype.replace);
562
+ var $strSlice$1 = bind$3.call(Function.call, String.prototype.slice);
563
+ var $exec$1 = bind$3.call(Function.call, RegExp.prototype.exec);
1402
564
 
1403
565
  /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
1404
566
  var rePropName$1 = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
@@ -1531,6 +693,22 @@ var getIntrinsic$2 = function GetIntrinsic(name, allowMissing) {
1531
693
 
1532
694
  var callBind$1 = {exports: {}};
1533
695
 
696
+ var hasown$1;
697
+ var hasRequiredHasown;
698
+
699
+ function requireHasown () {
700
+ if (hasRequiredHasown) return hasown$1;
701
+ hasRequiredHasown = 1;
702
+
703
+ var call = Function.prototype.call;
704
+ var $hasOwn = Object.prototype.hasOwnProperty;
705
+ var bind = functionBind;
706
+
707
+ /** @type {(o: {}, p: PropertyKey) => p is keyof o} */
708
+ hasown$1 = bind.call(call, $hasOwn);
709
+ return hasown$1;
710
+ }
711
+
1534
712
  var getIntrinsic$1;
1535
713
  var hasRequiredGetIntrinsic;
1536
714
 
@@ -1760,7 +938,7 @@ function requireGetIntrinsic () {
1760
938
  };
1761
939
 
1762
940
  var bind = functionBind;
1763
- var hasOwn = hasown;
941
+ var hasOwn = requireHasown();
1764
942
  var $concat = bind.call(Function.call, Array.prototype.concat);
1765
943
  var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
1766
944
  var $replace = bind.call(Function.call, String.prototype.replace);
@@ -1922,6 +1100,13 @@ function requireEsDefineProperty () {
1922
1100
  return esDefineProperty;
1923
1101
  }
1924
1102
 
1103
+ var call = Function.prototype.call;
1104
+ var $hasOwn = Object.prototype.hasOwnProperty;
1105
+ var bind$2 = functionBind;
1106
+
1107
+ /** @type {(o: {}, p: PropertyKey) => p is keyof o} */
1108
+ var hasown = bind$2.call(call, $hasOwn);
1109
+
1925
1110
  var undefined$1;
1926
1111
 
1927
1112
  var $SyntaxError$1 = SyntaxError;
@@ -4050,6 +3235,844 @@ var lib$e = {
4050
3235
 
4051
3236
  var qs$1 = /*@__PURE__*/getDefaultExportFromCjs(lib$e);
4052
3237
 
3238
+ const COMMON_SELECTORS = {
3239
+ emailInputError: "email-input-error",
3240
+ pane: "pane-wrapper",
3241
+ sideBar: "sidebar",
3242
+ copyButton: "copy-button",
3243
+ resetButton: "reset-button",
3244
+ spinner: ".neeto-ui-spinner",
3245
+ uiSpinner: "neeto-ui-spinner",
3246
+ subheaderText: "subheader-left",
3247
+ alertTitle: "alert-title",
3248
+ alertModalMessage: "alert-message",
3249
+ alertModalSubmitButton: "alert-submit-button",
3250
+ checkbox: "nui-checkbox-input",
3251
+ checkboxLabel: "nui-checkbox-label",
3252
+ dropdownContainer: "nui-dropdown-container",
3253
+ dropdownIcon: "nui-dropdown-icon",
3254
+ heading: "main-header",
3255
+ paneBody: "pane-body",
3256
+ paneHeader: "pane-header",
3257
+ profileSidebar: "profile-section",
3258
+ selectOption: (label) => `${neetoCist.hyphenate(label)}-select-option`,
3259
+ radioLabel: (embedLabel) => `${neetoCist.hyphenate(embedLabel)}-radio-label`,
3260
+ toastMessage: (type) => `toastr-${type}-container`,
3261
+ toastCloseButton: "toastr-close-button",
3262
+ windowAlert: "#alert-box",
3263
+ body: "body",
3264
+ toastIcon: ".Toastify__toast-icon",
3265
+ toastContainer: ".Toastify__toast-container",
3266
+ paneModalCrossIcon: "pane-close-button",
3267
+ inputField: "nui-input-field",
3268
+ alertBox: "alert-box",
3269
+ tableContainer: "table-container",
3270
+ alertConfirmationText: "alert-confirmation-text",
3271
+ alertCancelButton: "alert-cancel-button",
3272
+ alertModalCrossIcon: "modal-close-button",
3273
+ saveChangesButton: "save-changes-button",
3274
+ cancelButton: "cancel-button",
3275
+ inputFieldError: "nui-input-error",
3276
+ selectDropDownError: "nui-select-error",
3277
+ subTitleHeading: "menubar-subtitle-heading",
3278
+ noDataTitle: "no-data-title",
3279
+ noDataDescription: "no-data-description",
3280
+ noDataHelpText: "no-data-help-text",
3281
+ backdrop: "neeto-backdrop",
3282
+ menuBarHeading: "menubar-heading",
3283
+ dropdownWrapper: "nui-select-container-wrapper",
3284
+ toggleButton: "menubar-toggle-button",
3285
+ tooltip: "tooltip-box",
3286
+ articlePageTitle: ".serene-article__title",
3287
+ tabItem: "tab-item",
3288
+ labelInputError: "label-input-error",
3289
+ urlInputError: "url-input-error",
3290
+ noDataPrimaryButton: "no-data-primary-button",
3291
+ modalHeader: "modal-header",
3292
+ nameInputError: "name-input-error",
3293
+ selectContainer: "nui-select-container",
3294
+ dropdownMenu: "nui-select-menu",
3295
+ sidebarToggle: "neeto-molecules-sidebar-toggler",
3296
+ subheader: "subheader",
3297
+ settingsLink: "Settings",
3298
+ ticketFieldTextInput: (label) => `${neetoCist.hyphenate(label)}-text-input`,
3299
+ appSwitcherButton: "product-switcher-button",
3300
+ appSwitcherWrapper: "switcher-wrapper",
3301
+ appLink: (appName) => `${appName}-app-link`,
3302
+ tableSpinner: ".ant-spin",
3303
+ pageLoader: "neeto-molecules-pageloader",
3304
+ homeButton: "home-button",
3305
+ neetoUiSwitch: "nui-switch",
3306
+ floatingActionMenuButton: "floating-action-menu-container",
3307
+ columnsDropdownContainer: "show/hide-columns-dropdown-container",
3308
+ columnsDropdownButton: "columns-dropdown-button",
3309
+ breadcrumbHeader: "header-breadcrumb",
3310
+ header: "neeto-molecules-header",
3311
+ sidebarSubLink: (label) => `${neetoCist.hyphenate(label)}-sub-link`,
3312
+ sidebarGoBackButton: (label) => `${neetoCist.hyphenate(label)}-go-back-button`,
3313
+ selectSingleValue: "select-single-value",
3314
+ actionSelectIndicator: "action-select-indicator",
3315
+ takeActionDropdown: "take-action-dropdown-icon",
3316
+ columnsSearchInput: "neeto-ui-columns-search",
3317
+ errorToastIcon: "error-toast-icon",
3318
+ nuiRadioLabel: "nui-radio-label",
3319
+ submitButton: "submit-button",
3320
+ tableRow: ".ant-table-row",
3321
+ navigationHeaderLeftBlock: "navigation-header-left-block",
3322
+ fileUploadBody: "file-upload-body",
3323
+ modalBody: "modal-body",
3324
+ modalForever: "modal-footer",
3325
+ navigationHeader: "navigation-header",
3326
+ buttonSpinner: ".neeto-ui-btn__spinner",
3327
+ pendingTagContainer: "pending-tag-container",
3328
+ nextYearButton: "next-year-button",
3329
+ popoverTitle: "popover-title",
3330
+ productSwitcherSearchInput: "product-switcher-search-input",
3331
+ helpPopoverButton: "help-popover-button",
3332
+ helpPopoverDesc: "help-popover-description",
3333
+ helpPopoverLinkButton: "help-popover-link-button",
3334
+ copyToClipboardButton: "copy-to-clipboard-button",
3335
+ subheaderRight: "subheader-right",
3336
+ secretKeyInputField: "secret-key-input-field",
3337
+ activeSwitch: "active-switch",
3338
+ labelInputField: "label-input-field",
3339
+ imageUploadModal: "tab-container",
3340
+ neetoLogo: "sidebar-info",
3341
+ clearSelectIndicator: "clear-select-indicator",
3342
+ menubarContainer: "menubar-container",
3343
+ multiEmailInputContainer: "multi-email-input-container",
3344
+ linkInputError: "link-input-error",
3345
+ continueButton: "continue-button",
3346
+ clearAllButton: "clear-all-button",
3347
+ requiredSwitch: "required-switch",
3348
+ customSwitch: (switchLabel) => `${neetoCist.hyphenate(switchLabel)}-switch`,
3349
+ customMenuItem: (label) => `${neetoCist.hyphenate(label)}-menu-item`,
3350
+ customInputLabel: (name = "nui") => `${neetoCist.hyphenate(name)}-input-label`,
3351
+ customInputField: (name = "nui") => `${neetoCist.hyphenate(name)}-input-field`,
3352
+ customSelectContainer: (name) => `${neetoCist.hyphenate(name)}-select-container`,
3353
+ customSelectContainerWrapper: (label) => `${neetoCist.hyphenate(label)}-select-container-wrapper`,
3354
+ customSelectValueContainer: (label = "nui") => `${neetoCist.hyphenate(label)}-select-value-container`,
3355
+ customCheckboxLabel: (name) => `${neetoCist.hyphenate(name)}-checkbox-label`,
3356
+ errorImage: "error-image",
3357
+ customDropdownIcon: (label = "nui") => `${neetoCist.hyphenate(label)}-dropdown-icon`,
3358
+ customDropdownContainer: (label = "nui") => `${neetoCist.hyphenate(label)}-dropdown-container`,
3359
+ checkboxInput: (option = "i-agree") => `${neetoCist.hyphenate(option)}-checkbox-input`,
3360
+ radioInput: (option = "i-agree") => `${neetoCist.hyphenate(option)}-radio-input`,
3361
+ selectOptionError: (option) => `${neetoCist.hyphenate(option)}-select-error`,
3362
+ customDropDownMenu: (label = "nui") => `${neetoCist.hyphenate(label)}-select-menu`,
3363
+ };
3364
+
3365
+ const THANK_YOU_SELECTORS = {
3366
+ settingsLink: "thank-you-settings-link",
3367
+ showSocialShareIconsSwitch: "show-social-share-icons-switch",
3368
+ showLinkToSubmitAnotherResponseSwitch: "show-link-to-submit-another-response-switch",
3369
+ submitAnotherResponseLinkTextInputField: "submit-another-response-link-text-input-field",
3370
+ previewEditorContent: "preview-editor-content",
3371
+ redirectToExternalLinkRadioLabel: () => "neeto-thank-you-configuration-redirect-to-url-label",
3372
+ thankYouConfigurationLabel: (label = "custom-message") => `neeto-thank-you-configuration-${label}-label`,
3373
+ saveChangesButton: "neeto-thank-you-configuration-save-button",
3374
+ cancelButton: "neeto-thank-you-configuration-cancel-button",
3375
+ thankYouPageImage: "thank-you-page-image",
3376
+ thankYouPageMessage: "thank-you-page-message",
3377
+ thankYouPageContent: "thank-you-page-content",
3378
+ thankYouPageResubmitLink: "thank-you-page-resubmit-link",
3379
+ linkInputField: "link-input-field",
3380
+ previewImage: "preview-image",
3381
+ thankYouMessageEditor: "thank-you-message-editor",
3382
+ thankYouMessageWrapper: "thank-you-message-wrapper",
3383
+ };
3384
+
3385
+ const ENVIRONMENT = {
3386
+ development: "development",
3387
+ staging: "staging",
3388
+ review: "review",
3389
+ };
3390
+ const IS_STAGING_ENV = process.env.TEST_ENV === "staging";
3391
+ const STORAGE_STATE = "./e2e/auth/user.json";
3392
+ const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
3393
+ const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
3394
+ const CREDENTIALS = {
3395
+ name: "Oliver Smith",
3396
+ email: "oliver@example.com",
3397
+ password: "welcome",
3398
+ };
3399
+ const OTP_EMAIL_PATTERN = "is your login code";
3400
+ const SLACK_DEFAULT_CHANNEL = "general";
3401
+ const CUSTOM_DOMAIN_SUFFIX = "aceinvoice.com";
3402
+ const ZAPIER_TEST_EMAIL = (product) => `neeto-${product}-zapier-test@${process.env.FASTMAIL_DOMAIN_NAME}`;
3403
+ // constants for translation
3404
+ const SINGULAR = { count: 1 };
3405
+ const PLURAL = { count: 2 };
3406
+ const COLOR = {
3407
+ transparent: "rgba(0, 0, 0, 0)",
3408
+ softBlue: "rgb(230, 244, 255)",
3409
+ };
3410
+ const DATE_TEXTS = { now: "Now", nextYear: "next-year" };
3411
+ const EMPTY_STORAGE_STATE = {
3412
+ storageState: { cookies: [], origins: [] },
3413
+ };
3414
+
3415
+ /* eslint-disable playwright/no-skipped-test */
3416
+ const execCommand = (command) => child_process.execSync(command)
3417
+ .toString("utf-8")
3418
+ .replace(/[\n\r\s]+$/, "");
3419
+ const joinString = (string1, string2, string3 = "", separator = " ") => {
3420
+ if (string3 === "") {
3421
+ return string1 + separator + string2;
3422
+ }
3423
+ return string1 + separator + string2 + separator + string3;
3424
+ };
3425
+ const readFileSyncIfExists = (path = STORAGE_STATE) => {
3426
+ try {
3427
+ return JSON.parse(fs__namespace.readFileSync(path, "utf8"));
3428
+ }
3429
+ catch (_a) {
3430
+ return {};
3431
+ }
3432
+ };
3433
+ const getGlobalUserState = () => { var _a; return (_a = readFileSyncIfExists()) === null || _a === void 0 ? void 0 : _a.user; };
3434
+ const writeDataToFile = data => {
3435
+ try {
3436
+ fs__namespace.writeFileSync(STORAGE_STATE, data, "utf8");
3437
+ }
3438
+ catch (error) {
3439
+ console.log(error); // eslint-disable-line
3440
+ }
3441
+ return true;
3442
+ };
3443
+ const updateCredentials = ({ key, value }) => {
3444
+ const data = readFileSyncIfExists();
3445
+ data["user"][key] = value;
3446
+ return writeDataToFile(JSON.stringify(data));
3447
+ };
3448
+ const removeCredentialFile = () => {
3449
+ fs__namespace.unlink(STORAGE_STATE, error => {
3450
+ if (!error)
3451
+ return;
3452
+ console.log(error); // eslint-disable-line
3453
+ });
3454
+ };
3455
+ const clearCredentials = () => {
3456
+ if (shouldSkipSetupAndTeardown())
3457
+ return;
3458
+ removeCredentialFile();
3459
+ };
3460
+ /**
3461
+ * @deprecated Use hyphenate from neeto-cist instead.
3462
+ */
3463
+ const hyphenize = input => {
3464
+ const fallbackString = "";
3465
+ if (typeof input === "number")
3466
+ return String(input);
3467
+ if (input && typeof input === "string" && input.replace) {
3468
+ return input
3469
+ .replace(/[\s_]/g, "-")
3470
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
3471
+ .replace(/-+/g, "-")
3472
+ .toLowerCase();
3473
+ }
3474
+ return fallbackString;
3475
+ };
3476
+ const joinHyphenCase = (...args) => args.join(" ").replace(/\s+/g, "-").toLowerCase();
3477
+ const skipTest = {
3478
+ forDevelopmentEnv: () => test$1.skip(process.env.TEST_ENV === ENVIRONMENT.development),
3479
+ forReviewEnv: () => test$1.skip(process.env.TEST_ENV === ENVIRONMENT.review),
3480
+ forAllExceptStagingEnv: () => test$1.skip(process.env.TEST_ENV !== ENVIRONMENT.staging),
3481
+ forNonNightlyRun: () => {
3482
+ const currentBranch = execCommand("git rev-parse --abbrev-ref HEAD");
3483
+ const isNightlyRun = currentBranch === "main" &&
3484
+ process.env.TEST_ENV === ENVIRONMENT.staging &&
3485
+ !!process.env.NEETO_CI_JOB_ID;
3486
+ return test$1.skip(ramda.not(isNightlyRun), "Run test only in playwright-nightly");
3487
+ },
3488
+ ifNotWithinAllowedNightlyHours: ({ reason, allowedNightlyRunHours = [0, 6, 12, 18], }) => {
3489
+ skipTest.forNonNightlyRun();
3490
+ const currentDate = new Date();
3491
+ const day = currentDate.getUTCDay();
3492
+ const hour = currentDate.getUTCHours();
3493
+ const isAllowedNightlyRun = 0 < day && day < 6 && allowedNightlyRunHours.includes(hour);
3494
+ test$1.skip(ramda.not(isAllowedNightlyRun), `Nightly run is skipped due to ${reason}`);
3495
+ },
3496
+ };
3497
+ const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserState()) === null || _a === void 0 ? void 0 : _a.isLoggedIn) && process.env.SKIP_SETUP === "true"; };
3498
+ const shouldSkipCustomDomainSetup = () => process.env.SETUP_CUSTOM_DOMAIN !== "true" || !IS_STAGING_ENV;
3499
+ const baseURLGenerator = (product, customSubdomain) => {
3500
+ const { subdomainName } = getGlobalUserState();
3501
+ return `https://${customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName}.neeto${product.toLowerCase()}.net`;
3502
+ };
3503
+ // trims and replaces multiple whitespace characters in a string with a single space
3504
+ const squish = (text) => text.trim().replace(/\s+/g, " ");
3505
+ const toCamelCase = (string) => string.toLowerCase().replace(/( \w)/g, letter => letter[1].toUpperCase());
3506
+ const getByDataQA = ramda.curry((page, dataQa) => {
3507
+ if (typeof dataQa === "string") {
3508
+ // eslint-disable-next-line playwright/no-raw-locators
3509
+ return page.locator(`[data-qa='${dataQa}']`);
3510
+ }
3511
+ // eslint-disable-next-line playwright/no-raw-locators
3512
+ return page
3513
+ .locator(`[data-qa='${dataQa[0]}']`)
3514
+ .locator(`[data-qa='${dataQa[1]}']`);
3515
+ });
3516
+ const getListCount = async ({ page, countSelector, }) => {
3517
+ const countText = await page.getByTestId(countSelector).textContent();
3518
+ return Number(countText === null || countText === void 0 ? void 0 : countText.trim().split(" ")[0]);
3519
+ };
3520
+ const getGlobalUserProps = async (page) => (await page.evaluate(() => window.globalProps.user));
3521
+ const getClipboardContent = (page) => page.evaluate(() => navigator.clipboard.readText());
3522
+ const globalShortcuts = (t) => [
3523
+ {
3524
+ description: t("neetoMolecules.keyboardShortcuts.global.openKeyboardShortcutsPane"),
3525
+ sequence: "shift+/",
3526
+ },
3527
+ {
3528
+ description: t("neetoMolecules.keyboardShortcuts.global.close"),
3529
+ sequence: "esc",
3530
+ },
3531
+ {
3532
+ description: t("neetoMolecules.keyboardShortcuts.global.submitForm"),
3533
+ sequence: "ctrl+enter",
3534
+ },
3535
+ ];
3536
+
3537
+ const optionSelector = (option) => `neeto-editor-fixed-menu-${option}-option`;
3538
+ const fixedMenuSelector = (selector) => `neeto-editor-fixed-menu-${selector}`;
3539
+
3540
+ const NEETO_EDITOR_SELECTORS = {
3541
+ fontSize: optionSelector("font-size"),
3542
+ boldOption: optionSelector("bold"),
3543
+ italicOption: optionSelector("italic"),
3544
+ underlineOption: optionSelector("underline"),
3545
+ strikeOption: optionSelector("strike"),
3546
+ codeBlockOption: optionSelector("code"),
3547
+ highlightOption: optionSelector("highlight"),
3548
+ emojiOption: optionSelector("emoji"),
3549
+ emojiDropdownIcon: "emoji-dropdown-icon",
3550
+ linkInput: fixedMenuSelector("link-option-input"),
3551
+ linkSubmitButton: fixedMenuSelector("link-option-link-button"),
3552
+ commandList: (index) => `neeto-editor-command-list-item-${index}`,
3553
+ imageUploadUrlSubmitButton: "neeto-editor-media-upload-url-submit",
3554
+ imageUploadUrlInputTextField: "neeto-editor-media-upload-url-input",
3555
+ uploadInput: "neeto-editor-media-uploader-input",
3556
+ editorMenuBarWrapper: fixedMenuSelector("wrapper"),
3557
+ undoOption: optionSelector("undo"),
3558
+ redoOption: optionSelector("redo"),
3559
+ imageWrapper: "neeto-editor-image-wrapper",
3560
+ contentField: "neeto-editor-content",
3561
+ addLinkButton: optionSelector("link"),
3562
+ addLinkTextField: "neeto-editor-add-link-text-input",
3563
+ addURLTextField: "neeto-editor-add-link-url-input",
3564
+ submitLinkButton: "neeto-editor-add-link",
3565
+ fixedMenuArrow: fixedMenuSelector("arrow"),
3566
+ cannedResponseOption: optionSelector("canned-responses"),
3567
+ cannedResponseSelectContainer: "select-a-canned-response-select-container",
3568
+ fixedMenuWrapper: fixedMenuSelector("wrapper"),
3569
+ linkOption: optionSelector("link"),
3570
+ addLinkUrlInput: "neeto-editor-add-link-url-input",
3571
+ addLinkDoneButton: "neeto-editor-add-link",
3572
+ unlinkButton: "neeto-editor-link-popover-unlink",
3573
+ editorAttachmentsButton: optionSelector("attachments"),
3574
+ attachmentPreviewDeleteButton: "neeto-editor-preview-delete-button",
3575
+ imageUploadOption: optionSelector("image-upload"),
3576
+ imageUploadLinkInput: "neeto-editor-media-upload-url-input",
3577
+ imageUploadButton: "neeto-editor-media-uploader-dnd",
3578
+ imageUploadLinkSubmitButton: "neeto-editor-media-upload-url-submit",
3579
+ applyButton: "apply-button",
3580
+ videoEmbedOption: optionSelector("video-embed"),
3581
+ videoEmbedInput: "neeto-editor-embed-input",
3582
+ videoEmbedSubmit: "neeto-editor-embed-cancel",
3583
+ videoWrapper: "neeto-editor-video-wrapper",
3584
+ paragraphOption: fixedMenuSelector("font-size-option-body2"),
3585
+ attachmentPreview: "ne-attachments-wrapper",
3586
+ imageUploadLinkButton: "neeto-editor-media-uploader-link-tab",
3587
+ errorText: "neeto-editor-error-text",
3588
+ content: "editor-content",
3589
+ imageUploadDeleteButton: "neeto-editor-image-menu-Delete",
3590
+ dynamicVariablesButton: "dynamic-variables-button",
3591
+ emojiContainer: "neeto-editor-emoji-picker",
3592
+ characterCount: "neeto-editor-character-count",
3593
+ tableOption: optionSelector("table"),
3594
+ tableCreateButton: "neeto-editor-fixed-menu-table-option-create-button",
3595
+ videoUploadOption: optionSelector("video-upload"),
3596
+ editorMenuWrapper: "neeto-editor-fixed-menu-wrapper",
3597
+ editorMediaUploaderTab: "neeto-editor-media-uploader-local-tab",
3598
+ dynamicVariableSelector: (variable) => `dynamic-variables-list-item-${joinHyphenCase(variable)}`,
3599
+ neetoEditorFixedMenuFontSize: "neeto-editor-fixed-menu-font-size-option",
3600
+ highlightText: (textColorIndex) => `--neeto-editor-highlight-text-${textColorIndex}`,
3601
+ highlightBg: (bgColorIndex) => `--neeto-editor-highlight-bg-${bgColorIndex}`,
3602
+ };
3603
+ const NEETO_TEXT_MODIFIER_SELECTORS = {
3604
+ strike: optionSelector("strike"),
3605
+ underline: optionSelector("underline"),
3606
+ highlight: optionSelector("highlight"),
3607
+ };
3608
+ const TEXT_MODIFIER_SELECTORS = {
3609
+ bold: optionSelector("bold"),
3610
+ italic: optionSelector("italic"),
3611
+ code: optionSelector("code"),
3612
+ blockquote: optionSelector("blockquote"),
3613
+ codeBlock: optionSelector("codeBlock"),
3614
+ };
3615
+ const LIST_MODIFIER_SELECTORS = {
3616
+ bulletList: optionSelector("bulletList"),
3617
+ orderedList: optionSelector("orderedList"),
3618
+ };
3619
+ const FONT_SIZE_SELECTORS = {
3620
+ h1: fixedMenuSelector("font-size-option-h1"),
3621
+ h2: fixedMenuSelector("font-size-option-h2"),
3622
+ h3: fixedMenuSelector("font-size-option-h3"),
3623
+ h4: fixedMenuSelector("font-size-option-h4"),
3624
+ h5: fixedMenuSelector("font-size-option-h5"),
3625
+ };
3626
+
3627
+ const EMBED_SELECTORS = {
3628
+ iframe: (appName) => `#${appName}-iframe`,
3629
+ modal: (appName) => `#${appName}-modal`,
3630
+ close: (appName) => `#close-${appName}`,
3631
+ loader: (appName) => `#${appName}-loader`,
3632
+ inlineHeightInput: "inline-height-input-field",
3633
+ inlineWidthInput: "inline-width-input-field",
3634
+ inlineElementIdInput: "inline-element-id-input-field",
3635
+ codeBlock: "code-block",
3636
+ previewTab: "preview-tab",
3637
+ htmlTab: "html-tab",
3638
+ buttonTextInput: "button-text-input-field",
3639
+ buttonPositionSelectContainer: "button-position-select-value-container",
3640
+ buttonPositionSelectMenu: "button-position-select-menu",
3641
+ buttonColorLabel: "button-color-label",
3642
+ buttonTextColorLabel: "button-text-color-label",
3643
+ colorPickerTarget: "color-picker-target",
3644
+ colorpickerEditableInput: "colorpicker-editable-input",
3645
+ colorpickerEditableInputTextbox: "colorpicker-editable-input-textbox",
3646
+ showIconCheckbox: "show-icon-checkbox",
3647
+ elementIdInput: "element-id-input-field",
3648
+ previewElementPopupButton: "preview-element-popup-button",
3649
+ embedSelector: (embedType) => `[data-testid="embed-selector-card-${hyphenize(embedType)}"]`,
3650
+ backToEmbedSelectionButton: "back-to-embed-selection-button",
3651
+ };
3652
+
3653
+ const NEETO_FILTERS_SELECTORS = {
3654
+ emailSelectContainer: "email-select-container-wrapper",
3655
+ filterPaneHeading: "neeto-filters-pane-header",
3656
+ neetoFiltersEmailBlock: "neeto-filters-email-block",
3657
+ neetoFiltersRoleBlock: "neeto-filters-role-block",
3658
+ neetoFiltersBarClearButton: "neeto-filters-bar-clear-btn",
3659
+ neetoFiltersNameFilterField: "neeto-filters-name-filter",
3660
+ neetoFilterNameBlock: "neeto-filters-name-block",
3661
+ roleSelectContainer: "role-select-container-wrapper",
3662
+ filterButton: "neeto-filters-toggle-btn",
3663
+ filtersClearButton: "neeto-filters-clear-btn",
3664
+ filterDoneButton: "neeto-filters-done-btn",
3665
+ filteredMembersCount: "ntm-filtered-members-count",
3666
+ allMenubarBlock: "ntm-members-menubar-all-block",
3667
+ filtersEmailFilter: "neeto-filters-email-filter",
3668
+ paneModalCrossIcon: "neeto-filters-close-button",
3669
+ searchTermBlock: "neeto-filters-search-term-block",
3670
+ categoriesFilter: "neeto-filters-categories-filter",
3671
+ filtersSegmentName: "neeto-filters-segment-name",
3672
+ activeSelectContainer: "neeto-filters-status-filter",
3673
+ neetoFiltersFilter: (filterName) => `neeto-filters-${neetoCist.hyphenate(filterName)}-filter`,
3674
+ filtersTermBlock: (filterType = "search-term") => `neeto-filters-${neetoCist.hyphenate(filterType)}-block`,
3675
+ dateRange: (filterName) => `neeto-filters-${neetoCist.hyphenate(filterName)}-date-range`,
3676
+ segmentLabel: (label) => `neeto-filters-segment-block-${neetoCist.hyphenate(label)}`,
3677
+ };
3678
+
3679
+ const HELP_CENTER_SELECTORS = {
3680
+ helpButton: "help-button",
3681
+ documentationButton: "help-link-help-center-button",
3682
+ keyboardShortcutButton: "help-link-keyboard-shortcut-button",
3683
+ chatButton: "help-link-live-chat-button",
3684
+ whatsNewButton: "help-link-engage-button",
3685
+ whatsNewWidgetInfo: "h1",
3686
+ whatsNewWidgetCloseButton: ".ne-widget-header__btn",
3687
+ keyboardShortcutPaneHeading: "keyboard-shortcuts-pane-title",
3688
+ keyboardShortcutPaneCrossIcon: "keyboard-shortcuts-pane-close-button",
3689
+ statusButton: "help-link-status-button",
3690
+ communityButton: "help-link-community-button",
3691
+ };
3692
+
3693
+ const NEETO_IMAGE_UPLOADER_SELECTORS = {
3694
+ imageUploaderWrapper: "image-uploader-wrapper",
3695
+ browseText: "neeto-image-uploader-browse-text",
3696
+ fileInput: "neeto-image-uploader-file-input",
3697
+ uploadedImage: "uploaded-image",
3698
+ uploadNewAsset: "upload-new-asset",
3699
+ basicImageUploaderRemoveButton: "basic-image-uploader-remove-button",
3700
+ removeButton: "image-uploader-remove-button",
3701
+ openImageLibraryButton: "image-uploader-open-image-library-button",
3702
+ openAssetLibraryButton: "open-asset-library-button",
3703
+ imageEditorBackButton: "image-editor-back-button",
3704
+ aspectRatioWidthInput: "aspect-ratio-width-input",
3705
+ aspectRatioHeightInput: "aspect-ratio-height-input",
3706
+ cropSubmitButton: "neeto-image-uploader-crop-submit-button",
3707
+ restrictionMessage: "neeto-image-uploader-restriction-message",
3708
+ progressBar: "neeto-image-uploader-progress-bar",
3709
+ myImagesTab: "neeto-image-uploader-my-images-tab",
3710
+ unsplashTab: "neeto-image-uploader-unsplash-tab",
3711
+ nthLibraryImage: (index) => `niu-library-image-${index}`,
3712
+ nthUnsplashImage: (index) => `niu-unsplash-image-${index}`,
3713
+ unsplashSearchInput: "niu-unsplash-image-picker-search-input",
3714
+ imageEditorUploadedImage: "image-editor-uploaded-image",
3715
+ selectOriginalImageSwitch: "select-original-image-switch",
3716
+ lockAspectRatioSwitch: "lock-aspect-ratio-switch",
3717
+ widthInputField: "width-input-field",
3718
+ heightInputField: "height-input-field",
3719
+ };
3720
+
3721
+ const LOGIN_SELECTORS = {
3722
+ appleAuthenticationButton: "apple-authentication-button",
3723
+ emailTextField: "login-email-text-field",
3724
+ googleAuthenticationButton: "google-authentication-button",
3725
+ githubAuthenticationButton: "github-authentication-button",
3726
+ loginViaEmailButton: "login-via-email-button",
3727
+ passwordTextField: "login-password-text-field",
3728
+ rememberMeCheckBox: "login-remember-me-check-box",
3729
+ submitButton: "login-submit-button",
3730
+ twitterAuthenticationButton: "twitter-authentication-button",
3731
+ };
3732
+
3733
+ const MEMBER_SELECTORS = {
3734
+ membersTab: "members-nav-tab",
3735
+ newButton: "ntm-add-member-button",
3736
+ continueButton: "ntm-manage-member-continue-button",
3737
+ submitButton: "ntm-manage-member-submit-button",
3738
+ searchTextField: "ntm-search-members-input",
3739
+ deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
3740
+ activatedMembersButton: "ntm-members-menubar-active-block",
3741
+ columnCheckBox: "neeto-ui-columns-checkbox",
3742
+ roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
3743
+ teamMembersTable: "ntm-members-table",
3744
+ dropDownIcon: "ntm-members-table-row-dropdown-button",
3745
+ editButton: "ntm-edit-member-button",
3746
+ menuBarHeading: "ntm-members-menubar-heading",
3747
+ removeMember: "ntm-deactivate-member-button",
3748
+ columnsButton: "columns-dropdown-button",
3749
+ columnsDropdownContainer: "columns-dropdown-container",
3750
+ emailDropdownItemLabel: "email-checkbox-label",
3751
+ roleDropdownItemLabel: "role-checkbox-label",
3752
+ inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
3753
+ heading: "ntm-manage-members-pane-header",
3754
+ activateButton: "ntm-activate-members-button",
3755
+ deactivateButton: "ntm-deactivate-members-button",
3756
+ rolesButton: "ntm-manage-member-roles-button",
3757
+ statusTag: "ntm-member-status-tag",
3758
+ menubarSubLink: (sublink) => `members-${sublink}-block-sub-link`,
3759
+ takeActionStateOption: (option = "") => `ntm-${hyphenize(option)}-members-button`,
3760
+ checkboxLabel: (label) => `${hyphenize(label)}-checkbox-label`,
3761
+ subscriptionPlanTag: "ntm-member-subscription-plan-tag",
3762
+ memberNameCell: (nameOrEmail) => `ntm-member-name-${hyphenize(nameOrEmail)}`,
3763
+ };
3764
+ const MEMBER_FORM_SELECTORS = {
3765
+ emailTextField: "email-select-input-field",
3766
+ firstNameTextField: "ntm-edit-member-first-name-text-field",
3767
+ lastNameTextField: "ntm-edit-member-last-name-text-field",
3768
+ emailInput: "ntm-manage-member-email-input",
3769
+ emailErrorField: "emails-input-error",
3770
+ cancelButton: "ntm-manage-member-cancel-button",
3771
+ };
3772
+
3773
+ const PROFILE_SECTION_SELECTORS = {
3774
+ profileSectionButton: "profile-section",
3775
+ profilePopup: "profile-popup",
3776
+ myProfileButton: "my-profile-button",
3777
+ profileOrganizationSettingsButton: "profile-organization-settings-button",
3778
+ logoutButton: "profile-logout-button",
3779
+ neetoAuthLink: "ntm-visit-auth-button",
3780
+ profileSidebarCancelButton: "ntm-profile-cancel-button",
3781
+ profileAvatar: "profile-avatar",
3782
+ actionHeaderUserEmail: "floating-action-menu-header-user-email",
3783
+ submitButton: "ntm-profile-submit-button",
3784
+ };
3785
+
3786
+ const ROLES_SELECTORS = {
3787
+ newButton: "ntm-add-role-button",
3788
+ proceedButton: "ntm-add-role-submit-button",
3789
+ cancelButton: "ntm-add-role-cancel-button",
3790
+ tableHeaderRoleName: "ntm-roles-table-role-header",
3791
+ nameTextField: "ntm-add-role-name-text-field",
3792
+ searchTextField: "ntm-search-roles-input",
3793
+ updateRolePaneHeading: "ntm-add-role-title",
3794
+ updateRoleCancelButton: "ntm-add-role-cancel-button",
3795
+ descriptionTextField: "ntm-add-role-description-text-field",
3796
+ permissionCategoryTitle: "ntm-roles-permission-category-title",
3797
+ headerColumn: "ntm-roles-table-header",
3798
+ dropDownIcon: "ntm-roles-table-header-role-dropdown-button",
3799
+ tableHeaderRoleTitle: "ntm-roles-table-header-role-title",
3800
+ permissionCheckbox: "ntm-roles-permission-checkbox",
3801
+ editRoleButton: "ntm-roles-table-edit-role-button",
3802
+ deleteRoleButton: "ntm-roles-table-delete-role-button",
3803
+ permissionCard: "ntm-roles-permission-card",
3804
+ searchPermissionsInput: "ntm-search-permissions-input",
3805
+ permissionDescription: "ntm-permission-category-description",
3806
+ rolesEditButton: "ntm-roles-table-edit-role-button",
3807
+ };
3808
+
3809
+ const SIGNUP_SELECTORS = {
3810
+ emailTextField: "signup-email-text-field",
3811
+ firstNameTextField: "signup-profile-first-name-text-field",
3812
+ lastNameTextField: "signup-profile-last-name-text-field",
3813
+ organizationNameTextField: "signup-organization-name-text-field",
3814
+ organizationSubmitButton: "signup-organization-submit-button",
3815
+ otpTextBox: "otpinput-otp-number",
3816
+ profileSubmitButton: "signup-profile-submit-button",
3817
+ signupViaEmailButton: "signup-via-email-button",
3818
+ submitButton: "signup-email-submit-button",
3819
+ subdomainNameTextField: "signup-organization-subdomain-text-field",
3820
+ subdomainError: "subdomain-input-error",
3821
+ tryFreeButton: "neeto-auth-signup-link",
3822
+ unregisterdEmailError: "unregisterd-email-error",
3823
+ };
3824
+
3825
+ const TAB_SELECTORS = {
3826
+ configureTab: "configure-tab",
3827
+ buildTab: "build-tab",
3828
+ themeTab: "theme-tab",
3829
+ shareTab: "share-tab",
3830
+ submissionsTab: "submissions-tab",
3831
+ paymentsTab: "payments-tab",
3832
+ settingsTab: "settings-tab",
3833
+ };
3834
+
3835
+ const TAGS_SELECTORS = {
3836
+ newTagButton: "add-new-tag-button",
3837
+ tagNameTextField: "tag-name-text-field",
3838
+ editButton: "tags-edit-button",
3839
+ deleteButton: "tags-delete-button",
3840
+ cancelButton: "neeto-tags-manage-tag-cancel-button",
3841
+ submitButton: "neeto-tags-manage-tag-submit-button",
3842
+ searchTextField: "neeto-tags-search-text-input-field",
3843
+ descriptionTextArea: "tag-description-text-area",
3844
+ addTagButton: "neeto-tags-add-tag-button",
3845
+ tagSearchField: "select-tag-container",
3846
+ deleteTagButton: "tag-close-icon",
3847
+ metaDataCard: "metadata-card",
3848
+ metaDataBlock: "metadata-block",
3849
+ tagContainer: "tag-container",
3850
+ tagsCount: "neeto-tags-filtered-tags-count-text",
3851
+ };
3852
+ const MERGE_TAGS_SELECTORS = {
3853
+ mergeTagsButton: "neeto-tags-merge-tags-button",
3854
+ mergeButton: "neeto-tags-merge-button",
3855
+ sourceSearchTextField: "neeto-tags-merge-source-search-text-input-field",
3856
+ sourceTagsList: "neeto-tags-merge-source-tags-list",
3857
+ destinationTagsList: "neeto-tags-merge-destination-tags-list",
3858
+ destinationSearchTextField: "neeto-tags-merge-destination-search-text-input-field",
3859
+ cancelButton: "neeto-tags-merge-cancel-button",
3860
+ proceedButton: "neeto-tags-merge-proceed-button",
3861
+ disabledTag: ".neeto-ui-cursor-not-allowed",
3862
+ sourceTagRow: "neeto-tags-merge-source-tags",
3863
+ destinationTagRow: "neeto-tags-merge-destination-tags",
3864
+ };
3865
+
3866
+ const CHAT_WIDGET_SELECTORS = {
3867
+ iframe: "#neetochat-iframe",
3868
+ spinner: ".neeto-chat-widget-spinner",
3869
+ helpButton: "help-button",
3870
+ preChatEmailInput: "neeto-chat-widget-input",
3871
+ preChatSubmitButton: "neeto-chat-widget-pre-chat-submit-btn",
3872
+ chatBubble: "neeto-chat-widget-chat-message-bubble",
3873
+ closeChat: "neeto-chat-widget-close-btn",
3874
+ chatQuestionHeader: "chat-question-header",
3875
+ openChat: "neeto-chat-widget-open-btn",
3876
+ homeScreenSubtitle: "neeto-chat-widget-home-screen-subtitle",
3877
+ };
3878
+ const CHANGELOG_WIDGET_SELECTORS = {
3879
+ changelogWrapper: ".ne-widget__wrapper",
3880
+ closeButton: "ne-widget-close-btn",
3881
+ publicUrlLink: "ne-widget-public-url",
3882
+ };
3883
+ const KEYBOARD_SHORTCUTS_SELECTORS = {
3884
+ keyboardShortcutsPane: "keyboard-shortcuts-pane",
3885
+ closePaneButton: "keyboard-shortcuts-pane-close-button",
3886
+ hotKeyItem: "hotkey-item",
3887
+ };
3888
+
3889
+ const INTEGRATION_SELECTORS = {
3890
+ integrationCard: (integration) => `${integration}-integration-card`,
3891
+ connectButton: "connect-button",
3892
+ integrationStatusTag: "integration-status-tag",
3893
+ disconnectButton: "disconnect-button",
3894
+ manageButton: "manage-button",
3895
+ integrationConnectedTag: "integration-connected-tag",
3896
+ };
3897
+
3898
+ const GOOGLE_LOGIN_SELECTORS = {
3899
+ totpNext: "#totpNext",
3900
+ form: "form",
3901
+ totpChallengeSelector: '[data-challengeid="2"]',
3902
+ signOutFrameLocator: 'iframe[name="account"]',
3903
+ };
3904
+
3905
+ const dataQa = (value) => `[data-qa='${value}']`;
3906
+ const SLACK_SELECTORS = {
3907
+ messageContainer: dataQa("message_container"),
3908
+ loginEmail: dataQa("login_email"),
3909
+ loginPassword: dataQa("login_password"),
3910
+ signInButton: dataQa("signin_button"),
3911
+ teamPicketButtonContent: dataQa("team-picker-button-content"),
3912
+ redirectOpenInBrowser: dataQa("ssb_redirect_open_in_browser"),
3913
+ workspaceActionsButton: dataQa("workspace_actions_button"),
3914
+ teamMenuTrigger: dataQa("team-menu-trigger"),
3915
+ menuItemButton: "menu_item_button",
3916
+ threadsFlexpane: "threads_flexpane",
3917
+ replyBar: "reply_bar",
3918
+ markdownElement: "bk_markdown_element",
3919
+ virtualListItem: "virtual-list-item",
3920
+ channelItems: '[role="treeitem"][data-qa="virtual-list-item"]',
3921
+ };
3922
+ const SLACK_DATA_QA_SELECTORS = {
3923
+ sectionHeadingButton: "section_heading_button__channels",
3924
+ coachMarkCloseButton: "coachmark-close-button",
3925
+ messagePaneBannerCloseIcon: "message_pane_banner_close_icon",
3926
+ permissionBannerCloseIcon: "banner_close_btn",
3927
+ channelSectionSubmenuCreate: "channel_section_submenu_create",
3928
+ channelSectionMenuCreateChannel: "channel_section_menu__create_channel",
3929
+ skModalContent: "sk-modal-content",
3930
+ infiniteSpinner: "infinite-spinner",
3931
+ channelNameOptionsList: "channel-name-options-list",
3932
+ channelNameInput: "channel-name-input",
3933
+ createChannelNextButton: "create-channel-next-button",
3934
+ inviteToWorkspaceSkipButton: "invite_to_workspace_skip_button",
3935
+ menuItems: "menu_items",
3936
+ channelDetailsModal: "channel_details_modal",
3937
+ channelDetailsSettingsTab: "channel_details_settings_tab",
3938
+ };
3939
+
3940
+ const WEBHOOK_SELECTORS = {
3941
+ addNewWebhook: "add-new-webhook-button",
3942
+ endpointInputField: "endpoint-input-field",
3943
+ deliveryResponseCode: "delivery-response-code",
3944
+ deliveryRequestPayload: "delivery-request-payload",
3945
+ addSecretKey: "add-secret-key",
3946
+ newWebhookHeader: "add-new-webhook-pane-header",
3947
+ endpointInputError: "endpoint-input-error",
3948
+ eventsSelectError: "events-select-error",
3949
+ regenerateSecret: "regenerate-secret",
3950
+ deleteSecret: "delete-secret",
3951
+ editWebhookButton: "neeto-webhooks-edit-button",
3952
+ deleteWebhookButton: "neeto-webhooks-delete-button",
3953
+ };
3954
+
3955
+ const ZAPIER_SELECTORS = {
3956
+ zapTriggerStep: (zapId) => `[data-testid='step-node-${zapId}']`,
3957
+ zapAccountSubstep: "[data-testid='substep-Account']",
3958
+ zapOpenSubstepContainer: "[data-testid='open-sub-step-container']",
3959
+ modal: "[data-testid='Modal']",
3960
+ fmPrettytext: ".fm-prettytext",
3961
+ spinner: "[data-testid='spinner']",
3962
+ skeletonBlock: "[data-testid='SkeletonBlock']",
3963
+ accountsLoader: "[data-testid='accounts-loader']",
3964
+ floatingBox: "[data-testid='floating-box']",
3965
+ connection: "[data-testid='Connection']",
3966
+ deleteConnectionModal: "[data-testid='DeleteAuthModal-root']",
3967
+ deleteConnectionDropdownButton: "[data-testid='connection-list-item-dropdown-item-Delete']",
3968
+ usageAmounts: "css=[class$=UsageBar__amounts]",
3969
+ universalSidebar: "[data-testid='universalSidebar']",
3970
+ sidebarFooter: "css=[class$=InAppSidebarFooter__footerWrapper]",
3971
+ contextualSideBar: "[data-testid='contextual-sidebar']",
3972
+ iconContainer: "[data-testid='iconContainer']",
3973
+ deleteApiButton: "delete-apikey-button",
3974
+ zapierSubLink: "zapier-sub-link",
3975
+ };
3976
+
3977
+ const TABLE_SELECTORS = {
3978
+ freezeUnfreezeButton: "freeze-unfreeze-column-menu-button",
3979
+ ascendingButton: "ascending-column-menu-button",
3980
+ descendingButton: "descending-column-menu-button",
3981
+ hideButton: "hide-column-menu-button",
3982
+ columnHeaderTitle: (columnName) => `${neetoCist.hyphenate(columnName)}-header-title`,
3983
+ columnMenuButton: "column-menu-button",
3984
+ };
3985
+
3986
+ const THEMES_SELECTORS = {
3987
+ colorPickerDropdownContainer: (colorHex) => `${colorHex}-dropdown-container`,
3988
+ baseThemeStyle: (styleType) => `theme-style-${neetoCist.hyphenate(styleType)}`,
3989
+ introPageThemeStyle: (styleType) => `intro-page-theme-style-${neetoCist.hyphenate(styleType)}`,
3990
+ };
3991
+
3992
+ const ADMIN_PANEL_SELECTORS = {
3993
+ settingsItemHeading: "settings-item-heading",
3994
+ settingsItemDescription: "settings-item-description",
3995
+ expiryDateInput: "expiry-date-input",
3996
+ };
3997
+ const CUSTOM_DOMAIN_SELECTORS = {
3998
+ addCustomDomainButton: "add-new-custom-domain-button",
3999
+ customDomainInputField: "custom-domain-input-field",
4000
+ submitCustomDomainButton: "submit-custom-domain-button",
4001
+ customDomainValidateButton: "validate-domain-button",
4002
+ editCustomDomainButton: "edit-custom-domain-button",
4003
+ deleteCustomDomainButton: "delete-custom-domain-button",
4004
+ dropdownButton: "custom-domains-more-dropdown-button",
4005
+ activeTagContainer: "active-tag-container",
4006
+ };
4007
+ const API_KEYS_SELECTORS = {
4008
+ editApiKeyButton: "api-key-edit-button",
4009
+ deleteApiKeyButton: "api-key-delete-button",
4010
+ addApiKeyButton: "add-api-key-button",
4011
+ apiKeysLabelField: "api-keys-label-field",
4012
+ apiKeysExpiresAtField: "api-keys-expires-at-field",
4013
+ expiryDateInputError: "expiry-date-input-error",
4014
+ expiryDateInput: "expiry-date-input",
4015
+ apiKeysField: "api-keys-label-field",
4016
+ tokenField: "api-keys-token-field",
4017
+ expiresAtField: "api-keys-expires-at-field",
4018
+ createdAtField: "api-keys-created-at-field",
4019
+ };
4020
+
4021
+ const DATE_PICKER_SELECTORS = {
4022
+ pickerInput: "picker-input",
4023
+ datePicker: "date-picker",
4024
+ timePicker: "time-picker",
4025
+ nextYearButton: "next-year-button",
4026
+ prevYearButton: "prev-year-button",
4027
+ };
4028
+
4029
+ const mimeTypeMap = {
4030
+ csv: "text/csv",
4031
+ avi: "video/x-msvideo",
4032
+ doc: "application/msword",
4033
+ docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
4034
+ flv: "video/x-flv",
4035
+ html: "text/html",
4036
+ mp3: "audio/mpeg",
4037
+ mp4: "video/mp4",
4038
+ mpg: "video/mpeg",
4039
+ pdf: "application/pdf",
4040
+ rtf: "application/rtf",
4041
+ txt: "text/plain",
4042
+ webm: "video/webm",
4043
+ xls: "application/vnd.ms-excel",
4044
+ xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
4045
+ wma: "audio/x-ms-wma",
4046
+ zip: "application/zip",
4047
+ jpg: "image/jpeg",
4048
+ jpeg: "image/jpeg",
4049
+ png: "image/png",
4050
+ gif: "image/gif",
4051
+ };
4052
+ const fillRandomBytes = (byteArray) => {
4053
+ const CHUNK_SIZE = 65536; //Maximum allowed per call by crypto.getRandomValues.
4054
+ for (let i = 0; i < byteArray.length; i += CHUNK_SIZE) {
4055
+ crypto.getRandomValues(byteArray.subarray(i, i + CHUNK_SIZE));
4056
+ }
4057
+ };
4058
+ const serializeFileForBrowser = async (file) => {
4059
+ const buffer = await file.arrayBuffer();
4060
+ return {
4061
+ name: file.name,
4062
+ type: file.type,
4063
+ lastModified: file.lastModified,
4064
+ buffer: Array.from(new Uint8Array(buffer)),
4065
+ };
4066
+ };
4067
+ const generateRandomFile = ({ sizeInKB, fileType, fileName = `sample.${fileType}`, }) => {
4068
+ const mimeType = mimeTypeMap[fileType];
4069
+ const byteArray = new Uint8Array(sizeInKB * 1024);
4070
+ fillRandomBytes(byteArray);
4071
+ const blob = new Blob([byteArray], { type: mimeType });
4072
+ const file = new File([blob], fileName, { type: mimeType });
4073
+ return { file, fileName };
4074
+ };
4075
+
4053
4076
  const getImagePathAndName = (localImagePath) => {
4054
4077
  const imagePath = Path.join(__dirname, localImagePath);
4055
4078
  const imageName = Path.basename(localImagePath, Path.extname(localImagePath));
@@ -12297,43 +12320,6 @@ conventions.NAMESPACE;
12297
12320
  var domParser = domParser$1;
12298
12321
  var DOMParser = domParser.DOMParser;
12299
12322
 
12300
- class FastmailApi {
12301
- constructor(neetoPlaywrightUtilities) {
12302
- this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
12303
- this.authorizeAndSetAccountId = async () => {
12304
- const response = await this.neetoPlaywrightUtilities.apiRequest({
12305
- method: "get",
12306
- url: "https://api.fastmail.com/.well-known/jmap",
12307
- headers: this.headers,
12308
- });
12309
- const { primaryAccounts: { "urn:ietf:params:jmap:mail": accountId }, } = await response.json();
12310
- this.accountId = accountId;
12311
- };
12312
- this.apiRequest = async (method, body) => {
12313
- const response = await this.neetoPlaywrightUtilities.apiRequest({
12314
- method: "post",
12315
- url: "https://api.fastmail.com/jmap/api/",
12316
- headers: this.headers,
12317
- data: {
12318
- using: ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],
12319
- methodCalls: [[method, { accountId: this.accountId, ...body }, "0"]],
12320
- },
12321
- });
12322
- return response === null || response === void 0 ? void 0 : response.json();
12323
- };
12324
- this.fetchAttachments = (blobId, attachmentName) => this.neetoPlaywrightUtilities.apiRequest({
12325
- url: `https://www.fastmailusercontent.com/jmap/download/${this.accountId}/${blobId}/${attachmentName}`,
12326
- headers: this.headers,
12327
- });
12328
- if (!process.env.NEETO_AUTOMATION_FASTMAIL_API_KEY)
12329
- throw new Error("Please set the environment variable NEETO_AUTOMATION_FASTMAIL_API_KEYS. Credentials can be found in the Automation Credentials vault in the BigBinary 1Password account.");
12330
- this.headers = {
12331
- "Content-Type": "application/json",
12332
- Authorization: `Bearer ${process.env.NEETO_AUTOMATION_FASTMAIL_API_KEY}`,
12333
- };
12334
- }
12335
- }
12336
-
12337
12323
  var libmime$4 = {exports: {}};
12338
12324
 
12339
12325
  var charset$1 = {exports: {}};
@@ -48012,6 +47998,43 @@ var mailparser = {
48012
47998
  simpleParser
48013
47999
  };
48014
48000
 
48001
+ class FastmailApi {
48002
+ constructor(neetoPlaywrightUtilities) {
48003
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
48004
+ this.authorizeAndSetAccountId = async () => {
48005
+ const response = await this.neetoPlaywrightUtilities.apiRequest({
48006
+ method: "get",
48007
+ url: "https://api.fastmail.com/.well-known/jmap",
48008
+ headers: this.headers,
48009
+ });
48010
+ const { primaryAccounts: { "urn:ietf:params:jmap:mail": accountId }, } = await response.json();
48011
+ this.accountId = accountId;
48012
+ };
48013
+ this.apiRequest = async (method, body) => {
48014
+ const response = await this.neetoPlaywrightUtilities.apiRequest({
48015
+ method: "post",
48016
+ url: "https://api.fastmail.com/jmap/api/",
48017
+ headers: this.headers,
48018
+ data: {
48019
+ using: ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],
48020
+ methodCalls: [[method, { accountId: this.accountId, ...body }, "0"]],
48021
+ },
48022
+ });
48023
+ return response === null || response === void 0 ? void 0 : response.json();
48024
+ };
48025
+ this.fetchAttachments = (blobId, attachmentName) => this.neetoPlaywrightUtilities.apiRequest({
48026
+ url: `https://www.fastmailusercontent.com/jmap/download/${this.accountId}/${blobId}/${attachmentName}`,
48027
+ headers: this.headers,
48028
+ });
48029
+ if (!process.env.NEETO_AUTOMATION_FASTMAIL_API_KEY)
48030
+ throw new Error("Please set the environment variable NEETO_AUTOMATION_FASTMAIL_API_KEYS. Credentials can be found in the Automation Credentials vault in the BigBinary 1Password account.");
48031
+ this.headers = {
48032
+ "Content-Type": "application/json",
48033
+ Authorization: `Bearer ${process.env.NEETO_AUTOMATION_FASTMAIL_API_KEY}`,
48034
+ };
48035
+ }
48036
+ }
48037
+
48015
48038
  const basicHTMLContent = (content) => `
48016
48039
  <!DOCTYPE html>
48017
48040
  <html lang="en">
@@ -188999,6 +189022,7 @@ const ORGANIZATION_TEXTS = {
188999
189022
  };
189000
189023
 
189001
189024
  /* eslint-disable playwright/require-top-level-describe */
189025
+ /* eslint-disable playwright/no-standalone-expect */
189002
189026
  class HelpAndProfilePage {
189003
189027
  constructor({ page, neetoPlaywrightUtilities, chatApiBaseURL, kbDocsBaseURL, changelogBaseURL, }) {
189004
189028
  this.hoverOnBody = () => this.page.locator("body").hover();
@@ -189042,8 +189066,8 @@ class HelpAndProfilePage {
189042
189066
  this.openAndVerifyChatWidgetV2 = async () => {
189043
189067
  await this.page.reload();
189044
189068
  await this.neetoPlaywrightUtilities.waitForPageLoad();
189045
- await test$1.test.step("Step 1: Open live chat and verify iframe", () => this.openLiveChatAndVerify());
189046
- await test$1.test.step("Step 2: Close and reopen live chat frame", async () => {
189069
+ await test$1.test.step("1: Open live chat and verify iframe", () => this.openLiveChatAndVerify());
189070
+ await test$1.test.step("2: Close and reopen live chat frame", async () => {
189047
189071
  await this.page.getByTestId(CHAT_WIDGET_SELECTORS.closeChat).click();
189048
189072
  await test$1.expect(this.neetoChatWidget).toBeHidden({ timeout: 35000 });
189049
189073
  await this.openLiveChatAndVerify();
@@ -189055,8 +189079,8 @@ class HelpAndProfilePage {
189055
189079
  this.openAndVerifyChatWidget = async () => {
189056
189080
  await this.page.reload();
189057
189081
  await this.neetoPlaywrightUtilities.waitForPageLoad();
189058
- await test$1.test.step("Step 1: Open live chat and verify iframe", () => this.openLiveChatAndVerify());
189059
- await test$1.test.step("Step 2: Close and reopen live chat frame", async () => {
189082
+ await test$1.test.step("1: Open live chat and verify iframe", () => this.openLiveChatAndVerify());
189083
+ await test$1.test.step("2: Close and reopen live chat frame", async () => {
189060
189084
  await this.page.getByTestId(CHAT_WIDGET_SELECTORS.closeChat).click();
189061
189085
  await test$1.expect(this.neetoChatWidget).toBeHidden({ timeout: 35000 });
189062
189086
  await this.openLiveChatAndVerify();
@@ -189069,8 +189093,8 @@ class HelpAndProfilePage {
189069
189093
  * @deprecated This method is deprecated. Use openAndVerifyHelpArticles instead.
189070
189094
  */
189071
189095
  this.openAndVerifyHelpArticlesV2 = async () => {
189072
- await test$1.test.step("Step 1: Open Help Center links", this.openHelpCenterV2);
189073
- await test$1.test.step("Step 2: Open and verify help articles link", async () => {
189096
+ await test$1.test.step("1: Open Help Center links", this.openHelpCenterV2);
189097
+ await test$1.test.step("2: Open and verify help articles link", async () => {
189074
189098
  const helpArticlesPromise = this.page.waitForEvent("popup");
189075
189099
  await this.page
189076
189100
  .getByTestId(HELP_CENTER_SELECTORS.documentationButton)
@@ -189082,8 +189106,8 @@ class HelpAndProfilePage {
189082
189106
  });
189083
189107
  };
189084
189108
  this.openAndVerifyHelpArticles = async () => {
189085
- await test$1.test.step("Step 1: Open Help Center links", this.openHelpCenter);
189086
- await test$1.test.step("Step 2: Open and verify help articles link", async () => {
189109
+ await test$1.test.step("1: Open Help Center links", this.openHelpCenter);
189110
+ await test$1.test.step("2: Open and verify help articles link", async () => {
189087
189111
  const helpArticlesPromise = this.page.waitForEvent("popup");
189088
189112
  await this.page
189089
189113
  .getByTestId(HELP_CENTER_SELECTORS.documentationButton)
@@ -189104,15 +189128,15 @@ class HelpAndProfilePage {
189104
189128
  * @deprecated This method is deprecated. Use openAndVerifyChangelog instead.
189105
189129
  */
189106
189130
  this.openAndVerifyChangelogV2 = async () => {
189107
- await test$1.test.step("Step 1: Open Help Center links and changelog", this.openChangelogPane);
189108
- await test$1.test.step("Step 2: Close and reopen changelog pane", async () => {
189131
+ await test$1.test.step("1: Open Help Center links and changelog", this.openChangelogPane);
189132
+ await test$1.test.step("2: Close and reopen changelog pane", async () => {
189109
189133
  await this.page
189110
189134
  .getByTestId(CHANGELOG_WIDGET_SELECTORS.closeButton)
189111
189135
  .click();
189112
189136
  await test$1.expect(this.page.locator(CHANGELOG_WIDGET_SELECTORS.changelogWrapper)).toBeHidden();
189113
189137
  await this.openChangelogPane();
189114
189138
  });
189115
- await test$1.test.step("Step 3: Open and verify public URL", async () => {
189139
+ await test$1.test.step("3: Open and verify public URL", async () => {
189116
189140
  const changelogPagePromise = this.page.waitForEvent("popup");
189117
189141
  await this.page
189118
189142
  .getByTestId(CHANGELOG_WIDGET_SELECTORS.publicUrlLink)
@@ -189124,15 +189148,15 @@ class HelpAndProfilePage {
189124
189148
  });
189125
189149
  };
189126
189150
  this.openAndVerifyChangelog = async () => {
189127
- await test$1.test.step("Step 1: Open Help Center links and changelog", this.openChangelogPane);
189128
- await test$1.test.step("Step 2: Close and reopen changelog pane", async () => {
189151
+ await test$1.test.step("1: Open Help Center links and changelog", this.openChangelogPane);
189152
+ await test$1.test.step("2: Close and reopen changelog pane", async () => {
189129
189153
  await this.page
189130
189154
  .getByTestId(CHANGELOG_WIDGET_SELECTORS.closeButton)
189131
189155
  .click();
189132
189156
  await test$1.expect(this.page.locator(CHANGELOG_WIDGET_SELECTORS.changelogWrapper)).toBeHidden();
189133
189157
  await this.openChangelogPane();
189134
189158
  });
189135
- await test$1.test.step("Step 3: Open and verify public URL", async () => {
189159
+ await test$1.test.step("3: Open and verify public URL", async () => {
189136
189160
  const changelogPagePromise = this.page.waitForEvent("popup");
189137
189161
  await this.page
189138
189162
  .getByTestId(CHANGELOG_WIDGET_SELECTORS.publicUrlLink)
@@ -189169,8 +189193,8 @@ class HelpAndProfilePage {
189169
189193
  },
189170
189194
  ];
189171
189195
  const shortcuts = [...globalShortcuts, ...productShortcuts];
189172
- await test$1.test.step("Step 1: Open Help Center", this.openHelpCenterV2);
189173
- await test$1.test.step("Step 2: Open and close keyboard shortcuts from UI", async () => {
189196
+ await test$1.test.step("1: Open Help Center", this.openHelpCenterV2);
189197
+ await test$1.test.step("2: Open and close keyboard shortcuts from UI", async () => {
189174
189198
  await this.page
189175
189199
  .getByTestId(HELP_CENTER_SELECTORS.keyboardShortcutButton)
189176
189200
  .click();
@@ -189180,13 +189204,13 @@ class HelpAndProfilePage {
189180
189204
  .click();
189181
189205
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).toHaveCSS("width", "1px");
189182
189206
  });
189183
- await test$1.test.step("Step 3: Open and close keyboard shortcuts through shortcut", async () => {
189207
+ await test$1.test.step("3: Open and close keyboard shortcuts through shortcut", async () => {
189184
189208
  await this.page.keyboard.press("Shift+/");
189185
189209
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
189186
189210
  await this.page.keyboard.press("Escape");
189187
189211
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).toHaveCSS("width", "1px");
189188
189212
  });
189189
- await test$1.test.step("Step 4: Verify all displayed keyboard shortcuts", async () => {
189213
+ await test$1.test.step("4: Verify all displayed keyboard shortcuts", async () => {
189190
189214
  await this.page.keyboard.press("Shift+/");
189191
189215
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
189192
189216
  await test$1.expect(this.page
@@ -189200,8 +189224,8 @@ class HelpAndProfilePage {
189200
189224
  };
189201
189225
  this.openAndVerifyKeyboardShortcutsPane = async (productShortcuts, osPlatform = "windows") => {
189202
189226
  const shortcuts = [...globalShortcuts(this.t), ...productShortcuts];
189203
- await test$1.test.step("Step 1: Open Help Center", this.openHelpCenter);
189204
- await test$1.test.step("Step 2: Open and close keyboard shortcuts from UI", async () => {
189227
+ await test$1.test.step("1: Open Help Center", this.openHelpCenter);
189228
+ await test$1.test.step("2: Open and close keyboard shortcuts from UI", async () => {
189205
189229
  await this.page
189206
189230
  .getByTestId(HELP_CENTER_SELECTORS.keyboardShortcutButton)
189207
189231
  .click();
@@ -189211,13 +189235,13 @@ class HelpAndProfilePage {
189211
189235
  .click();
189212
189236
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).toHaveCSS("width", "1px");
189213
189237
  });
189214
- await test$1.test.step("Step 3: Open and close keyboard shortcuts through shortcut", async () => {
189238
+ await test$1.test.step("3: Open and close keyboard shortcuts through shortcut", async () => {
189215
189239
  await this.page.keyboard.press("Shift+/");
189216
189240
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
189217
189241
  await this.page.keyboard.press("Escape");
189218
189242
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).toHaveCSS("width", "1px");
189219
189243
  });
189220
- await test$1.test.step("Step 4: Verify all displayed keyboard shortcuts", async () => {
189244
+ await test$1.test.step("4: Verify all displayed keyboard shortcuts", async () => {
189221
189245
  await this.page.keyboard.press("Shift+/");
189222
189246
  await test$1.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
189223
189247
  await test$1.expect(this.page
@@ -189236,12 +189260,12 @@ class HelpAndProfilePage {
189236
189260
  const productName = "Playdash";
189237
189261
  const searchQueryPartial = productName.slice(0, 4).toLowerCase();
189238
189262
  const searchQueryFull = productName.toLowerCase();
189239
- await test$1.test.step("Step 1: Verify hovering over app switcher opens the app switcher drawer", () => test$1.expect(async () => {
189263
+ await test$1.test.step("1: Verify hovering over app switcher opens the app switcher drawer", () => test$1.expect(async () => {
189240
189264
  await this.openHelpCenterV2();
189241
189265
  await this.page.getByTestId(COMMON_SELECTORS.appSwitcherButton).hover();
189242
189266
  await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.appSwitcherWrapper)).toBeVisible();
189243
189267
  }).toPass({ timeout: 45000 }));
189244
- await test$1.test.step("Step 2: Verify search functionality", async () => {
189268
+ await test$1.test.step("2: Verify search functionality", async () => {
189245
189269
  const playdashAppLink = this.page.getByTestId(COMMON_SELECTORS.appLink(productName));
189246
189270
  const replayAppLink = this.page.getByTestId(COMMON_SELECTORS.appLink("Replay"));
189247
189271
  const searchInput = this.page.getByTestId(COMMON_SELECTORS.productSwitcherSearchInput);
@@ -189264,12 +189288,12 @@ class HelpAndProfilePage {
189264
189288
  const productName = "Playdash";
189265
189289
  const searchQueryPartial = productName.slice(0, 4).toLowerCase();
189266
189290
  const searchQueryFull = productName.toLowerCase();
189267
- await test$1.test.step("Step 1: Verify hovering over app switcher opens the app switcher drawer", () => test$1.expect(async () => {
189291
+ await test$1.test.step("1: Verify hovering over app switcher opens the app switcher drawer", () => test$1.expect(async () => {
189268
189292
  await this.openHelpCenter();
189269
189293
  await this.page.getByTestId(COMMON_SELECTORS.appSwitcherButton).hover();
189270
189294
  await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.appSwitcherWrapper)).toBeVisible();
189271
189295
  }).toPass({ timeout: 45000 }));
189272
- await test$1.test.step("Step 2: Verify search functionality", async () => {
189296
+ await test$1.test.step("2: Verify search functionality", async () => {
189273
189297
  const playdashAppLink = this.page.getByTestId(COMMON_SELECTORS.appLink(productName));
189274
189298
  const replayAppLink = this.page.getByTestId(COMMON_SELECTORS.appLink("Replay"));
189275
189299
  const searchInput = this.page.getByTestId(COMMON_SELECTORS.productSwitcherSearchInput);
@@ -189294,8 +189318,8 @@ class HelpAndProfilePage {
189294
189318
  this.verifyLogoutV2 = async () => {
189295
189319
  if (shouldSkipSetupAndTeardown())
189296
189320
  return;
189297
- await test$1.test.step("Step 1: Open Help center and verify", this.openHelpCenterV2);
189298
- await test$1.test.step("Step 2: Click logout and verify", async () => {
189321
+ await test$1.test.step("1: Open Help center and verify", this.openHelpCenterV2);
189322
+ await test$1.test.step("2: Click logout and verify", async () => {
189299
189323
  await this.page
189300
189324
  .getByTestId(PROFILE_SECTION_SELECTORS.logoutButton)
189301
189325
  .click({ timeout: 35000 });
@@ -189311,8 +189335,8 @@ class HelpAndProfilePage {
189311
189335
  this.verifyLogout = async () => {
189312
189336
  if (shouldSkipSetupAndTeardown())
189313
189337
  return;
189314
- await test$1.test.step("Step 1: Open Help center and verify", this.openHelpCenter);
189315
- await test$1.test.step("Step 2: Click logout and verify", async () => {
189338
+ await test$1.test.step("1: Open Help center and verify", this.openHelpCenter);
189339
+ await test$1.test.step("2: Click logout and verify", async () => {
189316
189340
  await this.page
189317
189341
  .getByTestId(PROFILE_SECTION_SELECTORS.logoutButton)
189318
189342
  .click({ timeout: 35000 });
@@ -189343,8 +189367,8 @@ class HelpAndProfilePage {
189343
189367
  * @deprecated This method is deprecated. Use verifyProfileAndOrganizationLinks instead.
189344
189368
  */
189345
189369
  this.verifyProfileAndOrganizationLinksV3 = async () => {
189346
- await test$1.test.step("Step 1: Open Help center and verify", this.openHelpCenter);
189347
- await test$1.test.step("Step 2: Open My profile link and verify", async () => {
189370
+ await test$1.test.step("1: Open Help center and verify", this.openHelpCenter);
189371
+ await test$1.test.step("2: Open My profile link and verify", async () => {
189348
189372
  const profileSidebarHeader = this.page.getByTestId(COMMON_SELECTORS.paneHeader);
189349
189373
  await this.page
189350
189374
  .getByTestId(PROFILE_SECTION_SELECTORS.myProfileButton)
@@ -189355,8 +189379,8 @@ class HelpAndProfilePage {
189355
189379
  linkName: this.t("neetoTeamMembers.buttons.manageBillingAndSubscriptions"),
189356
189380
  });
189357
189381
  });
189358
- await test$1.test.step("Step 3: Open Help center and verify", this.openHelpCenterV2);
189359
- await test$1.test.step("Step 4: Open My organization link and verify", async () => {
189382
+ await test$1.test.step("3: Open Help center and verify", this.openHelpCenterV2);
189383
+ await test$1.test.step("4: Open My organization link and verify", async () => {
189360
189384
  await this.page
189361
189385
  .getByTestId(PROFILE_SECTION_SELECTORS.profileOrganizationSettingsButton)
189362
189386
  .click();
@@ -189364,8 +189388,8 @@ class HelpAndProfilePage {
189364
189388
  });
189365
189389
  };
189366
189390
  this.verifyProfileAndOrganizationLinks = async () => {
189367
- await test$1.test.step("Step 1: Open Help center and verify", this.openHelpCenter);
189368
- await test$1.test.step("Step 2: Open My profile link and verify", async () => {
189391
+ await test$1.test.step("1: Open Help center and verify", this.openHelpCenter);
189392
+ await test$1.test.step("2: Open My profile link and verify", async () => {
189369
189393
  const profileSidebarHeader = this.page.getByTestId(COMMON_SELECTORS.paneHeader);
189370
189394
  await this.page
189371
189395
  .getByTestId(PROFILE_SECTION_SELECTORS.myProfileButton)
@@ -189376,8 +189400,8 @@ class HelpAndProfilePage {
189376
189400
  linkName: this.t("neetoTeamMembers.buttons.manageBillingAndSubscriptions"),
189377
189401
  });
189378
189402
  });
189379
- await test$1.test.step("Step 3: Open Help center and verify", this.openHelpCenter);
189380
- await test$1.test.step("Step 4: Open My organization link and verify", async () => {
189403
+ await test$1.test.step("3: Open Help center and verify", this.openHelpCenter);
189404
+ await test$1.test.step("4: Open My organization link and verify", async () => {
189381
189405
  await this.page
189382
189406
  .getByTestId(PROFILE_SECTION_SELECTORS.profileOrganizationSettingsButton)
189383
189407
  .click();
@@ -189385,8 +189409,8 @@ class HelpAndProfilePage {
189385
189409
  });
189386
189410
  };
189387
189411
  this.openAndVerifyStatus = async (appName) => {
189388
- await test$1.test.step("Step 1: Open Help Center links", this.openHelpCenter);
189389
- await test$1.test.step("Step 2: Open and verify status page", async () => {
189412
+ await test$1.test.step("1: Open Help Center links", this.openHelpCenter);
189413
+ await test$1.test.step("2: Open and verify status page", async () => {
189390
189414
  const statusPagePromise = this.page.waitForEvent("popup");
189391
189415
  await this.page.getByTestId(HELP_CENTER_SELECTORS.statusButton).click();
189392
189416
  const statusPage = await statusPagePromise;
@@ -189400,8 +189424,8 @@ class HelpAndProfilePage {
189400
189424
  });
189401
189425
  };
189402
189426
  this.openAndVerifyCommunity = async () => {
189403
- await test$1.test.step("Step 1: Open Help Center links", this.openHelpCenter);
189404
- await test$1.test.step("Step 2: Open and verify community", async () => {
189427
+ await test$1.test.step("1: Open Help Center links", this.openHelpCenter);
189428
+ await test$1.test.step("2: Open and verify community", async () => {
189405
189429
  const communityPagePromise = this.page.waitForEvent("popup");
189406
189430
  await this.page
189407
189431
  .getByTestId(HELP_CENTER_SELECTORS.communityButton)