@skyux/tabs 4.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +218 -0
  2. package/README.md +5 -0
  3. package/bundles/skyux-tabs-testing.umd.js +395 -0
  4. package/bundles/skyux-tabs-testing.umd.js.map +1 -0
  5. package/bundles/skyux-tabs-testing.umd.min.js +16 -0
  6. package/bundles/skyux-tabs-testing.umd.min.js.map +1 -0
  7. package/bundles/skyux-tabs.umd.js +2414 -0
  8. package/bundles/skyux-tabs.umd.js.map +1 -0
  9. package/bundles/skyux-tabs.umd.min.js +16 -0
  10. package/bundles/skyux-tabs.umd.min.js.map +1 -0
  11. package/esm2015/modules/sectioned-form/sectioned-form-section.component.js +74 -0
  12. package/esm2015/modules/sectioned-form/sectioned-form.component.js +105 -0
  13. package/esm2015/modules/sectioned-form/sectioned-form.module.js +28 -0
  14. package/esm2015/modules/sectioned-form/sectioned-form.service.js +34 -0
  15. package/esm2015/modules/shared/tabs-resources.module.js +17 -0
  16. package/esm2015/modules/tabs/tab-button.component.js +71 -0
  17. package/esm2015/modules/tabs/tab-index.js +1 -0
  18. package/esm2015/modules/tabs/tab.component.js +144 -0
  19. package/esm2015/modules/tabs/tabs.module.js +41 -0
  20. package/esm2015/modules/tabs/tabset-active-tab-unregistered-args.js +1 -0
  21. package/esm2015/modules/tabs/tabset-adapter.service.js +53 -0
  22. package/esm2015/modules/tabs/tabset-buttons-display-mode.js +1 -0
  23. package/esm2015/modules/tabs/tabset-nav-button.component.js +122 -0
  24. package/esm2015/modules/tabs/tabset-permalink.service.js +123 -0
  25. package/esm2015/modules/tabs/tabset-style.js +1 -0
  26. package/esm2015/modules/tabs/tabset-tab-indexes-change.js +1 -0
  27. package/esm2015/modules/tabs/tabset.component.js +403 -0
  28. package/esm2015/modules/tabs/tabset.service.js +109 -0
  29. package/esm2015/modules/vertical-tabset/vertical-tab-media-query.service.js +71 -0
  30. package/esm2015/modules/vertical-tabset/vertical-tab.component.js +195 -0
  31. package/esm2015/modules/vertical-tabset/vertical-tabset-adapter.service.js +50 -0
  32. package/esm2015/modules/vertical-tabset/vertical-tabset-group.component.js +113 -0
  33. package/esm2015/modules/vertical-tabset/vertical-tabset.component.js +139 -0
  34. package/esm2015/modules/vertical-tabset/vertical-tabset.module.js +43 -0
  35. package/esm2015/modules/vertical-tabset/vertical-tabset.service.js +167 -0
  36. package/esm2015/plugin-resources/tabs-resources-provider.js +16 -0
  37. package/esm2015/public_api.js +10 -0
  38. package/esm2015/skyux-tabs.js +21 -0
  39. package/esm2015/testing/public_api.js +2 -0
  40. package/esm2015/testing/skyux-tabs-testing.js +5 -0
  41. package/esm2015/testing/tabs/tab-fixture-tab.js +1 -0
  42. package/esm2015/testing/tabs/tabset-fixture.js +141 -0
  43. package/esm5/modules/sectioned-form/sectioned-form-section.component.js +84 -0
  44. package/esm5/modules/sectioned-form/sectioned-form.component.js +111 -0
  45. package/esm5/modules/sectioned-form/sectioned-form.module.js +31 -0
  46. package/esm5/modules/sectioned-form/sectioned-form.service.js +35 -0
  47. package/esm5/modules/shared/tabs-resources.module.js +20 -0
  48. package/esm5/modules/tabs/tab-button.component.js +72 -0
  49. package/esm5/modules/tabs/tab-index.js +1 -0
  50. package/esm5/modules/tabs/tab.component.js +173 -0
  51. package/esm5/modules/tabs/tabs.module.js +44 -0
  52. package/esm5/modules/tabs/tabset-active-tab-unregistered-args.js +1 -0
  53. package/esm5/modules/tabs/tabset-adapter.service.js +58 -0
  54. package/esm5/modules/tabs/tabset-buttons-display-mode.js +1 -0
  55. package/esm5/modules/tabs/tabset-nav-button.component.js +145 -0
  56. package/esm5/modules/tabs/tabset-permalink.service.js +129 -0
  57. package/esm5/modules/tabs/tabset-style.js +1 -0
  58. package/esm5/modules/tabs/tabset-tab-indexes-change.js +1 -0
  59. package/esm5/modules/tabs/tabset.component.js +434 -0
  60. package/esm5/modules/tabs/tabset.service.js +122 -0
  61. package/esm5/modules/vertical-tabset/vertical-tab-media-query.service.js +76 -0
  62. package/esm5/modules/vertical-tabset/vertical-tab.component.js +214 -0
  63. package/esm5/modules/vertical-tabset/vertical-tabset-adapter.service.js +51 -0
  64. package/esm5/modules/vertical-tabset/vertical-tabset-group.component.js +119 -0
  65. package/esm5/modules/vertical-tabset/vertical-tabset.component.js +145 -0
  66. package/esm5/modules/vertical-tabset/vertical-tabset.module.js +46 -0
  67. package/esm5/modules/vertical-tabset/vertical-tabset.service.js +176 -0
  68. package/esm5/plugin-resources/tabs-resources-provider.js +17 -0
  69. package/esm5/public_api.js +10 -0
  70. package/esm5/skyux-tabs.js +21 -0
  71. package/esm5/testing/public_api.js +2 -0
  72. package/esm5/testing/skyux-tabs-testing.js +5 -0
  73. package/esm5/testing/tabs/tab-fixture-tab.js +1 -0
  74. package/esm5/testing/tabs/tabset-fixture.js +168 -0
  75. package/fesm2015/skyux-tabs-testing.js +148 -0
  76. package/fesm2015/skyux-tabs-testing.js.map +1 -0
  77. package/fesm2015/skyux-tabs.js +1998 -0
  78. package/fesm2015/skyux-tabs.js.map +1 -0
  79. package/fesm5/skyux-tabs-testing.js +174 -0
  80. package/fesm5/skyux-tabs-testing.js.map +1 -0
  81. package/fesm5/skyux-tabs.js +2182 -0
  82. package/fesm5/skyux-tabs.js.map +1 -0
  83. package/modules/sectioned-form/sectioned-form-section.component.d.ts +39 -0
  84. package/modules/sectioned-form/sectioned-form.component.d.ts +30 -0
  85. package/modules/sectioned-form/sectioned-form.module.d.ts +2 -0
  86. package/modules/sectioned-form/sectioned-form.service.d.ts +21 -0
  87. package/modules/shared/tabs-resources.module.d.ts +2 -0
  88. package/modules/tabs/tab-button.component.d.ts +21 -0
  89. package/modules/tabs/tab-index.d.ts +1 -0
  90. package/modules/tabs/tab.component.d.ts +77 -0
  91. package/modules/tabs/tabs.module.d.ts +2 -0
  92. package/modules/tabs/tabset-active-tab-unregistered-args.d.ts +10 -0
  93. package/modules/tabs/tabset-adapter.service.d.ts +21 -0
  94. package/modules/tabs/tabset-buttons-display-mode.d.ts +1 -0
  95. package/modules/tabs/tabset-nav-button.component.d.ts +24 -0
  96. package/modules/tabs/tabset-permalink.service.d.ts +43 -0
  97. package/modules/tabs/tabset-style.d.ts +1 -0
  98. package/modules/tabs/tabset-tab-indexes-change.d.ts +7 -0
  99. package/modules/tabs/tabset.component.d.ts +142 -0
  100. package/modules/tabs/tabset.service.d.ts +51 -0
  101. package/modules/vertical-tabset/vertical-tab-media-query.service.d.ts +15 -0
  102. package/modules/vertical-tabset/vertical-tab.component.d.ts +86 -0
  103. package/modules/vertical-tabset/vertical-tabset-adapter.service.d.ts +10 -0
  104. package/modules/vertical-tabset/vertical-tabset-group.component.d.ts +33 -0
  105. package/modules/vertical-tabset/vertical-tabset.component.d.ts +45 -0
  106. package/modules/vertical-tabset/vertical-tabset.module.d.ts +2 -0
  107. package/modules/vertical-tabset/vertical-tabset.service.d.ts +41 -0
  108. package/package.json +41 -0
  109. package/plugin-resources/tabs-resources-provider.d.ts +5 -0
  110. package/public_api.d.ts +9 -0
  111. package/skyux-tabs.d.ts +20 -0
  112. package/skyux-tabs.metadata.json +1 -0
  113. package/src/assets/img/guidelines/tabs/tabs-anatomy.png +0 -0
  114. package/src/assets/img/guidelines/tabs/tabs-behavior-1.png +0 -0
  115. package/src/assets/img/guidelines/tabs/tabs-layout-1.png +0 -0
  116. package/src/assets/img/guidelines/tabs/tabs-layout-2.png +0 -0
  117. package/src/assets/img/guidelines/tabs/tabs-layout-3.png +0 -0
  118. package/src/assets/img/guidelines/tabs/tabs-layout-4.png +0 -0
  119. package/src/assets/img/guidelines/tabs/tabs-options-1.png +0 -0
  120. package/src/assets/img/guidelines/tabs/tabs-options-2.png +0 -0
  121. package/src/assets/img/guidelines/tabs/tabs-state-collapsed-closed.png +0 -0
  122. package/src/assets/img/guidelines/tabs/tabs-state-collapsed-open.png +0 -0
  123. package/src/assets/img/guidelines/tabs/tabs-state-hover.png +0 -0
  124. package/src/assets/img/guidelines/tabs/tabs-state-selected.png +0 -0
  125. package/src/assets/img/guidelines/tabs/tabs-state-unselected.png +0 -0
  126. package/src/assets/img/guidelines/tabs/tabs-usage-1.png +0 -0
  127. package/src/assets/img/guidelines/tabs/tabs-usage-2.png +0 -0
  128. package/src/assets/img/guidelines/tabs/tabs-usage-3.png +0 -0
  129. package/src/assets/img/guidelines/tabs/tabs-usage-4.png +0 -0
  130. package/src/assets/img/guidelines/tabs/tabs-usage-5.png +0 -0
  131. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-anatomy-1.png +0 -0
  132. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-anatomy-2.png +0 -0
  133. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-layout-1.png +0 -0
  134. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-hover.png +0 -0
  135. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-selected-group.png +0 -0
  136. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-selected.png +0 -0
  137. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-unselected-group.png +0 -0
  138. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-unselected.png +0 -0
  139. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-1.png +0 -0
  140. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-2.png +0 -0
  141. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-3.png +0 -0
  142. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-4.png +0 -0
  143. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-5.png +0 -0
  144. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-6.png +0 -0
  145. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-7.png +0 -0
  146. package/src/assets/locales/resources_en_US.json +26 -0
  147. package/testing/package.json +13 -0
  148. package/testing/public_api.d.ts +2 -0
  149. package/testing/skyux-tabs-testing.d.ts +4 -0
  150. package/testing/skyux-tabs-testing.metadata.json +1 -0
  151. package/testing/tabs/tab-fixture-tab.d.ts +25 -0
  152. package/testing/tabs/tabset-fixture.d.ts +50 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,218 @@
