@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skyux-tabs-testing.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@skyux/tabs/testing/tabs/tabset-fixture.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n 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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n 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); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n 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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n 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);\r\n 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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import {\n ComponentFixture\n} from '@angular/core/testing';\n\nimport {\n DebugElement\n} from '@angular/core';\n\nimport {\n By\n} from '@angular/platform-browser';\n\nimport {\n SkyAppTestUtility\n} from '@skyux-sdk/testing';\n\nimport {\n SkyTabsetFixtureTab\n} from './tab-fixture-tab';\n\n/**\n * Allows interaction with a SKY UX tabset component.\n */\nexport class SkyTabsetFixture {\n\n /**\n * The tabset component's ARIA label.\n */\n public get ariaLabel(): string {\n const tabsetEl = this.getTabsetEl();\n return tabsetEl.getAttribute('aria-label') || undefined;\n }\n\n /**\n * The tabset component's ARIA labelled by attribute.\n */\n public get ariaLabelledBy(): string {\n const tabsetEl = this.getTabsetEl();\n return tabsetEl.getAttribute('aria-labelledby') || undefined;\n }\n\n /**\n * The index of the currently selected tab.\n */\n public get activeTabIndex(): number {\n const tabLinkEls = this.getTabLinkEls();\n\n for (let i = 0, n = tabLinkEls.length; i < n; i++) {\n if (tabLinkEls.item(i).classList.contains('sky-btn-tab-selected')) {\n return i;\n }\n }\n\n return -1;\n }\n\n private debugEl: DebugElement;\n\n constructor(\n private fixture: ComponentFixture<any>,\n skyTestId: string\n ) {\n this.debugEl = SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-tabset');\n }\n\n /**\n * Retrieves information about the tab at the specified index.\n * @param tabIndex The index of the tab.\n */\n public getTab(tabIndex: number): SkyTabsetFixtureTab {\n const tabLinkEl = this.getTabLinkEl(tabIndex);\n\n const active = this.activeTabIndex === tabIndex;\n const disabled = tabLinkEl.classList.contains('sky-btn-tab-disabled');\n const tabHeading = this.getTextContent(\n tabLinkEl.querySelector('.sky-tab-heading').childNodes[0]\n );\n const tabHeaderCount = this.getTextContent(tabLinkEl.querySelector('.sky-tab-header-count'));\n\n let permalinkValue: string;\n\n if (tabLinkEl.href) {\n const permalink = tabLinkEl.href.split('?')[1];\n if (permalink) {\n const permalinkParts = permalink.split('=');\n\n permalinkValue = decodeURIComponent(permalinkParts[1]);\n }\n }\n\n return {\n active,\n disabled,\n permalinkValue,\n tabHeaderCount,\n tabHeading\n };\n }\n\n /**\n * Clicks the tabset's \"new\" button.\n */\n public async clickNewButton(): Promise<any> {\n return this.clickButton('sky-tabset-btn-new');\n }\n\n /**\n * Clicks the tabset's \"open\" button.\n */\n public async clickOpenButton(): Promise<any> {\n return this.clickButton('sky-tabset-btn-open');\n }\n\n /**\n * Clicks the tab button at the specified index.\n * @param tabIndex The index of the tab.\n */\n public async clickTab(tabIndex: number): Promise<any> {\n const tabLinkEl = this.getTabLinkEl(tabIndex);\n\n if (!tabLinkEl) {\n throw new Error(`There is no tab at index ${tabIndex}.`);\n }\n\n tabLinkEl.click();\n\n this.fixture.detectChanges();\n return this.fixture.whenStable();\n }\n\n /**\n * Click's the tab's close button at the specified index.\n * @param tabIndex The index of the tab.\n */\n public async clickTabClose(tabIndex: number): Promise<any> {\n const tabWrapperEl = this.getTabsetEl().querySelectorAll(\n `.sky-tabset-tabs .sky-btn-tab-wrapper`\n )[tabIndex];\n\n if (!tabWrapperEl) {\n throw new Error(`There is no tab at index ${tabIndex}.`);\n }\n\n const closeBtnEl = tabWrapperEl.querySelector('.sky-btn-tab-close') as HTMLButtonElement;\n\n if (!closeBtnEl) {\n throw new Error('The specified tab does not have a close button.');\n }\n\n closeBtnEl.click();\n\n this.fixture.detectChanges();\n return this.fixture.whenStable();\n }\n\n private async clickButton(buttonCls: string): Promise<any> {\n const tabsetEl = this.getTabsetEl();\n\n const newButtonEl =\n tabsetEl.querySelector(`.sky-tabset-btns .${buttonCls}`) as HTMLButtonElement;\n\n newButtonEl.click();\n\n this.fixture.detectChanges();\n return this.fixture.whenStable();\n }\n\n private getTabsetEl(): HTMLDivElement {\n const tabsetEl = this.debugEl.query(By.css('.sky-tabset')).nativeElement;\n\n return tabsetEl;\n }\n\n private getTabLinkEls(): NodeListOf<HTMLAnchorElement> {\n return this.getTabsetEl().querySelectorAll(\n `.sky-tabset-tabs .sky-btn-tab`\n );\n }\n\n private getTabLinkEl(tabIndex: number): HTMLAnchorElement {\n const tabLinkEl = this.getTabLinkEls().item(tabIndex);\n\n if (!tabLinkEl) {\n throw new Error(`There is no tab at index ${tabIndex}.`);\n }\n\n return tabLinkEl;\n }\n\n private getTextContent(el: Element | Node): string {\n return (el && el.textContent.trim()) || undefined;\n }\n\n}\n"],"names":["SkyAppTestUtility","By"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/platform-browser"),require("@skyux-sdk/testing")):"function"==typeof define&&define.amd?define("@skyux/tabs/testing",["exports","@angular/platform-browser","@skyux-sdk/testing"],e):e(((t=t||self).skyux=t.skyux||{},t.skyux.tabs=t.skyux.tabs||{},t.skyux.tabs.testing={}),t.ng.platformBrowser,t.testing)}(this,(function(t,e,n){"use strict";
2
+ /*! *****************************************************************************
3
+ Copyright (c) Microsoft Corporation.
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
+ PERFORMANCE OF THIS SOFTWARE.
15
+ ***************************************************************************** */function r(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))}function i(t,e){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=e.call(t,a)}catch(t){o=[6,t],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}var o=function(){function t(t,e){this.fixture=t,this.debugEl=n.SkyAppTestUtility.getDebugElementByTestId(t,e,"sky-tabset")}return Object.defineProperty(t.prototype,"ariaLabel",{get:function(){return this.getTabsetEl().getAttribute("aria-label")||void 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ariaLabelledBy",{get:function(){return this.getTabsetEl().getAttribute("aria-labelledby")||void 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeTabIndex",{get:function(){for(var t=this.getTabLinkEls(),e=0,n=t.length;e<n;e++)if(t.item(e).classList.contains("sky-btn-tab-selected"))return e;return-1},enumerable:!0,configurable:!0}),t.prototype.getTab=function(t){var e,n=this.getTabLinkEl(t),r=this.activeTabIndex===t,i=n.classList.contains("sky-btn-tab-disabled"),o=this.getTextContent(n.querySelector(".sky-tab-heading").childNodes[0]),a=this.getTextContent(n.querySelector(".sky-tab-header-count"));if(n.href){var s=n.href.split("?")[1];if(s){var u=s.split("=");e=decodeURIComponent(u[1])}}return{active:r,disabled:i,permalinkValue:e,tabHeaderCount:a,tabHeading:o}},t.prototype.clickNewButton=function(){return r(this,void 0,void 0,(function(){return i(this,(function(t){return[2,this.clickButton("sky-tabset-btn-new")]}))}))},t.prototype.clickOpenButton=function(){return r(this,void 0,void 0,(function(){return i(this,(function(t){return[2,this.clickButton("sky-tabset-btn-open")]}))}))},t.prototype.clickTab=function(t){return r(this,void 0,void 0,(function(){var e;return i(this,(function(n){if(!(e=this.getTabLinkEl(t)))throw new Error("There is no tab at index "+t+".");return e.click(),this.fixture.detectChanges(),[2,this.fixture.whenStable()]}))}))},t.prototype.clickTabClose=function(t){return r(this,void 0,void 0,(function(){var e,n;return i(this,(function(r){if(!(e=this.getTabsetEl().querySelectorAll(".sky-tabset-tabs .sky-btn-tab-wrapper")[t]))throw new Error("There is no tab at index "+t+".");if(!(n=e.querySelector(".sky-btn-tab-close")))throw new Error("The specified tab does not have a close button.");return n.click(),this.fixture.detectChanges(),[2,this.fixture.whenStable()]}))}))},t.prototype.clickButton=function(t){return r(this,void 0,void 0,(function(){var e;return i(this,(function(n){return e=this.getTabsetEl(),e.querySelector(".sky-tabset-btns ."+t).click(),this.fixture.detectChanges(),[2,this.fixture.whenStable()]}))}))},t.prototype.getTabsetEl=function(){return this.debugEl.query(e.By.css(".sky-tabset")).nativeElement},t.prototype.getTabLinkEls=function(){return this.getTabsetEl().querySelectorAll(".sky-tabset-tabs .sky-btn-tab")},t.prototype.getTabLinkEl=function(t){var e=this.getTabLinkEls().item(t);if(!e)throw new Error("There is no tab at index "+t+".");return e},t.prototype.getTextContent=function(t){return t&&t.textContent.trim()||void 0},t}();t.SkyTabsetFixture=o,Object.defineProperty(t,"__esModule",{value:!0})}));
16
+ //# sourceMappingURL=skyux-tabs-testing.umd.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@skyux/tabs/testing/tabs/tabset-fixture.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","SkyTabsetFixture","fixture","skyTestId","debugEl","SkyAppTestUtility","getDebugElementByTestId","Object","defineProperty","prototype","getTabsetEl","getAttribute","undefined","tabLinkEls","getTabLinkEls","i","item","classList","contains","getTab","tabIndex","permalinkValue","tabLinkEl","getTabLinkEl","active","activeTabIndex","disabled","tabHeading","getTextContent","querySelector","childNodes","tabHeaderCount","href","permalink","split","permalinkParts","decodeURIComponent","clickNewButton","clickButton","clickOpenButton","clickTab","Error","click","detectChanges","whenStable","clickTabClose","tabWrapperEl","querySelectorAll","closeBtnEl","buttonCls","tabsetEl","query","By","css","nativeElement","el","textContent","trim"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n 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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n 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); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n 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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n 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);\r\n 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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import {\n ComponentFixture\n} from '@angular/core/testing';\n\nimport {\n DebugElement\n} from '@angular/core';\n\nimport {\n By\n} from '@angular/platform-browser';\n\nimport {\n SkyAppTestUtility\n} from '@skyux-sdk/testing';\n\nimport {\n SkyTabsetFixtureTab\n} from './tab-fixture-tab';\n\n/**\n * Allows interaction with a SKY UX tabset component.\n */\nexport class SkyTabsetFixture {\n\n /**\n * The tabset component's ARIA label.\n */\n public get ariaLabel(): string {\n const tabsetEl = this.getTabsetEl();\n return tabsetEl.getAttribute('aria-label') || undefined;\n }\n\n /**\n * The tabset component's ARIA labelled by attribute.\n */\n public get ariaLabelledBy(): string {\n const tabsetEl = this.getTabsetEl();\n return tabsetEl.getAttribute('aria-labelledby') || undefined;\n }\n\n /**\n * The index of the currently selected tab.\n */\n public get activeTabIndex(): number {\n const tabLinkEls = this.getTabLinkEls();\n\n for (let i = 0, n = tabLinkEls.length; i < n; i++) {\n if (tabLinkEls.item(i).classList.contains('sky-btn-tab-selected')) {\n return i;\n }\n }\n\n return -1;\n }\n\n private debugEl: DebugElement;\n\n constructor(\n private fixture: ComponentFixture<any>,\n skyTestId: string\n ) {\n this.debugEl = SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-tabset');\n }\n\n /**\n * Retrieves information about the tab at the specified index.\n * @param tabIndex The index of the tab.\n */\n public getTab(tabIndex: number): SkyTabsetFixtureTab {\n const tabLinkEl = this.getTabLinkEl(tabIndex);\n\n const active = this.activeTabIndex === tabIndex;\n const disabled = tabLinkEl.classList.contains('sky-btn-tab-disabled');\n const tabHeading = this.getTextContent(\n tabLinkEl.querySelector('.sky-tab-heading').childNodes[0]\n );\n const tabHeaderCount = this.getTextContent(tabLinkEl.querySelector('.sky-tab-header-count'));\n\n let permalinkValue: string;\n\n if (tabLinkEl.href) {\n const permalink = tabLinkEl.href.split('?')[1];\n if (permalink) {\n const permalinkParts = permalink.split('=');\n\n permalinkValue = decodeURIComponent(permalinkParts[1]);\n }\n }\n\n return {\n active,\n disabled,\n permalinkValue,\n tabHeaderCount,\n tabHeading\n };\n }\n\n /**\n * Clicks the tabset's \"new\" button.\n */\n public async clickNewButton(): Promise<any> {\n return this.clickButton('sky-tabset-btn-new');\n }\n\n /**\n * Clicks the tabset's \"open\" button.\n */\n public async clickOpenButton(): Promise<any> {\n return this.clickButton('sky-tabset-btn-open');\n }\n\n /**\n * Clicks the tab button at the specified index.\n * @param tabIndex The index of the tab.\n */\n public async clickTab(tabIndex: number): Promise<any> {\n const tabLinkEl = this.getTabLinkEl(tabIndex);\n\n if (!tabLinkEl) {\n throw new Error(`There is no tab at index ${tabIndex}.`);\n }\n\n tabLinkEl.click();\n\n this.fixture.detectChanges();\n return this.fixture.whenStable();\n }\n\n /**\n * Click's the tab's close button at the specified index.\n * @param tabIndex The index of the tab.\n */\n public async clickTabClose(tabIndex: number): Promise<any> {\n const tabWrapperEl = this.getTabsetEl().querySelectorAll(\n `.sky-tabset-tabs .sky-btn-tab-wrapper`\n )[tabIndex];\n\n if (!tabWrapperEl) {\n throw new Error(`There is no tab at index ${tabIndex}.`);\n }\n\n const closeBtnEl = tabWrapperEl.querySelector('.sky-btn-tab-close') as HTMLButtonElement;\n\n if (!closeBtnEl) {\n throw new Error('The specified tab does not have a close button.');\n }\n\n closeBtnEl.click();\n\n this.fixture.detectChanges();\n return this.fixture.whenStable();\n }\n\n private async clickButton(buttonCls: string): Promise<any> {\n const tabsetEl = this.getTabsetEl();\n\n const newButtonEl =\n tabsetEl.querySelector(`.sky-tabset-btns .${buttonCls}`) as HTMLButtonElement;\n\n newButtonEl.click();\n\n this.fixture.detectChanges();\n return this.fixture.whenStable();\n }\n\n private getTabsetEl(): HTMLDivElement {\n const tabsetEl = this.debugEl.query(By.css('.sky-tabset')).nativeElement;\n\n return tabsetEl;\n }\n\n private getTabLinkEls(): NodeListOf<HTMLAnchorElement> {\n return this.getTabsetEl().querySelectorAll(\n `.sky-tabset-tabs .sky-btn-tab`\n );\n }\n\n private getTabLinkEl(tabIndex: number): HTMLAnchorElement {\n const tabLinkEl = this.getTabLinkEls().item(tabIndex);\n\n if (!tabLinkEl) {\n throw new Error(`There is no tab at index ${tabIndex}.`);\n }\n\n return tabLinkEl;\n }\n\n private getTextContent(el: Element | Node): string {\n return (el && el.textContent.trim()) || undefined;\n }\n\n}\n"]}
@@ -0,0 +1,2414 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/animations'), require('rxjs'), require('rxjs/operators'), require('@skyux/core'), require('@angular/platform-browser/animations'), require('@skyux/indicators'), require('@skyux/theme'), require('@skyux/i18n'), require('@skyux/forms'), require('@angular/router'), require('@skyux/popovers')) :
3
+ typeof define === 'function' && define.amd ? define('@skyux/tabs', ['exports', '@angular/core', '@angular/common', '@angular/animations', 'rxjs', 'rxjs/operators', '@skyux/core', '@angular/platform-browser/animations', '@skyux/indicators', '@skyux/theme', '@skyux/i18n', '@skyux/forms', '@angular/router', '@skyux/popovers'], factory) :
4
+ (global = global || self, factory((global.skyux = global.skyux || {}, global.skyux.tabs = {}), global.ng.core, global.ng.common, global.ng.animations, global.rxjs, global.rxjs.operators, global.core$1, global.ng.platformBrowser.animations, global.indicators, global.theme, global.i18n, global.forms, global.ng.router, global.popovers));
5
+ }(this, (function (exports, core, common, animations, rxjs, operators, core$1, animations$1, indicators, theme, i18n, forms, router, popovers) { '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
+ var VISIBLE_STATE = 'shown';
227
+ var HIDDEN_STATE = 'void';
228
+ /**
229
+ * @internal
230
+ */
231
+ var SkyVerticalTabsetService = /** @class */ (function () {
232
+ function SkyVerticalTabsetService(mediaQueryService) {
233
+ var _this = this;
234
+ this.mediaQueryService = mediaQueryService;
235
+ this.activeIndex = undefined;
236
+ this.hidingTabs = new rxjs.BehaviorSubject(false);
237
+ this.indexChanged = new rxjs.BehaviorSubject(undefined);
238
+ this.maintainTabContent = false;
239
+ this.showingTabs = new rxjs.BehaviorSubject(false);
240
+ this.switchingMobile = new rxjs.Subject();
241
+ this.tabs = [];
242
+ this.tabAdded = new rxjs.Subject();
243
+ this.tabClicked = new rxjs.BehaviorSubject(undefined);
244
+ this._contentAdded = false;
245
+ this._tabsVisible = false;
246
+ this._isMobile = false;
247
+ this.mediaQueryService.subscribe(function (breakpoint) {
248
+ var nowMobile = breakpoint === core$1.SkyMediaBreakpoints.xs;
249
+ if (nowMobile && !_this._isMobile) {
250
+ // switching to mobile
251
+ _this.switchingMobile.next(true);
252
+ if (!_this._tabsVisible) {
253
+ _this.hidingTabs.next(true);
254
+ }
255
+ }
256
+ else if (!nowMobile && _this._isMobile) {
257
+ // switching to widescreen
258
+ _this.switchingMobile.next(false);
259
+ if (!_this._tabsVisible) {
260
+ _this.showingTabs.next(true);
261
+ }
262
+ }
263
+ _this._isMobile = nowMobile;
264
+ });
265
+ }
266
+ Object.defineProperty(SkyVerticalTabsetService.prototype, "content", {
267
+ set: function (value) {
268
+ this._content = value;
269
+ },
270
+ enumerable: true,
271
+ configurable: true
272
+ });
273
+ SkyVerticalTabsetService.prototype.addTab = function (tab) {
274
+ var index = this.tabs.length;
275
+ tab.index = index;
276
+ this.tabs.push(tab);
277
+ if (tab.active) {
278
+ this.activateTab(tab);
279
+ }
280
+ this.tabAdded.next(tab);
281
+ };
282
+ SkyVerticalTabsetService.prototype.destroyTab = function (tab) {
283
+ var tabIndex = this.tabs.indexOf(tab);
284
+ if (tabIndex === -1) {
285
+ return;
286
+ }
287
+ if (this.maintainTabContent && tab.contentRendered && this._content) {
288
+ if (this._content.nativeElement.contains(tab.tabContent.nativeElement)) {
289
+ this._content.nativeElement.removeChild(tab.tabContent.nativeElement);
290
+ }
291
+ }
292
+ this.tabs.splice(tabIndex, 1);
293
+ // update tab indices
294
+ this.tabs.forEach(function (tabItem, index) { return tabItem.index = index; });
295
+ if (tab.active) {
296
+ if (!this.maintainTabContent) {
297
+ this.destroyContent();
298
+ }
299
+ // Try selecting the next tab first, and if there's no next tab then
300
+ // try selecting the previous one.
301
+ var newActiveTab = this.tabs[tabIndex] || this.tabs[tabIndex - 1];
302
+ /*istanbul ignore else */
303
+ if (newActiveTab) {
304
+ newActiveTab.activateTab();
305
+ }
306
+ }
307
+ };
308
+ SkyVerticalTabsetService.prototype.activateTab = function (tab) {
309
+ var _this = this;
310
+ // unactivate active tab
311
+ var activeTab = this.tabs.find(function (t) { return t.index === _this.activeIndex; });
312
+ if (activeTab && activeTab.index !== tab.index) {
313
+ activeTab.active = false;
314
+ activeTab.tabDeactivated();
315
+ }
316
+ this.activeIndex = tab.index;
317
+ this.tabClicked.next(true);
318
+ this.updateTabClicked();
319
+ };
320
+ SkyVerticalTabsetService.prototype.activeTab = function () {
321
+ var _this = this;
322
+ return this.tabs.find(function (t) { return t.index === _this.activeIndex; });
323
+ };
324
+ SkyVerticalTabsetService.prototype.isMobile = function () {
325
+ return this._isMobile;
326
+ };
327
+ SkyVerticalTabsetService.prototype.updateContent = function () {
328
+ var _this = this;
329
+ if (!this.maintainTabContent) {
330
+ if (!this._contentAdded && this.contentVisible()) {
331
+ // content needs to be moved
332
+ this.moveContent();
333
+ }
334
+ else if (this._contentAdded && !this.contentVisible()) {
335
+ // content hidden
336
+ this._contentAdded = false;
337
+ }
338
+ }
339
+ else {
340
+ this.tabs.forEach(function (tab) {
341
+ if (!tab.contentRendered) {
342
+ _this._content.nativeElement.appendChild(tab.tabContent.nativeElement);
343
+ tab.contentRendered = true;
344
+ }
345
+ });
346
+ }
347
+ };
348
+ SkyVerticalTabsetService.prototype.tabsVisible = function () {
349
+ return !this.isMobile() || this._tabsVisible;
350
+ };
351
+ SkyVerticalTabsetService.prototype.contentVisible = function () {
352
+ return !this.isMobile() || !this._tabsVisible;
353
+ };
354
+ SkyVerticalTabsetService.prototype.showTabs = function () {
355
+ this._tabsVisible = true;
356
+ this._contentAdded = false;
357
+ this.animationTabsVisibleState = VISIBLE_STATE;
358
+ this.animationContentVisibleState = HIDDEN_STATE;
359
+ this.showingTabs.next(true);
360
+ };
361
+ SkyVerticalTabsetService.prototype.destroyContent = function () {
362
+ if (this._content) {
363
+ this._content.nativeElement.innerHTML = '';
364
+ }
365
+ this.content = undefined;
366
+ };
367
+ SkyVerticalTabsetService.prototype.moveContent = function () {
368
+ if (this._content && !this._contentAdded) {
369
+ var activeTab = this.activeTab();
370
+ var activeContent = activeTab ? activeTab.tabContent : undefined;
371
+ if (activeContent && activeContent.nativeElement) {
372
+ this._content.nativeElement.appendChild(activeContent.nativeElement);
373
+ activeTab.contentRendered = true;
374
+ this._contentAdded = true;
375
+ }
376
+ }
377
+ };
378
+ SkyVerticalTabsetService.prototype.updateTabClicked = function () {
379
+ this._contentAdded = false;
380
+ if (this.isMobile()) {
381
+ this._tabsVisible = false;
382
+ this.animationContentVisibleState = VISIBLE_STATE;
383
+ this.animationTabsVisibleState = HIDDEN_STATE;
384
+ this.hidingTabs.next(true);
385
+ }
386
+ this.indexChanged.next(this.activeIndex);
387
+ };
388
+ SkyVerticalTabsetService.ctorParameters = function () { return [
389
+ { type: core$1.SkyMediaQueryService }
390
+ ]; };
391
+ SkyVerticalTabsetService = __decorate([
392
+ core.Injectable()
393
+ ], SkyVerticalTabsetService);
394
+ return SkyVerticalTabsetService;
395
+ }());
396
+
397
+ /**
398
+ * Creates a container for the sectioned forms.
399
+ */
400
+ var SkySectionedFormComponent = /** @class */ (function () {
401
+ function SkySectionedFormComponent(tabService, changeRef) {
402
+ this.tabService = tabService;
403
+ this.changeRef = changeRef;
404
+ /**
405
+ * Indicates whether the sectioned form loads section content during initialization so that it
406
+ * displays content without moving around elements in the content container.
407
+ * @default false
408
+ */
409
+ this.maintainSectionContent = false;
410
+ /**
411
+ * Fires when the active tab changes and emits the index of the active
412
+ * section. The index is based on the section's position when the form loads.
413
+ */
414
+ this.indexChanged = new core.EventEmitter();
415
+ this.isMobile = false;
416
+ this._ngUnsubscribe = new rxjs.Subject();
417
+ }
418
+ Object.defineProperty(SkySectionedFormComponent.prototype, "ariaRole", {
419
+ get: function () {
420
+ return this.isMobile ? undefined : 'tablist';
421
+ },
422
+ enumerable: true,
423
+ configurable: true
424
+ });
425
+ SkySectionedFormComponent.prototype.ngOnInit = function () {
426
+ var _this = this;
427
+ this.tabService.maintainTabContent = this.maintainSectionContent;
428
+ this.tabService.indexChanged
429
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
430
+ .subscribe(function (index) {
431
+ _this.indexChanged.emit(index);
432
+ _this.changeRef.markForCheck();
433
+ });
434
+ this.tabService.switchingMobile
435
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
436
+ .subscribe(function (mobile) {
437
+ _this.isMobile = mobile;
438
+ _this.changeRef.markForCheck();
439
+ });
440
+ if (this.tabService.isMobile()) {
441
+ this.isMobile = true;
442
+ this.tabService.animationContentVisibleState = VISIBLE_STATE;
443
+ this.changeRef.markForCheck();
444
+ }
445
+ };
446
+ SkySectionedFormComponent.prototype.ngAfterViewChecked = function () {
447
+ this.tabService.content = this.content;
448
+ this.tabService.updateContent();
449
+ };
450
+ SkySectionedFormComponent.prototype.ngOnDestroy = function () {
451
+ this._ngUnsubscribe.next();
452
+ this._ngUnsubscribe.complete();
453
+ };
454
+ SkySectionedFormComponent.prototype.tabsVisible = function () {
455
+ this.changeRef.markForCheck();
456
+ return this.tabService.tabsVisible();
457
+ };
458
+ SkySectionedFormComponent.prototype.showTabs = function () {
459
+ this.tabService.showTabs();
460
+ this.changeRef.markForCheck();
461
+ };
462
+ SkySectionedFormComponent.ctorParameters = function () { return [
463
+ { type: SkyVerticalTabsetService },
464
+ { type: core.ChangeDetectorRef }
465
+ ]; };
466
+ __decorate([
467
+ core.Input()
468
+ ], SkySectionedFormComponent.prototype, "maintainSectionContent", void 0);
469
+ __decorate([
470
+ core.Output()
471
+ ], SkySectionedFormComponent.prototype, "indexChanged", void 0);
472
+ __decorate([
473
+ core.ViewChild('skySectionSideContent')
474
+ ], SkySectionedFormComponent.prototype, "content", void 0);
475
+ SkySectionedFormComponent = __decorate([
476
+ core.Component({
477
+ selector: 'sky-sectioned-form',
478
+ template: "<div\n aria-orientation=\"vertical\"\n class=\"sky-sectioned-form\"\n [attr.role]=\"ariaRole\"\n (window:resize)=\"tabService.updateContent()\"\n>\n <div\n *ngIf=\"maintainSectionContent || tabsVisible()\"\n class=\"sky-sectioned-form-tabs\"\n [ngClass]=\"{'sky-sectioned-form-tabs-hidden': !tabsVisible()}\"\n [@tabEnter]=\"tabService.animationTabsVisibleState\"\n >\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"maintainSectionContent || tabService.contentVisible()\"\n class=\"sky-sectioned-form-content sky-padding-even-large\"\n [ngClass]=\"{'sky-sectioned-form-content-hidden': !tabService.contentVisible()}\"\n [@contentEnter]=\"tabService.animationContentVisibleState\"\n #skySectionSideContent\n >\n </div>\n</div>\n\n",
479
+ providers: [SkyVerticalTabsetService],
480
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
481
+ animations: [
482
+ animations.trigger('tabEnter', [
483
+ animations.transition(HIDDEN_STATE + " => " + VISIBLE_STATE, [
484
+ animations.style({ transform: 'translate(-100%)' }),
485
+ animations.animate('150ms ease-in')
486
+ ])
487
+ ]),
488
+ animations.trigger('contentEnter', [
489
+ animations.transition(HIDDEN_STATE + " => " + VISIBLE_STATE, [
490
+ animations.style({ transform: 'translate(100%)' }),
491
+ animations.animate('150ms ease-in')
492
+ ])
493
+ ])
494
+ ],
495
+ styles: [":host .sky-sectioned-form{display:block;max-height:none}:host .sky-sectioned-form-content{flex-basis:auto;overflow-y:visible}:host .sky-sectioned-form-tabs{flex-basis:auto;overflow-y:visible;border-right:1px solid #e2e3e4}:host-context(.sky-responsive-container-lg) .sky-sectioned-form,:host-context(.sky-responsive-container-md) .sky-sectioned-form,:host-context(.sky-responsive-container-sm) .sky-sectioned-form,:host-context(.sky-responsive-container-xs) .sky-sectioned-form{display:block;max-height:none}:host-context(.sky-responsive-container-lg) .sky-sectioned-form-content,:host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-responsive-container-xs) .sky-sectioned-form-content{flex-basis:auto;overflow-y:visible}:host-context(.sky-responsive-container-lg) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-md) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-xs) .sky-sectioned-form-tabs{flex-basis:auto;overflow-y:visible;border-right:1px solid #e2e3e4}@media (min-width:768px){:host .sky-sectioned-form{display:flex;max-height:100%}:host .sky-sectioned-form-content{flex-basis:70%;overflow-y:auto}:host .sky-sectioned-form-tabs{flex-basis:30%;overflow-y:auto}}:host-context(.sky-responsive-container-lg) .sky-sectioned-form,:host-context(.sky-responsive-container-md) .sky-sectioned-form,:host-context(.sky-responsive-container-sm) .sky-sectioned-form{display:flex;max-height:100%}:host-context(.sky-responsive-container-lg) .sky-sectioned-form-content,:host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-content{flex-basis:70%;overflow-y:auto}:host-context(.sky-responsive-container-lg) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-md) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-tabs{flex-basis:30%;overflow-y:auto}.sky-sectioned-form-content-hidden,.sky-sectioned-form-tabs-hidden{display:none}"]
496
+ })
497
+ ], SkySectionedFormComponent);
498
+ return SkySectionedFormComponent;
499
+ }());
500
+
501
+ /**
502
+ * @internal
503
+ */
504
+ var SkyVerticalTabMediaQueryService = /** @class */ (function () {
505
+ function SkyVerticalTabMediaQueryService() {
506
+ this.currentSubject = new rxjs.BehaviorSubject(this.current);
507
+ this._current = core$1.SkyMediaBreakpoints.xs;
508
+ this.currentSubject.next(this._current);
509
+ }
510
+ Object.defineProperty(SkyVerticalTabMediaQueryService.prototype, "current", {
511
+ get: function () {
512
+ return this._current;
513
+ },
514
+ enumerable: true,
515
+ configurable: true
516
+ });
517
+ SkyVerticalTabMediaQueryService.prototype.subscribe = function (listener) {
518
+ return this.currentSubject.subscribe({
519
+ next: function (breakpoints) {
520
+ listener(breakpoints);
521
+ }
522
+ });
523
+ };
524
+ SkyVerticalTabMediaQueryService.prototype.setBreakpointForWidth = function (width) {
525
+ var breakpoint;
526
+ if (this.isWidthWithinBreakpiont(width, core$1.SkyMediaBreakpoints.xs)) {
527
+ breakpoint = core$1.SkyMediaBreakpoints.xs;
528
+ }
529
+ else if (this.isWidthWithinBreakpiont(width, core$1.SkyMediaBreakpoints.sm)) {
530
+ breakpoint = core$1.SkyMediaBreakpoints.sm;
531
+ }
532
+ else if (this.isWidthWithinBreakpiont(width, core$1.SkyMediaBreakpoints.md)) {
533
+ breakpoint = core$1.SkyMediaBreakpoints.md;
534
+ }
535
+ else {
536
+ breakpoint = core$1.SkyMediaBreakpoints.lg;
537
+ }
538
+ this._current = breakpoint;
539
+ this.currentSubject.next(this._current);
540
+ };
541
+ SkyVerticalTabMediaQueryService.prototype.isWidthWithinBreakpiont = function (width, breakpoint) {
542
+ var xsBreakpointMaxPixels = 767;
543
+ var smBreakpointMinPixels = 768;
544
+ var smBreakpointMaxPixels = 991;
545
+ var mdBreakpointMinPixels = 992;
546
+ var mdBreakpointMaxPixels = 1199;
547
+ var lgBreakpointMinPixels = 1200;
548
+ switch (breakpoint) {
549
+ case core$1.SkyMediaBreakpoints.xs: {
550
+ return (width <= xsBreakpointMaxPixels);
551
+ }
552
+ case core$1.SkyMediaBreakpoints.sm: {
553
+ return (width >= smBreakpointMinPixels && width <= smBreakpointMaxPixels);
554
+ }
555
+ case core$1.SkyMediaBreakpoints.md: {
556
+ return (width >= mdBreakpointMinPixels && width <= mdBreakpointMaxPixels);
557
+ }
558
+ default: {
559
+ return (width >= lgBreakpointMinPixels);
560
+ }
561
+ }
562
+ };
563
+ SkyVerticalTabMediaQueryService.prototype.destroy = function () {
564
+ this.currentSubject.complete();
565
+ };
566
+ SkyVerticalTabMediaQueryService = __decorate([
567
+ core.Injectable()
568
+ ], SkyVerticalTabMediaQueryService);
569
+ return SkyVerticalTabMediaQueryService;
570
+ }());
571
+
572
+ var SkyVerticalTabsetAdapterService = /** @class */ (function () {
573
+ function SkyVerticalTabsetAdapterService(rendererFactory) {
574
+ this.rendererFactory = rendererFactory;
575
+ this.renderer = this.rendererFactory.createRenderer(undefined, undefined);
576
+ }
577
+ SkyVerticalTabsetAdapterService.prototype.getWidth = function (elementRef) {
578
+ return elementRef.nativeElement.clientWidth;
579
+ };
580
+ SkyVerticalTabsetAdapterService.prototype.scrollToContentTop = function (element) {
581
+ element.nativeElement.scrollTop = 0;
582
+ };
583
+ SkyVerticalTabsetAdapterService.prototype.setResponsiveClass = function (element, breakpoint) {
584
+ var nativeEl = element.nativeElement;
585
+ this.renderer.removeClass(nativeEl, 'sky-responsive-container-xs');
586
+ this.renderer.removeClass(nativeEl, 'sky-responsive-container-sm');
587
+ this.renderer.removeClass(nativeEl, 'sky-responsive-container-md');
588
+ this.renderer.removeClass(nativeEl, 'sky-responsive-container-lg');
589
+ var newClass;
590
+ switch (breakpoint) {
591
+ case core$1.SkyMediaBreakpoints.xs: {
592
+ newClass = 'sky-responsive-container-xs';
593
+ break;
594
+ }
595
+ case core$1.SkyMediaBreakpoints.sm: {
596
+ newClass = 'sky-responsive-container-sm';
597
+ break;
598
+ }
599
+ case core$1.SkyMediaBreakpoints.md: {
600
+ newClass = 'sky-responsive-container-md';
601
+ break;
602
+ }
603
+ default: {
604
+ newClass = 'sky-responsive-container-lg';
605
+ break;
606
+ }
607
+ }
608
+ this.renderer.addClass(nativeEl, newClass);
609
+ };
610
+ SkyVerticalTabsetAdapterService.ctorParameters = function () { return [
611
+ { type: core.RendererFactory2 }
612
+ ]; };
613
+ SkyVerticalTabsetAdapterService = __decorate([
614
+ core.Injectable()
615
+ ], SkyVerticalTabsetAdapterService);
616
+ return SkyVerticalTabsetAdapterService;
617
+ }());
618
+
619
+ var SkyVerticalTabComponent = /** @class */ (function () {
620
+ function SkyVerticalTabComponent(adapterService, changeRef, tabsetService, verticalTabMediaQueryService) {
621
+ this.adapterService = adapterService;
622
+ this.changeRef = changeRef;
623
+ this.tabsetService = tabsetService;
624
+ this.verticalTabMediaQueryService = verticalTabMediaQueryService;
625
+ /**
626
+ * Indicates whether the tab is active when the tabset loads.
627
+ */
628
+ this.active = false;
629
+ /**
630
+ * Indicates whether to disable the tab.
631
+ */
632
+ this.disabled = false;
633
+ /**
634
+ * Indicates whether to indicate that the tab has an error.
635
+ * @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.
636
+ */
637
+ this.errorIndicator = false;
638
+ this.isMobile = false;
639
+ this._contentRendered = false;
640
+ this._mobileSubscription = new rxjs.Subject();
641
+ this._ngUnsubscribe = new rxjs.Subject();
642
+ this._showTabRightArrow = false;
643
+ }
644
+ Object.defineProperty(SkyVerticalTabComponent.prototype, "ariaControls", {
645
+ /**
646
+ * Specifies the HTML element ID (without the leading `#`) of the element that contains
647
+ * the content that the vertical tab displays, which corresponds to the `tabId`. This property
648
+ * [supports accessibility rules for disclosures](https://www.w3.org/TR/wai-aria-practices-1.1/#disclosure).
649
+ */
650
+ get: function () {
651
+ return this.isMobile ? undefined : this._ariaControls;
652
+ },
653
+ set: function (value) {
654
+ this._ariaControls = value;
655
+ },
656
+ enumerable: true,
657
+ configurable: true
658
+ });
659
+ Object.defineProperty(SkyVerticalTabComponent.prototype, "ariaRole", {
660
+ /**
661
+ * Specifies an ARIA role for the vertical tab
662
+ * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)
663
+ * by indicating how the tab functions and what it controls. For information about how
664
+ * an ARIA role indicates what an item represents on a web page, see the
665
+ * [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/roles).
666
+ * @default "tab"
667
+ */
668
+ get: function () {
669
+ if (this.isMobile) {
670
+ return undefined;
671
+ }
672
+ return this._ariaRole || 'tab';
673
+ },
674
+ set: function (value) {
675
+ this._ariaRole = value;
676
+ },
677
+ enumerable: true,
678
+ configurable: true
679
+ });
680
+ Object.defineProperty(SkyVerticalTabComponent.prototype, "showTabRightArrow", {
681
+ /**
682
+ * Indicates whether to display a chevron-right icon in the righthand side of the tab.
683
+ * @internal
684
+ */
685
+ get: function () {
686
+ return this._showTabRightArrow && this.tabsetService.isMobile();
687
+ },
688
+ set: function (value) {
689
+ this._showTabRightArrow = value;
690
+ },
691
+ enumerable: true,
692
+ configurable: true
693
+ });
694
+ Object.defineProperty(SkyVerticalTabComponent.prototype, "contentRendered", {
695
+ get: function () {
696
+ return this._contentRendered;
697
+ },
698
+ set: function (value) {
699
+ var _this = this;
700
+ this._contentRendered = value;
701
+ if (this._contentRendered) {
702
+ // NOTE: Wrapped in a setTimeout here to ensure that everything has completed rendering.
703
+ setTimeout(function () {
704
+ _this.updateBreakpointAndResponsiveClass(_this.adapterService.getWidth(_this.tabContent));
705
+ });
706
+ }
707
+ },
708
+ enumerable: true,
709
+ configurable: true
710
+ });
711
+ SkyVerticalTabComponent.prototype.ngOnInit = function () {
712
+ var _this = this;
713
+ this.isMobile = this.tabsetService.isMobile();
714
+ this.changeRef.markForCheck();
715
+ this.tabsetService.switchingMobile
716
+ .subscribe(function (mobile) {
717
+ _this.isMobile = mobile;
718
+ _this.changeRef.markForCheck();
719
+ });
720
+ // Update the breakpoint and responsive class here just as a sanity check since we can not
721
+ // watch for element resizing.
722
+ this.tabsetService.indexChanged
723
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
724
+ .subscribe(function (index) {
725
+ if (_this.index === index && _this.contentRendered) {
726
+ _this.updateBreakpointAndResponsiveClass(_this.adapterService.getWidth(_this.tabContent));
727
+ }
728
+ });
729
+ this.tabsetService.addTab(this);
730
+ };
731
+ SkyVerticalTabComponent.prototype.ngOnDestroy = function () {
732
+ this._mobileSubscription.unsubscribe();
733
+ this._ngUnsubscribe.next();
734
+ this._ngUnsubscribe.complete();
735
+ this.tabsetService.destroyTab(this);
736
+ };
737
+ SkyVerticalTabComponent.prototype.tabIndex = function () {
738
+ if (!this.disabled) {
739
+ return 0;
740
+ }
741
+ else {
742
+ return -1;
743
+ }
744
+ };
745
+ SkyVerticalTabComponent.prototype.activateTab = function () {
746
+ if (!this.disabled) {
747
+ this.active = true;
748
+ this.tabsetService.activateTab(this);
749
+ this.changeRef.markForCheck();
750
+ }
751
+ };
752
+ SkyVerticalTabComponent.prototype.onWindowResize = function () {
753
+ this.updateBreakpointAndResponsiveClass(this.adapterService.getWidth(this.tabContent));
754
+ };
755
+ SkyVerticalTabComponent.prototype.tabDeactivated = function () {
756
+ this.changeRef.markForCheck();
757
+ };
758
+ SkyVerticalTabComponent.prototype.updateBreakpointAndResponsiveClass = function (width) {
759
+ this.verticalTabMediaQueryService.setBreakpointForWidth(width);
760
+ var newBreakpiont = this.verticalTabMediaQueryService.current;
761
+ this.adapterService.setResponsiveClass(this.tabContent, newBreakpiont);
762
+ this.changeRef.markForCheck();
763
+ };
764
+ SkyVerticalTabComponent.ctorParameters = function () { return [
765
+ { type: SkyVerticalTabsetAdapterService },
766
+ { type: core.ChangeDetectorRef },
767
+ { type: SkyVerticalTabsetService },
768
+ { type: SkyVerticalTabMediaQueryService }
769
+ ]; };
770
+ __decorate([
771
+ core.Input()
772
+ ], SkyVerticalTabComponent.prototype, "active", void 0);
773
+ __decorate([
774
+ core.Input()
775
+ ], SkyVerticalTabComponent.prototype, "ariaControls", null);
776
+ __decorate([
777
+ core.Input()
778
+ ], SkyVerticalTabComponent.prototype, "ariaInvalid", void 0);
779
+ __decorate([
780
+ core.Input()
781
+ ], SkyVerticalTabComponent.prototype, "ariaRequired", void 0);
782
+ __decorate([
783
+ core.Input()
784
+ ], SkyVerticalTabComponent.prototype, "ariaRole", null);
785
+ __decorate([
786
+ core.Input()
787
+ ], SkyVerticalTabComponent.prototype, "disabled", void 0);
788
+ __decorate([
789
+ core.Input()
790
+ ], SkyVerticalTabComponent.prototype, "errorIndicator", void 0);
791
+ __decorate([
792
+ core.Input()
793
+ ], SkyVerticalTabComponent.prototype, "tabHeaderCount", void 0);
794
+ __decorate([
795
+ core.Input()
796
+ ], SkyVerticalTabComponent.prototype, "tabHeading", void 0);
797
+ __decorate([
798
+ core.Input()
799
+ ], SkyVerticalTabComponent.prototype, "showTabRightArrow", null);
800
+ __decorate([
801
+ core.Input()
802
+ ], SkyVerticalTabComponent.prototype, "tabId", void 0);
803
+ __decorate([
804
+ core.ViewChild('tabContentWrapper')
805
+ ], SkyVerticalTabComponent.prototype, "tabContent", void 0);
806
+ __decorate([
807
+ core.HostListener('window:resize')
808
+ ], SkyVerticalTabComponent.prototype, "onWindowResize", null);
809
+ SkyVerticalTabComponent = __decorate([
810
+ core.Component({
811
+ selector: 'sky-vertical-tab',
812
+ template: "<a\n class=\"sky-vertical-tab\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"ariaRequired ? ariaRequired : null\"\n [attr.aria-selected]=\"active\"\n [attr.id]=\"tabId\"\n [attr.role]=\"ariaRole\"\n [ngClass]=\"{\n 'sky-vertical-tab-active': active,\n 'sky-vertical-tab-disabled': disabled,\n 'sky-deemphasized': disabled\n }\"\n [tabIndex]=\"tabIndex()\"\n (click)=\"activateTab()\"\n (keyup.enter)=\"activateTab()\">\n <div class=\"sky-vertical-tab-display\">\n <div class=\"sky-vertical-tab-heading\">\n <span class=\"sky-vertical-tab-heading-value\">{{ tabHeading }}</span>\n <span\n class=\"sky-vertical-tab-count\"\n *ngIf=\"tabHeaderCount || tabHeaderCount === 0\">\n ({{ tabHeaderCount }})\n </span>\n </div>\n <sky-status-indicator *ngIf=\"errorIndicator\"\n class=\"sky-vertical-tab-heading-error\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n ></sky-status-indicator>\n\n <sky-icon\n *ngIf=\"showTabRightArrow\"\n class=\"sky-vertical-tab-right-arrow\"\n icon=\"chevron-right\"\n >\n </sky-icon>\n </div>\n</a>\n\n<div\n #tabContentWrapper\n>\n <div\n class=\"sky-vertical-tab-content-pane\"\n [ngClass]=\"{'sky-vertical-tab-hidden': !active}\"\n >\n\n <ng-content></ng-content>\n\n <div>\n\n</div>\n\n",
813
+ providers: [
814
+ SkyVerticalTabMediaQueryService,
815
+ { provide: core$1.SkyMediaQueryService, useExisting: SkyVerticalTabMediaQueryService }
816
+ ],
817
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
818
+ styles: [".sky-vertical-tab{cursor:pointer;padding:7px 0 7px 10px;margin:5px 0 5px 10px;display:flex;text-decoration:none}.sky-vertical-tab:not(.sky-deemphasized){color:#212327}.sky-vertical-tab:hover{background-color:#eeeeef}.sky-vertical-tab:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px}.sky-vertical-tab:hover .sky-vertical-tab-right-arrow{color:#979ba2}.sky-vertical-tab-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}.sky-vertical-tab-hidden{display:none}.sky-vertical-tab-display{display:flex;flex-grow:1}.sky-vertical-tab-heading-error{padding-left:5px}.sky-vertical-tab-count{margin-left:5px}.sky-vertical-tab-disabled{cursor:not-allowed;pointer-events:none;font-style:normal}.sky-vertical-tab-right-arrow{padding:3px 10px 0 0;color:#cdcfd2}.sky-theme-modern .sky-vertical-tab,:host-context(.sky-theme-modern) .sky-vertical-tab{cursor:pointer;padding:10px 0 10px 10px;margin:10px 0 20px 10px}.sky-theme-modern .sky-vertical-tab:not(.sky-vertical-tab-active):not(:active):hover,:host-context(.sky-theme-modern) .sky-vertical-tab:not(.sky-vertical-tab-active):not(:active):hover{color:#212327;background-color:transparent;padding-left:9px;border-left:1px solid #00b4f1}.sky-theme-modern .sky-vertical-tab:not(:active):focus,:host-context(.sky-theme-modern) .sky-vertical-tab:not(:active):focus{outline:#1870b8 solid 2px;outline-offset:-2px;box-shadow:0 1px 8px 0 rgba(0,0,0,.3)}.sky-theme-modern .sky-vertical-tab:focus:active:hover,:host-context(.sky-theme-modern) .sky-vertical-tab:focus:active:hover{outline:0;background:0 0}.sky-theme-modern .sky-vertical-tab:active,:host-context(.sky-theme-modern) .sky-vertical-tab:active{border-left:3px solid #00b4f1;padding-left:7px}.sky-theme-modern .sky-vertical-tab .sky-vertical-tab-heading-error,:host-context(.sky-theme-modern) .sky-vertical-tab .sky-vertical-tab-heading-error{padding-left:10px}.sky-theme-modern .sky-vertical-tab-active,:host-context(.sky-theme-modern) .sky-vertical-tab-active{background:0 0;padding-left:7px;border-left:3px solid #1870b8}"]
819
+ })
820
+ ], SkyVerticalTabComponent);
821
+ return SkyVerticalTabComponent;
822
+ }());
823
+
824
+ var SkySectionedFormService = /** @class */ (function () {
825
+ function SkySectionedFormService() {
826
+ /**
827
+ * @internal
828
+ */
829
+ this.invalidChange = new rxjs.BehaviorSubject(undefined);
830
+ /**
831
+ * @internal
832
+ */
833
+ this.requiredChange = new rxjs.BehaviorSubject(undefined);
834
+ }
835
+ /**
836
+ * Sets the current section's invalid state based on the `isInvalid` parameter.
837
+ * This method is used within a `sky-sectioned-form-section` element.
838
+ */
839
+ SkySectionedFormService.prototype.invalidFieldChanged = function (isInvalid) {
840
+ this.invalidChange.next(isInvalid);
841
+ };
842
+ /**
843
+ * Sets the current section's required state based on the `isRequired` parameter.
844
+ * This method is used within a `sky-sectioned-form-section` element.
845
+ */
846
+ SkySectionedFormService.prototype.requiredFieldChanged = function (isRequired) {
847
+ this.requiredChange.next(isRequired);
848
+ };
849
+ SkySectionedFormService = __decorate([
850
+ core.Injectable()
851
+ ], SkySectionedFormService);
852
+ return SkySectionedFormService;
853
+ }());
854
+
855
+ var nextId = 0;
856
+ /**
857
+ * Creates an individual form to display as a section within the sectioned form.
858
+ */
859
+ var SkySectionedFormSectionComponent = /** @class */ (function () {
860
+ function SkySectionedFormSectionComponent(sectionedFormService, tabsetService, changeRef) {
861
+ this.sectionedFormService = sectionedFormService;
862
+ this.tabsetService = tabsetService;
863
+ this.changeRef = changeRef;
864
+ this.sectionTabId = "sky-sectioned-form-tab-" + ++nextId;
865
+ this.sectionContentId = "sky-sectioned-form-section-" + ++nextId;
866
+ this.isMobile = false;
867
+ this._ngUnsubscribe = new rxjs.Subject();
868
+ }
869
+ Object.defineProperty(SkySectionedFormSectionComponent.prototype, "ariaRole", {
870
+ get: function () {
871
+ return this.isMobile ? undefined : 'tabpanel';
872
+ },
873
+ enumerable: true,
874
+ configurable: true
875
+ });
876
+ Object.defineProperty(SkySectionedFormSectionComponent.prototype, "ariaLabelledby", {
877
+ get: function () {
878
+ return this.isMobile ? undefined : this.sectionTabId;
879
+ },
880
+ enumerable: true,
881
+ configurable: true
882
+ });
883
+ SkySectionedFormSectionComponent.prototype.ngOnInit = function () {
884
+ var _this = this;
885
+ this.isMobile = this.tabsetService.isMobile();
886
+ this.changeRef.detectChanges();
887
+ this.tabsetService.switchingMobile
888
+ .subscribe(function (mobile) {
889
+ _this.isMobile = mobile;
890
+ _this.changeRef.detectChanges();
891
+ });
892
+ this.sectionedFormService.requiredChange
893
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
894
+ .subscribe(function (required) { return _this.fieldRequired = required; });
895
+ this.sectionedFormService.invalidChange
896
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
897
+ .subscribe(function (invalid) { return _this.fieldInvalid = invalid; });
898
+ };
899
+ SkySectionedFormSectionComponent.prototype.ngOnDestroy = function () {
900
+ this._ngUnsubscribe.next();
901
+ this._ngUnsubscribe.complete();
902
+ };
903
+ SkySectionedFormSectionComponent.ctorParameters = function () { return [
904
+ { type: SkySectionedFormService },
905
+ { type: SkyVerticalTabsetService },
906
+ { type: core.ChangeDetectorRef }
907
+ ]; };
908
+ __decorate([
909
+ core.Input()
910
+ ], SkySectionedFormSectionComponent.prototype, "heading", void 0);
911
+ __decorate([
912
+ core.Input()
913
+ ], SkySectionedFormSectionComponent.prototype, "itemCount", void 0);
914
+ __decorate([
915
+ core.Input()
916
+ ], SkySectionedFormSectionComponent.prototype, "active", void 0);
917
+ __decorate([
918
+ core.ViewChild(SkyVerticalTabComponent)
919
+ ], SkySectionedFormSectionComponent.prototype, "tab", void 0);
920
+ SkySectionedFormSectionComponent = __decorate([
921
+ core.Component({
922
+ selector: 'sky-sectioned-form-section',
923
+ template: "<sky-vertical-tab\n [active]=\"active\"\n [ariaControls]=\"sectionContentId\"\n [ariaInvalid]=\"fieldInvalid\"\n [ariaRequired]=\"fieldRequired\"\n [errorIndicator]=\"fieldInvalid\"\n [ngClass]=\"{\n 'sky-tab-field-required': fieldRequired\n }\"\n [showTabRightArrow]=\"true\"\n [tabHeaderCount]=\"itemCount\"\n [tabHeading]=\"heading\"\n [tabId]=\"sectionTabId\">\n <div\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.role]=\"ariaRole\"\n [id]=\"sectionContentId\"\n #tabContent>\n <ng-content></ng-content>\n </div>\n</sky-vertical-tab>\n",
924
+ providers: [SkySectionedFormService],
925
+ styles: [":host .sky-tab-field-required ::ng-deep .sky-vertical-tab-heading:after{content:\"*\";color:#ef4044;padding-left:5px}"]
926
+ })
927
+ ], SkySectionedFormSectionComponent);
928
+ return SkySectionedFormSectionComponent;
929
+ }());
930
+
931
+ var SkyTabsResourcesProvider = /** @class */ (function () {
932
+ function SkyTabsResourcesProvider() {
933
+ this.resources = { "EN-US": { "skyux_tab_add": "Add tab", "skyux_tab_close": "Close {0} tab", "skyux_tabs_navigator_next": "Next", "skyux_tabs_navigator_previous": "Previous", "skyux_tab_open": "Open tab", "skyux_vertical_tabs_show_tabs_text": "Tab list" } };
934
+ }
935
+ SkyTabsResourcesProvider.prototype.getString = function (localeInfo, name) {
936
+ return i18n.getStringForLocale(this.resources, localeInfo.locale, name);
937
+ };
938
+ SkyTabsResourcesProvider = __decorate([
939
+ core.Injectable()
940
+ ], SkyTabsResourcesProvider);
941
+ return SkyTabsResourcesProvider;
942
+ }());
943
+
944
+ var SkyTabsResourcesModule = /** @class */ (function () {
945
+ function SkyTabsResourcesModule() {
946
+ }
947
+ SkyTabsResourcesModule = __decorate([
948
+ core.NgModule({
949
+ providers: [{
950
+ provide: i18n.SKY_LIB_RESOURCES_PROVIDERS,
951
+ useClass: SkyTabsResourcesProvider,
952
+ multi: true
953
+ }]
954
+ })
955
+ ], SkyTabsResourcesModule);
956
+ return SkyTabsResourcesModule;
957
+ }());
958
+
959
+ var SkyVerticalTabsetComponent = /** @class */ (function () {
960
+ function SkyVerticalTabsetComponent(adapterService, tabService, resources, changeRef) {
961
+ this.adapterService = adapterService;
962
+ this.tabService = tabService;
963
+ this.resources = resources;
964
+ this.changeRef = changeRef;
965
+ /**
966
+ * Indicates whether the vertical tabset loads tab content during initialization so that it
967
+ * displays content without moving around elements in the content container.
968
+ * @default 'false'
969
+ */
970
+ this.maintainTabContent = false;
971
+ /**
972
+ * Fires when the active tab changes. Emits the index of the active tab. The
973
+ * index is based on the tab's position when it loads.
974
+ */
975
+ this.activeChange = new core.EventEmitter();
976
+ this.isMobile = false;
977
+ this._ngUnsubscribe = new rxjs.Subject();
978
+ }
979
+ Object.defineProperty(SkyVerticalTabsetComponent.prototype, "ariaRole", {
980
+ /**
981
+ * Specifies an ARIA role for the vertical tabset
982
+ * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)
983
+ * by indicating how the tabset functions and what it controls. For information about how
984
+ * an ARIA role indicates what an item represents on a web page, see the
985
+ * [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/roles).
986
+ * @default "tablist"
987
+ */
988
+ get: function () {
989
+ if (this.isMobile) {
990
+ return undefined;
991
+ }
992
+ return this._ariaRole || 'tablist';
993
+ },
994
+ set: function (value) {
995
+ this._ariaRole = value;
996
+ },
997
+ enumerable: true,
998
+ configurable: true
999
+ });
1000
+ SkyVerticalTabsetComponent.prototype.ngOnInit = function () {
1001
+ var _this = this;
1002
+ this.tabService.maintainTabContent = this.maintainTabContent;
1003
+ this.tabService.indexChanged
1004
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
1005
+ .subscribe(function (index) {
1006
+ _this.activeChange.emit(index);
1007
+ if (_this.contentWrapper) {
1008
+ _this.adapterService.scrollToContentTop(_this.contentWrapper);
1009
+ }
1010
+ _this.changeRef.markForCheck();
1011
+ });
1012
+ this.tabService.switchingMobile
1013
+ .pipe(operators.takeUntil(this._ngUnsubscribe))
1014
+ .subscribe(function (mobile) {
1015
+ _this.isMobile = mobile;
1016
+ _this.changeRef.markForCheck();
1017
+ });
1018
+ if (this.tabService.isMobile()) {
1019
+ this.isMobile = true;
1020
+ this.tabService.animationContentVisibleState = VISIBLE_STATE;
1021
+ this.changeRef.markForCheck();
1022
+ }
1023
+ if (!this.showTabsText) {
1024
+ this.resources.getString('skyux_vertical_tabs_show_tabs_text')
1025
+ .pipe(operators.take(1))
1026
+ .subscribe(function (resource) {
1027
+ /* sanity check */
1028
+ if (!_this.showTabsText) {
1029
+ _this.showTabsText = resource;
1030
+ }
1031
+ });
1032
+ }
1033
+ };
1034
+ SkyVerticalTabsetComponent.prototype.ngAfterViewChecked = function () {
1035
+ this.tabService.content = this.content;
1036
+ this.tabService.updateContent();
1037
+ };
1038
+ SkyVerticalTabsetComponent.prototype.ngOnDestroy = function () {
1039
+ this._ngUnsubscribe.next();
1040
+ this._ngUnsubscribe.complete();
1041
+ };
1042
+ SkyVerticalTabsetComponent.ctorParameters = function () { return [
1043
+ { type: SkyVerticalTabsetAdapterService },
1044
+ { type: SkyVerticalTabsetService },
1045
+ { type: i18n.SkyLibResourcesService },
1046
+ { type: core.ChangeDetectorRef }
1047
+ ]; };
1048
+ __decorate([
1049
+ core.Input()
1050
+ ], SkyVerticalTabsetComponent.prototype, "showTabsText", void 0);
1051
+ __decorate([
1052
+ core.Input()
1053
+ ], SkyVerticalTabsetComponent.prototype, "ariaRole", null);
1054
+ __decorate([
1055
+ core.Input()
1056
+ ], SkyVerticalTabsetComponent.prototype, "maintainTabContent", void 0);
1057
+ __decorate([
1058
+ core.Output()
1059
+ ], SkyVerticalTabsetComponent.prototype, "activeChange", void 0);
1060
+ __decorate([
1061
+ core.ViewChild('groupContainerWrapper')
1062
+ ], SkyVerticalTabsetComponent.prototype, "tabGroups", void 0);
1063
+ __decorate([
1064
+ core.ViewChild('skySideContent')
1065
+ ], SkyVerticalTabsetComponent.prototype, "content", void 0);
1066
+ __decorate([
1067
+ core.ViewChild('contentContainerWrapper')
1068
+ ], SkyVerticalTabsetComponent.prototype, "contentWrapper", void 0);
1069
+ SkyVerticalTabsetComponent = __decorate([
1070
+ core.Component({
1071
+ selector: 'sky-vertical-tabset',
1072
+ template: " <div class=\"sky-vertical-tabset\" (window:resize)=\"tabService.updateContent()\">\n <div\n *ngIf=\"maintainTabContent || tabService.tabsVisible()\"\n #groupContainerWrapper\n class=\"sky-vertical-tabset-group-container\"\n [ngClass]=\"{'sky-vertical-tabset-hidden': !tabService.tabsVisible()}\"\n [attr.role]=\"ariaRole\"\n [@tabGroupEnter]=\"tabService.animationTabsVisibleState\"\n >\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"maintainTabContent || tabService.contentVisible()\"\n class=\"sky-vertical-tabset-content\"\n [ngClass]=\"{'sky-vertical-tabset-content-hidden': !tabService.contentVisible()}\"\n [@contentEnter]=\"tabService.animationContentVisibleState\"\n #contentContainerWrapper\n >\n <div #skySideContent></div>\n <button\n *ngIf=\"!tabService.tabsVisible()\"\n (click)=\"tabService.showTabs()\"\n class=\"sky-btn sky-btn-primary sky-vertical-tabset-show-tabs-btn\"\n >\n <sky-icon icon=\"chevron-left\"></sky-icon>\n {{ showTabsText }}\n </button>\n </div>\n</div>\n",
1073
+ providers: [SkyVerticalTabsetService],
1074
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
1075
+ animations: [
1076
+ animations.trigger('tabGroupEnter', [
1077
+ animations.transition(HIDDEN_STATE + " => " + VISIBLE_STATE, [
1078
+ animations.style({ transform: 'translate(-100%)' }),
1079
+ animations.animate('150ms ease-in')
1080
+ ])
1081
+ ]),
1082
+ animations.trigger('contentEnter', [
1083
+ animations.transition(HIDDEN_STATE + " => " + VISIBLE_STATE, [
1084
+ animations.style({ transform: 'translate(100%)' }),
1085
+ animations.animate('150ms ease-in')
1086
+ ])
1087
+ ])
1088
+ ],
1089
+ styles: [":host .sky-vertical-tabset{display:block;height:auto}:host .sky-vertical-tabset-group-container{border-right:none}:host-context(.sky-responsive-container-lg) .sky-vertical-tabset,:host-context(.sky-responsive-container-md) .sky-vertical-tabset,:host-context(.sky-responsive-container-sm) .sky-vertical-tabset,:host-context(.sky-responsive-container-xs) .sky-vertical-tabset{display:block;height:auto}:host-context(.sky-responsive-container-lg) .sky-vertical-tabset-group-container,:host-context(.sky-responsive-container-md) .sky-vertical-tabset-group-container,:host-context(.sky-responsive-container-sm) .sky-vertical-tabset-group-container,:host-context(.sky-responsive-container-xs) .sky-vertical-tabset-group-container{border-right:none}@media (min-width:768px){:host .sky-vertical-tabset{display:flex;height:100%}:host .sky-vertical-tabset-group-container{border-right:1px solid #cdcfd2}}:host-context(.sky-responsive-container-lg) .sky-vertical-tabset,:host-context(.sky-responsive-container-md) .sky-vertical-tabset,:host-context(.sky-responsive-container-sm) .sky-vertical-tabset{display:flex;height:100%}:host-context(.sky-responsive-container-lg) .sky-vertical-tabset-group-container,:host-context(.sky-responsive-container-md) .sky-vertical-tabset-group-container,:host-context(.sky-responsive-container-sm) .sky-vertical-tabset-group-container{border-right:1px solid #cdcfd2}.sky-vertical-tabset-hidden{display:none}.sky-vertical-tabset-content{margin:10px 0 0 10px;flex-basis:75%;overflow-y:auto}.sky-vertical-tabset-content-hidden{display:none}.sky-vertical-tabset-show-tabs-btn{margin-top:10px}.sky-vertical-tabset-group-container{flex-basis:25%;overflow-y:auto}:host-context(sky-modal-content>) .sky-vertical-tabset{margin:-15px}"]
1090
+ })
1091
+ ], SkyVerticalTabsetComponent);
1092
+ return SkyVerticalTabsetComponent;
1093
+ }());
1094
+
1095
+ var SkyVerticalTabsetGroupComponent = /** @class */ (function () {
1096
+ function SkyVerticalTabsetGroupComponent(tabService, changeRef) {
1097
+ var _this = this;
1098
+ this.tabService = tabService;
1099
+ this.changeRef = changeRef;
1100
+ this.ngUnsubscribe = new rxjs.Subject();
1101
+ this.openBeforeTabsHidden = false;
1102
+ this._open = false;
1103
+ this.tabClicked = function () {
1104
+ _this.changeRef.markForCheck();
1105
+ };
1106
+ this.tabsHidden = function () {
1107
+ // this fixes an animation bug with ngIf when the parent component goes from visible to hidden
1108
+ _this.openBeforeTabsHidden = _this.open;
1109
+ _this.open = false;
1110
+ _this.changeRef.markForCheck();
1111
+ };
1112
+ this.tabsShown = function () {
1113
+ _this.open = _this.openBeforeTabsHidden;
1114
+ _this.changeRef.markForCheck();
1115
+ };
1116
+ }
1117
+ Object.defineProperty(SkyVerticalTabsetGroupComponent.prototype, "open", {
1118
+ get: function () {
1119
+ return !this.disabled && this._open;
1120
+ },
1121
+ /**
1122
+ * Indicates whether the collapsible group is expanded.
1123
+ * @default "false"
1124
+ */
1125
+ set: function (value) {
1126
+ this._open = value;
1127
+ },
1128
+ enumerable: true,
1129
+ configurable: true
1130
+ });
1131
+ SkyVerticalTabsetGroupComponent.prototype.ngOnInit = function () {
1132
+ this.tabService.hidingTabs
1133
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
1134
+ .subscribe(this.tabsHidden);
1135
+ this.tabService.showingTabs
1136
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
1137
+ .subscribe(this.tabsShown);
1138
+ this.tabService.tabClicked
1139
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
1140
+ .subscribe(this.tabClicked);
1141
+ };
1142
+ SkyVerticalTabsetGroupComponent.prototype.ngOnDestroy = function () {
1143
+ this.ngUnsubscribe.next();
1144
+ this.ngUnsubscribe.complete();
1145
+ };
1146
+ SkyVerticalTabsetGroupComponent.prototype.toggleMenuOpen = function () {
1147
+ if (!this.disabled) {
1148
+ this.open = !this.open;
1149
+ }
1150
+ this.changeRef.markForCheck();
1151
+ };
1152
+ SkyVerticalTabsetGroupComponent.prototype.subMenuOpen = function () {
1153
+ return this.tabs && (this.tabs.find(function (t) { return t.active; }) !== undefined);
1154
+ };
1155
+ SkyVerticalTabsetGroupComponent.ctorParameters = function () { return [
1156
+ { type: SkyVerticalTabsetService },
1157
+ { type: core.ChangeDetectorRef }
1158
+ ]; };
1159
+ __decorate([
1160
+ core.Input()
1161
+ ], SkyVerticalTabsetGroupComponent.prototype, "disabled", void 0);
1162
+ __decorate([
1163
+ core.Input()
1164
+ ], SkyVerticalTabsetGroupComponent.prototype, "groupHeading", void 0);
1165
+ __decorate([
1166
+ core.Input()
1167
+ ], SkyVerticalTabsetGroupComponent.prototype, "open", null);
1168
+ __decorate([
1169
+ core.ContentChildren(SkyVerticalTabComponent)
1170
+ ], SkyVerticalTabsetGroupComponent.prototype, "tabs", void 0);
1171
+ SkyVerticalTabsetGroupComponent = __decorate([
1172
+ core.Component({
1173
+ selector: 'sky-vertical-tabset-group',
1174
+ template: "<div class=\"sky-vertical-tabset-group\">\n <div\n class=\"sky-vertical-tabset-group-header sky-padding-even-default\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-sub-open sky-emphasized': subMenuOpen(),\n 'sky-deemphasized': disabled,\n 'sky-vertical-tabset-disabled': disabled\n }\"\n (click)=\"toggleMenuOpen()\"\n (keyup.enter)=\"toggleMenuOpen()\"\n [tabIndex]=\"-1\"\n >\n {{ groupHeading }}\n <sky-chevron *skyThemeIf=\"'default'\"\n class=\"sky-vertical-tabset-group-header-chevron\"\n [direction]=\"open ? 'up' : 'down'\"\n [disabled]=\"disabled\"\n (directionChange)=\"toggleMenuOpen()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n >\n </sky-chevron>\n <ng-container *skyThemeIf=\"'modern'\">\n <button *ngIf=\"!open\"\n class=\"sky-btn sky-btn-icon-borderless sky-vertical-tabset-group-header-chevron\"\n type=\"button\"\n >\n <sky-icon\n icon=\"chevron-right\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button *ngIf=\"open\"\n class=\"sky-btn sky-btn-icon-borderless sky-vertical-tabset-group-header-chevron\"\n type=\"button\"\n >\n <sky-icon\n icon=\"chevron-down\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n </ng-container>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n *ngIf=\"open\"\n [@tabSlide]\n >\n <ng-content></ng-content>\n </div>\n</div>\n",
1175
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
1176
+ animations: [
1177
+ animations.trigger('tabSlide', [
1178
+ animations.transition(':enter', [
1179
+ animations.style({
1180
+ height: '0',
1181
+ visibility: 'hidden'
1182
+ }),
1183
+ animations.animate('150ms ease-in', animations.style({
1184
+ height: '*',
1185
+ visibility: 'visible'
1186
+ }))
1187
+ ]),
1188
+ animations.transition(':leave', [
1189
+ animations.style({
1190
+ height: '*',
1191
+ visibility: 'visible'
1192
+ }),
1193
+ animations.animate('150ms ease-in', animations.style({
1194
+ height: '0',
1195
+ visibility: 'hidden'
1196
+ }))
1197
+ ])
1198
+ ])
1199
+ ],
1200
+ styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header{cursor:pointer;display:flex;justify-content:space-between}.sky-vertical-tabset-group-header:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-header-chevron>button{font-size:14px!important}.sky-vertical-tabset-disabled{cursor:not-allowed;pointer-events:none;font-style:normal}.sky-theme-modern .sky-vertical-tabset-group,:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none}.sky-theme-modern .sky-vertical-tabset-group-content,:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:25px}.sky-theme-modern .sky-vertical-tabset-group-header,:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-header-chevron,:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header-chevron{position:absolute;top:6px;right:5px}"]
1201
+ })
1202
+ ], SkyVerticalTabsetGroupComponent);
1203
+ return SkyVerticalTabsetGroupComponent;
1204
+ }());
1205
+
1206
+ var SkyVerticalTabsetModule = /** @class */ (function () {
1207
+ function SkyVerticalTabsetModule() {
1208
+ }
1209
+ SkyVerticalTabsetModule = __decorate([
1210
+ core.NgModule({
1211
+ declarations: [
1212
+ SkyVerticalTabsetComponent,
1213
+ SkyVerticalTabsetGroupComponent,
1214
+ SkyVerticalTabComponent
1215
+ ],
1216
+ imports: [
1217
+ common.CommonModule,
1218
+ animations$1.BrowserAnimationsModule,
1219
+ indicators.SkyChevronModule,
1220
+ indicators.SkyIconModule,
1221
+ core$1.SkyMediaQueryModule,
1222
+ indicators.SkyStatusIndicatorModule,
1223
+ SkyTabsResourcesModule,
1224
+ theme.SkyThemeModule
1225
+ ],
1226
+ providers: [
1227
+ SkyVerticalTabsetAdapterService
1228
+ ],
1229
+ exports: [
1230
+ SkyVerticalTabsetComponent,
1231
+ SkyVerticalTabsetGroupComponent,
1232
+ SkyVerticalTabComponent
1233
+ ]
1234
+ })
1235
+ ], SkyVerticalTabsetModule);
1236
+ return SkyVerticalTabsetModule;
1237
+ }());
1238
+
1239
+ var SkySectionedFormModule = /** @class */ (function () {
1240
+ function SkySectionedFormModule() {
1241
+ }
1242
+ SkySectionedFormModule = __decorate([
1243
+ core.NgModule({
1244
+ declarations: [
1245
+ SkySectionedFormComponent,
1246
+ SkySectionedFormSectionComponent
1247
+ ],
1248
+ imports: [
1249
+ common.CommonModule,
1250
+ forms.SkyCheckboxModule,
1251
+ SkyVerticalTabsetModule
1252
+ ],
1253
+ exports: [
1254
+ SkySectionedFormComponent,
1255
+ SkySectionedFormSectionComponent
1256
+ ]
1257
+ })
1258
+ ], SkySectionedFormModule);
1259
+ return SkySectionedFormModule;
1260
+ }());
1261
+
1262
+ /**
1263
+ * @internal
1264
+ */
1265
+ var SkyTabButtonComponent = /** @class */ (function () {
1266
+ function SkyTabButtonComponent() {
1267
+ this.buttonClick = new core.EventEmitter();
1268
+ this.closeClick = new core.EventEmitter();
1269
+ }
1270
+ SkyTabButtonComponent.prototype.onButtonClick = function (event) {
1271
+ if (!this.disabled) {
1272
+ this.buttonClick.emit();
1273
+ event.preventDefault();
1274
+ }
1275
+ };
1276
+ SkyTabButtonComponent.prototype.onButtonEnterKeyDown = function (event) {
1277
+ this.onButtonClick(event);
1278
+ };
1279
+ SkyTabButtonComponent.prototype.onCloseClick = function (event) {
1280
+ this.closeClick.emit();
1281
+ // Prevent the click event from bubbling up to the anchor tag;
1282
+ // otherwise it will trigger a page refresh.
1283
+ event.stopPropagation();
1284
+ event.preventDefault();
1285
+ };
1286
+ __decorate([
1287
+ core.Input()
1288
+ ], SkyTabButtonComponent.prototype, "active", void 0);
1289
+ __decorate([
1290
+ core.Input()
1291
+ ], SkyTabButtonComponent.prototype, "ariaControls", void 0);
1292
+ __decorate([
1293
+ core.Input()
1294
+ ], SkyTabButtonComponent.prototype, "buttonHref", void 0);
1295
+ __decorate([
1296
+ core.Input()
1297
+ ], SkyTabButtonComponent.prototype, "buttonId", void 0);
1298
+ __decorate([
1299
+ core.Input()
1300
+ ], SkyTabButtonComponent.prototype, "buttonText", void 0);
1301
+ __decorate([
1302
+ core.Input()
1303
+ ], SkyTabButtonComponent.prototype, "buttonTextCount", void 0);
1304
+ __decorate([
1305
+ core.Input()
1306
+ ], SkyTabButtonComponent.prototype, "closeable", void 0);
1307
+ __decorate([
1308
+ core.Input()
1309
+ ], SkyTabButtonComponent.prototype, "disabled", void 0);
1310
+ __decorate([
1311
+ core.Input()
1312
+ ], SkyTabButtonComponent.prototype, "tabStyle", void 0);
1313
+ __decorate([
1314
+ core.Output()
1315
+ ], SkyTabButtonComponent.prototype, "buttonClick", void 0);
1316
+ __decorate([
1317
+ core.Output()
1318
+ ], SkyTabButtonComponent.prototype, "closeClick", void 0);
1319
+ SkyTabButtonComponent = __decorate([
1320
+ core.Component({
1321
+ selector: 'sky-tab-button',
1322
+ template: "<div\n class=\"sky-btn-tab-wrapper\"\n [ngClass]=\"{\n 'sky-btn-tab-wrapper-selected': active,\n 'sky-btn-tab-wrapper-disabled': disabled\n }\"\n>\n <a\n class=\"sky-btn-tab\"\n role=\"tab\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-selected]=\"active\"\n [attr.href]=\"buttonHref\"\n [id]=\"buttonId\"\n [ngClass]=\"{\n 'sky-btn-tab-wizard': tabStyle === 'wizard',\n 'sky-btn-tab-selected': active,\n 'sky-btn-tab-disabled': disabled,\n 'sky-tab-btn-closeable': closeable\n }\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n (click)=\"onButtonClick($event)\"\n (keydown.enter)=\"onButtonEnterKeyDown($event)\"\n >\n <span\n class=\"sky-tab-heading\"\n >\n {{ buttonText }}\n <span *ngIf=\"buttonTextCount !== undefined\"\n class=\"sky-tab-header-count\"\n >\n {{ buttonTextCount }}\n </span>\n </span>\n </a>\n\n <button *ngIf=\"closeable\"\n class=\"sky-btn-tab-close\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_close' | skyLibResources:buttonText\"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'sky-btn-tab-close-disabled': disabled\n }\"\n (click)=\"onCloseClick($event)\"\n >\n <sky-icon\n icon=\"remove\"\n ></sky-icon>\n </button>\n</div>\n",
1323
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
1324
+ encapsulation: core.ViewEncapsulation.None,
1325
+ styles: [".sky-btn-tab-wrapper{display:inline-block;position:relative;margin-right:5px}.sky-btn-tab-wrapper .sky-btn-tab-close{position:absolute;top:10px;right:10px;color:#686c73}.sky-btn-tab-wrapper .sky-btn-tab-close:hover{color:#212327;transition:color 150ms}.sky-btn-tab-wrapper.sky-btn-tab-wrapper-selected:not(.sky-btn-tab-wrapper-disabled) .sky-btn-tab-close{color:#fff}.sky-tab-btn-closeable{padding-right:43px}.sky-theme-modern .sky-btn-tab-wrapper,:host-context(.sky-theme-modern) .sky-btn-tab-wrapper{margin-right:10px}.sky-theme-modern .sky-btn-tab-wrapper .sky-btn-tab-close,:host-context(.sky-theme-modern) .sky-btn-tab-wrapper .sky-btn-tab-close{top:12px;right:10px}.sky-theme-modern .sky-btn-tab-wrapper.sky-btn-tab-wrapper-selected:not(.sky-btn-tab-wrapper-disabled) .sky-btn-tab-close,:host-context(.sky-theme-modern) .sky-btn-tab-wrapper.sky-btn-tab-wrapper-selected:not(.sky-btn-tab-wrapper-disabled) .sky-btn-tab-close{color:#686c73}.sky-theme-modern .sky-tab-btn-closeable,:host-context(.sky-theme-modern) .sky-tab-btn-closeable{padding-right:44px}.sky-theme-modern.sky-theme-mode-dark .sky-btn-tab-wrapper .sky-btn-tab-close,:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-btn-tab-wrapper .sky-btn-tab-close{color:#eeeeef}.sky-theme-modern.sky-theme-mode-dark .sky-btn-tab-wrapper.sky-btn-tab-wrapper-selected:not(.sky-btn-tab-wrapper-disabled) .sky-btn-tab-close,:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-btn-tab-wrapper.sky-btn-tab-wrapper-selected:not(.sky-btn-tab-wrapper-disabled) .sky-btn-tab-close{color:#eeeeef}"]
1326
+ })
1327
+ ], SkyTabButtonComponent);
1328
+ return SkyTabButtonComponent;
1329
+ }());
1330
+
1331
+ /**
1332
+ * @internal
1333
+ */
1334
+ var SkyTabsetPermalinkService = /** @class */ (function () {
1335
+ function SkyTabsetPermalinkService(activatedRoute, location, router) {
1336
+ this.activatedRoute = activatedRoute;
1337
+ this.location = location;
1338
+ this.router = router;
1339
+ this._popStateChange = new rxjs.Subject();
1340
+ }
1341
+ Object.defineProperty(SkyTabsetPermalinkService.prototype, "popStateChange", {
1342
+ get: function () {
1343
+ return this._popStateChange.asObservable();
1344
+ },
1345
+ enumerable: true,
1346
+ configurable: true
1347
+ });
1348
+ SkyTabsetPermalinkService.prototype.ngOnDestroy = function () {
1349
+ if (this.subscription) {
1350
+ this.subscription.unsubscribe();
1351
+ }
1352
+ };
1353
+ SkyTabsetPermalinkService.prototype.init = function () {
1354
+ var _this = this;
1355
+ this.subscription = this.location.subscribe(function () {
1356
+ _this._popStateChange.next();
1357
+ });
1358
+ };
1359
+ /**
1360
+ * Returns the value of a URL query param.
1361
+ */
1362
+ SkyTabsetPermalinkService.prototype.getParam = function (name) {
1363
+ return this.getParams()[name];
1364
+ };
1365
+ /**
1366
+ * Sets the value of a URL query param.
1367
+ */
1368
+ SkyTabsetPermalinkService.prototype.setParam = function (name, value) {
1369
+ var params = this.getParams();
1370
+ if (value === null) {
1371
+ delete params[name];
1372
+ }
1373
+ else {
1374
+ params[name] = value;
1375
+ }
1376
+ // Update the URL without triggering a navigation state change.
1377
+ // See: https://stackoverflow.com/a/46486677
1378
+ var url = this.router.createUrlTree(['.'], {
1379
+ relativeTo: this.activatedRoute,
1380
+ queryParams: params,
1381
+ queryParamsHandling: 'merge'
1382
+ }).toString();
1383
+ // Abort redirect if the current URL is equal to the new URL.
1384
+ if (this.location.isCurrentPathEqualTo(url)) {
1385
+ return;
1386
+ }
1387
+ this.location.go(url);
1388
+ };
1389
+ /**
1390
+ * Removes the provided query param from the URL.
1391
+ */
1392
+ SkyTabsetPermalinkService.prototype.clearParam = function (name) {
1393
+ /*tslint:disable-next-line:no-null-keyword*/
1394
+ this.setParam(name, null);
1395
+ };
1396
+ /**
1397
+ * Returns a relative URL that includes the provided query parameter. The value is inteded to be
1398
+ * used by an HTML anchor element.
1399
+ */
1400
+ SkyTabsetPermalinkService.prototype.getParamHref = function (name, value) {
1401
+ if (!name) {
1402
+ /*tslint:disable-next-line:no-null-keyword*/
1403
+ return null;
1404
+ }
1405
+ var params = this.getParams();
1406
+ params[name] = value;
1407
+ var baseUrl = this.location.path().split('?')[0];
1408
+ var paramString = Object.keys(params).map(function (k) { return k + "=" + params[k]; }).join('&');
1409
+ return this.location.prepareExternalUrl(baseUrl + "?" + paramString);
1410
+ };
1411
+ /**
1412
+ * Converts the provided string into a value that can be safely used in a URL.
1413
+ */
1414
+ SkyTabsetPermalinkService.prototype.urlify = function (value) {
1415
+ if (!value) {
1416
+ return '';
1417
+ }
1418
+ var sanitized = value.toLowerCase()
1419
+ // Remove special characters.
1420
+ .replace(/[\_\~\`\@\!\#\$\%\^\&\*\(\)\[\]\{\}\;\:\'\/\\\<\>\,\.\?\=\+\|"]/g, '')
1421
+ // Replace space characters with a dash.
1422
+ .replace(/\s/g, '-')
1423
+ // Remove any double-dashes.
1424
+ .replace(/--/g, '-');
1425
+ return sanitized;
1426
+ };
1427
+ /**
1428
+ * Returns all query params that exist in the current URL.
1429
+ */
1430
+ SkyTabsetPermalinkService.prototype.getParams = function () {
1431
+ var params = {};
1432
+ var path = this.location.path();
1433
+ if (path.indexOf('?') === -1) {
1434
+ return params;
1435
+ }
1436
+ var existingParamPairs = path.split('?')[1].split('&');
1437
+ existingParamPairs.forEach(function (pair) {
1438
+ var fragments = pair.split('=');
1439
+ params[fragments[0]] = decodeURIComponent(fragments[1]);
1440
+ });
1441
+ return params;
1442
+ };
1443
+ SkyTabsetPermalinkService.ctorParameters = function () { return [
1444
+ { type: router.ActivatedRoute },
1445
+ { type: common.Location },
1446
+ { type: router.Router }
1447
+ ]; };
1448
+ SkyTabsetPermalinkService = __decorate([
1449
+ core.Injectable()
1450
+ ], SkyTabsetPermalinkService);
1451
+ return SkyTabsetPermalinkService;
1452
+ }());
1453
+
1454
+ /**
1455
+ * @internal
1456
+ */
1457
+ var SkyTabsetService = /** @class */ (function () {
1458
+ function SkyTabsetService() {
1459
+ this.currentActiveTabIndex = 0;
1460
+ this._activeTabIndex = new rxjs.BehaviorSubject(0);
1461
+ this._activeTabUnregistered = new rxjs.Subject();
1462
+ this.tabs = [];
1463
+ this.tabCounter = 0;
1464
+ }
1465
+ Object.defineProperty(SkyTabsetService.prototype, "activeTabUnregistered", {
1466
+ get: function () {
1467
+ return this._activeTabUnregistered.asObservable();
1468
+ },
1469
+ enumerable: true,
1470
+ configurable: true
1471
+ });
1472
+ Object.defineProperty(SkyTabsetService.prototype, "activeTabIndex", {
1473
+ get: function () {
1474
+ return this._activeTabIndex.asObservable();
1475
+ },
1476
+ enumerable: true,
1477
+ configurable: true
1478
+ });
1479
+ /**
1480
+ * Sets the active tab by its unique `tabIndex` property.
1481
+ */
1482
+ SkyTabsetService.prototype.setActiveTabIndex = function (value, config) {
1483
+ if (config === void 0) { config = {
1484
+ emitChange: true
1485
+ }; }
1486
+ if (value !== undefined &&
1487
+ !this.tabIndexesEqual(value, this.currentActiveTabIndex)) {
1488
+ this.currentActiveTabIndex = value;
1489
+ if (config.emitChange) {
1490
+ this._activeTabIndex.next(value);
1491
+ }
1492
+ }
1493
+ };
1494
+ /**
1495
+ * Registers a tab component.
1496
+ */
1497
+ SkyTabsetService.prototype.registerTab = function (tabIndex) {
1498
+ if (tabIndex === undefined) {
1499
+ tabIndex = this.tabCounter;
1500
+ this.tabCounter++;
1501
+ }
1502
+ this.tabs.push({ tabIndex: tabIndex });
1503
+ return tabIndex;
1504
+ };
1505
+ SkyTabsetService.prototype.updateTabIndex = function (currentTabIndex, newTabIndex) {
1506
+ var _this = this;
1507
+ var found = this.tabs.find(function (tab) { return _this.tabIndexesEqual(tab.tabIndex, currentTabIndex); });
1508
+ found.tabIndex = newTabIndex;
1509
+ };
1510
+ /**
1511
+ * Unregisters a tab component.
1512
+ */
1513
+ SkyTabsetService.prototype.unregisterTab = function (tabIndex) {
1514
+ var _this = this;
1515
+ var index = this.tabs.findIndex(function (tab) { return _this.tabIndexesEqual(tab.tabIndex, tabIndex); });
1516
+ // Notify the tabset component when an active tab is unregistered.
1517
+ if (this.isTabIndexActive(this.tabs[index].tabIndex)) {
1518
+ this._activeTabUnregistered.next({
1519
+ arrayIndex: index
1520
+ });
1521
+ }
1522
+ this.tabs.splice(index, 1);
1523
+ };
1524
+ /**
1525
+ * Unregisters all tab components at once.
1526
+ */
1527
+ SkyTabsetService.prototype.unregisterAll = function () {
1528
+ this.tabs = [];
1529
+ };
1530
+ /**
1531
+ * Compares two tab indexes and returns `true` if they are equal.
1532
+ */
1533
+ SkyTabsetService.prototype.tabIndexesEqual = function (tabIndex1, tabIndex2) {
1534
+ return (tabIndex1 === tabIndex2 ||
1535
+ +tabIndex1 === +tabIndex2);
1536
+ };
1537
+ /**
1538
+ * Verifies if a provided tab index is registered.
1539
+ */
1540
+ SkyTabsetService.prototype.isValidTabIndex = function (tabIndex) {
1541
+ var _this = this;
1542
+ return this.tabs.some(function (tab) { return _this.tabIndexesEqual(tab.tabIndex, tabIndex); });
1543
+ };
1544
+ /**
1545
+ * Activates the first registered tab.
1546
+ */
1547
+ SkyTabsetService.prototype.activateFirstTab = function () {
1548
+ var firstTabIndex = this.tabs[0] && this.tabs[0].tabIndex;
1549
+ if (firstTabIndex !== undefined) {
1550
+ this.setActiveTabIndex(firstTabIndex);
1551
+ return firstTabIndex;
1552
+ }
1553
+ };
1554
+ /**
1555
+ * Activates the next registered tab, or the previous one based on a provided array index.
1556
+ */
1557
+ SkyTabsetService.prototype.activateNearestTab = function (arrayIndex) {
1558
+ var newActiveTab = this.tabs[arrayIndex] || this.tabs[arrayIndex - 1];
1559
+ if (newActiveTab) {
1560
+ this.currentActiveTabIndex = newActiveTab.tabIndex;
1561
+ }
1562
+ };
1563
+ SkyTabsetService.prototype.isTabIndexActive = function (tabIndex) {
1564
+ return this.tabIndexesEqual(tabIndex, this.currentActiveTabIndex);
1565
+ };
1566
+ SkyTabsetService = __decorate([
1567
+ core.Injectable()
1568
+ ], SkyTabsetService);
1569
+ return SkyTabsetService;
1570
+ }());
1571
+
1572
+ var nextId$1 = 0;
1573
+ var SkyTabComponent = /** @class */ (function () {
1574
+ function SkyTabComponent(changeDetector, permalinkService, tabsetService) {
1575
+ this.changeDetector = changeDetector;
1576
+ this.permalinkService = permalinkService;
1577
+ this.tabsetService = tabsetService;
1578
+ /**
1579
+ * Fires when users click the button to close the tab.
1580
+ * The close button is added to the tab when you specify a listener for this event.
1581
+ */
1582
+ this.close = new core.EventEmitter();
1583
+ this.showContent = false;
1584
+ this._activeChange = new rxjs.BehaviorSubject(undefined);
1585
+ this._stateChange = new rxjs.BehaviorSubject(undefined);
1586
+ this._tabIndexChange = new rxjs.BehaviorSubject(undefined);
1587
+ var id = nextId$1++;
1588
+ this.tabPanelId = "sky-tab-" + id;
1589
+ this.tabButtonId = this.tabPanelId + "-nav-btn";
1590
+ }
1591
+ Object.defineProperty(SkyTabComponent.prototype, "active", {
1592
+ get: function () {
1593
+ return this._active || false;
1594
+ },
1595
+ /**
1596
+ * Indicates whether the tab is active when the tabset loads. After initialization, the `active`
1597
+ * property on the tabset component should be used to set the active tab.
1598
+ * @default false
1599
+ */
1600
+ set: function (value) {
1601
+ if (value !== undefined &&
1602
+ value !== this._active) {
1603
+ this._active = value;
1604
+ this._activeChange.next();
1605
+ }
1606
+ },
1607
+ enumerable: true,
1608
+ configurable: true
1609
+ });
1610
+ Object.defineProperty(SkyTabComponent.prototype, "activeChange", {
1611
+ get: function () {
1612
+ return this._activeChange.asObservable();
1613
+ },
1614
+ enumerable: true,
1615
+ configurable: true
1616
+ });
1617
+ Object.defineProperty(SkyTabComponent.prototype, "permalinkValue", {
1618
+ get: function () {
1619
+ return this._permalinkValue || this.permalinkService.urlify(this.tabHeading);
1620
+ },
1621
+ /**
1622
+ * Specifies a custom query parameter value for the tab.
1623
+ * This works in conjunction with the tabset's `permalinkId` to distinguish
1624
+ * the tab's unique state in the URL by generating a query parameter that is
1625
+ * written as `?<queryParam>-active-tab=<sanitized-tab-heading`.
1626
+ * By default, the query parameter's value is parsed automatically from the tab's heading text.
1627
+ */
1628
+ set: function (value) {
1629
+ this._permalinkValue = this.permalinkService.urlify(value);
1630
+ },
1631
+ enumerable: true,
1632
+ configurable: true
1633
+ });
1634
+ Object.defineProperty(SkyTabComponent.prototype, "tabIndex", {
1635
+ get: function () {
1636
+ return this._tabIndex;
1637
+ },
1638
+ /**
1639
+ * Specifies a unique identifier for the tab.
1640
+ * If not defined, the identifier is set to the position of the tab on load, starting with `0`.
1641
+ */
1642
+ set: function (value) {
1643
+ if (value !== this._tabIndex &&
1644
+ value !== undefined &&
1645
+ this._tabIndex !== undefined) {
1646
+ this.tabsetService.updateTabIndex(this._tabIndex, value);
1647
+ this._tabIndexChange.next(value);
1648
+ }
1649
+ this._tabIndex = value;
1650
+ },
1651
+ enumerable: true,
1652
+ configurable: true
1653
+ });
1654
+ Object.defineProperty(SkyTabComponent.prototype, "closeable", {
1655
+ get: function () {
1656
+ return this.close.observers.length > 0;
1657
+ },
1658
+ enumerable: true,
1659
+ configurable: true
1660
+ });
1661
+ Object.defineProperty(SkyTabComponent.prototype, "stateChange", {
1662
+ /**
1663
+ * Alerts the tabset component when this component has changes that need to be reflected in the UI.
1664
+ */
1665
+ get: function () {
1666
+ return this._stateChange.asObservable();
1667
+ },
1668
+ enumerable: true,
1669
+ configurable: true
1670
+ });
1671
+ Object.defineProperty(SkyTabComponent.prototype, "tabIndexChange", {
1672
+ get: function () {
1673
+ return this._tabIndexChange.asObservable();
1674
+ },
1675
+ enumerable: true,
1676
+ configurable: true
1677
+ });
1678
+ SkyTabComponent.prototype.ngOnChanges = function (changes) {
1679
+ if (changes.disabled && !changes.disabled.firstChange ||
1680
+ changes.tabHeading && !changes.tabHeading.firstChange ||
1681
+ changes.tabHeaderCount && !changes.tabHeaderCount.firstChange ||
1682
+ changes.permalinkValue && !changes.permalinkValue.firstChange) {
1683
+ this._stateChange.next();
1684
+ }
1685
+ };
1686
+ SkyTabComponent.prototype.ngOnDestroy = function () {
1687
+ this._stateChange.complete();
1688
+ this.tabsetService.unregisterTab(this.tabIndex);
1689
+ };
1690
+ SkyTabComponent.prototype.init = function () {
1691
+ this._tabIndex = this.tabsetService.registerTab(this.tabIndex);
1692
+ };
1693
+ SkyTabComponent.prototype.activate = function () {
1694
+ this._active = true;
1695
+ this.showContent = true;
1696
+ this.changeDetector.markForCheck();
1697
+ };
1698
+ SkyTabComponent.prototype.deactivate = function () {
1699
+ this._active = false;
1700
+ this.showContent = false;
1701
+ this.changeDetector.markForCheck();
1702
+ };
1703
+ SkyTabComponent.ctorParameters = function () { return [
1704
+ { type: core.ChangeDetectorRef },
1705
+ { type: SkyTabsetPermalinkService },
1706
+ { type: SkyTabsetService }
1707
+ ]; };
1708
+ __decorate([
1709
+ core.Input()
1710
+ ], SkyTabComponent.prototype, "active", null);
1711
+ __decorate([
1712
+ core.Input()
1713
+ ], SkyTabComponent.prototype, "disabled", void 0);
1714
+ __decorate([
1715
+ core.Input()
1716
+ ], SkyTabComponent.prototype, "permalinkValue", null);
1717
+ __decorate([
1718
+ core.Input()
1719
+ ], SkyTabComponent.prototype, "tabHeaderCount", void 0);
1720
+ __decorate([
1721
+ core.Input()
1722
+ ], SkyTabComponent.prototype, "tabHeading", void 0);
1723
+ __decorate([
1724
+ core.Input()
1725
+ ], SkyTabComponent.prototype, "tabIndex", null);
1726
+ __decorate([
1727
+ core.Output()
1728
+ ], SkyTabComponent.prototype, "close", void 0);
1729
+ SkyTabComponent = __decorate([
1730
+ core.Component({
1731
+ selector: 'sky-tab',
1732
+ template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content></ng-content>\n</div>\n",
1733
+ changeDetection: core.ChangeDetectionStrategy.OnPush
1734
+ })
1735
+ ], SkyTabComponent);
1736
+ return SkyTabComponent;
1737
+ }());
1738
+
1739
+ var buttonTypeNext = 'next';
1740
+ var buttonTypePrevious = 'previous';
1741
+ /**
1742
+ * @internal
1743
+ */
1744
+ var SkyTabsetNavButtonComponent = /** @class */ (function () {
1745
+ function SkyTabsetNavButtonComponent(resourceService, changeDetector) {
1746
+ this.resourceService = resourceService;
1747
+ this.changeDetector = changeDetector;
1748
+ }
1749
+ Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "buttonText", {
1750
+ get: function () {
1751
+ if (this._buttonText) {
1752
+ return this._buttonText;
1753
+ }
1754
+ switch (this.buttonType) {
1755
+ case buttonTypePrevious:
1756
+ return this.previousButtonText;
1757
+ case buttonTypeNext:
1758
+ return this.nextButtonText;
1759
+ /* istanbul ignore next */
1760
+ default:
1761
+ return '';
1762
+ }
1763
+ },
1764
+ set: function (value) {
1765
+ this._buttonText = value;
1766
+ },
1767
+ enumerable: true,
1768
+ configurable: true
1769
+ });
1770
+ Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "disabled", {
1771
+ get: function () {
1772
+ var tabToSelect;
1773
+ switch (this.buttonType) {
1774
+ case buttonTypePrevious:
1775
+ tabToSelect = this.previousTab;
1776
+ break;
1777
+ case buttonTypeNext:
1778
+ tabToSelect = this.nextTab;
1779
+ break;
1780
+ /* istanbul ignore next */
1781
+ default:
1782
+ break;
1783
+ }
1784
+ return !tabToSelect || tabToSelect.disabled;
1785
+ },
1786
+ enumerable: true,
1787
+ configurable: true
1788
+ });
1789
+ Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "selectedTab", {
1790
+ get: function () {
1791
+ var _this = this;
1792
+ var selectedTab;
1793
+ if (this.tabset && this.tabset.tabs) {
1794
+ selectedTab = this.tabset.tabs.find(function (tab) { return tab.tabIndex === _this.tabset.lastActiveTabIndex; });
1795
+ }
1796
+ return selectedTab;
1797
+ },
1798
+ enumerable: true,
1799
+ configurable: true
1800
+ });
1801
+ Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "nextTab", {
1802
+ get: function () {
1803
+ var selectedTab = this.selectedTab;
1804
+ if (selectedTab) {
1805
+ var tabs = this.tabset.tabs.toArray();
1806
+ return tabs[tabs.indexOf(selectedTab) + 1];
1807
+ }
1808
+ return undefined;
1809
+ },
1810
+ enumerable: true,
1811
+ configurable: true
1812
+ });
1813
+ Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "previousTab", {
1814
+ get: function () {
1815
+ var selectedTab = this.selectedTab;
1816
+ if (selectedTab) {
1817
+ var tabs = this.tabset.tabs.toArray();
1818
+ return tabs[tabs.indexOf(selectedTab) - 1];
1819
+ }
1820
+ return undefined;
1821
+ },
1822
+ enumerable: true,
1823
+ configurable: true
1824
+ });
1825
+ SkyTabsetNavButtonComponent.prototype.ngAfterViewInit = function () {
1826
+ var _this = this;
1827
+ rxjs.forkJoin([
1828
+ this.resourceService.getString('skyux_tabs_navigator_previous'),
1829
+ this.resourceService.getString('skyux_tabs_navigator_next')
1830
+ ])
1831
+ .pipe(operators.take(1))
1832
+ .subscribe(function (resources) {
1833
+ _this.previousButtonText = resources[0];
1834
+ _this.nextButtonText = resources[1];
1835
+ _this.changeDetector.detectChanges();
1836
+ });
1837
+ };
1838
+ SkyTabsetNavButtonComponent.prototype.buttonClick = function () {
1839
+ var tabToSelect;
1840
+ switch (this.buttonType) {
1841
+ case buttonTypePrevious:
1842
+ tabToSelect = this.previousTab;
1843
+ break;
1844
+ case buttonTypeNext:
1845
+ tabToSelect = this.nextTab;
1846
+ break;
1847
+ /* istanbul ignore next */
1848
+ default:
1849
+ break;
1850
+ }
1851
+ /* istanbul ignore else */
1852
+ if (tabToSelect && !tabToSelect.disabled) {
1853
+ this.tabset.active = tabToSelect.tabIndex;
1854
+ }
1855
+ };
1856
+ SkyTabsetNavButtonComponent.ctorParameters = function () { return [
1857
+ { type: i18n.SkyLibResourcesService },
1858
+ { type: core.ChangeDetectorRef }
1859
+ ]; };
1860
+ __decorate([
1861
+ core.Input()
1862
+ ], SkyTabsetNavButtonComponent.prototype, "tabset", void 0);
1863
+ __decorate([
1864
+ core.Input()
1865
+ ], SkyTabsetNavButtonComponent.prototype, "buttonType", void 0);
1866
+ __decorate([
1867
+ core.Input()
1868
+ ], SkyTabsetNavButtonComponent.prototype, "buttonText", null);
1869
+ SkyTabsetNavButtonComponent = __decorate([
1870
+ core.Component({
1871
+ selector: 'sky-tabset-nav-button',
1872
+ template: "<button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick()\"\n>\n {{ buttonText }}\n</button>\n"
1873
+ })
1874
+ ], SkyTabsetNavButtonComponent);
1875
+ return SkyTabsetNavButtonComponent;
1876
+ }());
1877
+
1878
+ /**
1879
+ * @internal
1880
+ */
1881
+ var SkyTabsetAdapterService = /** @class */ (function () {
1882
+ function SkyTabsetAdapterService() {
1883
+ this._overflowChange = new rxjs.BehaviorSubject(false);
1884
+ }
1885
+ Object.defineProperty(SkyTabsetAdapterService.prototype, "overflowChange", {
1886
+ get: function () {
1887
+ return this._overflowChange.asObservable();
1888
+ },
1889
+ enumerable: true,
1890
+ configurable: true
1891
+ });
1892
+ SkyTabsetAdapterService.prototype.registerTabset = function (tabsetRef) {
1893
+ this.tabsetRef = tabsetRef;
1894
+ this.tabsOffsetLeft = this.getTabsOffsetLeft(tabsetRef.nativeElement);
1895
+ };
1896
+ /**
1897
+ * Detects if the tab buttons are wider than the tabset container.
1898
+ */
1899
+ SkyTabsetAdapterService.prototype.detectOverflow = function () {
1900
+ var nativeElement = this.tabsetRef.nativeElement;
1901
+ var tabsetRect = nativeElement
1902
+ .querySelector('.sky-tabset')
1903
+ .getBoundingClientRect();
1904
+ var tabButtonsRect = nativeElement
1905
+ .querySelector('.sky-tabset-tabs')
1906
+ .getBoundingClientRect();
1907
+ var tabExtraButtonsRect = nativeElement
1908
+ .querySelector('.sky-tabset-btns')
1909
+ .getBoundingClientRect();
1910
+ var tabButtonsWidth = tabButtonsRect.width + tabExtraButtonsRect.width + this.tabsOffsetLeft;
1911
+ var newOverflow = (tabButtonsWidth > tabsetRect.width);
1912
+ if (this.currentOverflow !== newOverflow) {
1913
+ this.currentOverflow = newOverflow;
1914
+ this._overflowChange.next(this.currentOverflow);
1915
+ }
1916
+ };
1917
+ /**
1918
+ * Returns the number of pixels to the left of the first tab.
1919
+ */
1920
+ SkyTabsetAdapterService.prototype.getTabsOffsetLeft = function (tabsetEl) {
1921
+ var tabsetRect = tabsetEl.getBoundingClientRect();
1922
+ // The dropdown element is the first "tab" and always exists in the DOM, even when hidden.
1923
+ var firstTabRect = tabsetEl.querySelector('.sky-tabset-dropdown').getBoundingClientRect();
1924
+ return firstTabRect.left - tabsetRect.left;
1925
+ };
1926
+ SkyTabsetAdapterService = __decorate([
1927
+ core.Injectable()
1928
+ ], SkyTabsetAdapterService);
1929
+ return SkyTabsetAdapterService;
1930
+ }());
1931
+
1932
+ var SkyTabsetComponent = /** @class */ (function () {
1933
+ function SkyTabsetComponent(changeDetector, elementRef, adapterService, permalinkService, tabsetService) {
1934
+ this.changeDetector = changeDetector;
1935
+ this.elementRef = elementRef;
1936
+ this.adapterService = adapterService;
1937
+ this.permalinkService = permalinkService;
1938
+ this.tabsetService = tabsetService;
1939
+ /**
1940
+ * Fires when the active tab changes. This event emits the index of the active tab.
1941
+ */
1942
+ this.activeChange = new core.EventEmitter();
1943
+ /**
1944
+ * Fires when users click the button to add a new tab.
1945
+ * The new tab button is added to the tab area when you specify a listener for this event.
1946
+ */
1947
+ this.newTab = new core.EventEmitter();
1948
+ /**
1949
+ * Fires when users click the button to open a tab.
1950
+ * The open tab button is added to the tab area when you specify a listener for this event.
1951
+ */
1952
+ this.openTab = new core.EventEmitter();
1953
+ /**
1954
+ * Fires when any tab's `tabIndex` value changes.
1955
+ */
1956
+ this.tabIndexesChange = new core.EventEmitter();
1957
+ this.tabButtons = [];
1958
+ this.ngUnsubscribe = new rxjs.Subject();
1959
+ this.tabComponentsStateChangeUnsubscribe = new rxjs.Subject();
1960
+ }
1961
+ Object.defineProperty(SkyTabsetComponent.prototype, "active", {
1962
+ get: function () {
1963
+ return this._active;
1964
+ },
1965
+ /**
1966
+ * Activates a tab by its `tabIndex` property.
1967
+ */
1968
+ set: function (value) {
1969
+ var _this = this;
1970
+ if (value === undefined ||
1971
+ this.tabsetService.tabIndexesEqual(value, this._active)) {
1972
+ return;
1973
+ }
1974
+ this._active = value;
1975
+ if (this.tabs) {
1976
+ this.tabsetService.setActiveTabIndex(value);
1977
+ }
1978
+ else {
1979
+ // On init, wait for children tabs to render before broadcasting the active tab index.
1980
+ setTimeout(function () {
1981
+ if (_this.tabsetService.isValidTabIndex(value)) {
1982
+ // On init, yield to the permalink ID, if it exists.
1983
+ if (_this.getActiveTabIndexByPermalinkId() === undefined) {
1984
+ _this.tabsetService.setActiveTabIndex(value);
1985
+ }
1986
+ }
1987
+ else {
1988
+ // Activate the first tab if the new tab index is invalid.
1989
+ _this._active = _this.tabsetService.activateFirstTab();
1990
+ }
1991
+ });
1992
+ }
1993
+ },
1994
+ enumerable: true,
1995
+ configurable: true
1996
+ });
1997
+ Object.defineProperty(SkyTabsetComponent.prototype, "permalinkId", {
1998
+ get: function () {
1999
+ return this._permalinkId || '';
2000
+ },
2001
+ /**
2002
+ * Distinguishes a tabset's unique state in the URL by generating a query parameter
2003
+ * that is written as `?<queryParam>-active-tab=<sanitized-tab-heading>`.
2004
+ * The query parameter's value is parsed automatically from the selected tab's heading text,
2005
+ * but you can supply a custom query parameter value for each tab with its `permalinkValue`.
2006
+ */
2007
+ set: function (value) {
2008
+ if (!value) {
2009
+ return;
2010
+ }
2011
+ var sanitized = this.permalinkService.urlify(value);
2012
+ this._permalinkId = sanitized + "-active-tab";
2013
+ },
2014
+ enumerable: true,
2015
+ configurable: true
2016
+ });
2017
+ Object.defineProperty(SkyTabsetComponent.prototype, "tabStyle", {
2018
+ get: function () {
2019
+ return this._tabStyle || 'tabs';
2020
+ },
2021
+ /**
2022
+ * Specifies the behavior for a series of tabs.
2023
+ * @deprecated The property was designed to create wizards by setting tabStyle="wizard" on tabsets in modals,
2024
+ * but this wizard implementation was replaced by the
2025
+ * [progress indicator component](https://developer.blackbaud.com/skyux/components/progress-indicator).
2026
+ * @default 'tabs'
2027
+ */
2028
+ set: function (value) {
2029
+ /*istanbul ignore else*/
2030
+ if (value && value.toLowerCase() === 'wizard') {
2031
+ console.warn('The tabset wizard is deprecated. Please implement the new approach using ' +
2032
+ 'progress indicator as documented here: https://developer.blackbaud.com/skyux/components/wizard.');
2033
+ }
2034
+ this._tabStyle = value;
2035
+ },
2036
+ enumerable: true,
2037
+ configurable: true
2038
+ });
2039
+ Object.defineProperty(SkyTabsetComponent.prototype, "tabDisplayMode", {
2040
+ get: function () {
2041
+ return this._tabDisplayMode || 'tabs';
2042
+ },
2043
+ set: function (value) {
2044
+ this._tabDisplayMode = value;
2045
+ this.changeDetector.markForCheck();
2046
+ },
2047
+ enumerable: true,
2048
+ configurable: true
2049
+ });
2050
+ SkyTabsetComponent.prototype.ngAfterViewInit = function () {
2051
+ var _this = this;
2052
+ this.initTabComponents();
2053
+ this.listenTabComponentsStructuralChange();
2054
+ var initialTabIndex = this.getInitialTabIndex();
2055
+ this.tabsetService.setActiveTabIndex(initialTabIndex);
2056
+ this.listenTabButtonsOverflowChange();
2057
+ this.listenLocationPopStateChange();
2058
+ // If the currently active tab is getting unregistered, activate the next one.
2059
+ this.tabsetService.activeTabUnregistered
2060
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
2061
+ .subscribe(function (tab) {
2062
+ // Wait for the new tabs to render before activating.
2063
+ setTimeout(function () {
2064
+ _this.tabsetService.activateNearestTab(tab.arrayIndex);
2065
+ });
2066
+ });
2067
+ // Let the tabset render the initial active index before listening for changes.
2068
+ setTimeout(function () {
2069
+ _this.listenTabComponentsStateChange();
2070
+ _this.listenActiveIndexChange();
2071
+ _this.permalinkService.init();
2072
+ });
2073
+ };
2074
+ SkyTabsetComponent.prototype.ngOnDestroy = function () {
2075
+ this.ngUnsubscribe.next();
2076
+ this.ngUnsubscribe.complete();
2077
+ this.unsubscribeTabComponentsStateChange();
2078
+ this.permalinkService.clearParam(this.permalinkId);
2079
+ };
2080
+ SkyTabsetComponent.prototype.onWindowResize = function () {
2081
+ this.adapterService.detectOverflow();
2082
+ };
2083
+ SkyTabsetComponent.prototype.onTabCloseClick = function (tabButton) {
2084
+ var _this = this;
2085
+ var tabComponent = this.tabs.find(function (tab) {
2086
+ return _this.tabsetService.tabIndexesEqual(tab.tabIndex, tabButton.tabIndex);
2087
+ });
2088
+ tabComponent.close.emit();
2089
+ };
2090
+ SkyTabsetComponent.prototype.onTabButtonClick = function (tabButton) {
2091
+ this.tabsetService.setActiveTabIndex(tabButton.tabIndex);
2092
+ };
2093
+ SkyTabsetComponent.prototype.onNewTabClick = function () {
2094
+ this.newTab.emit();
2095
+ };
2096
+ SkyTabsetComponent.prototype.onOpenTabClick = function () {
2097
+ this.openTab.emit();
2098
+ };
2099
+ /**
2100
+ * Sets the initial active tab index based on the following criteria.
2101
+ * 1. Does the URL include a query param that reflects this tabset's active tab?
2102
+ * 2. Does one of the tab components have their `active` property set to `true`?
2103
+ * 3. Is the tabset component's `active` property set to a specific tab index?
2104
+ */
2105
+ SkyTabsetComponent.prototype.getInitialTabIndex = function () {
2106
+ var _a;
2107
+ var activeIndex = this.getActiveTabIndexByPermalinkId();
2108
+ if (activeIndex === undefined) {
2109
+ activeIndex = (_a = this.getActiveTabComponent()) === null || _a === void 0 ? void 0 : _a.tabIndex;
2110
+ if (activeIndex === undefined) {
2111
+ activeIndex = this.active;
2112
+ }
2113
+ }
2114
+ return activeIndex;
2115
+ };
2116
+ SkyTabsetComponent.prototype.listenActiveIndexChange = function () {
2117
+ var _this = this;
2118
+ this.tabsetService.activeTabIndex
2119
+ .pipe(operators.distinctUntilChanged(), operators.takeUntil(this.ngUnsubscribe))
2120
+ .subscribe(function (activeIndex) {
2121
+ _this.updateTabsetComponent(activeIndex);
2122
+ });
2123
+ };
2124
+ SkyTabsetComponent.prototype.listenTabComponentsStructuralChange = function () {
2125
+ var _this = this;
2126
+ this.tabs.changes
2127
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
2128
+ .subscribe(function () {
2129
+ _this.resetTabComponents();
2130
+ });
2131
+ };
2132
+ SkyTabsetComponent.prototype.listenTabComponentsStateChange = function () {
2133
+ var _this = this;
2134
+ rxjs.combineLatest(this.tabs.map(function (tab) { return tab.activeChange; }))
2135
+ .pipe(operators.takeUntil(rxjs.race(this.tabComponentsStateChangeUnsubscribe, this.ngUnsubscribe)))
2136
+ .subscribe(function () {
2137
+ // Wait for the tab components to render changes before finding the active one.
2138
+ setTimeout(function () {
2139
+ var _a;
2140
+ var tabIndex = (_a = _this.getActiveTabComponent()) === null || _a === void 0 ? void 0 : _a.tabIndex;
2141
+ _this.tabsetService.setActiveTabIndex(tabIndex);
2142
+ });
2143
+ });
2144
+ rxjs.combineLatest(this.tabs.map(function (tab) { return tab.tabIndexChange; }))
2145
+ .pipe(operators.takeUntil(rxjs.race(this.tabComponentsStateChangeUnsubscribe, this.ngUnsubscribe)))
2146
+ .subscribe(function () {
2147
+ // Don't emit the first change.
2148
+ if (_this.lastActiveTabIndex !== undefined) {
2149
+ // Wait for the tab components to render changes before updating the view.
2150
+ setTimeout(function () {
2151
+ _this.updateTabsetComponent(_this.tabsetService.currentActiveTabIndex, true);
2152
+ _this.emitTabIndexChange();
2153
+ });
2154
+ }
2155
+ });
2156
+ rxjs.combineLatest(this.tabs.map(function (tab) { return tab.stateChange; }))
2157
+ .pipe(operators.takeUntil(rxjs.race(this.tabComponentsStateChangeUnsubscribe, this.ngUnsubscribe)))
2158
+ .subscribe(function () {
2159
+ // Wait for the tab components to render changes before finding the active one.
2160
+ setTimeout(function () {
2161
+ _this.updateTabsetComponent(_this.tabsetService.currentActiveTabIndex, true);
2162
+ });
2163
+ });
2164
+ };
2165
+ SkyTabsetComponent.prototype.initTabComponents = function () {
2166
+ this.tabs.forEach(function (tab) { return tab.init(); });
2167
+ };
2168
+ SkyTabsetComponent.prototype.resetTabComponents = function () {
2169
+ var _a;
2170
+ this.unsubscribeTabComponentsStateChange();
2171
+ this.tabsetService.unregisterAll();
2172
+ // If there are no tab components, do a hard reset of the view.
2173
+ if (this.tabs.length === 0) {
2174
+ this.updateTabsetComponent(0, true);
2175
+ return;
2176
+ }
2177
+ this.initTabComponents();
2178
+ var activeIndex = (_a = this.getActiveTabComponent()) === null || _a === void 0 ? void 0 : _a.tabIndex;
2179
+ this.tabsetService.setActiveTabIndex(activeIndex, {
2180
+ emitChange: false
2181
+ });
2182
+ this.listenTabComponentsStateChange();
2183
+ };
2184
+ SkyTabsetComponent.prototype.emitTabIndexChange = function () {
2185
+ this.tabIndexesChange.emit({
2186
+ tabs: this.tabs.map(function (tab) { return ({
2187
+ tabHeading: tab.tabHeading,
2188
+ tabIndex: tab.tabIndex
2189
+ }); })
2190
+ });
2191
+ };
2192
+ SkyTabsetComponent.prototype.unsubscribeTabComponentsStateChange = function () {
2193
+ this.tabComponentsStateChangeUnsubscribe.next();
2194
+ this.tabComponentsStateChangeUnsubscribe.complete();
2195
+ this.tabComponentsStateChangeUnsubscribe = new rxjs.Subject();
2196
+ };
2197
+ SkyTabsetComponent.prototype.listenTabButtonsOverflowChange = function () {
2198
+ var _this = this;
2199
+ this.adapterService.registerTabset(this.elementRef);
2200
+ this.adapterService.overflowChange
2201
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
2202
+ .subscribe(function (isOverflowing) {
2203
+ _this.tabDisplayMode = (isOverflowing) ? 'dropdown' : 'tabs';
2204
+ _this.changeDetector.markForCheck();
2205
+ });
2206
+ };
2207
+ /**
2208
+ * Listen for back/forward history button presses to detect query param changes in the URL.
2209
+ */
2210
+ SkyTabsetComponent.prototype.listenLocationPopStateChange = function () {
2211
+ var _this = this;
2212
+ this.permalinkService.popStateChange
2213
+ .pipe(operators.takeUntil(this.ngUnsubscribe))
2214
+ .subscribe(function () {
2215
+ _this.setActiveTabIndexByPermalinkId();
2216
+ });
2217
+ };
2218
+ SkyTabsetComponent.prototype.setActiveTabIndexByPermalinkId = function () {
2219
+ var activeIndex = this.getActiveTabIndexByPermalinkId();
2220
+ this.tabsetService.setActiveTabIndex(activeIndex);
2221
+ };
2222
+ SkyTabsetComponent.prototype.getActiveTabIndexByPermalinkId = function () {
2223
+ var _a;
2224
+ if (this.permalinkId) {
2225
+ var paramValue_1 = this.permalinkService.getParam(this.permalinkId);
2226
+ if (paramValue_1) {
2227
+ return (_a = this.tabs.find(function (tab) { return tab.permalinkValue === paramValue_1; })) === null || _a === void 0 ? void 0 : _a.tabIndex;
2228
+ }
2229
+ }
2230
+ };
2231
+ SkyTabsetComponent.prototype.getActiveTabComponent = function () {
2232
+ return this.tabs.toArray().reverse().find(function (tab) { return tab.active === true; });
2233
+ };
2234
+ SkyTabsetComponent.prototype.createTabButtons = function (activeIndex) {
2235
+ var _this = this;
2236
+ return this.tabs.map(function (tab) { return ({
2237
+ active: _this.tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex),
2238
+ closeable: tab.closeable,
2239
+ ariaControls: tab.tabPanelId,
2240
+ disabled: tab.disabled,
2241
+ /*tslint:disable-next-line:no-null-keyword*/
2242
+ buttonHref: (tab.disabled) ? null : _this.permalinkService.getParamHref(_this.permalinkId, tab.permalinkValue),
2243
+ buttonId: tab.tabButtonId,
2244
+ buttonTextCount: tab.tabHeaderCount,
2245
+ buttonText: tab.tabHeading,
2246
+ tabIndex: tab.tabIndex
2247
+ }); });
2248
+ };
2249
+ SkyTabsetComponent.prototype.updateTabButtons = function (activeIndex) {
2250
+ var _this = this;
2251
+ this.tabButtons.forEach(function (button) {
2252
+ button.active = _this.tabsetService.tabIndexesEqual(button.tabIndex, activeIndex);
2253
+ });
2254
+ };
2255
+ /**
2256
+ * Updates the UI and state of the tabset component after the tab index or
2257
+ * tab components have changed.
2258
+ * @param activeIndex The currently active tab index.
2259
+ * @param regenerateTabButtons Indicates if tab button view models should be regenerated.
2260
+ * Setting this value to `false` will simply update the existing tab buttons. Setting this value
2261
+ * to `true` is only necessary when the underlying tab components have changed and the tab
2262
+ * buttons must reflect those changes.
2263
+ */
2264
+ SkyTabsetComponent.prototype.updateTabsetComponent = function (activeIndex, regenerateTabButtons) {
2265
+ var _this = this;
2266
+ if (regenerateTabButtons === void 0) { regenerateTabButtons = false; }
2267
+ var _a;
2268
+ // Activate/deactivate tab components.
2269
+ this.tabs.forEach(function (tab) {
2270
+ _this.tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex)
2271
+ ? tab.activate()
2272
+ : tab.deactivate();
2273
+ });
2274
+ // Update the tab button models.
2275
+ if (regenerateTabButtons || !this.tabButtons.length) {
2276
+ this.tabButtons = this.createTabButtons(activeIndex);
2277
+ }
2278
+ else {
2279
+ this.updateTabButtons(activeIndex);
2280
+ }
2281
+ // Update the dropdown trigger button text.
2282
+ this.dropdownTriggerButtonText = (_a = this.tabButtons.find(function (b) {
2283
+ return _this.tabsetService.tabIndexesEqual(b.tabIndex, activeIndex);
2284
+ })) === null || _a === void 0 ? void 0 : _a.buttonText;
2285
+ // Set the query params based on active tab.
2286
+ if (this.permalinkId) {
2287
+ var activeTabComponent = this.tabs.find(function (tab) {
2288
+ return _this.tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex);
2289
+ });
2290
+ this.permalinkService.setParam(this.permalinkId, activeTabComponent.permalinkValue);
2291
+ }
2292
+ // Wait for tab button view models to render before gauging dimensions.
2293
+ setTimeout(function () {
2294
+ _this.adapterService.detectOverflow();
2295
+ });
2296
+ this.changeDetector.markForCheck();
2297
+ // Emit the new active index value to consumers.
2298
+ if (this.lastActiveTabIndex !== activeIndex) {
2299
+ this.lastActiveTabIndex = activeIndex;
2300
+ this.activeChange.emit(activeIndex);
2301
+ }
2302
+ };
2303
+ SkyTabsetComponent.ctorParameters = function () { return [
2304
+ { type: core.ChangeDetectorRef },
2305
+ { type: core.ElementRef },
2306
+ { type: SkyTabsetAdapterService },
2307
+ { type: SkyTabsetPermalinkService },
2308
+ { type: SkyTabsetService }
2309
+ ]; };
2310
+ __decorate([
2311
+ core.Input()
2312
+ ], SkyTabsetComponent.prototype, "active", null);
2313
+ __decorate([
2314
+ core.Input()
2315
+ ], SkyTabsetComponent.prototype, "ariaLabel", void 0);
2316
+ __decorate([
2317
+ core.Input()
2318
+ ], SkyTabsetComponent.prototype, "ariaLabelledBy", void 0);
2319
+ __decorate([
2320
+ core.Input()
2321
+ ], SkyTabsetComponent.prototype, "permalinkId", null);
2322
+ __decorate([
2323
+ core.Input()
2324
+ ], SkyTabsetComponent.prototype, "tabStyle", null);
2325
+ __decorate([
2326
+ core.Output()
2327
+ ], SkyTabsetComponent.prototype, "activeChange", void 0);
2328
+ __decorate([
2329
+ core.Output()
2330
+ ], SkyTabsetComponent.prototype, "newTab", void 0);
2331
+ __decorate([
2332
+ core.Output()
2333
+ ], SkyTabsetComponent.prototype, "openTab", void 0);
2334
+ __decorate([
2335
+ core.Output()
2336
+ ], SkyTabsetComponent.prototype, "tabIndexesChange", void 0);
2337
+ __decorate([
2338
+ core.ContentChildren(SkyTabComponent)
2339
+ ], SkyTabsetComponent.prototype, "tabs", void 0);
2340
+ SkyTabsetComponent = __decorate([
2341
+ core.Component({
2342
+ selector: 'sky-tabset',
2343
+ template: "<div\n class=\"sky-tabset\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngClass]=\"'sky-tabset-mode-' + tabDisplayMode + ' sky-tabset-style-' + tabStyle\"\n (window:resize)=\"onWindowResize()\"\n>\n <span class=\"sky-tabset-dropdown\">\n <sky-dropdown *ngIf=\"tabDisplayMode === 'dropdown'\"\n buttonType=\"tab\"\n >\n <sky-dropdown-button>\n {{ dropdownTriggerButtonText }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let tabButton of tabButtons\"\n class=\"sky-tab-dropdown-menu-item\"\n >\n <div\n class=\"sky-tab-dropdown-item\"\n [ngClass]=\"{\n 'sky-tab-dropdown-item-selected': tabButton.active\n }\"\n >\n <ng-container *ngTemplateOutlet=\"tabButtonTemplate; context: {\n $implicit: tabButton\n }\"></ng-container>\n </div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </span>\n <span\n class=\"sky-tabset-tabs\"\n >\n <ng-container *ngFor=\"let tabButton of tabButtons\">\n <ng-container *ngTemplateOutlet=\"tabButtonTemplate; context: {\n $implicit: tabButton\n }\"></ng-container>\n </ng-container>\n </span>\n <span\n class=\"sky-tabset-btns\"\n >\n <button *ngIf=\"newTab.observers.length > 0\"\n class=\"sky-btn sky-btn-icon sky-tabset-btn-new sky-margin-inline-compact\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_add' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-sm': 'modern'\n }\"\n (click)=\"onNewTabClick()\"\n >\n <sky-icon\n icon=\"plus-circle\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n <button *ngIf=\"openTab.observers.length > 0\"\n class=\"sky-btn sky-btn-icon sky-tabset-btn-open sky-margin-inline-compact\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_open' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-sm': 'modern'\n }\"\n (click)=\"onOpenTabClick()\"\n >\n <sky-icon\n icon=\"folder-open-o\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n </span>\n</div>\n<ng-content></ng-content>\n\n<ng-template\n let-tabButton\n #tabButtonTemplate\n>\n <sky-tab-button\n [active]=\"tabButton.active\"\n [ariaControls]=\"tabButton.ariaControls\"\n [buttonHref]=\"tabButton.buttonHref\"\n [buttonId]=\"tabButton.buttonId\"\n [buttonText]=\"tabButton.buttonText\"\n [buttonTextCount]=\"tabButton.buttonTextCount\"\n [closeable]=\"tabButton.closeable\"\n [disabled]=\"tabButton.disabled\"\n [tabStyle]=\"tabStyle\"\n (buttonClick)=\"onTabButtonClick(tabButton)\"\n (closeClick)=\"onTabCloseClick(tabButton)\"\n ></sky-tab-button>\n</ng-template>\n",
2344
+ providers: [
2345
+ SkyTabsetAdapterService,
2346
+ SkyTabsetPermalinkService,
2347
+ SkyTabsetService
2348
+ ],
2349
+ changeDetection: core.ChangeDetectionStrategy.OnPush,
2350
+ encapsulation: core.ViewEncapsulation.None,
2351
+ styles: [".sky-tabset{align-items:center;border-bottom:2px solid #0974a1;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0 0 0 15px;white-space:nowrap}.sky-tabset.sky-tabset-style-wizard{border-bottom:none;padding-bottom:10px;padding-left:0}.sky-tabset-btns{order:1;padding-left:10px}.sky-tabset-dropdown{order:0;max-width:100%}.sky-tabset-mode-dropdown{line-height:0}.sky-tabset-mode-dropdown .sky-tabset-tabs{visibility:hidden;order:2}.sky-tab-dropdown-menu-item sky-tab-button{display:flex;min-width:300px}.sky-tab-dropdown-menu-item .sky-dropdown-item{margin:0}.sky-tab-dropdown-menu-item .sky-btn-tab-wrapper{width:100%;margin-right:0}.sky-tab-dropdown-menu-item .sky-btn-tab{margin:0;border-radius:0;width:100%;display:flex}.sky-tab-dropdown-menu-item .sky-btn-tab>.sky-tab-heading{flex:1 1 auto}.sky-tab-dropdown-menu-item .sky-btn-tab>.sky-btn-tab-close{flex:0 1 auto}.sky-tabset-tabs{order:0;white-space:nowrap}.sky-tabset-btn-new,.sky-tabset-btn-open{color:#0974a1}.sky-theme-modern .sky-tabset{border-bottom:1px solid #d2d2d2;overflow:visible}.sky-theme-modern .sky-tab-dropdown-menu-item .sky-btn-tab-wrapper{margin-right:0}"]
2352
+ })
2353
+ ], SkyTabsetComponent);
2354
+ return SkyTabsetComponent;
2355
+ }());
2356
+
2357
+ var SkyTabsModule = /** @class */ (function () {
2358
+ function SkyTabsModule() {
2359
+ }
2360
+ SkyTabsModule = __decorate([
2361
+ core.NgModule({
2362
+ declarations: [
2363
+ SkyTabButtonComponent,
2364
+ SkyTabComponent,
2365
+ SkyTabsetComponent,
2366
+ SkyTabsetNavButtonComponent
2367
+ ],
2368
+ imports: [
2369
+ common.CommonModule,
2370
+ router.RouterModule,
2371
+ popovers.SkyDropdownModule,
2372
+ i18n.SkyI18nModule,
2373
+ indicators.SkyIconModule,
2374
+ SkyTabsResourcesModule,
2375
+ theme.SkyThemeModule
2376
+ ],
2377
+ exports: [
2378
+ SkyTabComponent,
2379
+ SkyTabsetComponent,
2380
+ SkyTabsetNavButtonComponent
2381
+ ]
2382
+ })
2383
+ ], SkyTabsModule);
2384
+ return SkyTabsModule;
2385
+ }());
2386
+
2387
+ exports.SkySectionedFormComponent = SkySectionedFormComponent;
2388
+ exports.SkySectionedFormModule = SkySectionedFormModule;
2389
+ exports.SkySectionedFormService = SkySectionedFormService;
2390
+ exports.SkyTabsModule = SkyTabsModule;
2391
+ exports.SkyVerticalTabsetModule = SkyVerticalTabsetModule;
2392
+ exports.ɵa = VISIBLE_STATE;
2393
+ exports.ɵb = HIDDEN_STATE;
2394
+ exports.ɵc = SkyVerticalTabsetService;
2395
+ exports.ɵd = SkySectionedFormSectionComponent;
2396
+ exports.ɵe = SkyVerticalTabComponent;
2397
+ exports.ɵf = SkyVerticalTabMediaQueryService;
2398
+ exports.ɵg = SkyVerticalTabsetAdapterService;
2399
+ exports.ɵh = SkyVerticalTabsetComponent;
2400
+ exports.ɵi = SkyVerticalTabsetGroupComponent;
2401
+ exports.ɵj = SkyTabsResourcesModule;
2402
+ exports.ɵk = SkyTabsResourcesProvider;
2403
+ exports.ɵl = SkyTabButtonComponent;
2404
+ exports.ɵm = SkyTabComponent;
2405
+ exports.ɵn = SkyTabsetPermalinkService;
2406
+ exports.ɵo = SkyTabsetService;
2407
+ exports.ɵp = SkyTabsetComponent;
2408
+ exports.ɵq = SkyTabsetAdapterService;
2409
+ exports.ɵr = SkyTabsetNavButtonComponent;
2410
+
2411
+ Object.defineProperty(exports, '__esModule', { value: true });
2412
+
2413
+ })));
2414
+ //# sourceMappingURL=skyux-tabs.umd.js.map