dimsum-e2e-tests 3.60.0-next.27 → 3.60.0-next.29

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/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 3.60.0-next.29 (2026-02-23)
7
+
8
+ ### Bug Fixes
9
+
10
+ - ds-tabs:: add functional test for tabs with scrollbar - keyboard nav [PUI-17883](https://jira.elliemae.io/browse/PUI-17883) ([#7895](https://git.elliemae.io/platform-ui/dimsum/issues/7895)) ([bbd1058](https://git.elliemae.io/platform-ui/dimsum/commit/bbd1058f2f1dac1e3f942bca697b304d28996986))
11
+
12
+ ## 3.60.0-next.28 (2026-02-20)
13
+
14
+ ### Bug Fixes
15
+
16
+ - ds-left-navigation:: add functional test for slots customization [PUI-15560](https://jira.elliemae.io/browse/PUI-15560) ([#7892](https://git.elliemae.io/platform-ui/dimsum/issues/7892)) ([6732509](https://git.elliemae.io/platform-ui/dimsum/commit/6732509aaaafeb3c3cc4f2e8e85986177b782c58))
17
+
6
18
  ## 3.60.0-next.27 (2026-02-20)
7
19
 
8
20
  ### Bug Fixes
@@ -5,7 +5,7 @@ import LeftNavCO from './LeftNavigationCO';
5
5
  import { mouseOver } from '../helpers';
6
6
 
7
7
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
8
- describe('PUI-6120 - LeftNavigation: expand and collapse behaviour', () => {
8
+ describe.only('PUI-6120 - LeftNavigation: expand and collapse behaviour', () => {
9
9
  before('loading page', async () => {
10
10
  const errorOnGo = await LeftNavCO.fullFeatures.go();
11
11
  if (errorOnGo) throw errorOnGo;
@@ -14,22 +14,41 @@ if (
14
14
  if (errorOnGo) throw errorOnGo;
15
15
  });
16
16
  it('01: leftnav collapsed - slots should have custom data-* and aria-*', async () => {
17
- const getLeftnavigationRootSlot = await LeftNavCO.getLeftnavigationRootSlot();
18
- const getLeftnavigationAreasContainerSlot = await LeftNavCO.getLeftnavigationAreasContainerSlot();
19
- const getLeftnavigationHeaderAreaSlot = await LeftNavCO.getLeftnavigationHeaderAreaSlot();
20
- const getLeftnavigationItemSlot = await LeftNavCO.getLeftnavigationItemSlot();
21
- const getLeftnavigationCollapsedContainerSlot = await LeftNavCO.getLeftnavigationCollapsedContainerSlot();
22
- const getLeftnavigationNotificationsContainerSlot =
23
- await LeftNavCO.getLeftnavigationNotificationsContainerSlot(0);
24
- const getLeftnavigationExceptionsIconSlot = await LeftNavCO.getLeftnavigationExceptionsIconSlot();
25
- const getLeftnavigationAlertsIconSlot = await LeftNavCO.getLeftnavigationAlertsIconSlot();
26
- const dsLeftnavigationMessagesIcon = await LeftNavCO.getLeftnavigationMessagesIconSlot();
27
- const getLeftnavigationItemBorderBottomSlot = await LeftNavCO.getLeftnavigationItemBorderBottomSlot();
28
- const getLeftnavigationBodyAreasContainerSlot = await LeftNavCO.getLeftnavigationBodyAreasContainerSlot();
29
- const getLeftnavigationBodyHeaderAreaSlot = await LeftNavCO.getLeftnavigationBodyHeaderAreaSlot();
30
- const getLeftnavigationBodyItemsAreaSlot = await LeftNavCO.getLeftnavigationBodyItemsAreaSlot();
31
- const getLeftnavigationFooterMenuSlot = await LeftNavCO.getLeftnavigationFooterMenuSlot();
32
- const getLeftnavigationFooterItemSlot = await LeftNavCO.getLeftnavigationFooterItemSlot();
17
+ const [
18
+ getLeftnavigationRootSlot,
19
+ getLeftnavigationAreasContainerSlot,
20
+ getLeftnavigationHeaderAreaSlot,
21
+ getLeftnavigationItemSlot,
22
+ getLeftnavigationCollapsedContainerSlot,
23
+ getLeftnavigationNotificationsContainerSlot,
24
+ getLeftnavigationExceptionsIconSlot,
25
+ getLeftnavigationAlertsIconSlot,
26
+ dsLeftnavigationMessagesIcon,
27
+ getLeftnavigationItemBorderBottomSlot,
28
+ getLeftnavigationBodyAreasContainerSlot,
29
+ getLeftnavigationBodyHeaderAreaSlot,
30
+ getLeftnavigationBodyItemsAreaSlot,
31
+ getLeftnavigationFooterMenuSlot,
32
+ getLeftnavigationFooterItemSlot,
33
+ getLeftnavigationNotificationsIconSlot,
34
+ ] = await Promise.all([
35
+ LeftNavCO.getLeftnavigationRootSlot(),
36
+ LeftNavCO.getLeftnavigationAreasContainerSlot(),
37
+ LeftNavCO.getLeftnavigationHeaderAreaSlot(),
38
+ LeftNavCO.getLeftnavigationItemSlot(),
39
+ LeftNavCO.getLeftnavigationCollapsedContainerSlot(),
40
+ LeftNavCO.getLeftnavigationNotificationsContainerSlot(0),
41
+ LeftNavCO.getLeftnavigationExceptionsIconSlot(),
42
+ LeftNavCO.getLeftnavigationAlertsIconSlot(),
43
+ LeftNavCO.getLeftnavigationMessagesIconSlot(),
44
+ LeftNavCO.getLeftnavigationItemBorderBottomSlot(),
45
+ LeftNavCO.getLeftnavigationBodyAreasContainerSlot(),
46
+ LeftNavCO.getLeftnavigationBodyHeaderAreaSlot(),
47
+ LeftNavCO.getLeftnavigationBodyItemsAreaSlot(),
48
+ LeftNavCO.getLeftnavigationFooterMenuSlot(),
49
+ LeftNavCO.getLeftnavigationFooterItemSlot(),
50
+ LeftNavCO.getLeftnavigationNotificationsIconSlot(),
51
+ ]);
33
52
 
34
53
  await expect(getLeftnavigationRootSlot).toHaveAttribute('aria-label', 'root-label');
35
54
  await expect(getLeftnavigationRootSlot).toHaveAttribute('data-testid', 'root-data-testid');
@@ -79,15 +98,28 @@ if (
79
98
  await expect(getLeftnavigationFooterMenuSlot).toHaveAttribute('data-testid', 'footer-menu-data-testid');
80
99
  await expect(getLeftnavigationFooterItemSlot).toHaveAttribute('aria-label', 'footer-item-label');
81
100
  await expect(getLeftnavigationFooterItemSlot).toHaveAttribute('data-testid', 'footer-item-data-testid');
101
+ await expect(getLeftnavigationNotificationsIconSlot).toHaveAttribute('aria-label', 'notifications-icon-label');
102
+ await expect(getLeftnavigationNotificationsIconSlot).toHaveAttribute(
103
+ 'data-testid',
104
+ 'notifications-icon-data-testid',
105
+ );
82
106
  });
83
107
  it('02: leftnav expanded - slots should have custom data-* and aria-*', async () => {
84
108
  await (await LeftNavCO.getLeftnavigationItemSlotByIndex(0)).click();
85
109
 
86
- const getLeftnavigationLeftContainerSlot = await LeftNavCO.getLeftnavigationLeftContainerSlot();
87
- const getLeftnavigationItemLabelSlot = await LeftNavCO.getLeftnavigationItemLabelSlot();
88
- const getLeftnavigationRightContainerSlot = await LeftNavCO.getLeftnavigationRightContainerSlot();
89
- const getLeftnavigationFooterLabelSlot = await LeftNavCO.getLeftnavigationFooterLabelSlot();
90
- const getLeftnavigationFooterSeparatorSlot = await LeftNavCO.getLeftnavigationFooterSeparatorSlot();
110
+ const [
111
+ getLeftnavigationLeftContainerSlot,
112
+ getLeftnavigationItemLabelSlot,
113
+ getLeftnavigationRightContainerSlot,
114
+ getLeftnavigationFooterLabelSlot,
115
+ getLeftnavigationFooterSeparatorSlot,
116
+ ] = await Promise.all([
117
+ LeftNavCO.getLeftnavigationLeftContainerSlot(),
118
+ LeftNavCO.getLeftnavigationItemLabelSlot(),
119
+ LeftNavCO.getLeftnavigationRightContainerSlot(),
120
+ LeftNavCO.getLeftnavigationFooterLabelSlot(),
121
+ LeftNavCO.getLeftnavigationFooterSeparatorSlot(),
122
+ ]);
91
123
 
92
124
  await expect(getLeftnavigationLeftContainerSlot).toHaveAttribute('aria-label', 'left-container-label');
93
125
  await expect(getLeftnavigationLeftContainerSlot).toHaveAttribute('data-testid', 'left-container-data-testid');
@@ -103,13 +135,31 @@ if (
103
135
  it('03: Notifications expanded - slots should have custom data-* and aria-*', async () => {
104
136
  await (await LeftNavCO.getLeftnavigationItemSlotByIndex(0)).click();
105
137
 
106
- const getLeftnavigationSectionContainerSlot = await LeftNavCO.getLeftnavigationSectionContainerSlot();
107
- const getLeftnavigationSectionLabelSlot = await LeftNavCO.getLeftnavigationSectionLabelSlot();
108
- const getLeftnavigationVerticalSeparatorSlot = await LeftNavCO.getLeftnavigationVerticalSeparatorSlot();
109
- const getLeftnavigationSectionRightLabelSlot = await LeftNavCO.getLeftnavigationSectionRightLabelSlot();
110
- const getLeftnavigationItemDateSlot = await LeftNavCO.getLeftnavigationItemDateSlot();
111
- const getLeftnavigationItemSeparatorSlot = await LeftNavCO.getLeftnavigationItemSeparatorSlot();
138
+ const [
139
+ getLeftnavigationFooterMenuCollapseSlot,
140
+ getLeftnavigationSectionContainerSlot,
141
+ getLeftnavigationSectionLabelSlot,
142
+ getLeftnavigationVerticalSeparatorSlot,
143
+ getLeftnavigationSectionRightLabelSlot,
144
+ getLeftnavigationItemDateSlot,
145
+ getLeftnavigationItemSeparatorSlot,
146
+ getLeftnavigationItemChevronBackSlot,
147
+ ] = await Promise.all([
148
+ LeftNavCO.getLeftnavigationFooterMenuCollapseSlot(),
149
+ LeftNavCO.getLeftnavigationSectionContainerSlot(),
150
+ LeftNavCO.getLeftnavigationSectionLabelSlot(),
151
+ LeftNavCO.getLeftnavigationVerticalSeparatorSlot(),
152
+ LeftNavCO.getLeftnavigationSectionRightLabelSlot(),
153
+ LeftNavCO.getLeftnavigationItemDateSlot(),
154
+ LeftNavCO.getLeftnavigationItemSeparatorSlot(),
155
+ LeftNavCO.getLeftnavigationItemChevronBackSlot(),
156
+ ]);
112
157
 
158
+ await expect(getLeftnavigationFooterMenuCollapseSlot).toHaveAttribute('aria-label', 'footer-menu-collapse-label');
159
+ await expect(getLeftnavigationFooterMenuCollapseSlot).toHaveAttribute(
160
+ 'data-testid',
161
+ 'footer-menu-collapse-data-testid',
162
+ );
113
163
  await expect(getLeftnavigationSectionContainerSlot).toHaveAttribute('aria-label', 'section-container-label');
114
164
  await expect(getLeftnavigationSectionContainerSlot).toHaveAttribute(
115
165
  'data-testid',
@@ -128,13 +178,20 @@ if (
128
178
  await expect(getLeftnavigationItemDateSlot).toHaveAttribute('data-testid', 'item-date-data-testid');
129
179
  await expect(getLeftnavigationItemSeparatorSlot).toHaveAttribute('aria-label', 'item-separator-label');
130
180
  await expect(getLeftnavigationItemSeparatorSlot).toHaveAttribute('data-testid', 'item-separator-data-testid');
181
+ await expect(getLeftnavigationItemChevronBackSlot).toHaveAttribute('aria-label', 'item-chevron-back-label');
182
+ await expect(getLeftnavigationItemChevronBackSlot).toHaveAttribute(
183
+ 'data-testid',
184
+ 'item-chevron-back-data-testid',
185
+ );
131
186
  });
132
187
  it('04: Logs expanded - slots should have custom data-* and aria-*', async () => {
133
188
  await (await LeftNavCO.getIconSlotByIndex(0)).click();
134
189
  await (await LeftNavCO.getLeftnavigationItemSlotByIndex(1)).click();
135
190
 
136
- const getLeftnavigationBottomContainerSlot = await LeftNavCO.getLeftnavigationBottomContainerSlot();
137
- const getLeftnavigationArrowContainerSlot = await LeftNavCO.getLeftnavigationArrowContainerSlot();
191
+ const [getLeftnavigationBottomContainerSlot, getLeftnavigationArrowContainerSlot] = await Promise.all([
192
+ LeftNavCO.getLeftnavigationBottomContainerSlot(),
193
+ LeftNavCO.getLeftnavigationArrowContainerSlot(),
194
+ ]);
138
195
 
139
196
  await expect(getLeftnavigationBottomContainerSlot).toHaveAttribute('aria-label', 'bottom-container-label');
140
197
  await expect(getLeftnavigationBottomContainerSlot).toHaveAttribute('data-testid', 'bottom-container-data-testid');
@@ -12,20 +12,20 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
12
12
  await expect(snapshot).toEqual(0);
13
13
  });
14
14
  it('02: Leftnav expanded - custom styles should be displayed correctly', async () => {
15
- await (await LeftNavCO.leftComponent(0)).click();
15
+ await (await LeftNavCO.getLeftnavigationCollapsedContainerSlot()).click();
16
16
  await $('body').click();
17
17
  const snapshot = await browser.checkSnapshot(LeftNavCO.snapshotPath('leftnav-slots-expanded'));
18
18
  await expect(snapshot).toEqual(0);
19
19
  });
20
20
  it('03: Notification expanded - custom styles should be displayed correctly', async () => {
21
- await (await LeftNavCO.leftNavItem(0)).click();
21
+ await (await LeftNavCO.getLeftnavigationItemSlotByIndex(0)).click();
22
22
  await $('body').click();
23
23
  const snapshot = await browser.checkSnapshot(LeftNavCO.snapshotPath('leftnav-slots-notifications'));
24
24
  await expect(snapshot).toEqual(0);
25
25
  });
26
26
  it('04: Logs expanded - custom styles should be displayed correctly', async () => {
27
- await (await LeftNavCO.leftChevron()).click();
28
- await (await LeftNavCO.leftNavItem(1)).click();
27
+ await (await LeftNavCO.getLeftnavigationItemChevronBackSlot()).click();
28
+ await (await LeftNavCO.getLeftnavigationItemSlotByIndex(1)).click();
29
29
  await $('body').click();
30
30
  const snapshot = await browser.checkSnapshot(LeftNavCO.snapshotPath('leftnav-slots-logs'));
31
31
  await expect(snapshot).toEqual(0);
@@ -279,6 +279,10 @@ export default class LeftNavCO extends PageObject {
279
279
  return $$('[data-dimsum-slot="dsLeftnavigationNotificationsContainer"]')[index];
280
280
  }
281
281
 
282
+ static async getLeftnavigationNotificationsIconSlot() {
283
+ return $('[data-dimsum-parent-slot="dsLeftnavigationNotificationsIcon"]');
284
+ }
285
+
282
286
  static async getLeftnavigationExceptionsIconSlot() {
283
287
  return $('[data-dimsum-slot="dsLeftnavigationExceptionsIcon"]');
284
288
  }
@@ -295,6 +299,10 @@ export default class LeftNavCO extends PageObject {
295
299
  return $('[data-dimsum-slot="dsLeftnavigationItemBorderBottom"]');
296
300
  }
297
301
 
302
+ static async getLeftnavigationItemChevronBackSlot() {
303
+ return $('[data-dimsum-parent-slot="dsLeftnavigationItemChevronBack"]');
304
+ }
305
+
298
306
  static async getLeftnavigationBodyAreasContainerSlot() {
299
307
  return $('[data-dimsum-slot="dsLeftnavigationBodyAreasContainer"]');
300
308
  }
@@ -311,6 +319,10 @@ export default class LeftNavCO extends PageObject {
311
319
  return $('[data-dimsum-slot="dsLeftnavigationFooterMenu"]');
312
320
  }
313
321
 
322
+ static async getLeftnavigationFooterMenuCollapseSlot() {
323
+ return $('[data-dimsum-parent-slot="dsLeftnavigationFooterMenuCollapse"]');
324
+ }
325
+
314
326
  static async getLeftnavigationFooterItemSlot() {
315
327
  return $('[data-dimsum-slot="dsLeftnavigationFooterItem"]');
316
328
  }
@@ -2,6 +2,7 @@
2
2
  import { Key } from 'webdriverio';
3
3
  import DSTabsCO from '../DSTabsCO';
4
4
  import LeftNavCO from '../../ds-leftnavigation/LeftNavigationCO';
5
+ import { HeaderCO } from '../../ds-data-table-async/components';
5
6
 
6
7
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
7
8
  describe('PUI-17823 - Tabs carousel with horizontal scrollbar - Mouse navigation', () => {
@@ -303,4 +304,257 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
303
304
  // });
304
305
  // });
305
306
  // }
307
+
308
+ describe('PUI-17925 - Tabs to TabPanel focus navigation - Mouse', () => {
309
+ before('loading page', async () => {
310
+ const errorOnGo = await DSTabsCO.integratedCarouselFull.go();
311
+ if (errorOnGo) throw errorOnGo;
312
+ });
313
+
314
+ it('01: should display the tab list and first tab selected by default', async () => {
315
+ // Step 1: Verify the tab list is displayed
316
+ const tabList = await DSTabsCO.getTabsList();
317
+ await tabList.waitForDisplayed();
318
+ await expect(tabList).toBeDisplayed();
319
+
320
+ // Step 2: Verify the first tab is selected initially
321
+ const firstTab = await DSTabsCO.getTab(1);
322
+ const ariaSelected = await firstTab.getAttribute('aria-selected');
323
+ await expect(ariaSelected).toBe('true');
324
+ });
325
+
326
+ it('02: should click on first tab and verify DataTable header ID is focusable', async () => {
327
+ // Step 3: Click the first tab to ensure it is selected
328
+ const firstTab = await DSTabsCO.getTab(1);
329
+ await firstTab.click();
330
+
331
+ // Step 4: Verify the first tab panel is displayed
332
+ const tabPanel = await DSTabsCO.getTabPanel(1);
333
+ await expect(tabPanel).toBeDisplayed();
334
+
335
+ // Step 5: Get the DataTable header (ID column) and verify it exists
336
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
337
+ await expect(headerCell).toBeDisplayed();
338
+ });
339
+
340
+ it('03: should click on DataTable header ID column', async () => {
341
+ // Step 6: Click on the ID header column
342
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
343
+ await headerCell.click();
344
+
345
+ // Step 7: Verify the header is interactable (sort button or header itself)
346
+ await expect(headerCell).toBeDisplayed();
347
+ });
348
+
349
+ it('04: should navigate to Tab 3 (Lender initiated) with secondary tabs', async () => {
350
+ // Step 8: Click on the third tab (Lender initiated)
351
+ const thirdTab = await DSTabsCO.getTab(3);
352
+ await thirdTab.click();
353
+
354
+ // Step 9: Verify the third tab is selected
355
+ const ariaSelected = await thirdTab.getAttribute('aria-selected');
356
+ await expect(ariaSelected).toBe('true');
357
+
358
+ // Step 10: Verify the third tab panel with secondary tabs is displayed
359
+ const tabPanel = await DSTabsCO.getTabPanel(3);
360
+ await expect(tabPanel).toBeDisplayed();
361
+ });
362
+
363
+ it('05: should display secondary tabs within Tab 3', async () => {
364
+ // Step 11: Verify the subtabs list is displayed
365
+ const subTabsList = await DSTabsCO.getSubTabsList();
366
+ await expect(subTabsList).toBeDisplayed();
367
+
368
+ // Step 12: Verify the first subtab is selected by default
369
+ const firstSubtab = await DSTabsCO.getSubtab(1);
370
+ const ariaSelected = await firstSubtab.getAttribute('aria-selected');
371
+ await expect(ariaSelected).toBe('true');
372
+ });
373
+
374
+ it('06: should click on 4th secondary tab which contains DataTable', async () => {
375
+ // Step 13: Click on the 4th subtab
376
+ const fourthSubtab = await DSTabsCO.getSubtab(4);
377
+ await fourthSubtab.click();
378
+
379
+ // Step 14: Verify the 4th subtab is selected
380
+ const ariaSelected = await fourthSubtab.getAttribute('aria-selected');
381
+ await expect(ariaSelected).toBe('true');
382
+ });
383
+
384
+ it('07: should verify DataTable in secondary tab 4 has ID header column', async () => {
385
+ // Step 15: Get the DataTable header (ID column) in the secondary tab
386
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
387
+ await expect(headerCell).toBeDisplayed();
388
+ });
389
+
390
+ it('08: should click on DataTable header ID column in secondary tab', async () => {
391
+ // Step 16: Click on the ID header column
392
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
393
+ await headerCell.click();
394
+
395
+ // Step 17: Verify the header is displayed
396
+ await expect(headerCell).toBeDisplayed();
397
+ });
398
+
399
+ it('09: should navigate back to first tab and verify focus flow', async () => {
400
+ // Step 18: Click on the first tab
401
+ const firstTab = await DSTabsCO.getTab(1);
402
+ await firstTab.click();
403
+
404
+ // Step 19: Verify the first tab is selected
405
+ const ariaSelected = await firstTab.getAttribute('aria-selected');
406
+ await expect(ariaSelected).toBe('true');
407
+
408
+ // Step 20: Verify the first tab panel is displayed
409
+ const tabPanel = await DSTabsCO.getTabPanel(1);
410
+ await expect(tabPanel).toBeDisplayed();
411
+ });
412
+ });
413
+
414
+ describe('PUI-17926 - Tabs to TabPanel focus navigation - Keyboard (Tab/Shift+Tab)', () => {
415
+ before('loading page', async () => {
416
+ const errorOnGo = await DSTabsCO.integratedCarouselFull.go();
417
+ if (errorOnGo) throw errorOnGo;
418
+ });
419
+
420
+ it('01: should display the tab list container', async () => {
421
+ // Step 1: Verify the tab list is displayed
422
+ const tabList = await DSTabsCO.getTabsList();
423
+ await tabList.waitForDisplayed();
424
+ await expect(tabList).toBeDisplayed();
425
+ });
426
+
427
+ it('02: should focus the first tab using Tab key', async () => {
428
+ // Step 2: Click on footer button and press Tab to focus on the tab list
429
+ const footerBtn = await LeftNavCO.footerBtn();
430
+ const firstTab = await DSTabsCO.getTab(1);
431
+ await footerBtn.click();
432
+ await browser.keys(Key.Tab);
433
+
434
+ // Step 3: Verify the first tab is focused
435
+ await expect(firstTab).toBeFocused();
436
+ });
437
+
438
+ it('03: should press Tab to move focus from Tab to TabPanel content (DataTable header ID)', async () => {
439
+ // Step 4: Press Tab to move focus to the TabPanel content
440
+ await browser.keys(Key.Tab);
441
+
442
+ // Step 5: Verify focus moved to the DataTable header (ID column)
443
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
444
+ await expect(headerCell).toBeFocused();
445
+ });
446
+
447
+ it('04: should press Shift+Tab to move focus back to Tab from TabPanel', async () => {
448
+ // Step 6: Press Shift+Tab to move focus back to the tab
449
+ await browser.keys([Key.Shift, Key.Tab]);
450
+
451
+ // Step 7: Verify focus is back on the first tab
452
+ const firstTab = await DSTabsCO.getTab(1);
453
+ await expect(firstTab).toBeFocused();
454
+ });
455
+
456
+ it('05: should navigate to Tab 3 (Lender initiated) using ArrowRight', async () => {
457
+ // Step 8: Press ArrowRight twice to navigate to the third tab
458
+ await browser.keys(Key.ArrowRight);
459
+ await browser.keys(Key.ArrowRight);
460
+
461
+ // Step 9: Verify the third tab is focused
462
+ const thirdTab = await DSTabsCO.getTab(3);
463
+ await expect(thirdTab).toBeFocused();
464
+
465
+ // Step 10: Press Enter to select the third tab
466
+ await browser.keys(Key.Enter);
467
+
468
+ // Step 11: Verify the third tab is selected
469
+ const ariaSelected = await thirdTab.getAttribute('aria-selected');
470
+ await expect(ariaSelected).toBe('true');
471
+ });
472
+
473
+ it('06: should press Tab to move focus to secondary tabs', async () => {
474
+ // Step 12: Press Tab to move focus to the subtabs list
475
+ await browser.keys(Key.Tab);
476
+
477
+ // Step 13: Verify focus is on the first subtab
478
+ const firstSubtab = await DSTabsCO.getSubtab(1);
479
+ await expect(firstSubtab).toBeFocused();
480
+ });
481
+
482
+ it('07: should navigate to 4th secondary tab using ArrowRight', async () => {
483
+ // Step 14: Press ArrowRight three times to navigate to the 4th subtab
484
+ await browser.keys(Key.ArrowRight);
485
+ await browser.keys(Key.ArrowRight);
486
+ await browser.keys(Key.ArrowRight);
487
+
488
+ // Step 15: Verify the 4th subtab is focused
489
+ const fourthSubtab = await DSTabsCO.getSubtab(4);
490
+ await expect(fourthSubtab).toBeFocused();
491
+
492
+ // Step 16: Press Enter to select the 4th subtab
493
+ await browser.keys(Key.Enter);
494
+
495
+ // Step 17: Verify the 4th subtab is selected
496
+ const ariaSelected = await fourthSubtab.getAttribute('aria-selected');
497
+ await expect(ariaSelected).toBe('true');
498
+ });
499
+
500
+ it('08: should press Tab to move focus to DataTable in secondary tab 4', async () => {
501
+ // Step 18: Press Tab to move focus to the DataTable
502
+ await browser.keys(Key.Tab);
503
+
504
+ // Step 19: Verify focus moved to the DataTable header (ID column)
505
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
506
+ await expect(headerCell).toBeFocused();
507
+ });
508
+
509
+ it('09: should press Shift+Tab to move focus back to secondary tab', async () => {
510
+ // Step 20: Press Shift+Tab to move focus back to the subtab
511
+ await browser.keys([Key.Shift, Key.Tab]);
512
+
513
+ // Step 21: Verify focus is back on the 4th subtab
514
+ const fourthSubtab = await DSTabsCO.getSubtab(4);
515
+ await expect(fourthSubtab).toBeFocused();
516
+ });
517
+
518
+ it('10: should press Shift+Tab to move focus back to primary tab', async () => {
519
+ // Step 22: Press Shift+Tab to move focus back to the primary tab
520
+ await browser.keys([Key.Shift, Key.Tab]);
521
+
522
+ // Step 23: Verify focus is back on the third tab
523
+ const thirdTab = await DSTabsCO.getTab(3);
524
+ await expect(thirdTab).toBeFocused();
525
+ });
526
+
527
+ it('11: should navigate back to first tab and Tab to DataTable', async () => {
528
+ // Step 24: Press ArrowLeft twice to navigate back to the first tab
529
+ await browser.keys(Key.ArrowLeft);
530
+ await browser.keys(Key.ArrowLeft);
531
+
532
+ // Step 25: Verify the first tab is focused
533
+ const firstTab = await DSTabsCO.getTab(1);
534
+ await expect(firstTab).toBeFocused();
535
+
536
+ // Step 26: Press Enter to select the first tab
537
+ await browser.keys(Key.Enter);
538
+
539
+ // Step 27: Press Tab to move focus to the DataTable
540
+ await browser.keys(Key.Tab);
541
+
542
+ // Step 28: Verify focus is on the DataTable header (ID column)
543
+ const headerCell = await HeaderCO.getHeaderCellByText('id');
544
+ await expect(headerCell).toBeFocused();
545
+ });
546
+
547
+ it('12: should verify full Tab/Shift+Tab cycle from DataTable back to Tab', async () => {
548
+ // Step 29: Press Shift+Tab to move focus back to the tab
549
+ await browser.keys([Key.Shift, Key.Tab]);
550
+
551
+ // Step 30: Verify focus is back on the first tab
552
+ const firstTab = await DSTabsCO.getTab(1);
553
+ await expect(firstTab).toBeFocused();
554
+
555
+ // Step 31: Verify the first tab is still selected
556
+ const ariaSelected = await firstTab.getAttribute('aria-selected');
557
+ await expect(ariaSelected).toBe('true');
558
+ });
559
+ });
306
560
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "dimsum-e2e-tests",
4
- "version": "3.60.0-next.27",
4
+ "version": "3.60.0-next.29",
5
5
  "description": "End-to-end tests for dimsum library",
6
6
  "dependencies": {
7
7
  "@elliemae/ds-legacy-button": "1.0.16",
@@ -41,155 +41,155 @@
41
41
  "@elliemae/ds-legacy-wysiwygeditor": "1.0.16",
42
42
  "@elliemae/ds-legacy-zipcode-search": "1.0.16",
43
43
  "@elliemae/ds-legacy-zoom": "1.0.16",
44
- "@elliemae/ds-accordion": "3.60.0-next.27",
45
- "@elliemae/ds-accessibility": "3.60.0-next.27",
46
- "@elliemae/ds-backdrop": "3.60.0-next.27",
47
- "@elliemae/ds-banner": "3.60.0-next.27",
48
- "@elliemae/ds-app-picker": "3.60.0-next.27",
49
- "@elliemae/ds-basic": "3.60.0-next.27",
50
- "@elliemae/ds-card": "3.60.0-next.27",
51
- "@elliemae/ds-card-navigation": "3.60.0-next.27",
52
- "@elliemae/ds-breadcrumb": "3.60.0-next.27",
53
- "@elliemae/ds-card-v1": "3.60.0-next.27",
54
- "@elliemae/ds-card-v1-detail": "3.60.0-next.27",
55
- "@elliemae/ds-card-v2-group": "3.60.0-next.27",
56
- "@elliemae/ds-card-v2": "3.60.0-next.27",
57
- "@elliemae/ds-card-v2-action-addon": "3.60.0-next.27",
58
- "@elliemae/ds-card-v3": "3.60.0-next.27",
59
- "@elliemae/ds-button-v2": "3.60.0-next.27",
60
- "@elliemae/ds-chat": "3.60.0-next.27",
61
- "@elliemae/ds-card-v3-poc": "3.60.0-next.27",
62
- "@elliemae/ds-chat-bubble": "3.60.0-next.27",
63
- "@elliemae/ds-chat-card": "3.60.0-next.27",
64
- "@elliemae/ds-chat-container": "3.60.0-next.27",
65
- "@elliemae/ds-chat-empty-state": "3.60.0-next.27",
66
- "@elliemae/ds-chat-container-header": "3.60.0-next.27",
67
- "@elliemae/ds-chat-floating-button": "3.60.0-next.27",
68
- "@elliemae/ds-chat-message-delimeter": "3.60.0-next.27",
69
- "@elliemae/ds-chat-sidebar": "3.60.0-next.27",
70
- "@elliemae/ds-chat-system-message": "3.60.0-next.27",
71
- "@elliemae/ds-chat-tile": "3.60.0-next.27",
72
- "@elliemae/ds-chip": "3.60.0-next.27",
73
- "@elliemae/ds-circular-progress-indicator": "3.60.0-next.27",
74
- "@elliemae/ds-classnames": "3.60.0-next.27",
75
- "@elliemae/ds-controlled-form": "3.60.0-next.27",
76
- "@elliemae/ds-comments": "3.60.0-next.27",
77
- "@elliemae/ds-data-table": "3.60.0-next.27",
78
- "@elliemae/ds-csv-converter": "3.60.0-next.27",
79
- "@elliemae/ds-data-table-cell-header": "3.60.0-next.27",
80
- "@elliemae/ds-data-table-action-cell": "3.60.0-next.27",
81
- "@elliemae/ds-data-table-drag-and-drop-cell": "3.60.0-next.27",
82
- "@elliemae/ds-codeeditor": "3.60.0-next.27",
83
- "@elliemae/ds-data-table-expand-cell": "3.60.0-next.27",
84
- "@elliemae/ds-data-table-cell": "3.60.0-next.27",
85
- "@elliemae/ds-data-table-filters": "3.60.0-next.27",
86
- "@elliemae/ds-data-table-multi-select-cell": "3.60.0-next.27",
87
- "@elliemae/ds-data-table-single-select-cell": "3.60.0-next.27",
88
- "@elliemae/ds-date-time-picker": "3.60.0-next.27",
89
- "@elliemae/ds-drag-and-drop": "3.60.0-next.27",
90
- "@elliemae/ds-dataviz-pie": "3.60.0-next.27",
91
- "@elliemae/ds-dataviz": "3.60.0-next.27",
92
- "@elliemae/ds-dropdownmenu-v2": "3.60.0-next.27",
93
- "@elliemae/ds-floating-context": "3.60.0-next.27",
94
- "@elliemae/ds-dropzone": "3.60.0-next.27",
95
- "@elliemae/ds-decision-graph": "3.60.0-next.27",
96
- "@elliemae/ds-dialog": "3.60.0-next.27",
97
- "@elliemae/ds-form-date-range-picker": "3.60.0-next.27",
98
- "@elliemae/ds-form-combobox": "3.60.0-next.27",
99
- "@elliemae/ds-form-date-time-picker": "3.60.0-next.27",
100
- "@elliemae/ds-form-helpers-mask-hooks": "3.60.0-next.27",
101
- "@elliemae/ds-fast-list": "3.60.0-next.27",
102
- "@elliemae/ds-form-checkbox": "3.60.0-next.27",
103
- "@elliemae/ds-form-input-textarea": "3.60.0-next.27",
104
- "@elliemae/ds-form-layout-autocomplete": "3.60.0-next.27",
105
- "@elliemae/ds-form-input-text": "3.60.0-next.27",
106
- "@elliemae/ds-form-layout-input-group": "3.60.0-next.27",
107
- "@elliemae/ds-form-multi-combobox": "3.60.0-next.27",
108
- "@elliemae/ds-form-native-select": "3.60.0-next.27",
109
- "@elliemae/ds-form-layout-blocks": "3.60.0-next.27",
110
- "@elliemae/ds-form-layout-label": "3.60.0-next.27",
111
- "@elliemae/ds-form-radio": "3.60.0-next.27",
112
- "@elliemae/ds-form-select": "3.60.0-next.27",
113
- "@elliemae/ds-form-single-combobox": "3.60.0-next.27",
114
- "@elliemae/ds-form-toggle": "3.60.0-next.27",
115
- "@elliemae/ds-global-header": "3.60.0-next.27",
116
- "@elliemae/ds-grid": "3.60.0-next.27",
117
- "@elliemae/ds-hooks-focus-stack": "3.60.0-next.27",
118
- "@elliemae/ds-hooks-headless-tooltip": "3.60.0-next.27",
119
- "@elliemae/ds-hooks-fontsize-media": "3.60.0-next.27",
120
- "@elliemae/ds-hooks-fontsize-detector": "3.60.0-next.27",
121
- "@elliemae/ds-hooks-is-mobile": "3.60.0-next.27",
122
- "@elliemae/ds-hooks-on-blur-out": "3.60.0-next.27",
123
- "@elliemae/ds-hooks-is-showing-ellipsis": "3.60.0-next.27",
124
- "@elliemae/ds-hooks-focus-trap": "3.60.0-next.27",
125
- "@elliemae/ds-hooks-keyboard-navigation": "3.60.0-next.27",
126
- "@elliemae/ds-icon": "3.60.0-next.27",
127
- "@elliemae/ds-hooks-on-first-focus-in": "3.60.0-next.27",
128
- "@elliemae/ds-icons": "3.60.0-next.27",
129
- "@elliemae/ds-image": "3.60.0-next.27",
130
- "@elliemae/ds-imagelibrarymodal": "3.60.0-next.27",
131
- "@elliemae/ds-indeterminate-progress-indicator": "3.60.0-next.27",
132
- "@elliemae/ds-left-navigation": "3.60.0-next.27",
133
- "@elliemae/ds-layout-provider": "3.60.0-next.27",
134
- "@elliemae/ds-loading-indicator": "3.60.0-next.27",
135
- "@elliemae/ds-menu-button": "3.60.0-next.27",
136
- "@elliemae/ds-menu-items": "3.60.0-next.27",
137
- "@elliemae/ds-menu-items-action": "3.60.0-next.27",
138
- "@elliemae/ds-menu-items-commons": "3.60.0-next.27",
139
- "@elliemae/ds-menu-items-section": "3.60.0-next.27",
140
- "@elliemae/ds-menu-items-single": "3.60.0-next.27",
141
- "@elliemae/ds-menu-items-single-with-submenu": "3.60.0-next.27",
142
- "@elliemae/ds-menu-items-separator": "3.60.0-next.27",
143
- "@elliemae/ds-menu-items-multi": "3.60.0-next.27",
144
- "@elliemae/ds-mobile": "3.60.0-next.27",
145
- "@elliemae/ds-menu-items-submenu": "3.60.0-next.27",
146
- "@elliemae/ds-menu-items-skeleton": "3.60.0-next.27",
147
- "@elliemae/ds-modal-slide": "3.60.0-next.27",
148
- "@elliemae/ds-notification-badge": "3.60.0-next.27",
149
- "@elliemae/ds-overlay": "3.60.0-next.27",
150
- "@elliemae/ds-menu-tree-item": "3.60.0-next.27",
151
- "@elliemae/ds-page-header": "3.60.0-next.27",
152
- "@elliemae/ds-page-header-v1": "3.60.0-next.27",
153
- "@elliemae/ds-page-layout": "3.60.0-next.27",
154
- "@elliemae/ds-pills-v2": "3.60.0-next.27",
155
- "@elliemae/ds-pagination": "3.60.0-next.27",
156
- "@elliemae/ds-page-header-v2": "3.60.0-next.27",
157
- "@elliemae/ds-popperjs": "3.60.0-next.27",
158
- "@elliemae/ds-portal": "3.60.0-next.27",
159
- "@elliemae/ds-progress-indicator": "3.60.0-next.27",
160
- "@elliemae/ds-props-helpers": "3.60.0-next.27",
161
- "@elliemae/ds-resizeable-container": "3.60.0-next.27",
162
- "@elliemae/ds-query-builder": "3.60.0-next.27",
163
- "@elliemae/ds-read-more": "3.60.0-next.27",
164
- "@elliemae/ds-ribbon": "3.60.0-next.27",
165
- "@elliemae/ds-scrollable-container": "3.60.0-next.27",
166
- "@elliemae/ds-separator": "3.60.0-next.27",
167
- "@elliemae/ds-shared": "3.60.0-next.27",
168
- "@elliemae/ds-side-panel": "3.60.0-next.27",
169
- "@elliemae/ds-side-panel-header": "3.60.0-next.27",
170
- "@elliemae/ds-skeleton": "3.60.0-next.27",
171
- "@elliemae/ds-shuttle-v2": "3.60.0-next.27",
172
- "@elliemae/ds-slider-v2": "3.60.0-next.27",
173
- "@elliemae/ds-stepper": "3.60.0-next.27",
174
- "@elliemae/ds-square-indicator": "3.60.0-next.27",
175
- "@elliemae/ds-svg": "3.60.0-next.27",
176
- "@elliemae/ds-system": "3.60.0-next.27",
177
- "@elliemae/ds-tabs": "3.60.0-next.27",
178
- "@elliemae/ds-test-utils": "3.60.0-next.27",
179
- "@elliemae/ds-toast": "3.60.0-next.27",
180
- "@elliemae/ds-toolbar-v2": "3.60.0-next.27",
181
- "@elliemae/ds-tooltip-v3": "3.60.0-next.27",
182
- "@elliemae/ds-toolbar-v1": "3.60.0-next.27",
183
- "@elliemae/ds-transition": "3.60.0-next.27",
184
- "@elliemae/ds-tree-model": "3.60.0-next.27",
185
- "@elliemae/ds-treeview": "3.60.0-next.27",
186
- "@elliemae/ds-truncated-tooltip-text": "3.60.0-next.27",
187
- "@elliemae/ds-typescript-helpers": "3.60.0-next.27",
188
- "@elliemae/ds-truncated-expandable-text": "3.60.0-next.27",
189
- "@elliemae/ds-typography": "3.60.0-next.27",
190
- "@elliemae/ds-wizard": "3.60.0-next.27",
191
- "@elliemae/ds-virtual-list": "3.60.0-next.27",
192
- "@elliemae/ds-zustand-helpers": "3.60.0-next.27"
44
+ "@elliemae/ds-accessibility": "3.60.0-next.29",
45
+ "@elliemae/ds-app-picker": "3.60.0-next.29",
46
+ "@elliemae/ds-accordion": "3.60.0-next.29",
47
+ "@elliemae/ds-backdrop": "3.60.0-next.29",
48
+ "@elliemae/ds-banner": "3.60.0-next.29",
49
+ "@elliemae/ds-button-v2": "3.60.0-next.29",
50
+ "@elliemae/ds-breadcrumb": "3.60.0-next.29",
51
+ "@elliemae/ds-basic": "3.60.0-next.29",
52
+ "@elliemae/ds-card": "3.60.0-next.29",
53
+ "@elliemae/ds-card-navigation": "3.60.0-next.29",
54
+ "@elliemae/ds-card-v1-detail": "3.60.0-next.29",
55
+ "@elliemae/ds-card-v2": "3.60.0-next.29",
56
+ "@elliemae/ds-card-v2-action-addon": "3.60.0-next.29",
57
+ "@elliemae/ds-card-v1": "3.60.0-next.29",
58
+ "@elliemae/ds-card-v3": "3.60.0-next.29",
59
+ "@elliemae/ds-card-v2-group": "3.60.0-next.29",
60
+ "@elliemae/ds-card-v3-poc": "3.60.0-next.29",
61
+ "@elliemae/ds-chat-bubble": "3.60.0-next.29",
62
+ "@elliemae/ds-chat": "3.60.0-next.29",
63
+ "@elliemae/ds-chat-card": "3.60.0-next.29",
64
+ "@elliemae/ds-chat-container-header": "3.60.0-next.29",
65
+ "@elliemae/ds-chat-container": "3.60.0-next.29",
66
+ "@elliemae/ds-chat-empty-state": "3.60.0-next.29",
67
+ "@elliemae/ds-chat-floating-button": "3.60.0-next.29",
68
+ "@elliemae/ds-chat-message-delimeter": "3.60.0-next.29",
69
+ "@elliemae/ds-chat-sidebar": "3.60.0-next.29",
70
+ "@elliemae/ds-chat-system-message": "3.60.0-next.29",
71
+ "@elliemae/ds-chat-tile": "3.60.0-next.29",
72
+ "@elliemae/ds-chip": "3.60.0-next.29",
73
+ "@elliemae/ds-circular-progress-indicator": "3.60.0-next.29",
74
+ "@elliemae/ds-classnames": "3.60.0-next.29",
75
+ "@elliemae/ds-codeeditor": "3.60.0-next.29",
76
+ "@elliemae/ds-controlled-form": "3.60.0-next.29",
77
+ "@elliemae/ds-csv-converter": "3.60.0-next.29",
78
+ "@elliemae/ds-data-table": "3.60.0-next.29",
79
+ "@elliemae/ds-data-table-action-cell": "3.60.0-next.29",
80
+ "@elliemae/ds-comments": "3.60.0-next.29",
81
+ "@elliemae/ds-data-table-cell-header": "3.60.0-next.29",
82
+ "@elliemae/ds-data-table-cell": "3.60.0-next.29",
83
+ "@elliemae/ds-data-table-drag-and-drop-cell": "3.60.0-next.29",
84
+ "@elliemae/ds-data-table-expand-cell": "3.60.0-next.29",
85
+ "@elliemae/ds-data-table-filters": "3.60.0-next.29",
86
+ "@elliemae/ds-data-table-single-select-cell": "3.60.0-next.29",
87
+ "@elliemae/ds-dataviz": "3.60.0-next.29",
88
+ "@elliemae/ds-data-table-multi-select-cell": "3.60.0-next.29",
89
+ "@elliemae/ds-dataviz-pie": "3.60.0-next.29",
90
+ "@elliemae/ds-decision-graph": "3.60.0-next.29",
91
+ "@elliemae/ds-date-time-picker": "3.60.0-next.29",
92
+ "@elliemae/ds-drag-and-drop": "3.60.0-next.29",
93
+ "@elliemae/ds-dropdownmenu-v2": "3.60.0-next.29",
94
+ "@elliemae/ds-dropzone": "3.60.0-next.29",
95
+ "@elliemae/ds-fast-list": "3.60.0-next.29",
96
+ "@elliemae/ds-dialog": "3.60.0-next.29",
97
+ "@elliemae/ds-floating-context": "3.60.0-next.29",
98
+ "@elliemae/ds-form-checkbox": "3.60.0-next.29",
99
+ "@elliemae/ds-form-combobox": "3.60.0-next.29",
100
+ "@elliemae/ds-form-date-range-picker": "3.60.0-next.29",
101
+ "@elliemae/ds-form-date-time-picker": "3.60.0-next.29",
102
+ "@elliemae/ds-form-helpers-mask-hooks": "3.60.0-next.29",
103
+ "@elliemae/ds-form-input-textarea": "3.60.0-next.29",
104
+ "@elliemae/ds-form-input-text": "3.60.0-next.29",
105
+ "@elliemae/ds-form-layout-autocomplete": "3.60.0-next.29",
106
+ "@elliemae/ds-form-layout-blocks": "3.60.0-next.29",
107
+ "@elliemae/ds-form-layout-input-group": "3.60.0-next.29",
108
+ "@elliemae/ds-form-layout-label": "3.60.0-next.29",
109
+ "@elliemae/ds-form-multi-combobox": "3.60.0-next.29",
110
+ "@elliemae/ds-form-native-select": "3.60.0-next.29",
111
+ "@elliemae/ds-form-radio": "3.60.0-next.29",
112
+ "@elliemae/ds-form-select": "3.60.0-next.29",
113
+ "@elliemae/ds-form-single-combobox": "3.60.0-next.29",
114
+ "@elliemae/ds-form-toggle": "3.60.0-next.29",
115
+ "@elliemae/ds-global-header": "3.60.0-next.29",
116
+ "@elliemae/ds-hooks-focus-stack": "3.60.0-next.29",
117
+ "@elliemae/ds-grid": "3.60.0-next.29",
118
+ "@elliemae/ds-hooks-focus-trap": "3.60.0-next.29",
119
+ "@elliemae/ds-hooks-fontsize-media": "3.60.0-next.29",
120
+ "@elliemae/ds-hooks-is-mobile": "3.60.0-next.29",
121
+ "@elliemae/ds-hooks-is-showing-ellipsis": "3.60.0-next.29",
122
+ "@elliemae/ds-hooks-keyboard-navigation": "3.60.0-next.29",
123
+ "@elliemae/ds-hooks-on-blur-out": "3.60.0-next.29",
124
+ "@elliemae/ds-hooks-on-first-focus-in": "3.60.0-next.29",
125
+ "@elliemae/ds-hooks-fontsize-detector": "3.60.0-next.29",
126
+ "@elliemae/ds-icon": "3.60.0-next.29",
127
+ "@elliemae/ds-image": "3.60.0-next.29",
128
+ "@elliemae/ds-icons": "3.60.0-next.29",
129
+ "@elliemae/ds-imagelibrarymodal": "3.60.0-next.29",
130
+ "@elliemae/ds-indeterminate-progress-indicator": "3.60.0-next.29",
131
+ "@elliemae/ds-layout-provider": "3.60.0-next.29",
132
+ "@elliemae/ds-left-navigation": "3.60.0-next.29",
133
+ "@elliemae/ds-menu-items": "3.60.0-next.29",
134
+ "@elliemae/ds-menu-button": "3.60.0-next.29",
135
+ "@elliemae/ds-menu-items-action": "3.60.0-next.29",
136
+ "@elliemae/ds-loading-indicator": "3.60.0-next.29",
137
+ "@elliemae/ds-hooks-headless-tooltip": "3.60.0-next.29",
138
+ "@elliemae/ds-menu-items-commons": "3.60.0-next.29",
139
+ "@elliemae/ds-menu-items-multi": "3.60.0-next.29",
140
+ "@elliemae/ds-menu-items-separator": "3.60.0-next.29",
141
+ "@elliemae/ds-menu-items-single": "3.60.0-next.29",
142
+ "@elliemae/ds-menu-items-single-with-submenu": "3.60.0-next.29",
143
+ "@elliemae/ds-menu-items-skeleton": "3.60.0-next.29",
144
+ "@elliemae/ds-menu-items-section": "3.60.0-next.29",
145
+ "@elliemae/ds-menu-tree-item": "3.60.0-next.29",
146
+ "@elliemae/ds-mobile": "3.60.0-next.29",
147
+ "@elliemae/ds-modal-slide": "3.60.0-next.29",
148
+ "@elliemae/ds-menu-items-submenu": "3.60.0-next.29",
149
+ "@elliemae/ds-notification-badge": "3.60.0-next.29",
150
+ "@elliemae/ds-overlay": "3.60.0-next.29",
151
+ "@elliemae/ds-page-header": "3.60.0-next.29",
152
+ "@elliemae/ds-page-header-v1": "3.60.0-next.29",
153
+ "@elliemae/ds-page-header-v2": "3.60.0-next.29",
154
+ "@elliemae/ds-page-layout": "3.60.0-next.29",
155
+ "@elliemae/ds-pagination": "3.60.0-next.29",
156
+ "@elliemae/ds-pills-v2": "3.60.0-next.29",
157
+ "@elliemae/ds-popperjs": "3.60.0-next.29",
158
+ "@elliemae/ds-portal": "3.60.0-next.29",
159
+ "@elliemae/ds-progress-indicator": "3.60.0-next.29",
160
+ "@elliemae/ds-query-builder": "3.60.0-next.29",
161
+ "@elliemae/ds-props-helpers": "3.60.0-next.29",
162
+ "@elliemae/ds-resizeable-container": "3.60.0-next.29",
163
+ "@elliemae/ds-ribbon": "3.60.0-next.29",
164
+ "@elliemae/ds-read-more": "3.60.0-next.29",
165
+ "@elliemae/ds-scrollable-container": "3.60.0-next.29",
166
+ "@elliemae/ds-separator": "3.60.0-next.29",
167
+ "@elliemae/ds-shared": "3.60.0-next.29",
168
+ "@elliemae/ds-shuttle-v2": "3.60.0-next.29",
169
+ "@elliemae/ds-side-panel": "3.60.0-next.29",
170
+ "@elliemae/ds-side-panel-header": "3.60.0-next.29",
171
+ "@elliemae/ds-skeleton": "3.60.0-next.29",
172
+ "@elliemae/ds-square-indicator": "3.60.0-next.29",
173
+ "@elliemae/ds-slider-v2": "3.60.0-next.29",
174
+ "@elliemae/ds-svg": "3.60.0-next.29",
175
+ "@elliemae/ds-stepper": "3.60.0-next.29",
176
+ "@elliemae/ds-tabs": "3.60.0-next.29",
177
+ "@elliemae/ds-test-utils": "3.60.0-next.29",
178
+ "@elliemae/ds-system": "3.60.0-next.29",
179
+ "@elliemae/ds-toast": "3.60.0-next.29",
180
+ "@elliemae/ds-toolbar-v1": "3.60.0-next.29",
181
+ "@elliemae/ds-tooltip-v3": "3.60.0-next.29",
182
+ "@elliemae/ds-transition": "3.60.0-next.29",
183
+ "@elliemae/ds-toolbar-v2": "3.60.0-next.29",
184
+ "@elliemae/ds-treeview": "3.60.0-next.29",
185
+ "@elliemae/ds-tree-model": "3.60.0-next.29",
186
+ "@elliemae/ds-truncated-expandable-text": "3.60.0-next.29",
187
+ "@elliemae/ds-truncated-tooltip-text": "3.60.0-next.29",
188
+ "@elliemae/ds-typescript-helpers": "3.60.0-next.29",
189
+ "@elliemae/ds-typography": "3.60.0-next.29",
190
+ "@elliemae/ds-zustand-helpers": "3.60.0-next.29",
191
+ "@elliemae/ds-wizard": "3.60.0-next.29",
192
+ "@elliemae/ds-virtual-list": "3.60.0-next.29"
193
193
  },
194
194
  "publishConfig": {
195
195
  "access": "public"