@skyux/layout 5.7.2 → 6.0.0-beta.2

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 (289) hide show
  1. package/documentation.json +4 -4
  2. package/esm2020/index.mjs +74 -0
  3. package/esm2020/lib/modules/action-button/action-button-adapter-service.mjs +43 -0
  4. package/esm2020/lib/modules/action-button/action-button-container.component.mjs +139 -0
  5. package/esm2020/lib/modules/action-button/action-button-details.component.mjs +14 -0
  6. package/esm2020/lib/modules/action-button/action-button-header.component.mjs +15 -0
  7. package/esm2020/lib/modules/action-button/action-button-icon.component.mjs +40 -0
  8. package/esm2020/lib/modules/action-button/action-button-permalink.mjs +2 -0
  9. package/esm2020/lib/modules/action-button/action-button.component.mjs +34 -0
  10. package/esm2020/lib/modules/action-button/action-button.module.mjs +62 -0
  11. package/esm2020/lib/modules/action-button/types/action-button-container-align-items-type.mjs +2 -0
  12. package/esm2020/lib/modules/action-button/types/action-button-container-align-items.mjs +2 -0
  13. package/esm2020/lib/modules/back-to-top/back-to-top-adapter.service.mjs +84 -0
  14. package/esm2020/lib/modules/back-to-top/back-to-top.component.mjs +26 -0
  15. package/esm2020/lib/modules/back-to-top/back-to-top.directive.mjs +114 -0
  16. package/esm2020/lib/modules/back-to-top/back-to-top.module.mjs +35 -0
  17. package/esm2020/lib/modules/back-to-top/models/back-to-top-message-type.mjs +11 -0
  18. package/esm2020/lib/modules/back-to-top/models/back-to-top-message.mjs +2 -0
  19. package/esm2020/lib/modules/back-to-top/models/back-to-top-options.mjs +2 -0
  20. package/esm2020/lib/modules/box/box-content.component.mjs +15 -0
  21. package/esm2020/lib/modules/box/box-controls.component.mjs +14 -0
  22. package/esm2020/lib/modules/box/box-header.component.mjs +14 -0
  23. package/esm2020/lib/modules/box/box.component.mjs +21 -0
  24. package/esm2020/lib/modules/box/box.module.mjs +38 -0
  25. package/esm2020/lib/modules/card/card-actions.component.mjs +14 -0
  26. package/esm2020/lib/modules/card/card-content.component.mjs +14 -0
  27. package/esm2020/lib/modules/card/card-title.component.mjs +14 -0
  28. package/esm2020/lib/modules/card/card.component.mjs +75 -0
  29. package/esm2020/lib/modules/card/card.module.mjs +61 -0
  30. package/esm2020/lib/modules/definition-list/definition-list-content.component.mjs +14 -0
  31. package/esm2020/lib/modules/definition-list/definition-list-heading.component.mjs +14 -0
  32. package/esm2020/lib/modules/definition-list/definition-list-label.component.mjs +20 -0
  33. package/esm2020/lib/modules/definition-list/definition-list-value.component.mjs +21 -0
  34. package/esm2020/lib/modules/definition-list/definition-list.component.mjs +38 -0
  35. package/esm2020/lib/modules/definition-list/definition-list.module.mjs +44 -0
  36. package/esm2020/lib/modules/definition-list/definition-list.service.mjs +18 -0
  37. package/esm2020/lib/modules/description-list/description-list-adapter-service.mjs +43 -0
  38. package/esm2020/lib/modules/description-list/description-list-content.component.mjs +22 -0
  39. package/esm2020/lib/modules/description-list/description-list-description.component.mjs +49 -0
  40. package/esm2020/lib/modules/description-list/description-list-term.component.mjs +20 -0
  41. package/esm2020/lib/modules/description-list/description-list.component.mjs +101 -0
  42. package/esm2020/lib/modules/description-list/description-list.module.mjs +53 -0
  43. package/esm2020/lib/modules/description-list/description-list.service.mjs +26 -0
  44. package/esm2020/lib/modules/description-list/types/description-list-mode-type.mjs +2 -0
  45. package/esm2020/lib/modules/description-list/types/description-list-mode.mjs +24 -0
  46. package/esm2020/lib/modules/fluid-grid/column.component.mjs +53 -0
  47. package/esm2020/lib/modules/fluid-grid/fluid-grid-gutter-size.mjs +20 -0
  48. package/esm2020/lib/modules/fluid-grid/fluid-grid.component.mjs +62 -0
  49. package/esm2020/lib/modules/fluid-grid/fluid-grid.module.mjs +20 -0
  50. package/esm2020/lib/modules/fluid-grid/row.component.mjs +25 -0
  51. package/esm2020/lib/modules/fluid-grid/types/fluid-grid-gutter-size-type.mjs +2 -0
  52. package/esm2020/lib/modules/format/format-item.mjs +2 -0
  53. package/esm2020/lib/modules/format/format.component.mjs +59 -0
  54. package/esm2020/lib/modules/format/format.module.mjs +18 -0
  55. package/esm2020/lib/modules/inline-delete/inline-delete-adapter.service.mjs +115 -0
  56. package/esm2020/lib/modules/inline-delete/inline-delete-type.mjs +16 -0
  57. package/esm2020/lib/modules/inline-delete/inline-delete.component.mjs +161 -0
  58. package/esm2020/lib/modules/inline-delete/inline-delete.module.mjs +34 -0
  59. package/esm2020/lib/modules/page/page-theme-adapter.service.mjs +26 -0
  60. package/esm2020/lib/modules/page/page.component.mjs +27 -0
  61. package/esm2020/lib/modules/page/page.module.mjs +16 -0
  62. package/esm2020/lib/modules/page-summary/page-summary-adapter.service.mjs +23 -0
  63. package/esm2020/lib/modules/page-summary/page-summary-alert.component.mjs +17 -0
  64. package/esm2020/lib/modules/page-summary/page-summary-content.component.mjs +16 -0
  65. package/esm2020/lib/modules/page-summary/page-summary-image.component.mjs +17 -0
  66. package/esm2020/lib/modules/page-summary/page-summary-key-info.component.mjs +15 -0
  67. package/esm2020/lib/modules/page-summary/page-summary-status.component.mjs +17 -0
  68. package/esm2020/lib/modules/page-summary/page-summary-subtitle.component.mjs +16 -0
  69. package/esm2020/lib/modules/page-summary/page-summary-title.component.mjs +16 -0
  70. package/esm2020/lib/modules/page-summary/page-summary.component.mjs +45 -0
  71. package/esm2020/lib/modules/page-summary/page-summary.module.mjs +57 -0
  72. package/esm2020/lib/modules/shared/sky-layout-resources.module.mjs +60 -0
  73. package/esm2020/lib/modules/text-expand/text-expand-adapter.service.mjs +31 -0
  74. package/esm2020/lib/modules/text-expand/text-expand-modal-context.mjs +6 -0
  75. package/esm2020/lib/modules/text-expand/text-expand-modal.component.mjs +26 -0
  76. package/esm2020/lib/modules/text-expand/text-expand.component.mjs +247 -0
  77. package/esm2020/lib/modules/text-expand/text-expand.module.mjs +35 -0
  78. package/esm2020/lib/modules/text-expand-repeater/text-expand-repeater-adapter.service.mjs +37 -0
  79. package/esm2020/lib/modules/text-expand-repeater/text-expand-repeater.component.mjs +171 -0
  80. package/esm2020/lib/modules/text-expand-repeater/text-expand-repeater.module.mjs +20 -0
  81. package/esm2020/lib/modules/text-expand-repeater/types/text-expand-repeater-list-style-type.mjs +2 -0
  82. package/esm2020/lib/modules/toolbar/toolbar-item.component.mjs +14 -0
  83. package/esm2020/lib/modules/toolbar/toolbar-section.component.mjs +14 -0
  84. package/esm2020/lib/modules/toolbar/toolbar-view-actions.component.mjs +15 -0
  85. package/esm2020/lib/modules/toolbar/toolbar.component.mjs +25 -0
  86. package/esm2020/lib/modules/toolbar/toolbar.module.mjs +37 -0
  87. package/esm2020/skyux-layout.mjs +5 -0
  88. package/esm2020/testing/action-button-fixture.mjs +44 -0
  89. package/esm2020/testing/card-fixture.mjs +63 -0
  90. package/esm2020/testing/page-summary-fixture.mjs +29 -0
  91. package/esm2020/testing/public-api.mjs +4 -0
  92. package/esm2020/testing/skyux-layout-testing.mjs +5 -0
  93. package/fesm2015/{skyux-layout-testing.js → skyux-layout-testing.mjs} +1 -1
  94. package/fesm2015/skyux-layout-testing.mjs.map +1 -0
  95. package/fesm2015/skyux-layout.mjs +2724 -0
  96. package/fesm2015/skyux-layout.mjs.map +1 -0
  97. package/fesm2020/skyux-layout-testing.mjs +139 -0
  98. package/fesm2020/skyux-layout-testing.mjs.map +1 -0
  99. package/fesm2020/skyux-layout.mjs +2722 -0
  100. package/fesm2020/skyux-layout.mjs.map +1 -0
  101. package/package.json +45 -21
  102. package/testing/package.json +5 -5
  103. package/bundles/skyux-layout-testing.umd.js +0 -191
  104. package/bundles/skyux-layout.umd.js +0 -3570
  105. package/esm2015/index.js +0 -74
  106. package/esm2015/index.js.map +0 -1
  107. package/esm2015/lib/modules/action-button/action-button-adapter-service.js +0 -43
  108. package/esm2015/lib/modules/action-button/action-button-adapter-service.js.map +0 -1
  109. package/esm2015/lib/modules/action-button/action-button-container.component.js +0 -145
  110. package/esm2015/lib/modules/action-button/action-button-container.component.js.map +0 -1
  111. package/esm2015/lib/modules/action-button/action-button-details.component.js +0 -17
  112. package/esm2015/lib/modules/action-button/action-button-details.component.js.map +0 -1
  113. package/esm2015/lib/modules/action-button/action-button-header.component.js +0 -19
  114. package/esm2015/lib/modules/action-button/action-button-header.component.js.map +0 -1
  115. package/esm2015/lib/modules/action-button/action-button-icon.component.js +0 -44
  116. package/esm2015/lib/modules/action-button/action-button-icon.component.js.map +0 -1
  117. package/esm2015/lib/modules/action-button/action-button-permalink.js +0 -2
  118. package/esm2015/lib/modules/action-button/action-button-permalink.js.map +0 -1
  119. package/esm2015/lib/modules/action-button/action-button.component.js +0 -39
  120. package/esm2015/lib/modules/action-button/action-button.component.js.map +0 -1
  121. package/esm2015/lib/modules/action-button/action-button.module.js +0 -62
  122. package/esm2015/lib/modules/action-button/action-button.module.js.map +0 -1
  123. package/esm2015/lib/modules/action-button/types/action-button-container-align-items-type.js +0 -2
  124. package/esm2015/lib/modules/action-button/types/action-button-container-align-items-type.js.map +0 -1
  125. package/esm2015/lib/modules/action-button/types/action-button-container-align-items.js +0 -2
  126. package/esm2015/lib/modules/action-button/types/action-button-container-align-items.js.map +0 -1
  127. package/esm2015/lib/modules/back-to-top/back-to-top-adapter.service.js +0 -84
  128. package/esm2015/lib/modules/back-to-top/back-to-top-adapter.service.js.map +0 -1
  129. package/esm2015/lib/modules/back-to-top/back-to-top.component.js +0 -31
  130. package/esm2015/lib/modules/back-to-top/back-to-top.component.js.map +0 -1
  131. package/esm2015/lib/modules/back-to-top/back-to-top.directive.js +0 -114
  132. package/esm2015/lib/modules/back-to-top/back-to-top.directive.js.map +0 -1
  133. package/esm2015/lib/modules/back-to-top/back-to-top.module.js +0 -36
  134. package/esm2015/lib/modules/back-to-top/back-to-top.module.js.map +0 -1
  135. package/esm2015/lib/modules/back-to-top/models/back-to-top-message-type.js +0 -11
  136. package/esm2015/lib/modules/back-to-top/models/back-to-top-message-type.js.map +0 -1
  137. package/esm2015/lib/modules/back-to-top/models/back-to-top-message.js +0 -2
  138. package/esm2015/lib/modules/back-to-top/models/back-to-top-message.js.map +0 -1
  139. package/esm2015/lib/modules/back-to-top/models/back-to-top-options.js +0 -2
  140. package/esm2015/lib/modules/back-to-top/models/back-to-top-options.js.map +0 -1
  141. package/esm2015/lib/modules/box/box-content.component.js +0 -18
  142. package/esm2015/lib/modules/box/box-content.component.js.map +0 -1
  143. package/esm2015/lib/modules/box/box-controls.component.js +0 -17
  144. package/esm2015/lib/modules/box/box-controls.component.js.map +0 -1
  145. package/esm2015/lib/modules/box/box-header.component.js +0 -17
  146. package/esm2015/lib/modules/box/box-header.component.js.map +0 -1
  147. package/esm2015/lib/modules/box/box.component.js +0 -26
  148. package/esm2015/lib/modules/box/box.component.js.map +0 -1
  149. package/esm2015/lib/modules/box/box.module.js +0 -38
  150. package/esm2015/lib/modules/box/box.module.js.map +0 -1
  151. package/esm2015/lib/modules/card/card-actions.component.js +0 -18
  152. package/esm2015/lib/modules/card/card-actions.component.js.map +0 -1
  153. package/esm2015/lib/modules/card/card-content.component.js +0 -17
  154. package/esm2015/lib/modules/card/card-content.component.js.map +0 -1
  155. package/esm2015/lib/modules/card/card-title.component.js +0 -17
  156. package/esm2015/lib/modules/card/card-title.component.js.map +0 -1
  157. package/esm2015/lib/modules/card/card.component.js +0 -79
  158. package/esm2015/lib/modules/card/card.component.js.map +0 -1
  159. package/esm2015/lib/modules/card/card.module.js +0 -61
  160. package/esm2015/lib/modules/card/card.module.js.map +0 -1
  161. package/esm2015/lib/modules/definition-list/definition-list-content.component.js +0 -19
  162. package/esm2015/lib/modules/definition-list/definition-list-content.component.js.map +0 -1
  163. package/esm2015/lib/modules/definition-list/definition-list-heading.component.js +0 -19
  164. package/esm2015/lib/modules/definition-list/definition-list-heading.component.js.map +0 -1
  165. package/esm2015/lib/modules/definition-list/definition-list-label.component.js +0 -25
  166. package/esm2015/lib/modules/definition-list/definition-list-label.component.js.map +0 -1
  167. package/esm2015/lib/modules/definition-list/definition-list-value.component.js +0 -25
  168. package/esm2015/lib/modules/definition-list/definition-list-value.component.js.map +0 -1
  169. package/esm2015/lib/modules/definition-list/definition-list.component.js +0 -44
  170. package/esm2015/lib/modules/definition-list/definition-list.component.js.map +0 -1
  171. package/esm2015/lib/modules/definition-list/definition-list.module.js +0 -44
  172. package/esm2015/lib/modules/definition-list/definition-list.module.js.map +0 -1
  173. package/esm2015/lib/modules/definition-list/definition-list.service.js +0 -18
  174. package/esm2015/lib/modules/definition-list/definition-list.service.js.map +0 -1
  175. package/esm2015/lib/modules/description-list/description-list-adapter-service.js +0 -43
  176. package/esm2015/lib/modules/description-list/description-list-adapter-service.js.map +0 -1
  177. package/esm2015/lib/modules/description-list/description-list-content.component.js +0 -25
  178. package/esm2015/lib/modules/description-list/description-list-content.component.js.map +0 -1
  179. package/esm2015/lib/modules/description-list/description-list-description.component.js +0 -53
  180. package/esm2015/lib/modules/description-list/description-list-description.component.js.map +0 -1
  181. package/esm2015/lib/modules/description-list/description-list-term.component.js +0 -24
  182. package/esm2015/lib/modules/description-list/description-list-term.component.js.map +0 -1
  183. package/esm2015/lib/modules/description-list/description-list.component.js +0 -107
  184. package/esm2015/lib/modules/description-list/description-list.component.js.map +0 -1
  185. package/esm2015/lib/modules/description-list/description-list.module.js +0 -53
  186. package/esm2015/lib/modules/description-list/description-list.module.js.map +0 -1
  187. package/esm2015/lib/modules/description-list/description-list.service.js +0 -26
  188. package/esm2015/lib/modules/description-list/description-list.service.js.map +0 -1
  189. package/esm2015/lib/modules/description-list/types/description-list-mode-type.js +0 -2
  190. package/esm2015/lib/modules/description-list/types/description-list-mode-type.js.map +0 -1
  191. package/esm2015/lib/modules/description-list/types/description-list-mode.js +0 -24
  192. package/esm2015/lib/modules/description-list/types/description-list-mode.js.map +0 -1
  193. package/esm2015/lib/modules/fluid-grid/column.component.js +0 -58
  194. package/esm2015/lib/modules/fluid-grid/column.component.js.map +0 -1
  195. package/esm2015/lib/modules/fluid-grid/fluid-grid-gutter-size.js +0 -20
  196. package/esm2015/lib/modules/fluid-grid/fluid-grid-gutter-size.js.map +0 -1
  197. package/esm2015/lib/modules/fluid-grid/fluid-grid.component.js +0 -66
  198. package/esm2015/lib/modules/fluid-grid/fluid-grid.component.js.map +0 -1
  199. package/esm2015/lib/modules/fluid-grid/fluid-grid.module.js +0 -20
  200. package/esm2015/lib/modules/fluid-grid/fluid-grid.module.js.map +0 -1
  201. package/esm2015/lib/modules/fluid-grid/row.component.js +0 -29
  202. package/esm2015/lib/modules/fluid-grid/row.component.js.map +0 -1
  203. package/esm2015/lib/modules/fluid-grid/types/fluid-grid-gutter-size-type.js +0 -2
  204. package/esm2015/lib/modules/fluid-grid/types/fluid-grid-gutter-size-type.js.map +0 -1
  205. package/esm2015/lib/modules/format/format-item.js +0 -2
  206. package/esm2015/lib/modules/format/format-item.js.map +0 -1
  207. package/esm2015/lib/modules/format/format.component.js +0 -63
  208. package/esm2015/lib/modules/format/format.component.js.map +0 -1
  209. package/esm2015/lib/modules/format/format.module.js +0 -18
  210. package/esm2015/lib/modules/format/format.module.js.map +0 -1
  211. package/esm2015/lib/modules/inline-delete/inline-delete-adapter.service.js +0 -115
  212. package/esm2015/lib/modules/inline-delete/inline-delete-adapter.service.js.map +0 -1
  213. package/esm2015/lib/modules/inline-delete/inline-delete-type.js +0 -16
  214. package/esm2015/lib/modules/inline-delete/inline-delete-type.js.map +0 -1
  215. package/esm2015/lib/modules/inline-delete/inline-delete.component.js +0 -167
  216. package/esm2015/lib/modules/inline-delete/inline-delete.component.js.map +0 -1
  217. package/esm2015/lib/modules/inline-delete/inline-delete.module.js +0 -34
  218. package/esm2015/lib/modules/inline-delete/inline-delete.module.js.map +0 -1
  219. package/esm2015/lib/modules/page/page-theme-adapter.service.js +0 -26
  220. package/esm2015/lib/modules/page/page-theme-adapter.service.js.map +0 -1
  221. package/esm2015/lib/modules/page/page.component.js +0 -31
  222. package/esm2015/lib/modules/page/page.component.js.map +0 -1
  223. package/esm2015/lib/modules/page/page.module.js +0 -16
  224. package/esm2015/lib/modules/page/page.module.js.map +0 -1
  225. package/esm2015/lib/modules/page-summary/page-summary-adapter.service.js +0 -23
  226. package/esm2015/lib/modules/page-summary/page-summary-adapter.service.js.map +0 -1
  227. package/esm2015/lib/modules/page-summary/page-summary-alert.component.js +0 -21
  228. package/esm2015/lib/modules/page-summary/page-summary-alert.component.js.map +0 -1
  229. package/esm2015/lib/modules/page-summary/page-summary-content.component.js +0 -20
  230. package/esm2015/lib/modules/page-summary/page-summary-content.component.js.map +0 -1
  231. package/esm2015/lib/modules/page-summary/page-summary-image.component.js +0 -21
  232. package/esm2015/lib/modules/page-summary/page-summary-image.component.js.map +0 -1
  233. package/esm2015/lib/modules/page-summary/page-summary-key-info.component.js +0 -19
  234. package/esm2015/lib/modules/page-summary/page-summary-key-info.component.js.map +0 -1
  235. package/esm2015/lib/modules/page-summary/page-summary-status.component.js +0 -21
  236. package/esm2015/lib/modules/page-summary/page-summary-status.component.js.map +0 -1
  237. package/esm2015/lib/modules/page-summary/page-summary-subtitle.component.js +0 -20
  238. package/esm2015/lib/modules/page-summary/page-summary-subtitle.component.js.map +0 -1
  239. package/esm2015/lib/modules/page-summary/page-summary-title.component.js +0 -20
  240. package/esm2015/lib/modules/page-summary/page-summary-title.component.js.map +0 -1
  241. package/esm2015/lib/modules/page-summary/page-summary.component.js +0 -50
  242. package/esm2015/lib/modules/page-summary/page-summary.component.js.map +0 -1
  243. package/esm2015/lib/modules/page-summary/page-summary.module.js +0 -57
  244. package/esm2015/lib/modules/page-summary/page-summary.module.js.map +0 -1
  245. package/esm2015/lib/modules/shared/sky-layout-resources.module.js +0 -60
  246. package/esm2015/lib/modules/shared/sky-layout-resources.module.js.map +0 -1
  247. package/esm2015/lib/modules/text-expand/text-expand-adapter.service.js +0 -31
  248. package/esm2015/lib/modules/text-expand/text-expand-adapter.service.js.map +0 -1
  249. package/esm2015/lib/modules/text-expand/text-expand-modal-context.js +0 -6
  250. package/esm2015/lib/modules/text-expand/text-expand-modal-context.js.map +0 -1
  251. package/esm2015/lib/modules/text-expand/text-expand-modal.component.js +0 -30
  252. package/esm2015/lib/modules/text-expand/text-expand-modal.component.js.map +0 -1
  253. package/esm2015/lib/modules/text-expand/text-expand.component.js +0 -252
  254. package/esm2015/lib/modules/text-expand/text-expand.component.js.map +0 -1
  255. package/esm2015/lib/modules/text-expand/text-expand.module.js +0 -36
  256. package/esm2015/lib/modules/text-expand/text-expand.module.js.map +0 -1
  257. package/esm2015/lib/modules/text-expand-repeater/text-expand-repeater-adapter.service.js +0 -37
  258. package/esm2015/lib/modules/text-expand-repeater/text-expand-repeater-adapter.service.js.map +0 -1
  259. package/esm2015/lib/modules/text-expand-repeater/text-expand-repeater.component.js +0 -176
  260. package/esm2015/lib/modules/text-expand-repeater/text-expand-repeater.component.js.map +0 -1
  261. package/esm2015/lib/modules/text-expand-repeater/text-expand-repeater.module.js +0 -20
  262. package/esm2015/lib/modules/text-expand-repeater/text-expand-repeater.module.js.map +0 -1
  263. package/esm2015/lib/modules/text-expand-repeater/types/text-expand-repeater-list-style-type.js +0 -2
  264. package/esm2015/lib/modules/text-expand-repeater/types/text-expand-repeater-list-style-type.js.map +0 -1
  265. package/esm2015/lib/modules/toolbar/toolbar-item.component.js +0 -18
  266. package/esm2015/lib/modules/toolbar/toolbar-item.component.js.map +0 -1
  267. package/esm2015/lib/modules/toolbar/toolbar-section.component.js +0 -18
  268. package/esm2015/lib/modules/toolbar/toolbar-section.component.js.map +0 -1
  269. package/esm2015/lib/modules/toolbar/toolbar-view-actions.component.js +0 -20
  270. package/esm2015/lib/modules/toolbar/toolbar-view-actions.component.js.map +0 -1
  271. package/esm2015/lib/modules/toolbar/toolbar.component.js +0 -29
  272. package/esm2015/lib/modules/toolbar/toolbar.component.js.map +0 -1
  273. package/esm2015/lib/modules/toolbar/toolbar.module.js +0 -37
  274. package/esm2015/lib/modules/toolbar/toolbar.module.js.map +0 -1
  275. package/esm2015/skyux-layout.js +0 -5
  276. package/esm2015/skyux-layout.js.map +0 -1
  277. package/esm2015/testing/action-button-fixture.js +0 -44
  278. package/esm2015/testing/action-button-fixture.js.map +0 -1
  279. package/esm2015/testing/card-fixture.js +0 -63
  280. package/esm2015/testing/card-fixture.js.map +0 -1
  281. package/esm2015/testing/page-summary-fixture.js +0 -29
  282. package/esm2015/testing/page-summary-fixture.js.map +0 -1
  283. package/esm2015/testing/public-api.js +0 -4
  284. package/esm2015/testing/public-api.js.map +0 -1
  285. package/esm2015/testing/skyux-layout-testing.js +0 -5
  286. package/esm2015/testing/skyux-layout-testing.js.map +0 -1
  287. package/fesm2015/skyux-layout-testing.js.map +0 -1
  288. package/fesm2015/skyux-layout.js +0 -2912
  289. package/fesm2015/skyux-layout.js.map +0 -1