1
+ # 4.6.9 (2021-09-16)
2
+
3
+ - Fixed the vertical tabs component to scroll the top of the content pane when a new tab is activated. [#182](https://github.com/blackbaud/skyux-tabs/pull/182)
4
+
5
+ # 4.6.8 (2021-07-27)
6
+
7
+ - Fixed the sectioned form component to have proper spacing between a section's heading and invalid icon. [#176](https://github.com/blackbaud/skyux-tabs/pull/176)
8
+
9
+ # 4.6.7 (2021-06-11)
10
+
11
+ - Fixed the module name in the installation documentation. [#171](https://github.com/blackbaud/skyux-tabs/pull/171)
12
+
13
+ # 4.6.6 (2021-05-12)
14
+
15
+ - Fixed the tabset component to ensure all tabs are registered if new tabs are added quickly on initialization. [#166](https://github.com/blackbaud/skyux-tabs/pull/166)
16
+
17
+ # 4.6.5 (2021-04-26)
18
+
19
+ - Fixed the tab close button to follow accessibility guidelines. [#162](https://github.com/blackbaud/skyux-tabs/pull/162)
20
+
21
+ # 4.6.4 (2021-03-31)
22
+
23
+ - Replaced theme conditionals in templates with the new `skyThemeIf` directive. [#159](https://github.com/blackbaud/skyux-tabs/pull/159)
24
+
25
+ # 4.6.3 (2021-03-12)
26
+
27
+ - Fixed the vertical tab component to ensure all content is rendered prior to responsive styles being added. [#158](https://github.com/blackbaud/skyux-tabs/pull/158)
28
+
29
+ # 4.6.2 (2021-03-05)
30
+
31
+ - Fixed the tabset component to fire the `activeChange` event when the component is initialized. [#157](https://github.com/blackbaud/skyux-tabs/pull/157)
32
+
33
+ # 4.6.1 (2021-03-04)
34
+
35
+ - Fixed the tabset component to retain the selected tab (when using `permalinkId`) after the page has been reloaded. [#156](https://github.com/blackbaud/skyux-tabs/pull/156)
36
+
37
+ # 4.6.0 (2021-02-26)
38
+
39
+ - Added responsive container classes to the vertical tab component to allow child components to use the correct responsive styles. [#154](https://github.com/blackbaud/skyux-tabs/pull/154)
40
+
41
+ # 4.5.0 (2021-01-19)
42
+
43
+ - Added modern theme styles for the vertical tabs component. [#150](https://github.com/blackbaud/skyux-tabs/pull/150)
44
+
45
+ # 4.4.1 (2020-11-30)
46
+
47
+ - Fixed the tabset component to properly activate the nearest tab when the active tab is removed. [#148](https://github.com/blackbaud/skyux-tabs/pull/148)
48
+
49
+ # 4.4.0 (2020-10-14)
50
+
51
+ - Added the `tabIndexesChange` event to the tabset component which fires when tab indexes change. [#143](https://github.com/blackbaud/skyux-tabs/pull/143)
52
+ - Fixed the tabset service to generate unique tab indexes for tabs created after initialization. [#143](https://github.com/blackbaud/skyux-tabs/pull/143)
53
+ - Fixed the tabset component to properly close the final tab in a set. [#142](https://github.com/blackbaud/skyux-tabs/pull/142)
54
+ - Fixed the tabset component to recognize changes to a tab's `tabHeading` attribute. [#142](https://github.com/blackbaud/skyux-tabs/pull/142)
55
+
56
+ # 4.3.4 (2020-10-08)
57
+
58
+ - Fixed the tabset component to properly recognize active tabs that are set after initialization. [#137](https://github.com/blackbaud/skyux-tabs/pull/137)
59
+
60
+ # 4.3.3 (2020-09-11)
61
+
62
+ - Fixed the tabset component to allow consumers to activate a tab as soon as they create it. [#132](https://github.com/blackbaud/skyux-tabs/pull/132)
63
+
64
+ # 4.3.2 (2020-08-20)
65
+
66
+ - Fixed the tabset component to use query params instead of matrix params when using `permalinkId` (matrix params cannot be used on the root route of an application). [#128](https://github.com/blackbaud/skyux-tabs/pull/128)
67
+
68
+ # 4.3.1 (2020-08-13)
69
+
70
+ - Fixed the tabset component to preserve URL query params when using `permalinkId`. [#126](https://github.com/blackbaud/skyux-tabs/pull/126)
71
+
72
+ # 4.3.0 (2020-08-04)
73
+
74
+ - Added modern theme styles for active, focused, and hover states to the tabset component. [#122](https://github.com/blackbaud/skyux-tabs/pull/122)
75
+
76
+ # 4.2.1 (2020-07-31)
77
+
78
+ - Fixed the tabset component to properly handle two-way binding with the `active` input. [#121](https://github.com/blackbaud/skyux-tabs/pull/121)
79
+
80
+ # 4.2.0 (2020-07-20)
81
+
82
+ - Added a test fixture for the tabset component to use in consumer unit tests. [#113](https://github.com/blackbaud/skyux-tabs/pull/113)
83
+ - Added the `maintainSectionContent` input property to the sectioned form component. [#112](https://github.com/blackbaud/skyux-tabs/pull/112) (Thanks [@michael-tims](https://github.com/michael-tims)!)
84
+ - Added the `maintainTabContent` input property to the vertical tabset component. [#112](https://github.com/blackbaud/skyux-tabs/pull/112) (Thanks [@michael-tims](https://github.com/michael-tims)!)
85
+ - Fixed an issue where removing a tabset from the page did not remove the permalink in the URL. [#109](https://github.com/blackbaud/skyux-tabs/pull/109)
86
+
87
+ # 4.1.1 (2020-06-25)
88
+
89
+ - Fixed the exports API to include `SectionedFormService`. [#97](https://github.com/blackbaud/skyux-tabs/pull/97)
90
+
91
+ # 4.1.0 (2020-06-16)
92
+
93
+ - Added the `ariaLabel` and `ariaLabelledBy` input properties to the tabset component. [#90](https://github.com/blackbaud/skyux-tabs/pull/90)
94
+ - Fixed the `aria-controls` and `role` HTML properties on the tabset component to follow proper accessibility guidelines. [#90](https://github.com/blackbaud/skyux-tabs/pull/90)
95
+
96
+ # 4.0.1 (2020-06-11)
97
+
98
+ - Fixed the exports API to include `SkySectionedFormComponent`. [#92](https://github.com/blackbaud/skyux-tabs/pull/92)
99
+ - Fixed the tabset component to allow setting the `tabStyle` to `'wizard'`. [#92](https://github.com/blackbaud/skyux-tabs/pull/92)
100
+
101
+ # 4.0.0 (2020-05-21)
102
+
103
+ ### New features
104
+
105
+ - Added support for `@angular/core@^9`. [#56](https://github.com/blackbaud/skyux-tabs/pull/56)
106
+ - Updated the pipeline to transpile to the [Angular Package Format](https://docs.google.com/document/d/1CZC2rcpxffTDfRDs6p1cfbmKNLA6x5O-NtkJglDaBVs/preview). [#56](https://github.com/blackbaud/skyux-tabs/pull/56)
107
+
108
+ ### Breaking changes
109
+
110
+ - Removed the `tabStyle` input from the tabset component, which was used to switch between `'wizard'` or `'tabs'` tab styles. To use a wizard-styled component, use the progress indicator component. [#84](https://github.com/blackbaud/skyux-tabs/pull/84)
111
+ - Dropped support for `rxjs@5`. Consumers can install `rxjs-compat@^6` to support older versions of `rxjs`. [#56](https://github.com/blackbaud/skyux-tabs/pull/56)
112
+
113
+ # 4.0.0-rc.2 (2020-05-18)
114
+
115
+ ### Breaking changes
116
+
117
+ - Removed the `tabStyle` input from the tabset component, which was used to switch between `'wizard'` or `'tabs'` tab styles. To use a wizard-styled component, use the progress indicator component. [#84](https://github.com/blackbaud/skyux-tabs/pull/84)
118
+
119
+ # 3.3.0 (2020-05-11)
120
+
121
+ - Added modern theme styles to the tabset component. [#81](https://github.com/blackbaud/skyux-tabs/pull/81)
122
+
123
+ # 3.2.8 (2020-05-07)
124
+
125
+ - Fixed deep imports for `SkyMediaQueryService`. [#77](https://github.com/blackbaud/skyux-tabs/pull/77)
126
+
127
+ # 4.0.0-rc.1 (2020-04-30)
128
+
129
+ - Added bug fixes and features from the `master` branch. [#75](https://github.com/blackbaud/skyux-tabs/pull/75)
130
+
131
+ # 3.2.7 (2020-04-23)
132
+
133
+ - Fixed the tab and tabset components to set the active tab on initialization. [#73](https://github.com/blackbaud/skyux-tabs/pull/73)
134
+
135
+ # 3.2.6 (2020-04-07)
136
+
137
+ - Fixed the tabset component to set the active tab when `activeIndex` is set to a `string` value. [#62](https://github.com/blackbaud/skyux-tabs/pull/62)
138
+
139
+ # 3.2.5 (2020-03-30)
140
+
141
+ - Fixed the tabset component to avoid triggering navigation changes when using the `permalinkId` property. [#59](https://github.com/blackbaud/skyux-tabs/pull/59)
142
+
143
+ # 4.0.0-rc.0 (2020-02-22)
144
+
145
+ ### New features
146
+
147
+ - Added support for `@angular/core@^9`. [#56](https://github.com/blackbaud/skyux-tabs/pull/56)
148
+ - Updated the pipeline to transpile to the [Angular Package Format](https://docs.google.com/document/d/1CZC2rcpxffTDfRDs6p1cfbmKNLA6x5O-NtkJglDaBVs/preview). [#56](https://github.com/blackbaud/skyux-tabs/pull/56)
149
+
150
+ ### Breaking changes
151
+
152
+ - Dropped support for `rxjs@5`. Consumers can install `rxjs-compat@^6` to support older versions of `rxjs`. [#56](https://github.com/blackbaud/skyux-tabs/pull/56)
153
+
154
+ # 3.2.4 (2020-01-27)
155
+
156
+ - Fixed the vertical tabset component to eliminate extra padding when placed inside a modal. [#53](https://github.com/blackbaud/skyux-tabs/pull/53)
157
+
158
+ # 3.2.3 (2019-12-20)
159
+
160
+ - Fixed the vertical tab component to work with structural directives such as `ngFor` and `ngIf`. [#48](https://github.com/blackbaud/skyux-tabs/pull/48)
161
+
162
+ # 3.2.2 (2019-11-21)
163
+
164
+ - Fixed the tabset component to navigate to the previous active tab when users select the browser's "back" button. [#44](https://github.com/blackbaud/skyux-tabs/pull/44)
165
+ - Fixed the tabset component to prevent tabs from collapsing when a tabset is within another tabset. [#44](https://github.com/blackbaud/skyux-tabs/pull/44)
166
+ - Fixed the tabset component to clear the URL router fragment when users select a tab. [#44](https://github.com/blackbaud/skyux-tabs/pull/44)
167
+
168
+ # 3.2.1 (2019-10-25)
169
+
170
+ - Fixed the tabset component to fall back to the active index if `permalinkValue` is undefined. [#37](https://github.com/blackbaud/skyux-tabs/pull/37)
171
+
172
+ # 3.2.0 (2019-08-28)
173
+
174
+ - Added query parameters to the URL to reflect active tab states in the tabset component. [#31](https://github.com/blackbaud/skyux-tabs/pull/31)
175
+
176
+ # 3.1.0 (2019-05-17)
177
+
178
+ - Added the ability to trigger responsive styles based on a parent component. [#25](https://github.com/blackbaud/skyux-tabs/pull/25)
179
+
180
+ # 3.0.3 (2019-04-29)
181
+
182
+ - Fixed the vertical tabset component to correctly translate resource strings. [#24](https://github.com/blackbaud/skyux-tabs/pull/24)
183
+
184
+ # 3.0.2 (2019-04-24)
185
+
186
+ - Fixed the tabset component to prevent throwing `ViewDestroyedError`s in modals. [#21](https://github.com/blackbaud/skyux-tabs/pull/21)
187
+
188
+ # 3.0.1 (2019-04-04)
189
+
190
+ - Fixed efficiency issues in the tabset component. [#16](https://github.com/blackbaud/skyux-tabs/pull/16)
191
+
192
+ # 3.0.0 (2019-01-14)
193
+
194
+ - Major version release.
195
+
196
+ # 3.0.0-rc.4 (2018-12-19)
197
+
198
+ - Fixed the vertical tabset group component to not accept clicks and have proper visual styles when disabled. [#7](https://github.com/blackbaud/skyux-tabs/pull/7)
199
+
200
+ # 3.0.0-rc.3 (2018-11-28)
201
+
202
+ - Fixed the sectioned form component to keep tabs stationary when users scroll through content and to keep content stationary when users scroll through tabs. [#4](https://github.com/blackbaud/skyux-tabs/pull/4)
203
+
204
+ # 3.0.0-rc.2 (2018-11-09)
205
+
206
+ - Added support for `@skyux/i18n@3.3.0`, which addresses some internationalization issues. [#3](https://github.com/blackbaud/skyux-tabs/pull/3)
207
+
208
+ # 3.0.0-rc.1 (2018-10-18)
209
+
210
+ - Added support for `@skyux/i18n@3.2.0`. [#2](https://github.com/blackbaud/skyux-tabs/pull/2)
211
+
212
+ # 3.0.0-rc.0 (2018-10-12)
213
+
214
+ - Initial release candidate.
215
+
216
+ # 3.0.0-alpha.0 (2018-10-10)
217
+
218
+ - Initial alpha release.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @skyux/tabs
2
+
3
+ [![npm](https://img.shields.io/npm/v/@skyux/tabs.svg)](https://www.npmjs.com/package/@skyux/tabs)
4
+ ![SKY UX CI](https://github.com/blackbaud/skyux-tabs/workflows/SKY%20UX%20CI/badge.svg)
5
+ [![coverage](https://codecov.io/gh/blackbaud/skyux-tabs/branch/master/graphs/badge.svg?branch=master)](https://codecov.io/gh/blackbaud/skyux-tabs/branch/master)
@@ -0,0 +1,395 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/platform-browser'), require('@skyux-sdk/testing')) :
3
+ typeof define === 'function' && define.amd ? define('@skyux/tabs/testing', ['exports', '@angular/platform-browser', '@skyux-sdk/testing'], factory) :
4
+ (global = global || self, factory((global.skyux = global.skyux || {}, global.skyux.tabs = global.skyux.tabs || {}, global.skyux.tabs.testing = {}), global.ng.platformBrowser, global.testing));
5
+ }(this, (function (exports, platformBrowser, testing) { 'use strict';
6
+
7
+ /*! *****************************************************************************
8
+ Copyright (c) Microsoft Corporation.
9
+
10
+ Permission to use, copy, modify, and/or distribute this software for any
11
+ purpose with or without fee is hereby granted.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19
+ PERFORMANCE OF THIS SOFTWARE.
20
+ ***************************************************************************** */
21
+ /* global Reflect, Promise */
22
+
23
+ var extendStatics = function(d, b) {
24
+ extendStatics = Object.setPrototypeOf ||
25
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
26
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27
+ return extendStatics(d, b);
28
+ };
29
+
30
+ function __extends(d, b) {
31
+ extendStatics(d, b);
32
+ function __() { this.constructor = d; }
33
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34
+ }
35
+
36
+ var __assign = function() {
37
+ __assign = Object.assign || function __assign(t) {
38
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
39
+ s = arguments[i];
40
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
41
+ }
42
+ return t;
43
+ };
44
+ return __assign.apply(this, arguments);
45
+ };
46
+
47
+ function __rest(s, e) {
48
+ var t = {};
49
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
50
+ t[p] = s[p];
51
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
52
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
53
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
54
+ t[p[i]] = s[p[i]];
55
+ }
56
+ return t;
57
+ }
58
+
59
+ function __decorate(decorators, target, key, desc) {
60
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
61
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
62
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
63
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
64
+ }
65
+
66
+ function __param(paramIndex, decorator) {
67
+ return function (target, key) { decorator(target, key, paramIndex); }
68
+ }
69
+
70
+ function __metadata(metadataKey, metadataValue) {
71
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
72
+ }
73
+
74
+ function __awaiter(thisArg, _arguments, P, generator) {
75
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
76
+ return new (P || (P = Promise))(function (resolve, reject) {
77
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
78
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
79
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
80
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
81
+ });
82
+ }
83
+
84
+ function __generator(thisArg, body) {
85
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
86
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
87
+ function verb(n) { return function (v) { return step([n, v]); }; }
88
+ function step(op) {
89
+ if (f) throw new TypeError("Generator is already executing.");
90
+ while (_) try {
91
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
92
+ if (y = 0, t) op = [op[0] & 2, t.value];
93
+ switch (op[0]) {
94
+ case 0: case 1: t = op; break;
95
+ case 4: _.label++; return { value: op[1], done: false };
96
+ case 5: _.label++; y = op[1]; op = [0]; continue;
97
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
98
+ default:
99
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
100
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
101
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
102
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
103
+ if (t[2]) _.ops.pop();
104
+ _.trys.pop(); continue;
105
+ }
106
+ op = body.call(thisArg, _);
107
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
108
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
109
+ }
110
+ }
111
+
112
+ function __createBinding(o, m, k, k2) {
113
+ if (k2 === undefined) k2 = k;
114
+ o[k2] = m[k];
115
+ }
116
+
117
+ function __exportStar(m, exports) {
118
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
119
+ }
120
+
121
+ function __values(o) {
122
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
123
+ if (m) return m.call(o);
124
+ if (o && typeof o.length === "number") return {
125
+ next: function () {
126
+ if (o && i >= o.length) o = void 0;
127
+ return { value: o && o[i++], done: !o };
128
+ }
129
+ };
130
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
131
+ }
132
+
133
+ function __read(o, n) {
134
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
135
+ if (!m) return o;
136
+ var i = m.call(o), r, ar = [], e;
137
+ try {
138
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
139
+ }
140
+ catch (error) { e = { error: error }; }
141
+ finally {
142
+ try {
143
+ if (r && !r.done && (m = i["return"])) m.call(i);
144
+ }
145
+ finally { if (e) throw e.error; }
146
+ }
147
+ return ar;
148
+ }
149
+
150
+ function __spread() {
151
+ for (var ar = [], i = 0; i < arguments.length; i++)
152
+ ar = ar.concat(__read(arguments[i]));
153
+ return ar;
154
+ }
155
+
156
+ function __spreadArrays() {
157
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
158
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
159
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
160
+ r[k] = a[j];
161
+ return r;
162
+ };
163
+
164
+ function __await(v) {
165
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
166
+ }
167
+
168
+ function __asyncGenerator(thisArg, _arguments, generator) {
169
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
170
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
171
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
172
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
173
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
174
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
175
+ function fulfill(value) { resume("next", value); }
176
+ function reject(value) { resume("throw", value); }
177
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
178
+ }
179
+
180
+ function __asyncDelegator(o) {
181
+ var i, p;
182
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
183
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
184
+ }
185
+
186
+ function __asyncValues(o) {
187
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
188
+ var m = o[Symbol.asyncIterator], i;
189
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
190
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
191
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
192
+ }
193
+
194
+ function __makeTemplateObject(cooked, raw) {
195
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
196
+ return cooked;
197
+ };
198
+
199
+ function __importStar(mod) {
200
+ if (mod && mod.__esModule) return mod;
201
+ var result = {};
202
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
203
+ result.default = mod;
204
+ return result;
205
+ }
206
+
207
+ function __importDefault(mod) {
208
+ return (mod && mod.__esModule) ? mod : { default: mod };
209
+ }
210
+
211
+ function __classPrivateFieldGet(receiver, privateMap) {
212
+ if (!privateMap.has(receiver)) {
213
+ throw new TypeError("attempted to get private field on non-instance");
214
+ }
215
+ return privateMap.get(receiver);
216
+ }
217
+
218
+ function __classPrivateFieldSet(receiver, privateMap, value) {
219
+ if (!privateMap.has(receiver)) {
220
+ throw new TypeError("attempted to set private field on non-instance");
221
+ }
222
+ privateMap.set(receiver, value);
223
+ return value;
224
+ }
225
+
226
+ /**
227
+ * Allows interaction with a SKY UX tabset component.
228
+ */
229
+ var SkyTabsetFixture = /** @class */ (function () {
230
+ function SkyTabsetFixture(fixture, skyTestId) {
231
+ this.fixture = fixture;
232
+ this.debugEl = testing.SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-tabset');
233
+ }
234
+ Object.defineProperty(SkyTabsetFixture.prototype, "ariaLabel", {
235
+ /**
236
+ * The tabset component's ARIA label.
237
+ */
238
+ get: function () {
239
+ var tabsetEl = this.getTabsetEl();
240
+ return tabsetEl.getAttribute('aria-label') || undefined;
241
+ },
242
+ enumerable: true,
243
+ configurable: true
244
+ });
245
+ Object.defineProperty(SkyTabsetFixture.prototype, "ariaLabelledBy", {
246
+ /**
247
+ * The tabset component's ARIA labelled by attribute.
248
+ */
249
+ get: function () {
250
+ var tabsetEl = this.getTabsetEl();
251
+ return tabsetEl.getAttribute('aria-labelledby') || undefined;
252
+ },
253
+ enumerable: true,
254
+ configurable: true
255
+ });
256
+ Object.defineProperty(SkyTabsetFixture.prototype, "activeTabIndex", {
257
+ /**
258
+ * The index of the currently selected tab.
259
+ */
260
+ get: function () {
261
+ var tabLinkEls = this.getTabLinkEls();
262
+ for (var i = 0, n = tabLinkEls.length; i < n; i++) {
263
+ if (tabLinkEls.item(i).classList.contains('sky-btn-tab-selected')) {
264
+ return i;
265
+ }
266
+ }
267
+ return -1;
268
+ },
269
+ enumerable: true,
270
+ configurable: true
271
+ });
272
+ /**
273
+ * Retrieves information about the tab at the specified index.
274
+ * @param tabIndex The index of the tab.
275
+ */
276
+ SkyTabsetFixture.prototype.getTab = function (tabIndex) {
277
+ var tabLinkEl = this.getTabLinkEl(tabIndex);
278
+ var active = this.activeTabIndex === tabIndex;
279
+ var disabled = tabLinkEl.classList.contains('sky-btn-tab-disabled');
280
+ var tabHeading = this.getTextContent(tabLinkEl.querySelector('.sky-tab-heading').childNodes[0]);
281
+ var tabHeaderCount = this.getTextContent(tabLinkEl.querySelector('.sky-tab-header-count'));
282
+ var permalinkValue;
283
+ if (tabLinkEl.href) {
284
+ var permalink = tabLinkEl.href.split('?')[1];
285
+ if (permalink) {
286
+ var permalinkParts = permalink.split('=');
287
+ permalinkValue = decodeURIComponent(permalinkParts[1]);
288
+ }
289
+ }
290
+ return {
291
+ active: active,
292
+ disabled: disabled,
293
+ permalinkValue: permalinkValue,
294
+ tabHeaderCount: tabHeaderCount,
295
+ tabHeading: tabHeading
296
+ };
297
+ };
298
+ /**
299
+ * Clicks the tabset's "new" button.
300
+ */
301
+ SkyTabsetFixture.prototype.clickNewButton = function () {
302
+ return __awaiter(this, void 0, void 0, function () {
303
+ return __generator(this, function (_a) {
304
+ return [2 /*return*/, this.clickButton('sky-tabset-btn-new')];
305
+ });
306
+ });
307
+ };
308
+ /**
309
+ * Clicks the tabset's "open" button.
310
+ */
311
+ SkyTabsetFixture.prototype.clickOpenButton = function () {
312
+ return __awaiter(this, void 0, void 0, function () {
313
+ return __generator(this, function (_a) {
314
+ return [2 /*return*/, this.clickButton('sky-tabset-btn-open')];
315
+ });
316
+ });
317
+ };
318
+ /**
319
+ * Clicks the tab button at the specified index.
320
+ * @param tabIndex The index of the tab.
321
+ */
322
+ SkyTabsetFixture.prototype.clickTab = function (tabIndex) {
323
+ return __awaiter(this, void 0, void 0, function () {
324
+ var tabLinkEl;
325
+ return __generator(this, function (_a) {
326
+ tabLinkEl = this.getTabLinkEl(tabIndex);
327
+ if (!tabLinkEl) {
328
+ throw new Error("There is no tab at index " + tabIndex + ".");
329
+ }
330
+ tabLinkEl.click();
331
+ this.fixture.detectChanges();
332
+ return [2 /*return*/, this.fixture.whenStable()];
333
+ });
334
+ });
335
+ };
336
+ /**
337
+ * Click's the tab's close button at the specified index.
338
+ * @param tabIndex The index of the tab.
339
+ */
340
+ SkyTabsetFixture.prototype.clickTabClose = function (tabIndex) {
341
+ return __awaiter(this, void 0, void 0, function () {
342
+ var tabWrapperEl, closeBtnEl;
343
+ return __generator(this, function (_a) {
344
+ tabWrapperEl = this.getTabsetEl().querySelectorAll(".sky-tabset-tabs .sky-btn-tab-wrapper")[tabIndex];
345
+ if (!tabWrapperEl) {
346
+ throw new Error("There is no tab at index " + tabIndex + ".");
347
+ }
348
+ closeBtnEl = tabWrapperEl.querySelector('.sky-btn-tab-close');
349
+ if (!closeBtnEl) {
350
+ throw new Error('The specified tab does not have a close button.');
351
+ }
352
+ closeBtnEl.click();
353
+ this.fixture.detectChanges();
354
+ return [2 /*return*/, this.fixture.whenStable()];
355
+ });
356
+ });
357
+ };
358
+ SkyTabsetFixture.prototype.clickButton = function (buttonCls) {
359
+ return __awaiter(this, void 0, void 0, function () {
360
+ var tabsetEl, newButtonEl;
361
+ return __generator(this, function (_a) {
362
+ tabsetEl = this.getTabsetEl();
363
+ newButtonEl = tabsetEl.querySelector(".sky-tabset-btns ." + buttonCls);
364
+ newButtonEl.click();
365
+ this.fixture.detectChanges();
366
+ return [2 /*return*/, this.fixture.whenStable()];
367
+ });
368
+ });
369
+ };
370
+ SkyTabsetFixture.prototype.getTabsetEl = function () {
371
+ var tabsetEl = this.debugEl.query(platformBrowser.By.css('.sky-tabset')).nativeElement;
372
+ return tabsetEl;
373
+ };
374
+ SkyTabsetFixture.prototype.getTabLinkEls = function () {
375
+ return this.getTabsetEl().querySelectorAll(".sky-tabset-tabs .sky-btn-tab");
376
+ };
377
+ SkyTabsetFixture.prototype.getTabLinkEl = function (tabIndex) {
378
+ var tabLinkEl = this.getTabLinkEls().item(tabIndex);
379
+ if (!tabLinkEl) {
380
+ throw new Error("There is no tab at index " + tabIndex + ".");
381
+ }
382
+ return tabLinkEl;
383
+ };
384
+ SkyTabsetFixture.prototype.getTextContent = function (el) {
385
+ return (el && el.textContent.trim()) || undefined;
386
+ };
387
+ return SkyTabsetFixture;
388
+ }());
389
+
390
+ exports.SkyTabsetFixture = SkyTabsetFixture;
391
+
392
+ Object.defineProperty(exports, '__esModule', { value: true });
393
+
394
+ })));
395
+ //# sourceMappingURL=skyux-tabs-testing.umd.js.map