@@ -0,0 +1,247 @@
1
+ import { Component, ElementRef, Input, ViewChild, } from '@angular/core';
2
+ import { SkyLibResourcesService } from '@skyux/i18n';
3
+ import { SkyModalService } from '@skyux/modals';
4
+ import { forkJoin as observableForkJoin } from 'rxjs';
5
+ import { take } from 'rxjs/operators';
6
+ import { SkyTextExpandAdapterService } from './text-expand-adapter.service';
7
+ import { SkyTextExpandModalContext } from './text-expand-modal-context';
8
+ import { SkyTextExpandModalComponent } from './text-expand-modal.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@skyux/i18n";
11
+ import * as i2 from "@skyux/modals";
12
+ import * as i3 from "./text-expand-adapter.service";
13
+ import * as i4 from "@angular/common";
14
+ /**
15
+ * Auto-incrementing integer used to generate unique ids for text expand components.
16
+ */
17
+ let nextId = 0;
18
+ export class SkyTextExpandComponent {
19
+ constructor(resources, modalService, textExpandAdapter) {
20
+ this.resources = resources;
21
+ this.modalService = modalService;
22
+ this.textExpandAdapter = textExpandAdapter;
23
+ /**
24
+ * Specifies the maximum number of text characters to display inline when users select the link
25
+ * to expand the full text. If the text exceeds this limit, then the component expands
26
+ * the full text in a modal instead.
27
+ */
28
+ this.maxExpandedLength = 600;
29
+ /**
30
+ * Specifies the maximum number of newline characters to display inline when users select
31
+ * the link to expand the full text. If the text exceeds this limit, then
32
+ * the component expands the full text in a modal view instead.
33
+ */
34
+ this.maxExpandedNewlines = 2;
35
+ /**
36
+ * Indicates whether to replace newline characters in truncated text with spaces.
37
+ */
38
+ this.truncateNewlines = true;
39
+ this.contentSectionId = `sky-text-expand-content-${++nextId}`;
40
+ this.isExpanded = false;
41
+ this._maxLength = 200;
42
+ }
43
+ /**
44
+ * Specifies the number of text characters to display before truncating the text.
45
+ * To avoid truncating text in the middle of a word, the component looks for a space
46
+ * in the 10 characters before the last character.
47
+ * @default 200
48
+ */
49
+ set maxLength(value) {
50
+ this._maxLength = value;
51
+ /* istanbul ignore else */
52
+ if (this.textEl) {
53
+ this.setup(this.expandedText);
54
+ }
55
+ }
56
+ get maxLength() {
57
+ return this._maxLength;
58
+ }
59
+ /**
60
+ * Specifies the text to truncate.
61
+ */
62
+ set text(value) {
63
+ /* istanbul ignore else */
64
+ if (this.textEl) {
65
+ this.setup(value);
66
+ }
67
+ }
68
+ textExpand() {
69
+ if (this.isModal) {
70
+ // Modal View
71
+ /* istanbul ignore else */
72
+ /* sanity check */
73
+ if (!this.isExpanded) {
74
+ this.modalService.open(SkyTextExpandModalComponent, [
75
+ {
76
+ provide: SkyTextExpandModalContext,
77
+ useValue: {
78
+ header: this.expandModalTitle,
79
+ text: this.expandedText,
80
+ },
81
+ },
82
+ ]);
83
+ }
84
+ }
85
+ else {
86
+ // Normal View
87
+ if (!this.isExpanded) {
88
+ this.setContainerMaxHeight();
89
+ setTimeout(() => {
90
+ this.isExpanded = true;
91
+ this.animateText(this.collapsedText, this.expandedText, true);
92
+ }, 10);
93
+ }
94
+ else {
95
+ this.setContainerMaxHeight();
96
+ setTimeout(() => {
97
+ this.isExpanded = false;
98
+ this.animateText(this.expandedText, this.collapsedText, false);
99
+ }, 10);
100
+ }
101
+ }
102
+ }
103
+ animationEnd() {
104
+ // Ensure the correct text is displayed
105
+ this.textExpandAdapter.setText(this.textEl, this.textToShow);
106
+ // Set height back to auto so the browser can change the height as needed with window changes
107
+ this.textExpandAdapter.setContainerHeight(this.containerEl, undefined);
108
+ }
109
+ ngAfterContentInit() {
110
+ observableForkJoin([
111
+ this.resources.getString('skyux_text_expand_see_more'),
112
+ this.resources.getString('skyux_text_expand_see_less'),
113
+ ])
114
+ .pipe(take(1))
115
+ .subscribe((resources) => {
116
+ this.seeMoreText = resources[0];
117
+ this.seeLessText = resources[1];
118
+ this.setup(this.expandedText);
119
+ /* istanbul ignore else */
120
+ if (!this.expandModalTitle) {
121
+ this.resources
122
+ .getString('skyux_text_expand_modal_title')
123
+ .pipe(take(1))
124
+ .subscribe((resource) => {
125
+ this.expandModalTitle = resource;
126
+ });
127
+ }
128
+ });
129
+ }
130
+ setContainerMaxHeight() {
131
+ // ensure everything is reset
132
+ this.animationEnd();
133
+ /* Before animation is kicked off, ensure that a maxHeight exists */
134
+ /* Once we have support for angular v4 animations with parameters we can use that instead */
135
+ const currentHeight = this.textExpandAdapter.getContainerHeight(this.containerEl);
136
+ this.textExpandAdapter.setContainerHeight(this.containerEl, `${currentHeight}px`);
137
+ }
138
+ setup(value) {
139
+ if (value) {
140
+ this.newlineCount = this.getNewlineCount(value);
141
+ this.collapsedText = this.getTruncatedText(value, this.maxLength);
142
+ this.expandedText = value;
143
+ if (this.collapsedText !== value) {
144
+ this.buttonText = this.seeMoreText;
145
+ this.isExpanded = false;
146
+ this.expandable = true;
147
+ this.isModal =
148
+ this.newlineCount > this.maxExpandedNewlines ||
149
+ this.expandedText.length > this.maxExpandedLength;
150
+ }
151
+ else {
152
+ this.expandable = false;
153
+ }
154
+ this.textToShow = this.collapsedText;
155
+ }
156
+ else {
157
+ this.textToShow = '';
158
+ this.expandable = false;
159
+ }
160
+ this.textExpandAdapter.setText(this.textEl, this.textToShow);
161
+ }
162
+ getNewlineCount(value) {
163
+ const matches = value.match(/\n/gi);
164
+ if (matches) {
165
+ return matches.length;
166
+ }
167
+ return 0;
168
+ }
169
+ getTruncatedText(value, length) {
170
+ let i;
171
+ if (this.truncateNewlines) {
172
+ value = value.replace(/\n+/gi, ' ');
173
+ }
174
+ // Jump ahead one character and see if it's a space, and if it isn't,
175
+ // back up to the first space and break there so a word doesn't get cut
176
+ // in half.
177
+ if (length < value.length) {
178
+ for (i = length; i > length - 10; i--) {
179
+ if (/\s/.test(value.charAt(i))) {
180
+ length = i;
181
+ break;
182
+ }
183
+ }
184
+ }
185
+ return value.substr(0, length);
186
+ }
187
+ animateText(previousText, newText, expanding) {
188
+ const adapter = this.textExpandAdapter;
189
+ const container = this.containerEl;
190
+ // Reset max height
191
+ adapter.setContainerHeight(container, undefined);
192
+ // Measure the current height so we can animate from it.
193
+ const currentHeight = adapter.getContainerHeight(container);
194
+ this.textToShow = newText;
195
+ adapter.setText(this.textEl, this.textToShow);
196
+ this.buttonText = expanding ? this.seeLessText : this.seeMoreText;
197
+ // Measure the new height so we can animate to it.
198
+ const newHeight = adapter.getContainerHeight(container);
199
+ /* istanbul ignore if */
200
+ if (newHeight < currentHeight) {
201
+ // The new text is smaller than the old text, so put the old text back before doing
202
+ // the collapse animation to avoid showing a big chunk of whitespace.
203
+ adapter.setText(this.textEl, previousText);
204
+ }
205
+ adapter.setContainerHeight(container, `${currentHeight}px`);
206
+ // This timeout is necessary due to the browser needing to pick up the non-auto height being set
207
+ // in order to do the transtion in height correctly. Without it the transition does not fire.
208
+ setTimeout(() => {
209
+ adapter.setContainerHeight(container, `${newHeight}px`);
210
+ /* This resets values if the transition does not get kicked off */
211
+ setTimeout(() => {
212
+ this.animationEnd();
213
+ }, 500);
214
+ }, 10);
215
+ }
216
+ }
217
+ SkyTextExpandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandComponent, deps: [{ token: i1.SkyLibResourcesService }, { token: i2.SkyModalService }, { token: i3.SkyTextExpandAdapterService }], target: i0.ɵɵFactoryTarget.Component });
218
+ SkyTextExpandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyTextExpandComponent, selector: "sky-text-expand", inputs: { expandModalTitle: "expandModalTitle", maxExpandedLength: "maxExpandedLength", maxExpandedNewlines: "maxExpandedNewlines", maxLength: "maxLength", text: "text", truncateNewlines: "truncateNewlines" }, providers: [SkyTextExpandAdapterService], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "textEl", first: true, predicate: ["text"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-text-expand-container\"\n (transitionend)=\"animationEnd()\"\n #container\n>\n <span class=\"sky-text-expand-text\" [id]=\"contentSectionId\" #text></span>\n <span class=\"sky-text-expand-ellipsis\" *ngIf=\"!isExpanded && expandable\"\n >...\n </span>\n <button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-see-more\"\n [attr.aria-expanded]=\"isModal ? undefined : isExpanded\"\n [attr.aria-controls]=\"isModal ? undefined : contentSectionId\"\n [attr.aria-haspopup]=\"isModal ? 'dialog' : undefined\"\n (click)=\"textExpand()\"\n >\n {{ buttonText }}\n </button>\n</div>\n", styles: [".sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:5px}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto;transition:max-height .25s}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandComponent, decorators: [{
220
+ type: Component,
221
+ args: [{ selector: 'sky-text-expand', providers: [SkyTextExpandAdapterService], template: "<div\n class=\"sky-text-expand-container\"\n (transitionend)=\"animationEnd()\"\n #container\n>\n <span class=\"sky-text-expand-text\" [id]=\"contentSectionId\" #text></span>\n <span class=\"sky-text-expand-ellipsis\" *ngIf=\"!isExpanded && expandable\"\n >...\n </span>\n <button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-see-more\"\n [attr.aria-expanded]=\"isModal ? undefined : isExpanded\"\n [attr.aria-controls]=\"isModal ? undefined : contentSectionId\"\n [attr.aria-haspopup]=\"isModal ? 'dialog' : undefined\"\n (click)=\"textExpand()\"\n >\n {{ buttonText }}\n </button>\n</div>\n", styles: [".sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:5px}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto;transition:max-height .25s}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"] }]
222
+ }], ctorParameters: function () { return [{ type: i1.SkyLibResourcesService }, { type: i2.SkyModalService }, { type: i3.SkyTextExpandAdapterService }]; }, propDecorators: { expandModalTitle: [{
223
+ type: Input
224
+ }], maxExpandedLength: [{
225
+ type: Input
226
+ }], maxExpandedNewlines: [{
227
+ type: Input
228
+ }], maxLength: [{
229
+ type: Input
230
+ }], text: [{
231
+ type: Input
232
+ }], truncateNewlines: [{
233
+ type: Input
234
+ }], containerEl: [{
235
+ type: ViewChild,
236
+ args: ['container', {
237
+ read: ElementRef,
238
+ static: true,
239
+ }]
240
+ }], textEl: [{
241
+ type: ViewChild,
242
+ args: ['text', {
243
+ read: ElementRef,
244
+ static: true,
245
+ }]
246
+ }] } });
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1leHBhbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQvdGV4dC1leHBhbmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQvdGV4dC1leHBhbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBRTVFOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBUWYsTUFBTSxPQUFPLHNCQUFzQjtJQWlHakMsWUFDVSxTQUFpQyxFQUNqQyxZQUE2QixFQUM3QixpQkFBOEM7UUFGOUMsY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQzdCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUE1RnhEOzs7O1dB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QUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lNb2RhbFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcblxuaW1wb3J0IHsgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RXhwYW5kQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3RleHQtZXhwYW5kLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RXhwYW5kTW9kYWxDb250ZXh0IH0gZnJvbSAnLi90ZXh0LWV4cGFuZC1tb2RhbC1jb250ZXh0JztcbmltcG9ydCB7IFNreVRleHRFeHBhbmRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vdGV4dC1leHBhbmQtbW9kYWwuY29tcG9uZW50JztcblxuLyoqXG4gKiBBdXRvLWluY3JlbWVudGluZyBpbnRlZ2VyIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIGlkcyBmb3IgdGV4dCBleHBhbmQgY29tcG9uZW50cy5cbiAqL1xubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10ZXh0LWV4cGFuZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWV4cGFuZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZXhwYW5kLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NreVRleHRFeHBhbmRBZGFwdGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFeHBhbmRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHRpdGxlIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGV4cGFuZHMgdGhlIGZ1bGwgdGV4dCBpbiBhIG1vZGFsLlxuICAgKiBAZGVmYXVsdCBcIkV4cGFuZGVkIHZpZXdcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGV4cGFuZE1vZGFsVGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0ZXh0IGNoYXJhY3RlcnMgdG8gZGlzcGxheSBpbmxpbmUgd2hlbiB1c2VycyBzZWxlY3QgdGhlIGxpbmtcbiAgICogdG8gZXhwYW5kIHRoZSBmdWxsIHRleHQuIElmIHRoZSB0ZXh0IGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlbiB0aGUgY29tcG9uZW50IGV4cGFuZHNcbiAgICogdGhlIGZ1bGwgdGV4dCBpbiBhIG1vZGFsIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4RXhwYW5kZWRMZW5ndGggPSA2MDA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbmV3bGluZSBjaGFyYWN0ZXJzIHRvIGRpc3BsYXkgaW5saW5lIHdoZW4gdXNlcnMgc2VsZWN0XG4gICAqIHRoZSBsaW5rIHRvIGV4cGFuZCB0aGUgZnVsbCB0ZXh0LiBJZiB0aGUgdGV4dCBleGNlZWRzIHRoaXMgbGltaXQsIHRoZW5cbiAgICogdGhlIGNvbXBvbmVudCBleHBhbmRzIHRoZSBmdWxsIHRleHQgaW4gYSBtb2RhbCB2aWV3IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4RXhwYW5kZWROZXdsaW5lcyA9IDI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRleHQgY2hhcmFjdGVycyB0byBkaXNwbGF5IGJlZm9yZSB0cnVuY2F0aW5nIHRoZSB0ZXh0LlxuICAgKiBUbyBhdm9pZCB0cnVuY2F0aW5nIHRleHQgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIHRoZSBjb21wb25lbnQgbG9va3MgZm9yIGEgc3BhY2VcbiAgICogaW4gdGhlIDEwIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBsYXN0IGNoYXJhY3Rlci5cbiAgICogQGRlZmF1bHQgMjAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gdmFsdWU7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnRleHRFbCkge1xuICAgICAgdGhpcy5zZXR1cCh0aGlzLmV4cGFuZGVkVGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4TGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGV4dCB0byB0cnVuY2F0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy50ZXh0RWwpIHtcbiAgICAgIHRoaXMuc2V0dXAodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byByZXBsYWNlIG5ld2xpbmUgY2hhcmFjdGVycyBpbiB0cnVuY2F0ZWQgdGV4dCB3aXRoIHNwYWNlcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0cnVuY2F0ZU5ld2xpbmVzID0gdHJ1ZTtcblxuICBwdWJsaWMgYnV0dG9uVGV4dDogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb250ZW50U2VjdGlvbklkID0gYHNreS10ZXh0LWV4cGFuZC1jb250ZW50LSR7KytuZXh0SWR9YDtcblxuICBwdWJsaWMgZXhwYW5kYWJsZTogYm9vbGVhbjtcblxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc01vZGFsOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBjb250YWluZXJFbDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0ZXh0Jywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIHRleHRFbDogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGNvbGxhcHNlZFRleHQ6IHN0cmluZztcblxuICBwcml2YXRlIGV4cGFuZGVkVGV4dDogc3RyaW5nO1xuXG4gIHByaXZhdGUgbmV3bGluZUNvdW50OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBzZWVNb3JlVGV4dDogc3RyaW5nO1xuXG4gIHByaXZhdGUgc2VlTGVzc1RleHQ6IHN0cmluZztcblxuICBwcml2YXRlIHRleHRUb1Nob3c6IHN0cmluZztcblxuICBwcml2YXRlIF9tYXhMZW5ndGggPSAyMDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXNvdXJjZXM6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IFNreU1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRleHRFeHBhbmRBZGFwdGVyOiBTa3lUZXh0RXhwYW5kQWRhcHRlclNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyB0ZXh0RXhwYW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcbiAgICAgIC8vIE1vZGFsIFZpZXdcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgIGlmICghdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU2t5VGV4dEV4cGFuZE1vZGFsQ29tcG9uZW50LCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogU2t5VGV4dEV4cGFuZE1vZGFsQ29udGV4dCxcbiAgICAgICAgICAgIHVzZVZhbHVlOiB7XG4gICAgICAgICAgICAgIGhlYWRlcjogdGhpcy5leHBhbmRNb2RhbFRpdGxlLFxuICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmV4cGFuZGVkVGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vcm1hbCBWaWV3XG4gICAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICB0aGlzLnNldENvbnRhaW5lck1heEhlaWdodCgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYW5pbWF0ZVRleHQodGhpcy5jb2xsYXBzZWRUZXh0LCB0aGlzLmV4cGFuZGVkVGV4dCwgdHJ1ZSk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0Q29udGFpbmVyTWF4SGVpZ2h0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYW5pbWF0ZVRleHQodGhpcy5leHBhbmRlZFRleHQsIHRoaXMuY29sbGFwc2VkVGV4dCwgZmFsc2UpO1xuICAgICAgICB9LCAxMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgdGhlIGNvcnJlY3QgdGV4dCBpcyBkaXNwbGF5ZWRcbiAgICB0aGlzLnRleHRFeHBhbmRBZGFwdGVyLnNldFRleHQodGhpcy50ZXh0RWwsIHRoaXMudGV4dFRvU2hvdyk7XG4gICAgLy8gU2V0IGhlaWdodCBiYWNrIHRvIGF1dG8gc28gdGhlIGJyb3dzZXIgY2FuIGNoYW5nZSB0aGUgaGVpZ2h0IGFzIG5lZWRlZCB3aXRoIHdpbmRvdyBjaGFuZ2VzXG4gICAgdGhpcy50ZXh0RXhwYW5kQWRhcHRlci5zZXRDb250YWluZXJIZWlnaHQodGhpcy5jb250YWluZXJFbCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKFtcbiAgICAgIHRoaXMucmVzb3VyY2VzLmdldFN0cmluZygnc2t5dXhfdGV4dF9leHBhbmRfc2VlX21vcmUnKSxcbiAgICAgIHRoaXMucmVzb3VyY2VzLmdldFN0cmluZygnc2t5dXhfdGV4dF9leHBhbmRfc2VlX2xlc3MnKSxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc291cmNlcykgPT4ge1xuICAgICAgICB0aGlzLnNlZU1vcmVUZXh0ID0gcmVzb3VyY2VzWzBdO1xuICAgICAgICB0aGlzLnNlZUxlc3NUZXh0ID0gcmVzb3VyY2VzWzFdO1xuICAgICAgICB0aGlzLnNldHVwKHRoaXMuZXhwYW5kZWRUZXh0KTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kTW9kYWxUaXRsZSkge1xuICAgICAgICAgIHRoaXMucmVzb3VyY2VzXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF90ZXh0X2V4cGFuZF9tb2RhbF90aXRsZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5leHBhbmRNb2RhbFRpdGxlID0gcmVzb3VyY2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lck1heEhlaWdodCgpOiB2b2lkIHtcbiAgICAvLyBlbnN1cmUgZXZlcnl0aGluZyBpcyByZXNldFxuICAgIHRoaXMuYW5pbWF0aW9uRW5kKCk7XG4gICAgLyogQmVmb3JlIGFuaW1hdGlvbiBpcyBraWNrZWQgb2ZmLCBlbnN1cmUgdGhhdCBhIG1heEhlaWdodCBleGlzdHMgKi9cbiAgICAvKiBPbmNlIHdlIGhhdmUgc3VwcG9ydCBmb3IgYW5ndWxhciB2NCBhbmltYXRpb25zIHdpdGggcGFyYW1ldGVycyB3ZSBjYW4gdXNlIHRoYXQgaW5zdGVhZCAqL1xuICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSB0aGlzLnRleHRFeHBhbmRBZGFwdGVyLmdldENvbnRhaW5lckhlaWdodChcbiAgICAgIHRoaXMuY29udGFpbmVyRWxcbiAgICApO1xuICAgIHRoaXMudGV4dEV4cGFuZEFkYXB0ZXIuc2V0Q29udGFpbmVySGVpZ2h0KFxuICAgICAgdGhpcy5jb250YWluZXJFbCxcbiAgICAgIGAke2N1cnJlbnRIZWlnaHR9cHhgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXAodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5uZXdsaW5lQ291bnQgPSB0aGlzLmdldE5ld2xpbmVDb3VudCh2YWx1ZSk7XG4gICAgICB0aGlzLmNvbGxhcHNlZFRleHQgPSB0aGlzLmdldFRydW5jYXRlZFRleHQodmFsdWUsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICAgIHRoaXMuZXhwYW5kZWRUZXh0ID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzZWRUZXh0ICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1dHRvblRleHQgPSB0aGlzLnNlZU1vcmVUZXh0O1xuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5leHBhbmRhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc01vZGFsID1cbiAgICAgICAgICB0aGlzLm5ld2xpbmVDb3VudCA+IHRoaXMubWF4RXhwYW5kZWROZXdsaW5lcyB8fFxuICAgICAgICAgIHRoaXMuZXhwYW5kZWRUZXh0Lmxlbmd0aCA+IHRoaXMubWF4RXhwYW5kZWRMZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZGFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGV4dFRvU2hvdyA9IHRoaXMuY29sbGFwc2VkVGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0VG9TaG93ID0gJyc7XG4gICAgICB0aGlzLmV4cGFuZGFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy50ZXh0RXhwYW5kQWRhcHRlci5zZXRUZXh0KHRoaXMudGV4dEVsLCB0aGlzLnRleHRUb1Nob3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXdsaW5lQ291bnQodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlLm1hdGNoKC9cXG4vZ2kpO1xuXG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJ1bmNhdGVkVGV4dCh2YWx1ZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGk6IG51bWJlcjtcbiAgICBpZiAodGhpcy50cnVuY2F0ZU5ld2xpbmVzKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZ2ksICcgJyk7XG4gICAgfVxuICAgIC8vIEp1bXAgYWhlYWQgb25lIGNoYXJhY3RlciBhbmQgc2VlIGlmIGl0J3MgYSBzcGFjZSwgYW5kIGlmIGl0IGlzbid0LFxuICAgIC8vIGJhY2sgdXAgdG8gdGhlIGZpcnN0IHNwYWNlIGFuZCBicmVhayB0aGVyZSBzbyBhIHdvcmQgZG9lc24ndCBnZXQgY3V0XG4gICAgLy8gaW4gaGFsZi5cbiAgICBpZiAobGVuZ3RoIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGkgPiBsZW5ndGggLSAxMDsgaS0tKSB7XG4gICAgICAgIGlmICgvXFxzLy50ZXN0KHZhbHVlLmNoYXJBdChpKSkpIHtcbiAgICAgICAgICBsZW5ndGggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zdWJzdHIoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5pbWF0ZVRleHQoXG4gICAgcHJldmlvdXNUZXh0OiBzdHJpbmcsXG4gICAgbmV3VGV4dDogc3RyaW5nLFxuICAgIGV4cGFuZGluZzogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy50ZXh0RXhwYW5kQWRhcHRlcjtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lckVsO1xuICAgIC8vIFJlc2V0IG1heCBoZWlnaHRcbiAgICBhZGFwdGVyLnNldENvbnRhaW5lckhlaWdodChjb250YWluZXIsIHVuZGVmaW5lZCk7XG4gICAgLy8gTWVhc3VyZSB0aGUgY3VycmVudCBoZWlnaHQgc28gd2UgY2FuIGFuaW1hdGUgZnJvbSBpdC5cbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gYWRhcHRlci5nZXRDb250YWluZXJIZWlnaHQoY29udGFpbmVyKTtcbiAgICB0aGlzLnRleHRUb1Nob3cgPSBuZXdUZXh0O1xuICAgIGFkYXB0ZXIuc2V0VGV4dCh0aGlzLnRleHRFbCwgdGhpcy50ZXh0VG9TaG93KTtcbiAgICB0aGlzLmJ1dHRvblRleHQgPSBleHBhbmRpbmcgPyB0aGlzLnNlZUxlc3NUZXh0IDogdGhpcy5zZWVNb3JlVGV4dDtcbiAgICAvLyBNZWFzdXJlIHRoZSBuZXcgaGVpZ2h0IHNvIHdlIGNhbiBhbmltYXRlIHRvIGl0LlxuICAgIGNvbnN0IG5ld0hlaWdodCA9IGFkYXB0ZXIuZ2V0Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcik7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKG5ld0hlaWdodCA8IGN1cnJlbnRIZWlnaHQpIHtcbiAgICAgIC8vIFRoZSBuZXcgdGV4dCBpcyBzbWFsbGVyIHRoYW4gdGhlIG9sZCB0ZXh0LCBzbyBwdXQgdGhlIG9sZCB0ZXh0IGJhY2sgYmVmb3JlIGRvaW5nXG4gICAgICAvLyB0aGUgY29sbGFwc2UgYW5pbWF0aW9uIHRvIGF2b2lkIHNob3dpbmcgYSBiaWcgY2h1bmsgb2Ygd2hpdGVzcGFjZS5cbiAgICAgIGFkYXB0ZXIuc2V0VGV4dCh0aGlzLnRleHRFbCwgcHJldmlvdXNUZXh0KTtcbiAgICB9XG5cbiAgICBhZGFwdGVyLnNldENvbnRhaW5lckhlaWdodChjb250YWluZXIsIGAke2N1cnJlbnRIZWlnaHR9cHhgKTtcbiAgICAvLyBUaGlzIHRpbWVvdXQgaXMgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgYnJvd3NlciBuZWVkaW5nIHRvIHBpY2sgdXAgdGhlIG5vbi1hdXRvIGhlaWdodCBiZWluZyBzZXRcbiAgICAvLyBpbiBvcmRlciB0byBkbyB0aGUgdHJhbnN0aW9uIGluIGhlaWdodCBjb3JyZWN0bHkuIFdpdGhvdXQgaXQgdGhlIHRyYW5zaXRpb24gZG9lcyBub3QgZmlyZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGFkYXB0ZXIuc2V0Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lciwgYCR7bmV3SGVpZ2h0fXB4YCk7XG4gICAgICAvKiBUaGlzIHJlc2V0cyB2YWx1ZXMgaWYgdGhlIHRyYW5zaXRpb24gZG9lcyBub3QgZ2V0IGtpY2tlZCBvZmYgKi9cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZCgpO1xuICAgICAgfSwgNTAwKTtcbiAgICB9LCAxMCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktdGV4dC1leHBhbmQtY29udGFpbmVyXCJcbiAgKHRyYW5zaXRpb25lbmQpPVwiYW5pbWF0aW9uRW5kKClcIlxuICAjY29udGFpbmVyXG4+XG4gIDxzcGFuIGNsYXNzPVwic2t5LXRleHQtZXhwYW5kLXRleHRcIiBbaWRdPVwiY29udGVudFNlY3Rpb25JZFwiICN0ZXh0Pjwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJza3ktdGV4dC1leHBhbmQtZWxsaXBzaXNcIiAqbmdJZj1cIiFpc0V4cGFuZGVkICYmIGV4cGFuZGFibGVcIlxuICAgID4uLi5cbiAgPC9zcGFuPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJleHBhbmRhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1saW5rLWlubGluZSBza3ktdGV4dC1leHBhbmQtc2VlLW1vcmVcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNNb2RhbCA/IHVuZGVmaW5lZCA6IGlzRXhwYW5kZWRcIlxuICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNNb2RhbCA/IHVuZGVmaW5lZCA6IGNvbnRlbnRTZWN0aW9uSWRcIlxuICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXNNb2RhbCA/ICdkaWFsb2cnIDogdW5kZWZpbmVkXCJcbiAgICAoY2xpY2spPVwidGV4dEV4cGFuZCgpXCJcbiAgPlxuICAgIHt7IGJ1dHRvblRleHQgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { SkyI18nModule } from '@skyux/i18n';
4
+ import { SkyModalModule } from '@skyux/modals';
5
+ import { SkyLayoutResourcesModule } from '../shared/sky-layout-resources.module';
6
+ import { SkyTextExpandModalComponent } from './text-expand-modal.component';
7
+ import { SkyTextExpandComponent } from './text-expand.component';
8
+ import * as i0 from "@angular/core";
9
+ export class SkyTextExpandModule {
10
+ }
11
+ SkyTextExpandModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ SkyTextExpandModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandModule, declarations: [SkyTextExpandComponent, SkyTextExpandModalComponent], imports: [SkyI18nModule,
13
+ SkyLayoutResourcesModule,
14
+ SkyModalModule,
15
+ CommonModule], exports: [SkyTextExpandComponent] });
16
+ SkyTextExpandModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandModule, imports: [[
17
+ SkyI18nModule,
18
+ SkyLayoutResourcesModule,
19
+ SkyModalModule,
20
+ CommonModule,
21
+ ]] });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ declarations: [SkyTextExpandComponent, SkyTextExpandModalComponent],
26
+ imports: [
27
+ SkyI18nModule,
28
+ SkyLayoutResourcesModule,
29
+ SkyModalModule,
30
+ CommonModule,
31
+ ],
32
+ exports: [SkyTextExpandComponent],
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1leHBhbmQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQvdGV4dC1leHBhbmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFZakUsTUFBTSxPQUFPLG1CQUFtQjs7Z0hBQW5CLG1CQUFtQjtpSEFBbkIsbUJBQW1CLGlCQVRmLHNCQUFzQixFQUFFLDJCQUEyQixhQUVoRSxhQUFhO1FBQ2Isd0JBQXdCO1FBQ3hCLGNBQWM7UUFDZCxZQUFZLGFBRUosc0JBQXNCO2lIQUVyQixtQkFBbUIsWUFSckI7WUFDUCxhQUFhO1lBQ2Isd0JBQXdCO1lBQ3hCLGNBQWM7WUFDZCxZQUFZO1NBQ2I7MkZBR1UsbUJBQW1CO2tCQVYvQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHNCQUFzQixFQUFFLDJCQUEyQixDQUFDO29CQUNuRSxPQUFPLEVBQUU7d0JBQ1AsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLGNBQWM7d0JBQ2QsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUkxOG5Nb2R1bGUgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lNb2RhbE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9tb2RhbHMnO1xuXG5pbXBvcnQgeyBTa3lMYXlvdXRSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWxheW91dC1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5VGV4dEV4cGFuZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWV4cGFuZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEV4cGFuZENvbXBvbmVudCB9IGZyb20gJy4vdGV4dC1leHBhbmQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2t5VGV4dEV4cGFuZENvbXBvbmVudCwgU2t5VGV4dEV4cGFuZE1vZGFsQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIFNreUkxOG5Nb2R1bGUsXG4gICAgU2t5TGF5b3V0UmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreU1vZGFsTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1NreVRleHRFeHBhbmRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RXhwYW5kTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,37 @@
1
+ import { Injectable, RendererFactory2, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * @internal
5
+ */
6
+ export class SkyTextExpandRepeaterAdapterService {
7
+ constructor(rendererFactory) {
8
+ this.rendererFactory = rendererFactory;
9
+ this.renderer = this.rendererFactory.createRenderer(undefined, undefined);
10
+ }
11
+ getItems(elRef) {
12
+ return elRef.nativeElement.querySelectorAll('.sky-text-expand-repeater-item');
13
+ }
14
+ hideItem(item) {
15
+ this.renderer.setStyle(item, 'display', 'none');
16
+ }
17
+ showItem(item) {
18
+ this.renderer.setStyle(item, 'display', 'list-item');
19
+ }
20
+ getContainerHeight(containerEl) {
21
+ return containerEl.nativeElement.offsetHeight;
22
+ }
23
+ setContainerHeight(containerEl, height) {
24
+ if (height === undefined) {
25
+ this.renderer.removeStyle(containerEl.nativeElement, 'max-height');
26
+ }
27
+ else {
28
+ this.renderer.setStyle(containerEl.nativeElement, 'max-height', height);
29
+ }
30
+ }
31
+ }
32
+ SkyTextExpandRepeaterAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
33
+ SkyTextExpandRepeaterAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterAdapterService });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterAdapterService, decorators: [{
35
+ type: Injectable
36
+ }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1leHBhbmQtcmVwZWF0ZXItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQtcmVwZWF0ZXIvdGV4dC1leHBhbmQtcmVwZWF0ZXItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBRVYsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDOztBQUV2Qjs7R0FFRztBQUVILE1BQU0sT0FBTyxtQ0FBbUM7SUFHOUMsWUFBb0IsZUFBaUM7UUFBakMsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBaUI7UUFDL0IsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUN6QyxnQ0FBZ0MsQ0FDakMsQ0FBQztJQUNKLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBaUI7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQWlCO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFdBQXVCO1FBQy9DLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFdBQXVCLEVBQUUsTUFBYztRQUMvRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNwRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDOztnSUEvQlUsbUNBQW1DO29JQUFuQyxtQ0FBbUM7MkZBQW5DLG1DQUFtQztrQkFEL0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGFibGUsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJGYWN0b3J5Mixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyU2VydmljZSB7XG4gIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xuICAgIHRoaXMucmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcih1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbXMoZWxSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICByZXR1cm4gZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJy5za3ktdGV4dC1leHBhbmQtcmVwZWF0ZXItaXRlbSdcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGhpZGVJdGVtKGl0ZW06IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtLCAnZGlzcGxheScsICdub25lJyk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0l0ZW0oaXRlbTogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGl0ZW0sICdkaXNwbGF5JywgJ2xpc3QtaXRlbScpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRhaW5lckhlaWdodChjb250YWluZXJFbDogRWxlbWVudFJlZikge1xuICAgIHJldHVybiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250YWluZXJIZWlnaHQoY29udGFpbmVyRWw6IEVsZW1lbnRSZWYsIGhlaWdodDogc3RyaW5nKSB7XG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQsICdtYXgtaGVpZ2h0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCwgJ21heC1oZWlnaHQnLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,171 @@
1
+ import { ChangeDetectorRef, Component, ElementRef, Input, TemplateRef, ViewChild, } from '@angular/core';
2
+ import { SkyLibResourcesService } from '@skyux/i18n';
3
+ import { forkJoin as observableForkJoin } from 'rxjs';
4
+ import { take } from 'rxjs/operators';
5
+ import { SkyTextExpandRepeaterAdapterService } from './text-expand-repeater-adapter.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@skyux/i18n";
8
+ import * as i2 from "./text-expand-repeater-adapter.service";
9
+ import * as i3 from "@angular/common";
10
+ /**
11
+ * Auto-incrementing integer used to generate unique ids for text expand repeater components.
12
+ */
13
+ let nextId = 0;
14
+ export class SkyTextExpandRepeaterComponent {
15
+ constructor(resources, elRef, textExpandRepeaterAdapter, changeDetector) {
16
+ this.resources = resources;
17
+ this.elRef = elRef;
18
+ this.textExpandRepeaterAdapter = textExpandRepeaterAdapter;
19
+ this.changeDetector = changeDetector;
20
+ /**
21
+ * Specifies the style of bullet to use
22
+ * @default "unordered"
23
+ */
24
+ this.listStyle = 'unordered';
25
+ this.contentSectionId = `sky-text-expand-repeater-content-${++nextId}`;
26
+ this.isExpanded = false;
27
+ }
28
+ ngAfterViewInit() {
29
+ if (this.contentItems) {
30
+ this.items = this.textExpandRepeaterAdapter.getItems(this.elRef);
31
+ for (let i = this.maxItems; i < this.contentItems.length; i++) {
32
+ this.textExpandRepeaterAdapter.hideItem(this.items[i]);
33
+ }
34
+ }
35
+ observableForkJoin([
36
+ this.resources.getString('skyux_text_expand_see_more'),
37
+ this.resources.getString('skyux_text_expand_see_less'),
38
+ ])
39
+ .pipe(take(1))
40
+ .subscribe((resources) => {
41
+ this.seeMoreText = resources[0];
42
+ this.seeLessText = resources[1];
43
+ /* sanity check */
44
+ /* istanbul ignore else */
45
+ if (!this.isExpanded) {
46
+ this.buttonText = this.seeMoreText;
47
+ }
48
+ else {
49
+ this.buttonText = this.seeLessText;
50
+ }
51
+ this.changeDetector.detectChanges();
52
+ });
53
+ }
54
+ ngOnChanges(changes) {
55
+ /* istanbul ignore else */
56
+ if (changes.maxItems || changes.data) {
57
+ this.setup(this.data);
58
+ }
59
+ }
60
+ animationEnd() {
61
+ // Ensure the correct items are displayed
62
+ if (!this.isExpanded) {
63
+ for (let i = this.maxItems; i < this.contentItems.length; i++) {
64
+ this.textExpandRepeaterAdapter.hideItem(this.items[i]);
65
+ }
66
+ }
67
+ // Set height back to auto so the browser can change the height as needed with window changes
68
+ this.textExpandRepeaterAdapter.setContainerHeight(this.containerEl, undefined);
69
+ }
70
+ repeaterExpand() {
71
+ if (!this.isExpanded) {
72
+ this.setContainerMaxHeight();
73
+ setTimeout(() => {
74
+ this.isExpanded = true;
75
+ this.animateRepeater(true);
76
+ });
77
+ }
78
+ else {
79
+ this.setContainerMaxHeight();
80
+ setTimeout(() => {
81
+ this.isExpanded = false;
82
+ this.animateRepeater(false);
83
+ });
84
+ }
85
+ }
86
+ setContainerMaxHeight() {
87
+ // ensure everything is reset
88
+ this.animationEnd();
89
+ /* Before animation is kicked off, ensure that a maxHeight exists */
90
+ /* Once we have support for angular v4 animations with parameters we can use that instead */
91
+ const currentHeight = this.textExpandRepeaterAdapter.getContainerHeight(this.containerEl);
92
+ this.textExpandRepeaterAdapter.setContainerHeight(this.containerEl, `${currentHeight}px`);
93
+ }
94
+ animateRepeater(expanding) {
95
+ const adapter = this.textExpandRepeaterAdapter;
96
+ const container = this.containerEl;
97
+ adapter.setContainerHeight(container, undefined);
98
+ const currentHeight = adapter.getContainerHeight(container);
99
+ for (let i = this.maxItems; i < this.contentItems.length; i++) {
100
+ if (!expanding) {
101
+ adapter.hideItem(this.items[i]);
102
+ }
103
+ else {
104
+ adapter.showItem(this.items[i]);
105
+ }
106
+ }
107
+ const newHeight = adapter.getContainerHeight(container);
108
+ if (!expanding) {
109
+ this.buttonText = this.seeMoreText;
110
+ }
111
+ else {
112
+ this.buttonText = this.seeLessText;
113
+ }
114
+ if (newHeight < currentHeight) {
115
+ // The new text is smaller than the old text, so put the old text back before doing
116
+ // the collapse animation to avoid showing a big chunk of whitespace.
117
+ for (let i = this.maxItems; i < this.contentItems.length; i++) {
118
+ adapter.showItem(this.items[i]);
119
+ }
120
+ }
121
+ adapter.setContainerHeight(container, `${currentHeight}px`);
122
+ // This timeout is necessary due to the browser needing to pick up the non-auto height being set
123
+ // in order to do the transtion in height correctly. Without it the transition does not fire.
124
+ setTimeout(() => {
125
+ adapter.setContainerHeight(container, `${newHeight}px`);
126
+ /* This resets values if the transition does not get kicked off */
127
+ setTimeout(() => {
128
+ this.animationEnd();
129
+ }, 500);
130
+ }, 10);
131
+ }
132
+ setup(value) {
133
+ if (value) {
134
+ const length = value.length;
135
+ if (length > this.maxItems) {
136
+ this.expandable = true;
137
+ this.buttonText = this.seeMoreText;
138
+ this.isExpanded = false;
139
+ }
140
+ else {
141
+ this.expandable = false;
142
+ }
143
+ this.contentItems = value;
144
+ }
145
+ else {
146
+ this.contentItems = undefined;
147
+ this.expandable = false;
148
+ }
149
+ }
150
+ }
151
+ SkyTextExpandRepeaterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterComponent, deps: [{ token: i1.SkyLibResourcesService }, { token: i0.ElementRef }, { token: i2.SkyTextExpandRepeaterAdapterService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
152
+ SkyTextExpandRepeaterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyTextExpandRepeaterComponent, selector: "sky-text-expand-repeater", inputs: { data: "data", itemTemplate: "itemTemplate", listStyle: "listStyle", maxItems: "maxItems" }, providers: [SkyTextExpandRepeaterAdapterService], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sky-text-expand-repeater\">\n <ul\n *ngIf=\"listStyle !== 'ordered'\"\n class=\"sky-text-expand-repeater-container\"\n [id]=\"contentSectionId\"\n (transitionend)=\"animationEnd()\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-list-style-none': listStyle === 'unstyled'\n }\"\n #container\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\"></ng-template>\n </ul>\n <ol\n *ngIf=\"listStyle === 'ordered'\"\n class=\"sky-text-expand-repeater-container\"\n [id]=\"contentSectionId\"\n (transitionend)=\"animationEnd()\"\n #container\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\"></ng-template>\n </ol>\n <button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-repeater-see-more\"\n [attr.aria-expanded]=\"isExpanded\"\n [attr.aria-controls]=\"contentSectionId\"\n (click)=\"repeaterExpand()\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-see-more-list-style-none':\n listStyle === 'unstyled'\n }\"\n >\n {{ buttonText }}\n </button>\n</div>\n\n<ng-template let-item #defaultItemTemplate>\n {{ item }}\n</ng-template>\n\n<ng-template #listItemTemplate>\n <li *ngFor=\"let item of contentItems\" class=\"sky-text-expand-repeater-item\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-template>\n </li>\n</ng-template>\n", styles: [".sky-text-expand-repeater-container{overflow-y:hidden;height:auto;margin-bottom:0;transition:max-height .25s}.sky-text-expand-repeater-see-more{white-space:nowrap;margin-left:40px}.sky-text-expand-repeater-list-style-none{list-style-type:none;padding-left:0}.sky-text-expand-repeater-see-more-list-style-none{margin-left:0}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterComponent, decorators: [{
154
+ type: Component,
155
+ args: [{ selector: 'sky-text-expand-repeater', providers: [SkyTextExpandRepeaterAdapterService], template: "<div class=\"sky-text-expand-repeater\">\n <ul\n *ngIf=\"listStyle !== 'ordered'\"\n class=\"sky-text-expand-repeater-container\"\n [id]=\"contentSectionId\"\n (transitionend)=\"animationEnd()\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-list-style-none': listStyle === 'unstyled'\n }\"\n #container\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\"></ng-template>\n </ul>\n <ol\n *ngIf=\"listStyle === 'ordered'\"\n class=\"sky-text-expand-repeater-container\"\n [id]=\"contentSectionId\"\n (transitionend)=\"animationEnd()\"\n #container\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\"></ng-template>\n </ol>\n <button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-repeater-see-more\"\n [attr.aria-expanded]=\"isExpanded\"\n [attr.aria-controls]=\"contentSectionId\"\n (click)=\"repeaterExpand()\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-see-more-list-style-none':\n listStyle === 'unstyled'\n }\"\n >\n {{ buttonText }}\n </button>\n</div>\n\n<ng-template let-item #defaultItemTemplate>\n {{ item }}\n</ng-template>\n\n<ng-template #listItemTemplate>\n <li *ngFor=\"let item of contentItems\" class=\"sky-text-expand-repeater-item\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-template>\n </li>\n</ng-template>\n", styles: [".sky-text-expand-repeater-container{overflow-y:hidden;height:auto;margin-bottom:0;transition:max-height .25s}.sky-text-expand-repeater-see-more{white-space:nowrap;margin-left:40px}.sky-text-expand-repeater-list-style-none{list-style-type:none;padding-left:0}.sky-text-expand-repeater-see-more-list-style-none{margin-left:0}\n"] }]
156
+ }], ctorParameters: function () { return [{ type: i1.SkyLibResourcesService }, { type: i0.ElementRef }, { type: i2.SkyTextExpandRepeaterAdapterService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
157
+ type: Input
158
+ }], itemTemplate: [{
159
+ type: Input
160
+ }], listStyle: [{
161
+ type: Input
162
+ }], maxItems: [{
163
+ type: Input
164
+ }], containerEl: [{
165
+ type: ViewChild,
166
+ args: ['container', {
167
+ read: ElementRef,
168
+ static: false,
169
+ }]
170
+ }] } });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1leHBhbmQtcmVwZWF0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQtcmVwZWF0ZXIvdGV4dC1leHBhbmQtcmVwZWF0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQtcmVwZWF0ZXIvdGV4dC1leHBhbmQtcmVwZWF0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFHTCxXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCxPQUFPLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFHN0Y7O0dBRUc7QUFDSCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFRZixNQUFNLE9BQU8sOEJBQThCO0lBOEN6QyxZQUNVLFNBQWlDLEVBQ2pDLEtBQWlCLEVBQ2pCLHlCQUE4RCxFQUM5RCxjQUFpQztRQUhqQyxjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBcUM7UUFDOUQsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBbkMzQzs7O1dBR0c7UUFFSSxjQUFTLEdBQXVDLFdBQVcsQ0FB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Q0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7MkhBekxVLDhCQUE4QjsrR0FBOUIsOEJBQThCLHlKQUY5QixDQUFDLG1DQUFtQyxDQUFDLCtHQXlDeEMsVUFBVSxrRENyRXBCLDA5Q0FrREE7MkZEcEJhLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSwwQkFBMEIsYUFHekIsQ0FBQyxtQ0FBbUMsQ0FBQzt3TkFTekMsSUFBSTtzQkFEVixLQUFLO2dCQU9DLFlBQVk7c0JBRGxCLEtBQUs7Z0JBUUMsU0FBUztzQkFEZixLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSztnQkFpQkUsV0FBVztzQkFKbEIsU0FBUzt1QkFBQyxXQUFXLEVBQUU7d0JBQ3RCLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsS0FBSztxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vdGV4dC1leHBhbmQtcmVwZWF0ZXItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFeHBhbmRSZXBlYXRlckxpc3RTdHlsZVR5cGUgfSBmcm9tICcuL3R5cGVzL3RleHQtZXhwYW5kLXJlcGVhdGVyLWxpc3Qtc3R5bGUtdHlwZSc7XG5cbi8qKlxuICogQXV0by1pbmNyZW1lbnRpbmcgaW50ZWdlciB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBpZHMgZm9yIHRleHQgZXhwYW5kIHJlcGVhdGVyIGNvbXBvbmVudHMuXG4gKi9cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1leHBhbmQtcmVwZWF0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1leHBhbmQtcmVwZWF0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWV4cGFuZC1yZXBlYXRlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtTa3lUZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFeHBhbmRSZXBlYXRlckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlc1xue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXRhIHRvIHRydW5jYXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGE6IGFueVtdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSB0ZW1wbGF0ZSBmb3IgaXRlbXMgaW4gdGhlIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN0eWxlIG9mIGJ1bGxldCB0byB1c2VcbiAgICogQGRlZmF1bHQgXCJ1bm9yZGVyZWRcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxpc3RTdHlsZTogU2t5VGV4dEV4cGFuZFJlcGVhdGVyTGlzdFN0eWxlVHlwZSA9ICd1bm9yZGVyZWQnO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBpdGVtcyB0byBkaXNwbGF5IGJlZm9yZSB0cnVuY2F0aW5nIHRoZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1heEl0ZW1zOiBudW1iZXI7XG5cbiAgcHVibGljIGJ1dHRvblRleHQ6IHN0cmluZztcbiAgcHVibGljIGNvbnRlbnRJdGVtczogQXJyYXk8YW55PjtcbiAgcHVibGljIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb250ZW50U2VjdGlvbklkID0gYHNreS10ZXh0LWV4cGFuZC1yZXBlYXRlci1jb250ZW50LSR7KytuZXh0SWR9YDtcblxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc2VlTW9yZVRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZWVMZXNzVGV4dDogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICAgIHN0YXRpYzogZmFsc2UsXG4gIH0pXG4gIHByaXZhdGUgY29udGFpbmVyRWw6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBpdGVtczogQXJyYXk8SFRNTEVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVzb3VyY2VzOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB0ZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyOiBTa3lUZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50SXRlbXMpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnRleHRFeHBhbmRSZXBlYXRlckFkYXB0ZXIuZ2V0SXRlbXModGhpcy5lbFJlZik7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5tYXhJdGVtczsgaSA8IHRoaXMuY29udGVudEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMudGV4dEV4cGFuZFJlcGVhdGVyQWRhcHRlci5oaWRlSXRlbSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvYnNlcnZhYmxlRm9ya0pvaW4oW1xuICAgICAgdGhpcy5yZXNvdXJjZXMuZ2V0U3RyaW5nKCdza3l1eF90ZXh0X2V4cGFuZF9zZWVfbW9yZScpLFxuICAgICAgdGhpcy5yZXNvdXJjZXMuZ2V0U3RyaW5nKCdza3l1eF90ZXh0X2V4cGFuZF9zZWVfbGVzcycpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgocmVzb3VyY2VzKSA9PiB7XG4gICAgICAgIHRoaXMuc2VlTW9yZVRleHQgPSByZXNvdXJjZXNbMF07XG4gICAgICAgIHRoaXMuc2VlTGVzc1RleHQgPSByZXNvdXJjZXNbMV07XG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMuc2VlTW9yZVRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gdGhpcy5zZWVMZXNzVGV4dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjaGFuZ2VzLm1heEl0ZW1zIHx8IGNoYW5nZXMuZGF0YSkge1xuICAgICAgdGhpcy5zZXR1cCh0aGlzLmRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRpb25FbmQoKSB7XG4gICAgLy8gRW5zdXJlIHRoZSBjb3JyZWN0IGl0ZW1zIGFyZSBkaXNwbGF5ZWRcbiAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMubWF4SXRlbXM7IGkgPCB0aGlzLmNvbnRlbnRJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnRleHRFeHBhbmRSZXBlYXRlckFkYXB0ZXIuaGlkZUl0ZW0odGhpcy5pdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNldCBoZWlnaHQgYmFjayB0byBhdXRvIHNvIHRoZSBicm93c2VyIGNhbiBjaGFuZ2UgdGhlIGhlaWdodCBhcyBuZWVkZWQgd2l0aCB3aW5kb3cgY2hhbmdlc1xuICAgIHRoaXMudGV4dEV4cGFuZFJlcGVhdGVyQWRhcHRlci5zZXRDb250YWluZXJIZWlnaHQoXG4gICAgICB0aGlzLmNvbnRhaW5lckVsLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXBlYXRlckV4cGFuZCgpIHtcbiAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5zZXRDb250YWluZXJNYXhIZWlnaHQoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmFuaW1hdGVSZXBlYXRlcih0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldENvbnRhaW5lck1heEhlaWdodCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFuaW1hdGVSZXBlYXRlcihmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lck1heEhlaWdodCgpIHtcbiAgICAvLyBlbnN1cmUgZXZlcnl0aGluZyBpcyByZXNldFxuICAgIHRoaXMuYW5pbWF0aW9uRW5kKCk7XG4gICAgLyogQmVmb3JlIGFuaW1hdGlvbiBpcyBraWNrZWQgb2ZmLCBlbnN1cmUgdGhhdCBhIG1heEhlaWdodCBleGlzdHMgKi9cbiAgICAvKiBPbmNlIHdlIGhhdmUgc3VwcG9ydCBmb3IgYW5ndWxhciB2NCBhbmltYXRpb25zIHdpdGggcGFyYW1ldGVycyB3ZSBjYW4gdXNlIHRoYXQgaW5zdGVhZCAqL1xuICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSB0aGlzLnRleHRFeHBhbmRSZXBlYXRlckFkYXB0ZXIuZ2V0Q29udGFpbmVySGVpZ2h0KFxuICAgICAgdGhpcy5jb250YWluZXJFbFxuICAgICk7XG4gICAgdGhpcy50ZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyLnNldENvbnRhaW5lckhlaWdodChcbiAgICAgIHRoaXMuY29udGFpbmVyRWwsXG4gICAgICBgJHtjdXJyZW50SGVpZ2h0fXB4YFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFuaW1hdGVSZXBlYXRlcihleHBhbmRpbmc6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy50ZXh0RXhwYW5kUmVwZWF0ZXJBZGFwdGVyO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyRWw7XG5cbiAgICBhZGFwdGVyLnNldENvbnRhaW5lckhlaWdodChjb250YWluZXIsIHVuZGVmaW5lZCk7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IGFkYXB0ZXIuZ2V0Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcik7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMubWF4SXRlbXM7IGkgPCB0aGlzLmNvbnRlbnRJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFleHBhbmRpbmcpIHtcbiAgICAgICAgYWRhcHRlci5oaWRlSXRlbSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkYXB0ZXIuc2hvd0l0ZW0odGhpcy5pdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0hlaWdodCA9IGFkYXB0ZXIuZ2V0Q29udGFpbmVySGVpZ2h0KGNvbnRhaW5lcik7XG4gICAgaWYgKCFleHBhbmRpbmcpIHtcbiAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMuc2VlTW9yZVRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMuc2VlTGVzc1RleHQ7XG4gICAgfVxuICAgIGlmIChuZXdIZWlnaHQgPCBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAvLyBUaGUgbmV3IHRleHQgaXMgc21hbGxlciB0aGFuIHRoZSBvbGQgdGV4dCwgc28gcHV0IHRoZSBvbGQgdGV4dCBiYWNrIGJlZm9yZSBkb2luZ1xuICAgICAgLy8gdGhlIGNvbGxhcHNlIGFuaW1hdGlvbiB0byBhdm9pZCBzaG93aW5nIGEgYmlnIGNodW5rIG9mIHdoaXRlc3BhY2UuXG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5tYXhJdGVtczsgaSA8IHRoaXMuY29udGVudEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFkYXB0ZXIuc2hvd0l0ZW0odGhpcy5pdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWRhcHRlci5zZXRDb250YWluZXJIZWlnaHQoY29udGFpbmVyLCBgJHtjdXJyZW50SGVpZ2h0fXB4YCk7XG4gICAgLy8gVGhpcyB0aW1lb3V0IGlzIG5lY2Vzc2FyeSBkdWUgdG8gdGhlIGJyb3dzZXIgbmVlZGluZyB0byBwaWNrIHVwIHRoZSBub24tYXV0byBoZWlnaHQgYmVpbmcgc2V0XG4gICAgLy8gaW4gb3JkZXIgdG8gZG8gdGhlIHRyYW5zdGlvbiBpbiBoZWlnaHQgY29ycmVjdGx5LiBXaXRob3V0IGl0IHRoZSB0cmFuc2l0aW9uIGRvZXMgbm90IGZpcmUuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBhZGFwdGVyLnNldENvbnRhaW5lckhlaWdodChjb250YWluZXIsIGAke25ld0hlaWdodH1weGApO1xuICAgICAgLyogVGhpcyByZXNldHMgdmFsdWVzIGlmIHRoZSB0cmFuc2l0aW9uIGRvZXMgbm90IGdldCBraWNrZWQgb2ZmICovXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5hbmltYXRpb25FbmQoKTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cCh2YWx1ZTogQXJyYXk8YW55Pikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IHRoaXMubWF4SXRlbXMpIHtcbiAgICAgICAgdGhpcy5leHBhbmRhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gdGhpcy5zZWVNb3JlVGV4dDtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZGFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudEl0ZW1zID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudEl0ZW1zID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5leHBhbmRhYmxlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LXRleHQtZXhwYW5kLXJlcGVhdGVyXCI+XG4gIDx1bFxuICAgICpuZ0lmPVwibGlzdFN0eWxlICE9PSAnb3JkZXJlZCdcIlxuICAgIGNsYXNzPVwic2t5LXRleHQtZXhwYW5kLXJlcGVhdGVyLWNvbnRhaW5lclwiXG4gICAgW2lkXT1cImNvbnRlbnRTZWN0aW9uSWRcIlxuICAgICh0cmFuc2l0aW9uZW5kKT1cImFuaW1hdGlvbkVuZCgpXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LXRleHQtZXhwYW5kLXJlcGVhdGVyLWxpc3Qtc3R5bGUtbm9uZSc6IGxpc3RTdHlsZSA9PT0gJ3Vuc3R5bGVkJ1xuICAgIH1cIlxuICAgICNjb250YWluZXJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0SXRlbVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC91bD5cbiAgPG9sXG4gICAgKm5nSWY9XCJsaXN0U3R5bGUgPT09ICdvcmRlcmVkJ1wiXG4gICAgY2xhc3M9XCJza3ktdGV4dC1leHBhbmQtcmVwZWF0ZXItY29udGFpbmVyXCJcbiAgICBbaWRdPVwiY29udGVudFNlY3Rpb25JZFwiXG4gICAgKHRyYW5zaXRpb25lbmQpPVwiYW5pbWF0aW9uRW5kKClcIlxuICAgICNjb250YWluZXJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0SXRlbVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9vbD5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiZXhwYW5kYWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGluay1pbmxpbmUgc2t5LXRleHQtZXhwYW5kLXJlcGVhdGVyLXNlZS1tb3JlXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxuICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiY29udGVudFNlY3Rpb25JZFwiXG4gICAgKGNsaWNrKT1cInJlcGVhdGVyRXhwYW5kKClcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktdGV4dC1leHBhbmQtcmVwZWF0ZXItc2VlLW1vcmUtbGlzdC1zdHlsZS1ub25lJzpcbiAgICAgICAgbGlzdFN0eWxlID09PSAndW5zdHlsZWQnXG4gICAgfVwiXG4gID5cbiAgICB7eyBidXR0b25UZXh0IH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtaXRlbSAjZGVmYXVsdEl0ZW1UZW1wbGF0ZT5cbiAge3sgaXRlbSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0SXRlbVRlbXBsYXRlPlxuICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudEl0ZW1zXCIgY2xhc3M9XCJza3ktdGV4dC1leHBhbmQtcmVwZWF0ZXItaXRlbVwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlIHx8IGRlZmF1bHRJdGVtVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgID48L25nLXRlbXBsYXRlPlxuICA8L2xpPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { SkyI18nModule } from '@skyux/i18n';
4
+ import { SkyLayoutResourcesModule } from '../shared/sky-layout-resources.module';
5
+ import { SkyTextExpandRepeaterComponent } from './text-expand-repeater.component';
6
+ import * as i0 from "@angular/core";
7
+ export class SkyTextExpandRepeaterModule {
8
+ }
9
+ SkyTextExpandRepeaterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ SkyTextExpandRepeaterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterModule, declarations: [SkyTextExpandRepeaterComponent], imports: [SkyI18nModule, SkyLayoutResourcesModule, CommonModule], exports: [SkyTextExpandRepeaterComponent] });
11
+ SkyTextExpandRepeaterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterModule, imports: [[SkyI18nModule, SkyLayoutResourcesModule, CommonModule]] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyTextExpandRepeaterModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [SkyTextExpandRepeaterComponent],
16
+ imports: [SkyI18nModule, SkyLayoutResourcesModule, CommonModule],
17
+ exports: [SkyTextExpandRepeaterComponent],
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1leHBhbmQtcmVwZWF0ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQtcmVwZWF0ZXIvdGV4dC1leHBhbmQtcmVwZWF0ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFakYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBT2xGLE1BQU0sT0FBTywyQkFBMkI7O3dIQUEzQiwyQkFBMkI7eUhBQTNCLDJCQUEyQixpQkFKdkIsOEJBQThCLGFBQ25DLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxZQUFZLGFBQ3JELDhCQUE4Qjt5SEFFN0IsMkJBQTJCLFlBSDdCLENBQUMsYUFBYSxFQUFFLHdCQUF3QixFQUFFLFlBQVksQ0FBQzsyRkFHckQsMkJBQTJCO2tCQUx2QyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDhCQUE4QixDQUFDO29CQUM5QyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsWUFBWSxDQUFDO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztpQkFDMUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUkxOG5Nb2R1bGUgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IFNreUxheW91dFJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktbGF5b3V0LXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RXhwYW5kUmVwZWF0ZXJDb21wb25lbnQgfSBmcm9tICcuL3RleHQtZXhwYW5kLXJlcGVhdGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1NreVRleHRFeHBhbmRSZXBlYXRlckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtTa3lJMThuTW9kdWxlLCBTa3lMYXlvdXRSZXNvdXJjZXNNb2R1bGUsIENvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtTa3lUZXh0RXhwYW5kUmVwZWF0ZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RXhwYW5kUmVwZWF0ZXJNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1leHBhbmQtcmVwZWF0ZXItbGlzdC1zdHlsZS10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvbGliL21vZHVsZXMvdGV4dC1leHBhbmQtcmVwZWF0ZXIvdHlwZXMvdGV4dC1leHBhbmQtcmVwZWF0ZXItbGlzdC1zdHlsZS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTa3lUZXh0RXhwYW5kUmVwZWF0ZXJMaXN0U3R5bGVUeXBlID1cbiAgfCAndW5vcmRlcmVkJ1xuICB8ICdvcmRlcmVkJ1xuICB8ICd1bnN0eWxlZCc7XG4iXX0=