scu-web-components 0.0.35 → 0.0.36

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 (1927) hide show
  1. package/README.md +52 -42
  2. package/bin/cli.mjs +21 -21
  3. package/dist/chunks/axe.min.U7WNHTHQ.js +2 -0
  4. package/dist/chunks/axe.min.U7WNHTHQ.js.gz +0 -0
  5. package/dist/chunks/{axe.min.W2EOROUM.js.map → axe.min.U7WNHTHQ.js.map} +0 -0
  6. package/dist/chunks/axe.min.U7WNHTHQ.js.map.gz +0 -0
  7. package/dist/chunks/{chunk.A2HETGP5.js → chunk.223WJTWZ.js} +1 -1
  8. package/dist/chunks/chunk.223WJTWZ.js.gz +0 -0
  9. package/dist/chunks/{chunk.A2HETGP5.js.map → chunk.223WJTWZ.js.map} +1 -1
  10. package/dist/chunks/chunk.223WJTWZ.js.map.gz +0 -0
  11. package/dist/chunks/{chunk.YNLLA3ZB.js → chunk.2GGC3YVW.js} +2 -2
  12. package/dist/chunks/chunk.2GGC3YVW.js.gz +0 -0
  13. package/dist/chunks/chunk.2GGC3YVW.js.map +7 -0
  14. package/dist/chunks/chunk.2GGC3YVW.js.map.gz +0 -0
  15. package/dist/chunks/{chunk.3R7BMGFH.js → chunk.2PTB2ZGW.js} +3 -3
  16. package/dist/chunks/chunk.2PTB2ZGW.js.gz +0 -0
  17. package/dist/chunks/chunk.2PTB2ZGW.js.map +7 -0
  18. package/dist/chunks/chunk.2PTB2ZGW.js.map.gz +0 -0
  19. package/dist/chunks/{chunk.B7II36CO.js → chunk.2T4VPIKP.js} +1 -1
  20. package/dist/chunks/chunk.2T4VPIKP.js.gz +0 -0
  21. package/dist/chunks/chunk.2T4VPIKP.js.map +7 -0
  22. package/dist/chunks/chunk.2T4VPIKP.js.map.gz +0 -0
  23. package/dist/chunks/{chunk.D23ORNEA.js → chunk.36ANE3GT.js} +1 -1
  24. package/dist/chunks/chunk.36ANE3GT.js.gz +0 -0
  25. package/dist/chunks/chunk.36ANE3GT.js.map +7 -0
  26. package/dist/chunks/chunk.36ANE3GT.js.map.gz +0 -0
  27. package/dist/chunks/chunk.3DNJZ75B.js.gz +0 -0
  28. package/dist/chunks/chunk.3DNJZ75B.js.map.gz +0 -0
  29. package/dist/chunks/{chunk.TH7XY5AV.js → chunk.3GINL7BY.js} +4 -4
  30. package/dist/chunks/chunk.3GINL7BY.js.gz +0 -0
  31. package/dist/chunks/chunk.3GINL7BY.js.map +7 -0
  32. package/dist/chunks/chunk.3GINL7BY.js.map.gz +0 -0
  33. package/dist/chunks/chunk.3IG37SCP.js +12 -0
  34. package/dist/chunks/chunk.3IG37SCP.js.gz +0 -0
  35. package/dist/chunks/chunk.3IG37SCP.js.map +7 -0
  36. package/dist/chunks/chunk.3IG37SCP.js.map.gz +0 -0
  37. package/dist/chunks/{chunk.IHQUNZQU.js → chunk.4GKNHIQO.js} +4 -4
  38. package/dist/chunks/chunk.4GKNHIQO.js.gz +0 -0
  39. package/dist/chunks/chunk.4GKNHIQO.js.map +7 -0
  40. package/dist/chunks/chunk.4GKNHIQO.js.map.gz +0 -0
  41. package/dist/chunks/{chunk.ZKJROKIG.js → chunk.5BIMBPIM.js} +2 -2
  42. package/dist/chunks/chunk.5BIMBPIM.js.gz +0 -0
  43. package/dist/chunks/chunk.5BIMBPIM.js.map +7 -0
  44. package/dist/chunks/chunk.5BIMBPIM.js.map.gz +0 -0
  45. package/dist/chunks/{chunk.BHAQIBGC.js → chunk.5F2TS4MI.js} +2 -2
  46. package/dist/chunks/chunk.5F2TS4MI.js.gz +0 -0
  47. package/dist/chunks/chunk.5F2TS4MI.js.map +7 -0
  48. package/dist/chunks/chunk.5F2TS4MI.js.map.gz +0 -0
  49. package/dist/chunks/chunk.5HOTUYMS.js +4 -0
  50. package/dist/chunks/chunk.5HOTUYMS.js.gz +0 -0
  51. package/dist/chunks/{chunk.6WTOZOY7.js.map → chunk.5HOTUYMS.js.map} +3 -3
  52. package/dist/chunks/chunk.5HOTUYMS.js.map.gz +0 -0
  53. package/dist/chunks/chunk.5O6SMXQL.js +2 -0
  54. package/dist/chunks/chunk.5O6SMXQL.js.gz +0 -0
  55. package/dist/chunks/chunk.5O6SMXQL.js.map +7 -0
  56. package/dist/chunks/chunk.5O6SMXQL.js.map.gz +0 -0
  57. package/dist/chunks/chunk.5YJY6NT6.js.gz +0 -0
  58. package/dist/chunks/chunk.5YJY6NT6.js.map.gz +0 -0
  59. package/dist/chunks/chunk.6DQVOVVF.js +2 -0
  60. package/dist/chunks/chunk.6DQVOVVF.js.gz +0 -0
  61. package/dist/chunks/{chunk.CN3FBMLH.js.map → chunk.6DQVOVVF.js.map} +0 -0
  62. package/dist/chunks/chunk.6DQVOVVF.js.map.gz +0 -0
  63. package/dist/chunks/chunk.6HCGKTZQ.js +33 -0
  64. package/dist/chunks/chunk.6HCGKTZQ.js.gz +0 -0
  65. package/dist/chunks/chunk.6HCGKTZQ.js.map +7 -0
  66. package/dist/chunks/chunk.6HCGKTZQ.js.map.gz +0 -0
  67. package/dist/chunks/chunk.6YJJGD4O.js.gz +0 -0
  68. package/dist/chunks/chunk.6YJJGD4O.js.map.gz +0 -0
  69. package/dist/chunks/chunk.6YTRIX7O.js +2 -0
  70. package/dist/chunks/chunk.6YTRIX7O.js.gz +0 -0
  71. package/dist/chunks/{chunk.3IHJDK6I.js.map → chunk.6YTRIX7O.js.map} +0 -0
  72. package/dist/chunks/chunk.6YTRIX7O.js.map.gz +0 -0
  73. package/dist/chunks/chunk.74TIZTI7.js +2 -0
  74. package/dist/chunks/chunk.74TIZTI7.js.gz +0 -0
  75. package/dist/chunks/chunk.74TIZTI7.js.map +7 -0
  76. package/dist/chunks/chunk.74TIZTI7.js.map.gz +0 -0
  77. package/dist/chunks/chunk.7A7HJBKL.js.gz +0 -0
  78. package/dist/chunks/chunk.7A7HJBKL.js.map.gz +0 -0
  79. package/dist/chunks/{chunk.7IEAISVE.js → chunk.7QJCD7HR.js} +3 -3
  80. package/dist/chunks/chunk.7QJCD7HR.js.gz +0 -0
  81. package/dist/chunks/chunk.7QJCD7HR.js.map +7 -0
  82. package/dist/chunks/chunk.7QJCD7HR.js.map.gz +0 -0
  83. package/dist/chunks/chunk.7R4H4Y4E.js +2 -0
  84. package/dist/chunks/chunk.7R4H4Y4E.js.gz +0 -0
  85. package/dist/chunks/{chunk.SHURDDW4.js.map → chunk.7R4H4Y4E.js.map} +2 -2
  86. package/dist/chunks/chunk.7R4H4Y4E.js.map.gz +0 -0
  87. package/dist/chunks/chunk.A6Q2K43E.js.gz +0 -0
  88. package/dist/chunks/chunk.A6Q2K43E.js.map.gz +0 -0
  89. package/dist/chunks/{chunk.X3QDN5AD.js → chunk.AP76NHYK.js} +2 -2
  90. package/dist/chunks/chunk.AP76NHYK.js.gz +0 -0
  91. package/dist/chunks/chunk.AP76NHYK.js.map +7 -0
  92. package/dist/chunks/chunk.AP76NHYK.js.map.gz +0 -0
  93. package/dist/chunks/chunk.B5H2OMW3.js +2 -0
  94. package/dist/chunks/chunk.B5H2OMW3.js.gz +0 -0
  95. package/dist/chunks/chunk.B5H2OMW3.js.map +7 -0
  96. package/dist/chunks/chunk.B5H2OMW3.js.map.gz +0 -0
  97. package/dist/chunks/chunk.BZX2XGGQ.js +2 -0
  98. package/dist/chunks/chunk.BZX2XGGQ.js.gz +0 -0
  99. package/dist/chunks/{chunk.TASESTIH.js.map → chunk.BZX2XGGQ.js.map} +0 -0
  100. package/dist/chunks/chunk.BZX2XGGQ.js.map.gz +0 -0
  101. package/dist/chunks/{chunk.TAIV7XKZ.js → chunk.D4A5FFB3.js} +3 -3
  102. package/dist/chunks/chunk.D4A5FFB3.js.gz +0 -0
  103. package/dist/chunks/chunk.D4A5FFB3.js.map +7 -0
  104. package/dist/chunks/chunk.D4A5FFB3.js.map.gz +0 -0
  105. package/dist/chunks/{chunk.SNSOKG54.js → chunk.DMGKHJE5.js} +2 -2
  106. package/dist/chunks/chunk.DMGKHJE5.js.gz +0 -0
  107. package/dist/chunks/chunk.DMGKHJE5.js.map +7 -0
  108. package/dist/chunks/chunk.DMGKHJE5.js.map.gz +0 -0
  109. package/dist/chunks/chunk.DT6HYDDY.js +2 -0
  110. package/dist/chunks/chunk.DT6HYDDY.js.gz +0 -0
  111. package/dist/chunks/chunk.DT6HYDDY.js.map +7 -0
  112. package/dist/chunks/chunk.DT6HYDDY.js.map.gz +0 -0
  113. package/dist/chunks/{chunk.WHRXVSQW.js → chunk.DXDJI6UK.js} +2 -2
  114. package/dist/chunks/chunk.DXDJI6UK.js.gz +0 -0
  115. package/dist/chunks/chunk.DXDJI6UK.js.map +7 -0
  116. package/dist/chunks/chunk.DXDJI6UK.js.map.gz +0 -0
  117. package/dist/chunks/chunk.E2LMFNXM.js +12 -0
  118. package/dist/chunks/chunk.E2LMFNXM.js.gz +0 -0
  119. package/dist/chunks/chunk.E2LMFNXM.js.map +7 -0
  120. package/dist/chunks/chunk.E2LMFNXM.js.map.gz +0 -0
  121. package/dist/chunks/chunk.EJBBXIW3.js.gz +0 -0
  122. package/dist/chunks/chunk.EJBBXIW3.js.map.gz +0 -0
  123. package/dist/chunks/chunk.F5EH24XU.js +2 -0
  124. package/dist/chunks/chunk.F5EH24XU.js.gz +0 -0
  125. package/dist/chunks/{chunk.Z4H6RRS7.js.map → chunk.F5EH24XU.js.map} +0 -0
  126. package/dist/chunks/chunk.F5EH24XU.js.map.gz +0 -0
  127. package/dist/chunks/{chunk.C2WZDJF4.js → chunk.F6VIM5PL.js} +1 -1
  128. package/dist/chunks/chunk.F6VIM5PL.js.gz +0 -0
  129. package/dist/chunks/chunk.F6VIM5PL.js.map +7 -0
  130. package/dist/chunks/chunk.F6VIM5PL.js.map.gz +0 -0
  131. package/dist/chunks/{chunk.ZHMMWIFH.js → chunk.FSF6MEVS.js} +1 -1
  132. package/dist/chunks/chunk.FSF6MEVS.js.gz +0 -0
  133. package/dist/chunks/chunk.FSF6MEVS.js.map +7 -0
  134. package/dist/chunks/chunk.FSF6MEVS.js.map.gz +0 -0
  135. package/dist/chunks/{chunk.IFFRUKMU.js → chunk.FWCHISMV.js} +1 -1
  136. package/dist/chunks/chunk.FWCHISMV.js.gz +0 -0
  137. package/dist/chunks/chunk.FWCHISMV.js.map +7 -0
  138. package/dist/chunks/chunk.FWCHISMV.js.map.gz +0 -0
  139. package/dist/chunks/chunk.GATDLRXZ.js.gz +0 -0
  140. package/dist/chunks/chunk.GATDLRXZ.js.map.gz +0 -0
  141. package/dist/chunks/{chunk.QW4L55OV.js → chunk.GMEO4LZE.js} +2 -2
  142. package/dist/chunks/chunk.GMEO4LZE.js.gz +0 -0
  143. package/dist/chunks/chunk.GMEO4LZE.js.map +7 -0
  144. package/dist/chunks/chunk.GMEO4LZE.js.map.gz +0 -0
  145. package/dist/chunks/{chunk.5FUHFFCY.js → chunk.GUPJLJY4.js} +1 -1
  146. package/dist/chunks/chunk.GUPJLJY4.js.gz +0 -0
  147. package/dist/chunks/chunk.GUPJLJY4.js.map +7 -0
  148. package/dist/chunks/chunk.GUPJLJY4.js.map.gz +0 -0
  149. package/dist/chunks/chunk.GY2K4PRQ.js.gz +0 -0
  150. package/dist/chunks/chunk.GY2K4PRQ.js.map.gz +0 -0
  151. package/dist/chunks/chunk.HD75M3T5.js.gz +0 -0
  152. package/dist/chunks/chunk.HD75M3T5.js.map.gz +0 -0
  153. package/dist/chunks/{chunk.2WX7XMLC.js → chunk.HMMADQ7Y.js} +1 -1
  154. package/dist/chunks/chunk.HMMADQ7Y.js.gz +0 -0
  155. package/dist/chunks/{chunk.2WX7XMLC.js.map → chunk.HMMADQ7Y.js.map} +2 -2
  156. package/dist/chunks/chunk.HMMADQ7Y.js.map.gz +0 -0
  157. package/dist/chunks/{chunk.QSH5IYLY.js → chunk.HPVM5CYA.js} +15 -15
  158. package/dist/chunks/chunk.HPVM5CYA.js.gz +0 -0
  159. package/dist/chunks/chunk.HPVM5CYA.js.map +7 -0
  160. package/dist/chunks/chunk.HPVM5CYA.js.map.gz +0 -0
  161. package/dist/chunks/{chunk.33FSL7Y7.js → chunk.I22BAQME.js} +1 -1
  162. package/dist/chunks/chunk.I22BAQME.js.gz +0 -0
  163. package/dist/chunks/chunk.I22BAQME.js.map +7 -0
  164. package/dist/chunks/chunk.I22BAQME.js.map.gz +0 -0
  165. package/dist/chunks/chunk.I4ZVEUHX.js.gz +0 -0
  166. package/dist/chunks/chunk.I4ZVEUHX.js.map.gz +0 -0
  167. package/dist/chunks/{chunk.V2DFPUQM.js → chunk.IM5FVLMU.js} +2 -2
  168. package/dist/chunks/chunk.IM5FVLMU.js.gz +0 -0
  169. package/dist/chunks/chunk.IM5FVLMU.js.map +7 -0
  170. package/dist/chunks/chunk.IM5FVLMU.js.map.gz +0 -0
  171. package/dist/chunks/{chunk.SWOOH3JG.js → chunk.J7SGRJXX.js} +2 -2
  172. package/dist/chunks/chunk.J7SGRJXX.js.gz +0 -0
  173. package/dist/chunks/chunk.J7SGRJXX.js.map +7 -0
  174. package/dist/chunks/chunk.J7SGRJXX.js.map.gz +0 -0
  175. package/dist/chunks/{chunk.KJY4QBTF.js → chunk.JAF2EZZL.js} +1 -1
  176. package/dist/chunks/chunk.JAF2EZZL.js.gz +0 -0
  177. package/dist/chunks/{chunk.KJY4QBTF.js.map → chunk.JAF2EZZL.js.map} +1 -1
  178. package/dist/chunks/chunk.JAF2EZZL.js.map.gz +0 -0
  179. package/dist/chunks/{chunk.4PFGNBK4.js → chunk.JYKLLRWI.js} +1 -1
  180. package/dist/chunks/chunk.JYKLLRWI.js.gz +0 -0
  181. package/dist/chunks/chunk.JYKLLRWI.js.map +7 -0
  182. package/dist/chunks/chunk.JYKLLRWI.js.map.gz +0 -0
  183. package/dist/chunks/chunk.KBIUGQUO.js.gz +0 -0
  184. package/dist/chunks/chunk.KBIUGQUO.js.map.gz +0 -0
  185. package/dist/chunks/chunk.KSN3XTKS.js.gz +0 -0
  186. package/dist/chunks/chunk.KSN3XTKS.js.map.gz +0 -0
  187. package/dist/chunks/chunk.LF7O52LC.js +2 -0
  188. package/dist/chunks/chunk.LF7O52LC.js.gz +0 -0
  189. package/dist/chunks/{chunk.2VTI5GPU.js.map → chunk.LF7O52LC.js.map} +0 -0
  190. package/dist/chunks/chunk.LF7O52LC.js.map.gz +0 -0
  191. package/dist/chunks/chunk.MNM5PCHW.js.gz +0 -0
  192. package/dist/chunks/chunk.MNM5PCHW.js.map.gz +0 -0
  193. package/dist/chunks/{chunk.HONWLPRG.js → chunk.NBLIIWTN.js} +2 -2
  194. package/dist/chunks/chunk.NBLIIWTN.js.gz +0 -0
  195. package/dist/chunks/chunk.NBLIIWTN.js.map +7 -0
  196. package/dist/chunks/chunk.NBLIIWTN.js.map.gz +0 -0
  197. package/dist/chunks/chunk.NJ4UGLWQ.js +30 -0
  198. package/dist/chunks/chunk.NJ4UGLWQ.js.gz +0 -0
  199. package/dist/chunks/chunk.NJ4UGLWQ.js.map +7 -0
  200. package/dist/chunks/chunk.NJ4UGLWQ.js.map.gz +0 -0
  201. package/dist/chunks/{chunk.J5OGWB43.js → chunk.NW6LQ3YZ.js} +2 -2
  202. package/dist/chunks/chunk.NW6LQ3YZ.js.gz +0 -0
  203. package/dist/chunks/chunk.NW6LQ3YZ.js.map +7 -0
  204. package/dist/chunks/chunk.NW6LQ3YZ.js.map.gz +0 -0
  205. package/dist/chunks/chunk.OOCO42E3.js.gz +0 -0
  206. package/dist/chunks/chunk.OOCO42E3.js.map.gz +0 -0
  207. package/dist/chunks/{chunk.XKGTDJG6.js → chunk.OWDSVUYS.js} +3 -3
  208. package/dist/chunks/chunk.OWDSVUYS.js.gz +0 -0
  209. package/dist/chunks/chunk.OWDSVUYS.js.map +7 -0
  210. package/dist/chunks/chunk.OWDSVUYS.js.map.gz +0 -0
  211. package/dist/chunks/chunk.OZDISW2G.js +350 -0
  212. package/dist/chunks/chunk.OZDISW2G.js.gz +0 -0
  213. package/dist/chunks/chunk.OZDISW2G.js.map +7 -0
  214. package/dist/chunks/chunk.OZDISW2G.js.map.gz +0 -0
  215. package/dist/chunks/chunk.PJKUHCBZ.js +2 -0
  216. package/dist/chunks/chunk.PJKUHCBZ.js.gz +0 -0
  217. package/dist/chunks/{chunk.WXMMTZTU.js.map → chunk.PJKUHCBZ.js.map} +0 -0
  218. package/dist/chunks/chunk.PJKUHCBZ.js.map.gz +0 -0
  219. package/dist/chunks/chunk.PKA6D7UK.js +11 -0
  220. package/dist/chunks/chunk.PKA6D7UK.js.gz +0 -0
  221. package/dist/chunks/chunk.PKA6D7UK.js.map +7 -0
  222. package/dist/chunks/chunk.PKA6D7UK.js.map.gz +0 -0
  223. package/dist/chunks/{chunk.N6DLDRHB.js → chunk.PZK4ALAW.js} +1 -1
  224. package/dist/chunks/chunk.PZK4ALAW.js.gz +0 -0
  225. package/dist/chunks/chunk.PZK4ALAW.js.map +7 -0
  226. package/dist/chunks/chunk.PZK4ALAW.js.map.gz +0 -0
  227. package/dist/chunks/chunk.Q2V4UOPC.js.gz +0 -0
  228. package/dist/chunks/chunk.Q2V4UOPC.js.map.gz +0 -0
  229. package/dist/chunks/chunk.QIDYSTUJ.js +37 -0
  230. package/dist/chunks/chunk.QIDYSTUJ.js.gz +0 -0
  231. package/dist/chunks/chunk.QIDYSTUJ.js.map +7 -0
  232. package/dist/chunks/chunk.QIDYSTUJ.js.map.gz +0 -0
  233. package/dist/chunks/{chunk.Y5CUD3L7.js → chunk.QWNRWJUF.js} +1 -1
  234. package/dist/chunks/chunk.QWNRWJUF.js.gz +0 -0
  235. package/dist/chunks/chunk.QWNRWJUF.js.map +7 -0
  236. package/dist/chunks/chunk.QWNRWJUF.js.map.gz +0 -0
  237. package/dist/chunks/chunk.QZ7HSWXB.js.gz +0 -0
  238. package/dist/chunks/chunk.QZ7HSWXB.js.map.gz +0 -0
  239. package/dist/chunks/{chunk.T25QZW3W.js → chunk.RSR7WC4R.js} +1 -1
  240. package/dist/chunks/chunk.RSR7WC4R.js.gz +0 -0
  241. package/dist/chunks/{chunk.T25QZW3W.js.map → chunk.RSR7WC4R.js.map} +1 -1
  242. package/dist/chunks/chunk.RSR7WC4R.js.map.gz +0 -0
  243. package/dist/chunks/chunk.T5LGHR6T.js +2 -0
  244. package/dist/chunks/chunk.T5LGHR6T.js.gz +0 -0
  245. package/dist/chunks/{chunk.MSP7TQ3T.js.map → chunk.T5LGHR6T.js.map} +0 -0
  246. package/dist/chunks/chunk.T5LGHR6T.js.map.gz +0 -0
  247. package/dist/chunks/chunk.TCNCQW36.js +4 -0
  248. package/dist/chunks/chunk.TCNCQW36.js.gz +0 -0
  249. package/dist/chunks/{chunk.4LJQJY4M.js.map → chunk.TCNCQW36.js.map} +3 -3
  250. package/dist/chunks/chunk.TCNCQW36.js.map.gz +0 -0
  251. package/dist/chunks/{chunk.RQFUIQK3.js → chunk.TNEQM7BT.js} +1 -1
  252. package/dist/chunks/chunk.TNEQM7BT.js.gz +0 -0
  253. package/dist/chunks/chunk.TNEQM7BT.js.map +7 -0
  254. package/dist/chunks/chunk.TNEQM7BT.js.map.gz +0 -0
  255. package/dist/chunks/{chunk.75W5GH3K.js → chunk.U37TEBY2.js} +1 -1
  256. package/dist/chunks/chunk.U37TEBY2.js.gz +0 -0
  257. package/dist/chunks/chunk.U37TEBY2.js.map +7 -0
  258. package/dist/chunks/chunk.U37TEBY2.js.map.gz +0 -0
  259. package/dist/chunks/chunk.UD3ZBT5N.js +2 -0
  260. package/dist/chunks/chunk.UD3ZBT5N.js.gz +0 -0
  261. package/dist/chunks/{chunk.YMIT4ZQO.js.map → chunk.UD3ZBT5N.js.map} +0 -0
  262. package/dist/chunks/chunk.UD3ZBT5N.js.map.gz +0 -0
  263. package/dist/chunks/chunk.UXHVIMZV.js.gz +0 -0
  264. package/dist/chunks/chunk.UXHVIMZV.js.map.gz +0 -0
  265. package/dist/chunks/chunk.UXIAMI3F.js +7 -0
  266. package/dist/chunks/chunk.UXIAMI3F.js.gz +0 -0
  267. package/dist/chunks/chunk.UXIAMI3F.js.map +7 -0
  268. package/dist/chunks/chunk.UXIAMI3F.js.map.gz +0 -0
  269. package/dist/chunks/{chunk.6ZXOCFW5.js → chunk.V2C64IPL.js} +2 -2
  270. package/dist/chunks/chunk.V2C64IPL.js.gz +0 -0
  271. package/dist/chunks/{chunk.6ZXOCFW5.js.map → chunk.V2C64IPL.js.map} +2 -2
  272. package/dist/chunks/chunk.V2C64IPL.js.map.gz +0 -0
  273. package/dist/chunks/chunk.VX2BVZKA.js +2 -0
  274. package/dist/chunks/chunk.VX2BVZKA.js.gz +0 -0
  275. package/dist/chunks/{chunk.QHEFJCZI.js.map → chunk.VX2BVZKA.js.map} +0 -0
  276. package/dist/chunks/chunk.VX2BVZKA.js.map.gz +0 -0
  277. package/dist/chunks/{chunk.TE6ZDRYB.js → chunk.WJ7GGTRH.js} +2 -2
  278. package/dist/chunks/chunk.WJ7GGTRH.js.gz +0 -0
  279. package/dist/chunks/{chunk.TE6ZDRYB.js.map → chunk.WJ7GGTRH.js.map} +1 -1
  280. package/dist/chunks/chunk.WJ7GGTRH.js.map.gz +0 -0
  281. package/dist/chunks/chunk.WXC634JO.js.gz +0 -0
  282. package/dist/chunks/chunk.WXC634JO.js.map.gz +0 -0
  283. package/dist/chunks/chunk.WYMSBELD.js +2 -0
  284. package/dist/chunks/chunk.WYMSBELD.js.gz +0 -0
  285. package/dist/chunks/{chunk.VYN4PQL4.js.map → chunk.WYMSBELD.js.map} +0 -0
  286. package/dist/chunks/chunk.WYMSBELD.js.map.gz +0 -0
  287. package/dist/chunks/chunk.XDWCNUEB.js.gz +0 -0
  288. package/dist/chunks/chunk.XDWCNUEB.js.map.gz +0 -0
  289. package/dist/chunks/chunk.YEADT2TW.js +2 -0
  290. package/dist/chunks/chunk.YEADT2TW.js.gz +0 -0
  291. package/dist/chunks/{chunk.VWEPTKXE.js.map → chunk.YEADT2TW.js.map} +0 -0
  292. package/dist/chunks/chunk.YEADT2TW.js.map.gz +0 -0
  293. package/dist/chunks/chunk.YPG6CZAZ.js +31 -0
  294. package/dist/chunks/chunk.YPG6CZAZ.js.gz +0 -0
  295. package/dist/chunks/chunk.YPG6CZAZ.js.map +7 -0
  296. package/dist/chunks/chunk.YPG6CZAZ.js.map.gz +0 -0
  297. package/dist/chunks/chunk.ZAZY7DM4.js +2 -0
  298. package/dist/chunks/chunk.ZAZY7DM4.js.gz +0 -0
  299. package/dist/chunks/{chunk.S3DM53HD.js.map → chunk.ZAZY7DM4.js.map} +0 -0
  300. package/dist/chunks/chunk.ZAZY7DM4.js.map.gz +0 -0
  301. package/dist/chunks/{chunk.4IW4ZUWS.js → chunk.ZKMVZ46L.js} +1 -1
  302. package/dist/chunks/chunk.ZKMVZ46L.js.gz +0 -0
  303. package/dist/chunks/chunk.ZKMVZ46L.js.map +7 -0
  304. package/dist/chunks/chunk.ZKMVZ46L.js.map.gz +0 -0
  305. package/dist/chunks/{chunk.V6IT6TY7.js → chunk.ZTRQFSO3.js} +2 -2
  306. package/dist/chunks/chunk.ZTRQFSO3.js.gz +0 -0
  307. package/dist/chunks/{chunk.V6IT6TY7.js.map → chunk.ZTRQFSO3.js.map} +2 -2
  308. package/dist/chunks/chunk.ZTRQFSO3.js.map.gz +0 -0
  309. package/dist/chunks/graphic-apple-app-store.64CLN6WQ.js +2 -0
  310. package/dist/chunks/graphic-apple-app-store.64CLN6WQ.js.gz +0 -0
  311. package/dist/chunks/graphic-apple-app-store.64CLN6WQ.js.map +7 -0
  312. package/dist/chunks/graphic-apple-app-store.64CLN6WQ.js.map.gz +0 -0
  313. package/dist/chunks/graphic-ehl.ESGKDW72.js +2 -0
  314. package/dist/chunks/graphic-ehl.ESGKDW72.js.gz +0 -0
  315. package/dist/chunks/graphic-ehl.ESGKDW72.js.map +7 -0
  316. package/dist/chunks/graphic-ehl.ESGKDW72.js.map.gz +0 -0
  317. package/dist/chunks/graphic-google-play-store.4YAJ4NUV.js +2 -0
  318. package/dist/chunks/graphic-google-play-store.4YAJ4NUV.js.gz +0 -0
  319. package/dist/chunks/graphic-google-play-store.4YAJ4NUV.js.map +7 -0
  320. package/dist/chunks/graphic-google-play-store.4YAJ4NUV.js.map.gz +0 -0
  321. package/dist/chunks/graphic-logo.UL6BCYFE.js +2 -0
  322. package/dist/chunks/graphic-logo.UL6BCYFE.js.gz +0 -0
  323. package/dist/chunks/graphic-logo.UL6BCYFE.js.map +7 -0
  324. package/dist/chunks/graphic-logo.UL6BCYFE.js.map.gz +0 -0
  325. package/dist/chunks/graphic-ncua.PJDHZQTE.js +2 -0
  326. package/dist/chunks/graphic-ncua.PJDHZQTE.js.gz +0 -0
  327. package/dist/chunks/graphic-ncua.PJDHZQTE.js.map +7 -0
  328. package/dist/chunks/graphic-ncua.PJDHZQTE.js.map.gz +0 -0
  329. package/dist/chunks/icon-check.2J6H24PQ.js +2 -0
  330. package/dist/chunks/icon-check.2J6H24PQ.js.gz +0 -0
  331. package/dist/chunks/icon-check.2J6H24PQ.js.map +7 -0
  332. package/dist/chunks/icon-check.2J6H24PQ.js.map.gz +0 -0
  333. package/dist/chunks/icon-checkbox-disabled.VSUFMT3G.js.gz +0 -0
  334. package/dist/chunks/icon-checkbox-disabled.VSUFMT3G.js.map.gz +0 -0
  335. package/dist/chunks/icon-checkbox-hover.CNYOUMCW.js.gz +0 -0
  336. package/dist/chunks/icon-checkbox-hover.CNYOUMCW.js.map.gz +0 -0
  337. package/dist/chunks/icon-checkbox-selected-disabled.DLMEJCDA.js.gz +0 -0
  338. package/dist/chunks/icon-checkbox-selected-disabled.DLMEJCDA.js.map.gz +0 -0
  339. package/dist/chunks/icon-checkbox-selected-hover.PGUVZ62C.js.gz +0 -0
  340. package/dist/chunks/icon-checkbox-selected-hover.PGUVZ62C.js.map.gz +0 -0
  341. package/dist/chunks/icon-checkbox-selected.SVAKK3LA.js.gz +0 -0
  342. package/dist/chunks/icon-checkbox-selected.SVAKK3LA.js.map.gz +0 -0
  343. package/dist/chunks/icon-checkbox.YH7MMYRP.js.gz +0 -0
  344. package/dist/chunks/icon-checkbox.YH7MMYRP.js.map.gz +0 -0
  345. package/dist/chunks/icon-chevron-down.G3D5CS54.js +2 -0
  346. package/dist/chunks/icon-chevron-down.G3D5CS54.js.gz +0 -0
  347. package/dist/chunks/icon-chevron-down.G3D5CS54.js.map +7 -0
  348. package/dist/chunks/icon-chevron-down.G3D5CS54.js.map.gz +0 -0
  349. package/dist/chunks/icon-chevron-left.7EWLMQJO.js +2 -0
  350. package/dist/chunks/icon-chevron-left.7EWLMQJO.js.gz +0 -0
  351. package/dist/chunks/icon-chevron-left.7EWLMQJO.js.map +7 -0
  352. package/dist/chunks/icon-chevron-left.7EWLMQJO.js.map.gz +0 -0
  353. package/dist/chunks/icon-chevron-right.Q25FULHU.js +2 -0
  354. package/dist/chunks/icon-chevron-right.Q25FULHU.js.gz +0 -0
  355. package/dist/chunks/icon-chevron-right.Q25FULHU.js.map +7 -0
  356. package/dist/chunks/icon-chevron-right.Q25FULHU.js.map.gz +0 -0
  357. package/dist/chunks/icon-chevron-up.E72GWARZ.js +2 -0
  358. package/dist/chunks/icon-chevron-up.E72GWARZ.js.gz +0 -0
  359. package/dist/chunks/icon-chevron-up.E72GWARZ.js.map +7 -0
  360. package/dist/chunks/icon-chevron-up.E72GWARZ.js.map.gz +0 -0
  361. package/dist/chunks/icon-circle.YMYFOJQF.js +2 -0
  362. package/dist/chunks/icon-circle.YMYFOJQF.js.gz +0 -0
  363. package/dist/chunks/icon-circle.YMYFOJQF.js.map +7 -0
  364. package/dist/chunks/icon-circle.YMYFOJQF.js.map.gz +0 -0
  365. package/dist/chunks/icon-clear.PZETAYRA.js +2 -0
  366. package/dist/chunks/icon-clear.PZETAYRA.js.gz +0 -0
  367. package/dist/chunks/icon-clear.PZETAYRA.js.map +7 -0
  368. package/dist/chunks/icon-clear.PZETAYRA.js.map.gz +0 -0
  369. package/dist/chunks/icon-clock.U2YNTBDN.js +2 -0
  370. package/dist/chunks/icon-clock.U2YNTBDN.js.gz +0 -0
  371. package/dist/chunks/icon-clock.U2YNTBDN.js.map +7 -0
  372. package/dist/chunks/icon-clock.U2YNTBDN.js.map.gz +0 -0
  373. package/dist/chunks/icon-close.Z52HCIQH.js +2 -0
  374. package/dist/chunks/icon-close.Z52HCIQH.js.gz +0 -0
  375. package/dist/chunks/icon-close.Z52HCIQH.js.map +7 -0
  376. package/dist/chunks/icon-close.Z52HCIQH.js.map.gz +0 -0
  377. package/dist/chunks/icon-code.7DGRWN7U.js +2 -0
  378. package/dist/chunks/icon-code.7DGRWN7U.js.gz +0 -0
  379. package/dist/chunks/icon-code.7DGRWN7U.js.map +7 -0
  380. package/dist/chunks/icon-code.7DGRWN7U.js.map.gz +0 -0
  381. package/dist/chunks/icon-color-test.JO6FCNHQ.js.gz +0 -0
  382. package/dist/chunks/icon-color-test.JO6FCNHQ.js.map.gz +0 -0
  383. package/dist/chunks/icon-crosshairs.XJVZHAJC.js +2 -0
  384. package/dist/chunks/icon-crosshairs.XJVZHAJC.js.gz +0 -0
  385. package/dist/chunks/icon-crosshairs.XJVZHAJC.js.map +7 -0
  386. package/dist/chunks/icon-crosshairs.XJVZHAJC.js.map.gz +0 -0
  387. package/dist/chunks/icon-document.UHQUZDIW.js +2 -0
  388. package/dist/chunks/icon-document.UHQUZDIW.js.gz +0 -0
  389. package/dist/chunks/icon-document.UHQUZDIW.js.map +7 -0
  390. package/dist/chunks/icon-document.UHQUZDIW.js.map.gz +0 -0
  391. package/dist/chunks/icon-download.PZAFFQ6X.js +2 -0
  392. package/dist/chunks/icon-download.PZAFFQ6X.js.gz +0 -0
  393. package/dist/chunks/icon-download.PZAFFQ6X.js.map +7 -0
  394. package/dist/chunks/icon-download.PZAFFQ6X.js.map.gz +0 -0
  395. package/dist/chunks/icon-edit.CBMWMGRY.js +2 -0
  396. package/dist/chunks/icon-edit.CBMWMGRY.js.gz +0 -0
  397. package/dist/chunks/icon-edit.CBMWMGRY.js.map +7 -0
  398. package/dist/chunks/icon-edit.CBMWMGRY.js.map.gz +0 -0
  399. package/dist/chunks/icon-envelope.VVRENS7E.js +2 -0
  400. package/dist/chunks/icon-envelope.VVRENS7E.js.gz +0 -0
  401. package/dist/chunks/icon-envelope.VVRENS7E.js.map +7 -0
  402. package/dist/chunks/icon-envelope.VVRENS7E.js.map.gz +0 -0
  403. package/dist/chunks/icon-external-link.G55QN337.js +2 -0
  404. package/dist/chunks/icon-external-link.G55QN337.js.gz +0 -0
  405. package/dist/chunks/icon-external-link.G55QN337.js.map +7 -0
  406. package/dist/chunks/icon-external-link.G55QN337.js.map.gz +0 -0
  407. package/dist/chunks/icon-facebook.QXY4NSZC.js +2 -0
  408. package/dist/chunks/icon-facebook.QXY4NSZC.js.gz +0 -0
  409. package/dist/chunks/icon-facebook.QXY4NSZC.js.map +7 -0
  410. package/dist/chunks/icon-facebook.QXY4NSZC.js.map.gz +0 -0
  411. package/dist/chunks/icon-hidden.XVGOU2XC.js +2 -0
  412. package/dist/chunks/icon-hidden.XVGOU2XC.js.gz +0 -0
  413. package/dist/chunks/icon-hidden.XVGOU2XC.js.map +7 -0
  414. package/dist/chunks/icon-hidden.XVGOU2XC.js.map.gz +0 -0
  415. package/dist/chunks/icon-info.U2ENHMDH.js +2 -0
  416. package/dist/chunks/icon-info.U2ENHMDH.js.gz +0 -0
  417. package/dist/chunks/icon-info.U2ENHMDH.js.map +7 -0
  418. package/dist/chunks/icon-info.U2ENHMDH.js.map.gz +0 -0
  419. package/dist/chunks/icon-instagram.6SNPIITH.js +2 -0
  420. package/dist/chunks/icon-instagram.6SNPIITH.js.gz +0 -0
  421. package/dist/chunks/icon-instagram.6SNPIITH.js.map +7 -0
  422. package/dist/chunks/icon-instagram.6SNPIITH.js.map.gz +0 -0
  423. package/dist/chunks/icon-linkedin.MAI4ZPUP.js +2 -0
  424. package/dist/chunks/icon-linkedin.MAI4ZPUP.js.gz +0 -0
  425. package/dist/chunks/icon-linkedin.MAI4ZPUP.js.map +7 -0
  426. package/dist/chunks/icon-linkedin.MAI4ZPUP.js.map.gz +0 -0
  427. package/dist/chunks/icon-location-dot.WO3EZZJ4.js +2 -0
  428. package/dist/chunks/icon-location-dot.WO3EZZJ4.js.gz +0 -0
  429. package/dist/chunks/icon-location-dot.WO3EZZJ4.js.map +7 -0
  430. package/dist/chunks/icon-location-dot.WO3EZZJ4.js.map.gz +0 -0
  431. package/dist/chunks/icon-location.QQ2PREBA.js +2 -0
  432. package/dist/chunks/icon-location.QQ2PREBA.js.gz +0 -0
  433. package/dist/chunks/icon-location.QQ2PREBA.js.map +7 -0
  434. package/dist/chunks/icon-location.QQ2PREBA.js.map.gz +0 -0
  435. package/dist/chunks/icon-lock.IDEZHIWZ.js +2 -0
  436. package/dist/chunks/icon-lock.IDEZHIWZ.js.gz +0 -0
  437. package/dist/chunks/icon-lock.IDEZHIWZ.js.map +7 -0
  438. package/dist/chunks/icon-lock.IDEZHIWZ.js.map.gz +0 -0
  439. package/dist/chunks/icon-message.3DWME3DJ.js +2 -0
  440. package/dist/chunks/icon-message.3DWME3DJ.js.gz +0 -0
  441. package/dist/chunks/icon-message.3DWME3DJ.js.map +7 -0
  442. package/dist/chunks/icon-message.3DWME3DJ.js.map.gz +0 -0
  443. package/dist/chunks/icon-minus.Y6J3TBEG.js +2 -0
  444. package/dist/chunks/icon-minus.Y6J3TBEG.js.gz +0 -0
  445. package/dist/chunks/icon-minus.Y6J3TBEG.js.map +7 -0
  446. package/dist/chunks/icon-minus.Y6J3TBEG.js.map.gz +0 -0
  447. package/dist/chunks/icon-mobile.NTHRHOJL.js +2 -0
  448. package/dist/chunks/icon-mobile.NTHRHOJL.js.gz +0 -0
  449. package/dist/chunks/icon-mobile.NTHRHOJL.js.map +7 -0
  450. package/dist/chunks/icon-mobile.NTHRHOJL.js.map.gz +0 -0
  451. package/dist/chunks/icon-pdf.EH6BCNYI.js +2 -0
  452. package/dist/chunks/icon-pdf.EH6BCNYI.js.gz +0 -0
  453. package/dist/chunks/icon-pdf.EH6BCNYI.js.map +7 -0
  454. package/dist/chunks/icon-pdf.EH6BCNYI.js.map.gz +0 -0
  455. package/dist/chunks/icon-placeholder.H62WLGDV.js +2 -0
  456. package/dist/chunks/icon-placeholder.H62WLGDV.js.gz +0 -0
  457. package/dist/chunks/icon-placeholder.H62WLGDV.js.map +7 -0
  458. package/dist/chunks/icon-placeholder.H62WLGDV.js.map.gz +0 -0
  459. package/dist/chunks/icon-plus.OWM6ZAXM.js +2 -0
  460. package/dist/chunks/icon-plus.OWM6ZAXM.js.gz +0 -0
  461. package/dist/chunks/icon-plus.OWM6ZAXM.js.map +7 -0
  462. package/dist/chunks/icon-plus.OWM6ZAXM.js.map.gz +0 -0
  463. package/dist/chunks/icon-print.SXGTREIU.js +2 -0
  464. package/dist/chunks/icon-print.SXGTREIU.js.gz +0 -0
  465. package/dist/chunks/icon-print.SXGTREIU.js.map +7 -0
  466. package/dist/chunks/icon-print.SXGTREIU.js.map.gz +0 -0
  467. package/dist/chunks/icon-radio-disabled.Q5ZGKYKV.js.gz +0 -0
  468. package/dist/chunks/icon-radio-disabled.Q5ZGKYKV.js.map.gz +0 -0
  469. package/dist/chunks/icon-radio-hover.B5FZHVHA.js.gz +0 -0
  470. package/dist/chunks/icon-radio-hover.B5FZHVHA.js.map.gz +0 -0
  471. package/dist/chunks/icon-radio-selected-disabled.CJWSVALQ.js.gz +0 -0
  472. package/dist/chunks/icon-radio-selected-disabled.CJWSVALQ.js.map.gz +0 -0
  473. package/dist/chunks/icon-radio-selected-hover.O6DFK257.js.gz +0 -0
  474. package/dist/chunks/icon-radio-selected-hover.O6DFK257.js.map.gz +0 -0
  475. package/dist/chunks/icon-radio-selected.XXL7SCSC.js.gz +0 -0
  476. package/dist/chunks/icon-radio-selected.XXL7SCSC.js.map.gz +0 -0
  477. package/dist/chunks/icon-radio.I2FI3WCV.js.gz +0 -0
  478. package/dist/chunks/icon-radio.I2FI3WCV.js.map.gz +0 -0
  479. package/dist/chunks/icon-search.G6EUFLAB.js +2 -0
  480. package/dist/chunks/icon-search.G6EUFLAB.js.gz +0 -0
  481. package/dist/chunks/icon-search.G6EUFLAB.js.map +7 -0
  482. package/dist/chunks/icon-search.G6EUFLAB.js.map.gz +0 -0
  483. package/dist/chunks/icon-slider.AE5XEGK5.js +2 -0
  484. package/dist/chunks/icon-slider.AE5XEGK5.js.gz +0 -0
  485. package/dist/chunks/icon-slider.AE5XEGK5.js.map +7 -0
  486. package/dist/chunks/icon-slider.AE5XEGK5.js.map.gz +0 -0
  487. package/dist/chunks/icon-tiktok.GIFGF7PJ.js +2 -0
  488. package/dist/chunks/icon-tiktok.GIFGF7PJ.js.gz +0 -0
  489. package/dist/chunks/icon-tiktok.GIFGF7PJ.js.map +7 -0
  490. package/dist/chunks/icon-tiktok.GIFGF7PJ.js.map.gz +0 -0
  491. package/dist/chunks/icon-user.PWD6MXKR.js +2 -0
  492. package/dist/chunks/icon-user.PWD6MXKR.js.gz +0 -0
  493. package/dist/chunks/icon-user.PWD6MXKR.js.map +7 -0
  494. package/dist/chunks/icon-user.PWD6MXKR.js.map.gz +0 -0
  495. package/dist/chunks/icon-visible.6LLG6U2V.js +2 -0
  496. package/dist/chunks/icon-visible.6LLG6U2V.js.gz +0 -0
  497. package/dist/chunks/icon-visible.6LLG6U2V.js.map +7 -0
  498. package/dist/chunks/icon-visible.6LLG6U2V.js.map.gz +0 -0
  499. package/dist/chunks/scopedElementsWrapper.235XAAWV.js +3 -0
  500. package/dist/chunks/scopedElementsWrapper.235XAAWV.js.gz +0 -0
  501. package/dist/chunks/scopedElementsWrapper.235XAAWV.js.map +7 -0
  502. package/dist/chunks/scopedElementsWrapper.235XAAWV.js.map.gz +0 -0
  503. package/dist/custom-elements.json +858 -848
  504. package/dist/custom-elements.json.gz +0 -0
  505. package/dist/docs/components/ScwAlert.json +5 -0
  506. package/dist/docs/components/ScwImage.json +0 -6
  507. package/dist/docs/components/manifest.json +61 -61
  508. package/dist/docs/config.json +1 -1
  509. package/dist/docs/css/app.82b51b70.css +1 -0
  510. package/dist/docs/documents/Installation.html +1 -1
  511. package/dist/docs/documents/Intro.html +1 -1
  512. package/dist/docs/index.html +1 -1
  513. package/dist/docs/js/about.690bcd4d.js +2 -0
  514. package/dist/docs/js/about.690bcd4d.js.map +1 -0
  515. package/dist/docs/js/app.9d6da48a.js +2 -0
  516. package/dist/docs/js/app.9d6da48a.js.map +1 -0
  517. package/dist/docs/js/{chunk-2d0e618f.8f5314c9.js → chunk-2d2080c7.2d81d3f6.js} +3 -3
  518. package/dist/docs/js/chunk-2d2080c7.2d81d3f6.js.map +1 -0
  519. package/dist/docs/js/{chunk-2d222769.890cef38.js → chunk-2d222769.3af7d18c.js} +1 -1
  520. package/dist/docs/js/{chunk-2d222769.890cef38.js.map → chunk-2d222769.3af7d18c.js.map} +1 -1
  521. package/dist/docs/js/{chunk-2d224ae2.03a9ea49.js → chunk-2d224ae2.82b21f55.js} +1 -1
  522. package/dist/docs/js/{chunk-2d224ae2.03a9ea49.js.map → chunk-2d224ae2.82b21f55.js.map} +1 -1
  523. package/dist/docs/js/{chunk-2d22c823.e5abc1b9.js → chunk-2d22c823.a09e9843.js} +1 -1
  524. package/dist/docs/js/{chunk-2d22c823.e5abc1b9.js.map → chunk-2d22c823.a09e9843.js.map} +1 -1
  525. package/dist/docs/js/{chunk-2d230e16.28a82488.js → chunk-2d230e16.ec745b24.js} +1 -1
  526. package/dist/docs/js/{chunk-2d230e16.28a82488.js.map → chunk-2d230e16.ec745b24.js.map} +1 -1
  527. package/dist/docs/js/chunk-vendors.5a7d6da7.js +13 -0
  528. package/dist/docs/js/chunk-vendors.5a7d6da7.js.map +1 -0
  529. package/dist/error.html.gz +0 -0
  530. package/dist/global.d.js.gz +0 -0
  531. package/dist/global.d.js.map.gz +0 -0
  532. package/dist/index.html.gz +0 -0
  533. package/dist/scw-alert/ScwAlert.js +1 -1
  534. package/dist/scw-alert/ScwAlert.js.gz +0 -0
  535. package/dist/scw-alert/ScwAlert.js.map.gz +0 -0
  536. package/dist/scw-alert/scw-alert.js +1 -1
  537. package/dist/scw-alert/scw-alert.js.gz +0 -0
  538. package/dist/scw-alert/scw-alert.js.map.gz +0 -0
  539. package/dist/scw-button/ScwButton.js +1 -1
  540. package/dist/scw-button/ScwButton.js.gz +0 -0
  541. package/dist/scw-button/ScwButton.js.map.gz +0 -0
  542. package/dist/scw-button/scw-button.js +1 -1
  543. package/dist/scw-button/scw-button.js.gz +0 -0
  544. package/dist/scw-button/scw-button.js.map.gz +0 -0
  545. package/dist/scw-card/ScwCard.d.ts +1 -1
  546. package/dist/scw-card/ScwCard.js +1 -1
  547. package/dist/scw-card/ScwCard.js.gz +0 -0
  548. package/dist/scw-card/ScwCard.js.map.gz +0 -0
  549. package/dist/scw-card/scw-card-enums.js.gz +0 -0
  550. package/dist/scw-card/scw-card-enums.js.map.gz +0 -0
  551. package/dist/scw-card/scw-card-light-dom.js.gz +0 -0
  552. package/dist/scw-card/scw-card-light-dom.js.map.gz +0 -0
  553. package/dist/scw-card/scw-card.js +1 -1
  554. package/dist/scw-card/scw-card.js.gz +0 -0
  555. package/dist/scw-card/scw-card.js.map.gz +0 -0
  556. package/dist/scw-card/tests/imageExample.js.gz +0 -0
  557. package/dist/scw-card/tests/imageExample.js.map +2 -2
  558. package/dist/scw-card/tests/imageExample.js.map.gz +0 -0
  559. package/dist/scw-center-component/ScwCenterComponent.js +1 -1
  560. package/dist/scw-center-component/ScwCenterComponent.js.gz +0 -0
  561. package/dist/scw-center-component/ScwCenterComponent.js.map.gz +0 -0
  562. package/dist/scw-center-component/scw-center-component.js +1 -1
  563. package/dist/scw-center-component/scw-center-component.js.gz +0 -0
  564. package/dist/scw-center-component/scw-center-component.js.map.gz +0 -0
  565. package/dist/scw-component/ScwComponent.js +1 -1
  566. package/dist/scw-component/ScwComponent.js.gz +0 -0
  567. package/dist/scw-component/ScwComponent.js.map.gz +0 -0
  568. package/dist/scw-component/scw-component-interface.js.gz +0 -0
  569. package/dist/scw-component/scw-component-interface.js.map.gz +0 -0
  570. package/dist/scw-component/scw-component.js +1 -1
  571. package/dist/scw-component/scw-component.js.gz +0 -0
  572. package/dist/scw-component/scw-component.js.map.gz +0 -0
  573. package/dist/scw-components.js +1 -1
  574. package/dist/scw-components.js.gz +0 -0
  575. package/dist/scw-components.js.map.gz +0 -0
  576. package/dist/scw-element-component/scw-element-component.js +1 -1
  577. package/dist/scw-element-component/scw-element-component.js.gz +0 -0
  578. package/dist/scw-element-component/scw-element-component.js.map +1 -1
  579. package/dist/scw-element-component/scw-element-component.js.map.gz +0 -0
  580. package/dist/scw-flex-h-component/scw-flex-h-component.js +1 -1
  581. package/dist/scw-flex-h-component/scw-flex-h-component.js.gz +0 -0
  582. package/dist/scw-flex-h-component/scw-flex-h-component.js.map +3 -3
  583. package/dist/scw-flex-h-component/scw-flex-h-component.js.map.gz +0 -0
  584. package/dist/scw-flex-v-component/scw-flex-v-component.js +1 -1
  585. package/dist/scw-flex-v-component/scw-flex-v-component.js.gz +0 -0
  586. package/dist/scw-flex-v-component/scw-flex-v-component.js.map +3 -3
  587. package/dist/scw-flex-v-component/scw-flex-v-component.js.map.gz +0 -0
  588. package/dist/scw-float-component/scw-float-component.js +1 -1
  589. package/dist/scw-float-component/scw-float-component.js.gz +0 -0
  590. package/dist/scw-float-component/scw-float-component.js.map +3 -3
  591. package/dist/scw-float-component/scw-float-component.js.map.gz +0 -0
  592. package/dist/scw-form/scw-form.js +2 -2
  593. package/dist/scw-form/scw-form.js.gz +0 -0
  594. package/dist/scw-form/scw-form.js.map +3 -3
  595. package/dist/scw-form/scw-form.js.map.gz +0 -0
  596. package/dist/scw-form-component/scw-form-component.js +1 -1
  597. package/dist/scw-form-component/scw-form-component.js.gz +0 -0
  598. package/dist/scw-form-component/scw-form-component.js.map.gz +0 -0
  599. package/dist/scw-heading/ScwHeading.js +1 -1
  600. package/dist/scw-heading/ScwHeading.js.gz +0 -0
  601. package/dist/scw-heading/ScwHeading.js.map.gz +0 -0
  602. package/dist/scw-heading/parseLightDomHeading.js.gz +0 -0
  603. package/dist/scw-heading/parseLightDomHeading.js.map.gz +0 -0
  604. package/dist/scw-heading/scw-heading-enums.js.gz +0 -0
  605. package/dist/scw-heading/scw-heading-enums.js.map.gz +0 -0
  606. package/dist/scw-heading/scw-heading.js +1 -1
  607. package/dist/scw-heading/scw-heading.js.gz +0 -0
  608. package/dist/scw-heading/scw-heading.js.map.gz +0 -0
  609. package/dist/scw-icon/ScwIcon.js +1 -1
  610. package/dist/scw-icon/ScwIcon.js.gz +0 -0
  611. package/dist/scw-icon/ScwIcon.js.map.gz +0 -0
  612. package/dist/scw-icon/scw-icon-enums.js.gz +0 -0
  613. package/dist/scw-icon/scw-icon-enums.js.map.gz +0 -0
  614. package/dist/scw-icon/scw-icon.js +1 -1
  615. package/dist/scw-icon/scw-icon.js.gz +0 -0
  616. package/dist/scw-icon/scw-icon.js.map.gz +0 -0
  617. package/dist/scw-icon/tests/checkIconADA.js +1 -1
  618. package/dist/scw-icon/tests/checkIconADA.js.gz +0 -0
  619. package/dist/scw-icon/tests/checkIconADA.js.map +3 -3
  620. package/dist/scw-icon/tests/checkIconADA.js.map.gz +0 -0
  621. package/dist/scw-image/ScwImage.js +1 -1
  622. package/dist/scw-image/ScwImage.js.gz +0 -0
  623. package/dist/scw-image/ScwImage.js.map.gz +0 -0
  624. package/dist/scw-image/scw-image-src-parser.js.gz +0 -0
  625. package/dist/scw-image/scw-image-src-parser.js.map +2 -2
  626. package/dist/scw-image/scw-image-src-parser.js.map.gz +0 -0
  627. package/dist/scw-image/scw-image-validate.js.gz +0 -0
  628. package/dist/scw-image/scw-image-validate.js.map.gz +0 -0
  629. package/dist/scw-image/scw-image.js +1 -1
  630. package/dist/scw-image/scw-image.js.gz +0 -0
  631. package/dist/scw-image/scw-image.js.map.gz +0 -0
  632. package/dist/scw-image/tests/imageExamples.js.gz +0 -0
  633. package/dist/scw-image/tests/imageExamples.js.map +2 -2
  634. package/dist/scw-image/tests/imageExamples.js.map.gz +0 -0
  635. package/dist/scw-input/scw-input.js +3 -3
  636. package/dist/scw-input/scw-input.js.gz +0 -0
  637. package/dist/scw-input/scw-input.js.map +3 -3
  638. package/dist/scw-input/scw-input.js.map.gz +0 -0
  639. package/dist/scw-input-field/autoformatters/autoFormat.d.ts +12 -0
  640. package/dist/scw-input-field/autoformatters/autoFormat.js +1 -1
  641. package/dist/scw-input-field/autoformatters/autoFormat.js.gz +0 -0
  642. package/dist/scw-input-field/autoformatters/autoFormat.js.map.gz +0 -0
  643. package/dist/scw-input-field/autoformatters/currencyFormatter.d.ts +1 -1
  644. package/dist/scw-input-field/autoformatters/currencyFormatter.js +1 -1
  645. package/dist/scw-input-field/autoformatters/currencyFormatter.js.gz +0 -0
  646. package/dist/scw-input-field/autoformatters/currencyFormatter.js.map.gz +0 -0
  647. package/dist/scw-input-field/autoformatters/dateAutoFormatter.d.ts +23 -3
  648. package/dist/scw-input-field/autoformatters/dateAutoFormatter.js +1 -1
  649. package/dist/scw-input-field/autoformatters/dateAutoFormatter.js.gz +0 -0
  650. package/dist/scw-input-field/autoformatters/dateAutoFormatter.js.map.gz +0 -0
  651. package/dist/scw-input-field/autoformatters/numberFormatter.d.ts +2 -2
  652. package/dist/scw-input-field/autoformatters/numberFormatter.js +1 -1
  653. package/dist/scw-input-field/autoformatters/numberFormatter.js.gz +0 -0
  654. package/dist/scw-input-field/autoformatters/numberFormatter.js.map.gz +0 -0
  655. package/dist/scw-input-field/autoformatters/phoneNumberAutoFormatter.d.ts +2 -2
  656. package/dist/scw-input-field/autoformatters/phoneNumberAutoFormatter.js +1 -1
  657. package/dist/scw-input-field/autoformatters/phoneNumberAutoFormatter.js.gz +0 -0
  658. package/dist/scw-input-field/autoformatters/phoneNumberAutoFormatter.js.map.gz +0 -0
  659. package/dist/scw-input-field/inputTypes.js.gz +0 -0
  660. package/dist/scw-input-field/inputTypes.js.map.gz +0 -0
  661. package/dist/scw-input-field/scw-input-field.js +4 -4
  662. package/dist/scw-input-field/scw-input-field.js.gz +0 -0
  663. package/dist/scw-input-field/scw-input-field.js.map +3 -3
  664. package/dist/scw-input-field/scw-input-field.js.map.gz +0 -0
  665. package/dist/scw-input-layout/scw-input-layout.js +6 -6
  666. package/dist/scw-input-layout/scw-input-layout.js.gz +0 -0
  667. package/dist/scw-input-layout/scw-input-layout.js.map +3 -3
  668. package/dist/scw-input-layout/scw-input-layout.js.map.gz +0 -0
  669. package/dist/scw-layout-component/scw-layout-component.js +1 -1
  670. package/dist/scw-layout-component/scw-layout-component.js.gz +0 -0
  671. package/dist/scw-layout-component/scw-layout-component.js.map.gz +0 -0
  672. package/dist/scw-link/ScwLink.js +1 -1
  673. package/dist/scw-link/ScwLink.js.gz +0 -0
  674. package/dist/scw-link/ScwLink.js.map.gz +0 -0
  675. package/dist/scw-link/scw-link-enums.js.gz +0 -0
  676. package/dist/scw-link/scw-link-enums.js.map.gz +0 -0
  677. package/dist/scw-link/scw-link.js +1 -1
  678. package/dist/scw-link/scw-link.js.gz +0 -0
  679. package/dist/scw-link/scw-link.js.map.gz +0 -0
  680. package/dist/scw-link-base/ScwLinkBase.js +1 -1
  681. package/dist/scw-link-base/ScwLinkBase.js.gz +0 -0
  682. package/dist/scw-link-base/ScwLinkBase.js.map.gz +0 -0
  683. package/dist/scw-link-base/parseLightDomAnchor.js.gz +0 -0
  684. package/dist/scw-link-base/parseLightDomAnchor.js.map.gz +0 -0
  685. package/dist/scw-link-base/scw-link-base.js +1 -1
  686. package/dist/scw-link-base/scw-link-base.js.gz +0 -0
  687. package/dist/scw-link-base/scw-link-base.js.map.gz +0 -0
  688. package/dist/scw-menu/ScwMenu.js +1 -1
  689. package/dist/scw-menu/ScwMenu.js.gz +0 -0
  690. package/dist/scw-menu/ScwMenu.js.map.gz +0 -0
  691. package/dist/scw-menu/keyboard/keyboardElements.js +1 -1
  692. package/dist/scw-menu/keyboard/keyboardElements.js.gz +0 -0
  693. package/dist/scw-menu/keyboard/keyboardElements.js.map.gz +0 -0
  694. package/dist/scw-menu/keyboard/scw-menu-keyboard.js +1 -1
  695. package/dist/scw-menu/keyboard/scw-menu-keyboard.js.gz +0 -0
  696. package/dist/scw-menu/keyboard/scw-menu-keyboard.js.map.gz +0 -0
  697. package/dist/scw-menu/scw-menu-enums.js.gz +0 -0
  698. package/dist/scw-menu/scw-menu-enums.js.map.gz +0 -0
  699. package/dist/scw-menu/scw-menu-validate.js.gz +0 -0
  700. package/dist/scw-menu/scw-menu-validate.js.map.gz +0 -0
  701. package/dist/scw-menu/scw-menu.js +1 -1
  702. package/dist/scw-menu/scw-menu.js.gz +0 -0
  703. package/dist/scw-menu/scw-menu.js.map.gz +0 -0
  704. package/dist/scw-menu-item/ScwMenuItem.js +1 -1
  705. package/dist/scw-menu-item/ScwMenuItem.js.gz +0 -0
  706. package/dist/scw-menu-item/ScwMenuItem.js.map.gz +0 -0
  707. package/dist/scw-menu-item/scw-menu-item-enums.js.gz +0 -0
  708. package/dist/scw-menu-item/scw-menu-item-enums.js.map.gz +0 -0
  709. package/dist/scw-menu-item/scw-menu-item.js +1 -1
  710. package/dist/scw-menu-item/scw-menu-item.js.gz +0 -0
  711. package/dist/scw-menu-item/scw-menu-item.js.map.gz +0 -0
  712. package/dist/scw-page-alert/scw-page-alert.js +3 -3
  713. package/dist/scw-page-alert/scw-page-alert.js.gz +0 -0
  714. package/dist/scw-page-alert/scw-page-alert.js.map +3 -3
  715. package/dist/scw-page-alert/scw-page-alert.js.map.gz +0 -0
  716. package/dist/scw-pane-component/scw-pane-component.js +1 -1
  717. package/dist/scw-pane-component/scw-pane-component.js.gz +0 -0
  718. package/dist/scw-pane-component/scw-pane-component.js.map +3 -3
  719. package/dist/scw-pane-component/scw-pane-component.js.map.gz +0 -0
  720. package/dist/scw-responsive/scw-responsive.js +2 -2
  721. package/dist/scw-responsive/scw-responsive.js.gz +0 -0
  722. package/dist/scw-responsive/scw-responsive.js.map +3 -3
  723. package/dist/scw-responsive/scw-responsive.js.map.gz +0 -0
  724. package/dist/scw-select/scw-select.js +8 -8
  725. package/dist/scw-select/scw-select.js.gz +0 -0
  726. package/dist/scw-select/scw-select.js.map +3 -3
  727. package/dist/scw-select/scw-select.js.map.gz +0 -0
  728. package/dist/scw-single-input/scw-single-input.js +4 -4
  729. package/dist/scw-single-input/scw-single-input.js.gz +0 -0
  730. package/dist/scw-single-input/scw-single-input.js.map +4 -4
  731. package/dist/scw-single-input/scw-single-input.js.map.gz +0 -0
  732. package/dist/scw-single-input-layout/scw-single-input-layout.js +1 -1
  733. package/dist/scw-single-input-layout/scw-single-input-layout.js.gz +0 -0
  734. package/dist/scw-single-input-layout/scw-single-input-layout.js.map.gz +0 -0
  735. package/dist/scw-stack-component/scw-stack-component.js +1 -1
  736. package/dist/scw-stack-component/scw-stack-component.js.gz +0 -0
  737. package/dist/scw-stack-component/scw-stack-component.js.map +1 -1
  738. package/dist/scw-stack-component/scw-stack-component.js.map.gz +0 -0
  739. package/dist/scw-test/ScwTest.js +1 -1
  740. package/dist/scw-test/ScwTest.js.gz +0 -0
  741. package/dist/scw-test/ScwTest.js.map.gz +0 -0
  742. package/dist/scw-test/scw-test.js +1 -1
  743. package/dist/scw-test/scw-test.js.gz +0 -0
  744. package/dist/scw-test/scw-test.js.map +1 -1
  745. package/dist/scw-test/scw-test.js.map.gz +0 -0
  746. package/dist/scw-textarea/scw-textarea.js +2 -2
  747. package/dist/scw-textarea/scw-textarea.js.gz +0 -0
  748. package/dist/scw-textarea/scw-textarea.js.map +3 -3
  749. package/dist/scw-textarea/scw-textarea.js.map.gz +0 -0
  750. package/dist/scw-validate/rules/alphanumeric.d.ts +2 -2
  751. package/dist/scw-validate/rules/alphanumeric.js +1 -1
  752. package/dist/scw-validate/rules/alphanumeric.js.gz +0 -0
  753. package/dist/scw-validate/rules/alphanumeric.js.map.gz +0 -0
  754. package/dist/scw-validate/rules/currency.d.ts +2 -2
  755. package/dist/scw-validate/rules/currency.js +1 -1
  756. package/dist/scw-validate/rules/currency.js.gz +0 -0
  757. package/dist/scw-validate/rules/currency.js.map.gz +0 -0
  758. package/dist/scw-validate/rules/date.d.ts +2 -2
  759. package/dist/scw-validate/rules/date.js +1 -1
  760. package/dist/scw-validate/rules/date.js.gz +0 -0
  761. package/dist/scw-validate/rules/date.js.map.gz +0 -0
  762. package/dist/scw-validate/rules/email.d.ts +2 -2
  763. package/dist/scw-validate/rules/email.js +1 -1
  764. package/dist/scw-validate/rules/email.js.gz +0 -0
  765. package/dist/scw-validate/rules/email.js.map.gz +0 -0
  766. package/dist/scw-validate/rules/number.d.ts +2 -2
  767. package/dist/scw-validate/rules/number.js +1 -1
  768. package/dist/scw-validate/rules/number.js.gz +0 -0
  769. package/dist/scw-validate/rules/number.js.map.gz +0 -0
  770. package/dist/scw-validate/rules/required.d.ts +2 -2
  771. package/dist/scw-validate/rules/required.js +1 -1
  772. package/dist/scw-validate/rules/required.js.gz +0 -0
  773. package/dist/scw-validate/rules/required.js.map.gz +0 -0
  774. package/dist/scw-validate/rules/telephone.d.ts +2 -2
  775. package/dist/scw-validate/rules/telephone.js +1 -1
  776. package/dist/scw-validate/rules/telephone.js.gz +0 -0
  777. package/dist/scw-validate/rules/telephone.js.map.gz +0 -0
  778. package/dist/scw-validate/rules/url.js.gz +0 -0
  779. package/dist/scw-validate/rules/url.js.map.gz +0 -0
  780. package/dist/scw-validate/rules/utils.d.ts +7 -7
  781. package/dist/scw-validate/rules/utils.js +1 -1
  782. package/dist/scw-validate/rules/utils.js.gz +0 -0
  783. package/dist/scw-validate/rules/utils.js.map.gz +0 -0
  784. package/dist/scw-validate/scw-validate.js +3 -3
  785. package/dist/scw-validate/scw-validate.js.gz +0 -0
  786. package/dist/scw-validate/scw-validate.js.map +3 -3
  787. package/dist/scw-validate/scw-validate.js.map.gz +0 -0
  788. package/dist/scw-validate/validationTypes.js.gz +0 -0
  789. package/dist/scw-validate/validationTypes.js.map.gz +0 -0
  790. package/dist/scw-validation/scw-validation.js +3 -3
  791. package/dist/scw-validation/scw-validation.js.gz +0 -0
  792. package/dist/scw-validation/scw-validation.js.map +3 -3
  793. package/dist/scw-validation/scw-validation.js.map.gz +0 -0
  794. package/dist/scw.css.gz +0 -0
  795. package/dist/scw.js +1 -1
  796. package/dist/scw.js.gz +0 -0
  797. package/dist/scw.js.map.gz +0 -0
  798. package/dist/scwEmbedded.css.gz +0 -0
  799. package/dist/tokens/segments/comp-scw-alert/_description-vars.scss +1 -1
  800. package/dist/tokens/segments/comp-scw-alert/_message-vars.scss +1 -1
  801. package/dist/tokens/segments/comp-scw-card/_color-checking-action-mixins.scss +1 -1
  802. package/dist/tokens/segments/comp-scw-card/_color-checking-action-vars.scss +4 -4
  803. package/dist/tokens/segments/comp-scw-card/_color-checking-description-mixins.scss +4 -4
  804. package/dist/tokens/segments/comp-scw-card/_color-checking-description-vars.scss +4 -4
  805. package/dist/tokens/segments/comp-scw-card/_color-checking-heading-mixins.scss +4 -4
  806. package/dist/tokens/segments/comp-scw-card/_color-checking-heading-vars.scss +3 -3
  807. package/dist/tokens/segments/comp-scw-card/_color-checking-image-mixins.scss +4 -4
  808. package/dist/tokens/segments/comp-scw-card/_color-checking-image-vars.scss +3 -3
  809. package/dist/tokens/segments/comp-scw-card/_color-checking-super-heading-mixins.scss +4 -4
  810. package/dist/tokens/segments/comp-scw-card/_color-checking-super-heading-vars.scss +4 -4
  811. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-action-mixins.scss +1 -1
  812. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-action-vars.scss +4 -4
  813. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-description-mixins.scss +4 -4
  814. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-description-vars.scss +4 -4
  815. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-heading-mixins.scss +4 -4
  816. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-heading-vars.scss +3 -3
  817. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-image-mixins.scss +4 -4
  818. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-image-vars.scss +3 -3
  819. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-super-heading-mixins.scss +4 -4
  820. package/dist/tokens/segments/comp-scw-card/_color-credit-cards-super-heading-vars.scss +4 -4
  821. package/dist/tokens/segments/comp-scw-card/_color-investments-action-mixins.scss +1 -1
  822. package/dist/tokens/segments/comp-scw-card/_color-investments-action-vars.scss +4 -4
  823. package/dist/tokens/segments/comp-scw-card/_color-investments-description-mixins.scss +4 -4
  824. package/dist/tokens/segments/comp-scw-card/_color-investments-description-vars.scss +4 -4
  825. package/dist/tokens/segments/comp-scw-card/_color-investments-heading-mixins.scss +4 -4
  826. package/dist/tokens/segments/comp-scw-card/_color-investments-heading-vars.scss +3 -3
  827. package/dist/tokens/segments/comp-scw-card/_color-investments-image-mixins.scss +4 -4
  828. package/dist/tokens/segments/comp-scw-card/_color-investments-image-vars.scss +3 -3
  829. package/dist/tokens/segments/comp-scw-card/_color-investments-super-heading-mixins.scss +4 -4
  830. package/dist/tokens/segments/comp-scw-card/_color-investments-super-heading-vars.scss +4 -4
  831. package/dist/tokens/segments/comp-scw-card/_color-mortgage-action-mixins.scss +1 -1
  832. package/dist/tokens/segments/comp-scw-card/_color-mortgage-action-vars.scss +4 -4
  833. package/dist/tokens/segments/comp-scw-card/_color-mortgage-description-mixins.scss +4 -4
  834. package/dist/tokens/segments/comp-scw-card/_color-mortgage-description-vars.scss +4 -4
  835. package/dist/tokens/segments/comp-scw-card/_color-mortgage-heading-mixins.scss +4 -4
  836. package/dist/tokens/segments/comp-scw-card/_color-mortgage-heading-vars.scss +3 -3
  837. package/dist/tokens/segments/comp-scw-card/_color-mortgage-image-mixins.scss +4 -4
  838. package/dist/tokens/segments/comp-scw-card/_color-mortgage-image-vars.scss +3 -3
  839. package/dist/tokens/segments/comp-scw-card/_color-mortgage-super-heading-mixins.scss +4 -4
  840. package/dist/tokens/segments/comp-scw-card/_color-mortgage-super-heading-vars.scss +4 -4
  841. package/dist/tokens/segments/comp-scw-card/_color-savings-action-mixins.scss +1 -1
  842. package/dist/tokens/segments/comp-scw-card/_color-savings-action-vars.scss +4 -4
  843. package/dist/tokens/segments/comp-scw-card/_color-savings-description-mixins.scss +4 -4
  844. package/dist/tokens/segments/comp-scw-card/_color-savings-description-vars.scss +4 -4
  845. package/dist/tokens/segments/comp-scw-card/_color-savings-heading-mixins.scss +4 -4
  846. package/dist/tokens/segments/comp-scw-card/_color-savings-heading-vars.scss +3 -3
  847. package/dist/tokens/segments/comp-scw-card/_color-savings-image-mixins.scss +4 -4
  848. package/dist/tokens/segments/comp-scw-card/_color-savings-image-vars.scss +3 -3
  849. package/dist/tokens/segments/comp-scw-card/_color-savings-super-heading-mixins.scss +4 -4
  850. package/dist/tokens/segments/comp-scw-card/_color-savings-super-heading-vars.scss +4 -4
  851. package/dist/tokens/segments/comp-scw-card/_color-student-action-mixins.scss +1 -1
  852. package/dist/tokens/segments/comp-scw-card/_color-student-action-vars.scss +4 -4
  853. package/dist/tokens/segments/comp-scw-card/_color-student-description-mixins.scss +4 -4
  854. package/dist/tokens/segments/comp-scw-card/_color-student-description-vars.scss +4 -4
  855. package/dist/tokens/segments/comp-scw-card/_color-student-image-mixins.scss +4 -4
  856. package/dist/tokens/segments/comp-scw-card/_color-student-image-vars.scss +3 -3
  857. package/dist/tokens/segments/comp-scw-card/_color-student-scw-heading-label-vars.scss +1 -1
  858. package/dist/tokens/segments/comp-scw-card/_color-student-scw-heading-mixins.scss +4 -4
  859. package/dist/tokens/segments/comp-scw-card/_color-student-scw-heading-vars.scss +3 -3
  860. package/dist/tokens/segments/comp-scw-card/_color-student-super-heading-mixins.scss +4 -4
  861. package/dist/tokens/segments/comp-scw-card/_color-student-super-heading-vars.scss +4 -4
  862. package/dist/tokens/segments/comp-scw-card/_default-action-mixins.scss +1 -1
  863. package/dist/tokens/segments/comp-scw-card/_default-action-vars.scss +4 -4
  864. package/dist/tokens/segments/comp-scw-card/_default-description-mixins.scss +4 -4
  865. package/dist/tokens/segments/comp-scw-card/_default-description-vars.scss +4 -4
  866. package/dist/tokens/segments/comp-scw-card/_default-heading-mixins.scss +4 -4
  867. package/dist/tokens/segments/comp-scw-card/_default-heading-vars.scss +3 -3
  868. package/dist/tokens/segments/comp-scw-card/_default-image-mixins.scss +4 -4
  869. package/dist/tokens/segments/comp-scw-card/_default-image-vars.scss +3 -3
  870. package/dist/tokens/segments/comp-scw-card/_default-super-heading-mixins.scss +4 -4
  871. package/dist/tokens/segments/comp-scw-card/_default-super-heading-vars.scss +4 -4
  872. package/dist/tokens/segments/comp-scw-card/_index-mixins.scss +1 -1
  873. package/dist/tokens/segments/comp-scw-card/_index-vars.scss +4 -4
  874. package/dist/tokens/segments/comp-scw-card/_size-medium-action-mixins.scss +1 -1
  875. package/dist/tokens/segments/comp-scw-card/_size-medium-action-vars.scss +4 -4
  876. package/dist/tokens/segments/comp-scw-card/_size-medium-color-checking-action-mixins.scss +1 -1
  877. package/dist/tokens/segments/comp-scw-card/_size-medium-color-checking-action-vars.scss +4 -4
  878. package/dist/tokens/segments/comp-scw-card/_size-medium-color-checking-description-vars.scss +1 -1
  879. package/dist/tokens/segments/comp-scw-card/_size-medium-color-checking-super-heading-vars.scss +1 -1
  880. package/dist/tokens/segments/comp-scw-card/_size-medium-color-credit-cards-action-mixins.scss +1 -1
  881. package/dist/tokens/segments/comp-scw-card/_size-medium-color-credit-cards-action-vars.scss +4 -4
  882. package/dist/tokens/segments/comp-scw-card/_size-medium-color-credit-cards-description-vars.scss +1 -1
  883. package/dist/tokens/segments/comp-scw-card/_size-medium-color-credit-cards-super-heading-vars.scss +1 -1
  884. package/dist/tokens/segments/comp-scw-card/_size-medium-color-investments-action-mixins.scss +1 -1
  885. package/dist/tokens/segments/comp-scw-card/_size-medium-color-investments-action-vars.scss +4 -4
  886. package/dist/tokens/segments/comp-scw-card/_size-medium-color-investments-description-vars.scss +1 -1
  887. package/dist/tokens/segments/comp-scw-card/_size-medium-color-investments-super-heading-vars.scss +1 -1
  888. package/dist/tokens/segments/comp-scw-card/_size-medium-color-mortgage-action-mixins.scss +1 -1
  889. package/dist/tokens/segments/comp-scw-card/_size-medium-color-mortgage-action-vars.scss +4 -4
  890. package/dist/tokens/segments/comp-scw-card/_size-medium-color-mortgage-description-vars.scss +1 -1
  891. package/dist/tokens/segments/comp-scw-card/_size-medium-color-mortgage-super-heading-vars.scss +1 -1
  892. package/dist/tokens/segments/comp-scw-card/_size-medium-color-savings-action-mixins.scss +1 -1
  893. package/dist/tokens/segments/comp-scw-card/_size-medium-color-savings-action-vars.scss +4 -4
  894. package/dist/tokens/segments/comp-scw-card/_size-medium-color-savings-description-vars.scss +1 -1
  895. package/dist/tokens/segments/comp-scw-card/_size-medium-color-savings-super-heading-vars.scss +1 -1
  896. package/dist/tokens/segments/comp-scw-card/_size-medium-color-student-action-mixins.scss +1 -1
  897. package/dist/tokens/segments/comp-scw-card/_size-medium-color-student-action-vars.scss +4 -4
  898. package/dist/tokens/segments/comp-scw-card/_size-medium-color-student-description-vars.scss +1 -1
  899. package/dist/tokens/segments/comp-scw-card/_size-medium-color-student-super-heading-vars.scss +1 -1
  900. package/dist/tokens/segments/comp-scw-card/_size-medium-description-vars.scss +1 -1
  901. package/dist/tokens/segments/comp-scw-heading/_default-label-vars.scss +1 -1
  902. package/dist/tokens/segments/comp-scw-heading/_index-mixins.scss +1 -1
  903. package/dist/tokens/segments/comp-scw-heading/_index-vars.scss +4 -4
  904. package/dist/tokens/segments/comp-scw-heading/_size-h2-label-vars.scss +1 -1
  905. package/dist/tokens/segments/comp-scw-heading/_size-h2-state-disabled-label-vars.scss +1 -1
  906. package/dist/tokens/segments/comp-scw-heading/_size-h2-state-focused-label-vars.scss +1 -1
  907. package/dist/tokens/segments/comp-scw-heading/_size-h2-state-hover-label-vars.scss +1 -1
  908. package/dist/tokens/segments/comp-scw-heading/_size-h3-label-vars.scss +1 -1
  909. package/dist/tokens/segments/comp-scw-heading/_size-h3-state-disabled-label-vars.scss +1 -1
  910. package/dist/tokens/segments/comp-scw-heading/_size-h3-state-focused-label-vars.scss +1 -1
  911. package/dist/tokens/segments/comp-scw-heading/_size-h3-state-hover-label-vars.scss +1 -1
  912. package/dist/tokens/segments/comp-scw-heading/_size-h4-label-vars.scss +1 -1
  913. package/dist/tokens/segments/comp-scw-heading/_size-h4-state-disabled-label-vars.scss +1 -1
  914. package/dist/tokens/segments/comp-scw-heading/_size-h4-state-focused-label-vars.scss +1 -1
  915. package/dist/tokens/segments/comp-scw-heading/_size-h4-state-hover-label-vars.scss +1 -1
  916. package/dist/tokens/segments/comp-scw-heading/_size-h5-label-vars.scss +1 -1
  917. package/dist/tokens/segments/comp-scw-heading/_size-h5-state-disabled-label-vars.scss +1 -1
  918. package/dist/tokens/segments/comp-scw-heading/_size-h5-state-focused-label-vars.scss +1 -1
  919. package/dist/tokens/segments/comp-scw-heading/_size-h5-state-hover-label-vars.scss +1 -1
  920. package/dist/tokens/segments/comp-scw-heading/_state-disabled-label-vars.scss +1 -1
  921. package/dist/tokens/segments/comp-scw-heading/_state-focused-label-vars.scss +1 -1
  922. package/dist/tokens/segments/comp-scw-heading/_state-hover-label-vars.scss +1 -1
  923. package/dist/tokens/segments/comp-scw-icon/_index-mixins.scss +1 -1
  924. package/dist/tokens/segments/comp-scw-icon/_index-vars.scss +4 -4
  925. package/dist/tokens/segments/comp-scw-icon-v2/_index-mixins.scss +1 -1
  926. package/dist/tokens/segments/comp-scw-icon-v2/_index-vars.scss +4 -4
  927. package/dist/tokens/segments/comp-scw-input/_index-mixins.scss +1 -1
  928. package/dist/tokens/segments/comp-scw-input/_index-vars.scss +4 -4
  929. package/dist/tokens/segments/comp-scw-input-feedback-base/_default-scw-input-feedback-vars.scss +1 -1
  930. package/dist/tokens/segments/comp-scw-input-feedback-base/_index-mixins.scss +1 -1
  931. package/dist/tokens/segments/comp-scw-input-feedback-base/_index-vars.scss +4 -4
  932. package/dist/tokens/segments/comp-scw-input-feedback-base/_state-help-scw-input-feedback-vars.scss +1 -1
  933. package/dist/tokens/segments/comp-scw-input-field/_index-mixins.scss +1 -1
  934. package/dist/tokens/segments/comp-scw-input-field/_index-vars.scss +4 -4
  935. package/dist/tokens/segments/comp-scw-input-field-bg/_index-mixins.scss +1 -1
  936. package/dist/tokens/segments/comp-scw-input-field-bg/_index-vars.scss +4 -4
  937. package/dist/tokens/segments/comp-scw-input-label-base/_default-scw-input-label-vars.scss +1 -1
  938. package/dist/tokens/segments/comp-scw-input-label-base/_index-mixins.scss +1 -1
  939. package/dist/tokens/segments/comp-scw-input-label-base/_index-vars.scss +4 -4
  940. package/dist/tokens/segments/comp-scw-input-right-action/_index-mixins.scss +1 -1
  941. package/dist/tokens/segments/comp-scw-input-right-action/_index-vars.scss +4 -4
  942. package/dist/tokens/segments/comp-scw-input-right-action/_text-test-edit-vars.scss +1 -1
  943. package/dist/tokens/segments/comp-scw-input-text-base/_default-text-vars.scss +1 -1
  944. package/dist/tokens/segments/comp-scw-input-text-base/_disabled-text-vars.scss +1 -1
  945. package/dist/tokens/segments/comp-scw-input-text-base/_index-mixins.scss +1 -1
  946. package/dist/tokens/segments/comp-scw-input-text-base/_index-vars.scss +4 -4
  947. package/dist/tokens/segments/comp-scw-input-text-base/_placeholder-text-vars.scss +1 -1
  948. package/dist/tokens/segments/comp-scw-input-text-container/_default-scw-input-text-text-vars.scss +1 -1
  949. package/dist/tokens/segments/comp-scw-input-text-container/_index-mixins.scss +1 -1
  950. package/dist/tokens/segments/comp-scw-input-text-container/_index-vars.scss +4 -4
  951. package/dist/tokens/segments/comp-scw-link/_default-label-vars.scss +1 -1
  952. package/dist/tokens/segments/comp-scw-link/_design-outlined-label-vars.scss +1 -1
  953. package/dist/tokens/segments/comp-scw-link/_design-text-label-vars.scss +1 -1
  954. package/dist/tokens/segments/comp-scw-link/_icon-left-design-outlined-label-vars.scss +1 -1
  955. package/dist/tokens/segments/comp-scw-link/_icon-left-label-vars.scss +1 -1
  956. package/dist/tokens/segments/comp-scw-link/_icon-right-design-outlined-label-vars.scss +1 -1
  957. package/dist/tokens/segments/comp-scw-link/_icon-right-label-vars.scss +1 -1
  958. package/dist/tokens/segments/comp-scw-link/_index-mixins.scss +1 -1
  959. package/dist/tokens/segments/comp-scw-link/_index-vars.scss +4 -4
  960. package/dist/tokens/segments/comp-scw-link/_state-disabled-design-outlined-label-vars.scss +1 -1
  961. package/dist/tokens/segments/comp-scw-link/_state-disabled-design-text-label-vars.scss +1 -1
  962. package/dist/tokens/segments/comp-scw-link/_state-disabled-icon-left-design-outlined-label-vars.scss +1 -1
  963. package/dist/tokens/segments/comp-scw-link/_state-disabled-icon-left-label-vars.scss +1 -1
  964. package/dist/tokens/segments/comp-scw-link/_state-disabled-icon-right-design-outlined-label-vars.scss +1 -1
  965. package/dist/tokens/segments/comp-scw-link/_state-disabled-icon-right-label-vars.scss +1 -1
  966. package/dist/tokens/segments/comp-scw-link/_state-disabled-label-vars.scss +1 -1
  967. package/dist/tokens/segments/comp-scw-link/_state-focused-design-outlined-label-vars.scss +1 -1
  968. package/dist/tokens/segments/comp-scw-link/_state-focused-design-text-label-vars.scss +1 -1
  969. package/dist/tokens/segments/comp-scw-link/_state-focused-icon-left-design-outlined-label-vars.scss +1 -1
  970. package/dist/tokens/segments/comp-scw-link/_state-focused-icon-left-label-vars.scss +1 -1
  971. package/dist/tokens/segments/comp-scw-link/_state-focused-icon-right-design-outlined-label-vars.scss +1 -1
  972. package/dist/tokens/segments/comp-scw-link/_state-focused-icon-right-label-vars.scss +1 -1
  973. package/dist/tokens/segments/comp-scw-link/_state-focused-label-vars.scss +1 -1
  974. package/dist/tokens/segments/comp-scw-link/_state-hover-design-outlined-label-vars.scss +1 -1
  975. package/dist/tokens/segments/comp-scw-link/_state-hover-design-text-label-vars.scss +1 -1
  976. package/dist/tokens/segments/comp-scw-link/_state-hover-icon-left-design-outlined-label-vars.scss +1 -1
  977. package/dist/tokens/segments/comp-scw-link/_state-hover-icon-left-label-vars.scss +1 -1
  978. package/dist/tokens/segments/comp-scw-link/_state-hover-icon-right-design-outlined-label-vars.scss +1 -1
  979. package/dist/tokens/segments/comp-scw-link/_state-hover-icon-right-label-vars.scss +1 -1
  980. package/dist/tokens/segments/comp-scw-link/_state-hover-label-vars.scss +1 -1
  981. package/dist/tokens/segments/comp-scw-menu-item/_default-label-vars.scss +1 -1
  982. package/dist/tokens/segments/comp-scw-menu-item/_design-utility-label-vars.scss +1 -1
  983. package/dist/tokens/segments/comp-scw-menu-item/_design-utility-state-disabled-label-vars.scss +1 -1
  984. package/dist/tokens/segments/comp-scw-menu-item/_design-utility-state-focused-label-vars.scss +1 -1
  985. package/dist/tokens/segments/comp-scw-menu-item/_design-utility-state-hover-label-vars.scss +1 -1
  986. package/dist/tokens/segments/comp-scw-menu-item/_design-utility-state-selected-label-vars.scss +1 -1
  987. package/dist/tokens/segments/comp-scw-menu-item/_index-mixins.scss +1 -1
  988. package/dist/tokens/segments/comp-scw-menu-item/_index-vars.scss +4 -4
  989. package/dist/tokens/segments/comp-scw-menu-item/_state-disabled-label-vars.scss +1 -1
  990. package/dist/tokens/segments/comp-scw-menu-item/_state-focused-label-vars.scss +1 -1
  991. package/dist/tokens/segments/comp-scw-menu-item/_state-hover-label-vars.scss +1 -1
  992. package/dist/tokens/segments/comp-scw-menu-item/_state-selected-label-vars.scss +1 -1
  993. package/dist/tokens/segments/comp-scw-page-alert/_default-content-description-vars.scss +1 -1
  994. package/dist/tokens/segments/comp-scw-page-alert/_default-content-title-vars.scss +1 -1
  995. package/dist/tokens/segments/comp-scw-page-alert/_index-mixins.scss +1 -1
  996. package/dist/tokens/segments/comp-scw-page-alert/_index-vars.scss +4 -4
  997. package/dist/tokens/segments/comp-scw-page-alert/_state-disabled-content-description-vars.scss +1 -1
  998. package/dist/tokens/segments/comp-scw-page-alert/_state-disabled-content-title-vars.scss +1 -1
  999. package/dist/tokens/segments/comp-scw-page-alert/_state-focused-content-description-vars.scss +1 -1
  1000. package/dist/tokens/segments/comp-scw-page-alert/_state-focused-content-title-vars.scss +1 -1
  1001. package/dist/tokens/segments/comp-scw-page-alert/_state-hover-content-description-vars.scss +1 -1
  1002. package/dist/tokens/segments/comp-scw-page-alert/_state-hover-content-title-vars.scss +1 -1
  1003. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-content-description-vars.scss +1 -1
  1004. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-content-title-vars.scss +1 -1
  1005. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-state-disabled-content-description-vars.scss +1 -1
  1006. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-state-disabled-content-title-vars.scss +1 -1
  1007. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-state-focused-content-description-vars.scss +1 -1
  1008. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-state-focused-content-title-vars.scss +1 -1
  1009. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-state-hover-content-description-vars.scss +1 -1
  1010. package/dist/tokens/segments/comp-scw-page-alert/_type-warning-state-hover-content-title-vars.scss +1 -1
  1011. package/dist/tokens/segments/comp-scw-single-input/_index-mixins.scss +1 -1
  1012. package/dist/tokens/segments/comp-scw-single-input/_index-vars.scss +4 -4
  1013. package/dist/tokens/segments/comp-scw-single-input-field-bg/_index-mixins.scss +1 -1
  1014. package/dist/tokens/segments/comp-scw-single-input-field-bg/_index-vars.scss +4 -4
  1015. package/dist/tokens/segments/comp-scw-single-input-field-v2/_index-mixins.scss +1 -1
  1016. package/dist/tokens/segments/comp-scw-single-input-field-v2/_index-vars.scss +4 -4
  1017. package/dist/tokens/source/assets/graphic-apple-app-store.js +1 -0
  1018. package/dist/tokens/source/assets/graphic-apple-app-store.js.gz +0 -0
  1019. package/dist/tokens/source/assets/graphic-apple-app-store.svg +1 -0
  1020. package/dist/tokens/source/assets/graphic-apple-app-store.svg.gz +0 -0
  1021. package/dist/tokens/source/assets/graphic-ehl.js +1 -0
  1022. package/dist/tokens/source/assets/graphic-ehl.js.gz +0 -0
  1023. package/dist/tokens/source/assets/graphic-ehl.svg +1 -0
  1024. package/dist/tokens/source/assets/graphic-ehl.svg.gz +0 -0
  1025. package/dist/tokens/source/assets/graphic-google-play-store.js +1 -0
  1026. package/dist/tokens/source/assets/graphic-google-play-store.js.gz +0 -0
  1027. package/dist/tokens/source/assets/graphic-google-play-store.svg +1 -0
  1028. package/dist/tokens/source/assets/graphic-google-play-store.svg.gz +0 -0
  1029. package/dist/tokens/source/assets/graphic-logo.js +1 -0
  1030. package/dist/tokens/source/assets/graphic-logo.js.gz +0 -0
  1031. package/dist/tokens/source/assets/graphic-logo.svg +1 -0
  1032. package/dist/tokens/source/assets/graphic-logo.svg.gz +0 -0
  1033. package/dist/tokens/source/assets/graphic-ncua.js +1 -0
  1034. package/dist/tokens/source/assets/graphic-ncua.js.gz +0 -0
  1035. package/dist/tokens/source/assets/graphic-ncua.svg +1 -0
  1036. package/dist/tokens/source/assets/graphic-ncua.svg.gz +0 -0
  1037. package/dist/tokens/source/assets/icon-check.js +1 -0
  1038. package/dist/tokens/source/assets/icon-check.js.gz +0 -0
  1039. package/dist/tokens/source/assets/icon-check.svg +1 -0
  1040. package/dist/tokens/source/assets/icon-check.svg.gz +0 -0
  1041. package/dist/tokens/source/assets/icon-chevron-down.js +1 -1
  1042. package/dist/tokens/source/assets/icon-chevron-down.js.gz +0 -0
  1043. package/dist/tokens/source/assets/icon-chevron-down.svg +1 -1
  1044. package/dist/tokens/source/assets/icon-chevron-down.svg.gz +0 -0
  1045. package/dist/tokens/source/assets/icon-chevron-left.js +1 -1
  1046. package/dist/tokens/source/assets/icon-chevron-left.js.gz +0 -0
  1047. package/dist/tokens/source/assets/icon-chevron-left.svg +1 -1
  1048. package/dist/tokens/source/assets/icon-chevron-left.svg.gz +0 -0
  1049. package/dist/tokens/source/assets/icon-chevron-right.js +1 -1
  1050. package/dist/tokens/source/assets/icon-chevron-right.js.gz +0 -0
  1051. package/dist/tokens/source/assets/icon-chevron-right.svg +1 -1
  1052. package/dist/tokens/source/assets/icon-chevron-right.svg.gz +0 -0
  1053. package/dist/tokens/source/assets/icon-chevron-up.js +1 -1
  1054. package/dist/tokens/source/assets/icon-chevron-up.js.gz +0 -0
  1055. package/dist/tokens/source/assets/icon-chevron-up.svg +1 -1
  1056. package/dist/tokens/source/assets/icon-chevron-up.svg.gz +0 -0
  1057. package/dist/tokens/source/assets/icon-circle.js +1 -0
  1058. package/dist/tokens/source/assets/icon-circle.js.gz +0 -0
  1059. package/dist/tokens/source/assets/icon-circle.svg +1 -0
  1060. package/dist/tokens/source/assets/icon-circle.svg.gz +0 -0
  1061. package/dist/tokens/source/assets/icon-clear.js +1 -1
  1062. package/dist/tokens/source/assets/icon-clear.js.gz +0 -0
  1063. package/dist/tokens/source/assets/icon-clear.svg +1 -1
  1064. package/dist/tokens/source/assets/icon-clear.svg.gz +0 -0
  1065. package/dist/tokens/source/assets/icon-clock.js +1 -0
  1066. package/dist/tokens/source/assets/icon-clock.js.gz +0 -0
  1067. package/dist/tokens/source/assets/icon-clock.svg +1 -0
  1068. package/dist/tokens/source/assets/icon-clock.svg.gz +0 -0
  1069. package/dist/tokens/source/assets/icon-close.js +1 -0
  1070. package/dist/tokens/source/assets/icon-close.js.gz +0 -0
  1071. package/dist/tokens/source/assets/icon-close.svg +1 -0
  1072. package/dist/tokens/source/assets/icon-close.svg.gz +0 -0
  1073. package/dist/tokens/source/assets/icon-code.js +1 -0
  1074. package/dist/tokens/source/assets/icon-code.js.gz +0 -0
  1075. package/dist/tokens/source/assets/icon-code.svg +1 -0
  1076. package/dist/tokens/source/assets/icon-code.svg.gz +0 -0
  1077. package/dist/tokens/source/assets/icon-crosshairs.js +1 -0
  1078. package/dist/tokens/source/assets/icon-crosshairs.js.gz +0 -0
  1079. package/dist/tokens/source/assets/icon-crosshairs.svg +1 -0
  1080. package/dist/tokens/source/assets/icon-crosshairs.svg.gz +0 -0
  1081. package/dist/tokens/source/assets/icon-document.js +1 -0
  1082. package/dist/tokens/source/assets/icon-document.js.gz +0 -0
  1083. package/dist/tokens/source/assets/icon-document.svg +1 -0
  1084. package/dist/tokens/source/assets/icon-document.svg.gz +0 -0
  1085. package/dist/tokens/source/assets/icon-download.js +1 -0
  1086. package/dist/tokens/source/assets/icon-download.js.gz +0 -0
  1087. package/dist/tokens/source/assets/icon-download.svg +1 -0
  1088. package/dist/tokens/source/assets/icon-download.svg.gz +0 -0
  1089. package/dist/tokens/source/assets/icon-edit.js +1 -0
  1090. package/dist/tokens/source/assets/icon-edit.js.gz +0 -0
  1091. package/dist/tokens/source/assets/icon-edit.svg +1 -0
  1092. package/dist/tokens/source/assets/icon-edit.svg.gz +0 -0
  1093. package/dist/tokens/source/assets/icon-envelope.js +1 -0
  1094. package/dist/tokens/source/assets/icon-envelope.js.gz +0 -0
  1095. package/dist/tokens/source/assets/icon-envelope.svg +1 -0
  1096. package/dist/tokens/source/assets/icon-envelope.svg.gz +0 -0
  1097. package/dist/tokens/source/assets/icon-external-link.js +1 -0
  1098. package/dist/tokens/source/assets/icon-external-link.js.gz +0 -0
  1099. package/dist/tokens/source/assets/icon-external-link.svg +1 -0
  1100. package/dist/tokens/source/assets/icon-external-link.svg.gz +0 -0
  1101. package/dist/tokens/source/assets/icon-facebook.js +1 -0
  1102. package/dist/tokens/source/assets/icon-facebook.js.gz +0 -0
  1103. package/dist/tokens/source/assets/icon-facebook.svg +1 -0
  1104. package/dist/tokens/source/assets/icon-facebook.svg.gz +0 -0
  1105. package/dist/tokens/source/assets/icon-hidden.js +1 -1
  1106. package/dist/tokens/source/assets/icon-hidden.js.gz +0 -0
  1107. package/dist/tokens/source/assets/icon-hidden.svg +1 -1
  1108. package/dist/tokens/source/assets/icon-hidden.svg.gz +0 -0
  1109. package/dist/tokens/source/assets/icon-info.js +1 -0
  1110. package/dist/tokens/source/assets/icon-info.js.gz +0 -0
  1111. package/dist/tokens/source/assets/icon-info.svg +1 -0
  1112. package/dist/tokens/source/assets/icon-info.svg.gz +0 -0
  1113. package/dist/tokens/source/assets/icon-instagram.js +1 -0
  1114. package/dist/tokens/source/assets/icon-instagram.js.gz +0 -0
  1115. package/dist/tokens/source/assets/icon-instagram.svg +1 -0
  1116. package/dist/tokens/source/assets/icon-instagram.svg.gz +0 -0
  1117. package/dist/tokens/source/assets/icon-linkedin.js +1 -0
  1118. package/dist/tokens/source/assets/icon-linkedin.js.gz +0 -0
  1119. package/dist/tokens/source/assets/icon-linkedin.svg +1 -0
  1120. package/dist/tokens/source/assets/icon-linkedin.svg.gz +0 -0
  1121. package/dist/tokens/source/assets/icon-location-dot.js +1 -0
  1122. package/dist/tokens/source/assets/icon-location-dot.js.gz +0 -0
  1123. package/dist/tokens/source/assets/icon-location-dot.svg +1 -0
  1124. package/dist/tokens/source/assets/icon-location-dot.svg.gz +0 -0
  1125. package/dist/tokens/source/assets/icon-location.js +1 -1
  1126. package/dist/tokens/source/assets/icon-location.js.gz +0 -0
  1127. package/dist/tokens/source/assets/icon-location.svg +1 -1
  1128. package/dist/tokens/source/assets/icon-location.svg.gz +0 -0
  1129. package/dist/tokens/source/assets/icon-lock.js +1 -0
  1130. package/dist/tokens/source/assets/icon-lock.js.gz +0 -0
  1131. package/dist/tokens/source/assets/icon-lock.svg +1 -0
  1132. package/dist/tokens/source/assets/icon-lock.svg.gz +0 -0
  1133. package/dist/tokens/source/assets/icon-message.js +1 -0
  1134. package/dist/tokens/source/assets/icon-message.js.gz +0 -0
  1135. package/dist/tokens/source/assets/icon-message.svg +1 -0
  1136. package/dist/tokens/source/assets/icon-message.svg.gz +0 -0
  1137. package/dist/tokens/source/assets/icon-minus.js +1 -0
  1138. package/dist/tokens/source/assets/icon-minus.js.gz +0 -0
  1139. package/dist/tokens/source/assets/icon-minus.svg +1 -0
  1140. package/dist/tokens/source/assets/icon-minus.svg.gz +0 -0
  1141. package/dist/tokens/source/assets/icon-mobile.js +1 -0
  1142. package/dist/tokens/source/assets/icon-mobile.js.gz +0 -0
  1143. package/dist/tokens/source/assets/icon-mobile.svg +1 -0
  1144. package/dist/tokens/source/assets/icon-mobile.svg.gz +0 -0
  1145. package/dist/tokens/source/assets/icon-pdf.js +1 -0
  1146. package/dist/tokens/source/assets/icon-pdf.js.gz +0 -0
  1147. package/dist/tokens/source/assets/icon-pdf.svg +1 -0
  1148. package/dist/tokens/source/assets/icon-pdf.svg.gz +0 -0
  1149. package/dist/tokens/source/assets/icon-placeholder.js +1 -1
  1150. package/dist/tokens/source/assets/icon-placeholder.js.gz +0 -0
  1151. package/dist/tokens/source/assets/icon-placeholder.svg +1 -1
  1152. package/dist/tokens/source/assets/icon-placeholder.svg.gz +0 -0
  1153. package/dist/tokens/source/assets/icon-plus.js +1 -0
  1154. package/dist/tokens/source/assets/icon-plus.js.gz +0 -0
  1155. package/dist/tokens/source/assets/icon-plus.svg +1 -0
  1156. package/dist/tokens/source/assets/icon-plus.svg.gz +0 -0
  1157. package/dist/tokens/source/assets/icon-print.js +1 -0
  1158. package/dist/tokens/source/assets/icon-print.js.gz +0 -0
  1159. package/dist/tokens/source/assets/icon-print.svg +1 -0
  1160. package/dist/tokens/source/assets/icon-print.svg.gz +0 -0
  1161. package/dist/tokens/source/assets/icon-search.js +1 -1
  1162. package/dist/tokens/source/assets/icon-search.js.gz +0 -0
  1163. package/dist/tokens/source/assets/icon-search.svg +1 -1
  1164. package/dist/tokens/source/assets/icon-search.svg.gz +0 -0
  1165. package/dist/tokens/source/assets/icon-slider.js +1 -0
  1166. package/dist/tokens/source/assets/icon-slider.js.gz +0 -0
  1167. package/dist/tokens/source/assets/icon-slider.svg +1 -0
  1168. package/dist/tokens/source/assets/icon-slider.svg.gz +0 -0
  1169. package/dist/tokens/source/assets/icon-tiktok.js +1 -0
  1170. package/dist/tokens/source/assets/icon-tiktok.js.gz +0 -0
  1171. package/dist/tokens/source/assets/icon-tiktok.svg +1 -0
  1172. package/dist/tokens/source/assets/icon-tiktok.svg.gz +0 -0
  1173. package/dist/tokens/source/assets/icon-user.js +1 -0
  1174. package/dist/tokens/source/assets/icon-user.js.gz +0 -0
  1175. package/dist/tokens/source/assets/icon-user.svg +1 -0
  1176. package/dist/tokens/source/assets/icon-user.svg.gz +0 -0
  1177. package/dist/tokens/source/assets/icon-visible.js +1 -1
  1178. package/dist/tokens/source/assets/icon-visible.js.gz +0 -0
  1179. package/dist/tokens/source/assets/icon-visible.svg +1 -1
  1180. package/dist/tokens/source/assets/icon-visible.svg.gz +0 -0
  1181. package/dist/tokens/source/assets/svgs.js +77 -15
  1182. package/dist/tokens/source/assets/svgs.js.gz +0 -0
  1183. package/dist/tokens/source/componentScssMixins/components-scw-card-.json +2 -2
  1184. package/dist/tokens/source/componentScssMixins/components-scw-card-.json.gz +0 -0
  1185. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-action-.json +2 -2
  1186. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-action-.json.gz +0 -0
  1187. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-description-.json +8 -8
  1188. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-description-.json.gz +0 -0
  1189. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-heading-.json +4 -4
  1190. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-heading-.json.gz +0 -0
  1191. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-image-.json +8 -8
  1192. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-image-.json.gz +0 -0
  1193. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-super-heading-.json +4 -4
  1194. package/dist/tokens/source/componentScssMixins/components-scw-card-color-checking-super-heading-.json.gz +0 -0
  1195. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-action-.json +2 -2
  1196. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-action-.json.gz +0 -0
  1197. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-description-.json +8 -8
  1198. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-description-.json.gz +0 -0
  1199. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-heading-.json +4 -4
  1200. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-heading-.json.gz +0 -0
  1201. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-image-.json +8 -8
  1202. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-image-.json.gz +0 -0
  1203. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-super-heading-.json +4 -4
  1204. package/dist/tokens/source/componentScssMixins/components-scw-card-color-credit-cards-super-heading-.json.gz +0 -0
  1205. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-action-.json +2 -2
  1206. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-action-.json.gz +0 -0
  1207. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-description-.json +8 -8
  1208. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-description-.json.gz +0 -0
  1209. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-heading-.json +4 -4
  1210. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-heading-.json.gz +0 -0
  1211. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-image-.json +8 -8
  1212. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-image-.json.gz +0 -0
  1213. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-super-heading-.json +4 -4
  1214. package/dist/tokens/source/componentScssMixins/components-scw-card-color-investments-super-heading-.json.gz +0 -0
  1215. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-action-.json +2 -2
  1216. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-action-.json.gz +0 -0
  1217. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-description-.json +8 -8
  1218. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-description-.json.gz +0 -0
  1219. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-heading-.json +4 -4
  1220. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-heading-.json.gz +0 -0
  1221. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-image-.json +8 -8
  1222. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-image-.json.gz +0 -0
  1223. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-super-heading-.json +4 -4
  1224. package/dist/tokens/source/componentScssMixins/components-scw-card-color-mortgage-super-heading-.json.gz +0 -0
  1225. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-action-.json +2 -2
  1226. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-action-.json.gz +0 -0
  1227. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-description-.json +8 -8
  1228. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-description-.json.gz +0 -0
  1229. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-heading-.json +4 -4
  1230. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-heading-.json.gz +0 -0
  1231. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-image-.json +8 -8
  1232. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-image-.json.gz +0 -0
  1233. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-super-heading-.json +4 -4
  1234. package/dist/tokens/source/componentScssMixins/components-scw-card-color-savings-super-heading-.json.gz +0 -0
  1235. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-action-.json +2 -2
  1236. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-action-.json.gz +0 -0
  1237. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-description-.json +8 -8
  1238. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-description-.json.gz +0 -0
  1239. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-image-.json +8 -8
  1240. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-image-.json.gz +0 -0
  1241. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-scw-heading-.json +4 -4
  1242. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-scw-heading-.json.gz +0 -0
  1243. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-super-heading-.json +4 -4
  1244. package/dist/tokens/source/componentScssMixins/components-scw-card-color-student-super-heading-.json.gz +0 -0
  1245. package/dist/tokens/source/componentScssMixins/components-scw-card-default-action-.json +2 -2
  1246. package/dist/tokens/source/componentScssMixins/components-scw-card-default-action-.json.gz +0 -0
  1247. package/dist/tokens/source/componentScssMixins/components-scw-card-default-description-.json +8 -8
  1248. package/dist/tokens/source/componentScssMixins/components-scw-card-default-description-.json.gz +0 -0
  1249. package/dist/tokens/source/componentScssMixins/components-scw-card-default-heading-.json +4 -4
  1250. package/dist/tokens/source/componentScssMixins/components-scw-card-default-heading-.json.gz +0 -0
  1251. package/dist/tokens/source/componentScssMixins/components-scw-card-default-image-.json +8 -8
  1252. package/dist/tokens/source/componentScssMixins/components-scw-card-default-image-.json.gz +0 -0
  1253. package/dist/tokens/source/componentScssMixins/components-scw-card-default-super-heading-.json +4 -4
  1254. package/dist/tokens/source/componentScssMixins/components-scw-card-default-super-heading-.json.gz +0 -0
  1255. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-action-.json +2 -2
  1256. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-action-.json.gz +0 -0
  1257. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-checking-action-.json +2 -2
  1258. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-checking-action-.json.gz +0 -0
  1259. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-credit-cards-action-.json +2 -2
  1260. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-credit-cards-action-.json.gz +0 -0
  1261. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-investments-action-.json +2 -2
  1262. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-investments-action-.json.gz +0 -0
  1263. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-mortgage-action-.json +2 -2
  1264. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-mortgage-action-.json.gz +0 -0
  1265. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-savings-action-.json +2 -2
  1266. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-savings-action-.json.gz +0 -0
  1267. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-student-action-.json +2 -2
  1268. package/dist/tokens/source/componentScssMixins/components-scw-card-size-medium-color-student-action-.json.gz +0 -0
  1269. package/dist/tokens/source/componentScssMixins/components-scw-heading-.json +2 -2
  1270. package/dist/tokens/source/componentScssMixins/components-scw-heading-.json.gz +0 -0
  1271. package/dist/tokens/source/componentScssMixins/components-scw-icon-.json +2 -2
  1272. package/dist/tokens/source/componentScssMixins/components-scw-icon-.json.gz +0 -0
  1273. package/dist/tokens/source/componentScssMixins/components-scw-icon-v2-.json +2 -2
  1274. package/dist/tokens/source/componentScssMixins/components-scw-icon-v2-.json.gz +0 -0
  1275. package/dist/tokens/source/componentScssMixins/components-scw-input-.json +2 -2
  1276. package/dist/tokens/source/componentScssMixins/components-scw-input-.json.gz +0 -0
  1277. package/dist/tokens/source/componentScssMixins/components-scw-input-feedback-base-.json +2 -2
  1278. package/dist/tokens/source/componentScssMixins/components-scw-input-feedback-base-.json.gz +0 -0
  1279. package/dist/tokens/source/componentScssMixins/components-scw-input-field-.json +2 -2
  1280. package/dist/tokens/source/componentScssMixins/components-scw-input-field-.json.gz +0 -0
  1281. package/dist/tokens/source/componentScssMixins/components-scw-input-field-bg-.json +2 -2
  1282. package/dist/tokens/source/componentScssMixins/components-scw-input-field-bg-.json.gz +0 -0
  1283. package/dist/tokens/source/componentScssMixins/components-scw-input-label-base-.json +2 -2
  1284. package/dist/tokens/source/componentScssMixins/components-scw-input-label-base-.json.gz +0 -0
  1285. package/dist/tokens/source/componentScssMixins/components-scw-input-right-action-.json +2 -2
  1286. package/dist/tokens/source/componentScssMixins/components-scw-input-right-action-.json.gz +0 -0
  1287. package/dist/tokens/source/componentScssMixins/components-scw-input-text-base-.json +2 -2
  1288. package/dist/tokens/source/componentScssMixins/components-scw-input-text-base-.json.gz +0 -0
  1289. package/dist/tokens/source/componentScssMixins/components-scw-input-text-container-.json +2 -2
  1290. package/dist/tokens/source/componentScssMixins/components-scw-input-text-container-.json.gz +0 -0
  1291. package/dist/tokens/source/componentScssMixins/components-scw-link-.json +2 -2
  1292. package/dist/tokens/source/componentScssMixins/components-scw-link-.json.gz +0 -0
  1293. package/dist/tokens/source/componentScssMixins/components-scw-menu-item-.json +2 -2
  1294. package/dist/tokens/source/componentScssMixins/components-scw-menu-item-.json.gz +0 -0
  1295. package/dist/tokens/source/componentScssMixins/components-scw-page-alert-.json +2 -2
  1296. package/dist/tokens/source/componentScssMixins/components-scw-page-alert-.json.gz +0 -0
  1297. package/dist/tokens/source/componentScssMixins/components-scw-single-input-.json +2 -2
  1298. package/dist/tokens/source/componentScssMixins/components-scw-single-input-.json.gz +0 -0
  1299. package/dist/tokens/source/componentScssMixins/components-scw-single-input-field-bg-.json +2 -2
  1300. package/dist/tokens/source/componentScssMixins/components-scw-single-input-field-bg-.json.gz +0 -0
  1301. package/dist/tokens/source/componentScssMixins/components-scw-single-input-field-v2-.json +2 -2
  1302. package/dist/tokens/source/componentScssMixins/components-scw-single-input-field-v2-.json.gz +0 -0
  1303. package/dist/tokens/source/componentScssMixins.json +232 -232
  1304. package/dist/tokens/source/componentScssMixins.json.gz +0 -0
  1305. package/dist/tokens/source/componentScssMixins.scss +144 -144
  1306. package/dist/tokens/source/cssApi/graphics-apple-app-store-.css.json +7 -0
  1307. package/dist/tokens/source/cssApi/graphics-apple-app-store-.css.json.gz +0 -0
  1308. package/dist/tokens/source/cssApi/graphics-apple-app-store-.scss.json +7 -0
  1309. package/dist/tokens/source/cssApi/graphics-apple-app-store-.scss.json.gz +0 -0
  1310. package/dist/tokens/source/cssApi/graphics-ehl-.css.json +7 -0
  1311. package/dist/tokens/source/cssApi/graphics-ehl-.css.json.gz +0 -0
  1312. package/dist/tokens/source/cssApi/graphics-ehl-.scss.json +7 -0
  1313. package/dist/tokens/source/cssApi/graphics-ehl-.scss.json.gz +0 -0
  1314. package/dist/tokens/source/cssApi/graphics-google-play-store-.css.json +7 -0
  1315. package/dist/tokens/source/cssApi/graphics-google-play-store-.css.json.gz +0 -0
  1316. package/dist/tokens/source/cssApi/graphics-google-play-store-.scss.json +7 -0
  1317. package/dist/tokens/source/cssApi/graphics-google-play-store-.scss.json.gz +0 -0
  1318. package/dist/tokens/source/cssApi/graphics-logo-.css.json +7 -0
  1319. package/dist/tokens/source/cssApi/graphics-logo-.css.json.gz +0 -0
  1320. package/dist/tokens/source/cssApi/graphics-logo-.scss.json +7 -0
  1321. package/dist/tokens/source/cssApi/graphics-logo-.scss.json.gz +0 -0
  1322. package/dist/tokens/source/cssApi/graphics-ncua-.css.json +7 -0
  1323. package/dist/tokens/source/cssApi/graphics-ncua-.css.json.gz +0 -0
  1324. package/dist/tokens/source/cssApi/graphics-ncua-.scss.json +7 -0
  1325. package/dist/tokens/source/cssApi/graphics-ncua-.scss.json.gz +0 -0
  1326. package/dist/tokens/source/cssApi.css +30 -0
  1327. package/dist/tokens/source/cssApi.css.gz +0 -0
  1328. package/dist/tokens/source/cssApi.css.json +35 -0
  1329. package/dist/tokens/source/cssApi.css.json.gz +0 -0
  1330. package/dist/tokens/source/cssApi.scss +25 -0
  1331. package/dist/tokens/source/cssApi.scss.json +35 -0
  1332. package/dist/tokens/source/cssApi.scss.json.gz +0 -0
  1333. package/dist/tokens/source/cssVariables/graphics-apple-app-store-.json +11 -0
  1334. package/dist/tokens/source/cssVariables/graphics-apple-app-store-.json.gz +0 -0
  1335. package/dist/tokens/source/cssVariables/graphics-ehl-.json +11 -0
  1336. package/dist/tokens/source/cssVariables/graphics-ehl-.json.gz +0 -0
  1337. package/dist/tokens/source/cssVariables/graphics-google-play-store-.json +11 -0
  1338. package/dist/tokens/source/cssVariables/graphics-google-play-store-.json.gz +0 -0
  1339. package/dist/tokens/source/cssVariables/graphics-logo-.json +11 -0
  1340. package/dist/tokens/source/cssVariables/graphics-logo-.json.gz +0 -0
  1341. package/dist/tokens/source/cssVariables/graphics-ncua-.json +11 -0
  1342. package/dist/tokens/source/cssVariables/graphics-ncua-.json.gz +0 -0
  1343. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-.json +1 -1
  1344. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-.json.gz +0 -0
  1345. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-01.json +1 -1
  1346. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-01.json.gz +0 -0
  1347. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-02.json +1 -1
  1348. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-02.json.gz +0 -0
  1349. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-03.json +1 -1
  1350. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-03.json.gz +0 -0
  1351. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-04.json +1 -1
  1352. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-04.json.gz +0 -0
  1353. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-05.json +1 -1
  1354. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-05.json.gz +0 -0
  1355. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-06.json +1 -1
  1356. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-06.json.gz +0 -0
  1357. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-07.json +1 -1
  1358. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-07.json.gz +0 -0
  1359. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-08.json +1 -1
  1360. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-08.json.gz +0 -0
  1361. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-09.json +1 -1
  1362. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-09.json.gz +0 -0
  1363. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-10.json +1 -1
  1364. package/dist/tokens/source/cssVariables/typography-text-bold-condensed-text-bold-condensed-10.json.gz +0 -0
  1365. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-.json +1 -1
  1366. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-.json.gz +0 -0
  1367. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-01.json +1 -1
  1368. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-01.json.gz +0 -0
  1369. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-02.json +1 -1
  1370. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-02.json.gz +0 -0
  1371. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-03.json +1 -1
  1372. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-03.json.gz +0 -0
  1373. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-04.json +1 -1
  1374. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-04.json.gz +0 -0
  1375. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-05.json +1 -1
  1376. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-05.json.gz +0 -0
  1377. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-06.json +1 -1
  1378. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-06.json.gz +0 -0
  1379. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-07.json +1 -1
  1380. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-07.json.gz +0 -0
  1381. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-08.json +1 -1
  1382. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-08.json.gz +0 -0
  1383. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-09.json +1 -1
  1384. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-09.json.gz +0 -0
  1385. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-10.json +1 -1
  1386. package/dist/tokens/source/cssVariables/typography-text-bold-text-bold-10.json.gz +0 -0
  1387. package/dist/tokens/source/cssVariables/typography-text-text-.json +1 -1
  1388. package/dist/tokens/source/cssVariables/typography-text-text-.json.gz +0 -0
  1389. package/dist/tokens/source/cssVariables/typography-text-text-01.json +1 -1
  1390. package/dist/tokens/source/cssVariables/typography-text-text-01.json.gz +0 -0
  1391. package/dist/tokens/source/cssVariables/typography-text-text-02.json +1 -1
  1392. package/dist/tokens/source/cssVariables/typography-text-text-02.json.gz +0 -0
  1393. package/dist/tokens/source/cssVariables/typography-text-text-03.json +1 -1
  1394. package/dist/tokens/source/cssVariables/typography-text-text-03.json.gz +0 -0
  1395. package/dist/tokens/source/cssVariables/typography-text-text-04.json +1 -1
  1396. package/dist/tokens/source/cssVariables/typography-text-text-04.json.gz +0 -0
  1397. package/dist/tokens/source/cssVariables/typography-text-text-05.json +1 -1
  1398. package/dist/tokens/source/cssVariables/typography-text-text-05.json.gz +0 -0
  1399. package/dist/tokens/source/cssVariables/typography-text-text-06.json +1 -1
  1400. package/dist/tokens/source/cssVariables/typography-text-text-06.json.gz +0 -0
  1401. package/dist/tokens/source/cssVariables/typography-text-text-07.json +1 -1
  1402. package/dist/tokens/source/cssVariables/typography-text-text-07.json.gz +0 -0
  1403. package/dist/tokens/source/cssVariables/typography-text-text-08.json +1 -1
  1404. package/dist/tokens/source/cssVariables/typography-text-text-08.json.gz +0 -0
  1405. package/dist/tokens/source/cssVariables/typography-text-text-09.json +1 -1
  1406. package/dist/tokens/source/cssVariables/typography-text-text-09.json.gz +0 -0
  1407. package/dist/tokens/source/cssVariables/typography-text-text-10.json +1 -1
  1408. package/dist/tokens/source/cssVariables/typography-text-text-10.json.gz +0 -0
  1409. package/dist/tokens/source/cssVariables.css +48 -33
  1410. package/dist/tokens/source/cssVariables.css.gz +0 -0
  1411. package/dist/tokens/source/cssVariables.json +88 -33
  1412. package/dist/tokens/source/cssVariables.json.gz +0 -0
  1413. package/dist/tokens/source/jsCss.js +1 -1
  1414. package/dist/tokens/source/jsCss.js.gz +0 -0
  1415. package/dist/tokens/source/jsCssGenerator.js +1 -1
  1416. package/dist/tokens/source/jsCssGenerator.js.gz +0 -0
  1417. package/dist/tokens/source/jsCssGeneratorSansAssets.js +10 -10
  1418. package/dist/tokens/source/jsCssGeneratorSansAssets.js.gz +0 -0
  1419. package/dist/tokens/source/scssVariables/components-scw-alert-description-.json +2 -2
  1420. package/dist/tokens/source/scssVariables/components-scw-alert-description-.json.gz +0 -0
  1421. package/dist/tokens/source/scssVariables/components-scw-alert-message-.json +2 -2
  1422. package/dist/tokens/source/scssVariables/components-scw-alert-message-.json.gz +0 -0
  1423. package/dist/tokens/source/scssVariables/components-scw-card-.json +8 -8
  1424. package/dist/tokens/source/scssVariables/components-scw-card-.json.gz +0 -0
  1425. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-action-.json +8 -8
  1426. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-action-.json.gz +0 -0
  1427. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-description-.json +8 -8
  1428. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-description-.json.gz +0 -0
  1429. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-heading-.json +6 -6
  1430. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-heading-.json.gz +0 -0
  1431. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-image-.json +6 -6
  1432. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-image-.json.gz +0 -0
  1433. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-super-heading-.json +8 -8
  1434. package/dist/tokens/source/scssVariables/components-scw-card-color-checking-super-heading-.json.gz +0 -0
  1435. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-action-.json +8 -8
  1436. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-action-.json.gz +0 -0
  1437. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-description-.json +8 -8
  1438. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-description-.json.gz +0 -0
  1439. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-heading-.json +6 -6
  1440. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-heading-.json.gz +0 -0
  1441. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-image-.json +6 -6
  1442. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-image-.json.gz +0 -0
  1443. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-super-heading-.json +8 -8
  1444. package/dist/tokens/source/scssVariables/components-scw-card-color-credit-cards-super-heading-.json.gz +0 -0
  1445. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-action-.json +8 -8
  1446. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-action-.json.gz +0 -0
  1447. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-description-.json +8 -8
  1448. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-description-.json.gz +0 -0
  1449. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-heading-.json +6 -6
  1450. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-heading-.json.gz +0 -0
  1451. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-image-.json +6 -6
  1452. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-image-.json.gz +0 -0
  1453. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-super-heading-.json +8 -8
  1454. package/dist/tokens/source/scssVariables/components-scw-card-color-investments-super-heading-.json.gz +0 -0
  1455. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-action-.json +8 -8
  1456. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-action-.json.gz +0 -0
  1457. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-description-.json +8 -8
  1458. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-description-.json.gz +0 -0
  1459. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-heading-.json +6 -6
  1460. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-heading-.json.gz +0 -0
  1461. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-image-.json +6 -6
  1462. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-image-.json.gz +0 -0
  1463. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-super-heading-.json +8 -8
  1464. package/dist/tokens/source/scssVariables/components-scw-card-color-mortgage-super-heading-.json.gz +0 -0
  1465. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-action-.json +8 -8
  1466. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-action-.json.gz +0 -0
  1467. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-description-.json +8 -8
  1468. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-description-.json.gz +0 -0
  1469. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-heading-.json +6 -6
  1470. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-heading-.json.gz +0 -0
  1471. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-image-.json +6 -6
  1472. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-image-.json.gz +0 -0
  1473. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-super-heading-.json +8 -8
  1474. package/dist/tokens/source/scssVariables/components-scw-card-color-savings-super-heading-.json.gz +0 -0
  1475. package/dist/tokens/source/scssVariables/components-scw-card-color-student-action-.json +8 -8
  1476. package/dist/tokens/source/scssVariables/components-scw-card-color-student-action-.json.gz +0 -0
  1477. package/dist/tokens/source/scssVariables/components-scw-card-color-student-description-.json +8 -8
  1478. package/dist/tokens/source/scssVariables/components-scw-card-color-student-description-.json.gz +0 -0
  1479. package/dist/tokens/source/scssVariables/components-scw-card-color-student-image-.json +6 -6
  1480. package/dist/tokens/source/scssVariables/components-scw-card-color-student-image-.json.gz +0 -0
  1481. package/dist/tokens/source/scssVariables/components-scw-card-color-student-scw-heading-.json +6 -6
  1482. package/dist/tokens/source/scssVariables/components-scw-card-color-student-scw-heading-.json.gz +0 -0
  1483. package/dist/tokens/source/scssVariables/components-scw-card-color-student-scw-heading-label-.json +2 -2
  1484. package/dist/tokens/source/scssVariables/components-scw-card-color-student-scw-heading-label-.json.gz +0 -0
  1485. package/dist/tokens/source/scssVariables/components-scw-card-color-student-super-heading-.json +8 -8
  1486. package/dist/tokens/source/scssVariables/components-scw-card-color-student-super-heading-.json.gz +0 -0
  1487. package/dist/tokens/source/scssVariables/components-scw-card-default-action-.json +8 -8
  1488. package/dist/tokens/source/scssVariables/components-scw-card-default-action-.json.gz +0 -0
  1489. package/dist/tokens/source/scssVariables/components-scw-card-default-description-.json +8 -8
  1490. package/dist/tokens/source/scssVariables/components-scw-card-default-description-.json.gz +0 -0
  1491. package/dist/tokens/source/scssVariables/components-scw-card-default-heading-.json +6 -6
  1492. package/dist/tokens/source/scssVariables/components-scw-card-default-heading-.json.gz +0 -0
  1493. package/dist/tokens/source/scssVariables/components-scw-card-default-image-.json +6 -6
  1494. package/dist/tokens/source/scssVariables/components-scw-card-default-image-.json.gz +0 -0
  1495. package/dist/tokens/source/scssVariables/components-scw-card-default-super-heading-.json +8 -8
  1496. package/dist/tokens/source/scssVariables/components-scw-card-default-super-heading-.json.gz +0 -0
  1497. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-action-.json +8 -8
  1498. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-action-.json.gz +0 -0
  1499. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-checking-action-.json +8 -8
  1500. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-checking-action-.json.gz +0 -0
  1501. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-checking-description-.json +2 -2
  1502. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-checking-description-.json.gz +0 -0
  1503. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-checking-super-heading-.json +2 -2
  1504. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-checking-super-heading-.json.gz +0 -0
  1505. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-credit-cards-action-.json +8 -8
  1506. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-credit-cards-action-.json.gz +0 -0
  1507. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-credit-cards-description-.json +2 -2
  1508. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-credit-cards-description-.json.gz +0 -0
  1509. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-credit-cards-super-heading-.json +2 -2
  1510. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-credit-cards-super-heading-.json.gz +0 -0
  1511. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-investments-action-.json +8 -8
  1512. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-investments-action-.json.gz +0 -0
  1513. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-investments-description-.json +2 -2
  1514. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-investments-description-.json.gz +0 -0
  1515. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-investments-super-heading-.json +2 -2
  1516. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-investments-super-heading-.json.gz +0 -0
  1517. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-mortgage-action-.json +8 -8
  1518. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-mortgage-action-.json.gz +0 -0
  1519. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-mortgage-description-.json +2 -2
  1520. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-mortgage-description-.json.gz +0 -0
  1521. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-mortgage-super-heading-.json +2 -2
  1522. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-mortgage-super-heading-.json.gz +0 -0
  1523. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-savings-action-.json +8 -8
  1524. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-savings-action-.json.gz +0 -0
  1525. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-savings-description-.json +2 -2
  1526. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-savings-description-.json.gz +0 -0
  1527. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-savings-super-heading-.json +2 -2
  1528. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-savings-super-heading-.json.gz +0 -0
  1529. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-student-action-.json +8 -8
  1530. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-student-action-.json.gz +0 -0
  1531. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-student-description-.json +2 -2
  1532. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-student-description-.json.gz +0 -0
  1533. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-student-super-heading-.json +2 -2
  1534. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-color-student-super-heading-.json.gz +0 -0
  1535. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-description-.json +2 -2
  1536. package/dist/tokens/source/scssVariables/components-scw-card-size-medium-description-.json.gz +0 -0
  1537. package/dist/tokens/source/scssVariables/components-scw-heading-.json +8 -8
  1538. package/dist/tokens/source/scssVariables/components-scw-heading-.json.gz +0 -0
  1539. package/dist/tokens/source/scssVariables/components-scw-heading-default-label-.json +2 -2
  1540. package/dist/tokens/source/scssVariables/components-scw-heading-default-label-.json.gz +0 -0
  1541. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-label-.json +2 -2
  1542. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-label-.json.gz +0 -0
  1543. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-state-disabled-label-.json +2 -2
  1544. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-state-disabled-label-.json.gz +0 -0
  1545. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-state-focused-label-.json +2 -2
  1546. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-state-focused-label-.json.gz +0 -0
  1547. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-state-hover-label-.json +2 -2
  1548. package/dist/tokens/source/scssVariables/components-scw-heading-size-h2-state-hover-label-.json.gz +0 -0
  1549. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-label-.json +2 -2
  1550. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-label-.json.gz +0 -0
  1551. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-state-disabled-label-.json +2 -2
  1552. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-state-disabled-label-.json.gz +0 -0
  1553. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-state-focused-label-.json +2 -2
  1554. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-state-focused-label-.json.gz +0 -0
  1555. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-state-hover-label-.json +2 -2
  1556. package/dist/tokens/source/scssVariables/components-scw-heading-size-h3-state-hover-label-.json.gz +0 -0
  1557. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-label-.json +2 -2
  1558. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-label-.json.gz +0 -0
  1559. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-state-disabled-label-.json +2 -2
  1560. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-state-disabled-label-.json.gz +0 -0
  1561. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-state-focused-label-.json +2 -2
  1562. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-state-focused-label-.json.gz +0 -0
  1563. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-state-hover-label-.json +2 -2
  1564. package/dist/tokens/source/scssVariables/components-scw-heading-size-h4-state-hover-label-.json.gz +0 -0
  1565. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-label-.json +2 -2
  1566. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-label-.json.gz +0 -0
  1567. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-state-disabled-label-.json +2 -2
  1568. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-state-disabled-label-.json.gz +0 -0
  1569. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-state-focused-label-.json +2 -2
  1570. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-state-focused-label-.json.gz +0 -0
  1571. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-state-hover-label-.json +2 -2
  1572. package/dist/tokens/source/scssVariables/components-scw-heading-size-h5-state-hover-label-.json.gz +0 -0
  1573. package/dist/tokens/source/scssVariables/components-scw-heading-state-disabled-label-.json +2 -2
  1574. package/dist/tokens/source/scssVariables/components-scw-heading-state-disabled-label-.json.gz +0 -0
  1575. package/dist/tokens/source/scssVariables/components-scw-heading-state-focused-label-.json +2 -2
  1576. package/dist/tokens/source/scssVariables/components-scw-heading-state-focused-label-.json.gz +0 -0
  1577. package/dist/tokens/source/scssVariables/components-scw-heading-state-hover-label-.json +2 -2
  1578. package/dist/tokens/source/scssVariables/components-scw-heading-state-hover-label-.json.gz +0 -0
  1579. package/dist/tokens/source/scssVariables/components-scw-icon-.json +8 -8
  1580. package/dist/tokens/source/scssVariables/components-scw-icon-.json.gz +0 -0
  1581. package/dist/tokens/source/scssVariables/components-scw-icon-v2-.json +8 -8
  1582. package/dist/tokens/source/scssVariables/components-scw-icon-v2-.json.gz +0 -0
  1583. package/dist/tokens/source/scssVariables/components-scw-input-.json +8 -8
  1584. package/dist/tokens/source/scssVariables/components-scw-input-.json.gz +0 -0
  1585. package/dist/tokens/source/scssVariables/components-scw-input-feedback-base-.json +8 -8
  1586. package/dist/tokens/source/scssVariables/components-scw-input-feedback-base-.json.gz +0 -0
  1587. package/dist/tokens/source/scssVariables/components-scw-input-feedback-base-default-scw-input-feedback-.json +2 -2
  1588. package/dist/tokens/source/scssVariables/components-scw-input-feedback-base-default-scw-input-feedback-.json.gz +0 -0
  1589. package/dist/tokens/source/scssVariables/components-scw-input-feedback-base-state-help-scw-input-feedback-.json +2 -2
  1590. package/dist/tokens/source/scssVariables/components-scw-input-feedback-base-state-help-scw-input-feedback-.json.gz +0 -0
  1591. package/dist/tokens/source/scssVariables/components-scw-input-field-.json +8 -8
  1592. package/dist/tokens/source/scssVariables/components-scw-input-field-.json.gz +0 -0
  1593. package/dist/tokens/source/scssVariables/components-scw-input-field-bg-.json +8 -8
  1594. package/dist/tokens/source/scssVariables/components-scw-input-field-bg-.json.gz +0 -0
  1595. package/dist/tokens/source/scssVariables/components-scw-input-label-base-.json +8 -8
  1596. package/dist/tokens/source/scssVariables/components-scw-input-label-base-.json.gz +0 -0
  1597. package/dist/tokens/source/scssVariables/components-scw-input-label-base-default-scw-input-label-.json +2 -2
  1598. package/dist/tokens/source/scssVariables/components-scw-input-label-base-default-scw-input-label-.json.gz +0 -0
  1599. package/dist/tokens/source/scssVariables/components-scw-input-right-action-.json +8 -8
  1600. package/dist/tokens/source/scssVariables/components-scw-input-right-action-.json.gz +0 -0
  1601. package/dist/tokens/source/scssVariables/components-scw-input-right-action-text-test-edit-.json +2 -2
  1602. package/dist/tokens/source/scssVariables/components-scw-input-right-action-text-test-edit-.json.gz +0 -0
  1603. package/dist/tokens/source/scssVariables/components-scw-input-text-base-.json +8 -8
  1604. package/dist/tokens/source/scssVariables/components-scw-input-text-base-.json.gz +0 -0
  1605. package/dist/tokens/source/scssVariables/components-scw-input-text-base-default-text-.json +2 -2
  1606. package/dist/tokens/source/scssVariables/components-scw-input-text-base-default-text-.json.gz +0 -0
  1607. package/dist/tokens/source/scssVariables/components-scw-input-text-base-disabled-text-.json +2 -2
  1608. package/dist/tokens/source/scssVariables/components-scw-input-text-base-disabled-text-.json.gz +0 -0
  1609. package/dist/tokens/source/scssVariables/components-scw-input-text-base-placeholder-text-.json +2 -2
  1610. package/dist/tokens/source/scssVariables/components-scw-input-text-base-placeholder-text-.json.gz +0 -0
  1611. package/dist/tokens/source/scssVariables/components-scw-input-text-container-.json +8 -8
  1612. package/dist/tokens/source/scssVariables/components-scw-input-text-container-.json.gz +0 -0
  1613. package/dist/tokens/source/scssVariables/components-scw-input-text-container-default-scw-input-text-text-.json +2 -2
  1614. package/dist/tokens/source/scssVariables/components-scw-input-text-container-default-scw-input-text-text-.json.gz +0 -0
  1615. package/dist/tokens/source/scssVariables/components-scw-link-.json +8 -8
  1616. package/dist/tokens/source/scssVariables/components-scw-link-.json.gz +0 -0
  1617. package/dist/tokens/source/scssVariables/components-scw-link-default-label-.json +2 -2
  1618. package/dist/tokens/source/scssVariables/components-scw-link-default-label-.json.gz +0 -0
  1619. package/dist/tokens/source/scssVariables/components-scw-link-design-outlined-label-.json +2 -2
  1620. package/dist/tokens/source/scssVariables/components-scw-link-design-outlined-label-.json.gz +0 -0
  1621. package/dist/tokens/source/scssVariables/components-scw-link-design-text-label-.json +2 -2
  1622. package/dist/tokens/source/scssVariables/components-scw-link-design-text-label-.json.gz +0 -0
  1623. package/dist/tokens/source/scssVariables/components-scw-link-icon-left-design-outlined-label-.json +2 -2
  1624. package/dist/tokens/source/scssVariables/components-scw-link-icon-left-design-outlined-label-.json.gz +0 -0
  1625. package/dist/tokens/source/scssVariables/components-scw-link-icon-left-label-.json +2 -2
  1626. package/dist/tokens/source/scssVariables/components-scw-link-icon-left-label-.json.gz +0 -0
  1627. package/dist/tokens/source/scssVariables/components-scw-link-icon-right-design-outlined-label-.json +2 -2
  1628. package/dist/tokens/source/scssVariables/components-scw-link-icon-right-design-outlined-label-.json.gz +0 -0
  1629. package/dist/tokens/source/scssVariables/components-scw-link-icon-right-label-.json +2 -2
  1630. package/dist/tokens/source/scssVariables/components-scw-link-icon-right-label-.json.gz +0 -0
  1631. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-design-outlined-label-.json +2 -2
  1632. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-design-outlined-label-.json.gz +0 -0
  1633. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-design-text-label-.json +2 -2
  1634. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-design-text-label-.json.gz +0 -0
  1635. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-left-design-outlined-label-.json +2 -2
  1636. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-left-design-outlined-label-.json.gz +0 -0
  1637. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-left-label-.json +2 -2
  1638. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-left-label-.json.gz +0 -0
  1639. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-right-design-outlined-label-.json +2 -2
  1640. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-right-design-outlined-label-.json.gz +0 -0
  1641. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-right-label-.json +2 -2
  1642. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-icon-right-label-.json.gz +0 -0
  1643. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-label-.json +2 -2
  1644. package/dist/tokens/source/scssVariables/components-scw-link-state-disabled-label-.json.gz +0 -0
  1645. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-design-outlined-label-.json +2 -2
  1646. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-design-outlined-label-.json.gz +0 -0
  1647. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-design-text-label-.json +2 -2
  1648. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-design-text-label-.json.gz +0 -0
  1649. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-left-design-outlined-label-.json +2 -2
  1650. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-left-design-outlined-label-.json.gz +0 -0
  1651. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-left-label-.json +2 -2
  1652. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-left-label-.json.gz +0 -0
  1653. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-right-design-outlined-label-.json +2 -2
  1654. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-right-design-outlined-label-.json.gz +0 -0
  1655. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-right-label-.json +2 -2
  1656. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-icon-right-label-.json.gz +0 -0
  1657. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-label-.json +2 -2
  1658. package/dist/tokens/source/scssVariables/components-scw-link-state-focused-label-.json.gz +0 -0
  1659. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-design-outlined-label-.json +2 -2
  1660. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-design-outlined-label-.json.gz +0 -0
  1661. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-design-text-label-.json +2 -2
  1662. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-design-text-label-.json.gz +0 -0
  1663. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-left-design-outlined-label-.json +2 -2
  1664. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-left-design-outlined-label-.json.gz +0 -0
  1665. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-left-label-.json +2 -2
  1666. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-left-label-.json.gz +0 -0
  1667. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-right-design-outlined-label-.json +2 -2
  1668. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-right-design-outlined-label-.json.gz +0 -0
  1669. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-right-label-.json +2 -2
  1670. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-icon-right-label-.json.gz +0 -0
  1671. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-label-.json +2 -2
  1672. package/dist/tokens/source/scssVariables/components-scw-link-state-hover-label-.json.gz +0 -0
  1673. package/dist/tokens/source/scssVariables/components-scw-menu-item-.json +8 -8
  1674. package/dist/tokens/source/scssVariables/components-scw-menu-item-.json.gz +0 -0
  1675. package/dist/tokens/source/scssVariables/components-scw-menu-item-default-label-.json +2 -2
  1676. package/dist/tokens/source/scssVariables/components-scw-menu-item-default-label-.json.gz +0 -0
  1677. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-label-.json +2 -2
  1678. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-label-.json.gz +0 -0
  1679. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-disabled-label-.json +2 -2
  1680. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-disabled-label-.json.gz +0 -0
  1681. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-focused-label-.json +2 -2
  1682. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-focused-label-.json.gz +0 -0
  1683. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-hover-label-.json +2 -2
  1684. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-hover-label-.json.gz +0 -0
  1685. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-selected-label-.json +2 -2
  1686. package/dist/tokens/source/scssVariables/components-scw-menu-item-design-utility-state-selected-label-.json.gz +0 -0
  1687. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-disabled-label-.json +2 -2
  1688. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-disabled-label-.json.gz +0 -0
  1689. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-focused-label-.json +2 -2
  1690. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-focused-label-.json.gz +0 -0
  1691. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-hover-label-.json +2 -2
  1692. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-hover-label-.json.gz +0 -0
  1693. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-selected-label-.json +2 -2
  1694. package/dist/tokens/source/scssVariables/components-scw-menu-item-state-selected-label-.json.gz +0 -0
  1695. package/dist/tokens/source/scssVariables/components-scw-page-alert-.json +8 -8
  1696. package/dist/tokens/source/scssVariables/components-scw-page-alert-.json.gz +0 -0
  1697. package/dist/tokens/source/scssVariables/components-scw-page-alert-default-content-description-.json +2 -2
  1698. package/dist/tokens/source/scssVariables/components-scw-page-alert-default-content-description-.json.gz +0 -0
  1699. package/dist/tokens/source/scssVariables/components-scw-page-alert-default-content-title-.json +2 -2
  1700. package/dist/tokens/source/scssVariables/components-scw-page-alert-default-content-title-.json.gz +0 -0
  1701. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-disabled-content-description-.json +2 -2
  1702. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-disabled-content-description-.json.gz +0 -0
  1703. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-disabled-content-title-.json +2 -2
  1704. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-disabled-content-title-.json.gz +0 -0
  1705. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-focused-content-description-.json +2 -2
  1706. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-focused-content-description-.json.gz +0 -0
  1707. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-focused-content-title-.json +2 -2
  1708. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-focused-content-title-.json.gz +0 -0
  1709. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-hover-content-description-.json +2 -2
  1710. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-hover-content-description-.json.gz +0 -0
  1711. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-hover-content-title-.json +2 -2
  1712. package/dist/tokens/source/scssVariables/components-scw-page-alert-state-hover-content-title-.json.gz +0 -0
  1713. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-content-description-.json +2 -2
  1714. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-content-description-.json.gz +0 -0
  1715. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-content-title-.json +2 -2
  1716. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-content-title-.json.gz +0 -0
  1717. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-disabled-content-description-.json +2 -2
  1718. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-disabled-content-description-.json.gz +0 -0
  1719. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-disabled-content-title-.json +2 -2
  1720. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-disabled-content-title-.json.gz +0 -0
  1721. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-focused-content-description-.json +2 -2
  1722. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-focused-content-description-.json.gz +0 -0
  1723. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-focused-content-title-.json +2 -2
  1724. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-focused-content-title-.json.gz +0 -0
  1725. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-hover-content-description-.json +2 -2
  1726. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-hover-content-description-.json.gz +0 -0
  1727. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-hover-content-title-.json +2 -2
  1728. package/dist/tokens/source/scssVariables/components-scw-page-alert-type-warning-state-hover-content-title-.json.gz +0 -0
  1729. package/dist/tokens/source/scssVariables/components-scw-single-input-.json +8 -8
  1730. package/dist/tokens/source/scssVariables/components-scw-single-input-.json.gz +0 -0
  1731. package/dist/tokens/source/scssVariables/components-scw-single-input-field-bg-.json +8 -8
  1732. package/dist/tokens/source/scssVariables/components-scw-single-input-field-bg-.json.gz +0 -0
  1733. package/dist/tokens/source/scssVariables/components-scw-single-input-field-v2-.json +8 -8
  1734. package/dist/tokens/source/scssVariables/components-scw-single-input-field-v2-.json.gz +0 -0
  1735. package/dist/tokens/source/scssVariables.json +648 -648
  1736. package/dist/tokens/source/scssVariables.json.gz +0 -0
  1737. package/dist/tokens/source/scssVariables.scss +324 -324
  1738. package/dist/tokens/source/tokens.json +1340 -614
  1739. package/dist/tokens/source/tokens.json.gz +0 -0
  1740. package/dist/tokens/styles.css +78 -33
  1741. package/dist/tokens/styles.css.gz +0 -0
  1742. package/dist/tokens/styles.scss +25 -0
  1743. package/dist/tokens/stylesEmbedded.css +78 -33
  1744. package/dist/tokens/stylesEmbedded.css.gz +0 -0
  1745. package/dist/utils/enums/Components.js.gz +0 -0
  1746. package/dist/utils/enums/Components.js.map.gz +0 -0
  1747. package/dist/utils/events/event.d.ts +3 -2
  1748. package/dist/utils/events/event.js +1 -1
  1749. package/dist/utils/events/event.js.gz +0 -0
  1750. package/dist/utils/events/event.js.map.gz +0 -0
  1751. package/dist/utils/findJsCss.js.gz +0 -0
  1752. package/dist/utils/findJsCss.js.map.gz +0 -0
  1753. package/dist/utils/formEnums.js.gz +0 -0
  1754. package/dist/utils/formEnums.js.map.gz +0 -0
  1755. package/dist/utils/getComputedStyleValue.js +1 -1
  1756. package/dist/utils/getComputedStyleValue.js.gz +0 -0
  1757. package/dist/utils/getComputedStyleValue.js.map.gz +0 -0
  1758. package/dist/utils/getIconSvg.js +1 -1
  1759. package/dist/utils/getIconSvg.js.gz +0 -0
  1760. package/dist/utils/getIconSvg.js.map.gz +0 -0
  1761. package/dist/utils/lightCss.js.gz +0 -0
  1762. package/dist/utils/lightCss.js.map.gz +0 -0
  1763. package/dist/utils/lightDomMutationObserver.js +1 -1
  1764. package/dist/utils/lightDomMutationObserver.js.gz +0 -0
  1765. package/dist/utils/lightDomMutationObserver.js.map.gz +0 -0
  1766. package/dist/utils/observers/intersectionObserverSingleton.js +1 -1
  1767. package/dist/utils/observers/intersectionObserverSingleton.js.gz +0 -0
  1768. package/dist/utils/observers/intersectionObserverSingleton.js.map.gz +0 -0
  1769. package/dist/utils/observers/mediaQueryListSingleton.js +1 -1
  1770. package/dist/utils/observers/mediaQueryListSingleton.js.gz +0 -0
  1771. package/dist/utils/observers/mediaQueryListSingleton.js.map.gz +0 -0
  1772. package/dist/utils/observers/mutationObserverSingleton.js.gz +0 -0
  1773. package/dist/utils/observers/mutationObserverSingleton.js.map.gz +0 -0
  1774. package/dist/utils/observers/resizeObserverSingleton.js.gz +0 -0
  1775. package/dist/utils/observers/resizeObserverSingleton.js.map +2 -2
  1776. package/dist/utils/observers/resizeObserverSingleton.js.map.gz +0 -0
  1777. package/dist/utils/responsive/BreakpointTypes.js.gz +0 -0
  1778. package/dist/utils/responsive/BreakpointTypes.js.map.gz +0 -0
  1779. package/dist/utils/responsive/ResponsiveElement.js +1 -1
  1780. package/dist/utils/responsive/ResponsiveElement.js.gz +0 -0
  1781. package/dist/utils/responsive/ResponsiveElement.js.map.gz +0 -0
  1782. package/dist/utils/responsive/breakpoints.js.gz +0 -0
  1783. package/dist/utils/responsive/breakpoints.js.map.gz +0 -0
  1784. package/dist/utils/responsive/connectAttributes.js +1 -1
  1785. package/dist/utils/responsive/connectAttributes.js.gz +0 -0
  1786. package/dist/utils/responsive/connectAttributes.js.map.gz +0 -0
  1787. package/dist/utils/responsive/connectStyles.js.gz +0 -0
  1788. package/dist/utils/responsive/connectStyles.js.map.gz +0 -0
  1789. package/dist/utils/responsive/processAttributes.js +1 -1
  1790. package/dist/utils/responsive/processAttributes.js.gz +0 -0
  1791. package/dist/utils/responsive/processAttributes.js.map.gz +0 -0
  1792. package/dist/utils/submitForm.js +1 -1
  1793. package/dist/utils/submitForm.js.gz +0 -0
  1794. package/dist/utils/submitForm.js.map.gz +0 -0
  1795. package/dist/utils/suffix.js +1 -1
  1796. package/dist/utils/suffix.js.gz +0 -0
  1797. package/dist/utils/suffix.js.map.gz +0 -0
  1798. package/dist/utils/testing/colorContrast.d.ts +6 -0
  1799. package/dist/utils/testing/colorContrast.js +1 -1
  1800. package/dist/utils/testing/colorContrast.js.gz +0 -0
  1801. package/dist/utils/testing/colorContrast.js.map.gz +0 -0
  1802. package/dist/utils/testing/expectLink.js +1 -1
  1803. package/dist/utils/testing/expectLink.js.gz +0 -0
  1804. package/dist/utils/testing/expectLink.js.map +3 -3
  1805. package/dist/utils/testing/expectLink.js.map.gz +0 -0
  1806. package/dist/utils/testing/getActiveElement.d.ts +5 -0
  1807. package/dist/utils/testing/getActiveElement.js +1 -1
  1808. package/dist/utils/testing/getActiveElement.js.gz +0 -0
  1809. package/dist/utils/testing/getActiveElement.js.map.gz +0 -0
  1810. package/dist/utils/testing/ssrTesting.js +1 -1
  1811. package/dist/utils/testing/ssrTesting.js.gz +0 -0
  1812. package/dist/utils/testing/ssrTesting.js.map +3 -3
  1813. package/dist/utils/testing/ssrTesting.js.map.gz +0 -0
  1814. package/dist/utils/testing/testButtonADA.js +1 -1
  1815. package/dist/utils/testing/testButtonADA.js.gz +0 -0
  1816. package/dist/utils/testing/testButtonADA.js.map +4 -4
  1817. package/dist/utils/testing/testButtonADA.js.map.gz +0 -0
  1818. package/dist/utils/themes/enums.js.gz +0 -0
  1819. package/dist/utils/themes/enums.js.map.gz +0 -0
  1820. package/dist/utils/uuid.js.gz +0 -0
  1821. package/dist/utils/uuid.js.map.gz +0 -0
  1822. package/dist/utils/watch.js.gz +0 -0
  1823. package/dist/utils/watch.js.map.gz +0 -0
  1824. package/package.json +18 -45
  1825. package/dist/chunks/axe.min.W2EOROUM.js +0 -2
  1826. package/dist/chunks/chunk.2LAHOOSK.js +0 -36
  1827. package/dist/chunks/chunk.2LAHOOSK.js.map +0 -7
  1828. package/dist/chunks/chunk.2VTI5GPU.js +0 -2
  1829. package/dist/chunks/chunk.33FSL7Y7.js.map +0 -7
  1830. package/dist/chunks/chunk.3IHJDK6I.js +0 -2
  1831. package/dist/chunks/chunk.3R7BMGFH.js.map +0 -7
  1832. package/dist/chunks/chunk.3RQ6ROTP.js +0 -30
  1833. package/dist/chunks/chunk.3RQ6ROTP.js.map +0 -7
  1834. package/dist/chunks/chunk.4IW4ZUWS.js.map +0 -7
  1835. package/dist/chunks/chunk.4LJQJY4M.js +0 -4
  1836. package/dist/chunks/chunk.4PFGNBK4.js.map +0 -7
  1837. package/dist/chunks/chunk.56YMDF4N.js +0 -33
  1838. package/dist/chunks/chunk.56YMDF4N.js.map +0 -7
  1839. package/dist/chunks/chunk.5FUHFFCY.js.map +0 -7
  1840. package/dist/chunks/chunk.63GYMQDA.js +0 -2
  1841. package/dist/chunks/chunk.63GYMQDA.js.map +0 -7
  1842. package/dist/chunks/chunk.6WTOZOY7.js +0 -4
  1843. package/dist/chunks/chunk.75W5GH3K.js.map +0 -7
  1844. package/dist/chunks/chunk.7C4BKIQF.js +0 -17
  1845. package/dist/chunks/chunk.7C4BKIQF.js.map +0 -7
  1846. package/dist/chunks/chunk.7IEAISVE.js.map +0 -7
  1847. package/dist/chunks/chunk.B7II36CO.js.map +0 -7
  1848. package/dist/chunks/chunk.BHAQIBGC.js.map +0 -7
  1849. package/dist/chunks/chunk.C2WZDJF4.js.map +0 -7
  1850. package/dist/chunks/chunk.CN3FBMLH.js +0 -2
  1851. package/dist/chunks/chunk.D23ORNEA.js.map +0 -7
  1852. package/dist/chunks/chunk.HONWLPRG.js.map +0 -7
  1853. package/dist/chunks/chunk.IFFRUKMU.js.map +0 -7
  1854. package/dist/chunks/chunk.IHQUNZQU.js.map +0 -7
  1855. package/dist/chunks/chunk.IHVBWZ57.js +0 -11
  1856. package/dist/chunks/chunk.IHVBWZ57.js.map +0 -7
  1857. package/dist/chunks/chunk.J5OGWB43.js.map +0 -7
  1858. package/dist/chunks/chunk.L2YBEZKF.js +0 -2
  1859. package/dist/chunks/chunk.L2YBEZKF.js.map +0 -7
  1860. package/dist/chunks/chunk.MQ57PGFU.js +0 -2
  1861. package/dist/chunks/chunk.MQ57PGFU.js.map +0 -7
  1862. package/dist/chunks/chunk.MSP7TQ3T.js +0 -2
  1863. package/dist/chunks/chunk.N6DLDRHB.js.map +0 -7
  1864. package/dist/chunks/chunk.PDALKIXA.js +0 -501
  1865. package/dist/chunks/chunk.PDALKIXA.js.map +0 -7
  1866. package/dist/chunks/chunk.PVZ47H3F.js +0 -2
  1867. package/dist/chunks/chunk.PVZ47H3F.js.map +0 -7
  1868. package/dist/chunks/chunk.QHEFJCZI.js +0 -2
  1869. package/dist/chunks/chunk.QSH5IYLY.js.map +0 -7
  1870. package/dist/chunks/chunk.QW4L55OV.js.map +0 -7
  1871. package/dist/chunks/chunk.RQFUIQK3.js.map +0 -7
  1872. package/dist/chunks/chunk.S3DM53HD.js +0 -2
  1873. package/dist/chunks/chunk.SHURDDW4.js +0 -2
  1874. package/dist/chunks/chunk.SNSOKG54.js.map +0 -7
  1875. package/dist/chunks/chunk.SWOOH3JG.js.map +0 -7
  1876. package/dist/chunks/chunk.TAIV7XKZ.js.map +0 -7
  1877. package/dist/chunks/chunk.TASESTIH.js +0 -2
  1878. package/dist/chunks/chunk.TH7XY5AV.js.map +0 -7
  1879. package/dist/chunks/chunk.V2DFPUQM.js.map +0 -7
  1880. package/dist/chunks/chunk.VWEPTKXE.js +0 -2
  1881. package/dist/chunks/chunk.VYN4PQL4.js +0 -2
  1882. package/dist/chunks/chunk.WHRXVSQW.js.map +0 -7
  1883. package/dist/chunks/chunk.WXMMTZTU.js +0 -2
  1884. package/dist/chunks/chunk.X3QDN5AD.js.map +0 -7
  1885. package/dist/chunks/chunk.XKGTDJG6.js.map +0 -7
  1886. package/dist/chunks/chunk.Y5CUD3L7.js.map +0 -7
  1887. package/dist/chunks/chunk.YMIT4ZQO.js +0 -2
  1888. package/dist/chunks/chunk.YNLLA3ZB.js.map +0 -7
  1889. package/dist/chunks/chunk.Z4H6RRS7.js +0 -2
  1890. package/dist/chunks/chunk.ZFQ275QN.js +0 -37
  1891. package/dist/chunks/chunk.ZFQ275QN.js.map +0 -7
  1892. package/dist/chunks/chunk.ZHMMWIFH.js.map +0 -7
  1893. package/dist/chunks/chunk.ZKJROKIG.js.map +0 -7
  1894. package/dist/chunks/icon-chevron-down.DHMJS6F4.js +0 -2
  1895. package/dist/chunks/icon-chevron-down.DHMJS6F4.js.map +0 -7
  1896. package/dist/chunks/icon-chevron-left.2CAORX25.js +0 -2
  1897. package/dist/chunks/icon-chevron-left.2CAORX25.js.map +0 -7
  1898. package/dist/chunks/icon-chevron-right.RRLIRKZB.js +0 -2
  1899. package/dist/chunks/icon-chevron-right.RRLIRKZB.js.map +0 -7
  1900. package/dist/chunks/icon-chevron-up.E4QYWAAP.js +0 -2
  1901. package/dist/chunks/icon-chevron-up.E4QYWAAP.js.map +0 -7
  1902. package/dist/chunks/icon-clear.OWJ7ODQM.js +0 -2
  1903. package/dist/chunks/icon-clear.OWJ7ODQM.js.map +0 -7
  1904. package/dist/chunks/icon-hidden.BBKQGE64.js +0 -2
  1905. package/dist/chunks/icon-hidden.BBKQGE64.js.map +0 -7
  1906. package/dist/chunks/icon-location.5QEL6KER.js +0 -2
  1907. package/dist/chunks/icon-location.5QEL6KER.js.map +0 -7
  1908. package/dist/chunks/icon-placeholder.CZNY75BU.js +0 -2
  1909. package/dist/chunks/icon-placeholder.CZNY75BU.js.map +0 -7
  1910. package/dist/chunks/icon-search.YK24UFPX.js +0 -2
  1911. package/dist/chunks/icon-search.YK24UFPX.js.map +0 -7
  1912. package/dist/chunks/icon-visible.2SPKJKLO.js +0 -2
  1913. package/dist/chunks/icon-visible.2SPKJKLO.js.map +0 -7
  1914. package/dist/docs/css/app.ba906e7f.css +0 -1
  1915. package/dist/docs/js/about.eb0b1085.js +0 -2
  1916. package/dist/docs/js/about.eb0b1085.js.map +0 -1
  1917. package/dist/docs/js/app.a440f5ed.js +0 -2
  1918. package/dist/docs/js/app.a440f5ed.js.map +0 -1
  1919. package/dist/docs/js/chunk-2d0e618f.8f5314c9.js.map +0 -1
  1920. package/dist/docs/js/chunk-vendors.300506bf.js +0 -13
  1921. package/dist/docs/js/chunk-vendors.300506bf.js.map +0 -1
  1922. package/scripts/lib/readStream.mjs +0 -17
  1923. package/scripts/ssr.mjs +0 -89
  1924. package/scripts/vm/render-template.js +0 -16
  1925. package/scripts/vm/ssr.mjs +0 -78
  1926. package/scripts/vm/ssrData.mjs +0 -5
  1927. package/scripts/vm/ssrDataSpawn.mjs +0 -26
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../node_modules/chai/chai.js", "../../../node_modules/chai-dom/chai-dom.js", "../../../node_modules/sinon-chai/lib/sinon-chai.js", "../../../node_modules/@open-wc/testing-helpers/src/helpers.js", "../../../node_modules/@open-wc/testing-helpers/src/fixtureWrapper.js", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/directive.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/dom.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/part.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/template.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/template-instance.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/template-result.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/parts.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/default-template-processor.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/template-factory.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/render.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lit-html.ts", "../../../node_modules/@open-wc/testing-helpers/src/lib.js", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/directive.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/dom.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/part.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/template.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/template-instance.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/template-result.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/parts.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/default-template-processor.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lib/template-factory.ts", "../../../node_modules/@open-wc/scoped-elements/node_modules/lit-html/src/lit-html.ts", "../../../node_modules/@open-wc/dedupe-mixin/src/dedupeMixin.js", "../../../node_modules/@open-wc/scoped-elements/src/Cache.js", "../../../node_modules/@open-wc/scoped-elements/src/createUniqueTag.js", "../../../node_modules/@open-wc/scoped-elements/src/globalTagsCache.js", "../../../node_modules/@open-wc/scoped-elements/src/registerElement.js", "../../../node_modules/@open-wc/scoped-elements/src/transform.js", "../../../node_modules/@open-wc/scoped-elements/src/shadyTemplateFactory.js", "../../../node_modules/@open-wc/scoped-elements/src/ScopedElementsMixin.js", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/modify-template.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-html/src/lib/shady-render.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-element/src/lib/updating-element.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-element/src/lib/decorators.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-element/src/lib/css-tag.ts", "../../../node_modules/@open-wc/testing-helpers/node_modules/lit-element/src/lit-element.ts", "../../../node_modules/@open-wc/testing-helpers/src/scopedElementsWrapper.js", "../../../node_modules/@open-wc/testing-helpers/src/fixture.js", "../../../node_modules/@open-wc/testing/import-wrappers/chai.js", "../../../node_modules/@open-wc/semantic-dom-diff/get-diffable-html.js", "../../../node_modules/@open-wc/semantic-dom-diff/node_modules/@web/test-runner-commands/browser/commands.mjs", "../../../node_modules/@open-wc/semantic-dom-diff/src/utils.js", "../../../node_modules/@open-wc/semantic-dom-diff/chai-dom-diff.js", "../../../node_modules/chai-a11y-axe/src/axe-import.js", "../../../node_modules/chai-a11y-axe/src/accessible.js", "../../../node_modules/@open-wc/testing/import-wrappers/chai-dom.js", "../../../node_modules/@open-wc/testing/import-wrappers/sinon-chai.js", "../../../node_modules/@open-wc/testing/register-chai-plugins.js", "../../../node_modules/@open-wc/testing/index.js"],
4
- "sourcesContent": ["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.chai = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\nmodule.exports = require('./lib/chai');\n\n},{\"./lib/chai\":2}],2:[function(require,module,exports){\n/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar used = [];\n\n/*!\n * Chai version\n */\n\nexports.version = '4.3.3';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai.\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n if (!~used.indexOf(fn)) {\n fn(exports, util);\n used.push(fn);\n }\n\n return exports;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n\n},{\"./chai/assertion\":3,\"./chai/config\":4,\"./chai/core/assertions\":5,\"./chai/interface/assert\":6,\"./chai/interface/expect\":7,\"./chai/interface/should\":8,\"./chai/utils\":22,\"assertion-error\":33}],3:[function(require,module,exports){\n/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n /*!\n * Module dependencies.\n */\n\n var AssertionError = _chai.AssertionError\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n _chai.Assertion = Assertion;\n\n /*!\n * Assertion Constructor\n *\n * Creates object for chaining.\n *\n * `Assertion` objects contain metadata in the form of flags. Three flags can\n * be assigned during instantiation by passing arguments to this constructor:\n *\n * - `object`: This flag contains the target of the assertion. For example, in\n * the assertion `expect(numKittens).to.equal(7);`, the `object` flag will\n * contain `numKittens` so that the `equal` assertion can reference it when\n * needed.\n *\n * - `message`: This flag contains an optional custom error message to be\n * prepended to the error message that's generated by the assertion when it\n * fails.\n *\n * - `ssfi`: This flag stands for \"start stack function indicator\". It\n * contains a function reference that serves as the starting point for\n * removing frames from the stack trace of the error that's created by the\n * assertion when it fails. The goal is to provide a cleaner stack trace to\n * end users by removing Chai's internal functions. Note that it only works\n * in environments that support `Error.captureStackTrace`, and only when\n * `Chai.config.includeStack` hasn't been set to `false`.\n *\n * - `lockSsfi`: This flag controls whether or not the given `ssfi` flag\n * should retain its current value, even as assertions are chained off of\n * this object. This is usually set to `true` when creating a new assertion\n * from within another assertion. It's also temporarily set to `true` before\n * an overwritten assertion gets called by the overwriting assertion.\n *\n * @param {Mixed} obj target of the assertion\n * @param {String} msg (optional) custom error message\n * @param {Function} ssfi (optional) starting point for removing stack frames\n * @param {Boolean} lockSsfi (optional) whether or not the ssfi flag is locked\n * @api private\n */\n\n function Assertion (obj, msg, ssfi, lockSsfi) {\n flag(this, 'ssfi', ssfi || Assertion);\n flag(this, 'lockSsfi', lockSsfi);\n flag(this, 'object', obj);\n flag(this, 'message', msg);\n\n return util.proxify(this);\n }\n\n Object.defineProperty(Assertion, 'includeStack', {\n get: function() {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n return config.includeStack;\n },\n set: function(value) {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n config.includeStack = value;\n }\n });\n\n Object.defineProperty(Assertion, 'showDiff', {\n get: function() {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n return config.showDiff;\n },\n set: function(value) {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n config.showDiff = value;\n }\n });\n\n Assertion.addProperty = function (name, fn) {\n util.addProperty(this.prototype, name, fn);\n };\n\n Assertion.addMethod = function (name, fn) {\n util.addMethod(this.prototype, name, fn);\n };\n\n Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n Assertion.overwriteProperty = function (name, fn) {\n util.overwriteProperty(this.prototype, name, fn);\n };\n\n Assertion.overwriteMethod = function (name, fn) {\n util.overwriteMethod(this.prototype, name, fn);\n };\n\n Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n /**\n * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n *\n * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n *\n * @name assert\n * @param {Philosophical} expression to be tested\n * @param {String|Function} message or function that returns message to display if expression fails\n * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n * @param {Mixed} expected value (remember to check for negation)\n * @param {Mixed} actual (optional) will default to `this.obj`\n * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n * @api private\n */\n\n Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n var ok = util.test(this, arguments);\n if (false !== showDiff) showDiff = true;\n if (undefined === expected && undefined === _actual) showDiff = false;\n if (true !== config.showDiff) showDiff = false;\n\n if (!ok) {\n msg = util.getMessage(this, arguments);\n var actual = util.getActual(this, arguments);\n var assertionErrorObjectProperties = {\n actual: actual\n , expected: expected\n , showDiff: showDiff\n };\n\n var operator = util.getOperator(this, arguments);\n if (operator) {\n assertionErrorObjectProperties.operator = operator;\n }\n\n throw new AssertionError(\n msg,\n assertionErrorObjectProperties,\n (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n }\n };\n\n /*!\n * ### ._obj\n *\n * Quick reference to stored `actual` value for plugin developers.\n *\n * @api private\n */\n\n Object.defineProperty(Assertion.prototype, '_obj',\n { get: function () {\n return flag(this, 'object');\n }\n , set: function (val) {\n flag(this, 'object', val);\n }\n });\n};\n\n},{\"./config\":4}],4:[function(require,module,exports){\nmodule.exports = {\n\n /**\n * ### config.includeStack\n *\n * User configurable property, influences whether stack trace\n * is included in Assertion error message. Default of false\n * suppresses stack trace in the error message.\n *\n * chai.config.includeStack = true; // enable stack on error\n *\n * @param {Boolean}\n * @api public\n */\n\n includeStack: false,\n\n /**\n * ### config.showDiff\n *\n * User configurable property, influences whether or not\n * the `showDiff` flag should be included in the thrown\n * AssertionErrors. `false` will always be `false`; `true`\n * will be true when the assertion has requested a diff\n * be shown.\n *\n * @param {Boolean}\n * @api public\n */\n\n showDiff: true,\n\n /**\n * ### config.truncateThreshold\n *\n * User configurable property, sets length threshold for actual and\n * expected values in assertion errors. If this threshold is exceeded, for\n * example for large data structures, the value is replaced with something\n * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n *\n * Set it to zero if you want to disable truncating altogether.\n *\n * This is especially userful when doing assertions on arrays: having this\n * set to a reasonable large value makes the failure messages readily\n * inspectable.\n *\n * chai.config.truncateThreshold = 0; // disable truncating\n *\n * @param {Number}\n * @api public\n */\n\n truncateThreshold: 40,\n\n /**\n * ### config.useProxy\n *\n * User configurable property, defines if chai will use a Proxy to throw\n * an error when a non-existent property is read, which protects users\n * from typos when using property-based assertions.\n *\n * Set it to false if you want to disable this feature.\n *\n * chai.config.useProxy = false; // disable use of Proxy\n *\n * This feature is automatically disabled regardless of this config value\n * in environments that don't support proxies.\n *\n * @param {Boolean}\n * @api public\n */\n\n useProxy: true,\n\n /**\n * ### config.proxyExcludedKeys\n *\n * User configurable property, defines which properties should be ignored\n * instead of throwing an error if they do not exist on the assertion.\n * This is only applied if the environment Chai is running in supports proxies and\n * if the `useProxy` configuration setting is enabled.\n * By default, `then` and `inspect` will not throw an error if they do not exist on the\n * assertion object because the `.inspect` property is read by `util.inspect` (for example, when\n * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking.\n *\n * // By default these keys will not throw an error if they do not exist on the assertion object\n * chai.config.proxyExcludedKeys = ['then', 'inspect'];\n *\n * @param {Array}\n * @api public\n */\n\n proxyExcludedKeys: ['then', 'catch', 'inspect', 'toJSON']\n};\n\n},{}],5:[function(require,module,exports){\n/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n var Assertion = chai.Assertion\n , AssertionError = chai.AssertionError\n , flag = _.flag;\n\n /**\n * ### Language Chains\n *\n * The following are provided as chainable getters to improve the readability\n * of your assertions.\n *\n * **Chains**\n *\n * - to\n * - be\n * - been\n * - is\n * - that\n * - which\n * - and\n * - has\n * - have\n * - with\n * - at\n * - of\n * - same\n * - but\n * - does\n * - still\n * - also\n *\n * @name language chains\n * @namespace BDD\n * @api public\n */\n\n [ 'to', 'be', 'been', 'is'\n , 'and', 'has', 'have', 'with'\n , 'that', 'which', 'at', 'of'\n , 'same', 'but', 'does', 'still', \"also\" ].forEach(function (chain) {\n Assertion.addProperty(chain);\n });\n\n /**\n * ### .not\n *\n * Negates all assertions that follow in the chain.\n *\n * expect(function () {}).to.not.throw();\n * expect({a: 1}).to.not.have.property('b');\n * expect([1, 2]).to.be.an('array').that.does.not.include(3);\n *\n * Just because you can negate any assertion with `.not` doesn't mean you\n * should. With great power comes great responsibility. It's often best to\n * assert that the one expected output was produced, rather than asserting\n * that one of countless unexpected outputs wasn't produced. See individual\n * assertions for specific guidance.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.equal(1); // Not recommended\n *\n * @name not\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('not', function () {\n flag(this, 'negate', true);\n });\n\n /**\n * ### .deep\n *\n * Causes all `.equal`, `.include`, `.members`, `.keys`, and `.property`\n * assertions that follow in the chain to use deep equality instead of strict\n * (`===`) equality. See the `deep-eql` project page for info on the deep\n * equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) equals `{a: 1}`\n * expect({a: 1}).to.deep.equal({a: 1});\n * expect({a: 1}).to.not.equal({a: 1});\n *\n * // Target array deeply (but not strictly) includes `{a: 1}`\n * expect([{a: 1}]).to.deep.include({a: 1});\n * expect([{a: 1}]).to.not.include({a: 1});\n *\n * // Target object deeply (but not strictly) includes `x: {a: 1}`\n * expect({x: {a: 1}}).to.deep.include({x: {a: 1}});\n * expect({x: {a: 1}}).to.not.include({x: {a: 1}});\n *\n * // Target array deeply (but not strictly) has member `{a: 1}`\n * expect([{a: 1}]).to.have.deep.members([{a: 1}]);\n * expect([{a: 1}]).to.not.have.members([{a: 1}]);\n *\n * // Target set deeply (but not strictly) has key `{a: 1}`\n * expect(new Set([{a: 1}])).to.have.deep.keys([{a: 1}]);\n * expect(new Set([{a: 1}])).to.not.have.keys([{a: 1}]);\n *\n * // Target object deeply (but not strictly) has property `x: {a: 1}`\n * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});\n * expect({x: {a: 1}}).to.not.have.property('x', {a: 1});\n *\n * @name deep\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('deep', function () {\n flag(this, 'deep', true);\n });\n\n /**\n * ### .nested\n *\n * Enables dot- and bracket-notation in all `.property` and `.include`\n * assertions that follow in the chain.\n *\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');\n * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\\\.a.\\\\[b\\\\]');\n * expect({'.a': {'[b]': 'x'}}).to.nested.include({'\\\\.a.\\\\[b\\\\]': 'x'});\n *\n * `.nested` cannot be combined with `.own`.\n *\n * @name nested\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('nested', function () {\n flag(this, 'nested', true);\n });\n\n /**\n * ### .own\n *\n * Causes all `.property` and `.include` assertions that follow in the chain\n * to ignore inherited properties.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.have.own.property('a');\n * expect({a: 1}).to.have.property('b');\n * expect({a: 1}).to.not.have.own.property('b');\n *\n * expect({a: 1}).to.own.include({a: 1});\n * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});\n *\n * `.own` cannot be combined with `.nested`.\n *\n * @name own\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('own', function () {\n flag(this, 'own', true);\n });\n\n /**\n * ### .ordered\n *\n * Causes all `.members` assertions that follow in the chain to require that\n * members be in the same order.\n *\n * expect([1, 2]).to.have.ordered.members([1, 2])\n * .but.not.have.ordered.members([2, 1]);\n *\n * When `.include` and `.ordered` are combined, the ordering begins at the\n * start of both arrays.\n *\n * expect([1, 2, 3]).to.include.ordered.members([1, 2])\n * .but.not.include.ordered.members([2, 3]);\n *\n * @name ordered\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ordered', function () {\n flag(this, 'ordered', true);\n });\n\n /**\n * ### .any\n *\n * Causes all `.keys` assertions that follow in the chain to only require that\n * the target have at least one of the given keys. This is the opposite of\n * `.all`, which requires that the target have all of the given keys.\n *\n * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');\n *\n * See the `.keys` doc for guidance on when to use `.any` or `.all`.\n *\n * @name any\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('any', function () {\n flag(this, 'any', true);\n flag(this, 'all', false);\n });\n\n /**\n * ### .all\n *\n * Causes all `.keys` assertions that follow in the chain to require that the\n * target have all of the given keys. This is the opposite of `.any`, which\n * only requires that the target have at least one of the given keys.\n *\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n *\n * Note that `.all` is used by default when neither `.all` nor `.any` are\n * added earlier in the chain. However, it's often best to add `.all` anyway\n * because it improves readability.\n *\n * See the `.keys` doc for guidance on when to use `.any` or `.all`.\n *\n * @name all\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('all', function () {\n flag(this, 'all', true);\n flag(this, 'any', false);\n });\n\n /**\n * ### .a(type[, msg])\n *\n * Asserts that the target's type is equal to the given string `type`. Types\n * are case insensitive. See the `type-detect` project page for info on the\n * type detection algorithm: https://github.com/chaijs/type-detect.\n *\n * expect('foo').to.be.a('string');\n * expect({a: 1}).to.be.an('object');\n * expect(null).to.be.a('null');\n * expect(undefined).to.be.an('undefined');\n * expect(new Error).to.be.an('error');\n * expect(Promise.resolve()).to.be.a('promise');\n * expect(new Float32Array).to.be.a('float32array');\n * expect(Symbol()).to.be.a('symbol');\n *\n * `.a` supports objects that have a custom type set via `Symbol.toStringTag`.\n *\n * var myObj = {\n * [Symbol.toStringTag]: 'myCustomType'\n * };\n *\n * expect(myObj).to.be.a('myCustomType').but.not.an('object');\n *\n * It's often best to use `.a` to check a target's type before making more\n * assertions on the same target. That way, you avoid unexpected behavior from\n * any assertion that does different things based on the target's type.\n *\n * expect([1, 2, 3]).to.be.an('array').that.includes(2);\n * expect([]).to.be.an('array').that.is.empty;\n *\n * Add `.not` earlier in the chain to negate `.a`. However, it's often best to\n * assert that the target is the expected type, rather than asserting that it\n * isn't one of many unexpected types.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.an('array'); // Not recommended\n *\n * `.a` accepts an optional `msg` argument which is a custom error message to\n * show when the assertion fails. The message can also be given as the second\n * argument to `expect`.\n *\n * expect(1).to.be.a('string', 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.a('string');\n *\n * `.a` can also be used as a language chain to improve the readability of\n * your assertions.\n *\n * expect({b: 2}).to.have.a.property('b');\n *\n * The alias `.an` can be used interchangeably with `.a`.\n *\n * @name a\n * @alias an\n * @param {String} type\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function an (type, msg) {\n if (msg) flag(this, 'message', msg);\n type = type.toLowerCase();\n var obj = flag(this, 'object')\n , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n this.assert(\n type === _.type(obj).toLowerCase()\n , 'expected #{this} to be ' + article + type\n , 'expected #{this} not to be ' + article + type\n );\n }\n\n Assertion.addChainableMethod('an', an);\n Assertion.addChainableMethod('a', an);\n\n /**\n * ### .include(val[, msg])\n *\n * When the target is a string, `.include` asserts that the given string `val`\n * is a substring of the target.\n *\n * expect('foobar').to.include('foo');\n *\n * When the target is an array, `.include` asserts that the given `val` is a\n * member of the target.\n *\n * expect([1, 2, 3]).to.include(2);\n *\n * When the target is an object, `.include` asserts that the given object\n * `val`'s properties are a subset of the target's properties.\n *\n * expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2});\n *\n * When the target is a Set or WeakSet, `.include` asserts that the given `val` is a\n * member of the target. SameValueZero equality algorithm is used.\n *\n * expect(new Set([1, 2])).to.include(2);\n *\n * When the target is a Map, `.include` asserts that the given `val` is one of\n * the values of the target. SameValueZero equality algorithm is used.\n *\n * expect(new Map([['a', 1], ['b', 2]])).to.include(2);\n *\n * Because `.include` does different things based on the target's type, it's\n * important to check the target's type before using `.include`. See the `.a`\n * doc for info on testing a target's type.\n *\n * expect([1, 2, 3]).to.be.an('array').that.includes(2);\n *\n * By default, strict (`===`) equality is used to compare array members and\n * object properties. Add `.deep` earlier in the chain to use deep equality\n * instead (WeakSet targets are not supported). See the `deep-eql` project\n * page for info on the deep equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target array deeply (but not strictly) includes `{a: 1}`\n * expect([{a: 1}]).to.deep.include({a: 1});\n * expect([{a: 1}]).to.not.include({a: 1});\n *\n * // Target object deeply (but not strictly) includes `x: {a: 1}`\n * expect({x: {a: 1}}).to.deep.include({x: {a: 1}});\n * expect({x: {a: 1}}).to.not.include({x: {a: 1}});\n *\n * By default, all of the target's properties are searched when working with\n * objects. This includes properties that are inherited and/or non-enumerable.\n * Add `.own` earlier in the chain to exclude the target's inherited\n * properties from the search.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.own.include({a: 1});\n * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});\n *\n * Note that a target object is always only searched for `val`'s own\n * enumerable properties.\n *\n * `.deep` and `.own` can be combined.\n *\n * expect({a: {b: 2}}).to.deep.own.include({a: {b: 2}});\n *\n * Add `.nested` earlier in the chain to enable dot- and bracket-notation when\n * referencing nested properties.\n *\n * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 2}}).to.nested.include({'\\\\.a.\\\\[b\\\\]': 2});\n *\n * `.deep` and `.nested` can be combined.\n *\n * expect({a: {b: [{c: 3}]}}).to.deep.nested.include({'a.b[0]': {c: 3}});\n *\n * `.own` and `.nested` cannot be combined.\n *\n * Add `.not` earlier in the chain to negate `.include`.\n *\n * expect('foobar').to.not.include('taco');\n * expect([1, 2, 3]).to.not.include(4);\n *\n * However, it's dangerous to negate `.include` when the target is an object.\n * The problem is that it creates uncertain expectations by asserting that the\n * target object doesn't have all of `val`'s key/value pairs but may or may\n * not have some of them. It's often best to identify the exact output that's\n * expected, and then write an assertion that only accepts that exact output.\n *\n * When the target object isn't even expected to have `val`'s keys, it's\n * often best to assert exactly that.\n *\n * expect({c: 3}).to.not.have.any.keys('a', 'b'); // Recommended\n * expect({c: 3}).to.not.include({a: 1, b: 2}); // Not recommended\n *\n * When the target object is expected to have `val`'s keys, it's often best to\n * assert that each of the properties has its expected value, rather than\n * asserting that each property doesn't have one of many unexpected values.\n *\n * expect({a: 3, b: 4}).to.include({a: 3, b: 4}); // Recommended\n * expect({a: 3, b: 4}).to.not.include({a: 1, b: 2}); // Not recommended\n *\n * `.include` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2, 3]).to.include(4, 'nooo why fail??');\n * expect([1, 2, 3], 'nooo why fail??').to.include(4);\n *\n * `.include` can also be used as a language chain, causing all `.members` and\n * `.keys` assertions that follow in the chain to require the target to be a\n * superset of the expected set, rather than an identical set. Note that\n * `.members` ignores duplicates in the subset when `.include` is added.\n *\n * // Target object's keys are a superset of ['a', 'b'] but not identical\n * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');\n * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');\n *\n * // Target array is a superset of [1, 2] but not identical\n * expect([1, 2, 3]).to.include.members([1, 2]);\n * expect([1, 2, 3]).to.not.have.members([1, 2]);\n *\n * // Duplicates in the subset are ignored\n * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);\n *\n * Note that adding `.any` earlier in the chain causes the `.keys` assertion\n * to ignore `.include`.\n *\n * // Both assertions are identical\n * expect({a: 1}).to.include.any.keys('a', 'b');\n * expect({a: 1}).to.have.any.keys('a', 'b');\n *\n * The aliases `.includes`, `.contain`, and `.contains` can be used\n * interchangeably with `.include`.\n *\n * @name include\n * @alias contain\n * @alias includes\n * @alias contains\n * @param {Mixed} val\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function SameValueZero(a, b) {\n return (_.isNaN(a) && _.isNaN(b)) || a === b;\n }\n\n function includeChainingBehavior () {\n flag(this, 'contains', true);\n }\n\n function include (val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var obj = flag(this, 'object')\n , objType = _.type(obj).toLowerCase()\n , flagMsg = flag(this, 'message')\n , negate = flag(this, 'negate')\n , ssfi = flag(this, 'ssfi')\n , isDeep = flag(this, 'deep')\n , descriptor = isDeep ? 'deep ' : '';\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n var included = false;\n\n switch (objType) {\n case 'string':\n included = obj.indexOf(val) !== -1;\n break;\n\n case 'weakset':\n if (isDeep) {\n throw new AssertionError(\n flagMsg + 'unable to use .deep.include with WeakSet',\n undefined,\n ssfi\n );\n }\n\n included = obj.has(val);\n break;\n\n case 'map':\n var isEql = isDeep ? _.eql : SameValueZero;\n obj.forEach(function (item) {\n included = included || isEql(item, val);\n });\n break;\n\n case 'set':\n if (isDeep) {\n obj.forEach(function (item) {\n included = included || _.eql(item, val);\n });\n } else {\n included = obj.has(val);\n }\n break;\n\n case 'array':\n if (isDeep) {\n included = obj.some(function (item) {\n return _.eql(item, val);\n })\n } else {\n included = obj.indexOf(val) !== -1;\n }\n break;\n\n default:\n // This block is for asserting a subset of properties in an object.\n // `_.expectTypes` isn't used here because `.include` should work with\n // objects with a custom `@@toStringTag`.\n if (val !== Object(val)) {\n throw new AssertionError(\n flagMsg + 'the given combination of arguments ('\n + objType + ' and '\n + _.type(val).toLowerCase() + ')'\n + ' is invalid for this assertion. '\n + 'You can use an array, a map, an object, a set, a string, '\n + 'or a weakset instead of a '\n + _.type(val).toLowerCase(),\n undefined,\n ssfi\n );\n }\n\n var props = Object.keys(val)\n , firstErr = null\n , numErrs = 0;\n\n props.forEach(function (prop) {\n var propAssertion = new Assertion(obj);\n _.transferFlags(this, propAssertion, true);\n flag(propAssertion, 'lockSsfi', true);\n\n if (!negate || props.length === 1) {\n propAssertion.property(prop, val[prop]);\n return;\n }\n\n try {\n propAssertion.property(prop, val[prop]);\n } catch (err) {\n if (!_.checkError.compatibleConstructor(err, AssertionError)) {\n throw err;\n }\n if (firstErr === null) firstErr = err;\n numErrs++;\n }\n }, this);\n\n // When validating .not.include with multiple properties, we only want\n // to throw an assertion error if all of the properties are included,\n // in which case we throw the first property assertion error that we\n // encountered.\n if (negate && props.length > 1 && numErrs === props.length) {\n throw firstErr;\n }\n return;\n }\n\n // Assert inclusion in collection or substring in a string.\n this.assert(\n included\n , 'expected #{this} to ' + descriptor + 'include ' + _.inspect(val)\n , 'expected #{this} to not ' + descriptor + 'include ' + _.inspect(val));\n }\n\n Assertion.addChainableMethod('include', include, includeChainingBehavior);\n Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n /**\n * ### .ok\n *\n * Asserts that the target is a truthy value (considered `true` in boolean context).\n * However, it's often best to assert that the target is strictly (`===`) or\n * deeply equal to its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.ok; // Not recommended\n *\n * expect(true).to.be.true; // Recommended\n * expect(true).to.be.ok; // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.ok`.\n *\n * expect(0).to.equal(0); // Recommended\n * expect(0).to.not.be.ok; // Not recommended\n *\n * expect(false).to.be.false; // Recommended\n * expect(false).to.not.be.ok; // Not recommended\n *\n * expect(null).to.be.null; // Recommended\n * expect(null).to.not.be.ok; // Not recommended\n *\n * expect(undefined).to.be.undefined; // Recommended\n * expect(undefined).to.not.be.ok; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(false, 'nooo why fail??').to.be.ok;\n *\n * @name ok\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ok', function () {\n this.assert(\n flag(this, 'object')\n , 'expected #{this} to be truthy'\n , 'expected #{this} to be falsy');\n });\n\n /**\n * ### .true\n *\n * Asserts that the target is strictly (`===`) equal to `true`.\n *\n * expect(true).to.be.true;\n *\n * Add `.not` earlier in the chain to negate `.true`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `true`.\n *\n * expect(false).to.be.false; // Recommended\n * expect(false).to.not.be.true; // Not recommended\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.true; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(false, 'nooo why fail??').to.be.true;\n *\n * @name true\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('true', function () {\n this.assert(\n true === flag(this, 'object')\n , 'expected #{this} to be true'\n , 'expected #{this} to be false'\n , flag(this, 'negate') ? false : true\n );\n });\n\n /**\n * ### .false\n *\n * Asserts that the target is strictly (`===`) equal to `false`.\n *\n * expect(false).to.be.false;\n *\n * Add `.not` earlier in the chain to negate `.false`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to `false`.\n *\n * expect(true).to.be.true; // Recommended\n * expect(true).to.not.be.false; // Not recommended\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.false; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(true, 'nooo why fail??').to.be.false;\n *\n * @name false\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('false', function () {\n this.assert(\n false === flag(this, 'object')\n , 'expected #{this} to be false'\n , 'expected #{this} to be true'\n , flag(this, 'negate') ? true : false\n );\n });\n\n /**\n * ### .null\n *\n * Asserts that the target is strictly (`===`) equal to `null`.\n *\n * expect(null).to.be.null;\n *\n * Add `.not` earlier in the chain to negate `.null`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `null`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.null; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.null;\n *\n * @name null\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('null', function () {\n this.assert(\n null === flag(this, 'object')\n , 'expected #{this} to be null'\n , 'expected #{this} not to be null'\n );\n });\n\n /**\n * ### .undefined\n *\n * Asserts that the target is strictly (`===`) equal to `undefined`.\n *\n * expect(undefined).to.be.undefined;\n *\n * Add `.not` earlier in the chain to negate `.undefined`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to `undefined`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.undefined; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.undefined;\n *\n * @name undefined\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('undefined', function () {\n this.assert(\n undefined === flag(this, 'object')\n , 'expected #{this} to be undefined'\n , 'expected #{this} not to be undefined'\n );\n });\n\n /**\n * ### .NaN\n *\n * Asserts that the target is exactly `NaN`.\n *\n * expect(NaN).to.be.NaN;\n *\n * Add `.not` earlier in the chain to negate `.NaN`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `NaN`.\n *\n * expect('foo').to.equal('foo'); // Recommended\n * expect('foo').to.not.be.NaN; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.NaN;\n *\n * @name NaN\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('NaN', function () {\n this.assert(\n _.isNaN(flag(this, 'object'))\n , 'expected #{this} to be NaN'\n , 'expected #{this} not to be NaN'\n );\n });\n\n /**\n * ### .exist\n *\n * Asserts that the target is not strictly (`===`) equal to either `null` or\n * `undefined`. However, it's often best to assert that the target is equal to\n * its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.exist; // Not recommended\n *\n * expect(0).to.equal(0); // Recommended\n * expect(0).to.exist; // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.exist`.\n *\n * expect(null).to.be.null; // Recommended\n * expect(null).to.not.exist; // Not recommended\n *\n * expect(undefined).to.be.undefined; // Recommended\n * expect(undefined).to.not.exist; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(null, 'nooo why fail??').to.exist;\n *\n * The alias `.exists` can be used interchangeably with `.exist`.\n *\n * @name exist\n * @alias exists\n * @namespace BDD\n * @api public\n */\n\n function assertExist () {\n var val = flag(this, 'object');\n this.assert(\n val !== null && val !== undefined\n , 'expected #{this} to exist'\n , 'expected #{this} to not exist'\n );\n }\n\n Assertion.addProperty('exist', assertExist);\n Assertion.addProperty('exists', assertExist);\n\n /**\n * ### .empty\n *\n * When the target is a string or array, `.empty` asserts that the target's\n * `length` property is strictly (`===`) equal to `0`.\n *\n * expect([]).to.be.empty;\n * expect('').to.be.empty;\n *\n * When the target is a map or set, `.empty` asserts that the target's `size`\n * property is strictly equal to `0`.\n *\n * expect(new Set()).to.be.empty;\n * expect(new Map()).to.be.empty;\n *\n * When the target is a non-function object, `.empty` asserts that the target\n * doesn't have any own enumerable properties. Properties with Symbol-based\n * keys are excluded from the count.\n *\n * expect({}).to.be.empty;\n *\n * Because `.empty` does different things based on the target's type, it's\n * important to check the target's type before using `.empty`. See the `.a`\n * doc for info on testing a target's type.\n *\n * expect([]).to.be.an('array').that.is.empty;\n *\n * Add `.not` earlier in the chain to negate `.empty`. However, it's often\n * best to assert that the target contains its expected number of values,\n * rather than asserting that it's not empty.\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.not.be.empty; // Not recommended\n *\n * expect(new Set([1, 2, 3])).to.have.property('size', 3); // Recommended\n * expect(new Set([1, 2, 3])).to.not.be.empty; // Not recommended\n *\n * expect(Object.keys({a: 1})).to.have.lengthOf(1); // Recommended\n * expect({a: 1}).to.not.be.empty; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect([1, 2, 3], 'nooo why fail??').to.be.empty;\n *\n * @name empty\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('empty', function () {\n var val = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , flagMsg = flag(this, 'message')\n , itemsCount;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n switch (_.type(val).toLowerCase()) {\n case 'array':\n case 'string':\n itemsCount = val.length;\n break;\n case 'map':\n case 'set':\n itemsCount = val.size;\n break;\n case 'weakmap':\n case 'weakset':\n throw new AssertionError(\n flagMsg + '.empty was passed a weak collection',\n undefined,\n ssfi\n );\n case 'function':\n var msg = flagMsg + '.empty was passed a function ' + _.getName(val);\n throw new AssertionError(msg.trim(), undefined, ssfi);\n default:\n if (val !== Object(val)) {\n throw new AssertionError(\n flagMsg + '.empty was passed non-string primitive ' + _.inspect(val),\n undefined,\n ssfi\n );\n }\n itemsCount = Object.keys(val).length;\n }\n\n this.assert(\n 0 === itemsCount\n , 'expected #{this} to be empty'\n , 'expected #{this} not to be empty'\n );\n });\n\n /**\n * ### .arguments\n *\n * Asserts that the target is an `arguments` object.\n *\n * function test () {\n * expect(arguments).to.be.arguments;\n * }\n *\n * test();\n *\n * Add `.not` earlier in the chain to negate `.arguments`. However, it's often\n * best to assert which type the target is expected to be, rather than\n * asserting that it\u2019s not an `arguments` object.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.arguments; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({}, 'nooo why fail??').to.be.arguments;\n *\n * The alias `.Arguments` can be used interchangeably with `.arguments`.\n *\n * @name arguments\n * @alias Arguments\n * @namespace BDD\n * @api public\n */\n\n function checkArguments () {\n var obj = flag(this, 'object')\n , type = _.type(obj);\n this.assert(\n 'Arguments' === type\n , 'expected #{this} to be arguments but got ' + type\n , 'expected #{this} to not be arguments'\n );\n }\n\n Assertion.addProperty('arguments', checkArguments);\n Assertion.addProperty('Arguments', checkArguments);\n\n /**\n * ### .equal(val[, msg])\n *\n * Asserts that the target is strictly (`===`) equal to the given `val`.\n *\n * expect(1).to.equal(1);\n * expect('foo').to.equal('foo');\n *\n * Add `.deep` earlier in the chain to use deep equality instead. See the\n * `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) equals `{a: 1}`\n * expect({a: 1}).to.deep.equal({a: 1});\n * expect({a: 1}).to.not.equal({a: 1});\n *\n * // Target array deeply (but not strictly) equals `[1, 2]`\n * expect([1, 2]).to.deep.equal([1, 2]);\n * expect([1, 2]).to.not.equal([1, 2]);\n *\n * Add `.not` earlier in the chain to negate `.equal`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to one of countless unexpected values.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.equal(2); // Not recommended\n *\n * `.equal` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.equal(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.equal(2);\n *\n * The aliases `.equals` and `eq` can be used interchangeably with `.equal`.\n *\n * @name equal\n * @alias equals\n * @alias eq\n * @param {Mixed} val\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEqual (val, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'deep')) {\n var prevLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n this.eql(val);\n flag(this, 'lockSsfi', prevLockSsfi);\n } else {\n this.assert(\n val === obj\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{exp}'\n , val\n , this._obj\n , true\n );\n }\n }\n\n Assertion.addMethod('equal', assertEqual);\n Assertion.addMethod('equals', assertEqual);\n Assertion.addMethod('eq', assertEqual);\n\n /**\n * ### .eql(obj[, msg])\n *\n * Asserts that the target is deeply equal to the given `obj`. See the\n * `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target object is deeply (but not strictly) equal to {a: 1}\n * expect({a: 1}).to.eql({a: 1}).but.not.equal({a: 1});\n *\n * // Target array is deeply (but not strictly) equal to [1, 2]\n * expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]);\n *\n * Add `.not` earlier in the chain to negate `.eql`. However, it's often best\n * to assert that the target is deeply equal to its expected value, rather\n * than not deeply equal to one of countless unexpected values.\n *\n * expect({a: 1}).to.eql({a: 1}); // Recommended\n * expect({a: 1}).to.not.eql({b: 2}); // Not recommended\n *\n * `.eql` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect({a: 1}).to.eql({b: 2}, 'nooo why fail??');\n * expect({a: 1}, 'nooo why fail??').to.eql({b: 2});\n *\n * The alias `.eqls` can be used interchangeably with `.eql`.\n *\n * The `.deep.equal` assertion is almost identical to `.eql` but with one\n * difference: `.deep.equal` causes deep equality comparisons to also be used\n * for any other assertions that follow in the chain.\n *\n * @name eql\n * @alias eqls\n * @param {Mixed} obj\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEql(obj, msg) {\n if (msg) flag(this, 'message', msg);\n this.assert(\n _.eql(obj, flag(this, 'object'))\n , 'expected #{this} to deeply equal #{exp}'\n , 'expected #{this} to not deeply equal #{exp}'\n , obj\n , this._obj\n , true\n );\n }\n\n Assertion.addMethod('eql', assertEql);\n Assertion.addMethod('eqls', assertEql);\n\n /**\n * ### .above(n[, msg])\n *\n * Asserts that the target is a number or a date greater than the given number or date `n` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.above(1); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.above(2); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.above(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.above`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(1).to.not.be.above(2); // Not recommended\n *\n * `.above` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.above(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.above(2);\n *\n * The aliases `.gt` and `.greaterThan` can be used interchangeably with\n * `.above`.\n *\n * @name above\n * @alias gt\n * @alias greaterThan\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertAbove (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to above must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to above must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount > n\n , 'expected #{this} to have a ' + descriptor + ' above #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' above #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj > n\n , 'expected #{this} to be above #{exp}'\n , 'expected #{this} to be at most #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('above', assertAbove);\n Assertion.addMethod('gt', assertAbove);\n Assertion.addMethod('greaterThan', assertAbove);\n\n /**\n * ### .least(n[, msg])\n *\n * Asserts that the target is a number or a date greater than or equal to the given\n * number or date `n` respectively. However, it's often best to assert that the target is equal to\n * its expected value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.at.least(1); // Not recommended\n * expect(2).to.be.at.least(2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than or equal to the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.at.least(2); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.at.least(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.least`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.at.least(2); // Not recommended\n *\n * `.least` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.at.least(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.at.least(2);\n *\n * The aliases `.gte` and `.greaterThanOrEqual` can be used interchangeably with\n * `.least`.\n *\n * @name least\n * @alias gte\n * @alias greaterThanOrEqual\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLeast (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to least must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to least must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount >= n\n , 'expected #{this} to have a ' + descriptor + ' at least #{exp} but got #{act}'\n , 'expected #{this} to have a ' + descriptor + ' below #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj >= n\n , 'expected #{this} to be at least #{exp}'\n , 'expected #{this} to be below #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('least', assertLeast);\n Assertion.addMethod('gte', assertLeast);\n Assertion.addMethod('greaterThanOrEqual', assertLeast);\n\n /**\n * ### .below(n[, msg])\n *\n * Asserts that the target is a number or a date less than the given number or date `n` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.below(2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is less than the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.below(4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.length(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.below(4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.below`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.be.below(1); // Not recommended\n *\n * `.below` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(2).to.be.below(1, 'nooo why fail??');\n * expect(2, 'nooo why fail??').to.be.below(1);\n *\n * The aliases `.lt` and `.lessThan` can be used interchangeably with\n * `.below`.\n *\n * @name below\n * @alias lt\n * @alias lessThan\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertBelow (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to below must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to below must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount < n\n , 'expected #{this} to have a ' + descriptor + ' below #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' below #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj < n\n , 'expected #{this} to be below #{exp}'\n , 'expected #{this} to be at least #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('below', assertBelow);\n Assertion.addMethod('lt', assertBelow);\n Assertion.addMethod('lessThan', assertBelow);\n\n /**\n * ### .most(n[, msg])\n *\n * Asserts that the target is a number or a date less than or equal to the given number\n * or date `n` respectively. However, it's often best to assert that the target is equal to its\n * expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.at.most(2); // Not recommended\n * expect(1).to.be.at.most(1); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is less than or equal to the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.at.most(4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.at.most(4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.most`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.be.at.most(1); // Not recommended\n *\n * `.most` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(2).to.be.at.most(1, 'nooo why fail??');\n * expect(2, 'nooo why fail??').to.be.at.most(1);\n *\n * The aliases `.lte` and `.lessThanOrEqual` can be used interchangeably with\n * `.most`.\n *\n * @name most\n * @alias lte\n * @alias lessThanOrEqual\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertMost (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to most must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to most must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount <= n\n , 'expected #{this} to have a ' + descriptor + ' at most #{exp} but got #{act}'\n , 'expected #{this} to have a ' + descriptor + ' above #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj <= n\n , 'expected #{this} to be at most #{exp}'\n , 'expected #{this} to be above #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('most', assertMost);\n Assertion.addMethod('lte', assertMost);\n Assertion.addMethod('lessThanOrEqual', assertMost);\n\n /**\n * ### .within(start, finish[, msg])\n *\n * Asserts that the target is a number or a date greater than or equal to the given\n * number or date `start`, and less than or equal to the given number or date `finish` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.within(1, 3); // Not recommended\n * expect(2).to.be.within(2, 3); // Not recommended\n * expect(2).to.be.within(1, 2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than or equal to the given number `start`, and less\n * than or equal to the given number `finish`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.within(2, 4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.within(2, 4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.within`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.within(2, 4); // Not recommended\n *\n * `.within` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(4).to.be.within(1, 3, 'nooo why fail??');\n * expect(4, 'nooo why fail??').to.be.within(1, 3);\n *\n * @name within\n * @param {Number} start lower bound inclusive\n * @param {Number} finish upper bound inclusive\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('within', function (start, finish, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , startType = _.type(start).toLowerCase()\n , finishType = _.type(finish).toLowerCase()\n , errorMessage\n , shouldThrow = true\n , range = (startType === 'date' && finishType === 'date')\n ? start.toISOString() + '..' + finish.toISOString()\n : start + '..' + finish;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && (startType !== 'date' || finishType !== 'date'))) {\n errorMessage = msgPrefix + 'the arguments to within must be dates';\n } else if ((startType !== 'number' || finishType !== 'number') && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the arguments to within must be numbers';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount >= start && itemsCount <= finish\n , 'expected #{this} to have a ' + descriptor + ' within ' + range\n , 'expected #{this} to not have a ' + descriptor + ' within ' + range\n );\n } else {\n this.assert(\n obj >= start && obj <= finish\n , 'expected #{this} to be within ' + range\n , 'expected #{this} to not be within ' + range\n );\n }\n });\n\n /**\n * ### .instanceof(constructor[, msg])\n *\n * Asserts that the target is an instance of the given `constructor`.\n *\n * function Cat () { }\n *\n * expect(new Cat()).to.be.an.instanceof(Cat);\n * expect([1, 2]).to.be.an.instanceof(Array);\n *\n * Add `.not` earlier in the chain to negate `.instanceof`.\n *\n * expect({a: 1}).to.not.be.an.instanceof(Array);\n *\n * `.instanceof` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1).to.be.an.instanceof(Array, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.an.instanceof(Array);\n *\n * Due to limitations in ES5, `.instanceof` may not always work as expected\n * when using a transpiler such as Babel or TypeScript. In particular, it may\n * produce unexpected results when subclassing built-in object such as\n * `Array`, `Error`, and `Map`. See your transpiler's docs for details:\n *\n * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))\n * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))\n *\n * The alias `.instanceOf` can be used interchangeably with `.instanceof`.\n *\n * @name instanceof\n * @param {Constructor} constructor\n * @param {String} msg _optional_\n * @alias instanceOf\n * @namespace BDD\n * @api public\n */\n\n function assertInstanceOf (constructor, msg) {\n if (msg) flag(this, 'message', msg);\n\n var target = flag(this, 'object')\n var ssfi = flag(this, 'ssfi');\n var flagMsg = flag(this, 'message');\n\n try {\n var isInstanceOf = target instanceof constructor;\n } catch (err) {\n if (err instanceof TypeError) {\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n throw new AssertionError(\n flagMsg + 'The instanceof assertion needs a constructor but '\n + _.type(constructor) + ' was given.',\n undefined,\n ssfi\n );\n }\n throw err;\n }\n\n var name = _.getName(constructor);\n if (name === null) {\n name = 'an unnamed constructor';\n }\n\n this.assert(\n isInstanceOf\n , 'expected #{this} to be an instance of ' + name\n , 'expected #{this} to not be an instance of ' + name\n );\n };\n\n Assertion.addMethod('instanceof', assertInstanceOf);\n Assertion.addMethod('instanceOf', assertInstanceOf);\n\n /**\n * ### .property(name[, val[, msg]])\n *\n * Asserts that the target has a property with the given key `name`.\n *\n * expect({a: 1}).to.have.property('a');\n *\n * When `val` is provided, `.property` also asserts that the property's value\n * is equal to the given `val`.\n *\n * expect({a: 1}).to.have.property('a', 1);\n *\n * By default, strict (`===`) equality is used. Add `.deep` earlier in the\n * chain to use deep equality instead. See the `deep-eql` project page for\n * info on the deep equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) has property `x: {a: 1}`\n * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});\n * expect({x: {a: 1}}).to.not.have.property('x', {a: 1});\n *\n * The target's enumerable and non-enumerable properties are always included\n * in the search. By default, both own and inherited properties are included.\n * Add `.own` earlier in the chain to exclude inherited properties from the\n * search.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.have.own.property('a');\n * expect({a: 1}).to.have.own.property('a', 1);\n * expect({a: 1}).to.have.property('b');\n * expect({a: 1}).to.not.have.own.property('b');\n *\n * `.deep` and `.own` can be combined.\n *\n * expect({x: {a: 1}}).to.have.deep.own.property('x', {a: 1});\n *\n * Add `.nested` earlier in the chain to enable dot- and bracket-notation when\n * referencing nested properties.\n *\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]', 'y');\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\\\.a.\\\\[b\\\\]');\n *\n * `.deep` and `.nested` can be combined.\n *\n * expect({a: {b: [{c: 3}]}})\n * .to.have.deep.nested.property('a.b[0]', {c: 3});\n *\n * `.own` and `.nested` cannot be combined.\n *\n * Add `.not` earlier in the chain to negate `.property`.\n *\n * expect({a: 1}).to.not.have.property('b');\n *\n * However, it's dangerous to negate `.property` when providing `val`. The\n * problem is that it creates uncertain expectations by asserting that the\n * target either doesn't have a property with the given key `name`, or that it\n * does have a property with the given key `name` but its value isn't equal to\n * the given `val`. It's often best to identify the exact output that's\n * expected, and then write an assertion that only accepts that exact output.\n *\n * When the target isn't expected to have a property with the given key\n * `name`, it's often best to assert exactly that.\n *\n * expect({b: 2}).to.not.have.property('a'); // Recommended\n * expect({b: 2}).to.not.have.property('a', 1); // Not recommended\n *\n * When the target is expected to have a property with the given key `name`,\n * it's often best to assert that the property has its expected value, rather\n * than asserting that it doesn't have one of many unexpected values.\n *\n * expect({a: 3}).to.have.property('a', 3); // Recommended\n * expect({a: 3}).to.not.have.property('a', 1); // Not recommended\n *\n * `.property` changes the target of any assertions that follow in the chain\n * to be the value of the property from the original target object.\n *\n * expect({a: 1}).to.have.property('a').that.is.a('number');\n *\n * `.property` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing `val`, only use the\n * second form.\n *\n * // Recommended\n * expect({a: 1}).to.have.property('a', 2, 'nooo why fail??');\n * expect({a: 1}, 'nooo why fail??').to.have.property('a', 2);\n * expect({a: 1}, 'nooo why fail??').to.have.property('b');\n *\n * // Not recommended\n * expect({a: 1}).to.have.property('b', undefined, 'nooo why fail??');\n *\n * The above assertion isn't the same thing as not providing `val`. Instead,\n * it's asserting that the target object has a `b` property that's equal to\n * `undefined`.\n *\n * The assertions `.ownProperty` and `.haveOwnProperty` can be used\n * interchangeably with `.own.property`.\n *\n * @name property\n * @param {String} name\n * @param {Mixed} val (optional)\n * @param {String} msg _optional_\n * @returns value of property for chaining\n * @namespace BDD\n * @api public\n */\n\n function assertProperty (name, val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var isNested = flag(this, 'nested')\n , isOwn = flag(this, 'own')\n , flagMsg = flag(this, 'message')\n , obj = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , nameType = typeof name;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n if (isNested) {\n if (nameType !== 'string') {\n throw new AssertionError(\n flagMsg + 'the argument to property must be a string when using nested syntax',\n undefined,\n ssfi\n );\n }\n } else {\n if (nameType !== 'string' && nameType !== 'number' && nameType !== 'symbol') {\n throw new AssertionError(\n flagMsg + 'the argument to property must be a string, number, or symbol',\n undefined,\n ssfi\n );\n }\n }\n\n if (isNested && isOwn) {\n throw new AssertionError(\n flagMsg + 'The \"nested\" and \"own\" flags cannot be combined.',\n undefined,\n ssfi\n );\n }\n\n if (obj === null || obj === undefined) {\n throw new AssertionError(\n flagMsg + 'Target cannot be null or undefined.',\n undefined,\n ssfi\n );\n }\n\n var isDeep = flag(this, 'deep')\n , negate = flag(this, 'negate')\n , pathInfo = isNested ? _.getPathInfo(obj, name) : null\n , value = isNested ? pathInfo.value : obj[name];\n\n var descriptor = '';\n if (isDeep) descriptor += 'deep ';\n if (isOwn) descriptor += 'own ';\n if (isNested) descriptor += 'nested ';\n descriptor += 'property ';\n\n var hasProperty;\n if (isOwn) hasProperty = Object.prototype.hasOwnProperty.call(obj, name);\n else if (isNested) hasProperty = pathInfo.exists;\n else hasProperty = _.hasProperty(obj, name);\n\n // When performing a negated assertion for both name and val, merely having\n // a property with the given name isn't enough to cause the assertion to\n // fail. It must both have a property with the given name, and the value of\n // that property must equal the given val. Therefore, skip this assertion in\n // favor of the next.\n if (!negate || arguments.length === 1) {\n this.assert(\n hasProperty\n , 'expected #{this} to have ' + descriptor + _.inspect(name)\n , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n }\n\n if (arguments.length > 1) {\n this.assert(\n hasProperty && (isDeep ? _.eql(val, value) : val === value)\n , 'expected #{this} to have ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n , 'expected #{this} to not have ' + descriptor + _.inspect(name) + ' of #{act}'\n , val\n , value\n );\n }\n\n flag(this, 'object', value);\n }\n\n Assertion.addMethod('property', assertProperty);\n\n function assertOwnProperty (name, value, msg) {\n flag(this, 'own', true);\n assertProperty.apply(this, arguments);\n }\n\n Assertion.addMethod('ownProperty', assertOwnProperty);\n Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n /**\n * ### .ownPropertyDescriptor(name[, descriptor[, msg]])\n *\n * Asserts that the target has its own property descriptor with the given key\n * `name`. Enumerable and non-enumerable properties are included in the\n * search.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a');\n *\n * When `descriptor` is provided, `.ownPropertyDescriptor` also asserts that\n * the property's descriptor is deeply equal to the given `descriptor`. See\n * the `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * Add `.not` earlier in the chain to negate `.ownPropertyDescriptor`.\n *\n * expect({a: 1}).to.not.have.ownPropertyDescriptor('b');\n *\n * However, it's dangerous to negate `.ownPropertyDescriptor` when providing\n * a `descriptor`. The problem is that it creates uncertain expectations by\n * asserting that the target either doesn't have a property descriptor with\n * the given key `name`, or that it does have a property descriptor with the\n * given key `name` but it\u2019s not deeply equal to the given `descriptor`. It's\n * often best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to have a property descriptor with the given\n * key `name`, it's often best to assert exactly that.\n *\n * // Recommended\n * expect({b: 2}).to.not.have.ownPropertyDescriptor('a');\n *\n * // Not recommended\n * expect({b: 2}).to.not.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * When the target is expected to have a property descriptor with the given\n * key `name`, it's often best to assert that the property has its expected\n * descriptor, rather than asserting that it doesn't have one of many\n * unexpected descriptors.\n *\n * // Recommended\n * expect({a: 3}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 3,\n * });\n *\n * // Not recommended\n * expect({a: 3}).to.not.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * `.ownPropertyDescriptor` changes the target of any assertions that follow\n * in the chain to be the value of the property descriptor from the original\n * target object.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a')\n * .that.has.property('enumerable', true);\n *\n * `.ownPropertyDescriptor` accepts an optional `msg` argument which is a\n * custom error message to show when the assertion fails. The message can also\n * be given as the second argument to `expect`. When not providing\n * `descriptor`, only use the second form.\n *\n * // Recommended\n * expect({a: 1}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 2,\n * }, 'nooo why fail??');\n *\n * // Recommended\n * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 2,\n * });\n *\n * // Recommended\n * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('b');\n *\n * // Not recommended\n * expect({a: 1})\n * .to.have.ownPropertyDescriptor('b', undefined, 'nooo why fail??');\n *\n * The above assertion isn't the same thing as not providing `descriptor`.\n * Instead, it's asserting that the target object has a `b` property\n * descriptor that's deeply equal to `undefined`.\n *\n * The alias `.haveOwnPropertyDescriptor` can be used interchangeably with\n * `.ownPropertyDescriptor`.\n *\n * @name ownPropertyDescriptor\n * @alias haveOwnPropertyDescriptor\n * @param {String} name\n * @param {Object} descriptor _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnPropertyDescriptor (name, descriptor, msg) {\n if (typeof descriptor === 'string') {\n msg = descriptor;\n descriptor = null;\n }\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n if (actualDescriptor && descriptor) {\n this.assert(\n _.eql(descriptor, actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n , descriptor\n , actualDescriptor\n , true\n );\n } else {\n this.assert(\n actualDescriptor\n , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n );\n }\n flag(this, 'object', actualDescriptor);\n }\n\n Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n /**\n * ### .lengthOf(n[, msg])\n *\n * Asserts that the target's `length` or `size` is equal to the given number\n * `n`.\n *\n * expect([1, 2, 3]).to.have.lengthOf(3);\n * expect('foo').to.have.lengthOf(3);\n * expect(new Set([1, 2, 3])).to.have.lengthOf(3);\n * expect(new Map([['a', 1], ['b', 2], ['c', 3]])).to.have.lengthOf(3);\n *\n * Add `.not` earlier in the chain to negate `.lengthOf`. However, it's often\n * best to assert that the target's `length` property is equal to its expected\n * value, rather than not equal to one of many unexpected values.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.not.have.lengthOf(4); // Not recommended\n *\n * `.lengthOf` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2, 3]).to.have.lengthOf(2, 'nooo why fail??');\n * expect([1, 2, 3], 'nooo why fail??').to.have.lengthOf(2);\n *\n * `.lengthOf` can also be used as a language chain, causing all `.above`,\n * `.below`, `.least`, `.most`, and `.within` assertions that follow in the\n * chain to use the target's `length` property as the target. However, it's\n * often best to assert that the target's `length` property is equal to its\n * expected length, rather than asserting that its `length` property falls\n * within some range of values.\n *\n * // Recommended\n * expect([1, 2, 3]).to.have.lengthOf(3);\n *\n * // Not recommended\n * expect([1, 2, 3]).to.have.lengthOf.above(2);\n * expect([1, 2, 3]).to.have.lengthOf.below(4);\n * expect([1, 2, 3]).to.have.lengthOf.at.least(3);\n * expect([1, 2, 3]).to.have.lengthOf.at.most(3);\n * expect([1, 2, 3]).to.have.lengthOf.within(2,4);\n *\n * Due to a compatibility issue, the alias `.length` can't be chained directly\n * off of an uninvoked method such as `.a`. Therefore, `.length` can't be used\n * interchangeably with `.lengthOf` in every situation. It's recommended to\n * always use `.lengthOf` instead of `.length`.\n *\n * expect([1, 2, 3]).to.have.a.length(3); // incompatible; throws error\n * expect([1, 2, 3]).to.have.a.lengthOf(3); // passes as expected\n *\n * @name lengthOf\n * @alias length\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLengthChain () {\n flag(this, 'doLength', true);\n }\n\n function assertLength (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , objType = _.type(obj).toLowerCase()\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi')\n , descriptor = 'length'\n , itemsCount;\n\n switch (objType) {\n case 'map':\n case 'set':\n descriptor = 'size';\n itemsCount = obj.size;\n break;\n default:\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n itemsCount = obj.length;\n }\n\n this.assert(\n itemsCount == n\n , 'expected #{this} to have a ' + descriptor + ' of #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' of #{act}'\n , n\n , itemsCount\n );\n }\n\n Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n Assertion.addChainableMethod('lengthOf', assertLength, assertLengthChain);\n\n /**\n * ### .match(re[, msg])\n *\n * Asserts that the target matches the given regular expression `re`.\n *\n * expect('foobar').to.match(/^foo/);\n *\n * Add `.not` earlier in the chain to negate `.match`.\n *\n * expect('foobar').to.not.match(/taco/);\n *\n * `.match` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect('foobar').to.match(/taco/, 'nooo why fail??');\n * expect('foobar', 'nooo why fail??').to.match(/taco/);\n *\n * The alias `.matches` can be used interchangeably with `.match`.\n *\n * @name match\n * @alias matches\n * @param {RegExp} re\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n function assertMatch(re, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n re.exec(obj)\n , 'expected #{this} to match ' + re\n , 'expected #{this} not to match ' + re\n );\n }\n\n Assertion.addMethod('match', assertMatch);\n Assertion.addMethod('matches', assertMatch);\n\n /**\n * ### .string(str[, msg])\n *\n * Asserts that the target string contains the given substring `str`.\n *\n * expect('foobar').to.have.string('bar');\n *\n * Add `.not` earlier in the chain to negate `.string`.\n *\n * expect('foobar').to.not.have.string('taco');\n *\n * `.string` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect('foobar').to.have.string('taco', 'nooo why fail??');\n * expect('foobar', 'nooo why fail??').to.have.string('taco');\n *\n * @name string\n * @param {String} str\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('string', function (str, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(obj, flagMsg, ssfi, true).is.a('string');\n\n this.assert(\n ~obj.indexOf(str)\n , 'expected #{this} to contain ' + _.inspect(str)\n , 'expected #{this} to not contain ' + _.inspect(str)\n );\n });\n\n /**\n * ### .keys(key1[, key2[, ...]])\n *\n * Asserts that the target object, array, map, or set has the given keys. Only\n * the target's own inherited properties are included in the search.\n *\n * When the target is an object or array, keys can be provided as one or more\n * string arguments, a single array argument, or a single object argument. In\n * the latter case, only the keys in the given object matter; the values are\n * ignored.\n *\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n * expect(['x', 'y']).to.have.all.keys(0, 1);\n *\n * expect({a: 1, b: 2}).to.have.all.keys(['a', 'b']);\n * expect(['x', 'y']).to.have.all.keys([0, 1]);\n *\n * expect({a: 1, b: 2}).to.have.all.keys({a: 4, b: 5}); // ignore 4 and 5\n * expect(['x', 'y']).to.have.all.keys({0: 4, 1: 5}); // ignore 4 and 5\n *\n * When the target is a map or set, each key must be provided as a separate\n * argument.\n *\n * expect(new Map([['a', 1], ['b', 2]])).to.have.all.keys('a', 'b');\n * expect(new Set(['a', 'b'])).to.have.all.keys('a', 'b');\n *\n * Because `.keys` does different things based on the target's type, it's\n * important to check the target's type before using `.keys`. See the `.a` doc\n * for info on testing a target's type.\n *\n * expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b');\n *\n * By default, strict (`===`) equality is used to compare keys of maps and\n * sets. Add `.deep` earlier in the chain to use deep equality instead. See\n * the `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target set deeply (but not strictly) has key `{a: 1}`\n * expect(new Set([{a: 1}])).to.have.all.deep.keys([{a: 1}]);\n * expect(new Set([{a: 1}])).to.not.have.all.keys([{a: 1}]);\n *\n * By default, the target must have all of the given keys and no more. Add\n * `.any` earlier in the chain to only require that the target have at least\n * one of the given keys. Also, add `.not` earlier in the chain to negate\n * `.keys`. It's often best to add `.any` when negating `.keys`, and to use\n * `.all` when asserting `.keys` without negation.\n *\n * When negating `.keys`, `.any` is preferred because `.not.any.keys` asserts\n * exactly what's expected of the output, whereas `.not.all.keys` creates\n * uncertain expectations.\n *\n * // Recommended; asserts that target doesn't have any of the given keys\n * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');\n *\n * // Not recommended; asserts that target doesn't have all of the given\n * // keys but may or may not have some of them\n * expect({a: 1, b: 2}).to.not.have.all.keys('c', 'd');\n *\n * When asserting `.keys` without negation, `.all` is preferred because\n * `.all.keys` asserts exactly what's expected of the output, whereas\n * `.any.keys` creates uncertain expectations.\n *\n * // Recommended; asserts that target has all the given keys\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n *\n * // Not recommended; asserts that target has at least one of the given\n * // keys but may or may not have more of them\n * expect({a: 1, b: 2}).to.have.any.keys('a', 'b');\n *\n * Note that `.all` is used by default when neither `.all` nor `.any` appear\n * earlier in the chain. However, it's often best to add `.all` anyway because\n * it improves readability.\n *\n * // Both assertions are identical\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); // Recommended\n * expect({a: 1, b: 2}).to.have.keys('a', 'b'); // Not recommended\n *\n * Add `.include` earlier in the chain to require that the target's keys be a\n * superset of the expected keys, rather than identical sets.\n *\n * // Target object's keys are a superset of ['a', 'b'] but not identical\n * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');\n * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');\n *\n * However, if `.any` and `.include` are combined, only the `.any` takes\n * effect. The `.include` is ignored in this case.\n *\n * // Both assertions are identical\n * expect({a: 1}).to.have.any.keys('a', 'b');\n * expect({a: 1}).to.include.any.keys('a', 'b');\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.have.key('b');\n *\n * The alias `.key` can be used interchangeably with `.keys`.\n *\n * @name keys\n * @alias key\n * @param {...String|Array|Object} keys\n * @namespace BDD\n * @api public\n */\n\n function assertKeys (keys) {\n var obj = flag(this, 'object')\n , objType = _.type(obj)\n , keysType = _.type(keys)\n , ssfi = flag(this, 'ssfi')\n , isDeep = flag(this, 'deep')\n , str\n , deepStr = ''\n , actual\n , ok = true\n , flagMsg = flag(this, 'message');\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n var mixedArgsMsg = flagMsg + 'when testing keys against an object or an array you must give a single Array|Object|String argument or multiple String arguments';\n\n if (objType === 'Map' || objType === 'Set') {\n deepStr = isDeep ? 'deeply ' : '';\n actual = [];\n\n // Map and Set '.keys' aren't supported in IE 11. Therefore, use .forEach.\n obj.forEach(function (val, key) { actual.push(key) });\n\n if (keysType !== 'Array') {\n keys = Array.prototype.slice.call(arguments);\n }\n } else {\n actual = _.getOwnEnumerableProperties(obj);\n\n switch (keysType) {\n case 'Array':\n if (arguments.length > 1) {\n throw new AssertionError(mixedArgsMsg, undefined, ssfi);\n }\n break;\n case 'Object':\n if (arguments.length > 1) {\n throw new AssertionError(mixedArgsMsg, undefined, ssfi);\n }\n keys = Object.keys(keys);\n break;\n default:\n keys = Array.prototype.slice.call(arguments);\n }\n\n // Only stringify non-Symbols because Symbols would become \"Symbol()\"\n keys = keys.map(function (val) {\n return typeof val === 'symbol' ? val : String(val);\n });\n }\n\n if (!keys.length) {\n throw new AssertionError(flagMsg + 'keys required', undefined, ssfi);\n }\n\n var len = keys.length\n , any = flag(this, 'any')\n , all = flag(this, 'all')\n , expected = keys;\n\n if (!any && !all) {\n all = true;\n }\n\n // Has any\n if (any) {\n ok = expected.some(function(expectedKey) {\n return actual.some(function(actualKey) {\n if (isDeep) {\n return _.eql(expectedKey, actualKey);\n } else {\n return expectedKey === actualKey;\n }\n });\n });\n }\n\n // Has all\n if (all) {\n ok = expected.every(function(expectedKey) {\n return actual.some(function(actualKey) {\n if (isDeep) {\n return _.eql(expectedKey, actualKey);\n } else {\n return expectedKey === actualKey;\n }\n });\n });\n\n if (!flag(this, 'contains')) {\n ok = ok && keys.length == actual.length;\n }\n }\n\n // Key string\n if (len > 1) {\n keys = keys.map(function(key) {\n return _.inspect(key);\n });\n var last = keys.pop();\n if (all) {\n str = keys.join(', ') + ', and ' + last;\n }\n if (any) {\n str = keys.join(', ') + ', or ' + last;\n }\n } else {\n str = _.inspect(keys[0]);\n }\n\n // Form\n str = (len > 1 ? 'keys ' : 'key ') + str;\n\n // Have / include\n str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n // Assertion\n this.assert(\n ok\n , 'expected #{this} to ' + deepStr + str\n , 'expected #{this} to not ' + deepStr + str\n , expected.slice(0).sort(_.compareByInspect)\n , actual.sort(_.compareByInspect)\n , true\n );\n }\n\n Assertion.addMethod('keys', assertKeys);\n Assertion.addMethod('key', assertKeys);\n\n /**\n * ### .throw([errorLike], [errMsgMatcher], [msg])\n *\n * When no arguments are provided, `.throw` invokes the target function and\n * asserts that an error is thrown.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw();\n *\n * When one argument is provided, and it's an error constructor, `.throw`\n * invokes the target function and asserts that an error is thrown that's an\n * instance of that error constructor.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(TypeError);\n *\n * When one argument is provided, and it's an error instance, `.throw` invokes\n * the target function and asserts that an error is thrown that's strictly\n * (`===`) equal to that error instance.\n *\n * var err = new TypeError('Illegal salmon!');\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(err);\n *\n * When one argument is provided, and it's a string, `.throw` invokes the\n * target function and asserts that an error is thrown with a message that\n * contains that string.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw('salmon');\n *\n * When one argument is provided, and it's a regular expression, `.throw`\n * invokes the target function and asserts that an error is thrown with a\n * message that matches that regular expression.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(/salmon/);\n *\n * When two arguments are provided, and the first is an error instance or\n * constructor, and the second is a string or regular expression, `.throw`\n * invokes the function and asserts that an error is thrown that fulfills both\n * conditions as described above.\n *\n * var err = new TypeError('Illegal salmon!');\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(TypeError, 'salmon');\n * expect(badFn).to.throw(TypeError, /salmon/);\n * expect(badFn).to.throw(err, 'salmon');\n * expect(badFn).to.throw(err, /salmon/);\n *\n * Add `.not` earlier in the chain to negate `.throw`.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.not.throw();\n *\n * However, it's dangerous to negate `.throw` when providing any arguments.\n * The problem is that it creates uncertain expectations by asserting that the\n * target either doesn't throw an error, or that it throws an error but of a\n * different type than the given type, or that it throws an error of the given\n * type but with a message that doesn't include the given string. It's often\n * best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to throw an error, it's often best to assert\n * exactly that.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.not.throw(); // Recommended\n * expect(goodFn).to.not.throw(ReferenceError, 'x'); // Not recommended\n *\n * When the target is expected to throw an error, it's often best to assert\n * that the error is of its expected type, and has a message that includes an\n * expected string, rather than asserting that it doesn't have one of many\n * unexpected types, and doesn't have a message that includes some string.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(TypeError, 'salmon'); // Recommended\n * expect(badFn).to.not.throw(ReferenceError, 'x'); // Not recommended\n *\n * `.throw` changes the target of any assertions that follow in the chain to\n * be the error object that's thrown.\n *\n * var err = new TypeError('Illegal salmon!');\n * err.code = 42;\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(TypeError).with.property('code', 42);\n *\n * `.throw` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`. When not providing two arguments, always use\n * the second form.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.throw(TypeError, 'x', 'nooo why fail??');\n * expect(goodFn, 'nooo why fail??').to.throw();\n *\n * Due to limitations in ES5, `.throw` may not always work as expected when\n * using a transpiler such as Babel or TypeScript. In particular, it may\n * produce unexpected results when subclassing the built-in `Error` object and\n * then passing the subclassed constructor to `.throw`. See your transpiler's\n * docs for details:\n *\n * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))\n * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))\n *\n * Beware of some common mistakes when using the `throw` assertion. One common\n * mistake is to accidentally invoke the function yourself instead of letting\n * the `throw` assertion invoke the function for you. For example, when\n * testing if a function named `fn` throws, provide `fn` instead of `fn()` as\n * the target for the assertion.\n *\n * expect(fn).to.throw(); // Good! Tests `fn` as desired\n * expect(fn()).to.throw(); // Bad! Tests result of `fn()`, not `fn`\n *\n * If you need to assert that your function `fn` throws when passed certain\n * arguments, then wrap a call to `fn` inside of another function.\n *\n * expect(function () { fn(42); }).to.throw(); // Function expression\n * expect(() => fn(42)).to.throw(); // ES6 arrow function\n *\n * Another common mistake is to provide an object method (or any stand-alone\n * function that relies on `this`) as the target of the assertion. Doing so is\n * problematic because the `this` context will be lost when the function is\n * invoked by `.throw`; there's no way for it to know what `this` is supposed\n * to be. There are two ways around this problem. One solution is to wrap the\n * method or function call inside of another function. Another solution is to\n * use `bind`.\n *\n * expect(function () { cat.meow(); }).to.throw(); // Function expression\n * expect(() => cat.meow()).to.throw(); // ES6 arrow function\n * expect(cat.meow.bind(cat)).to.throw(); // Bind\n *\n * Finally, it's worth mentioning that it's a best practice in JavaScript to\n * only throw `Error` and derivatives of `Error` such as `ReferenceError`,\n * `TypeError`, and user-defined objects that extend `Error`. No other type of\n * value will generate a stack trace when initialized. With that said, the\n * `throw` assertion does technically support any type of value being thrown,\n * not just `Error` and its derivatives.\n *\n * The aliases `.throws` and `.Throw` can be used interchangeably with\n * `.throw`.\n *\n * @name throw\n * @alias throws\n * @alias Throw\n * @param {Error|ErrorConstructor} errorLike\n * @param {String|RegExp} errMsgMatcher error message\n * @param {String} msg _optional_\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @returns error for chaining (null if no error)\n * @namespace BDD\n * @api public\n */\n\n function assertThrows (errorLike, errMsgMatcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , flagMsg = flag(this, 'message')\n , negate = flag(this, 'negate') || false;\n new Assertion(obj, flagMsg, ssfi, true).is.a('function');\n\n if (errorLike instanceof RegExp || typeof errorLike === 'string') {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n var caughtErr;\n try {\n obj();\n } catch (err) {\n caughtErr = err;\n }\n\n // If we have the negate flag enabled and at least one valid argument it means we do expect an error\n // but we want it to match a given set of criteria\n var everyArgIsUndefined = errorLike === undefined && errMsgMatcher === undefined;\n\n // If we've got the negate flag enabled and both args, we should only fail if both aren't compatible\n // See Issue #551 and PR #683@GitHub\n var everyArgIsDefined = Boolean(errorLike && errMsgMatcher);\n var errorLikeFail = false;\n var errMsgMatcherFail = false;\n\n // Checking if error was thrown\n if (everyArgIsUndefined || !everyArgIsUndefined && !negate) {\n // We need this to display results correctly according to their types\n var errorLikeString = 'an error';\n if (errorLike instanceof Error) {\n errorLikeString = '#{exp}';\n } else if (errorLike) {\n errorLikeString = _.checkError.getConstructorName(errorLike);\n }\n\n this.assert(\n caughtErr\n , 'expected #{this} to throw ' + errorLikeString\n , 'expected #{this} to not throw an error but #{act} was thrown'\n , errorLike && errorLike.toString()\n , (caughtErr instanceof Error ?\n caughtErr.toString() : (typeof caughtErr === 'string' ? caughtErr : caughtErr &&\n _.checkError.getConstructorName(caughtErr)))\n );\n }\n\n if (errorLike && caughtErr) {\n // We should compare instances only if `errorLike` is an instance of `Error`\n if (errorLike instanceof Error) {\n var isCompatibleInstance = _.checkError.compatibleInstance(caughtErr, errorLike);\n\n if (isCompatibleInstance === negate) {\n // These checks were created to ensure we won't fail too soon when we've got both args and a negate\n // See Issue #551 and PR #683@GitHub\n if (everyArgIsDefined && negate) {\n errorLikeFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr && !negate ? ' but #{act} was thrown' : '')\n , errorLike.toString()\n , caughtErr.toString()\n );\n }\n }\n }\n\n var isCompatibleConstructor = _.checkError.compatibleConstructor(caughtErr, errorLike);\n if (isCompatibleConstructor === negate) {\n if (everyArgIsDefined && negate) {\n errorLikeFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')\n , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))\n , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))\n );\n }\n }\n }\n\n if (caughtErr && errMsgMatcher !== undefined && errMsgMatcher !== null) {\n // Here we check compatible messages\n var placeholder = 'including';\n if (errMsgMatcher instanceof RegExp) {\n placeholder = 'matching'\n }\n\n var isCompatibleMessage = _.checkError.compatibleMessage(caughtErr, errMsgMatcher);\n if (isCompatibleMessage === negate) {\n if (everyArgIsDefined && negate) {\n errMsgMatcherFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw error ' + placeholder + ' #{exp} but got #{act}'\n , 'expected #{this} to throw error not ' + placeholder + ' #{exp}'\n , errMsgMatcher\n , _.checkError.getMessage(caughtErr)\n );\n }\n }\n }\n\n // If both assertions failed and both should've matched we throw an error\n if (errorLikeFail && errMsgMatcherFail) {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')\n , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))\n , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))\n );\n }\n\n flag(this, 'object', caughtErr);\n };\n\n Assertion.addMethod('throw', assertThrows);\n Assertion.addMethod('throws', assertThrows);\n Assertion.addMethod('Throw', assertThrows);\n\n /**\n * ### .respondTo(method[, msg])\n *\n * When the target is a non-function object, `.respondTo` asserts that the\n * target has a method with the given name `method`. The method can be own or\n * inherited, and it can be enumerable or non-enumerable.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(new Cat()).to.respondTo('meow');\n *\n * When the target is a function, `.respondTo` asserts that the target's\n * `prototype` property has a method with the given name `method`. Again, the\n * method can be own or inherited, and it can be enumerable or non-enumerable.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(Cat).to.respondTo('meow');\n *\n * Add `.itself` earlier in the chain to force `.respondTo` to treat the\n * target as a non-function object, even if it's a function. Thus, it asserts\n * that the target has a method with the given name `method`, rather than\n * asserting that the target's `prototype` property has a method with the\n * given name `method`.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n * Cat.hiss = function () {};\n *\n * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');\n *\n * When not adding `.itself`, it's important to check the target's type before\n * using `.respondTo`. See the `.a` doc for info on checking a target's type.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(new Cat()).to.be.an('object').that.respondsTo('meow');\n *\n * Add `.not` earlier in the chain to negate `.respondTo`.\n *\n * function Dog () {}\n * Dog.prototype.bark = function () {};\n *\n * expect(new Dog()).to.not.respondTo('meow');\n *\n * `.respondTo` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect({}).to.respondTo('meow', 'nooo why fail??');\n * expect({}, 'nooo why fail??').to.respondTo('meow');\n *\n * The alias `.respondsTo` can be used interchangeably with `.respondTo`.\n *\n * @name respondTo\n * @alias respondsTo\n * @param {String} method\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function respondTo (method, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , itself = flag(this, 'itself')\n , context = ('function' === typeof obj && !itself)\n ? obj.prototype[method]\n : obj[method];\n\n this.assert(\n 'function' === typeof context\n , 'expected #{this} to respond to ' + _.inspect(method)\n , 'expected #{this} to not respond to ' + _.inspect(method)\n );\n }\n\n Assertion.addMethod('respondTo', respondTo);\n Assertion.addMethod('respondsTo', respondTo);\n\n /**\n * ### .itself\n *\n * Forces all `.respondTo` assertions that follow in the chain to behave as if\n * the target is a non-function object, even if it's a function. Thus, it\n * causes `.respondTo` to assert that the target has a method with the given\n * name, rather than asserting that the target's `prototype` property has a\n * method with the given name.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n * Cat.hiss = function () {};\n *\n * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');\n *\n * @name itself\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('itself', function () {\n flag(this, 'itself', true);\n });\n\n /**\n * ### .satisfy(matcher[, msg])\n *\n * Invokes the given `matcher` function with the target being passed as the\n * first argument, and asserts that the value returned is truthy.\n *\n * expect(1).to.satisfy(function(num) {\n * return num > 0;\n * });\n *\n * Add `.not` earlier in the chain to negate `.satisfy`.\n *\n * expect(1).to.not.satisfy(function(num) {\n * return num > 2;\n * });\n *\n * `.satisfy` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1).to.satisfy(function(num) {\n * return num > 2;\n * }, 'nooo why fail??');\n *\n * expect(1, 'nooo why fail??').to.satisfy(function(num) {\n * return num > 2;\n * });\n *\n * The alias `.satisfies` can be used interchangeably with `.satisfy`.\n *\n * @name satisfy\n * @alias satisfies\n * @param {Function} matcher\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function satisfy (matcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var result = matcher(obj);\n this.assert(\n result\n , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n , flag(this, 'negate') ? false : true\n , result\n );\n }\n\n Assertion.addMethod('satisfy', satisfy);\n Assertion.addMethod('satisfies', satisfy);\n\n /**\n * ### .closeTo(expected, delta[, msg])\n *\n * Asserts that the target is a number that's within a given +/- `delta` range\n * of the given number `expected`. However, it's often best to assert that the\n * target is equal to its expected value.\n *\n * // Recommended\n * expect(1.5).to.equal(1.5);\n *\n * // Not recommended\n * expect(1.5).to.be.closeTo(1, 0.5);\n * expect(1.5).to.be.closeTo(2, 0.5);\n * expect(1.5).to.be.closeTo(1, 1);\n *\n * Add `.not` earlier in the chain to negate `.closeTo`.\n *\n * expect(1.5).to.equal(1.5); // Recommended\n * expect(1.5).to.not.be.closeTo(3, 1); // Not recommended\n *\n * `.closeTo` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1.5).to.be.closeTo(3, 1, 'nooo why fail??');\n * expect(1.5, 'nooo why fail??').to.be.closeTo(3, 1);\n *\n * The alias `.approximately` can be used interchangeably with `.closeTo`.\n *\n * @name closeTo\n * @alias approximately\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function closeTo(expected, delta, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n\n new Assertion(obj, flagMsg, ssfi, true).is.a('number');\n if (typeof expected !== 'number' || typeof delta !== 'number') {\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n var deltaMessage = delta === undefined ? \", and a delta is required\" : \"\";\n throw new AssertionError(\n flagMsg + 'the arguments to closeTo or approximately must be numbers' + deltaMessage,\n undefined,\n ssfi\n );\n }\n\n this.assert(\n Math.abs(obj - expected) <= delta\n , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n );\n }\n\n Assertion.addMethod('closeTo', closeTo);\n Assertion.addMethod('approximately', closeTo);\n\n // Note: Duplicates are ignored if testing for inclusion instead of sameness.\n function isSubsetOf(subset, superset, cmp, contains, ordered) {\n if (!contains) {\n if (subset.length !== superset.length) return false;\n superset = superset.slice();\n }\n\n return subset.every(function(elem, idx) {\n if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx];\n\n if (!cmp) {\n var matchIdx = superset.indexOf(elem);\n if (matchIdx === -1) return false;\n\n // Remove match from superset so not counted twice if duplicate in subset.\n if (!contains) superset.splice(matchIdx, 1);\n return true;\n }\n\n return superset.some(function(elem2, matchIdx) {\n if (!cmp(elem, elem2)) return false;\n\n // Remove match from superset so not counted twice if duplicate in subset.\n if (!contains) superset.splice(matchIdx, 1);\n return true;\n });\n });\n }\n\n /**\n * ### .members(set[, msg])\n *\n * Asserts that the target array has the same members as the given array\n * `set`.\n *\n * expect([1, 2, 3]).to.have.members([2, 1, 3]);\n * expect([1, 2, 2]).to.have.members([2, 1, 2]);\n *\n * By default, members are compared using strict (`===`) equality. Add `.deep`\n * earlier in the chain to use deep equality instead. See the `deep-eql`\n * project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target array deeply (but not strictly) has member `{a: 1}`\n * expect([{a: 1}]).to.have.deep.members([{a: 1}]);\n * expect([{a: 1}]).to.not.have.members([{a: 1}]);\n *\n * By default, order doesn't matter. Add `.ordered` earlier in the chain to\n * require that members appear in the same order.\n *\n * expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]);\n * expect([1, 2, 3]).to.have.members([2, 1, 3])\n * .but.not.ordered.members([2, 1, 3]);\n *\n * By default, both arrays must be the same size. Add `.include` earlier in\n * the chain to require that the target's members be a superset of the\n * expected members. Note that duplicates are ignored in the subset when\n * `.include` is added.\n *\n * // Target array is a superset of [1, 2] but not identical\n * expect([1, 2, 3]).to.include.members([1, 2]);\n * expect([1, 2, 3]).to.not.have.members([1, 2]);\n *\n * // Duplicates in the subset are ignored\n * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);\n *\n * `.deep`, `.ordered`, and `.include` can all be combined. However, if\n * `.include` and `.ordered` are combined, the ordering begins at the start of\n * both arrays.\n *\n * expect([{a: 1}, {b: 2}, {c: 3}])\n * .to.include.deep.ordered.members([{a: 1}, {b: 2}])\n * .but.not.include.deep.ordered.members([{b: 2}, {c: 3}]);\n *\n * Add `.not` earlier in the chain to negate `.members`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the target array doesn't have all of the same members as\n * the given array `set` but may or may not have some of them. It's often best\n * to identify the exact output that's expected, and then write an assertion\n * that only accepts that exact output.\n *\n * expect([1, 2]).to.not.include(3).and.not.include(4); // Recommended\n * expect([1, 2]).to.not.have.members([3, 4]); // Not recommended\n *\n * `.members` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2]).to.have.members([1, 2, 3], 'nooo why fail??');\n * expect([1, 2], 'nooo why fail??').to.have.members([1, 2, 3]);\n *\n * @name members\n * @param {Array} set\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('members', function (subset, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n\n new Assertion(obj, flagMsg, ssfi, true).to.be.an('array');\n new Assertion(subset, flagMsg, ssfi, true).to.be.an('array');\n\n var contains = flag(this, 'contains');\n var ordered = flag(this, 'ordered');\n\n var subject, failMsg, failNegateMsg;\n\n if (contains) {\n subject = ordered ? 'an ordered superset' : 'a superset';\n failMsg = 'expected #{this} to be ' + subject + ' of #{exp}';\n failNegateMsg = 'expected #{this} to not be ' + subject + ' of #{exp}';\n } else {\n subject = ordered ? 'ordered members' : 'members';\n failMsg = 'expected #{this} to have the same ' + subject + ' as #{exp}';\n failNegateMsg = 'expected #{this} to not have the same ' + subject + ' as #{exp}';\n }\n\n var cmp = flag(this, 'deep') ? _.eql : undefined;\n\n this.assert(\n isSubsetOf(subset, obj, cmp, contains, ordered)\n , failMsg\n , failNegateMsg\n , subset\n , obj\n , true\n );\n });\n\n /**\n * ### .oneOf(list[, msg])\n *\n * Asserts that the target is a member of the given array `list`. However,\n * it's often best to assert that the target is equal to its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.oneOf([1, 2, 3]); // Not recommended\n *\n * Comparisons are performed using strict (`===`) equality.\n *\n * Add `.not` earlier in the chain to negate `.oneOf`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.oneOf([2, 3, 4]); // Not recommended\n *\n * It can also be chained with `.contain` or `.include`, which will work with\n * both arrays and strings:\n *\n * expect('Today is sunny').to.contain.oneOf(['sunny', 'cloudy'])\n * expect('Today is rainy').to.not.contain.oneOf(['sunny', 'cloudy'])\n * expect([1,2,3]).to.contain.oneOf([3,4,5])\n * expect([1,2,3]).to.not.contain.oneOf([4,5,6])\n *\n * `.oneOf` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.oneOf([2, 3, 4], 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.oneOf([2, 3, 4]);\n *\n * @name oneOf\n * @param {Array<*>} list\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function oneOf (list, msg) {\n if (msg) flag(this, 'message', msg);\n var expected = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi')\n , contains = flag(this, 'contains')\n , isDeep = flag(this, 'deep');\n new Assertion(list, flagMsg, ssfi, true).to.be.an('array');\n\n if (contains) {\n this.assert(\n list.some(function(possibility) { return expected.indexOf(possibility) > -1 })\n , 'expected #{this} to contain one of #{exp}'\n , 'expected #{this} to not contain one of #{exp}'\n , list\n , expected\n );\n } else {\n if (isDeep) {\n this.assert(\n list.some(function(possibility) { return _.eql(expected, possibility) })\n , 'expected #{this} to deeply equal one of #{exp}'\n , 'expected #{this} to deeply equal one of #{exp}'\n , list\n , expected\n );\n } else {\n this.assert(\n list.indexOf(expected) > -1\n , 'expected #{this} to be one of #{exp}'\n , 'expected #{this} to not be one of #{exp}'\n , list\n , expected\n );\n }\n }\n }\n\n Assertion.addMethod('oneOf', oneOf);\n\n /**\n * ### .change(subject[, prop[, msg]])\n *\n * When one argument is provided, `.change` asserts that the given function\n * `subject` returns a different value when it's invoked before the target\n * function compared to when it's invoked afterward. However, it's often best\n * to assert that `subject` is equal to its expected value.\n *\n * var dots = ''\n * , addDot = function () { dots += '.'; }\n * , getDots = function () { return dots; };\n *\n * // Recommended\n * expect(getDots()).to.equal('');\n * addDot();\n * expect(getDots()).to.equal('.');\n *\n * // Not recommended\n * expect(addDot).to.change(getDots);\n *\n * When two arguments are provided, `.change` asserts that the value of the\n * given object `subject`'s `prop` property is different before invoking the\n * target function compared to afterward.\n *\n * var myObj = {dots: ''}\n * , addDot = function () { myObj.dots += '.'; };\n *\n * // Recommended\n * expect(myObj).to.have.property('dots', '');\n * addDot();\n * expect(myObj).to.have.property('dots', '.');\n *\n * // Not recommended\n * expect(addDot).to.change(myObj, 'dots');\n *\n * Strict (`===`) equality is used to compare before and after values.\n *\n * Add `.not` earlier in the chain to negate `.change`.\n *\n * var dots = ''\n * , noop = function () {}\n * , getDots = function () { return dots; };\n *\n * expect(noop).to.not.change(getDots);\n *\n * var myObj = {dots: ''}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'dots');\n *\n * `.change` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {dots: ''}\n * , addDot = function () { myObj.dots += '.'; };\n *\n * expect(addDot).to.not.change(myObj, 'dots', 'nooo why fail??');\n *\n * var dots = ''\n * , addDot = function () { dots += '.'; }\n * , getDots = function () { return dots; };\n *\n * expect(addDot, 'nooo why fail??').to.not.change(getDots);\n *\n * `.change` also causes all `.by` assertions that follow in the chain to\n * assert how much a numeric subject was increased or decreased by. However,\n * it's dangerous to use `.change.by`. The problem is that it creates\n * uncertain expectations by asserting that the subject either increases by\n * the given delta, or that it decreases by the given delta. It's often best\n * to identify the exact output that's expected, and then write an assertion\n * that only accepts that exact output.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; }\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * The alias `.changes` can be used interchangeably with `.change`.\n *\n * @name change\n * @alias changes\n * @param {String} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertChanges (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n // This gets flagged because of the .by(delta) assertion\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'change');\n flag(this, 'realDelta', final !== initial);\n\n this.assert(\n initial !== final\n , 'expected ' + msgObj + ' to change'\n , 'expected ' + msgObj + ' to not change'\n );\n }\n\n Assertion.addMethod('change', assertChanges);\n Assertion.addMethod('changes', assertChanges);\n\n /**\n * ### .increase(subject[, prop[, msg]])\n *\n * When one argument is provided, `.increase` asserts that the given function\n * `subject` returns a greater number when it's invoked after invoking the\n * target function compared to when it's invoked beforehand. `.increase` also\n * causes all `.by` assertions that follow in the chain to assert how much\n * greater of a number is returned. It's often best to assert that the return\n * value increased by the expected amount, rather than asserting it increased\n * by any amount.\n *\n * var val = 1\n * , addTwo = function () { val += 2; }\n * , getVal = function () { return val; };\n *\n * expect(addTwo).to.increase(getVal).by(2); // Recommended\n * expect(addTwo).to.increase(getVal); // Not recommended\n *\n * When two arguments are provided, `.increase` asserts that the value of the\n * given object `subject`'s `prop` property is greater after invoking the\n * target function compared to beforehand.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.increase(myObj, 'val'); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.increase`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either decreases, or that it stays the same.\n * It's often best to identify the exact output that's expected, and then\n * write an assertion that only accepts that exact output.\n *\n * When the subject is expected to decrease, it's often best to assert that it\n * decreased by the expected amount.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.not.increase(myObj, 'val'); // Not recommended\n *\n * When the subject is expected to stay the same, it's often best to assert\n * exactly that.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'val'); // Recommended\n * expect(noop).to.not.increase(myObj, 'val'); // Not recommended\n *\n * `.increase` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.increase(myObj, 'val', 'nooo why fail??');\n *\n * var val = 1\n * , noop = function () {}\n * , getVal = function () { return val; };\n *\n * expect(noop, 'nooo why fail??').to.increase(getVal);\n *\n * The alias `.increases` can be used interchangeably with `.increase`.\n *\n * @name increase\n * @alias increases\n * @param {String|Function} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertIncreases (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n // Make sure that the target is a number\n new Assertion(initial, flagMsg, ssfi, true).is.a('number');\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'increase');\n flag(this, 'realDelta', final - initial);\n\n this.assert(\n final - initial > 0\n , 'expected ' + msgObj + ' to increase'\n , 'expected ' + msgObj + ' to not increase'\n );\n }\n\n Assertion.addMethod('increase', assertIncreases);\n Assertion.addMethod('increases', assertIncreases);\n\n /**\n * ### .decrease(subject[, prop[, msg]])\n *\n * When one argument is provided, `.decrease` asserts that the given function\n * `subject` returns a lesser number when it's invoked after invoking the\n * target function compared to when it's invoked beforehand. `.decrease` also\n * causes all `.by` assertions that follow in the chain to assert how much\n * lesser of a number is returned. It's often best to assert that the return\n * value decreased by the expected amount, rather than asserting it decreased\n * by any amount.\n *\n * var val = 1\n * , subtractTwo = function () { val -= 2; }\n * , getVal = function () { return val; };\n *\n * expect(subtractTwo).to.decrease(getVal).by(2); // Recommended\n * expect(subtractTwo).to.decrease(getVal); // Not recommended\n *\n * When two arguments are provided, `.decrease` asserts that the value of the\n * given object `subject`'s `prop` property is lesser after invoking the\n * target function compared to beforehand.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.decrease(myObj, 'val'); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.decrease`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either increases, or that it stays the same.\n * It's often best to identify the exact output that's expected, and then\n * write an assertion that only accepts that exact output.\n *\n * When the subject is expected to increase, it's often best to assert that it\n * increased by the expected amount.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.not.decrease(myObj, 'val'); // Not recommended\n *\n * When the subject is expected to stay the same, it's often best to assert\n * exactly that.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'val'); // Recommended\n * expect(noop).to.not.decrease(myObj, 'val'); // Not recommended\n *\n * `.decrease` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.decrease(myObj, 'val', 'nooo why fail??');\n *\n * var val = 1\n * , noop = function () {}\n * , getVal = function () { return val; };\n *\n * expect(noop, 'nooo why fail??').to.decrease(getVal);\n *\n * The alias `.decreases` can be used interchangeably with `.decrease`.\n *\n * @name decrease\n * @alias decreases\n * @param {String|Function} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDecreases (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n // Make sure that the target is a number\n new Assertion(initial, flagMsg, ssfi, true).is.a('number');\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'decrease');\n flag(this, 'realDelta', initial - final);\n\n this.assert(\n final - initial < 0\n , 'expected ' + msgObj + ' to decrease'\n , 'expected ' + msgObj + ' to not decrease'\n );\n }\n\n Assertion.addMethod('decrease', assertDecreases);\n Assertion.addMethod('decreases', assertDecreases);\n\n /**\n * ### .by(delta[, msg])\n *\n * When following an `.increase` assertion in the chain, `.by` asserts that\n * the subject of the `.increase` assertion increased by the given `delta`.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2);\n *\n * When following a `.decrease` assertion in the chain, `.by` asserts that the\n * subject of the `.decrease` assertion decreased by the given `delta`.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2);\n *\n * When following a `.change` assertion in the chain, `.by` asserts that the\n * subject of the `.change` assertion either increased or decreased by the\n * given `delta`. However, it's dangerous to use `.change.by`. The problem is\n * that it creates uncertain expectations. It's often best to identify the\n * exact output that's expected, and then write an assertion that only accepts\n * that exact output.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; }\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.by`. However, it's often best\n * to assert that the subject changed by its expected delta, rather than\n * asserting that it didn't change by one of countless unexpected deltas.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * // Recommended\n * expect(addTwo).to.increase(myObj, 'val').by(2);\n *\n * // Not recommended\n * expect(addTwo).to.increase(myObj, 'val').but.not.by(3);\n *\n * `.by` accepts an optional `msg` argument which is a custom error message to\n * show when the assertion fails. The message can also be given as the second\n * argument to `expect`.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(3, 'nooo why fail??');\n * expect(addTwo, 'nooo why fail??').to.increase(myObj, 'val').by(3);\n *\n * @name by\n * @param {Number} delta\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDelta(delta, msg) {\n if (msg) flag(this, 'message', msg);\n\n var msgObj = flag(this, 'deltaMsgObj');\n var initial = flag(this, 'initialDeltaValue');\n var final = flag(this, 'finalDeltaValue');\n var behavior = flag(this, 'deltaBehavior');\n var realDelta = flag(this, 'realDelta');\n\n var expression;\n if (behavior === 'change') {\n expression = Math.abs(final - initial) === Math.abs(delta);\n } else {\n expression = realDelta === Math.abs(delta);\n }\n\n this.assert(\n expression\n , 'expected ' + msgObj + ' to ' + behavior + ' by ' + delta\n , 'expected ' + msgObj + ' to not ' + behavior + ' by ' + delta\n );\n }\n\n Assertion.addMethod('by', assertDelta);\n\n /**\n * ### .extensible\n *\n * Asserts that the target is extensible, which means that new properties can\n * be added to it. Primitives are never extensible.\n *\n * expect({a: 1}).to.be.extensible;\n *\n * Add `.not` earlier in the chain to negate `.extensible`.\n *\n * var nonExtensibleObject = Object.preventExtensions({})\n * , sealedObject = Object.seal({})\n * , frozenObject = Object.freeze({});\n *\n * expect(nonExtensibleObject).to.not.be.extensible;\n * expect(sealedObject).to.not.be.extensible;\n * expect(frozenObject).to.not.be.extensible;\n * expect(1).to.not.be.extensible;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(1, 'nooo why fail??').to.be.extensible;\n *\n * @name extensible\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('extensible', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n // The following provides ES6 behavior for ES5 environments.\n\n var isExtensible = obj === Object(obj) && Object.isExtensible(obj);\n\n this.assert(\n isExtensible\n , 'expected #{this} to be extensible'\n , 'expected #{this} to not be extensible'\n );\n });\n\n /**\n * ### .sealed\n *\n * Asserts that the target is sealed, which means that new properties can't be\n * added to it, and its existing properties can't be reconfigured or deleted.\n * However, it's possible that its existing properties can still be reassigned\n * to different values. Primitives are always sealed.\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect(sealedObject).to.be.sealed;\n * expect(frozenObject).to.be.sealed;\n * expect(1).to.be.sealed;\n *\n * Add `.not` earlier in the chain to negate `.sealed`.\n *\n * expect({a: 1}).to.not.be.sealed;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.be.sealed;\n *\n * @name sealed\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('sealed', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n // The following provides ES6 behavior for ES5 environments.\n\n var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true;\n\n this.assert(\n isSealed\n , 'expected #{this} to be sealed'\n , 'expected #{this} to not be sealed'\n );\n });\n\n /**\n * ### .frozen\n *\n * Asserts that the target is frozen, which means that new properties can't be\n * added to it, and its existing properties can't be reassigned to different\n * values, reconfigured, or deleted. Primitives are always frozen.\n *\n * var frozenObject = Object.freeze({});\n *\n * expect(frozenObject).to.be.frozen;\n * expect(1).to.be.frozen;\n *\n * Add `.not` earlier in the chain to negate `.frozen`.\n *\n * expect({a: 1}).to.not.be.frozen;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.be.frozen;\n *\n * @name frozen\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('frozen', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n // The following provides ES6 behavior for ES5 environments.\n\n var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true;\n\n this.assert(\n isFrozen\n , 'expected #{this} to be frozen'\n , 'expected #{this} to not be frozen'\n );\n });\n\n /**\n * ### .finite\n *\n * Asserts that the target is a number, and isn't `NaN` or positive/negative\n * `Infinity`.\n *\n * expect(1).to.be.finite;\n *\n * Add `.not` earlier in the chain to negate `.finite`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either isn't a number, or that it's `NaN`, or\n * that it's positive `Infinity`, or that it's negative `Infinity`. It's often\n * best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to be a number, it's often best to assert\n * that it's the expected type, rather than asserting that it isn't one of\n * many unexpected types.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.finite; // Not recommended\n *\n * When the target is expected to be `NaN`, it's often best to assert exactly\n * that.\n *\n * expect(NaN).to.be.NaN; // Recommended\n * expect(NaN).to.not.be.finite; // Not recommended\n *\n * When the target is expected to be positive infinity, it's often best to\n * assert exactly that.\n *\n * expect(Infinity).to.equal(Infinity); // Recommended\n * expect(Infinity).to.not.be.finite; // Not recommended\n *\n * When the target is expected to be negative infinity, it's often best to\n * assert exactly that.\n *\n * expect(-Infinity).to.equal(-Infinity); // Recommended\n * expect(-Infinity).to.not.be.finite; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect('foo', 'nooo why fail??').to.be.finite;\n *\n * @name finite\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('finite', function(msg) {\n var obj = flag(this, 'object');\n\n this.assert(\n typeof obj === 'number' && isFinite(obj)\n , 'expected #{this} to be a finite number'\n , 'expected #{this} to not be a finite number'\n );\n });\n};\n\n},{}],6:[function(require,module,exports){\n/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n /*!\n * Chai dependencies.\n */\n\n var Assertion = chai.Assertion\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n /**\n * ### assert(expression, message)\n *\n * Write your own test expressions.\n *\n * assert('foo' !== 'bar', 'foo is not bar');\n * assert(Array.isArray([]), 'empty arrays are arrays');\n *\n * @param {Mixed} expression to test for truthiness\n * @param {String} message to display on error\n * @name assert\n * @namespace Assert\n * @api public\n */\n\n var assert = chai.assert = function (express, errmsg) {\n var test = new Assertion(null, null, chai.assert, true);\n test.assert(\n express\n , errmsg\n , '[ negation message unavailable ]'\n );\n };\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure. Node.js `assert` module-compatible.\n *\n * assert.fail();\n * assert.fail(\"custom error message\");\n * assert.fail(1, 2);\n * assert.fail(1, 2, \"custom error message\");\n * assert.fail(1, 2, \"custom error message\", \">\");\n * assert.fail(1, 2, undefined, \">\");\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Assert\n * @api public\n */\n\n assert.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n // Comply with Node's fail([message]) interface\n\n message = actual;\n actual = undefined;\n }\n\n message = message || 'assert.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, assert.fail);\n };\n\n /**\n * ### .isOk(object, [message])\n *\n * Asserts that `object` is truthy.\n *\n * assert.isOk('everything', 'everything is ok');\n * assert.isOk(false, 'this will fail');\n *\n * @name isOk\n * @alias ok\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isOk = function (val, msg) {\n new Assertion(val, msg, assert.isOk, true).is.ok;\n };\n\n /**\n * ### .isNotOk(object, [message])\n *\n * Asserts that `object` is falsy.\n *\n * assert.isNotOk('everything', 'this will fail');\n * assert.isNotOk(false, 'this will pass');\n *\n * @name isNotOk\n * @alias notOk\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotOk = function (val, msg) {\n new Assertion(val, msg, assert.isNotOk, true).is.not.ok;\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * assert.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.equal = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.equal, true);\n\n test.assert(\n exp == flag(test, 'object')\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{act}'\n , exp\n , act\n , true\n );\n };\n\n /**\n * ### .notEqual(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * assert.notEqual(3, 4, 'these numbers are not equal');\n *\n * @name notEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notEqual = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.notEqual, true);\n\n test.assert(\n exp != flag(test, 'object')\n , 'expected #{this} to not equal #{exp}'\n , 'expected #{this} to equal #{act}'\n , exp\n , act\n , true\n );\n };\n\n /**\n * ### .strictEqual(actual, expected, [message])\n *\n * Asserts strict equality (`===`) of `actual` and `expected`.\n *\n * assert.strictEqual(true, true, 'these booleans are strictly equal');\n *\n * @name strictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.strictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.strictEqual, true).to.equal(exp);\n };\n\n /**\n * ### .notStrictEqual(actual, expected, [message])\n *\n * Asserts strict inequality (`!==`) of `actual` and `expected`.\n *\n * assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n *\n * @name notStrictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.notStrictEqual, true).to.not.equal(exp);\n };\n\n /**\n * ### .deepEqual(actual, expected, [message])\n *\n * Asserts that `actual` is deeply equal to `expected`.\n *\n * assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n *\n * @name deepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @alias deepStrictEqual\n * @namespace Assert\n * @api public\n */\n\n assert.deepEqual = assert.deepStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.deepEqual, true).to.eql(exp);\n };\n\n /**\n * ### .notDeepEqual(actual, expected, [message])\n *\n * Assert that `actual` is not deeply equal to `expected`.\n *\n * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n *\n * @name notDeepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.notDeepEqual, true).to.not.eql(exp);\n };\n\n /**\n * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n *\n * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`.\n *\n * assert.isAbove(5, 2, '5 is strictly greater than 2');\n *\n * @name isAbove\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAbove\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAbove = function (val, abv, msg) {\n new Assertion(val, msg, assert.isAbove, true).to.be.above(abv);\n };\n\n /**\n * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n *\n * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`.\n *\n * assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n * assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n *\n * @name isAtLeast\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtLeast\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtLeast = function (val, atlst, msg) {\n new Assertion(val, msg, assert.isAtLeast, true).to.be.least(atlst);\n };\n\n /**\n * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n *\n * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`.\n *\n * assert.isBelow(3, 6, '3 is strictly less than 6');\n *\n * @name isBelow\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeBelow\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBelow = function (val, blw, msg) {\n new Assertion(val, msg, assert.isBelow, true).to.be.below(blw);\n };\n\n /**\n * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n *\n * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`.\n *\n * assert.isAtMost(3, 6, '3 is less than or equal to 6');\n * assert.isAtMost(4, 4, '4 is less than or equal to 4');\n *\n * @name isAtMost\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtMost\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtMost = function (val, atmst, msg) {\n new Assertion(val, msg, assert.isAtMost, true).to.be.most(atmst);\n };\n\n /**\n * ### .isTrue(value, [message])\n *\n * Asserts that `value` is true.\n *\n * var teaServed = true;\n * assert.isTrue(teaServed, 'the tea has been served');\n *\n * @name isTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isTrue = function (val, msg) {\n new Assertion(val, msg, assert.isTrue, true).is['true'];\n };\n\n /**\n * ### .isNotTrue(value, [message])\n *\n * Asserts that `value` is not true.\n *\n * var tea = 'tasty chai';\n * assert.isNotTrue(tea, 'great, time for tea!');\n *\n * @name isNotTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotTrue = function (val, msg) {\n new Assertion(val, msg, assert.isNotTrue, true).to.not.equal(true);\n };\n\n /**\n * ### .isFalse(value, [message])\n *\n * Asserts that `value` is false.\n *\n * var teaServed = false;\n * assert.isFalse(teaServed, 'no tea yet? hmm...');\n *\n * @name isFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFalse = function (val, msg) {\n new Assertion(val, msg, assert.isFalse, true).is['false'];\n };\n\n /**\n * ### .isNotFalse(value, [message])\n *\n * Asserts that `value` is not false.\n *\n * var tea = 'tasty chai';\n * assert.isNotFalse(tea, 'great, time for tea!');\n *\n * @name isNotFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFalse = function (val, msg) {\n new Assertion(val, msg, assert.isNotFalse, true).to.not.equal(false);\n };\n\n /**\n * ### .isNull(value, [message])\n *\n * Asserts that `value` is null.\n *\n * assert.isNull(err, 'there was no error');\n *\n * @name isNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNull = function (val, msg) {\n new Assertion(val, msg, assert.isNull, true).to.equal(null);\n };\n\n /**\n * ### .isNotNull(value, [message])\n *\n * Asserts that `value` is not null.\n *\n * var tea = 'tasty chai';\n * assert.isNotNull(tea, 'great, time for tea!');\n *\n * @name isNotNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNull = function (val, msg) {\n new Assertion(val, msg, assert.isNotNull, true).to.not.equal(null);\n };\n\n /**\n * ### .isNaN\n *\n * Asserts that value is NaN.\n *\n * assert.isNaN(NaN, 'NaN is NaN');\n *\n * @name isNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNaN = function (val, msg) {\n new Assertion(val, msg, assert.isNaN, true).to.be.NaN;\n };\n\n /**\n * ### .isNotNaN\n *\n * Asserts that value is not NaN.\n *\n * assert.isNotNaN(4, '4 is not NaN');\n *\n * @name isNotNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n assert.isNotNaN = function (val, msg) {\n new Assertion(val, msg, assert.isNotNaN, true).not.to.be.NaN;\n };\n\n /**\n * ### .exists\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * assert.exists(foo, 'foo is neither `null` nor `undefined`');\n *\n * @name exists\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.exists = function (val, msg) {\n new Assertion(val, msg, assert.exists, true).to.exist;\n };\n\n /**\n * ### .notExists\n *\n * Asserts that the target is either `null` or `undefined`.\n *\n * var bar = null\n * , baz;\n *\n * assert.notExists(bar);\n * assert.notExists(baz, 'baz is either null or undefined');\n *\n * @name notExists\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notExists = function (val, msg) {\n new Assertion(val, msg, assert.notExists, true).to.not.exist;\n };\n\n /**\n * ### .isUndefined(value, [message])\n *\n * Asserts that `value` is `undefined`.\n *\n * var tea;\n * assert.isUndefined(tea, 'no tea defined');\n *\n * @name isUndefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isUndefined = function (val, msg) {\n new Assertion(val, msg, assert.isUndefined, true).to.equal(undefined);\n };\n\n /**\n * ### .isDefined(value, [message])\n *\n * Asserts that `value` is not `undefined`.\n *\n * var tea = 'cup of chai';\n * assert.isDefined(tea, 'tea has been defined');\n *\n * @name isDefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isDefined = function (val, msg) {\n new Assertion(val, msg, assert.isDefined, true).to.not.equal(undefined);\n };\n\n /**\n * ### .isFunction(value, [message])\n *\n * Asserts that `value` is a function.\n *\n * function serveTea() { return 'cup of tea'; };\n * assert.isFunction(serveTea, 'great, we can have tea now');\n *\n * @name isFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFunction = function (val, msg) {\n new Assertion(val, msg, assert.isFunction, true).to.be.a('function');\n };\n\n /**\n * ### .isNotFunction(value, [message])\n *\n * Asserts that `value` is _not_ a function.\n *\n * var serveTea = [ 'heat', 'pour', 'sip' ];\n * assert.isNotFunction(serveTea, 'great, we have listed the steps');\n *\n * @name isNotFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFunction = function (val, msg) {\n new Assertion(val, msg, assert.isNotFunction, true).to.not.be.a('function');\n };\n\n /**\n * ### .isObject(value, [message])\n *\n * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n * _The assertion does not match subclassed objects._\n *\n * var selection = { name: 'Chai', serve: 'with spices' };\n * assert.isObject(selection, 'tea selection is an object');\n *\n * @name isObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isObject = function (val, msg) {\n new Assertion(val, msg, assert.isObject, true).to.be.a('object');\n };\n\n /**\n * ### .isNotObject(value, [message])\n *\n * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n *\n * var selection = 'chai'\n * assert.isNotObject(selection, 'tea selection is not an object');\n * assert.isNotObject(null, 'null is not an object');\n *\n * @name isNotObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotObject = function (val, msg) {\n new Assertion(val, msg, assert.isNotObject, true).to.not.be.a('object');\n };\n\n /**\n * ### .isArray(value, [message])\n *\n * Asserts that `value` is an array.\n *\n * var menu = [ 'green', 'chai', 'oolong' ];\n * assert.isArray(menu, 'what kind of tea do we want?');\n *\n * @name isArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isArray = function (val, msg) {\n new Assertion(val, msg, assert.isArray, true).to.be.an('array');\n };\n\n /**\n * ### .isNotArray(value, [message])\n *\n * Asserts that `value` is _not_ an array.\n *\n * var menu = 'green|chai|oolong';\n * assert.isNotArray(menu, 'what kind of tea do we want?');\n *\n * @name isNotArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotArray = function (val, msg) {\n new Assertion(val, msg, assert.isNotArray, true).to.not.be.an('array');\n };\n\n /**\n * ### .isString(value, [message])\n *\n * Asserts that `value` is a string.\n *\n * var teaOrder = 'chai';\n * assert.isString(teaOrder, 'order placed');\n *\n * @name isString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isString = function (val, msg) {\n new Assertion(val, msg, assert.isString, true).to.be.a('string');\n };\n\n /**\n * ### .isNotString(value, [message])\n *\n * Asserts that `value` is _not_ a string.\n *\n * var teaOrder = 4;\n * assert.isNotString(teaOrder, 'order placed');\n *\n * @name isNotString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotString = function (val, msg) {\n new Assertion(val, msg, assert.isNotString, true).to.not.be.a('string');\n };\n\n /**\n * ### .isNumber(value, [message])\n *\n * Asserts that `value` is a number.\n *\n * var cups = 2;\n * assert.isNumber(cups, 'how many cups');\n *\n * @name isNumber\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNumber = function (val, msg) {\n new Assertion(val, msg, assert.isNumber, true).to.be.a('number');\n };\n\n /**\n * ### .isNotNumber(value, [message])\n *\n * Asserts that `value` is _not_ a number.\n *\n * var cups = '2 cups please';\n * assert.isNotNumber(cups, 'how many cups');\n *\n * @name isNotNumber\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNumber = function (val, msg) {\n new Assertion(val, msg, assert.isNotNumber, true).to.not.be.a('number');\n };\n\n /**\n * ### .isFinite(value, [message])\n *\n * Asserts that `value` is a finite number. Unlike `.isNumber`, this will fail for `NaN` and `Infinity`.\n *\n * var cups = 2;\n * assert.isFinite(cups, 'how many cups');\n *\n * assert.isFinite(NaN); // throws\n *\n * @name isFinite\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFinite = function (val, msg) {\n new Assertion(val, msg, assert.isFinite, true).to.be.finite;\n };\n\n /**\n * ### .isBoolean(value, [message])\n *\n * Asserts that `value` is a boolean.\n *\n * var teaReady = true\n * , teaServed = false;\n *\n * assert.isBoolean(teaReady, 'is the tea ready');\n * assert.isBoolean(teaServed, 'has tea been served');\n *\n * @name isBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBoolean = function (val, msg) {\n new Assertion(val, msg, assert.isBoolean, true).to.be.a('boolean');\n };\n\n /**\n * ### .isNotBoolean(value, [message])\n *\n * Asserts that `value` is _not_ a boolean.\n *\n * var teaReady = 'yep'\n * , teaServed = 'nope';\n *\n * assert.isNotBoolean(teaReady, 'is the tea ready');\n * assert.isNotBoolean(teaServed, 'has tea been served');\n *\n * @name isNotBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotBoolean = function (val, msg) {\n new Assertion(val, msg, assert.isNotBoolean, true).to.not.be.a('boolean');\n };\n\n /**\n * ### .typeOf(value, name, [message])\n *\n * Asserts that `value`'s type is `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n * assert.typeOf('tea', 'string', 'we have a string');\n * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n * assert.typeOf(null, 'null', 'we have a null');\n * assert.typeOf(undefined, 'undefined', 'we have an undefined');\n *\n * @name typeOf\n * @param {Mixed} value\n * @param {String} name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.typeOf = function (val, type, msg) {\n new Assertion(val, msg, assert.typeOf, true).to.be.a(type);\n };\n\n /**\n * ### .notTypeOf(value, name, [message])\n *\n * Asserts that `value`'s type is _not_ `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.notTypeOf('tea', 'number', 'strings are not numbers');\n *\n * @name notTypeOf\n * @param {Mixed} value\n * @param {String} typeof name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notTypeOf = function (val, type, msg) {\n new Assertion(val, msg, assert.notTypeOf, true).to.not.be.a(type);\n };\n\n /**\n * ### .instanceOf(object, constructor, [message])\n *\n * Asserts that `value` is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new Tea('chai');\n *\n * assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n *\n * @name instanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.instanceOf = function (val, type, msg) {\n new Assertion(val, msg, assert.instanceOf, true).to.be.instanceOf(type);\n };\n\n /**\n * ### .notInstanceOf(object, constructor, [message])\n *\n * Asserts `value` is not an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new String('chai');\n *\n * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n *\n * @name notInstanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInstanceOf = function (val, type, msg) {\n new Assertion(val, msg, assert.notInstanceOf, true)\n .to.not.be.instanceOf(type);\n };\n\n /**\n * ### .include(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Can be used to assert the\n * inclusion of a value in an array, a substring in a string, or a subset of\n * properties in an object.\n *\n * assert.include([1,2,3], 2, 'array contains value');\n * assert.include('foobar', 'foo', 'string contains substring');\n * assert.include({ foo: 'bar', hello: 'universe' }, { foo: 'bar' }, 'object contains property');\n *\n * Strict equality (===) is used. When asserting the inclusion of a value in\n * an array, the array is searched for an element that's strictly equal to the\n * given value. When asserting a subset of properties in an object, the object\n * is searched for the given property keys, checking that each one is present\n * and strictly equal to the given property value. For instance:\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.include([obj1, obj2], obj1);\n * assert.include({foo: obj1, bar: obj2}, {foo: obj1});\n * assert.include({foo: obj1, bar: obj2}, {foo: obj1, bar: obj2});\n *\n * @name include\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.include = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.include, true).include(inc);\n };\n\n /**\n * ### .notInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Can be used to assert\n * the absence of a value in an array, a substring in a string, or a subset of\n * properties in an object.\n *\n * assert.notInclude([1,2,3], 4, \"array doesn't contain value\");\n * assert.notInclude('foobar', 'baz', \"string doesn't contain substring\");\n * assert.notInclude({ foo: 'bar', hello: 'universe' }, { foo: 'baz' }, 'object doesn't contain property');\n *\n * Strict equality (===) is used. When asserting the absence of a value in an\n * array, the array is searched to confirm the absence of an element that's\n * strictly equal to the given value. When asserting a subset of properties in\n * an object, the object is searched to confirm that at least one of the given\n * property keys is either not present or not strictly equal to the given\n * property value. For instance:\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.notInclude([obj1, obj2], {a: 1});\n * assert.notInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});\n * assert.notInclude({foo: obj1, bar: obj2}, {foo: obj1, bar: {b: 2}});\n *\n * @name notInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notInclude, true).not.include(inc);\n };\n\n /**\n * ### .deepInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Can be used to assert the\n * inclusion of a value in an array or a subset of properties in an object.\n * Deep equality is used.\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.deepInclude([obj1, obj2], {a: 1});\n * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});\n * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 2}});\n *\n * @name deepInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.deepInclude, true).deep.include(inc);\n };\n\n /**\n * ### .notDeepInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Can be used to assert\n * the absence of a value in an array or a subset of properties in an object.\n * Deep equality is used.\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.notDeepInclude([obj1, obj2], {a: 9});\n * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 9}});\n * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 9}});\n *\n * @name notDeepInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepInclude, true).not.deep.include(inc);\n };\n\n /**\n * ### .nestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.nestedInclude({'.a': {'b': 'x'}}, {'\\\\.a.[b]': 'x'});\n * assert.nestedInclude({'a': {'[b]': 'x'}}, {'a.\\\\[b\\\\]': 'x'});\n *\n * @name nestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.nestedInclude, true).nested.include(inc);\n };\n\n /**\n * ### .notNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' does not include 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.notNestedInclude({'.a': {'b': 'x'}}, {'\\\\.a.b': 'y'});\n * assert.notNestedInclude({'a': {'[b]': 'x'}}, {'a.\\\\[b\\\\]': 'y'});\n *\n * @name notNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notNestedInclude, true)\n .not.nested.include(inc);\n };\n\n /**\n * ### .deepNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while checking for deep equality.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.deepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {x: 1}});\n * assert.deepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\\\.a.\\\\[b\\\\]': {x: 1}});\n *\n * @name deepNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepNestedInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.deepNestedInclude, true)\n .deep.nested.include(inc);\n };\n\n /**\n * ### .notDeepNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' does not include 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while checking for deep equality.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.notDeepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {y: 1}})\n * assert.notDeepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\\\.a.\\\\[b\\\\]': {y: 2}});\n *\n * @name notDeepNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepNestedInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepNestedInclude, true)\n .not.deep.nested.include(inc);\n };\n\n /**\n * ### .ownInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while ignoring inherited properties.\n *\n * assert.ownInclude({ a: 1 }, { a: 1 });\n *\n * @name ownInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.ownInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.ownInclude, true).own.include(inc);\n };\n\n /**\n * ### .notOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while ignoring inherited properties.\n *\n * Object.prototype.b = 2;\n *\n * assert.notOwnInclude({ a: 1 }, { b: 2 });\n *\n * @name notOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notOwnInclude, true).not.own.include(inc);\n };\n\n /**\n * ### .deepOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while ignoring inherited properties and checking for deep equality.\n *\n * assert.deepOwnInclude({a: {b: 2}}, {a: {b: 2}});\n *\n * @name deepOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.deepOwnInclude, true)\n .deep.own.include(inc);\n };\n\n /**\n * ### .notDeepOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while ignoring inherited properties and checking for deep equality.\n *\n * assert.notDeepOwnInclude({a: {b: 2}}, {a: {c: 3}});\n *\n * @name notDeepOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepOwnInclude, true)\n .not.deep.own.include(inc);\n };\n\n /**\n * ### .match(value, regexp, [message])\n *\n * Asserts that `value` matches the regular expression `regexp`.\n *\n * assert.match('foobar', /^foo/, 'regexp matches');\n *\n * @name match\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.match = function (exp, re, msg) {\n new Assertion(exp, msg, assert.match, true).to.match(re);\n };\n\n /**\n * ### .notMatch(value, regexp, [message])\n *\n * Asserts that `value` does not match the regular expression `regexp`.\n *\n * assert.notMatch('foobar', /^foo/, 'regexp does not match');\n *\n * @name notMatch\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notMatch = function (exp, re, msg) {\n new Assertion(exp, msg, assert.notMatch, true).to.not.match(re);\n };\n\n /**\n * ### .property(object, property, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property`.\n *\n * assert.property({ tea: { green: 'matcha' }}, 'tea');\n * assert.property({ tea: { green: 'matcha' }}, 'toString');\n *\n * @name property\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.property = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.property, true).to.have.property(prop);\n };\n\n /**\n * ### .notProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property`.\n *\n * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n *\n * @name notProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notProperty, true)\n .to.not.have.property(prop);\n };\n\n /**\n * ### .propertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property` with a value given by `value`. Uses a strict equality check\n * (===).\n *\n * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n *\n * @name propertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.propertyVal, true)\n .to.have.property(prop, val);\n };\n\n /**\n * ### .notPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property` with value given by `value`. Uses a strict equality check\n * (===).\n *\n * assert.notPropertyVal({ tea: 'is good' }, 'tea', 'is bad');\n * assert.notPropertyVal({ tea: 'is good' }, 'coffee', 'is good');\n *\n * @name notPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notPropertyVal, true)\n .to.not.have.property(prop, val);\n };\n\n /**\n * ### .deepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property` with a value given by `value`. Uses a deep equality check.\n *\n * assert.deepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });\n *\n * @name deepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.deepPropertyVal, true)\n .to.have.deep.property(prop, val);\n };\n\n /**\n * ### .notDeepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property` with value given by `value`. Uses a deep equality check.\n *\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });\n *\n * @name notDeepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notDeepPropertyVal, true)\n .to.not.have.deep.property(prop, val);\n };\n\n /**\n * ### .ownProperty(object, property, [message])\n *\n * Asserts that `object` has a direct property named by `property`. Inherited\n * properties aren't checked.\n *\n * assert.ownProperty({ tea: { green: 'matcha' }}, 'tea');\n *\n * @name ownProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @api public\n */\n\n assert.ownProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.ownProperty, true)\n .to.have.own.property(prop);\n };\n\n /**\n * ### .notOwnProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by\n * `property`. Inherited properties aren't checked.\n *\n * assert.notOwnProperty({ tea: { green: 'matcha' }}, 'coffee');\n * assert.notOwnProperty({}, 'toString');\n *\n * @name notOwnProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @api public\n */\n\n assert.notOwnProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notOwnProperty, true)\n .to.not.have.own.property(prop);\n };\n\n /**\n * ### .ownPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct property named by `property` and a value\n * equal to the provided `value`. Uses a strict equality check (===).\n * Inherited properties aren't checked.\n *\n * assert.ownPropertyVal({ coffee: 'is good'}, 'coffee', 'is good');\n *\n * @name ownPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.ownPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.ownPropertyVal, true)\n .to.have.own.property(prop, value);\n };\n\n /**\n * ### .notOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by `property`\n * with a value equal to the provided `value`. Uses a strict equality check\n * (===). Inherited properties aren't checked.\n *\n * assert.notOwnPropertyVal({ tea: 'is better'}, 'tea', 'is worse');\n * assert.notOwnPropertyVal({}, 'toString', Object.prototype.toString);\n *\n * @name notOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.notOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.notOwnPropertyVal, true)\n .to.not.have.own.property(prop, value);\n };\n\n /**\n * ### .deepOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct property named by `property` and a value\n * equal to the provided `value`. Uses a deep equality check. Inherited\n * properties aren't checked.\n *\n * assert.deepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });\n *\n * @name deepOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.deepOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.deepOwnPropertyVal, true)\n .to.have.deep.own.property(prop, value);\n };\n\n /**\n * ### .notDeepOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by `property`\n * with a value equal to the provided `value`. Uses a deep equality check.\n * Inherited properties aren't checked.\n *\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });\n * assert.notDeepOwnPropertyVal({}, 'toString', Object.prototype.toString);\n *\n * @name notDeepOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.notDeepOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.notDeepOwnPropertyVal, true)\n .to.not.have.deep.own.property(prop, value);\n };\n\n /**\n * ### .nestedProperty(object, property, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property`, which can be a string using dot- and bracket-notation for\n * nested reference.\n *\n * assert.nestedProperty({ tea: { green: 'matcha' }}, 'tea.green');\n *\n * @name nestedProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.nestedProperty, true)\n .to.have.nested.property(prop);\n };\n\n /**\n * ### .notNestedProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`, which\n * can be a string using dot- and bracket-notation for nested reference. The\n * property cannot exist on the object nor anywhere in its prototype chain.\n *\n * assert.notNestedProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n *\n * @name notNestedProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notNestedProperty, true)\n .to.not.have.nested.property(prop);\n };\n\n /**\n * ### .nestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`. `property` can use dot- and bracket-notation for nested\n * reference. Uses a strict equality check (===).\n *\n * assert.nestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n *\n * @name nestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.nestedPropertyVal, true)\n .to.have.nested.property(prop, val);\n };\n\n /**\n * ### .notNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property` with\n * value given by `value`. `property` can use dot- and bracket-notation for\n * nested reference. Uses a strict equality check (===).\n *\n * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'coffee.green', 'matcha');\n *\n * @name notNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notNestedPropertyVal, true)\n .to.not.have.nested.property(prop, val);\n };\n\n /**\n * ### .deepNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with a value given\n * by `value`. `property` can use dot- and bracket-notation for nested\n * reference. Uses a deep equality check.\n *\n * assert.deepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yum' });\n *\n * @name deepNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.deepNestedPropertyVal, true)\n .to.have.deep.nested.property(prop, val);\n };\n\n /**\n * ### .notDeepNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property` with\n * value given by `value`. `property` can use dot- and bracket-notation for\n * nested reference. Uses a deep equality check.\n *\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { oolong: 'yum' });\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yuck' });\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.black', { matcha: 'yum' });\n *\n * @name notDeepNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notDeepNestedPropertyVal, true)\n .to.not.have.deep.nested.property(prop, val);\n }\n\n /**\n * ### .lengthOf(object, length, [message])\n *\n * Asserts that `object` has a `length` or `size` with the expected value.\n *\n * assert.lengthOf([1,2,3], 3, 'array has length of 3');\n * assert.lengthOf('foobar', 6, 'string has length of 6');\n * assert.lengthOf(new Set([1,2,3]), 3, 'set has size of 3');\n * assert.lengthOf(new Map([['a',1],['b',2],['c',3]]), 3, 'map has size of 3');\n *\n * @name lengthOf\n * @param {Mixed} object\n * @param {Number} length\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.lengthOf = function (exp, len, msg) {\n new Assertion(exp, msg, assert.lengthOf, true).to.have.lengthOf(len);\n };\n\n /**\n * ### .hasAnyKeys(object, [keys], [message])\n *\n * Asserts that `object` has at least one of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'iDontExist', 'baz']);\n * assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, iDontExist: 99, baz: 1337});\n * assert.hasAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.hasAnyKeys(new Set([{foo: 'bar'}, 'anotherKey']), [{foo: 'bar'}, 'anotherKey']);\n *\n * @name hasAnyKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAnyKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAnyKeys, true).to.have.any.keys(keys);\n }\n\n /**\n * ### .hasAllKeys(object, [keys], [message])\n *\n * Asserts that `object` has all and only all of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);\n * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337]);\n * assert.hasAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.hasAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);\n *\n * @name hasAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAllKeys, true).to.have.all.keys(keys);\n }\n\n /**\n * ### .containsAllKeys(object, [keys], [message])\n *\n * Asserts that `object` has all of the `keys` provided but may have more keys not listed.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'baz']);\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, baz: 1337});\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337});\n * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}]);\n * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}]);\n * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);\n *\n * @name containsAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.containsAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.containsAllKeys, true)\n .to.contain.all.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAnyKeys(object, [keys], [message])\n *\n * Asserts that `object` has none of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);\n * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});\n * assert.doesNotHaveAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);\n * assert.doesNotHaveAnyKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);\n *\n * @name doesNotHaveAnyKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAnyKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAnyKeys, true)\n .to.not.have.any.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAllKeys(object, [keys], [message])\n *\n * Asserts that `object` does not have at least one of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);\n * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});\n * assert.doesNotHaveAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);\n * assert.doesNotHaveAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);\n *\n * @name doesNotHaveAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAllKeys, true)\n .to.not.have.all.keys(keys);\n }\n\n /**\n * ### .hasAnyDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has at least one of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {three: 'three'}]);\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name hasAnyDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAnyDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAnyDeepKeys, true)\n .to.have.any.deep.keys(keys);\n }\n\n /**\n * ### .hasAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has all and only all of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne']]), {one: 'one'});\n * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAllDeepKeys(new Set([{one: 'one'}]), {one: 'one'});\n * assert.hasAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name hasAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAllDeepKeys, true)\n .to.have.all.deep.keys(keys);\n }\n\n /**\n * ### .containsAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` contains all of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});\n * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});\n * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name containsAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.containsAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.containsAllDeepKeys, true)\n .to.contain.all.deep.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAnyDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has none of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});\n * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);\n * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});\n * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);\n *\n * @name doesNotHaveAnyDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAnyDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAnyDeepKeys, true)\n .to.not.have.any.deep.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` does not have at least one of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});\n * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {one: 'one'}]);\n * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});\n * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {fifty: 'fifty'}]);\n *\n * @name doesNotHaveAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAllDeepKeys, true)\n .to.not.have.all.deep.keys(keys);\n }\n\n /**\n * ### .throws(fn, [errorLike/string/regexp], [string/regexp], [message])\n *\n * If `errorLike` is an `Error` constructor, asserts that `fn` will throw an error that is an\n * instance of `errorLike`.\n * If `errorLike` is an `Error` instance, asserts that the error thrown is the same\n * instance as `errorLike`.\n * If `errMsgMatcher` is provided, it also asserts that the error thrown will have a\n * message matching `errMsgMatcher`.\n *\n * assert.throws(fn, 'Error thrown must have this msg');\n * assert.throws(fn, /Error thrown must have a msg that matches this/);\n * assert.throws(fn, ReferenceError);\n * assert.throws(fn, errorInstance);\n * assert.throws(fn, ReferenceError, 'Error thrown must be a ReferenceError and have this msg');\n * assert.throws(fn, errorInstance, 'Error thrown must be the same errorInstance and have this msg');\n * assert.throws(fn, ReferenceError, /Error thrown must be a ReferenceError and match this/);\n * assert.throws(fn, errorInstance, /Error thrown must be the same errorInstance and match this/);\n *\n * @name throws\n * @alias throw\n * @alias Throw\n * @param {Function} fn\n * @param {ErrorConstructor|Error} errorLike\n * @param {RegExp|String} errMsgMatcher\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.throws = function (fn, errorLike, errMsgMatcher, msg) {\n if ('string' === typeof errorLike || errorLike instanceof RegExp) {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n var assertErr = new Assertion(fn, msg, assert.throws, true)\n .to.throw(errorLike, errMsgMatcher);\n return flag(assertErr, 'object');\n };\n\n /**\n * ### .doesNotThrow(fn, [errorLike/string/regexp], [string/regexp], [message])\n *\n * If `errorLike` is an `Error` constructor, asserts that `fn` will _not_ throw an error that is an\n * instance of `errorLike`.\n * If `errorLike` is an `Error` instance, asserts that the error thrown is _not_ the same\n * instance as `errorLike`.\n * If `errMsgMatcher` is provided, it also asserts that the error thrown will _not_ have a\n * message matching `errMsgMatcher`.\n *\n * assert.doesNotThrow(fn, 'Any Error thrown must not have this message');\n * assert.doesNotThrow(fn, /Any Error thrown must not match this/);\n * assert.doesNotThrow(fn, Error);\n * assert.doesNotThrow(fn, errorInstance);\n * assert.doesNotThrow(fn, Error, 'Error must not have this message');\n * assert.doesNotThrow(fn, errorInstance, 'Error must not have this message');\n * assert.doesNotThrow(fn, Error, /Error must not match this/);\n * assert.doesNotThrow(fn, errorInstance, /Error must not match this/);\n *\n * @name doesNotThrow\n * @param {Function} fn\n * @param {ErrorConstructor} errorLike\n * @param {RegExp|String} errMsgMatcher\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotThrow = function (fn, errorLike, errMsgMatcher, msg) {\n if ('string' === typeof errorLike || errorLike instanceof RegExp) {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n new Assertion(fn, msg, assert.doesNotThrow, true)\n .to.not.throw(errorLike, errMsgMatcher);\n };\n\n /**\n * ### .operator(val1, operator, val2, [message])\n *\n * Compares two values using `operator`.\n *\n * assert.operator(1, '<', 2, 'everything is ok');\n * assert.operator(1, '>', 2, 'this will fail');\n *\n * @name operator\n * @param {Mixed} val1\n * @param {String} operator\n * @param {Mixed} val2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.operator = function (val, operator, val2, msg) {\n var ok;\n switch(operator) {\n case '==':\n ok = val == val2;\n break;\n case '===':\n ok = val === val2;\n break;\n case '>':\n ok = val > val2;\n break;\n case '>=':\n ok = val >= val2;\n break;\n case '<':\n ok = val < val2;\n break;\n case '<=':\n ok = val <= val2;\n break;\n case '!=':\n ok = val != val2;\n break;\n case '!==':\n ok = val !== val2;\n break;\n default:\n msg = msg ? msg + ': ' : msg;\n throw new chai.AssertionError(\n msg + 'Invalid operator \"' + operator + '\"',\n undefined,\n assert.operator\n );\n }\n var test = new Assertion(ok, msg, assert.operator, true);\n test.assert(\n true === flag(test, 'object')\n , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n };\n\n /**\n * ### .closeTo(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n *\n * @name closeTo\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.closeTo = function (act, exp, delta, msg) {\n new Assertion(act, msg, assert.closeTo, true).to.be.closeTo(exp, delta);\n };\n\n /**\n * ### .approximately(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.approximately(1.5, 1, 0.5, 'numbers are close');\n *\n * @name approximately\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.approximately = function (act, exp, delta, msg) {\n new Assertion(act, msg, assert.approximately, true)\n .to.be.approximately(exp, delta);\n };\n\n /**\n * ### .sameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in any order. Uses a\n * strict equality check (===).\n *\n * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n *\n * @name sameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameMembers, true)\n .to.have.same.members(set2);\n }\n\n /**\n * ### .notSameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in any order.\n * Uses a strict equality check (===).\n *\n * assert.notSameMembers([ 1, 2, 3 ], [ 5, 1, 3 ], 'not same members');\n *\n * @name notSameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameMembers, true)\n .to.not.have.same.members(set2);\n }\n\n /**\n * ### .sameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in any order. Uses a\n * deep equality check.\n *\n * assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members');\n *\n * @name sameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameDeepMembers, true)\n .to.have.same.deep.members(set2);\n }\n\n /**\n * ### .notSameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in any order.\n * Uses a deep equality check.\n *\n * assert.notSameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { f: 5 }], 'not same deep members');\n *\n * @name notSameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameDeepMembers, true)\n .to.not.have.same.deep.members(set2);\n }\n\n /**\n * ### .sameOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in the same order.\n * Uses a strict equality check (===).\n *\n * assert.sameOrderedMembers([ 1, 2, 3 ], [ 1, 2, 3 ], 'same ordered members');\n *\n * @name sameOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameOrderedMembers, true)\n .to.have.same.ordered.members(set2);\n }\n\n /**\n * ### .notSameOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in the same\n * order. Uses a strict equality check (===).\n *\n * assert.notSameOrderedMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'not same ordered members');\n *\n * @name notSameOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameOrderedMembers, true)\n .to.not.have.same.ordered.members(set2);\n }\n\n /**\n * ### .sameDeepOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in the same order.\n * Uses a deep equality check.\n *\n * assert.sameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { c: 3 } ], 'same deep ordered members');\n *\n * @name sameDeepOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameDeepOrderedMembers, true)\n .to.have.same.deep.ordered.members(set2);\n }\n\n /**\n * ### .notSameDeepOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in the same\n * order. Uses a deep equality check.\n *\n * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { z: 5 } ], 'not same deep ordered members');\n * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { c: 3 } ], 'not same deep ordered members');\n *\n * @name notSameDeepOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameDeepOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameDeepOrderedMembers, true)\n .to.not.have.same.deep.ordered.members(set2);\n }\n\n /**\n * ### .includeMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in any order. Uses a\n * strict equality check (===). Duplicates are ignored.\n *\n * assert.includeMembers([ 1, 2, 3 ], [ 2, 1, 2 ], 'include members');\n *\n * @name includeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeMembers, true)\n .to.include.members(subset);\n }\n\n /**\n * ### .notIncludeMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in any order. Uses a\n * strict equality check (===). Duplicates are ignored.\n *\n * assert.notIncludeMembers([ 1, 2, 3 ], [ 5, 1 ], 'not include members');\n *\n * @name notIncludeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeMembers, true)\n .to.not.include.members(subset);\n }\n\n /**\n * ### .includeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in any order. Uses a deep\n * equality check. Duplicates are ignored.\n *\n * assert.includeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { b: 2 } ], 'include deep members');\n *\n * @name includeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeDeepMembers, true)\n .to.include.deep.members(subset);\n }\n\n /**\n * ### .notIncludeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in any order. Uses a\n * deep equality check. Duplicates are ignored.\n *\n * assert.notIncludeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { f: 5 } ], 'not include deep members');\n *\n * @name notIncludeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeDeepMembers, true)\n .to.not.include.deep.members(subset);\n }\n\n /**\n * ### .includeOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a strict equality\n * check (===).\n *\n * assert.includeOrderedMembers([ 1, 2, 3 ], [ 1, 2 ], 'include ordered members');\n *\n * @name includeOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeOrderedMembers, true)\n .to.include.ordered.members(subset);\n }\n\n /**\n * ### .notIncludeOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a strict equality\n * check (===).\n *\n * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 1 ], 'not include ordered members');\n * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 3 ], 'not include ordered members');\n *\n * @name notIncludeOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeOrderedMembers, true)\n .to.not.include.ordered.members(subset);\n }\n\n /**\n * ### .includeDeepOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a deep equality\n * check.\n *\n * assert.includeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 } ], 'include deep ordered members');\n *\n * @name includeDeepOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeDeepOrderedMembers, true)\n .to.include.deep.ordered.members(subset);\n }\n\n /**\n * ### .notIncludeDeepOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a deep equality\n * check.\n *\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { f: 5 } ], 'not include deep ordered members');\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 } ], 'not include deep ordered members');\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { c: 3 } ], 'not include deep ordered members');\n *\n * @name notIncludeDeepOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeDeepOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeDeepOrderedMembers, true)\n .to.not.include.deep.ordered.members(subset);\n }\n\n /**\n * ### .oneOf(inList, list, [message])\n *\n * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n *\n * assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n *\n * @name oneOf\n * @param {*} inList\n * @param {Array<*>} list\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.oneOf = function (inList, list, msg) {\n new Assertion(inList, msg, assert.oneOf, true).to.be.oneOf(list);\n }\n\n /**\n * ### .changes(function, object, property, [message])\n *\n * Asserts that a function changes the value of a property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 22 };\n * assert.changes(fn, obj, 'val');\n *\n * @name changes\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changes = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changes, true).to.change(obj, prop);\n }\n\n /**\n * ### .changesBy(function, object, property, delta, [message])\n *\n * Asserts that a function changes the value of a property by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 2 };\n * assert.changesBy(fn, obj, 'val', 2);\n *\n * @name changesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changesBy, true)\n .to.change(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotChange(function, object, property, [message])\n *\n * Asserts that a function does not change the value of a property.\n *\n * var obj = { val: 10 };\n * var fn = function() { console.log('foo'); };\n * assert.doesNotChange(fn, obj, 'val');\n *\n * @name doesNotChange\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotChange = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotChange, true)\n .to.not.change(obj, prop);\n }\n\n /**\n * ### .changesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not change the value of a property or of a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 10 };\n * assert.changesButNotBy(fn, obj, 'val', 5);\n *\n * @name changesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changesButNotBy, true)\n .to.change(obj, prop).but.not.by(delta);\n }\n\n /**\n * ### .increases(function, object, property, [message])\n *\n * Asserts that a function increases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 13 };\n * assert.increases(fn, obj, 'val');\n *\n * @name increases\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increases = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.increases, true)\n .to.increase(obj, prop);\n }\n\n /**\n * ### .increasesBy(function, object, property, delta, [message])\n *\n * Asserts that a function increases a numeric object property or a function's return value by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 10 };\n * assert.increasesBy(fn, obj, 'val', 10);\n *\n * @name increasesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increasesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.increasesBy, true)\n .to.increase(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotIncrease(function, object, property, [message])\n *\n * Asserts that a function does not increase a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 8 };\n * assert.doesNotIncrease(fn, obj, 'val');\n *\n * @name doesNotIncrease\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotIncrease = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotIncrease, true)\n .to.not.increase(obj, prop);\n }\n\n /**\n * ### .increasesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not increase a numeric object property or function's return value by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.increasesButNotBy(fn, obj, 'val', 10);\n *\n * @name increasesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increasesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.increasesButNotBy, true)\n .to.increase(obj, prop).but.not.by(delta);\n }\n\n /**\n * ### .decreases(function, object, property, [message])\n *\n * Asserts that a function decreases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreases(fn, obj, 'val');\n *\n * @name decreases\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreases = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.decreases, true)\n .to.decrease(obj, prop);\n }\n\n /**\n * ### .decreasesBy(function, object, property, delta, [message])\n *\n * Asserts that a function decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val -= 5 };\n * assert.decreasesBy(fn, obj, 'val', 5);\n *\n * @name decreasesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreasesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.decreasesBy, true)\n .to.decrease(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotDecrease(function, object, property, [message])\n *\n * Asserts that a function does not decreases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.doesNotDecrease(fn, obj, 'val');\n *\n * @name doesNotDecrease\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecrease = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotDecrease, true)\n .to.not.decrease(obj, prop);\n }\n\n /**\n * ### .doesNotDecreaseBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.doesNotDecreaseBy(fn, obj, 'val', 1);\n *\n * @name doesNotDecreaseBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecreaseBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotDecreaseBy, true)\n .to.not.decrease(obj, prop).by(delta);\n }\n\n /**\n * ### .decreasesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreasesButNotBy(fn, obj, 'val', 1);\n *\n * @name decreasesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreasesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.decreasesButNotBy, true)\n .to.decrease(obj, prop).but.not.by(delta);\n }\n\n /*!\n * ### .ifError(object)\n *\n * Asserts if value is not a false value, and throws if it is a true value.\n * This is added to allow for chai to be a drop-in replacement for Node's\n * assert class.\n *\n * var err = new Error('I am a custom error');\n * assert.ifError(err); // Rethrows err!\n *\n * @name ifError\n * @param {Object} object\n * @namespace Assert\n * @api public\n */\n\n assert.ifError = function (val) {\n if (val) {\n throw(val);\n }\n };\n\n /**\n * ### .isExtensible(object)\n *\n * Asserts that `object` is extensible (can have new properties added to it).\n *\n * assert.isExtensible({});\n *\n * @name isExtensible\n * @alias extensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isExtensible = function (obj, msg) {\n new Assertion(obj, msg, assert.isExtensible, true).to.be.extensible;\n };\n\n /**\n * ### .isNotExtensible(object)\n *\n * Asserts that `object` is _not_ extensible.\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * assert.isNotExtensible(nonExtensibleObject);\n * assert.isNotExtensible(sealedObject);\n * assert.isNotExtensible(frozenObject);\n *\n * @name isNotExtensible\n * @alias notExtensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotExtensible = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotExtensible, true).to.not.be.extensible;\n };\n\n /**\n * ### .isSealed(object)\n *\n * Asserts that `object` is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.seal({});\n *\n * assert.isSealed(sealedObject);\n * assert.isSealed(frozenObject);\n *\n * @name isSealed\n * @alias sealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isSealed = function (obj, msg) {\n new Assertion(obj, msg, assert.isSealed, true).to.be.sealed;\n };\n\n /**\n * ### .isNotSealed(object)\n *\n * Asserts that `object` is _not_ sealed.\n *\n * assert.isNotSealed({});\n *\n * @name isNotSealed\n * @alias notSealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotSealed = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotSealed, true).to.not.be.sealed;\n };\n\n /**\n * ### .isFrozen(object)\n *\n * Asserts that `object` is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n * assert.frozen(frozenObject);\n *\n * @name isFrozen\n * @alias frozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isFrozen = function (obj, msg) {\n new Assertion(obj, msg, assert.isFrozen, true).to.be.frozen;\n };\n\n /**\n * ### .isNotFrozen(object)\n *\n * Asserts that `object` is _not_ frozen.\n *\n * assert.isNotFrozen({});\n *\n * @name isNotFrozen\n * @alias notFrozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFrozen = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotFrozen, true).to.not.be.frozen;\n };\n\n /**\n * ### .isEmpty(target)\n *\n * Asserts that the target does not contain any values.\n * For arrays and strings, it checks the `length` property.\n * For `Map` and `Set` instances, it checks the `size` property.\n * For non-function objects, it gets the count of own\n * enumerable string keys.\n *\n * assert.isEmpty([]);\n * assert.isEmpty('');\n * assert.isEmpty(new Map);\n * assert.isEmpty({});\n *\n * @name isEmpty\n * @alias empty\n * @param {Object|Array|String|Map|Set} target\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isEmpty = function(val, msg) {\n new Assertion(val, msg, assert.isEmpty, true).to.be.empty;\n };\n\n /**\n * ### .isNotEmpty(target)\n *\n * Asserts that the target contains values.\n * For arrays and strings, it checks the `length` property.\n * For `Map` and `Set` instances, it checks the `size` property.\n * For non-function objects, it gets the count of own\n * enumerable string keys.\n *\n * assert.isNotEmpty([1, 2]);\n * assert.isNotEmpty('34');\n * assert.isNotEmpty(new Set([5, 6]));\n * assert.isNotEmpty({ key: 7 });\n *\n * @name isNotEmpty\n * @alias notEmpty\n * @param {Object|Array|String|Map|Set} target\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotEmpty = function(val, msg) {\n new Assertion(val, msg, assert.isNotEmpty, true).to.not.be.empty;\n };\n\n /*!\n * Aliases.\n */\n\n (function alias(name, as){\n assert[as] = assert[name];\n return alias;\n })\n ('isOk', 'ok')\n ('isNotOk', 'notOk')\n ('throws', 'throw')\n ('throws', 'Throw')\n ('isExtensible', 'extensible')\n ('isNotExtensible', 'notExtensible')\n ('isSealed', 'sealed')\n ('isNotSealed', 'notSealed')\n ('isFrozen', 'frozen')\n ('isNotFrozen', 'notFrozen')\n ('isEmpty', 'empty')\n ('isNotEmpty', 'notEmpty');\n};\n\n},{}],7:[function(require,module,exports){\n/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n chai.expect = function (val, message) {\n return new chai.Assertion(val, message);\n };\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * expect.fail();\n * expect.fail(\"custom error message\");\n * expect.fail(1, 2);\n * expect.fail(1, 2, \"custom error message\");\n * expect.fail(1, 2, \"custom error message\", \">\");\n * expect.fail(1, 2, undefined, \">\");\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace BDD\n * @api public\n */\n\n chai.expect.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n message = actual;\n actual = undefined;\n }\n\n message = message || 'expect.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, chai.expect.fail);\n };\n};\n\n},{}],8:[function(require,module,exports){\n/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n var Assertion = chai.Assertion;\n\n function loadShould () {\n // explicitly define this method as function as to have it's name to include as `ssfi`\n function shouldGetter() {\n if (this instanceof String\n || this instanceof Number\n || this instanceof Boolean\n || typeof Symbol === 'function' && this instanceof Symbol\n || typeof BigInt === 'function' && this instanceof BigInt) {\n return new Assertion(this.valueOf(), null, shouldGetter);\n }\n return new Assertion(this, null, shouldGetter);\n }\n function shouldSetter(value) {\n // See https://github.com/chaijs/chai/issues/86: this makes\n // `whatever.should = someValue` actually set `someValue`, which is\n // especially useful for `global.should = require('chai').should()`.\n //\n // Note that we have to use [[DefineProperty]] instead of [[Put]]\n // since otherwise we would trigger this very setter!\n Object.defineProperty(this, 'should', {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n // modify Object.prototype to have `should`\n Object.defineProperty(Object.prototype, 'should', {\n set: shouldSetter\n , get: shouldGetter\n , configurable: true\n });\n\n var should = {};\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * should.fail();\n * should.fail(\"custom error message\");\n * should.fail(1, 2);\n * should.fail(1, 2, \"custom error message\");\n * should.fail(1, 2, \"custom error message\", \">\");\n * should.fail(1, 2, undefined, \">\");\n *\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace BDD\n * @api public\n */\n\n should.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n message = actual;\n actual = undefined;\n }\n\n message = message || 'should.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, should.fail);\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * should.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * should.throw(fn, 'function throws a reference error');\n * should.throw(fn, /function throws a reference error/);\n * should.throw(fn, ReferenceError);\n * should.throw(fn, ReferenceError, 'function throws a reference error');\n * should.throw(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.Throw(errt, errs);\n };\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * should.exist(foo, 'foo exists');\n *\n * @name exist\n * @namespace Should\n * @api public\n */\n\n should.exist = function (val, msg) {\n new Assertion(val, msg).to.exist;\n }\n\n // negation\n should.not = {}\n\n /**\n * ### .not.equal(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * should.not.equal(3, 4, 'these numbers are not equal');\n *\n * @name not.equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.not.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.not.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * should.not.throw(fn, Error, 'function does not throw');\n *\n * @name not.throw\n * @alias not.Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.not.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.not.Throw(errt, errs);\n };\n\n /**\n * ### .not.exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var bar = null;\n *\n * should.not.exist(bar, 'bar does not exist');\n *\n * @name not.exist\n * @namespace Should\n * @api public\n */\n\n should.not.exist = function (val, msg) {\n new Assertion(val, msg).to.not.exist;\n }\n\n should['throw'] = should['Throw'];\n should.not['throw'] = should.not['Throw'];\n\n return should;\n };\n\n chai.should = loadShould;\n chai.Should = loadShould;\n};\n\n},{}],9:[function(require,module,exports){\n/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/*!\n * Module variables\n */\n\n// Check whether `Object.setPrototypeOf` is supported\nvar canSetPrototype = typeof Object.setPrototypeOf === 'function';\n\n// Without `Object.setPrototypeOf` support, this module will need to add properties to a function.\n// However, some of functions' own props are not configurable and should be skipped.\nvar testFn = function() {};\nvar excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) {\n var propDesc = Object.getOwnPropertyDescriptor(testFn, name);\n\n // Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties,\n // but then returns `undefined` as the property descriptor for `callee`. As a\n // workaround, we perform an otherwise unnecessary type-check for `propDesc`,\n // and then filter it out if it's not an object as it should be.\n if (typeof propDesc !== 'object')\n return true;\n\n return !propDesc.configurable;\n});\n\n// Cache `Function` properties\nvar call = Function.prototype.call,\n apply = Function.prototype.apply;\n\n/**\n * ### .addChainableMethod(ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n * expect(fooStr).to.be.foo('bar');\n * expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function addChainableMethod(ctx, name, method, chainingBehavior) {\n if (typeof chainingBehavior !== 'function') {\n chainingBehavior = function () { };\n }\n\n var chainableBehavior = {\n method: method\n , chainingBehavior: chainingBehavior\n };\n\n // save the methods so we can overwrite them later, if we need to.\n if (!ctx.__methods) {\n ctx.__methods = {};\n }\n ctx.__methods[name] = chainableBehavior;\n\n Object.defineProperty(ctx, name,\n { get: function chainableMethodGetter() {\n chainableBehavior.chainingBehavior.call(this);\n\n var chainableMethodWrapper = function () {\n // Setting the `ssfi` flag to `chainableMethodWrapper` causes this\n // function to be the starting point for removing implementation\n // frames from the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then this assertion is being\n // invoked from inside of another assertion. In this case, the `ssfi`\n // flag has already been set by the outer assertion.\n //\n // Note that overwriting a chainable method merely replaces the saved\n // methods in `ctx.__methods` instead of completely replacing the\n // overwritten assertion. Therefore, an overwriting assertion won't\n // set the `ssfi` or `lockSsfi` flags.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', chainableMethodWrapper);\n }\n\n var result = chainableBehavior.method.apply(this, arguments);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n addLengthGuard(chainableMethodWrapper, name, true);\n\n // Use `Object.setPrototypeOf` if available\n if (canSetPrototype) {\n // Inherit all properties from the object by replacing the `Function` prototype\n var prototype = Object.create(this);\n // Restore the `call` and `apply` methods from `Function`\n prototype.call = call;\n prototype.apply = apply;\n Object.setPrototypeOf(chainableMethodWrapper, prototype);\n }\n // Otherwise, redefine all properties (slow!)\n else {\n var asserterNames = Object.getOwnPropertyNames(ctx);\n asserterNames.forEach(function (asserterName) {\n if (excludeNames.indexOf(asserterName) !== -1) {\n return;\n }\n\n var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n Object.defineProperty(chainableMethodWrapper, asserterName, pd);\n });\n }\n\n transferFlags(this, chainableMethodWrapper);\n return proxify(chainableMethodWrapper);\n }\n , configurable: true\n });\n};\n\n},{\"../../chai\":2,\"./addLengthGuard\":10,\"./flag\":15,\"./proxify\":30,\"./transferFlags\":32}],10:[function(require,module,exports){\nvar fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length');\n\n/*!\n * Chai - addLengthGuard utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .addLengthGuard(fn, assertionName, isChainable)\n *\n * Define `length` as a getter on the given uninvoked method assertion. The\n * getter acts as a guard against chaining `length` directly off of an uninvoked\n * method assertion, which is a problem because it references `function`'s\n * built-in `length` property instead of Chai's `length` assertion. When the\n * getter catches the user making this mistake, it throws an error with a\n * helpful message.\n *\n * There are two ways in which this mistake can be made. The first way is by\n * chaining the `length` assertion directly off of an uninvoked chainable\n * method. In this case, Chai suggests that the user use `lengthOf` instead. The\n * second way is by chaining the `length` assertion directly off of an uninvoked\n * non-chainable method. Non-chainable methods must be invoked prior to\n * chaining. In this case, Chai suggests that the user consult the docs for the\n * given assertion.\n *\n * If the `length` property of functions is unconfigurable, then return `fn`\n * without modification.\n *\n * Note that in ES6, the function's `length` property is configurable, so once\n * support for legacy environments is dropped, Chai's `length` property can\n * replace the built-in function's `length` property, and this length guard will\n * no longer be necessary. In the mean time, maintaining consistency across all\n * environments is the priority.\n *\n * @param {Function} fn\n * @param {String} assertionName\n * @param {Boolean} isChainable\n * @namespace Utils\n * @name addLengthGuard\n */\n\nmodule.exports = function addLengthGuard (fn, assertionName, isChainable) {\n if (!fnLengthDesc.configurable) return fn;\n\n Object.defineProperty(fn, 'length', {\n get: function () {\n if (isChainable) {\n throw Error('Invalid Chai property: ' + assertionName + '.length. Due' +\n ' to a compatibility issue, \"length\" cannot directly follow \"' +\n assertionName + '\". Use \"' + assertionName + '.lengthOf\" instead.');\n }\n\n throw Error('Invalid Chai property: ' + assertionName + '.length. See' +\n ' docs for proper usage of \"' + assertionName + '\".');\n }\n });\n\n return fn;\n};\n\n},{}],11:[function(require,module,exports){\n/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .addMethod(ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\n\nmodule.exports = function addMethod(ctx, name, method) {\n var methodWrapper = function () {\n // Setting the `ssfi` flag to `methodWrapper` causes this function to be the\n // starting point for removing implementation frames from the stack trace of\n // a failed assertion.\n //\n // However, we only want to use this function as the starting point if the\n // `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked from\n // inside of another assertion. In the first case, the `ssfi` flag has\n // already been set by the overwriting assertion. In the second case, the\n // `ssfi` flag has already been set by the outer assertion.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', methodWrapper);\n }\n\n var result = method.apply(this, arguments);\n if (result !== undefined)\n return result;\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n addLengthGuard(methodWrapper, name, false);\n ctx[name] = proxify(methodWrapper, name);\n};\n\n},{\"../../chai\":2,\"./addLengthGuard\":10,\"./flag\":15,\"./proxify\":30,\"./transferFlags\":32}],12:[function(require,module,exports){\n/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar isProxyEnabled = require('./isProxyEnabled');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .addProperty(ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n * utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.instanceof(Foo);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function addProperty(ctx, name, getter) {\n getter = getter === undefined ? function () {} : getter;\n\n Object.defineProperty(ctx, name,\n { get: function propertyGetter() {\n // Setting the `ssfi` flag to `propertyGetter` causes this function to\n // be the starting point for removing implementation frames from the\n // stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set and proxy protection is disabled.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked\n // from inside of another assertion. In the first case, the `ssfi` flag\n // has already been set by the overwriting assertion. In the second\n // case, the `ssfi` flag has already been set by the outer assertion.\n //\n // If proxy protection is enabled, then the `ssfi` flag has already been\n // set by the proxy getter.\n if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', propertyGetter);\n }\n\n var result = getter.call(this);\n if (result !== undefined)\n return result;\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n , configurable: true\n });\n};\n\n},{\"../../chai\":2,\"./flag\":15,\"./isProxyEnabled\":25,\"./transferFlags\":32}],13:[function(require,module,exports){\n/*!\n * Chai - compareByInspect utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar inspect = require('./inspect');\n\n/**\n * ### .compareByInspect(mixed, mixed)\n *\n * To be used as a compareFunction with Array.prototype.sort. Compares elements\n * using inspect instead of default behavior of using toString so that Symbols\n * and objects with irregular/missing toString can still be sorted without a\n * TypeError.\n *\n * @param {Mixed} first element to compare\n * @param {Mixed} second element to compare\n * @returns {Number} -1 if 'a' should come before 'b'; otherwise 1\n * @name compareByInspect\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function compareByInspect(a, b) {\n return inspect(a) < inspect(b) ? -1 : 1;\n};\n\n},{\"./inspect\":23}],14:[function(require,module,exports){\n/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n * utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function expectTypes(obj, types) {\n var flagMsg = flag(obj, 'message');\n var ssfi = flag(obj, 'ssfi');\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n obj = flag(obj, 'object');\n types = types.map(function (t) { return t.toLowerCase(); });\n types.sort();\n\n // Transforms ['lorem', 'ipsum'] into 'a lorem, or an ipsum'\n var str = types.map(function (t, index) {\n var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n return or + art + ' ' + t;\n }).join(', ');\n\n var objType = type(obj).toLowerCase();\n\n if (!types.some(function (expected) { return objType === expected; })) {\n throw new AssertionError(\n flagMsg + 'object tested must be ' + str + ', but ' + objType + ' given',\n undefined,\n ssfi\n );\n }\n};\n\n},{\"./flag\":15,\"assertion-error\":33,\"type-detect\":39}],15:[function(require,module,exports){\n/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n * utils.flag(this, 'foo', 'bar'); // setter\n * utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function flag(obj, key, value) {\n var flags = obj.__flags || (obj.__flags = Object.create(null));\n if (arguments.length === 3) {\n flags[key] = value;\n } else {\n return flags[key];\n }\n};\n\n},{}],16:[function(require,module,exports){\n/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function getActual(obj, args) {\n return args.length > 4 ? args[4] : obj._obj;\n};\n\n},{}],17:[function(require,module,exports){\n/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar flag = require('./flag')\n , getActual = require('./getActual')\n , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function getMessage(obj, args) {\n var negate = flag(obj, 'negate')\n , val = flag(obj, 'object')\n , expected = args[3]\n , actual = getActual(obj, args)\n , msg = negate ? args[2] : args[1]\n , flagMsg = flag(obj, 'message');\n\n if(typeof msg === \"function\") msg = msg();\n msg = msg || '';\n msg = msg\n .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n\n},{\"./flag\":15,\"./getActual\":16,\"./objDisplay\":26}],18:[function(require,module,exports){\nvar type = require('type-detect');\n\nvar flag = require('./flag');\n\nfunction isObjectType(obj) {\n var objectType = type(obj);\n var objectTypes = ['Array', 'Object', 'function'];\n\n return objectTypes.indexOf(objectType) !== -1;\n}\n\n/**\n * ### .getOperator(message)\n *\n * Extract the operator from error message.\n * Operator defined is based on below link\n * https://nodejs.org/api/assert.html#assert_assert.\n *\n * Returns the `operator` or `undefined` value for an Assertion.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getOperator\n * @api public\n */\n\nmodule.exports = function getOperator(obj, args) {\n var operator = flag(obj, 'operator');\n var negate = flag(obj, 'negate');\n var expected = args[3];\n var msg = negate ? args[2] : args[1];\n\n if (operator) {\n return operator;\n }\n\n if (typeof msg === 'function') msg = msg();\n\n msg = msg || '';\n if (!msg) {\n return undefined;\n }\n\n if (/\\shave\\s/.test(msg)) {\n return undefined;\n }\n\n var isObject = isObjectType(expected);\n if (/\\snot\\s/.test(msg)) {\n return isObject ? 'notDeepStrictEqual' : 'notStrictEqual';\n }\n\n return isObject ? 'deepStrictEqual' : 'strictEqual';\n};\n\n},{\"./flag\":15,\"type-detect\":39}],19:[function(require,module,exports){\n/*!\n * Chai - getOwnEnumerableProperties utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols');\n\n/**\n * ### .getOwnEnumerableProperties(object)\n *\n * This allows the retrieval of directly-owned enumerable property names and\n * symbols of an object. This function is necessary because Object.keys only\n * returns enumerable property names, not enumerable property symbols.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getOwnEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getOwnEnumerableProperties(obj) {\n return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj));\n};\n\n},{\"./getOwnEnumerablePropertySymbols\":20}],20:[function(require,module,exports){\n/*!\n * Chai - getOwnEnumerablePropertySymbols utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getOwnEnumerablePropertySymbols(object)\n *\n * This allows the retrieval of directly-owned enumerable property symbols of an\n * object. This function is necessary because Object.getOwnPropertySymbols\n * returns both enumerable and non-enumerable property symbols.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getOwnEnumerablePropertySymbols\n * @api public\n */\n\nmodule.exports = function getOwnEnumerablePropertySymbols(obj) {\n if (typeof Object.getOwnPropertySymbols !== 'function') return [];\n\n return Object.getOwnPropertySymbols(obj).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(obj, sym).enumerable;\n });\n};\n\n},{}],21:[function(require,module,exports){\n/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n var result = Object.getOwnPropertyNames(object);\n\n function addProperty(property) {\n if (result.indexOf(property) === -1) {\n result.push(property);\n }\n }\n\n var proto = Object.getPrototypeOf(object);\n while (proto !== null) {\n Object.getOwnPropertyNames(proto).forEach(addProperty);\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n};\n\n},{}],22:[function(require,module,exports){\n/*!\n * chai\n * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Dependencies that are used for multiple exports are required here only once\n */\n\nvar pathval = require('pathval');\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = pathval.getPathInfo;\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = pathval.hasProperty;\n\n/*!\n * Function name\n */\n\nexports.getName = require('get-func-name');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n\n/*!\n * Compare by inspect method\n */\n\nexports.compareByInspect = require('./compareByInspect');\n\n/*!\n * Get own enumerable property symbols method\n */\n\nexports.getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols');\n\n/*!\n * Get own enumerable properties method\n */\n\nexports.getOwnEnumerableProperties = require('./getOwnEnumerableProperties');\n\n/*!\n * Checks error against a given set of criteria\n */\n\nexports.checkError = require('check-error');\n\n/*!\n * Proxify util\n */\n\nexports.proxify = require('./proxify');\n\n/*!\n * addLengthGuard util\n */\n\nexports.addLengthGuard = require('./addLengthGuard');\n\n/*!\n * isProxyEnabled helper\n */\n\nexports.isProxyEnabled = require('./isProxyEnabled');\n\n/*!\n * isNaN method\n */\n\nexports.isNaN = require('./isNaN');\n\n/*!\n * getOperator method\n */\n\nexports.getOperator = require('./getOperator');\n},{\"./addChainableMethod\":9,\"./addLengthGuard\":10,\"./addMethod\":11,\"./addProperty\":12,\"./compareByInspect\":13,\"./expectTypes\":14,\"./flag\":15,\"./getActual\":16,\"./getMessage\":17,\"./getOperator\":18,\"./getOwnEnumerableProperties\":19,\"./getOwnEnumerablePropertySymbols\":20,\"./inspect\":23,\"./isNaN\":24,\"./isProxyEnabled\":25,\"./objDisplay\":26,\"./overwriteChainableMethod\":27,\"./overwriteMethod\":28,\"./overwriteProperty\":29,\"./proxify\":30,\"./test\":31,\"./transferFlags\":32,\"check-error\":34,\"deep-eql\":35,\"get-func-name\":36,\"pathval\":38,\"type-detect\":39}],23:[function(require,module,exports){\n// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('get-func-name');\nvar loupe = require('loupe');\nvar config = require('../config');\n\nmodule.exports = inspect;\n\n/**\n * ### .inspect(obj, [showHidden], [depth], [colors])\n *\n * Echoes the value of a value. Tries to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n * properties of objects. Default is false.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n * output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n var options = {\n colors: colors,\n depth: (typeof depth === 'undefined' ? 2 : depth),\n showHidden: showHidden,\n truncate: config.truncateThreshold ? config.truncateThreshold : Infinity,\n };\n return loupe.inspect(obj, options);\n}\n\n},{\"../config\":4,\"get-func-name\":36,\"loupe\":37}],24:[function(require,module,exports){\n/*!\n * Chai - isNaN utility\n * Copyright(c) 2012-2015 Sakthipriyan Vairamani <thechargingvolcano@gmail.com>\n * MIT Licensed\n */\n\n/**\n * ### .isNaN(value)\n *\n * Checks if the given value is NaN or not.\n *\n * utils.isNaN(NaN); // true\n *\n * @param {Value} The value which has to be checked if it is NaN\n * @name isNaN\n * @api private\n */\n\nfunction isNaN(value) {\n // Refer http://www.ecma-international.org/ecma-262/6.0/#sec-isnan-number\n // section's NOTE.\n return value !== value;\n}\n\n// If ECMAScript 6's Number.isNaN is present, prefer that.\nmodule.exports = Number.isNaN || isNaN;\n\n},{}],25:[function(require,module,exports){\nvar config = require('../config');\n\n/*!\n * Chai - isProxyEnabled helper\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .isProxyEnabled()\n *\n * Helper function to check if Chai's proxy protection feature is enabled. If\n * proxies are unsupported or disabled via the user's Chai config, then return\n * false. Otherwise, return true.\n *\n * @namespace Utils\n * @name isProxyEnabled\n */\n\nmodule.exports = function isProxyEnabled() {\n return config.useProxy &&\n typeof Proxy !== 'undefined' &&\n typeof Reflect !== 'undefined';\n};\n\n},{\"../config\":4}],26:[function(require,module,exports){\n/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay(object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function objDisplay(obj) {\n var str = inspect(obj)\n , type = Object.prototype.toString.call(obj);\n\n if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n if (type === '[object Function]') {\n return !obj.name || obj.name === ''\n ? '[Function]'\n : '[Function: ' + obj.name + ']';\n } else if (type === '[object Array]') {\n return '[ Array(' + obj.length + ') ]';\n } else if (type === '[object Object]') {\n var keys = Object.keys(obj)\n , kstr = keys.length > 2\n ? keys.splice(0, 2).join(', ') + ', ...'\n : keys.join(', ');\n return '{ Object (' + kstr + ') }';\n } else {\n return str;\n }\n } else {\n return str;\n }\n};\n\n},{\"../config\":4,\"./inspect\":23}],27:[function(require,module,exports){\n/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteChainableMethod(ctx, name, method, chainingBehavior)\n *\n * Overwrites an already existing chainable method\n * and provides access to the previous function or\n * property. Must return functions to be used for\n * name.\n *\n * utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf',\n * function (_super) {\n * }\n * , function (_super) {\n * }\n * );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.have.lengthOf(3);\n * expect(myFoo).to.have.lengthOf.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function overwriteChainableMethod(ctx, name, method, chainingBehavior) {\n var chainableBehavior = ctx.__methods[name];\n\n var _chainingBehavior = chainableBehavior.chainingBehavior;\n chainableBehavior.chainingBehavior = function overwritingChainableMethodGetter() {\n var result = chainingBehavior(_chainingBehavior).call(this);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n var _method = chainableBehavior.method;\n chainableBehavior.method = function overwritingChainableMethodWrapper() {\n var result = method(_method).apply(this, arguments);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n};\n\n},{\"../../chai\":2,\"./transferFlags\":32}],28:[function(require,module,exports){\n/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteMethod(ctx, name, fn)\n *\n * Overwrites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n * return function (str) {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.value).to.equal(str);\n * } else {\n * _super.apply(this, arguments);\n * }\n * }\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function overwriteMethod(ctx, name, method) {\n var _method = ctx[name]\n , _super = function () {\n throw new Error(name + ' is not a function');\n };\n\n if (_method && 'function' === typeof _method)\n _super = _method;\n\n var overwritingMethodWrapper = function () {\n // Setting the `ssfi` flag to `overwritingMethodWrapper` causes this\n // function to be the starting point for removing implementation frames from\n // the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if the\n // `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked from\n // inside of another assertion. In the first case, the `ssfi` flag has\n // already been set by the overwriting assertion. In the second case, the\n // `ssfi` flag has already been set by the outer assertion.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', overwritingMethodWrapper);\n }\n\n // Setting the `lockSsfi` flag to `true` prevents the overwritten assertion\n // from changing the `ssfi` flag. By this point, the `ssfi` flag is already\n // set to the correct starting point for this assertion.\n var origLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n var result = method(_super).apply(this, arguments);\n flag(this, 'lockSsfi', origLockSsfi);\n\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n\n addLengthGuard(overwritingMethodWrapper, name, false);\n ctx[name] = proxify(overwritingMethodWrapper, name);\n};\n\n},{\"../../chai\":2,\"./addLengthGuard\":10,\"./flag\":15,\"./proxify\":30,\"./transferFlags\":32}],29:[function(require,module,exports){\n/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar isProxyEnabled = require('./isProxyEnabled');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteProperty(ctx, name, fn)\n *\n * Overwrites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n * return function () {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.name).to.equal('bar');\n * } else {\n * _super.call(this);\n * }\n * }\n * });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function overwriteProperty(ctx, name, getter) {\n var _get = Object.getOwnPropertyDescriptor(ctx, name)\n , _super = function () {};\n\n if (_get && 'function' === typeof _get.get)\n _super = _get.get\n\n Object.defineProperty(ctx, name,\n { get: function overwritingPropertyGetter() {\n // Setting the `ssfi` flag to `overwritingPropertyGetter` causes this\n // function to be the starting point for removing implementation frames\n // from the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set and proxy protection is disabled.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked\n // from inside of another assertion. In the first case, the `ssfi` flag\n // has already been set by the overwriting assertion. In the second\n // case, the `ssfi` flag has already been set by the outer assertion.\n //\n // If proxy protection is enabled, then the `ssfi` flag has already been\n // set by the proxy getter.\n if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', overwritingPropertyGetter);\n }\n\n // Setting the `lockSsfi` flag to `true` prevents the overwritten\n // assertion from changing the `ssfi` flag. By this point, the `ssfi`\n // flag is already set to the correct starting point for this assertion.\n var origLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n var result = getter(_super).call(this);\n flag(this, 'lockSsfi', origLockSsfi);\n\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n , configurable: true\n });\n};\n\n},{\"../../chai\":2,\"./flag\":15,\"./isProxyEnabled\":25,\"./transferFlags\":32}],30:[function(require,module,exports){\nvar config = require('../config');\nvar flag = require('./flag');\nvar getProperties = require('./getProperties');\nvar isProxyEnabled = require('./isProxyEnabled');\n\n/*!\n * Chai - proxify utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .proxify(object)\n *\n * Return a proxy of given object that throws an error when a non-existent\n * property is read. By default, the root cause is assumed to be a misspelled\n * property, and thus an attempt is made to offer a reasonable suggestion from\n * the list of existing properties. However, if a nonChainableMethodName is\n * provided, then the root cause is instead a failure to invoke a non-chainable\n * method prior to reading the non-existent property.\n *\n * If proxies are unsupported or disabled via the user's Chai config, then\n * return object without modification.\n *\n * @param {Object} obj\n * @param {String} nonChainableMethodName\n * @namespace Utils\n * @name proxify\n */\n\nvar builtins = ['__flags', '__methods', '_obj', 'assert'];\n\nmodule.exports = function proxify(obj, nonChainableMethodName) {\n if (!isProxyEnabled()) return obj;\n\n return new Proxy(obj, {\n get: function proxyGetter(target, property) {\n // This check is here because we should not throw errors on Symbol properties\n // such as `Symbol.toStringTag`.\n // The values for which an error should be thrown can be configured using\n // the `config.proxyExcludedKeys` setting.\n if (typeof property === 'string' &&\n config.proxyExcludedKeys.indexOf(property) === -1 &&\n !Reflect.has(target, property)) {\n // Special message for invalid property access of non-chainable methods.\n if (nonChainableMethodName) {\n throw Error('Invalid Chai property: ' + nonChainableMethodName + '.' +\n property + '. See docs for proper usage of \"' +\n nonChainableMethodName + '\".');\n }\n\n // If the property is reasonably close to an existing Chai property,\n // suggest that property to the user. Only suggest properties with a\n // distance less than 4.\n var suggestion = null;\n var suggestionDistance = 4;\n getProperties(target).forEach(function(prop) {\n if (\n !Object.prototype.hasOwnProperty(prop) &&\n builtins.indexOf(prop) === -1\n ) {\n var dist = stringDistanceCapped(\n property,\n prop,\n suggestionDistance\n );\n if (dist < suggestionDistance) {\n suggestion = prop;\n suggestionDistance = dist;\n }\n }\n });\n\n if (suggestion !== null) {\n throw Error('Invalid Chai property: ' + property +\n '. Did you mean \"' + suggestion + '\"?');\n } else {\n throw Error('Invalid Chai property: ' + property);\n }\n }\n\n // Use this proxy getter as the starting point for removing implementation\n // frames from the stack trace of a failed assertion. For property\n // assertions, this prevents the proxy getter from showing up in the stack\n // trace since it's invoked before the property getter. For method and\n // chainable method assertions, this flag will end up getting changed to\n // the method wrapper, which is good since this frame will no longer be in\n // the stack once the method is invoked. Note that Chai builtin assertion\n // properties such as `__flags` are skipped since this is only meant to\n // capture the starting point of an assertion. This step is also skipped\n // if the `lockSsfi` flag is set, thus indicating that this assertion is\n // being called from within another assertion. In that case, the `ssfi`\n // flag is already set to the outer assertion's starting point.\n if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) {\n flag(target, 'ssfi', proxyGetter);\n }\n\n return Reflect.get(target, property);\n }\n });\n};\n\n/**\n * # stringDistanceCapped(strA, strB, cap)\n * Return the Levenshtein distance between two strings, but no more than cap.\n * @param {string} strA\n * @param {string} strB\n * @param {number} number\n * @return {number} min(string distance between strA and strB, cap)\n * @api private\n */\n\nfunction stringDistanceCapped(strA, strB, cap) {\n if (Math.abs(strA.length - strB.length) >= cap) {\n return cap;\n }\n\n var memo = [];\n // `memo` is a two-dimensional array containing distances.\n // memo[i][j] is the distance between strA.slice(0, i) and\n // strB.slice(0, j).\n for (var i = 0; i <= strA.length; i++) {\n memo[i] = Array(strB.length + 1).fill(0);\n memo[i][0] = i;\n }\n for (var j = 0; j < strB.length; j++) {\n memo[0][j] = j;\n }\n\n for (var i = 1; i <= strA.length; i++) {\n var ch = strA.charCodeAt(i - 1);\n for (var j = 1; j <= strB.length; j++) {\n if (Math.abs(i - j) >= cap) {\n memo[i][j] = cap;\n continue;\n }\n memo[i][j] = Math.min(\n memo[i - 1][j] + 1,\n memo[i][j - 1] + 1,\n memo[i - 1][j - 1] +\n (ch === strB.charCodeAt(j - 1) ? 0 : 1)\n );\n }\n }\n\n return memo[strA.length][strB.length];\n}\n\n},{\"../config\":4,\"./flag\":15,\"./getProperties\":21,\"./isProxyEnabled\":25}],31:[function(require,module,exports){\n/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar flag = require('./flag');\n\n/**\n * ### .test(object, expression)\n *\n * Test and object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function test(obj, args) {\n var negate = flag(obj, 'negate')\n , expr = args[0];\n return negate ? !expr : expr;\n};\n\n},{\"./flag\":15}],32:[function(require,module,exports){\n/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, `lockSsfi`,\n * and `message`) will not be transferred.\n *\n *\n * var newAssertion = new Assertion();\n * utils.transferFlags(assertion, newAssertion);\n *\n * var anotherAssertion = new Assertion(myObj);\n * utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function transferFlags(assertion, object, includeAll) {\n var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n if (!object.__flags) {\n object.__flags = Object.create(null);\n }\n\n includeAll = arguments.length === 3 ? includeAll : true;\n\n for (var flag in flags) {\n if (includeAll ||\n (flag !== 'object' && flag !== 'ssfi' && flag !== 'lockSsfi' && flag != 'message')) {\n object.__flags[flag] = flags[flag];\n }\n }\n};\n\n},{}],33:[function(require,module,exports){\n/*!\n * assertion-error\n * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n var excludes = [].slice.call(arguments);\n\n function excludeProps (res, obj) {\n Object.keys(obj).forEach(function (key) {\n if (!~excludes.indexOf(key)) res[key] = obj[key];\n });\n }\n\n return function extendExclude () {\n var args = [].slice.call(arguments)\n , i = 0\n , res = {};\n\n for (; i < args.length; i++) {\n excludeProps(res, args[i]);\n }\n\n return res;\n };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n , props = extend(_props || {});\n\n // default values\n this.message = message || 'Unspecified AssertionError';\n this.showDiff = false;\n\n // copy from properties\n for (var key in props) {\n this[key] = props[key];\n }\n\n // capture stack trace\n ssf = ssf || AssertionError;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ssf);\n } else {\n try {\n throw new Error();\n } catch(e) {\n this.stack = e.stack;\n }\n }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n var extend = exclude('constructor', 'toJSON', 'stack')\n , props = extend({ name: this.name }, this);\n\n // include stack if exists and not turned off\n if (false !== stack && this.stack) {\n props.stack = this.stack;\n }\n\n return props;\n};\n\n},{}],34:[function(require,module,exports){\n'use strict';\n\n/* !\n * Chai - checkError utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .checkError\n *\n * Checks that an error conforms to a given set of criteria and/or retrieves information about it.\n *\n * @api public\n */\n\n/**\n * ### .compatibleInstance(thrown, errorLike)\n *\n * Checks if two instances are compatible (strict equal).\n * Returns false if errorLike is not an instance of Error, because instances\n * can only be compatible if they're both error instances.\n *\n * @name compatibleInstance\n * @param {Error} thrown error\n * @param {Error|ErrorConstructor} errorLike object to compare against\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleInstance(thrown, errorLike) {\n return errorLike instanceof Error && thrown === errorLike;\n}\n\n/**\n * ### .compatibleConstructor(thrown, errorLike)\n *\n * Checks if two constructors are compatible.\n * This function can receive either an error constructor or\n * an error instance as the `errorLike` argument.\n * Constructors are compatible if they're the same or if one is\n * an instance of another.\n *\n * @name compatibleConstructor\n * @param {Error} thrown error\n * @param {Error|ErrorConstructor} errorLike object to compare against\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleConstructor(thrown, errorLike) {\n if (errorLike instanceof Error) {\n // If `errorLike` is an instance of any error we compare their constructors\n return thrown.constructor === errorLike.constructor || thrown instanceof errorLike.constructor;\n } else if (errorLike.prototype instanceof Error || errorLike === Error) {\n // If `errorLike` is a constructor that inherits from Error, we compare `thrown` to `errorLike` directly\n return thrown.constructor === errorLike || thrown instanceof errorLike;\n }\n\n return false;\n}\n\n/**\n * ### .compatibleMessage(thrown, errMatcher)\n *\n * Checks if an error's message is compatible with a matcher (String or RegExp).\n * If the message contains the String or passes the RegExp test,\n * it is considered compatible.\n *\n * @name compatibleMessage\n * @param {Error} thrown error\n * @param {String|RegExp} errMatcher to look for into the message\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleMessage(thrown, errMatcher) {\n var comparisonString = typeof thrown === 'string' ? thrown : thrown.message;\n if (errMatcher instanceof RegExp) {\n return errMatcher.test(comparisonString);\n } else if (typeof errMatcher === 'string') {\n return comparisonString.indexOf(errMatcher) !== -1; // eslint-disable-line no-magic-numbers\n }\n\n return false;\n}\n\n/**\n * ### .getFunctionName(constructorFn)\n *\n * Returns the name of a function.\n * This also includes a polyfill function if `constructorFn.name` is not defined.\n *\n * @name getFunctionName\n * @param {Function} constructorFn\n * @namespace Utils\n * @api private\n */\n\nvar functionNameMatch = /\\s*function(?:\\s|\\s*\\/\\*[^(?:*\\/)]+\\*\\/\\s*)*([^\\(\\/]+)/;\nfunction getFunctionName(constructorFn) {\n var name = '';\n if (typeof constructorFn.name === 'undefined') {\n // Here we run a polyfill if constructorFn.name is not defined\n var match = String(constructorFn).match(functionNameMatch);\n if (match) {\n name = match[1];\n }\n } else {\n name = constructorFn.name;\n }\n\n return name;\n}\n\n/**\n * ### .getConstructorName(errorLike)\n *\n * Gets the constructor name for an Error instance or constructor itself.\n *\n * @name getConstructorName\n * @param {Error|ErrorConstructor} errorLike\n * @namespace Utils\n * @api public\n */\n\nfunction getConstructorName(errorLike) {\n var constructorName = errorLike;\n if (errorLike instanceof Error) {\n constructorName = getFunctionName(errorLike.constructor);\n } else if (typeof errorLike === 'function') {\n // If `err` is not an instance of Error it is an error constructor itself or another function.\n // If we've got a common function we get its name, otherwise we may need to create a new instance\n // of the error just in case it's a poorly-constructed error. Please see chaijs/chai/issues/45 to know more.\n constructorName = getFunctionName(errorLike).trim() ||\n getFunctionName(new errorLike()); // eslint-disable-line new-cap\n }\n\n return constructorName;\n}\n\n/**\n * ### .getMessage(errorLike)\n *\n * Gets the error message from an error.\n * If `err` is a String itself, we return it.\n * If the error has no message, we return an empty string.\n *\n * @name getMessage\n * @param {Error|String} errorLike\n * @namespace Utils\n * @api public\n */\n\nfunction getMessage(errorLike) {\n var msg = '';\n if (errorLike && errorLike.message) {\n msg = errorLike.message;\n } else if (typeof errorLike === 'string') {\n msg = errorLike;\n }\n\n return msg;\n}\n\nmodule.exports = {\n compatibleInstance: compatibleInstance,\n compatibleConstructor: compatibleConstructor,\n compatibleMessage: compatibleMessage,\n getMessage: getMessage,\n getConstructorName: getConstructorName,\n};\n\n},{}],35:[function(require,module,exports){\n'use strict';\n/* globals Symbol: false, Uint8Array: false, WeakMap: false */\n/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar type = require('type-detect');\nfunction FakeMap() {\n this._key = 'chai/deep-eql__' + Math.random() + Date.now();\n}\n\nFakeMap.prototype = {\n get: function getMap(key) {\n return key[this._key];\n },\n set: function setMap(key, value) {\n if (Object.isExtensible(key)) {\n Object.defineProperty(key, this._key, {\n value: value,\n configurable: true,\n });\n }\n },\n};\n\nvar MemoizeMap = typeof WeakMap === 'function' ? WeakMap : FakeMap;\n/*!\n * Check to see if the MemoizeMap has recorded a result of the two operands\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {MemoizeMap} memoizeMap\n * @returns {Boolean|null} result\n*/\nfunction memoizeCompare(leftHandOperand, rightHandOperand, memoizeMap) {\n // Technically, WeakMap keys can *only* be objects, not primitives.\n if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n return null;\n }\n var leftHandMap = memoizeMap.get(leftHandOperand);\n if (leftHandMap) {\n var result = leftHandMap.get(rightHandOperand);\n if (typeof result === 'boolean') {\n return result;\n }\n }\n return null;\n}\n\n/*!\n * Set the result of the equality into the MemoizeMap\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {MemoizeMap} memoizeMap\n * @param {Boolean} result\n*/\nfunction memoizeSet(leftHandOperand, rightHandOperand, memoizeMap, result) {\n // Technically, WeakMap keys can *only* be objects, not primitives.\n if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n return;\n }\n var leftHandMap = memoizeMap.get(leftHandOperand);\n if (leftHandMap) {\n leftHandMap.set(rightHandOperand, result);\n } else {\n leftHandMap = new MemoizeMap();\n leftHandMap.set(rightHandOperand, result);\n memoizeMap.set(leftHandOperand, leftHandMap);\n }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\nmodule.exports.MemoizeMap = MemoizeMap;\n\n/**\n * Assert deeply nested sameValue equality between two objects of any type.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (optional) Additional options\n * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.\n * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of\n complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular\n references to blow the stack.\n * @return {Boolean} equal match\n */\nfunction deepEqual(leftHandOperand, rightHandOperand, options) {\n // If we have a comparator, we can't assume anything; so bail to its check first.\n if (options && options.comparator) {\n return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);\n }\n\n var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);\n if (simpleResult !== null) {\n return simpleResult;\n }\n\n // Deeper comparisons are pushed through to a larger function\n return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);\n}\n\n/**\n * Many comparisons can be canceled out early via simple equality or primitive checks.\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @return {Boolean|null} equal match\n */\nfunction simpleEqual(leftHandOperand, rightHandOperand) {\n // Equal references (except for Numbers) can be returned early\n if (leftHandOperand === rightHandOperand) {\n // Handle +-0 cases\n return leftHandOperand !== 0 || 1 / leftHandOperand === 1 / rightHandOperand;\n }\n\n // handle NaN cases\n if (\n leftHandOperand !== leftHandOperand && // eslint-disable-line no-self-compare\n rightHandOperand !== rightHandOperand // eslint-disable-line no-self-compare\n ) {\n return true;\n }\n\n // Anything that is not an 'object', i.e. symbols, functions, booleans, numbers,\n // strings, and undefined, can be compared by reference.\n if (isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n // Easy out b/c it would have passed the first equality check\n return false;\n }\n return null;\n}\n\n/*!\n * The main logic of the `deepEqual` function.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (optional) Additional options\n * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.\n * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of\n complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular\n references to blow the stack.\n * @return {Boolean} equal match\n*/\nfunction extensiveDeepEqual(leftHandOperand, rightHandOperand, options) {\n options = options || {};\n options.memoize = options.memoize === false ? false : options.memoize || new MemoizeMap();\n var comparator = options && options.comparator;\n\n // Check if a memoized result exists.\n var memoizeResultLeft = memoizeCompare(leftHandOperand, rightHandOperand, options.memoize);\n if (memoizeResultLeft !== null) {\n return memoizeResultLeft;\n }\n var memoizeResultRight = memoizeCompare(rightHandOperand, leftHandOperand, options.memoize);\n if (memoizeResultRight !== null) {\n return memoizeResultRight;\n }\n\n // If a comparator is present, use it.\n if (comparator) {\n var comparatorResult = comparator(leftHandOperand, rightHandOperand);\n // Comparators may return null, in which case we want to go back to default behavior.\n if (comparatorResult === false || comparatorResult === true) {\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, comparatorResult);\n return comparatorResult;\n }\n // To allow comparators to override *any* behavior, we ran them first. Since it didn't decide\n // what to do, we need to make sure to return the basic tests first before we move on.\n var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);\n if (simpleResult !== null) {\n // Don't memoize this, it takes longer to set/retrieve than to just compare.\n return simpleResult;\n }\n }\n\n var leftHandType = type(leftHandOperand);\n if (leftHandType !== type(rightHandOperand)) {\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, false);\n return false;\n }\n\n // Temporarily set the operands in the memoize object to prevent blowing the stack\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, true);\n\n var result = extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options);\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, result);\n return result;\n}\n\nfunction extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options) {\n switch (leftHandType) {\n case 'String':\n case 'Number':\n case 'Boolean':\n case 'Date':\n // If these types are their instance types (e.g. `new Number`) then re-deepEqual against their values\n return deepEqual(leftHandOperand.valueOf(), rightHandOperand.valueOf());\n case 'Promise':\n case 'Symbol':\n case 'function':\n case 'WeakMap':\n case 'WeakSet':\n case 'Error':\n return leftHandOperand === rightHandOperand;\n case 'Arguments':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'Array':\n return iterableEqual(leftHandOperand, rightHandOperand, options);\n case 'RegExp':\n return regexpEqual(leftHandOperand, rightHandOperand);\n case 'Generator':\n return generatorEqual(leftHandOperand, rightHandOperand, options);\n case 'DataView':\n return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer), options);\n case 'ArrayBuffer':\n return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand), options);\n case 'Set':\n return entriesEqual(leftHandOperand, rightHandOperand, options);\n case 'Map':\n return entriesEqual(leftHandOperand, rightHandOperand, options);\n default:\n return objectEqual(leftHandOperand, rightHandOperand, options);\n }\n}\n\n/*!\n * Compare two Regular Expressions for equality.\n *\n * @param {RegExp} leftHandOperand\n * @param {RegExp} rightHandOperand\n * @return {Boolean} result\n */\n\nfunction regexpEqual(leftHandOperand, rightHandOperand) {\n return leftHandOperand.toString() === rightHandOperand.toString();\n}\n\n/*!\n * Compare two Sets/Maps for equality. Faster than other equality functions.\n *\n * @param {Set} leftHandOperand\n * @param {Set} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction entriesEqual(leftHandOperand, rightHandOperand, options) {\n // IE11 doesn't support Set#entries or Set#@@iterator, so we need manually populate using Set#forEach\n if (leftHandOperand.size !== rightHandOperand.size) {\n return false;\n }\n if (leftHandOperand.size === 0) {\n return true;\n }\n var leftHandItems = [];\n var rightHandItems = [];\n leftHandOperand.forEach(function gatherEntries(key, value) {\n leftHandItems.push([ key, value ]);\n });\n rightHandOperand.forEach(function gatherEntries(key, value) {\n rightHandItems.push([ key, value ]);\n });\n return iterableEqual(leftHandItems.sort(), rightHandItems.sort(), options);\n}\n\n/*!\n * Simple equality for flat iterable objects such as Arrays, TypedArrays or Node.js buffers.\n *\n * @param {Iterable} leftHandOperand\n * @param {Iterable} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction iterableEqual(leftHandOperand, rightHandOperand, options) {\n var length = leftHandOperand.length;\n if (length !== rightHandOperand.length) {\n return false;\n }\n if (length === 0) {\n return true;\n }\n var index = -1;\n while (++index < length) {\n if (deepEqual(leftHandOperand[index], rightHandOperand[index], options) === false) {\n return false;\n }\n }\n return true;\n}\n\n/*!\n * Simple equality for generator objects such as those returned by generator functions.\n *\n * @param {Iterable} leftHandOperand\n * @param {Iterable} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction generatorEqual(leftHandOperand, rightHandOperand, options) {\n return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), options);\n}\n\n/*!\n * Determine if the given object has an @@iterator function.\n *\n * @param {Object} target\n * @return {Boolean} `true` if the object has an @@iterator function.\n */\nfunction hasIteratorFunction(target) {\n return typeof Symbol !== 'undefined' &&\n typeof target === 'object' &&\n typeof Symbol.iterator !== 'undefined' &&\n typeof target[Symbol.iterator] === 'function';\n}\n\n/*!\n * Gets all iterator entries from the given Object. If the Object has no @@iterator function, returns an empty array.\n * This will consume the iterator - which could have side effects depending on the @@iterator implementation.\n *\n * @param {Object} target\n * @returns {Array} an array of entries from the @@iterator function\n */\nfunction getIteratorEntries(target) {\n if (hasIteratorFunction(target)) {\n try {\n return getGeneratorEntries(target[Symbol.iterator]());\n } catch (iteratorError) {\n return [];\n }\n }\n return [];\n}\n\n/*!\n * Gets all entries from a Generator. This will consume the generator - which could have side effects.\n *\n * @param {Generator} target\n * @returns {Array} an array of entries from the Generator.\n */\nfunction getGeneratorEntries(generator) {\n var generatorResult = generator.next();\n var accumulator = [ generatorResult.value ];\n while (generatorResult.done === false) {\n generatorResult = generator.next();\n accumulator.push(generatorResult.value);\n }\n return accumulator;\n}\n\n/*!\n * Gets all own and inherited enumerable keys from a target.\n *\n * @param {Object} target\n * @returns {Array} an array of own and inherited enumerable keys from the target.\n */\nfunction getEnumerableKeys(target) {\n var keys = [];\n for (var key in target) {\n keys.push(key);\n }\n return keys;\n}\n\n/*!\n * Determines if two objects have matching values, given a set of keys. Defers to deepEqual for the equality check of\n * each key. If any value of the given key is not equal, the function will return false (early).\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Array} keys An array of keys to compare the values of leftHandOperand and rightHandOperand against\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\nfunction keysEqual(leftHandOperand, rightHandOperand, keys, options) {\n var length = keys.length;\n if (length === 0) {\n return true;\n }\n for (var i = 0; i < length; i += 1) {\n if (deepEqual(leftHandOperand[keys[i]], rightHandOperand[keys[i]], options) === false) {\n return false;\n }\n }\n return true;\n}\n\n/*!\n * Recursively check the equality of two Objects. Once basic sameness has been established it will defer to `deepEqual`\n * for each enumerable key in the object.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction objectEqual(leftHandOperand, rightHandOperand, options) {\n var leftHandKeys = getEnumerableKeys(leftHandOperand);\n var rightHandKeys = getEnumerableKeys(rightHandOperand);\n if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) {\n leftHandKeys.sort();\n rightHandKeys.sort();\n if (iterableEqual(leftHandKeys, rightHandKeys) === false) {\n return false;\n }\n return keysEqual(leftHandOperand, rightHandOperand, leftHandKeys, options);\n }\n\n var leftHandEntries = getIteratorEntries(leftHandOperand);\n var rightHandEntries = getIteratorEntries(rightHandOperand);\n if (leftHandEntries.length && leftHandEntries.length === rightHandEntries.length) {\n leftHandEntries.sort();\n rightHandEntries.sort();\n return iterableEqual(leftHandEntries, rightHandEntries, options);\n }\n\n if (leftHandKeys.length === 0 &&\n leftHandEntries.length === 0 &&\n rightHandKeys.length === 0 &&\n rightHandEntries.length === 0) {\n return true;\n }\n\n return false;\n}\n\n/*!\n * Returns true if the argument is a primitive.\n *\n * This intentionally returns true for all objects that can be compared by reference,\n * including functions and symbols.\n *\n * @param {Mixed} value\n * @return {Boolean} result\n */\nfunction isPrimitive(value) {\n return value === null || typeof value !== 'object';\n}\n\n},{\"type-detect\":39}],36:[function(require,module,exports){\n'use strict';\n\n/* !\n * Chai - getFuncName utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getFuncName(constructorFn)\n *\n * Returns the name of a function.\n * When a non-function instance is passed, returns `null`.\n * This also includes a polyfill function if `aFunc.name` is not defined.\n *\n * @name getFuncName\n * @param {Function} funct\n * @namespace Utils\n * @api public\n */\n\nvar toString = Function.prototype.toString;\nvar functionNameMatch = /\\s*function(?:\\s|\\s*\\/\\*[^(?:*\\/)]+\\*\\/\\s*)*([^\\s\\(\\/]+)/;\nfunction getFuncName(aFunc) {\n if (typeof aFunc !== 'function') {\n return null;\n }\n\n var name = '';\n if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {\n // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined\n var match = toString.call(aFunc).match(functionNameMatch);\n if (match) {\n name = match[1];\n }\n } else {\n // If we've got a `name` property we just use it\n name = aFunc.name;\n }\n\n return name;\n}\n\nmodule.exports = getFuncName;\n\n},{}],37:[function(require,module,exports){\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.loupe = {}));\n}(this, (function (exports) { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var ansiColors = {\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n // 5 & 6 are blinking\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strike: ['9', '29'],\n // 10-20 are fonts\n // 21-29 are resets for 1-9\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n brightblack: ['30;1', '39'],\n brightred: ['31;1', '39'],\n brightgreen: ['32;1', '39'],\n brightyellow: ['33;1', '39'],\n brightblue: ['34;1', '39'],\n brightmagenta: ['35;1', '39'],\n brightcyan: ['36;1', '39'],\n brightwhite: ['37;1', '39'],\n grey: ['90', '39']\n };\n var styles = {\n special: 'cyan',\n number: 'yellow',\n bigint: 'yellow',\n boolean: 'yellow',\n undefined: 'grey',\n null: 'bold',\n string: 'green',\n symbol: 'green',\n date: 'magenta',\n regexp: 'red'\n };\n var truncator = '\u2026';\n\n function colorise(value, styleType) {\n var color = ansiColors[styles[styleType]] || ansiColors[styleType];\n\n if (!color) {\n return String(value);\n }\n\n return \"\\x1B[\".concat(color[0], \"m\").concat(String(value), \"\\x1B[\").concat(color[1], \"m\");\n }\n\n function normaliseOptions() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$showHidden = _ref.showHidden,\n showHidden = _ref$showHidden === void 0 ? false : _ref$showHidden,\n _ref$depth = _ref.depth,\n depth = _ref$depth === void 0 ? 2 : _ref$depth,\n _ref$colors = _ref.colors,\n colors = _ref$colors === void 0 ? false : _ref$colors,\n _ref$customInspect = _ref.customInspect,\n customInspect = _ref$customInspect === void 0 ? true : _ref$customInspect,\n _ref$showProxy = _ref.showProxy,\n showProxy = _ref$showProxy === void 0 ? false : _ref$showProxy,\n _ref$maxArrayLength = _ref.maxArrayLength,\n maxArrayLength = _ref$maxArrayLength === void 0 ? Infinity : _ref$maxArrayLength,\n _ref$breakLength = _ref.breakLength,\n breakLength = _ref$breakLength === void 0 ? Infinity : _ref$breakLength,\n _ref$seen = _ref.seen,\n seen = _ref$seen === void 0 ? [] : _ref$seen,\n _ref$truncate = _ref.truncate,\n truncate = _ref$truncate === void 0 ? Infinity : _ref$truncate,\n _ref$stylize = _ref.stylize,\n stylize = _ref$stylize === void 0 ? String : _ref$stylize;\n\n var options = {\n showHidden: Boolean(showHidden),\n depth: Number(depth),\n colors: Boolean(colors),\n customInspect: Boolean(customInspect),\n showProxy: Boolean(showProxy),\n maxArrayLength: Number(maxArrayLength),\n breakLength: Number(breakLength),\n truncate: Number(truncate),\n seen: seen,\n stylize: stylize\n };\n\n if (options.colors) {\n options.stylize = colorise;\n }\n\n return options;\n }\n function truncate(string, length) {\n var tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : truncator;\n string = String(string);\n var tailLength = tail.length;\n var stringLength = string.length;\n\n if (tailLength > length && stringLength > tailLength) {\n return tail;\n }\n\n if (stringLength > length && stringLength > tailLength) {\n return \"\".concat(string.slice(0, length - tailLength)).concat(tail);\n }\n\n return string;\n } // eslint-disable-next-line complexity\n\n function inspectList(list, options, inspectItem) {\n var separator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ', ';\n inspectItem = inspectItem || options.inspect;\n var size = list.length;\n if (size === 0) return '';\n var originalLength = options.truncate;\n var output = '';\n var peek = '';\n var truncated = '';\n\n for (var i = 0; i < size; i += 1) {\n var last = i + 1 === list.length;\n var secondToLast = i + 2 === list.length;\n truncated = \"\".concat(truncator, \"(\").concat(list.length - i, \")\");\n var value = list[i]; // If there is more than one remaining we need to account for a separator of `, `\n\n options.truncate = originalLength - output.length - (last ? 0 : separator.length);\n var string = peek || inspectItem(value, options) + (last ? '' : separator);\n var nextLength = output.length + string.length;\n var truncatedLength = nextLength + truncated.length; // If this is the last element, and adding it would\n // take us over length, but adding the truncator wouldn't - then break now\n\n if (last && nextLength > originalLength && output.length + truncated.length <= originalLength) {\n break;\n } // If this isn't the last or second to last element to scan,\n // but the string is already over length then break here\n\n\n if (!last && !secondToLast && truncatedLength > originalLength) {\n break;\n } // Peek at the next string to determine if we should\n // break early before adding this item to the output\n\n\n peek = last ? '' : inspectItem(list[i + 1], options) + (secondToLast ? '' : separator); // If we have one element left, but this element and\n // the next takes over length, the break early\n\n if (!last && secondToLast && truncatedLength > originalLength && nextLength + peek.length > originalLength) {\n break;\n }\n\n output += string; // If the next element takes us to length -\n // but there are more after that, then we should truncate now\n\n if (!last && !secondToLast && nextLength + peek.length >= originalLength) {\n truncated = \"\".concat(truncator, \"(\").concat(list.length - i - 1, \")\");\n break;\n }\n\n truncated = '';\n }\n\n return \"\".concat(output).concat(truncated);\n }\n\n function quoteComplexKey(key) {\n if (key.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/)) {\n return key;\n }\n\n return JSON.stringify(key).replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\");\n }\n\n function inspectProperty(_ref2, options) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n value = _ref3[1];\n\n options.truncate -= 2;\n\n if (typeof key === 'string') {\n key = quoteComplexKey(key);\n } else if (typeof key !== 'number') {\n key = \"[\".concat(options.inspect(key, options), \"]\");\n }\n\n options.truncate -= key.length;\n value = options.inspect(value, options);\n return \"\".concat(key, \": \").concat(value);\n }\n\n function inspectArray(array, options) {\n // Object.keys will always output the Array indices first, so we can slice by\n // `array.length` to get non-index properties\n var nonIndexProperties = Object.keys(array).slice(array.length);\n if (!array.length && !nonIndexProperties.length) return '[]';\n options.truncate -= 4;\n var listContents = inspectList(array, options);\n options.truncate -= listContents.length;\n var propertyContents = '';\n\n if (nonIndexProperties.length) {\n propertyContents = inspectList(nonIndexProperties.map(function (key) {\n return [key, array[key]];\n }), options, inspectProperty);\n }\n\n return \"[ \".concat(listContents).concat(propertyContents ? \", \".concat(propertyContents) : '', \" ]\");\n }\n\n /* !\n * Chai - getFuncName utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n /**\n * ### .getFuncName(constructorFn)\n *\n * Returns the name of a function.\n * When a non-function instance is passed, returns `null`.\n * This also includes a polyfill function if `aFunc.name` is not defined.\n *\n * @name getFuncName\n * @param {Function} funct\n * @namespace Utils\n * @api public\n */\n\n var toString = Function.prototype.toString;\n var functionNameMatch = /\\s*function(?:\\s|\\s*\\/\\*[^(?:*\\/)]+\\*\\/\\s*)*([^\\s\\(\\/]+)/;\n function getFuncName(aFunc) {\n if (typeof aFunc !== 'function') {\n return null;\n }\n\n var name = '';\n if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {\n // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined\n var match = toString.call(aFunc).match(functionNameMatch);\n if (match) {\n name = match[1];\n }\n } else {\n // If we've got a `name` property we just use it\n name = aFunc.name;\n }\n\n return name;\n }\n\n var getFuncName_1 = getFuncName;\n\n var getArrayName = function getArrayName(array) {\n // We need to special case Node.js' Buffers, which report to be Uint8Array\n if (typeof Buffer === 'function' && array instanceof Buffer) {\n return 'Buffer';\n }\n\n if (array[Symbol.toStringTag]) {\n return array[Symbol.toStringTag];\n }\n\n return getFuncName_1(array.constructor);\n };\n\n function inspectTypedArray(array, options) {\n var name = getArrayName(array);\n options.truncate -= name.length + 4; // Object.keys will always output the Array indices first, so we can slice by\n // `array.length` to get non-index properties\n\n var nonIndexProperties = Object.keys(array).slice(array.length);\n if (!array.length && !nonIndexProperties.length) return \"\".concat(name, \"[]\"); // As we know TypedArrays only contain Unsigned Integers, we can skip inspecting each one and simply\n // stylise the toString() value of them\n\n var output = '';\n\n for (var i = 0; i < array.length; i++) {\n var string = \"\".concat(options.stylize(truncate(array[i], options.truncate), 'number')).concat(i === array.length - 1 ? '' : ', ');\n options.truncate -= string.length;\n\n if (array[i] !== array.length && options.truncate <= 3) {\n output += \"\".concat(truncator, \"(\").concat(array.length - array[i] + 1, \")\");\n break;\n }\n\n output += string;\n }\n\n var propertyContents = '';\n\n if (nonIndexProperties.length) {\n propertyContents = inspectList(nonIndexProperties.map(function (key) {\n return [key, array[key]];\n }), options, inspectProperty);\n }\n\n return \"\".concat(name, \"[ \").concat(output).concat(propertyContents ? \", \".concat(propertyContents) : '', \" ]\");\n }\n\n function inspectDate(dateObject, options) {\n // If we need to - truncate the time portion, but never the date\n var split = dateObject.toJSON().split('T');\n var date = split[0];\n return options.stylize(\"\".concat(date, \"T\").concat(truncate(split[1], options.truncate - date.length - 1)), 'date');\n }\n\n function inspectFunction(func, options) {\n var name = getFuncName_1(func);\n\n if (!name) {\n return options.stylize('[Function]', 'special');\n }\n\n return options.stylize(\"[Function \".concat(truncate(name, options.truncate - 11), \"]\"), 'special');\n }\n\n function inspectMapEntry(_ref, options) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n options.truncate -= 4;\n key = options.inspect(key, options);\n options.truncate -= key.length;\n value = options.inspect(value, options);\n return \"\".concat(key, \" => \").concat(value);\n } // IE11 doesn't support `map.entries()`\n\n\n function mapToEntries(map) {\n var entries = [];\n map.forEach(function (value, key) {\n entries.push([key, value]);\n });\n return entries;\n }\n\n function inspectMap(map, options) {\n var size = map.size - 1;\n\n if (size <= 0) {\n return 'Map{}';\n }\n\n options.truncate -= 7;\n return \"Map{ \".concat(inspectList(mapToEntries(map), options, inspectMapEntry), \" }\");\n }\n\n var isNaN = Number.isNaN || function (i) {\n return i !== i;\n }; // eslint-disable-line no-self-compare\n\n\n function inspectNumber(number, options) {\n if (isNaN(number)) {\n return options.stylize('NaN', 'number');\n }\n\n if (number === Infinity) {\n return options.stylize('Infinity', 'number');\n }\n\n if (number === -Infinity) {\n return options.stylize('-Infinity', 'number');\n }\n\n if (number === 0) {\n return options.stylize(1 / number === Infinity ? '+0' : '-0', 'number');\n }\n\n return options.stylize(truncate(number, options.truncate), 'number');\n }\n\n function inspectBigInt(number, options) {\n var nums = truncate(number.toString(), options.truncate - 1);\n if (nums !== truncator) nums += 'n';\n return options.stylize(nums, 'bigint');\n }\n\n function inspectRegExp(value, options) {\n var flags = value.toString().split('/')[2];\n var sourceLength = options.truncate - (2 + flags.length);\n var source = value.source;\n return options.stylize(\"/\".concat(truncate(source, sourceLength), \"/\").concat(flags), 'regexp');\n }\n\n function arrayFromSet(set) {\n var values = [];\n set.forEach(function (value) {\n values.push(value);\n });\n return values;\n }\n\n function inspectSet(set, options) {\n if (set.size === 0) return 'Set{}';\n options.truncate -= 7;\n return \"Set{ \".concat(inspectList(arrayFromSet(set), options), \" }\");\n }\n\n var stringEscapeChars = new RegExp(\"['\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u00ad\\\\u0600-\\\\u0604\\\\u070f\\\\u17b4\\\\u17b5\" + \"\\\\u200c-\\\\u200f\\\\u2028-\\\\u202f\\\\u2060-\\\\u206f\\\\ufeff\\\\ufff0-\\\\uffff]\", 'g');\n var escapeCharacters = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\'\n };\n var hex = 16;\n var unicodeLength = 4;\n\n function escape(char) {\n return escapeCharacters[char] || \"\\\\u\".concat(\"0000\".concat(char.charCodeAt(0).toString(hex)).slice(-unicodeLength));\n }\n\n function inspectString(string, options) {\n if (stringEscapeChars.test(string)) {\n string = string.replace(stringEscapeChars, escape);\n }\n\n return options.stylize(\"'\".concat(truncate(string, options.truncate - 2), \"'\"), 'string');\n }\n\n function inspectSymbol(value) {\n if ('description' in Symbol.prototype) {\n return value.description ? \"Symbol(\".concat(value.description, \")\") : 'Symbol()';\n }\n\n return value.toString();\n }\n\n var getPromiseValue = function getPromiseValue() {\n return 'Promise{\u2026}';\n };\n\n try {\n var _process$binding = process.binding('util'),\n getPromiseDetails = _process$binding.getPromiseDetails,\n kPending = _process$binding.kPending,\n kRejected = _process$binding.kRejected;\n\n if (Array.isArray(getPromiseDetails(Promise.resolve()))) {\n getPromiseValue = function getPromiseValue(value, options) {\n var _getPromiseDetails = getPromiseDetails(value),\n _getPromiseDetails2 = _slicedToArray(_getPromiseDetails, 2),\n state = _getPromiseDetails2[0],\n innerValue = _getPromiseDetails2[1];\n\n if (state === kPending) {\n return 'Promise{<pending>}';\n }\n\n return \"Promise\".concat(state === kRejected ? '!' : '', \"{\").concat(options.inspect(innerValue, options), \"}\");\n };\n }\n } catch (notNode) {\n /* ignore */\n }\n\n var inspectPromise = getPromiseValue;\n\n function inspectObject(object, options) {\n var properties = Object.getOwnPropertyNames(object);\n var symbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : [];\n\n if (properties.length === 0 && symbols.length === 0) {\n return '{}';\n }\n\n options.truncate -= 4;\n options.seen = options.seen || [];\n\n if (options.seen.indexOf(object) >= 0) {\n return '[Circular]';\n }\n\n options.seen.push(object);\n var propertyContents = inspectList(properties.map(function (key) {\n return [key, object[key]];\n }), options, inspectProperty);\n var symbolContents = inspectList(symbols.map(function (key) {\n return [key, object[key]];\n }), options, inspectProperty);\n options.seen.pop();\n var sep = '';\n\n if (propertyContents && symbolContents) {\n sep = ', ';\n }\n\n return \"{ \".concat(propertyContents).concat(sep).concat(symbolContents, \" }\");\n }\n\n var toStringTag = typeof Symbol !== 'undefined' && Symbol.toStringTag ? Symbol.toStringTag : false;\n function inspectClass(value, options) {\n var name = '';\n\n if (toStringTag && toStringTag in value) {\n name = value[toStringTag];\n }\n\n name = name || getFuncName_1(value.constructor); // Babel transforms anonymous classes to the name `_class`\n\n if (!name || name === '_class') {\n name = '<Anonymous Class>';\n }\n\n options.truncate -= name.length;\n return \"\".concat(name).concat(inspectObject(value, options));\n }\n\n function inspectArguments(args, options) {\n if (args.length === 0) return 'Arguments[]';\n options.truncate -= 13;\n return \"Arguments[ \".concat(inspectList(args, options), \" ]\");\n }\n\n var errorKeys = ['stack', 'line', 'column', 'name', 'message', 'fileName', 'lineNumber', 'columnNumber', 'number', 'description'];\n function inspectObject$1(error, options) {\n var properties = Object.getOwnPropertyNames(error).filter(function (key) {\n return errorKeys.indexOf(key) === -1;\n });\n var name = error.name;\n options.truncate -= name.length;\n var message = '';\n\n if (typeof error.message === 'string') {\n message = truncate(error.message, options.truncate);\n } else {\n properties.unshift('message');\n }\n\n message = message ? \": \".concat(message) : '';\n options.truncate -= message.length + 5;\n var propertyContents = inspectList(properties.map(function (key) {\n return [key, error[key]];\n }), options, inspectProperty);\n return \"\".concat(name).concat(message).concat(propertyContents ? \" { \".concat(propertyContents, \" }\") : '');\n }\n\n function inspectAttribute(_ref, options) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n options.truncate -= 3;\n\n if (!value) {\n return \"\".concat(options.stylize(key, 'yellow'));\n }\n\n return \"\".concat(options.stylize(key, 'yellow'), \"=\").concat(options.stylize(\"\\\"\".concat(value, \"\\\"\"), 'string'));\n }\n function inspectHTMLCollection(collection, options) {\n // eslint-disable-next-line no-use-before-define\n return inspectList(collection, options, inspectHTML, '\\n');\n }\n function inspectHTML(element, options) {\n var properties = element.getAttributeNames();\n var name = element.tagName.toLowerCase();\n var head = options.stylize(\"<\".concat(name), 'special');\n var headClose = options.stylize(\">\", 'special');\n var tail = options.stylize(\"</\".concat(name, \">\"), 'special');\n options.truncate -= name.length * 2 + 5;\n var propertyContents = '';\n\n if (properties.length > 0) {\n propertyContents += ' ';\n propertyContents += inspectList(properties.map(function (key) {\n return [key, element.getAttribute(key)];\n }), options, inspectAttribute, ' ');\n }\n\n options.truncate -= propertyContents.length;\n var truncate = options.truncate;\n var children = inspectHTMLCollection(element.children, options);\n\n if (children && children.length > truncate) {\n children = \"\".concat(truncator, \"(\").concat(element.children.length, \")\");\n }\n\n return \"\".concat(head).concat(propertyContents).concat(headClose).concat(children).concat(tail);\n }\n\n var symbolsSupported = typeof Symbol === 'function' && typeof Symbol.for === 'function';\n var chaiInspect = symbolsSupported ? Symbol.for('chai/inspect') : '@@chai/inspect';\n var nodeInspect = false;\n\n try {\n // eslint-disable-next-line global-require\n var nodeUtil = require('util');\n\n nodeInspect = nodeUtil.inspect ? nodeUtil.inspect.custom : false;\n } catch (noNodeInspect) {\n nodeInspect = false;\n }\n\n var constructorMap = new WeakMap();\n var stringTagMap = {};\n var baseTypesMap = {\n undefined: function undefined$1(value, options) {\n return options.stylize('undefined', 'undefined');\n },\n null: function _null(value, options) {\n return options.stylize(null, 'null');\n },\n boolean: function boolean(value, options) {\n return options.stylize(value, 'boolean');\n },\n Boolean: function Boolean(value, options) {\n return options.stylize(value, 'boolean');\n },\n number: inspectNumber,\n Number: inspectNumber,\n bigint: inspectBigInt,\n BigInt: inspectBigInt,\n string: inspectString,\n String: inspectString,\n function: inspectFunction,\n Function: inspectFunction,\n symbol: inspectSymbol,\n // A Symbol polyfill will return `Symbol` not `symbol` from typedetect\n Symbol: inspectSymbol,\n Array: inspectArray,\n Date: inspectDate,\n Map: inspectMap,\n Set: inspectSet,\n RegExp: inspectRegExp,\n Promise: inspectPromise,\n // WeakSet, WeakMap are totally opaque to us\n WeakSet: function WeakSet(value, options) {\n return options.stylize('WeakSet{\u2026}', 'special');\n },\n WeakMap: function WeakMap(value, options) {\n return options.stylize('WeakMap{\u2026}', 'special');\n },\n Arguments: inspectArguments,\n Int8Array: inspectTypedArray,\n Uint8Array: inspectTypedArray,\n Uint8ClampedArray: inspectTypedArray,\n Int16Array: inspectTypedArray,\n Uint16Array: inspectTypedArray,\n Int32Array: inspectTypedArray,\n Uint32Array: inspectTypedArray,\n Float32Array: inspectTypedArray,\n Float64Array: inspectTypedArray,\n Generator: function Generator() {\n return '';\n },\n DataView: function DataView() {\n return '';\n },\n ArrayBuffer: function ArrayBuffer() {\n return '';\n },\n Error: inspectObject$1,\n HTMLCollection: inspectHTMLCollection,\n NodeList: inspectHTMLCollection\n }; // eslint-disable-next-line complexity\n\n var inspectCustom = function inspectCustom(value, options, type) {\n if (chaiInspect in value && typeof value[chaiInspect] === 'function') {\n return value[chaiInspect](options);\n }\n\n if (nodeInspect && nodeInspect in value && typeof value[nodeInspect] === 'function') {\n return value[nodeInspect](options.depth, options);\n }\n\n if ('inspect' in value && typeof value.inspect === 'function') {\n return value.inspect(options.depth, options);\n }\n\n if ('constructor' in value && constructorMap.has(value.constructor)) {\n return constructorMap.get(value.constructor)(value, options);\n }\n\n if (stringTagMap[type]) {\n return stringTagMap[type](value, options);\n }\n\n return '';\n };\n\n var toString$1 = Object.prototype.toString; // eslint-disable-next-line complexity\n\n function inspect(value, options) {\n options = normaliseOptions(options);\n options.inspect = inspect;\n var _options = options,\n customInspect = _options.customInspect;\n var type = value === null ? 'null' : _typeof(value);\n\n if (type === 'object') {\n type = toString$1.call(value).slice(8, -1);\n } // If it is a base value that we already support, then use Loupe's inspector\n\n\n if (baseTypesMap[type]) {\n return baseTypesMap[type](value, options);\n } // If `options.customInspect` is set to true then try to use the custom inspector\n\n\n if (customInspect && value) {\n var output = inspectCustom(value, options, type);\n\n if (output) {\n if (typeof output === 'string') return output;\n return inspect(output, options);\n }\n }\n\n var proto = value ? Object.getPrototypeOf(value) : false; // If it's a plain Object then use Loupe's inspector\n\n if (proto === Object.prototype || proto === null) {\n return inspectObject(value, options);\n } // Specifically account for HTMLElements\n // eslint-disable-next-line no-undef\n\n\n if (value && typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return inspectHTML(value, options);\n }\n\n if ('constructor' in value) {\n // If it is a class, inspect it like an object but add the constructor name\n if (value.constructor !== Object) {\n return inspectClass(value, options);\n } // If it is an object with an anonymous prototype, display it as an object.\n\n\n return inspectObject(value, options);\n } // We have run out of options! Just stringify the value\n\n\n return options.stylize(String(value), type);\n }\n function registerConstructor(constructor, inspector) {\n if (constructorMap.has(constructor)) {\n return false;\n }\n\n constructorMap.add(constructor, inspector);\n return true;\n }\n function registerStringTag(stringTag, inspector) {\n if (stringTag in stringTagMap) {\n return false;\n }\n\n stringTagMap[stringTag] = inspector;\n return true;\n }\n var custom = chaiInspect;\n\n exports.custom = custom;\n exports.default = inspect;\n exports.inspect = inspect;\n exports.registerConstructor = registerConstructor;\n exports.registerStringTag = registerStringTag;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{\"util\":undefined}],38:[function(require,module,exports){\n'use strict';\n\n/* !\n * Chai - pathval utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has own\n * or inherited from prototype chain named property.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with null/undefined values\n * and other primitives.\n *\n * var obj = {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n *\n * The following would be the results.\n *\n * hasProperty(obj, 'str'); // true\n * hasProperty(obj, 'constructor'); // true\n * hasProperty(obj, 'bar'); // false\n *\n * hasProperty(obj.str, 'length'); // true\n * hasProperty(obj.str, 1); // true\n * hasProperty(obj.str, 5); // false\n *\n * hasProperty(obj.arr, 'length'); // true\n * hasProperty(obj.arr, 2); // true\n * hasProperty(obj.arr, 3); // false\n *\n * @param {Object} object\n * @param {String|Symbol} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name hasProperty\n * @api public\n */\n\nfunction hasProperty(obj, name) {\n if (typeof obj === 'undefined' || obj === null) {\n return false;\n }\n\n // The `in` operator does not work with primitives.\n return name in Object(obj);\n}\n\n/* !\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `internalGetPathValue`.\n *\n * var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be infinitely deep and nested.\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath(path) {\n var str = path.replace(/([^\\\\])\\[/g, '$1.[');\n var parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n return parts.map(function mapMatches(value) {\n if (\n value === 'constructor' ||\n value === '__proto__' ||\n value === 'prototype'\n ) {\n return {};\n }\n var regexp = /^\\[(\\d+)\\]$/;\n var mArr = regexp.exec(value);\n var parsed = null;\n if (mArr) {\n parsed = { i: parseFloat(mArr[1]) };\n } else {\n parsed = { p: value.replace(/\\\\([.[\\]])/g, '$1') };\n }\n\n return parsed;\n });\n}\n\n/* !\n * ## internalGetPathValue(obj, parsed[, pathDepth])\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n * var value = getPathValue(obj, parsed);\n *\n * @param {Object} object to search against\n * @param {Object} parsed definition from `parsePath`.\n * @param {Number} depth (nesting level) of the property we want to retrieve\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction internalGetPathValue(obj, parsed, pathDepth) {\n var temporaryValue = obj;\n var res = null;\n pathDepth = typeof pathDepth === 'undefined' ? parsed.length : pathDepth;\n\n for (var i = 0; i < pathDepth; i++) {\n var part = parsed[i];\n if (temporaryValue) {\n if (typeof part.p === 'undefined') {\n temporaryValue = temporaryValue[part.i];\n } else {\n temporaryValue = temporaryValue[part.p];\n }\n\n if (i === pathDepth - 1) {\n res = temporaryValue;\n }\n }\n }\n\n return res;\n}\n\n/* !\n * ## internalSetPathValue(obj, value, parsed)\n *\n * Companion function for `parsePath` that sets\n * the value located at a parsed address.\n *\n * internalSetPathValue(obj, 'value', parsed);\n *\n * @param {Object} object to search and define on\n * @param {*} value to use upon set\n * @param {Object} parsed definition from `parsePath`\n * @api private\n */\n\nfunction internalSetPathValue(obj, val, parsed) {\n var tempObj = obj;\n var pathDepth = parsed.length;\n var part = null;\n // Here we iterate through every part of the path\n for (var i = 0; i < pathDepth; i++) {\n var propName = null;\n var propVal = null;\n part = parsed[i];\n\n // If it's the last part of the path, we set the 'propName' value with the property name\n if (i === pathDepth - 1) {\n propName = typeof part.p === 'undefined' ? part.i : part.p;\n // Now we set the property with the name held by 'propName' on object with the desired val\n tempObj[propName] = val;\n } else if (typeof part.p !== 'undefined' && tempObj[part.p]) {\n tempObj = tempObj[part.p];\n } else if (typeof part.i !== 'undefined' && tempObj[part.i]) {\n tempObj = tempObj[part.i];\n } else {\n // If the obj doesn't have the property we create one with that name to define it\n var next = parsed[i + 1];\n // Here we set the name of the property which will be defined\n propName = typeof part.p === 'undefined' ? part.i : part.p;\n // Here we decide if this property will be an array or a new object\n propVal = typeof next.p === 'undefined' ? [] : {};\n tempObj[propName] = propVal;\n tempObj = tempObj[propName];\n }\n }\n}\n\n/**\n * ### .getPathInfo(object, path)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {Object} object\n * @param {String} path\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nfunction getPathInfo(obj, path) {\n var parsed = parsePath(path);\n var last = parsed[parsed.length - 1];\n var info = {\n parent:\n parsed.length > 1 ?\n internalGetPathValue(obj, parsed, parsed.length - 1) :\n obj,\n name: last.p || last.i,\n value: internalGetPathValue(obj, parsed),\n };\n info.exists = hasProperty(info.parent, info.name);\n\n return info;\n}\n\n/**\n * ### .getPathValue(object, path)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * }\n *\n * The following would be the results.\n *\n * getPathValue(obj, 'prop1.str'); // Hello\n * getPathValue(obj, 'prop1.att[2]'); // b\n * getPathValue(obj, 'prop2.arr[0].nested'); // Universe\n *\n * @param {Object} object\n * @param {String} path\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\n\nfunction getPathValue(obj, path) {\n var info = getPathInfo(obj, path);\n return info.value;\n}\n\n/**\n * ### .setPathValue(object, path, value)\n *\n * Define the value in an object at a given string path.\n *\n * ```js\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * };\n * ```\n *\n * The following would be acceptable.\n *\n * ```js\n * var properties = require('tea-properties');\n * properties.set(obj, 'prop1.str', 'Hello Universe!');\n * properties.set(obj, 'prop1.arr[2]', 'B');\n * properties.set(obj, 'prop2.arr[0].nested.value', { hello: 'universe' });\n * ```\n *\n * @param {Object} object\n * @param {String} path\n * @param {Mixed} value\n * @api private\n */\n\nfunction setPathValue(obj, path, val) {\n var parsed = parsePath(path);\n internalSetPathValue(obj, val, parsed);\n return obj;\n}\n\nmodule.exports = {\n hasProperty: hasProperty,\n getPathInfo: getPathInfo,\n getPathValue: getPathValue,\n setPathValue: setPathValue,\n};\n\n},{}],39:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec \u00B11.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec \u00B14.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec \u00B11.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec \u00B11.92% (75 runs sampled)\n * function x 2,556,769 ops/sec \u00B11.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec \u00B11.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec \u00B11.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec \u00B11.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec \u00B11.07% (82 runs sampled)\n * function x 31,296,870 ops/sec \u00B10.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec \u00B11.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec \u00B11.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec \u00B10.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec \u00B10.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec \u00B11.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec \u00B12.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec \u00B11.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec \u00B12.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec \u00B12.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec \u00B12.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec \u00B15.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec \u00B14.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec \u00B14.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec \u00B113.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec \u00B11.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec \u00B11.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec \u00B11.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec \u00B11.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec \u00B13.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec \u00B11.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec \u00B11.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec \u00B11.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec \u00B11.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec \u00B12.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec \u00B10.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec \u00B10.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec \u00B14.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec \u00B11.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec \u00B11.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec \u00B11.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec \u00B11.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec \u00B16.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec \u00B12.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec \u00B12.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec \u00B12.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec \u00B11.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec \u00B11.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec \u00B10.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n\n},{}]},{},[1])(1)\n});\n", "(function(chaiDom) {\n if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n module.exports = chaiDom\n } else if (typeof define === 'function' && define.amd) {\n define(function() {\n return chaiDom\n })\n } else {\n chai.use(chaiDom)\n }\n}(function(chai, utils) {\n var flag = utils.flag,\n\n elToString = function(el) {\n var desc\n if (isNodeList(el)) {\n if (el.length === 0) {\n return 'empty NodeList'\n }\n\n desc = Array.prototype.slice.call(el, 0, 5).map(elToString).join(', ')\n return el.length > 5 ? desc + '... (+' + (el.length - 5) + ' more)' : desc\n }\n if (!isHTMLElement(el)) {\n return String(el)\n }\n\n desc = el.tagName.toLowerCase()\n if (el.id) {\n desc += '#' + el.id\n }\n if (el.className) {\n desc += '.' + String(el.className).replace(/\\s+/g, '.')\n }\n Array.prototype.forEach.call(el.attributes, function(attr) {\n if (attr.name !== 'class' && attr.name !== 'id') {\n desc += '[' + attr.name + (attr.value ? '=\"' + attr.value + '\"]' : ']')\n }\n })\n return desc\n },\n\n attrAssert = function(name, val) {\n var el = flag(this, 'object'), actual = el.getAttribute(name)\n\n if (!flag(this, 'negate') || undefined === val) {\n this.assert(\n !!el.attributes[name]\n , 'expected ' + elToString(el) + ' to have an attribute #{exp}'\n , 'expected ' + elToString(el) + ' not to have an attribute #{exp}'\n , name\n )\n }\n\n if (undefined !== val) {\n this.assert(\n val === actual\n , 'expected ' + elToString(el) + ' to have an attribute ' + utils.inspect(name) + ' with the value #{exp}, but the value was #{act}'\n , 'expected ' + elToString(el) + ' not to have an attribute ' + utils.inspect(name) + ' with the value #{act}'\n , val\n , actual\n )\n }\n\n flag(this, 'object', actual)\n },\n\n isHTMLElement = function(el) {\n return el.nodeType === 1 // window.Node.ELEMENT_NODE\n },\n\n isNodeList = function(obj) {\n return Object.prototype.toString.call(obj) === '[object NodeList]'\n }\n\n utils.elToString = elToString\n chai.Assertion.addMethod('attr', attrAssert)\n chai.Assertion.addMethod('attribute', attrAssert)\n\n chai.Assertion.addMethod('class', function(className) {\n var el = flag(this, 'object')\n\n if (className instanceof RegExp) {\n return this.assert(\n Array.from(el.classList).some(function(cls) { return className.test(cls) })\n , 'expected ' + elToString(el) + ' to have class matching #{exp}'\n , 'expected ' + elToString(el) + ' not to have class matching #{exp}'\n , className\n )\n } \n \n this.assert(\n el.classList.contains(className)\n , 'expected ' + elToString(el) + ' to have class #{exp}'\n , 'expected ' + elToString(el) + ' not to have class #{exp}'\n , className\n )\n })\n\n chai.Assertion.addMethod('id', function(id) {\n var el = flag(this, 'object')\n this.assert(\n el.id == id\n , 'expected ' + elToString(el) + ' to have id #{exp}'\n , 'expected ' + elToString(el) + ' not to have id #{exp}'\n , id\n )\n })\n\n chai.Assertion.addMethod('html', function(html) {\n var el = flag(this, 'object'), actual = flag(this, 'object').innerHTML\n\n if (flag(this, 'contains')) {\n this.assert(\n actual.indexOf(html) >= 0\n , 'expected #{act} to contain HTML #{exp}'\n , 'expected #{act} not to contain HTML #{exp}'\n , html\n , actual\n )\n } else {\n this.assert(\n actual === html\n , 'expected ' + elToString(el) + ' to have HTML #{exp}, but the HTML was #{act}'\n , 'expected ' + elToString(el) + ' not to have HTML #{exp}'\n , html\n , actual\n )\n }\n })\n\n chai.Assertion.addChainableMethod('trimmed', null, function() {\n flag(this, 'trim-text', true)\n })\n\n chai.Assertion.addProperty('rendered', function() {\n flag(this, 'rendered-text', true)\n })\n\n chai.Assertion.addMethod('text', function(text) {\n var obj = flag(this, 'object'), contains = flag(this, 'contains'),\n trim = flag(this, 'trim-text'), actual, result\n var property = flag(this, 'rendered-text') ? 'innerText' : 'textContent'\n\n if (isNodeList(obj)) {\n actual = Array.prototype.map.call(obj, function(el) { return trim ? el[property].trim() : el[property] })\n if (Array.isArray(text)) {\n result = contains ?\n text[flag(this, 'negate') ? 'some' : 'every'](function(t) {\n return Array.prototype.some.call(obj, function(el) {\n return (trim ? el[property].trim() : el[property]) === t\n })\n })\n :\n utils.eql(actual, text)\n\n actual = actual.join()\n text = text.join()\n } else {\n actual = actual.join('')\n result = contains ? actual.indexOf(text) >= 0 : actual === text\n }\n } else {\n actual = trim ? obj[property].trim() : obj[property]\n result = contains ? actual.indexOf(text) >= 0 : actual === text\n }\n\n var objDesc = elToString(obj)\n var textMsg = ''\n\n if (trim) {\n textMsg += 'trimmed '\n }\n if (flag(this, 'rendered-text')) {\n textMsg += 'rendered '\n }\n textMsg += 'text'\n\n if (contains) {\n this.assert(\n result\n , 'expected ' + objDesc + ' to contain #{exp}, but the ' + textMsg + ' was #{act}'\n , 'expected ' + objDesc + ' not to contain #{exp}, but the ' + textMsg + ' was #{act}'\n , text\n , actual\n )\n } else {\n this.assert(\n result\n , 'expected ' + objDesc + ' to have ' + textMsg + ' #{exp}, but the ' + textMsg + ' was #{act}'\n , 'expected ' + objDesc + ' not to have ' + textMsg + ' #{exp}'\n , text\n , actual\n )\n }\n })\n\n chai.Assertion.addMethod('value', function(value) {\n var el = flag(this, 'object'), actual = flag(this, 'object').value\n this.assert(\n flag(this, 'object').value === value\n , 'expected ' + elToString(el) + ' to have value #{exp}, but the value was #{act}'\n , 'expected ' + elToString(el) + ' not to have value #{exp}'\n , value\n , actual\n )\n })\n\n chai.Assertion.overwriteProperty('exist', function(_super) {\n return function() {\n var obj = flag(this, 'object')\n if (isNodeList(obj)) {\n this.assert(\n obj.length > 0\n , 'expected an empty NodeList to have nodes'\n , 'expected ' + elToString(obj) + ' to not exist')\n } else {\n _super.apply(this, arguments)\n }\n }\n })\n\n chai.Assertion.overwriteProperty('empty', function(_super) {\n return function() {\n var obj = flag(this, 'object')\n if (isHTMLElement(obj)) {\n this.assert(\n obj.children.length === 0\n , 'expected ' + elToString(obj) + ' to be empty'\n , 'expected ' + elToString(obj) + ' to not be empty')\n } else if (isNodeList(obj)) {\n this.assert(\n obj.length === 0\n , 'expected ' + elToString(obj) + ' to be empty'\n , 'expected ' + elToString(obj) + ' to not be empty')\n } else {\n _super.apply(this, arguments)\n }\n }\n })\n\n chai.Assertion.overwriteChainableMethod('length',\n function(_super) {\n return function(length) {\n var obj = flag(this, 'object')\n if (isNodeList(obj) || isHTMLElement(obj)) {\n var actualLength = obj.children ? obj.children.length : obj.length\n this.assert(\n actualLength === length\n , 'expected ' + elToString(obj) + ' to have #{exp} children but it had #{act} children'\n , 'expected ' + elToString(obj) + ' to not have #{exp} children'\n , length\n , actualLength\n )\n } else {\n _super.apply(this, arguments)\n }\n }\n },\n function(_super) {\n return function() {\n _super.call(this)\n }\n }\n )\n\n\n chai.Assertion.overwriteMethod('match', function(_super) {\n return function(selector) {\n var obj = flag(this, 'object')\n if (isHTMLElement(obj)) {\n this.assert(\n obj.matches(selector)\n , 'expected ' + elToString(obj) + ' to match #{exp}'\n , 'expected ' + elToString(obj) + ' to not match #{exp}'\n , selector\n )\n } else if (isNodeList(obj)) {\n this.assert(\n (!!obj.length && Array.prototype.every.call(obj, function(el) { return el.matches(selector) }))\n , 'expected ' + elToString(obj) + ' to match #{exp}'\n , 'expected ' + elToString(obj) + ' to not match #{exp}'\n , selector\n )\n } else {\n _super.apply(this, arguments)\n }\n }\n })\n\n chai.Assertion.overwriteChainableMethod('contain',\n function(_super) {\n return function(subitem) {\n var obj = flag(this, 'object')\n if (isHTMLElement(obj)) {\n if (typeof subitem === 'string') {\n this.assert(\n !!obj.querySelector(subitem)\n , 'expected ' + elToString(obj) + ' to contain #{exp}'\n , 'expected ' + elToString(obj) + ' to not contain #{exp}'\n , subitem)\n } else {\n this.assert(\n obj.contains(subitem)\n , 'expected ' + elToString(obj) + ' to contain ' + elToString(subitem)\n , 'expected ' + elToString(obj) + ' to not contain ' + elToString(subitem))\n }\n } else {\n _super.apply(this, arguments)\n }\n }\n },\n function(_super) {\n return function() {\n _super.call(this)\n }\n }\n )\n\n chai.Assertion.addMethod('descendant', function(subitem) {\n var obj = flag(this, 'object'), actual = subitem\n\n if (typeof subitem === 'string') {\n actual = obj.querySelector(subitem)\n this.assert(\n !!actual\n , 'expected ' + elToString(obj) + ' to have descendant #{exp}'\n , 'expected ' + elToString(obj) + ' to not have descendant #{exp}'\n , subitem)\n } else {\n this.assert(\n obj.contains(subitem)\n , 'expected ' + elToString(obj) + ' to contain ' + elToString(subitem)\n , 'expected ' + elToString(obj) + ' to not contain ' + elToString(subitem))\n }\n\n flag(this, 'object', actual)\n })\n\n chai.Assertion.addMethod('descendants', function(selector) {\n var obj = flag(this, 'object'),\n actual = obj.querySelectorAll(selector)\n this.assert(\n !!actual.length\n , 'expected ' + elToString(obj) + ' to have descendants #{exp}'\n , 'expected ' + elToString(obj) + ' to not have descendants #{exp}'\n , selector)\n flag(this, 'object', actual)\n })\n\n chai.Assertion.addProperty('displayed', function() {\n var el = flag(this, 'object'),\n actual = document.body.contains(el) ? window.getComputedStyle(el).display : el.style.display\n\n this.assert(\n actual !== 'none'\n , 'expected ' + elToString(el) + ' to be displayed, but it was not'\n , 'expected ' + elToString(el) + ' to not be displayed, but it was as ' + actual\n , actual\n )\n })\n\n chai.Assertion.addProperty('visible', function() {\n var el = flag(this, 'object'),\n actual = document.body.contains(el) ? window.getComputedStyle(el).visibility : el.style.visibility\n\n this.assert(\n actual !== 'hidden' && actual !== 'collapse'\n , 'expected ' + elToString(el) + ' to be visible, but it was ' + (actual === 'hidden' ? 'hidden' : 'collapsed')\n , 'expected ' + elToString(el) + ' to not be visible, but it was'\n , actual\n )\n })\n\n chai.Assertion.addMethod('tagName', function(tagName) {\n var el = flag(this, 'object'),\n actual = el.tagName;\n\n this.assert(\n actual.toUpperCase() === tagName.toUpperCase()\n , 'expected ' + elToString(el) + ' to have tagName ' + tagName + ', but it was ' + actual\n , 'expected ' + elToString(el) + ' to not have tagName ' + tagName + ', but it was ' + actual\n , actual\n )\n })\n\n chai.Assertion.addMethod('style', function (styleProp, styleValue) {\n var el = flag(this, 'object'),\n style = window.getComputedStyle(el),\n actual = style.getPropertyValue(styleProp).trim();\n\n this.assert(\n actual === styleValue\n , 'expected ' + elToString(el) + ' to have style property ' + styleProp + ' equal to ' + styleValue + ', but it was equal to ' + actual\n , 'expected ' + elToString(el) + ' to not have style property ' + styleProp + ' equal to ' + styleValue + ', but it was equal to ' + actual\n , actual\n )\n })\n\n chai.Assertion.overwriteProperty('focus', function() {\n return function () {\n var el = flag(this, 'object'), actual = el.ownerDocument.activeElement\n\n this.assert(\n el === el.ownerDocument.activeElement\n , 'expected #{this} to have focus'\n , 'expected #{this} not to have focus'\n , el\n , actual\n )\n\n }\n })\n\n chai.Assertion.overwriteProperty('checked', function() {\n return function () {\n var el = flag(this, 'object')\n\n if(!(el instanceof HTMLInputElement && (el.type === 'checkbox' || el.type === 'radio'))) {\n throw new TypeError(elToString(el) + ' is not a checkbox or radio input');\n }\n\n this.assert(\n el.checked\n , 'expected ' + elToString(el) + ' to be checked'\n , 'expected ' + elToString(el) + ' to not be checked')\n }\n })\n}));\n", "\"use strict\";\r\n/* eslint-disable no-invalid-this */\r\n\r\n(function (sinonChai) {\r\n // Module systems magic dance.\r\n\r\n /* istanbul ignore else */\r\n if (typeof require === \"function\" && typeof exports === \"object\" && typeof module === \"object\") {\r\n // NodeJS\r\n module.exports = sinonChai;\r\n } else if (typeof define === \"function\" && define.amd) {\r\n // AMD\r\n define(function () {\r\n return sinonChai;\r\n });\r\n } else {\r\n // Other environment (usually <script> tag): plug in to global chai instance directly.\r\n /* global chai: false */\r\n chai.use(sinonChai);\r\n }\r\n}(function (chai, utils) {\r\n var slice = Array.prototype.slice;\r\n\r\n function isSpy(putativeSpy) {\r\n return typeof putativeSpy === \"function\" &&\r\n typeof putativeSpy.getCall === \"function\" &&\r\n typeof putativeSpy.calledWithExactly === \"function\";\r\n }\r\n\r\n function timesInWords(count) {\r\n switch (count) {\r\n case 1: {\r\n return \"once\";\r\n }\r\n case 2: {\r\n return \"twice\";\r\n }\r\n case 3: {\r\n return \"thrice\";\r\n }\r\n default: {\r\n return (count || 0) + \" times\";\r\n }\r\n }\r\n }\r\n\r\n function isCall(putativeCall) {\r\n return putativeCall && isSpy(putativeCall.proxy);\r\n }\r\n\r\n function assertCanWorkWith(assertion) {\r\n if (!isSpy(assertion._obj) && !isCall(assertion._obj)) {\r\n throw new TypeError(utils.inspect(assertion._obj) + \" is not a spy or a call to a spy!\");\r\n }\r\n }\r\n\r\n function getMessages(spy, action, nonNegatedSuffix, always, args) {\r\n var verbPhrase = always ? \"always have \" : \"have \";\r\n nonNegatedSuffix = nonNegatedSuffix || \"\";\r\n if (isSpy(spy.proxy)) {\r\n spy = spy.proxy;\r\n }\r\n\r\n function printfArray(array) {\r\n return spy.printf.apply(spy, array);\r\n }\r\n\r\n return {\r\n affirmative: function () {\r\n return printfArray([\"expected %n to \" + verbPhrase + action + nonNegatedSuffix].concat(args));\r\n },\r\n negative: function () {\r\n return printfArray([\"expected %n to not \" + verbPhrase + action].concat(args));\r\n }\r\n };\r\n }\r\n\r\n function sinonProperty(name, action, nonNegatedSuffix) {\r\n utils.addProperty(chai.Assertion.prototype, name, function () {\r\n assertCanWorkWith(this);\r\n\r\n var messages = getMessages(this._obj, action, nonNegatedSuffix, false);\r\n this.assert(this._obj[name], messages.affirmative, messages.negative);\r\n });\r\n }\r\n\r\n function sinonPropertyAsBooleanMethod(name, action, nonNegatedSuffix) {\r\n utils.addMethod(chai.Assertion.prototype, name, function (arg) {\r\n assertCanWorkWith(this);\r\n\r\n var messages = getMessages(this._obj, action, nonNegatedSuffix, false, [timesInWords(arg)]);\r\n this.assert(this._obj[name] === arg, messages.affirmative, messages.negative);\r\n });\r\n }\r\n\r\n function createSinonMethodHandler(sinonName, action, nonNegatedSuffix) {\r\n return function () {\r\n assertCanWorkWith(this);\r\n\r\n var alwaysSinonMethod = \"always\" + sinonName[0].toUpperCase() + sinonName.substring(1);\r\n var shouldBeAlways = utils.flag(this, \"always\") && typeof this._obj[alwaysSinonMethod] === \"function\";\r\n var sinonMethodName = shouldBeAlways ? alwaysSinonMethod : sinonName;\r\n\r\n var messages = getMessages(this._obj, action, nonNegatedSuffix, shouldBeAlways, slice.call(arguments));\r\n this.assert(\r\n this._obj[sinonMethodName].apply(this._obj, arguments),\r\n messages.affirmative,\r\n messages.negative\r\n );\r\n };\r\n }\r\n\r\n function sinonMethodAsProperty(name, action, nonNegatedSuffix) {\r\n var handler = createSinonMethodHandler(name, action, nonNegatedSuffix);\r\n utils.addProperty(chai.Assertion.prototype, name, handler);\r\n }\r\n\r\n function exceptionalSinonMethod(chaiName, sinonName, action, nonNegatedSuffix) {\r\n var handler = createSinonMethodHandler(sinonName, action, nonNegatedSuffix);\r\n utils.addMethod(chai.Assertion.prototype, chaiName, handler);\r\n }\r\n\r\n function sinonMethod(name, action, nonNegatedSuffix) {\r\n exceptionalSinonMethod(name, name, action, nonNegatedSuffix);\r\n }\r\n\r\n utils.addProperty(chai.Assertion.prototype, \"always\", function () {\r\n utils.flag(this, \"always\", true);\r\n });\r\n\r\n sinonProperty(\"called\", \"been called\", \" at least once, but it was never called\");\r\n sinonPropertyAsBooleanMethod(\"callCount\", \"been called exactly %1\", \", but it was called %c%C\");\r\n sinonProperty(\"calledOnce\", \"been called exactly once\", \", but it was called %c%C\");\r\n sinonProperty(\"calledTwice\", \"been called exactly twice\", \", but it was called %c%C\");\r\n sinonProperty(\"calledThrice\", \"been called exactly thrice\", \", but it was called %c%C\");\r\n sinonMethodAsProperty(\"calledWithNew\", \"been called with new\");\r\n sinonMethod(\"calledBefore\", \"been called before %1\");\r\n sinonMethod(\"calledAfter\", \"been called after %1\");\r\n sinonMethod(\"calledImmediatelyBefore\", \"been called immediately before %1\");\r\n sinonMethod(\"calledImmediatelyAfter\", \"been called immediately after %1\");\r\n sinonMethod(\"calledOn\", \"been called with %1 as this\", \", but it was called with %t instead\");\r\n sinonMethod(\"calledWith\", \"been called with arguments %*\", \"%D\");\r\n sinonMethod(\"calledOnceWith\", \"been called exactly once with arguments %*\", \"%D\");\r\n sinonMethod(\"calledWithExactly\", \"been called with exact arguments %*\", \"%D\");\r\n sinonMethod(\"calledOnceWithExactly\", \"been called exactly once with exact arguments %*\", \"%D\");\r\n sinonMethod(\"calledWithMatch\", \"been called with arguments matching %*\", \"%D\");\r\n sinonMethod(\"returned\", \"returned %1\");\r\n exceptionalSinonMethod(\"thrown\", \"threw\", \"thrown %1\");\r\n}));\r\n", "let defineCECounter = 0;\n\n/**\n * Registers a new element with an automatically generated unique name.\n * Helps to make a test fully isolated.\n *\n * @example\n * const tag = defineCE(class extends MyMixin(HTMLElement) {\n * // define custom element class body\n * });\n * const el = fixture(`<${tag}></${tag}>`);\n * // test el\n *\n * @template {HTMLElement} T\n * @param {import(\"@open-wc/dedupe-mixin\").Constructor<T>} klass Class which extends HTMLElement\n * @returns {string} Tag name of the registered element\n */\nexport function defineCE(klass) {\n const tag = `test-${defineCECounter}`;\n customElements.define(tag, klass);\n defineCECounter += 1;\n return tag;\n}\n\n/**\n * Indicates that this is Internet Explorer.\n *\n * @returns {boolean}\n */\nexport function isIE() {\n return !!navigator.userAgent.match(/Trident/g) || !!navigator.userAgent.match(/MSIE/g);\n}\n\n/**\n * Resolves after provided amount of miliseconds.\n *\n * @example\n * await aTimeout(100);\n *\n * @param {number} ms Miliseconds.\n * @returns {Promise<void>} Promise to await until time is up\n */\nexport function aTimeout(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * Resolves after requestAnimationFrame.\n *\n * @example\n * await nextFrame();\n *\n * @returns {Promise<void>} Promise that resolved after requestAnimationFrame\n */\nexport function nextFrame() {\n return new Promise(resolve => requestAnimationFrame(() => resolve()));\n}\n\n/**\n * Blurs the provided element and await time before and after it on IE.\n *\n * @example\n * const el = await fixture('<input type=\"text\" autofocus />');\n * await triggerBlurFor(el);\n * // el is no longer focused\n *\n * @param {HTMLElement} element Element/Node to blur\n * @returns {Promise<void>} Promise to await until blur is done (for IE)\n */\nexport async function triggerBlurFor(element) {\n if (isIE()) {\n await nextFrame();\n await nextFrame();\n }\n element.blur();\n if (isIE()) {\n element.blur();\n await nextFrame();\n await nextFrame();\n }\n}\n\n/**\n * Focuses the provided element and await time before and after it on IE.\n *\n * Background info:\n * Adding an event and immediately trigger it fails in IE.\n * Also before checking the effects of a trigger IE needs some time.\n *\n * @example\n * const el = await fixture('<input type=\"text\" />');\n * await triggerFocusFor(el);\n * // el is now focused\n *\n * @param {HTMLElement} element Element/Node to focus\n * @returns {Promise<void>} Promise to await until focus is done (for IE)\n */\nexport async function triggerFocusFor(element) {\n if (isIE()) {\n await nextFrame();\n await nextFrame();\n }\n element.focus();\n if (isIE()) {\n element.focus();\n await nextFrame();\n await nextFrame();\n }\n}\n\n/**\n * Listens for one event and resolves with this event object after it was fired.\n *\n * @example\n * setTimeout(() => el.fireDone());\n * await oneEvent(el, 'done');\n * expect(el.done).to.be.true;\n *\n * @param {EventTarget} eventTarget Target of the event, usually an Element\n * @param {string} eventName Name of the event\n * @returns {Promise<CustomEvent>} Promise to await until the event has been fired\n */\nexport function oneEvent(eventTarget, eventName) {\n return new Promise(resolve => {\n function listener(ev) {\n resolve(ev);\n eventTarget.removeEventListener(eventName, listener);\n }\n eventTarget.addEventListener(eventName, listener);\n });\n}\n\n/**\n * Waits until the given predicate returns a truthy value. Calls and awaits the predicate\n * function at the given interval time. Can be used to poll until a certain condition is true.\n *\n * @example\n * ```js\n * import { fixture, waitUntil } from '@open-wc/testing-helpers';\n *\n * const element = await fixture(html`<my-element></my-element>`);\n *\n * await waitUntil(() => element.someAsyncProperty, 'element should become ready');\n * ```\n *\n * @param {() => boolean | Promise<boolean>} predicate - predicate function which is called each poll interval.\n * The predicate is awaited, so it can return a promise.\n * @param {string} [message] an optional message to display when the condition timed out\n * @param {{ interval?: number, timeout?: number }} [options] timeout and polling interval\n */\nexport function waitUntil(predicate, message, options = {}) {\n const { interval = 50, timeout = 1000 } = options;\n\n return new Promise((resolve, reject) => {\n let timeoutId;\n\n setTimeout(() => {\n clearTimeout(timeoutId);\n reject(new Error(message ? `Timeout: ${message}` : `waitUntil timed out after ${timeout}ms`));\n }, timeout);\n\n async function nextInterval() {\n try {\n if (await predicate()) {\n resolve();\n } else {\n timeoutId = setTimeout(() => {\n nextInterval();\n }, interval);\n }\n } catch (error) {\n reject(error);\n }\n }\n nextInterval();\n });\n}\n", "/** @type Array<Node> */\nexport const cachedWrappers = [];\n\n/**\n * Creates a wrapper as a direct child of `<body>` to put the tested element into.\n * Need to be in the DOM to test for example `connectedCallback()` on elements.\n *\n * @param {Element} [parentNode]\n * @returns {Element} wrapping node\n */\nexport function fixtureWrapper(parentNode = document.createElement('div')) {\n document.body.appendChild(parentNode);\n cachedWrappers.push(parentNode);\n return parentNode;\n}\n\n/**\n * Cleans up all defined fixtures by removing the actual wrapper nodes.\n * Common usecase is at the end of each test.\n */\nexport function fixtureCleanup() {\n if (cachedWrappers) {\n cachedWrappers.forEach(wrapper => {\n document.body.removeChild(wrapper);\n });\n }\n cachedWrappers.length = 0; // reset it like this as we can't reassign it\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\n\nconst directives = new WeakMap<object, true>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type DirectiveFactory = (...args: any[]) => object;\n\nexport type DirectiveFn = (part: Part) => void;\n\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = <F extends DirectiveFactory>(f: F): F =>\n ((...args: unknown[]) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n }) as F;\n\nexport const isDirective = (o: unknown): o is DirectiveFn => {\n return typeof o === 'function' && directives.has(o);\n};\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\ninterface MaybePolyfilledCe extends CustomElementRegistry {\n readonly polyfillWrapFlushCallback?: object;\n}\n\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n window.customElements != null &&\n (window.customElements as MaybePolyfilledCe).polyfillWrapFlushCallback !==\n undefined;\n\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes =\n (container: Node,\n start: Node|null,\n end: Node|null = null,\n before: Node|null = null): void => {\n while (start !== end) {\n const n = start!.nextSibling;\n container.insertBefore(start!, before);\n start = n;\n }\n };\n\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes =\n (container: Node, start: Node|null, end: Node|null = null): void => {\n while (start !== end) {\n const n = start!.nextSibling;\n container.removeChild(start!);\n start = n;\n }\n };\n", "/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The Part interface represents a dynamic part of a template instance rendered\n * by lit-html.\n */\nexport interface Part {\n readonly value: unknown;\n\n /**\n * Sets the current part value, but does not write it to the DOM.\n * @param value The value that will be committed.\n */\n setValue(value: unknown): void;\n\n /**\n * Commits the current part value, causing it to actually be written to the\n * DOM.\n *\n * Directives are run at the start of `commit`, so that if they call\n * `part.setValue(...)` synchronously that value will be used in the current\n * commit, and there's no need to call `part.commit()` within the directive.\n * If directives set a part value asynchronously, then they must call\n * `part.commit()` manually.\n */\n commit(): void;\n}\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\n\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\n\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n readonly parts: TemplatePart[] = [];\n readonly element: HTMLTemplateElement;\n\n constructor(result: TemplateResult, element: HTMLTemplateElement) {\n this.element = element;\n\n const nodesToRemove: Node[] = [];\n const stack: Node[] = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(\n element.content,\n 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n null,\n false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const {strings, values: {length}} = result;\n while (partIndex < length) {\n const node = walker.nextNode() as Element | Comment | Text | null;\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop()!;\n continue;\n }\n index++;\n\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if ((node as Element).hasAttributes()) {\n const attributes = (node as Element).attributes;\n const {length} = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)![2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName =\n name.toLowerCase() + boundAttributeSuffix;\n const attributeValue =\n (node as Element).getAttribute(attributeLookupName)!;\n (node as Element).removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({type: 'attribute', index, name, strings: statics});\n partIndex += statics.length - 1;\n }\n }\n if ((node as Element).tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = (node as HTMLTemplateElement).content;\n }\n } else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = (node as Text).data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode!;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert: Node;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n } else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({type: 'node', index: ++index});\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n } else {\n (node as Text).data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n } else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if ((node as Comment).data === marker) {\n const parent = node.parentNode!;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({type: 'node', index});\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n (node as Comment).data = '';\n } else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n } else {\n let i = -1;\n while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({type: 'node', index: -1});\n partIndex++;\n }\n }\n }\n }\n\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode!.removeChild(n);\n }\n }\n}\n\nconst endsWith = (str: string, suffix: string): boolean => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\n\n/**\n * A placeholder for a dynamic expression in an HTML template.\n *\n * There are two built-in part types: AttributePart and NodePart. NodeParts\n * always represent a single dynamic expression, while AttributeParts may\n * represent as many expressions are contained in the attribute.\n *\n * A Template's parts are mutable, so parts can be replaced or modified\n * (possibly to implement different template semantics). The contract is that\n * parts can only be replaced, not removed, added or reordered, and parts must\n * always consume the correct number of values in their `update()` method.\n *\n * TODO(justinfagnani): That requirement is a little fragile. A\n * TemplateInstance could instead be more careful about which values it gives\n * to Part.update().\n */\nexport type TemplatePart = {\n readonly type: 'node'; index: number;\n}|{\n readonly type: 'attribute';\n index: number;\n readonly name: string;\n readonly strings: ReadonlyArray<string>;\n};\n\nexport const isTemplatePartActive = (part: TemplatePart) => part.index !== -1;\n\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex =\n // eslint-disable-next-line no-control-regex\n /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isCEPolyfill} from './dom.js';\nimport {Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n private readonly __parts: Array<Part|undefined> = [];\n readonly processor: TemplateProcessor;\n readonly options: RenderOptions;\n readonly template: Template;\n\n constructor(\n template: Template, processor: TemplateProcessor,\n options: RenderOptions) {\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n\n update(values: readonly unknown[]) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n\n _clone(): DocumentFragment {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari does not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) as DocumentFragment :\n document.importNode(this.template.element.content, true);\n\n const stack: Node[] = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(\n fragment,\n 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n null,\n false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part: TemplatePart;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node!.nodeName === 'TEMPLATE') {\n stack.push(node!);\n walker.currentNode = (node as HTMLTemplateElement).content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop()!;\n node = walker.nextNode();\n }\n }\n\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node!.previousSibling!);\n this.__parts.push(part);\n } else {\n this.__parts.push(...this.processor.handleAttributeExpressions(\n node as Element, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {reparentNodes} from './dom.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker} from './template.js';\n\ndeclare const trustedTypes: typeof window.trustedTypes;\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n trustedTypes!.createPolicy('lit-html', {createHTML: (s) => s});\n\nconst commentMarker = ` ${marker} `;\n\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n readonly strings: TemplateStringsArray;\n readonly values: readonly unknown[];\n readonly type: string;\n readonly processor: TemplateProcessor;\n\n constructor(\n strings: TemplateStringsArray, values: readonly unknown[], type: string,\n processor: TemplateProcessor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML(): string {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment position.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n } else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n\n getTemplateElement(): HTMLTemplateElement {\n const template = document.createElement('template');\n let value = this.getHTML();\n if (policy !== undefined) {\n // this is secure because `this.strings` is a TemplateStringsArray.\n // TODO: validate this when\n // https://github.com/tc39/proposal-array-is-template-object is\n // implemented.\n value = policy.createHTML(value) as unknown as string;\n }\n template.innerHTML = value;\n return template;\n }\n}\n\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML(): string {\n return `<svg>${super.getHTML()}</svg>`;\n }\n\n getTemplateElement(): HTMLTemplateElement {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild!;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isDirective} from './directive.js';\nimport {removeNodes} from './dom.js';\nimport {noChange, nothing, Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {createMarker} from './template.js';\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\nexport type Primitive = null|undefined|boolean|number|string|symbol|bigint;\nexport const isPrimitive = (value: unknown): value is Primitive => {\n return (\n value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value: unknown): value is Iterable<unknown> => {\n return Array.isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !!(value && (value as any)[Symbol.iterator]);\n};\n\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n readonly element: Element;\n readonly name: string;\n readonly strings: ReadonlyArray<string>;\n readonly parts: ReadonlyArray<AttributePart>;\n dirty = true;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n (this.parts as AttributePart[])[i] = this._createPart();\n }\n }\n\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n protected _createPart(): AttributePart {\n return new AttributePart(this);\n }\n\n protected _getValue(): unknown {\n const strings = this.strings;\n const l = strings.length - 1;\n const parts = this.parts;\n\n // If we're assigning an attribute via syntax like:\n // attr=\"${foo}\" or attr=${foo}\n // but not\n // attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n // then we don't want to coerce the attribute value into one long\n // string. Instead we want to just return the value itself directly,\n // so that sanitizeDOMValue can get the actual value rather than\n // String(value)\n // The exception is if v is an array, in which case we do want to smash\n // it together into a string without calling String() on the array.\n //\n // This also allows trusted values (when using TrustedTypes) being\n // assigned to DOM sinks without being stringified in the process.\n if (l === 1 && strings[0] === '' && strings[1] === '') {\n const v = parts[0].value;\n if (typeof v === 'symbol') {\n return String(v);\n }\n if (typeof v === 'string' || !isIterable(v)) {\n return v;\n }\n }\n let text = '';\n\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n } else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n\n text += strings[l];\n return text;\n }\n\n commit(): void {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue() as string);\n }\n }\n}\n\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart implements Part {\n readonly committer: AttributeCommitter;\n value: unknown = undefined;\n\n constructor(committer: AttributeCommitter) {\n this.committer = committer;\n }\n\n setValue(value: unknown): void {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart implements Part {\n readonly options: RenderOptions;\n startNode!: Node;\n endNode!: Node;\n value: unknown = undefined;\n private __pendingValue: unknown = undefined;\n\n constructor(options: RenderOptions) {\n this.options = options;\n }\n\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container: Node) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref: Node) {\n this.startNode = ref;\n this.endNode = ref.nextSibling!;\n }\n\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part: NodePart) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref: NodePart) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n\n setValue(value: unknown): void {\n this.__pendingValue = value;\n }\n\n commit() {\n if (this.startNode.parentNode === null) {\n return;\n }\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n } else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n } else if (value instanceof Node) {\n this.__commitNode(value);\n } else if (isIterable(value)) {\n this.__commitIterable(value);\n } else if (value === nothing) {\n this.value = nothing;\n this.clear();\n } else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n\n private __insert(node: Node) {\n this.endNode.parentNode!.insertBefore(node, this.endNode);\n }\n\n private __commitNode(value: Node): void {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n\n private __commitText(value: unknown): void {\n const node = this.startNode.nextSibling!;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString: string =\n typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n (node as Text).data = valueAsString;\n } else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n\n private __commitTemplateResult(value: TemplateResult): void {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n } else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance =\n new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n\n private __commitIterable(value: Iterable<unknown>): void {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value as NodePart[];\n let partIndex = 0;\n let itemPart: NodePart|undefined;\n\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n } else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n\n clear(startNode: Node = this.startNode) {\n removeNodes(\n this.startNode.parentNode!, startNode.nextSibling!, this.endNode);\n }\n}\n\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart implements Part {\n readonly element: Element;\n readonly name: string;\n readonly strings: readonly string[];\n value: unknown = undefined;\n private __pendingValue: unknown = undefined;\n\n constructor(element: Element, name: string, strings: readonly string[]) {\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error(\n 'Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n\n setValue(value: unknown): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n } else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n readonly single: boolean;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n\n protected _createPart(): PropertyPart {\n return new PropertyPart(this);\n }\n\n protected _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n\n commit(): void {\n if (this.dirty) {\n this.dirty = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.element as any)[this.name] = this._getValue();\n }\n }\n}\n\nexport class PropertyPart extends AttributePart {}\n\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n try {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.addEventListener('test', options as any, options);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.removeEventListener('test', options as any, options);\n } catch (_e) {\n // event options not supported\n }\n})();\n\ntype EventHandlerWithOptions =\n EventListenerOrEventListenerObject&Partial<AddEventListenerOptions>;\nexport class EventPart implements Part {\n readonly element: Element;\n readonly eventName: string;\n readonly eventContext?: EventTarget;\n value: undefined|EventHandlerWithOptions = undefined;\n private __options?: AddEventListenerOptions;\n private __pendingValue: undefined|EventHandlerWithOptions = undefined;\n private readonly __boundHandleEvent: (event: Event) => void;\n\n constructor(element: Element, eventName: string, eventContext?: EventTarget) {\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n\n setValue(value: undefined|EventHandlerWithOptions): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange as EventHandlerWithOptions;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener =\n newListener != null && (oldListener == null || shouldRemoveListener);\n\n if (shouldRemoveListener) {\n this.element.removeEventListener(\n this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(\n this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange as EventHandlerWithOptions;\n }\n\n handleEvent(event: Event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n } else {\n (this.value as EventListenerObject).handleEvent(event);\n }\n }\n}\n\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o: AddEventListenerOptions|undefined) => o &&\n (eventOptionsSupported ?\n {capture: o.capture, passive: o.passive, once: o.once} :\n o.capture as AddEventListenerOptions);\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\nimport {AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\n\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor implements TemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(\n element: Element, name: string, strings: string[],\n options: RenderOptions): ReadonlyArray<Part> {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options: RenderOptions) {\n return new NodePart(options);\n }\n}\n\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\n/**\n * A function type that creates a Template from a TemplateResult.\n *\n * This is a hook into the template-creation process for rendering that\n * requires some modification of templates before they're used, like ShadyCSS,\n * which must add classes to elements and remove styles.\n *\n * Templates should be cached as aggressively as possible, so that many\n * TemplateResults produced from the same expression only do the work of\n * creating the Template the first time.\n *\n * Templates are usually cached by TemplateResult.strings and\n * TemplateResult.type, but may be cached by other keys if this function\n * modifies the template.\n *\n * Note that currently TemplateFactories must not add, remove, or reorder\n * expressions, because there is no way to describe such a modification\n * to render() so that values are interpolated to the correct place in the\n * template instances.\n */\nexport type TemplateFactory = (result: TemplateResult) => Template;\n\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result: TemplateResult) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n keyString: new Map<string, Template>()\n };\n templateCaches.set(result.type, templateCache);\n }\n\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\n\n/**\n * The first argument to JS template tags retain identity across multiple\n * calls to a tag for the same literal, so we can cache work done per literal\n * in a Map.\n *\n * Safari currently has a bug which occasionally breaks this behavior, so we\n * need to cache the Template at two levels. We first cache the\n * TemplateStringsArray, and if that fails, we cache a key constructed by\n * joining the strings array.\n */\nexport interface TemplateCache {\n readonly stringsArray: WeakMap<TemplateStringsArray, Template>;\n readonly keyString: Map<string, Template>;\n}\n\nexport const templateCaches = new Map<string, TemplateCache>();\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {removeNodes} from './dom.js';\nimport {NodePart} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {templateFactory} from './template-factory.js';\n\nexport const parts = new WeakMap<Node, NodePart>();\n\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n * created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n * replaced, or efficiently updated if the same result type was previous\n * rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n * container. Render options must *not* change between renders to the same\n * container, as those changes will not effect previously rendered DOM.\n */\nexport const render =\n (result: unknown,\n container: Element|DocumentFragment,\n options?: Partial<RenderOptions>) => {\n let part = parts.get(container);\n if (part === undefined) {\n removeNodes(container, container.firstChild);\n parts.set(container, part = new NodePart({\n templateFactory,\n ...options,\n }));\n part.appendInto(container);\n }\n part.setValue(result);\n part.commit();\n };\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {defaultTemplateProcessor} from './lib/default-template-processor.js';\nimport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\n\nexport {DefaultTemplateProcessor, defaultTemplateProcessor} from './lib/default-template-processor.js';\nexport {directive, DirectiveFn, isDirective} from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport {removeNodes, reparentNodes} from './lib/dom.js';\nexport {noChange, nothing, Part} from './lib/part.js';\nexport {AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart} from './lib/parts.js';\nexport {RenderOptions} from './lib/render-options.js';\nexport {parts, render} from './lib/render.js';\nexport {templateCaches, templateFactory} from './lib/template-factory.js';\nexport {TemplateInstance} from './lib/template-instance.js';\nexport {TemplateProcessor} from './lib/template-processor.js';\nexport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\nexport {createMarker, isTemplatePartActive, Template} from './lib/template.js';\n\ndeclare global {\n interface Window {\n litHtmlVersions: string[];\n }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.4.1');\n}\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]) =>\n new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings: TemplateStringsArray, ...values: unknown[]) =>\n new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n", "import { TemplateResult } from 'lit-html';\n\nexport const isIterable = object => object != null && typeof object[Symbol.iterator] === 'function';\n\nfunction isValidNonIterableRenderArg(x) {\n return (\n x instanceof TemplateResult ||\n x instanceof Node ||\n typeof x === 'number' ||\n typeof x === 'boolean' ||\n typeof x === 'string'\n );\n}\n\nexport function isValidRenderArg(x) {\n return isIterable(x) ? [...x].every(isValidNonIterableRenderArg) : isValidNonIterableRenderArg(x);\n}\n\n/**\n * Node#nodeType enum\n * @readonly\n * @enum {number}\n */\nexport const NODE_TYPES = Object.freeze({\n ELEMENT_NODE: 1,\n TEXT_NODE: 3,\n COMMENT_NODE: 8,\n DOCUMENT_FRAGMENT_NODE: 11,\n});\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\n\nconst directives = new WeakMap<object, true>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type DirectiveFactory = (...args: any[]) => object;\n\nexport type DirectiveFn = (part: Part) => void;\n\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = <F extends DirectiveFactory>(f: F): F =>\n ((...args: unknown[]) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n }) as F;\n\nexport const isDirective = (o: unknown): o is DirectiveFn => {\n return typeof o === 'function' && directives.has(o);\n};\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\ninterface MaybePolyfilledCe extends CustomElementRegistry {\n readonly polyfillWrapFlushCallback?: object;\n}\n\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n window.customElements != null &&\n (window.customElements as MaybePolyfilledCe).polyfillWrapFlushCallback !==\n undefined;\n\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes =\n (container: Node,\n start: Node|null,\n end: Node|null = null,\n before: Node|null = null): void => {\n while (start !== end) {\n const n = start!.nextSibling;\n container.insertBefore(start!, before);\n start = n;\n }\n };\n\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes =\n (container: Node, start: Node|null, end: Node|null = null): void => {\n while (start !== end) {\n const n = start!.nextSibling;\n container.removeChild(start!);\n start = n;\n }\n };\n", "/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The Part interface represents a dynamic part of a template instance rendered\n * by lit-html.\n */\nexport interface Part {\n readonly value: unknown;\n\n /**\n * Sets the current part value, but does not write it to the DOM.\n * @param value The value that will be committed.\n */\n setValue(value: unknown): void;\n\n /**\n * Commits the current part value, causing it to actually be written to the\n * DOM.\n *\n * Directives are run at the start of `commit`, so that if they call\n * `part.setValue(...)` synchronously that value will be used in the current\n * commit, and there's no need to call `part.commit()` within the directive.\n * If directives set a part value asynchronously, then they must call\n * `part.commit()` manually.\n */\n commit(): void;\n}\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\n\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\n\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n readonly parts: TemplatePart[] = [];\n readonly element: HTMLTemplateElement;\n\n constructor(result: TemplateResult, element: HTMLTemplateElement) {\n this.element = element;\n\n const nodesToRemove: Node[] = [];\n const stack: Node[] = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(\n element.content,\n 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n null,\n false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const {strings, values: {length}} = result;\n while (partIndex < length) {\n const node = walker.nextNode() as Element | Comment | Text | null;\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop()!;\n continue;\n }\n index++;\n\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if ((node as Element).hasAttributes()) {\n const attributes = (node as Element).attributes;\n const {length} = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)![2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName =\n name.toLowerCase() + boundAttributeSuffix;\n const attributeValue =\n (node as Element).getAttribute(attributeLookupName)!;\n (node as Element).removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({type: 'attribute', index, name, strings: statics});\n partIndex += statics.length - 1;\n }\n }\n if ((node as Element).tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = (node as HTMLTemplateElement).content;\n }\n } else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = (node as Text).data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode!;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert: Node;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n } else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({type: 'node', index: ++index});\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n } else {\n (node as Text).data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n } else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if ((node as Comment).data === marker) {\n const parent = node.parentNode!;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({type: 'node', index});\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n (node as Comment).data = '';\n } else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n } else {\n let i = -1;\n while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({type: 'node', index: -1});\n partIndex++;\n }\n }\n }\n }\n\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode!.removeChild(n);\n }\n }\n}\n\nconst endsWith = (str: string, suffix: string): boolean => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\n\n/**\n * A placeholder for a dynamic expression in an HTML template.\n *\n * There are two built-in part types: AttributePart and NodePart. NodeParts\n * always represent a single dynamic expression, while AttributeParts may\n * represent as many expressions are contained in the attribute.\n *\n * A Template's parts are mutable, so parts can be replaced or modified\n * (possibly to implement different template semantics). The contract is that\n * parts can only be replaced, not removed, added or reordered, and parts must\n * always consume the correct number of values in their `update()` method.\n *\n * TODO(justinfagnani): That requirement is a little fragile. A\n * TemplateInstance could instead be more careful about which values it gives\n * to Part.update().\n */\nexport type TemplatePart = {\n readonly type: 'node'; index: number;\n}|{\n readonly type: 'attribute';\n index: number;\n readonly name: string;\n readonly strings: ReadonlyArray<string>;\n};\n\nexport const isTemplatePartActive = (part: TemplatePart) => part.index !== -1;\n\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex =\n // eslint-disable-next-line no-control-regex\n /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isCEPolyfill} from './dom.js';\nimport {Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n private readonly __parts: Array<Part|undefined> = [];\n readonly processor: TemplateProcessor;\n readonly options: RenderOptions;\n readonly template: Template;\n\n constructor(\n template: Template, processor: TemplateProcessor,\n options: RenderOptions) {\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n\n update(values: readonly unknown[]) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n\n _clone(): DocumentFragment {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari does not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) as DocumentFragment :\n document.importNode(this.template.element.content, true);\n\n const stack: Node[] = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(\n fragment,\n 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n null,\n false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part: TemplatePart;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node!.nodeName === 'TEMPLATE') {\n stack.push(node!);\n walker.currentNode = (node as HTMLTemplateElement).content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop()!;\n node = walker.nextNode();\n }\n }\n\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node!.previousSibling!);\n this.__parts.push(part);\n } else {\n this.__parts.push(...this.processor.handleAttributeExpressions(\n node as Element, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {reparentNodes} from './dom.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker} from './template.js';\n\ndeclare const trustedTypes: typeof window.trustedTypes;\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n trustedTypes!.createPolicy('lit-html', {createHTML: (s) => s});\n\nconst commentMarker = ` ${marker} `;\n\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n readonly strings: TemplateStringsArray;\n readonly values: readonly unknown[];\n readonly type: string;\n readonly processor: TemplateProcessor;\n\n constructor(\n strings: TemplateStringsArray, values: readonly unknown[], type: string,\n processor: TemplateProcessor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML(): string {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment position.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n } else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n\n getTemplateElement(): HTMLTemplateElement {\n const template = document.createElement('template');\n let value = this.getHTML();\n if (policy !== undefined) {\n // this is secure because `this.strings` is a TemplateStringsArray.\n // TODO: validate this when\n // https://github.com/tc39/proposal-array-is-template-object is\n // implemented.\n value = policy.createHTML(value) as unknown as string;\n }\n template.innerHTML = value;\n return template;\n }\n}\n\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML(): string {\n return `<svg>${super.getHTML()}</svg>`;\n }\n\n getTemplateElement(): HTMLTemplateElement {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild!;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isDirective} from './directive.js';\nimport {removeNodes} from './dom.js';\nimport {noChange, nothing, Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {createMarker} from './template.js';\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\nexport type Primitive = null|undefined|boolean|number|string|symbol|bigint;\nexport const isPrimitive = (value: unknown): value is Primitive => {\n return (\n value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value: unknown): value is Iterable<unknown> => {\n return Array.isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !!(value && (value as any)[Symbol.iterator]);\n};\n\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n readonly element: Element;\n readonly name: string;\n readonly strings: ReadonlyArray<string>;\n readonly parts: ReadonlyArray<AttributePart>;\n dirty = true;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n (this.parts as AttributePart[])[i] = this._createPart();\n }\n }\n\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n protected _createPart(): AttributePart {\n return new AttributePart(this);\n }\n\n protected _getValue(): unknown {\n const strings = this.strings;\n const l = strings.length - 1;\n const parts = this.parts;\n\n // If we're assigning an attribute via syntax like:\n // attr=\"${foo}\" or attr=${foo}\n // but not\n // attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n // then we don't want to coerce the attribute value into one long\n // string. Instead we want to just return the value itself directly,\n // so that sanitizeDOMValue can get the actual value rather than\n // String(value)\n // The exception is if v is an array, in which case we do want to smash\n // it together into a string without calling String() on the array.\n //\n // This also allows trusted values (when using TrustedTypes) being\n // assigned to DOM sinks without being stringified in the process.\n if (l === 1 && strings[0] === '' && strings[1] === '') {\n const v = parts[0].value;\n if (typeof v === 'symbol') {\n return String(v);\n }\n if (typeof v === 'string' || !isIterable(v)) {\n return v;\n }\n }\n let text = '';\n\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n } else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n\n text += strings[l];\n return text;\n }\n\n commit(): void {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue() as string);\n }\n }\n}\n\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart implements Part {\n readonly committer: AttributeCommitter;\n value: unknown = undefined;\n\n constructor(committer: AttributeCommitter) {\n this.committer = committer;\n }\n\n setValue(value: unknown): void {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart implements Part {\n readonly options: RenderOptions;\n startNode!: Node;\n endNode!: Node;\n value: unknown = undefined;\n private __pendingValue: unknown = undefined;\n\n constructor(options: RenderOptions) {\n this.options = options;\n }\n\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container: Node) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref: Node) {\n this.startNode = ref;\n this.endNode = ref.nextSibling!;\n }\n\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part: NodePart) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref: NodePart) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n\n setValue(value: unknown): void {\n this.__pendingValue = value;\n }\n\n commit() {\n if (this.startNode.parentNode === null) {\n return;\n }\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n } else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n } else if (value instanceof Node) {\n this.__commitNode(value);\n } else if (isIterable(value)) {\n this.__commitIterable(value);\n } else if (value === nothing) {\n this.value = nothing;\n this.clear();\n } else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n\n private __insert(node: Node) {\n this.endNode.parentNode!.insertBefore(node, this.endNode);\n }\n\n private __commitNode(value: Node): void {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n\n private __commitText(value: unknown): void {\n const node = this.startNode.nextSibling!;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString: string =\n typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n (node as Text).data = valueAsString;\n } else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n\n private __commitTemplateResult(value: TemplateResult): void {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n } else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance =\n new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n\n private __commitIterable(value: Iterable<unknown>): void {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value as NodePart[];\n let partIndex = 0;\n let itemPart: NodePart|undefined;\n\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n } else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n\n clear(startNode: Node = this.startNode) {\n removeNodes(\n this.startNode.parentNode!, startNode.nextSibling!, this.endNode);\n }\n}\n\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart implements Part {\n readonly element: Element;\n readonly name: string;\n readonly strings: readonly string[];\n value: unknown = undefined;\n private __pendingValue: unknown = undefined;\n\n constructor(element: Element, name: string, strings: readonly string[]) {\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error(\n 'Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n\n setValue(value: unknown): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n } else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n readonly single: boolean;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n\n protected _createPart(): PropertyPart {\n return new PropertyPart(this);\n }\n\n protected _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n\n commit(): void {\n if (this.dirty) {\n this.dirty = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.element as any)[this.name] = this._getValue();\n }\n }\n}\n\nexport class PropertyPart extends AttributePart {}\n\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n try {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.addEventListener('test', options as any, options);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.removeEventListener('test', options as any, options);\n } catch (_e) {\n // event options not supported\n }\n})();\n\ntype EventHandlerWithOptions =\n EventListenerOrEventListenerObject&Partial<AddEventListenerOptions>;\nexport class EventPart implements Part {\n readonly element: Element;\n readonly eventName: string;\n readonly eventContext?: EventTarget;\n value: undefined|EventHandlerWithOptions = undefined;\n private __options?: AddEventListenerOptions;\n private __pendingValue: undefined|EventHandlerWithOptions = undefined;\n private readonly __boundHandleEvent: (event: Event) => void;\n\n constructor(element: Element, eventName: string, eventContext?: EventTarget) {\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n\n setValue(value: undefined|EventHandlerWithOptions): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange as EventHandlerWithOptions;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener =\n newListener != null && (oldListener == null || shouldRemoveListener);\n\n if (shouldRemoveListener) {\n this.element.removeEventListener(\n this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(\n this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange as EventHandlerWithOptions;\n }\n\n handleEvent(event: Event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n } else {\n (this.value as EventListenerObject).handleEvent(event);\n }\n }\n}\n\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o: AddEventListenerOptions|undefined) => o &&\n (eventOptionsSupported ?\n {capture: o.capture, passive: o.passive, once: o.once} :\n o.capture as AddEventListenerOptions);\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\nimport {AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\n\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor implements TemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(\n element: Element, name: string, strings: string[],\n options: RenderOptions): ReadonlyArray<Part> {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options: RenderOptions) {\n return new NodePart(options);\n }\n}\n\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\n/**\n * A function type that creates a Template from a TemplateResult.\n *\n * This is a hook into the template-creation process for rendering that\n * requires some modification of templates before they're used, like ShadyCSS,\n * which must add classes to elements and remove styles.\n *\n * Templates should be cached as aggressively as possible, so that many\n * TemplateResults produced from the same expression only do the work of\n * creating the Template the first time.\n *\n * Templates are usually cached by TemplateResult.strings and\n * TemplateResult.type, but may be cached by other keys if this function\n * modifies the template.\n *\n * Note that currently TemplateFactories must not add, remove, or reorder\n * expressions, because there is no way to describe such a modification\n * to render() so that values are interpolated to the correct place in the\n * template instances.\n */\nexport type TemplateFactory = (result: TemplateResult) => Template;\n\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result: TemplateResult) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n keyString: new Map<string, Template>()\n };\n templateCaches.set(result.type, templateCache);\n }\n\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\n\n/**\n * The first argument to JS template tags retain identity across multiple\n * calls to a tag for the same literal, so we can cache work done per literal\n * in a Map.\n *\n * Safari currently has a bug which occasionally breaks this behavior, so we\n * need to cache the Template at two levels. We first cache the\n * TemplateStringsArray, and if that fails, we cache a key constructed by\n * joining the strings array.\n */\nexport interface TemplateCache {\n readonly stringsArray: WeakMap<TemplateStringsArray, Template>;\n readonly keyString: Map<string, Template>;\n}\n\nexport const templateCaches = new Map<string, TemplateCache>();\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {defaultTemplateProcessor} from './lib/default-template-processor.js';\nimport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\n\nexport {DefaultTemplateProcessor, defaultTemplateProcessor} from './lib/default-template-processor.js';\nexport {directive, DirectiveFn, isDirective} from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport {removeNodes, reparentNodes} from './lib/dom.js';\nexport {noChange, nothing, Part} from './lib/part.js';\nexport {AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart} from './lib/parts.js';\nexport {RenderOptions} from './lib/render-options.js';\nexport {parts, render} from './lib/render.js';\nexport {templateCaches, templateFactory} from './lib/template-factory.js';\nexport {TemplateInstance} from './lib/template-instance.js';\nexport {TemplateProcessor} from './lib/template-processor.js';\nexport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\nexport {createMarker, isTemplatePartActive, Template} from './lib/template.js';\n\ndeclare global {\n interface Window {\n litHtmlVersions: string[];\n }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.4.1');\n}\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]) =>\n new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings: TemplateStringsArray, ...values: unknown[]) =>\n new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n", "const appliedClassMixins = new WeakMap();\n\n/** Vefify if the Mixin was previously applyed\n * @private\n * @param {function} mixin Mixin being applyed\n * @param {object} superClass Class receiving the new mixin\n * @returns {boolean}\n */\nfunction wasMixinPreviouslyApplied(mixin, superClass) {\n let klass = superClass;\n while (klass) {\n if (appliedClassMixins.get(klass) === mixin) {\n return true;\n }\n klass = Object.getPrototypeOf(klass);\n }\n return false;\n}\n\n/** Apply each mixin in the chain to make sure they are not applied more than once to the final class.\n * @export\n * @param {function} mixin Mixin to be applyed\n * @returns {object} Mixed class with mixin applied\n */\nexport function dedupeMixin(mixin) {\n return superClass => {\n if (wasMixinPreviouslyApplied(mixin, superClass)) {\n return superClass;\n }\n const mixedClass = mixin(superClass);\n appliedClassMixins.set(mixedClass, mixin);\n return mixedClass;\n };\n}\n", "/**\n * Cache class that allows to search in a cache hierarchy.\n * @template T, Q\n */\nexport class Cache {\n /**\n * Creates a Cache instance\n * @param {Cache} [parent]\n */\n constructor(parent) {\n this._parent = parent;\n this._cache = new Map();\n }\n\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n *\n * @param {T} key - The key of the element to test for presence in the Cache object.\n * @return {boolean}\n */\n has(key) {\n return !!(this._cache.has(key) || (this._parent && this._parent._cache.has(key)));\n }\n\n /**\n * Adds or updates an element with a specified key and a value to a Cache object.\n *\n * @param {T} key - The key of the element to add to the Cache object.\n * @param {Q} value - The value of the element to add to the Cache object.\n * @return {Cache<T, Q>} the cache object\n */\n set(key, value) {\n this._cache.set(key, value);\n\n return this;\n }\n\n /**\n * Returns a specified element from a Map object. If the value that is associated to the provided key is an\n * object, then you will get a reference to that object and any change made to that object will effectively modify\n * it inside the Map object.\n *\n * @param {T} key - The key of the element to return from the Cache object.\n * @return {Q}\n */\n get(key) {\n return this._cache.get(key) || (this._parent && this._parent._cache.get(key));\n }\n}\n", "/**\n * Global counter to scope the custom elements\n *\n * @type {number}\n */\nlet counter = Math.round(Math.random() * 100000);\n\n/**\n * Allowed tag name chars\n *\n * @type {string}\n */\nconst chars = `-|\\\\.|[0-9]|[a-z]`;\n\n/**\n * Regular expression to check if a value is a valid tag name\n *\n * @type {RegExp}\n */\nconst tagRegExp = new RegExp(`[a-z](${chars})*-(${chars})*`);\n\n/**\n * Checks if the tag name is valid\n *\n * @param {string} tag\n * @returns {boolean}\n */\nconst isValid = tag => tagRegExp.exec(tag) !== null;\n\n/**\n * Checks if the tag is already registered\n *\n * @param {string} name\n * @param {CustomElementRegistry} registry\n * @returns {boolean}\n */\nconst isTagRegistered = (name, registry) => !!registry.get(name);\n\n/**\n * Given a tag name scopes it with a number suffix\n *\n * @param {string} tagName\n * @param {CustomElementRegistry} registry\n * @returns {string} scoped tag name\n */\nconst incrementTagName = (tagName, registry) => {\n const newTagName = `${tagName}-${(counter += 1)}`;\n\n if (isTagRegistered(newTagName, registry)) {\n return incrementTagName(tagName, registry);\n }\n\n return newTagName;\n};\n\n/**\n * Creates a unique scoped tag name\n *\n * @exports\n * @param {string} tagName - tag name to scope\n * @param {CustomElementRegistry} registry\n * @returns {string} scoped tag name\n */\nexport function createUniqueTag(tagName, registry = customElements) {\n if (!isValid(tagName)) {\n throw new Error('tagName is invalid');\n }\n\n return incrementTagName(tagName, registry);\n}\n", "/**\n * The global cache for tag names\n *\n * @type {WeakMap<typeof HTMLElement, string>}\n */\nconst globalTagsCache = new WeakMap();\n\n/**\n * Adds a tag to the global tags cache\n *\n * @param {string} tag\n * @param {typeof HTMLElement} klass\n */\nexport const addToGlobalTagsCache = (tag, klass) => globalTagsCache.set(klass, tag);\n\n/**\n * Gets a tag from the global tags cache\n *\n * @exports\n * @param {typeof HTMLElement} klass\n * @returns {undefined|string}\n */\nexport const getFromGlobalTagsCache = klass => globalTagsCache.get(klass);\n", "import { createUniqueTag } from './createUniqueTag.js';\nimport { getFromGlobalTagsCache, addToGlobalTagsCache } from './globalTagsCache.js';\n\n/**\n * Checks if klass is a subclass of native HTMLElement or polyfilled HTMLElement.\n * We manually loop over the prototpe, so we can detect if we extend from native HTMLElement\n * or the polyfilled one from scoped-custom-element-registry (window.HTMLElement)\n * @param {typeof HTMLElement} klass a class, like LitElement\n * @returns {boolean}\n */\nfunction extendsHTMLElement(klass) {\n let currentClass = klass;\n while (currentClass) {\n // currentClass could either be:\n // 1. unpatched, native HTMLElement (when polyfill not loaded this is always the case), or:\n // 2. patched window.HTMLElement (can be the case when polyfill is loaded)\n // If polyfill is loaded and currentClass is the native HTMLElement, we don't have a\n // reference to it (polyfill calls it NativeHTMLElement, but doesn't expose it),\n // so we check its name.\n if (currentClass === window.HTMLElement || currentClass.name === 'HTMLElement') {\n return true;\n }\n currentClass = Object.getPrototypeOf(currentClass);\n }\n return false;\n}\n\n/**\n * Defines a custom element\n *\n * @param {string} tagName\n * @param {typeof HTMLElement} klass\n * @param {CustomElementRegistry} registry\n */\nconst defineElement = (tagName, klass, registry = customElements) => {\n addToGlobalTagsCache(tagName, klass);\n registry.define(tagName, class extends klass {});\n};\n\n/**\n * Stores a lazy element in the cache to be used in future\n *\n * @param {string} tagName\n * @param {CustomElementRegistry} registry\n * @param {import('./Cache.js').Cache<string, string>} tagsCache\n * @returns {string}\n */\nconst storeLazyElementInCache = (tagName, registry, tagsCache) => {\n const tag = createUniqueTag(tagName, registry);\n\n if (!tagsCache) {\n throw new Error('Lazy scoped elements requires the use of tags cache');\n }\n\n tagsCache.set(tagName, tag);\n\n return tag;\n};\n\n/**\n * Define a scoped custom element storing the scoped tag name in the cache\n *\n * @param {string} tagName\n * @param {typeof HTMLElement} klass\n * @param {import('./Cache.js').Cache<string, string>} tagsCache\n * @returns {string}\n */\nconst defineElementAndStoreInCache = (tagName, klass, tagsCache) => {\n const registry = customElements;\n\n if (!extendsHTMLElement(klass)) {\n return storeLazyElementInCache(tagName, registry, tagsCache);\n }\n\n if (klass === customElements.get(tagName)) {\n addToGlobalTagsCache(tagName, klass);\n\n return tagName;\n }\n\n const tag = createUniqueTag(tagName, registry);\n // @ts-ignore\n // we extend it just in case the class has been defined manually\n defineElement(tag, klass, registry);\n\n return tag;\n};\n\n/**\n * Gets a scoped tag name from the cache or generates a new one and defines the element if needed\n *\n * @exports\n * @param {string} tagName\n * @param {typeof HTMLElement} klass\n * @param {import('./Cache.js').Cache<string, string>} tagsCache\n * @returns {string}\n */\nexport function registerElement(tagName, klass, tagsCache = undefined) {\n const tag =\n getFromGlobalTagsCache(klass) ||\n (tagsCache && tagsCache.get(tagName)) ||\n defineElementAndStoreInCache(tagName, klass, tagsCache);\n\n return tag;\n}\n\n/**\n * Defines a lazy element\n *\n * @param {string} tagName\n * @param {typeof HTMLElement} klass\n * @param {import('./Cache.js').Cache<string, string>} tagsCache\n */\nexport function defineScopedElement(tagName, klass, tagsCache) {\n const tag = tagsCache.get(tagName);\n\n if (tag) {\n if (customElements.get(tag) === undefined) {\n defineElement(tag, klass, customElements);\n }\n } else {\n tagsCache.set(tagName, registerElement(tagName, klass, tagsCache));\n }\n}\n", "import { registerElement } from './registerElement.js';\nimport { Cache } from './Cache.js';\n\n/**\n * @typedef {import('./types').ScopedElementsMap} ScopedElementsMap\n */\n\n/**\n * Allowed tag name chars\n *\n * @type {string}\n */\nconst chars = `-|\\\\.|[0-9]|[a-z]`;\n\n/**\n * Regular Expression to find a custom element tag\n *\n * @type {RegExp}\n */\nconst re = new RegExp(`<\\\\/?([a-z](${chars})*-(${chars})*)`, 'g');\n\n/**\n * The global cache of processed string arrays\n *\n * @type {Cache<TemplateStringsArray, TemplateStringsArray>}\n */\nconst globalCache = new Cache();\n\n/**\n * Find custom element tags in the string\n *\n * @param {string} str\n * @returns {RegExpExecArray[]}\n */\nconst matchAll = str => {\n const matches = [];\n let result;\n // eslint-disable-next-line no-cond-assign\n while ((result = re.exec(str)) !== null) {\n matches.push(result);\n }\n\n return matches;\n};\n\n/**\n * Transforms a string array into another one with resolved scoped elements and caches it for future references\n *\n * @param {TemplateStringsArray} strings\n * @param {ScopedElementsMap} scopedElements\n * @param {Cache<TemplateStringsArray, TemplateStringsArray>} templateCache\n * @param {Cache<string, string>} tagsCache\n * @returns {TemplateStringsArray}\n */\nconst transformTemplate = (strings, scopedElements, templateCache, tagsCache) => {\n const transformedStrings = strings.map(str => {\n let acc = str;\n const matches = matchAll(str);\n\n for (let i = matches.length - 1; i >= 0; i -= 1) {\n const item = matches[i];\n const [block, tagName] = item;\n const tag = registerElement(tagName, scopedElements[tagName], tagsCache);\n const start = item.index + block.length - tagName.length;\n const end = start + tagName.length;\n const isClosingTag = block.indexOf('</') === 0;\n\n acc =\n acc.slice(0, start) +\n (isClosingTag ? tag : `${tag} data-tag-name=\"${tagName}\"`) +\n acc.slice(end);\n }\n\n return acc;\n });\n\n // @ts-ignore\n // noinspection JSCheckFunctionSignatures\n templateCache.set(strings, transformedStrings);\n\n // @ts-ignore\n // noinspection JSValidateTypes\n return transformedStrings;\n};\n\n/**\n * Obtains the cached strings array with resolved scoped elements or creates it\n *\n * @exports\n * @param {TemplateStringsArray} strings\n * @param {ScopedElementsMap} scopedElements\n * @param {import('./Cache.js').Cache<TemplateStringsArray, TemplateStringsArray>} templateCache\n * @param {import('./Cache.js').Cache<string, string>} tagsCache\n * @returns {TemplateStringsArray}\n */\nexport function transform(strings, scopedElements, templateCache = globalCache, tagsCache) {\n return (\n templateCache.get(strings) ||\n transformTemplate(strings, scopedElements, templateCache, tagsCache)\n );\n}\n", "import { templateCaches } from 'lit-html/lib/template-factory.js';\nimport { marker, Template } from 'lit-html/lib/template.js';\n\nconst getTemplateCacheKey = (type, scopeName) => `${type}--${scopeName}`;\n\nlet compatibleShadyCSSVersion = true;\n\n// @ts-ignore\nconst { ShadyCSS } = window;\n\nif (typeof ShadyCSS === 'undefined') {\n compatibleShadyCSSVersion = false;\n} else if (typeof ShadyCSS.prepareTemplateDom === 'undefined') {\n compatibleShadyCSSVersion = false;\n}\n\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = scopeName => result => {\n const cacheKey = getTemplateCacheKey(result.type, scopeName);\n let templateCache = templateCaches.get(cacheKey);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map(),\n };\n templateCaches.set(cacheKey, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n const key = result.strings.join(marker);\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n const element = result.getTemplateElement();\n if (compatibleShadyCSSVersion) {\n ShadyCSS.prepareTemplateDom(element, scopeName);\n }\n template = new Template(result, element);\n templateCache.keyString.set(key, template);\n }\n templateCache.stringsArray.set(result.strings, template);\n return template;\n};\n", "/* eslint-disable no-use-before-define */\nimport { TemplateResult } from 'lit-html';\nimport { dedupeMixin } from '@open-wc/dedupe-mixin';\nimport { Cache } from './Cache.js';\nimport { transform } from './transform.js';\nimport { defineScopedElement, registerElement } from './registerElement.js';\nimport { shadyTemplateFactory } from './shadyTemplateFactory.js';\n\n/**\n * @typedef {import('./types').ScopedElementsMixin} ScopedElementsMixin\n * @typedef {import('./types').ScopedElementsMap} ScopedElementsMap\n * @typedef {import(\"lit-element\").LitElement} LitElement\n * @typedef {import('lit-html/lib/shady-render').ShadyRenderOptions} ShadyRenderOptions\n * @typedef {function(TemplateResult, Element|DocumentFragment|ShadowRoot, ShadyRenderOptions): void} RenderFunction\n */\n\n/**\n * Template caches\n *\n * @type {WeakMap<Function, Cache<TemplateStringsArray, TemplateStringsArray>>}\n */\nconst templateCaches = new WeakMap();\n\n/**\n * Retrieves or creates a templateCache for a specific key\n *\n * @param {Function} key\n * @returns {Cache<TemplateStringsArray, TemplateStringsArray>}\n */\nconst getTemplateCache = key => {\n if (!templateCaches.has(key)) {\n // @ts-ignore\n templateCaches.set(key, new Cache(templateCaches.get(key.constructor)));\n }\n\n return templateCaches.get(key);\n};\n\n/**\n * Tags caches\n *\n * @type {WeakMap<object, Cache<string, string>>}\n */\nconst tagsCaches = new WeakMap();\n\n/**\n * Retrieves or creates a tagsCache for a specific key\n * @param {object} key\n * @returns {Cache<string, string>}\n */\nconst getTagsCache = key => {\n if (!tagsCaches.has(key)) {\n tagsCaches.set(key, new Cache(tagsCaches.get(key.constructor)));\n }\n\n return tagsCaches.get(key);\n};\n\n/**\n * Transforms an array of TemplateResults or arrays into another one with resolved scoped elements\n *\n * @param {ReadonlyArray} items\n * @param {ScopedElementsMap} scopedElements\n * @param {Cache<TemplateStringsArray, TemplateStringsArray>} templateCache\n * @param {Cache<string, string>} tagsCache\n * @returns {ReadonlyArray}\n */\nconst transformArray = (items, scopedElements, templateCache, tagsCache) =>\n items.map(value => {\n if (value instanceof TemplateResult) {\n return transformTemplate(value, scopedElements, templateCache, tagsCache);\n }\n\n if (Array.isArray(value)) {\n return transformArray(value, scopedElements, templateCache, tagsCache);\n }\n\n return value;\n });\n\n/**\n * Transforms a TemplateResult into another one with resolved scoped elements\n *\n * @param {TemplateResult} template\n * @param {ScopedElementsMap} scopedElements\n * @param {Cache<TemplateStringsArray, TemplateStringsArray>} templateCache\n * @param {Cache<string, string>} tagsCache\n * @returns {TemplateResult}\n */\nconst transformTemplate = (template, scopedElements, templateCache, tagsCache) =>\n new TemplateResult(\n transform(template.strings, scopedElements, templateCache, tagsCache),\n transformArray(template.values, scopedElements, templateCache, tagsCache),\n template.type,\n template.processor,\n );\n\n/**\n * Gets an instance of the ScopedElementsTemplateFactory\n *\n * @param {string} scopeName\n * @param {ScopedElementsMap} scopedElements\n * @param {Cache<TemplateStringsArray, TemplateStringsArray>} templateCache\n * @param {Cache<string, string>} tagsCache\n * @returns {function(any): any}\n */\nconst scopedElementsTemplateFactory = (\n scopeName,\n scopedElements,\n templateCache,\n tagsCache,\n) => template => {\n const newTemplate = transformTemplate(template, scopedElements, templateCache, tagsCache);\n\n return shadyTemplateFactory(scopeName)(newTemplate);\n};\n\n/** @type {ScopedElementsMixin} */\nconst ScopedElementsMixinImplementation = superclass =>\n class ScopedElementsHost extends superclass {\n /**\n * Obtains the scoped elements definitions map\n *\n * @returns {ScopedElementsMap}\n */\n static get scopedElements() {\n return {};\n }\n\n /** @override */\n static render(template, container, options) {\n if (!options || typeof options !== 'object' || !options.scopeName) {\n throw new Error('The `scopeName` option is required.');\n }\n const { scopeName, eventContext } = options;\n\n const templateCache = getTemplateCache(eventContext);\n const tagsCache = getTagsCache(eventContext);\n const { scopedElements } = this;\n\n return super.render(template, container, {\n ...options,\n templateFactory: scopedElementsTemplateFactory(\n scopeName,\n scopedElements,\n templateCache,\n tagsCache,\n ),\n });\n }\n\n /**\n * Defines a scoped element\n *\n * @param {string} tagName\n * @param {typeof HTMLElement} klass\n */\n defineScopedElement(tagName, klass) {\n return defineScopedElement(tagName, klass, getTagsCache(this));\n }\n\n /**\n * Returns a scoped tag name\n *\n * @deprecated Please, use the instance method instead of the static one. This static method is not able to\n * obtain the tagName of lazy defined elements, while the instance one is.\n * @param {string} tagName\n * @returns {string|undefined}\n */\n static getScopedTagName(tagName) {\n // @ts-ignore\n const klass = this.scopedElements[tagName];\n\n return klass\n ? registerElement(tagName, klass, getTagsCache(this))\n : getTagsCache(this).get(tagName);\n }\n\n /**\n * Returns a scoped tag name\n *\n * @param {string} tagName\n * @returns {string|undefined}\n */\n getScopedTagName(tagName) {\n // @ts-ignore\n const klass = this.constructor.scopedElements[tagName];\n\n return klass\n ? registerElement(tagName, klass, getTagsCache(this))\n : getTagsCache(this).get(tagName);\n }\n };\n\nexport const ScopedElementsMixin = dedupeMixin(ScopedElementsMixinImplementation);\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n * div#1 (remove) <-- start removing (removing node is div#1)\n * div\n * div#2 (remove) <-- continue removing (removing node is still div#1)\n * div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nexport function removeNodesFromTemplate(\n template: Template, nodesToRemove: Set<Node>) {\n const {element: {content}, parts} = template;\n const walker =\n document.createTreeWalker(content, walkerNodeFilter, null, false);\n let partIndex = nextActiveIndexInTemplateParts(parts);\n let part = parts[partIndex];\n let nodeIndex = -1;\n let removeCount = 0;\n const nodesToRemoveInTemplate = [];\n let currentRemovingNode: Node|null = null;\n while (walker.nextNode()) {\n nodeIndex++;\n const node = walker.currentNode as Element;\n // End removal if stepped past the removing node\n if (node.previousSibling === currentRemovingNode) {\n currentRemovingNode = null;\n }\n // A node to remove was found in the template\n if (nodesToRemove.has(node)) {\n nodesToRemoveInTemplate.push(node);\n // Track node we're removing\n if (currentRemovingNode === null) {\n currentRemovingNode = node;\n }\n }\n // When removing, increment count by which to adjust subsequent part indices\n if (currentRemovingNode !== null) {\n removeCount++;\n }\n while (part !== undefined && part.index === nodeIndex) {\n // If part is in a removed node deactivate it by setting index to -1 or\n // adjust the index as needed.\n part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n // go to the next active part.\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n part = parts[partIndex];\n }\n }\n nodesToRemoveInTemplate.forEach((n) => n.parentNode!.removeChild(n));\n}\n\nconst countNodes = (node: Node) => {\n let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n while (walker.nextNode()) {\n count++;\n }\n return count;\n};\n\nconst nextActiveIndexInTemplateParts =\n (parts: TemplatePart[], startIndex = -1) => {\n for (let i = startIndex + 1; i < parts.length; i++) {\n const part = parts[i];\n if (isTemplatePartActive(part)) {\n return i;\n }\n }\n return -1;\n };\n\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nexport function insertNodeIntoTemplate(\n template: Template, node: Node, refNode: Node|null = null) {\n const {element: {content}, parts} = template;\n // If there's no refNode, then put node at end of template.\n // No part indices need to be shifted in this case.\n if (refNode === null || refNode === undefined) {\n content.appendChild(node);\n return;\n }\n const walker =\n document.createTreeWalker(content, walkerNodeFilter, null, false);\n let partIndex = nextActiveIndexInTemplateParts(parts);\n let insertCount = 0;\n let walkerIndex = -1;\n while (walker.nextNode()) {\n walkerIndex++;\n const walkerNode = walker.currentNode as Element;\n if (walkerNode === refNode) {\n insertCount = countNodes(node);\n refNode.parentNode!.insertBefore(node, refNode);\n }\n while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n // If we've inserted the node, simply adjust all subsequent parts\n if (insertCount > 0) {\n while (partIndex !== -1) {\n parts[partIndex].index += insertCount;\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n }\n return;\n }\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n }\n }\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {removeNodes} from './dom.js';\nimport {insertNodeIntoTemplate, removeNodesFromTemplate} from './modify-template.js';\nimport {RenderOptions} from './render-options.js';\nimport {parts, render as litRender} from './render.js';\nimport {templateCaches} from './template-factory.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\nexport {html, svg, TemplateResult} from '../lit-html.js';\n\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type: string, scopeName: string) =>\n `${type}--${scopeName}`;\n\nlet compatibleShadyCSSVersion = true;\n\nif (typeof window.ShadyCSS === 'undefined') {\n compatibleShadyCSSVersion = false;\n} else if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n console.warn(\n `Incompatible ShadyCSS version detected. ` +\n `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n `@webcomponents/shadycss@1.3.1.`);\n compatibleShadyCSSVersion = false;\n}\n\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = (scopeName: string) =>\n (result: TemplateResult) => {\n const cacheKey = getTemplateCacheKey(result.type, scopeName);\n let templateCache = templateCaches.get(cacheKey);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n keyString: new Map<string, Template>()\n };\n templateCaches.set(cacheKey, templateCache);\n }\n\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n\n const key = result.strings.join(marker);\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n const element = result.getTemplateElement();\n if (compatibleShadyCSSVersion) {\n window.ShadyCSS!.prepareTemplateDom(element, scopeName);\n }\n template = new Template(result, element);\n templateCache.keyString.set(key, template);\n }\n templateCache.stringsArray.set(result.strings, template);\n return template;\n };\n\nconst TEMPLATE_TYPES = ['html', 'svg'];\n\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName: string) => {\n TEMPLATE_TYPES.forEach((type) => {\n const templates = templateCaches.get(getTemplateCacheKey(type, scopeName));\n if (templates !== undefined) {\n templates.keyString.forEach((template) => {\n const {element: {content}} = template;\n // IE 11 doesn't support the iterable param Set constructor\n const styles = new Set<Element>();\n Array.from(content.querySelectorAll('style')).forEach((s: Element) => {\n styles.add(s);\n });\n removeNodesFromTemplate(template, styles);\n });\n }\n });\n};\n\nconst shadyRenderSet = new Set<string>();\n\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles =\n (scopeName: string, renderedDOM: DocumentFragment, template?: Template) => {\n shadyRenderSet.add(scopeName);\n // If `renderedDOM` is stamped from a Template, then we need to edit that\n // Template's underlying template element. Otherwise, we create one here\n // to give to ShadyCSS, which still requires one while scoping.\n const templateElement =\n !!template ? template.element : document.createElement('template');\n // Move styles out of rendered DOM and store.\n const styles = renderedDOM.querySelectorAll('style');\n const {length} = styles;\n // If there are no styles, skip unnecessary work\n if (length === 0) {\n // Ensure prepareTemplateStyles is called to support adding\n // styles via `prepareAdoptedCssText` since that requires that\n // `prepareTemplateStyles` is called.\n //\n // ShadyCSS will only update styles containing @apply in the template\n // given to `prepareTemplateStyles`. If no lit Template was given,\n // ShadyCSS will not be able to update uses of @apply in any relevant\n // template. However, this is not a problem because we only create the\n // template for the purpose of supporting `prepareAdoptedCssText`,\n // which doesn't support @apply at all.\n window.ShadyCSS!.prepareTemplateStyles(templateElement, scopeName);\n return;\n }\n const condensedStyle = document.createElement('style');\n // Collect styles into a single style. This helps us make sure ShadyCSS\n // manipulations will not prevent us from being able to fix up template\n // part indices.\n // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n // currently does this anyway. When it does not, this should be changed.\n for (let i = 0; i < length; i++) {\n const style = styles[i];\n style.parentNode!.removeChild(style);\n condensedStyle.textContent! += style.textContent;\n }\n // Remove styles from nested templates in this scope.\n removeStylesFromLitTemplates(scopeName);\n // And then put the condensed style into the \"root\" template passed in as\n // `template`.\n const content = templateElement.content;\n if (!!template) {\n insertNodeIntoTemplate(template, condensedStyle, content.firstChild);\n } else {\n content.insertBefore(condensedStyle, content.firstChild);\n }\n // Note, it's important that ShadyCSS gets the template that `lit-html`\n // will actually render so that it can update the style inside when\n // needed (e.g. @apply native Shadow DOM case).\n window.ShadyCSS!.prepareTemplateStyles(templateElement, scopeName);\n const style = content.querySelector('style');\n if (window.ShadyCSS!.nativeShadow && style !== null) {\n // When in native Shadow DOM, ensure the style created by ShadyCSS is\n // included in initially rendered output (`renderedDOM`).\n renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n } else if (!!template) {\n // When no style is left in the template, parts will be broken as a\n // result. To fix this, we put back the style node ShadyCSS removed\n // and then tell lit to remove that node from the template.\n // There can be no style in the template in 2 cases (1) when Shady DOM\n // is in use, ShadyCSS removes all styles, (2) when native Shadow DOM\n // is in use ShadyCSS removes the style if it contains no content.\n // NOTE, ShadyCSS creates its own style so we can safely add/remove\n // `condensedStyle` here.\n content.insertBefore(condensedStyle, content.firstChild);\n const removes = new Set<Node>();\n removes.add(condensedStyle);\n removeNodesFromTemplate(template, removes);\n }\n };\n\nexport interface ShadyRenderOptions extends Partial<RenderOptions> {\n scopeName: string;\n}\n\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nexport const render =\n (result: unknown,\n container: Element|DocumentFragment|ShadowRoot,\n options: ShadyRenderOptions) => {\n if (!options || typeof options !== 'object' || !options.scopeName) {\n throw new Error('The `scopeName` option is required.');\n }\n const scopeName = options.scopeName;\n const hasRendered = parts.has(container);\n const needsScoping = compatibleShadyCSSVersion &&\n container.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ &&\n !!(container as ShadowRoot).host;\n // Handle first render to a scope specially...\n const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n // On first scope render, render into a fragment; this cannot be a single\n // fragment that is reused since nested renders can occur synchronously.\n const renderContainer =\n firstScopeRender ? document.createDocumentFragment() : container;\n litRender(\n result,\n renderContainer,\n {templateFactory: shadyTemplateFactory(scopeName), ...options} as\n RenderOptions);\n // When performing first scope render,\n // (1) We've rendered into a fragment so that there's a chance to\n // `prepareTemplateStyles` before sub-elements hit the DOM\n // (which might cause them to render based on a common pattern of\n // rendering in a custom element's `connectedCallback`);\n // (2) Scope the template with ShadyCSS one time only for this scope.\n // (3) Render the fragment into the container and make sure the\n // container knows its `part` is the one we just rendered. This ensures\n // DOM will be re-used on subsequent renders.\n if (firstScopeRender) {\n const part = parts.get(renderContainer)!;\n parts.delete(renderContainer);\n // ShadyCSS might have style sheets (e.g. from `prepareAdoptedCssText`)\n // that should apply to `renderContainer` even if the rendered value is\n // not a TemplateInstance. However, it will only insert scoped styles\n // into the document if `prepareTemplateStyles` has already been called\n // for the given scope name.\n const template = part.value instanceof TemplateInstance ?\n part.value.template :\n undefined;\n prepareTemplateStyles(\n scopeName, renderContainer as DocumentFragment, template);\n removeNodes(container, container.firstChild);\n container.appendChild(renderContainer);\n parts.set(container, part);\n }\n // After elements have hit the DOM, update styling if this is the\n // initial render to this container.\n // This is needed whenever dynamic changes are made so it would be\n // safest to do every render; however, this would regress performance\n // so we leave it up to the user to call `ShadyCSS.styleElement`\n // for dynamic changes.\n if (!hasRendered && needsScoping) {\n window.ShadyCSS!.styleElement((container as ShadowRoot).host);\n }\n };\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n <P extends PropertyKey>(prop: P, _obj: unknown): P => prop;\n\ndeclare global {\n var JSCompiler_renameProperty: <P extends PropertyKey>(\n prop: P, _obj: unknown) => P;\n\n interface Window {\n JSCompiler_renameProperty: typeof JSCompiler_renameProperty;\n }\n}\n\n/**\n * Converts property values to and from attribute values.\n */\nexport interface ComplexAttributeConverter<Type = unknown, TypeHint = unknown> {\n /**\n * Function called to convert an attribute value to a property\n * value.\n */\n fromAttribute?(value: string|null, type?: TypeHint): Type;\n\n /**\n * Function called to convert a property value to an attribute\n * value.\n *\n * It returns unknown instead of string, to be compatible with\n * https://github.com/WICG/trusted-types (and similar efforts).\n */\n toAttribute?(value: Type, type?: TypeHint): unknown;\n}\n\ntype AttributeConverter<Type = unknown, TypeHint = unknown> =\n ComplexAttributeConverter<Type>|\n ((value: string|null, type?: TypeHint) => Type);\n\n/**\n * Defines options for a property accessor.\n */\nexport interface PropertyDeclaration<Type = unknown, TypeHint = unknown> {\n /**\n * Indicates how and whether the property becomes an observed attribute.\n * If the value is `false`, the property is not added to `observedAttributes`.\n * If true or absent, the lowercased property name is observed (e.g. `fooBar`\n * becomes `foobar`). If a string, the string value is observed (e.g\n * `attribute: 'foo-bar'`).\n */\n readonly attribute?: boolean|string;\n\n /**\n * Indicates the type of the property. This is used only as a hint for the\n * `converter` to determine how to convert the attribute\n * to/from a property.\n */\n readonly type?: TypeHint;\n\n /**\n * Indicates how to convert the attribute to/from a property. If this value\n * is a function, it is used to convert the attribute value a the property\n * value. If it's an object, it can have keys for `fromAttribute` and\n * `toAttribute`. If no `toAttribute` function is provided and\n * `reflect` is set to `true`, the property value is set directly to the\n * attribute. A default `converter` is used if none is provided; it supports\n * `Boolean`, `String`, `Number`, `Object`, and `Array`. Note,\n * when a property changes and the converter is used to update the attribute,\n * the property is never updated again as a result of the attribute changing,\n * and vice versa.\n */\n readonly converter?: AttributeConverter<Type, TypeHint>;\n\n /**\n * Indicates if the property should reflect to an attribute.\n * If `true`, when the property is set, the attribute is set using the\n * attribute name determined according to the rules for the `attribute`\n * property option and the value of the property converted using the rules\n * from the `converter` property option.\n */\n readonly reflect?: boolean;\n\n /**\n * A function that indicates if a property should be considered changed when\n * it is set. The function should take the `newValue` and `oldValue` and\n * return `true` if an update should be requested.\n */\n hasChanged?(value: Type, oldValue: Type): boolean;\n\n /**\n * Indicates whether an accessor will be created for this property. By\n * default, an accessor will be generated for this property that requests an\n * update when set. If this flag is `true`, no accessor will be created, and\n * it will be the user's responsibility to call\n * `this.requestUpdate(propertyName, oldValue)` to request an update when\n * the property changes.\n */\n readonly noAccessor?: boolean;\n}\n\n/**\n * Map of properties to PropertyDeclaration options. For each property an\n * accessor is made, and the property is processed according to the\n * PropertyDeclaration options.\n */\nexport interface PropertyDeclarations {\n readonly [key: string]: PropertyDeclaration;\n}\n\ntype PropertyDeclarationMap = Map<PropertyKey, PropertyDeclaration>;\n\ntype AttributeMap = Map<string, PropertyKey>;\n\n/**\n * Map of changed properties with old values. Takes an optional generic\n * interface corresponding to the declared element properties.\n */\n// tslint:disable-next-line:no-any\nexport type PropertyValues<T = any> =\n keyof T extends PropertyKey ? Map<keyof T, unknown>: never;\n\nexport const defaultConverter: ComplexAttributeConverter = {\n\n toAttribute(value: unknown, type?: unknown): unknown {\n switch (type) {\n case Boolean:\n return value ? '' : null;\n case Object:\n case Array:\n // if the value is `null` or `undefined` pass this through\n // to allow removing/no change behavior.\n return value == null ? value : JSON.stringify(value);\n }\n return value;\n },\n\n fromAttribute(value: string|null, type?: unknown) {\n switch (type) {\n case Boolean:\n return value !== null;\n case Number:\n return value === null ? null : Number(value);\n case Object:\n case Array:\n // Type assert to adhere to Bazel's \"must type assert JSON parse\" rule.\n return JSON.parse(value!) as unknown;\n }\n return value;\n }\n\n};\n\nexport interface HasChanged {\n (value: unknown, old: unknown): boolean;\n}\n\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual: HasChanged = (value: unknown, old: unknown): boolean => {\n // This ensures (old==NaN, value==NaN) always returns false\n return old !== value && (old === old || value === value);\n};\n\nconst defaultPropertyDeclaration: PropertyDeclaration = {\n attribute: true,\n type: String,\n converter: defaultConverter,\n reflect: false,\n hasChanged: notEqual\n};\n\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\ntype UpdateState = typeof STATE_HAS_UPDATED|typeof STATE_UPDATE_REQUESTED|\n typeof STATE_IS_REFLECTING_TO_ATTRIBUTE|\n typeof STATE_IS_REFLECTING_TO_PROPERTY;\n\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nexport abstract class UpdatingElement extends HTMLElement {\n /*\n * Due to closure compiler ES6 compilation bugs, @nocollapse is required on\n * all static methods and properties with initializers. Reference:\n * - https://github.com/google/closure-compiler/issues/1776\n */\n\n /**\n * Maps attribute names to properties; for example `foobar` attribute to\n * `fooBar` property. Created lazily on user subclasses when finalizing the\n * class.\n */\n private static _attributeToPropertyMap: AttributeMap;\n\n /**\n * Marks class as having finished creating properties.\n */\n protected static[finalized] = true;\n\n /**\n * Memoized list of all class properties, including any superclass properties.\n * Created lazily on user subclasses when finalizing the class.\n */\n private static _classProperties?: PropertyDeclarationMap;\n\n /**\n * User-supplied object that maps property names to `PropertyDeclaration`\n * objects containing options for configuring the property.\n */\n static properties: PropertyDeclarations;\n\n /**\n * Returns a list of attributes corresponding to the registered properties.\n * @nocollapse\n */\n static get observedAttributes() {\n // note: piggy backing on this to ensure we're finalized.\n this.finalize();\n const attributes: string[] = [];\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this._classProperties!.forEach((v, p) => {\n const attr = this._attributeNameForProperty(p, v);\n if (attr !== undefined) {\n this._attributeToPropertyMap.set(attr, p);\n attributes.push(attr);\n }\n });\n return attributes;\n }\n\n /**\n * Ensures the private `_classProperties` property metadata is created.\n * In addition to `finalize` this is also called in `createProperty` to\n * ensure the `@property` decorator can add property metadata.\n */\n /** @nocollapse */\n private static _ensureClassProperties() {\n // ensure private storage for property declarations.\n if (!this.hasOwnProperty(\n JSCompiler_renameProperty('_classProperties', this))) {\n this._classProperties = new Map();\n // NOTE: Workaround IE11 not supporting Map constructor argument.\n const superProperties: PropertyDeclarationMap =\n Object.getPrototypeOf(this)._classProperties;\n if (superProperties !== undefined) {\n superProperties.forEach(\n (v: PropertyDeclaration, k: PropertyKey) =>\n this._classProperties!.set(k, v));\n }\n }\n }\n\n /**\n * Creates a property accessor on the element prototype if one does not exist\n * and stores a PropertyDeclaration for the property with the given options.\n * The property setter calls the property's `hasChanged` property option\n * or uses a strict identity check to determine whether or not to request\n * an update.\n *\n * This method may be overridden to customize properties; however,\n * when doing so, it's important to call `super.createProperty` to ensure\n * the property is setup correctly. This method calls\n * `getPropertyDescriptor` internally to get a descriptor to install.\n * To customize what properties do when they are get or set, override\n * `getPropertyDescriptor`. To customize the options for a property,\n * implement `createProperty` like this:\n *\n * static createProperty(name, options) {\n * options = Object.assign(options, {myOption: true});\n * super.createProperty(name, options);\n * }\n *\n * @nocollapse\n */\n static createProperty(\n name: PropertyKey,\n options: PropertyDeclaration = defaultPropertyDeclaration) {\n // Note, since this can be called by the `@property` decorator which\n // is called before `finalize`, we ensure storage exists for property\n // metadata.\n this._ensureClassProperties();\n this._classProperties!.set(name, options);\n // Do not generate an accessor if the prototype already has one, since\n // it would be lost otherwise and that would never be the user's intention;\n // Instead, we expect users to call `requestUpdate` themselves from\n // user-defined accessors. Note that if the super has an accessor we will\n // still overwrite it\n if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n return;\n }\n const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n const descriptor = this.getPropertyDescriptor(name, key, options);\n if (descriptor !== undefined) {\n Object.defineProperty(this.prototype, name, descriptor);\n }\n }\n\n /**\n * Returns a property descriptor to be defined on the given named property.\n * If no descriptor is returned, the property will not become an accessor.\n * For example,\n *\n * class MyElement extends LitElement {\n * static getPropertyDescriptor(name, key, options) {\n * const defaultDescriptor =\n * super.getPropertyDescriptor(name, key, options);\n * const setter = defaultDescriptor.set;\n * return {\n * get: defaultDescriptor.get,\n * set(value) {\n * setter.call(this, value);\n * // custom action.\n * },\n * configurable: true,\n * enumerable: true\n * }\n * }\n * }\n *\n * @nocollapse\n */\n protected static getPropertyDescriptor(\n name: PropertyKey, key: string|symbol, options: PropertyDeclaration) {\n return {\n // tslint:disable-next-line:no-any no symbol in index\n get(): any {\n return (this as {[key: string]: unknown})[key as string];\n },\n set(this: UpdatingElement, value: unknown) {\n const oldValue =\n (this as {} as {[key: string]: unknown})[name as string];\n (this as {} as {[key: string]: unknown})[key as string] = value;\n (this as unknown as UpdatingElement)\n .requestUpdateInternal(name, oldValue, options);\n },\n configurable: true,\n enumerable: true\n };\n }\n\n /**\n * Returns the property options associated with the given property.\n * These options are defined with a PropertyDeclaration via the `properties`\n * object or the `@property` decorator and are registered in\n * `createProperty(...)`.\n *\n * Note, this method should be considered \"final\" and not overridden. To\n * customize the options for a given property, override `createProperty`.\n *\n * @nocollapse\n * @final\n */\n protected static getPropertyOptions(name: PropertyKey) {\n return this._classProperties && this._classProperties.get(name) ||\n defaultPropertyDeclaration;\n }\n\n /**\n * Creates property accessors for registered properties and ensures\n * any superclasses are also finalized.\n * @nocollapse\n */\n protected static finalize() {\n // finalize any superclasses\n const superCtor = Object.getPrototypeOf(this);\n if (!superCtor.hasOwnProperty(finalized)) {\n superCtor.finalize();\n }\n this[finalized] = true;\n this._ensureClassProperties();\n // initialize Map populated in observedAttributes\n this._attributeToPropertyMap = new Map();\n // make any properties\n // Note, only process \"own\" properties since this element will inherit\n // any properties defined on the superClass, and finalization ensures\n // the entire prototype chain is finalized.\n if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n const props = this.properties;\n // support symbols in properties (IE11 does not support this)\n const propKeys = [\n ...Object.getOwnPropertyNames(props),\n ...(typeof Object.getOwnPropertySymbols === 'function') ?\n Object.getOwnPropertySymbols(props) :\n []\n ];\n // This for/of is ok because propKeys is an array\n for (const p of propKeys) {\n // note, use of `any` is due to TypeSript lack of support for symbol in\n // index types\n // tslint:disable-next-line:no-any no symbol in index\n this.createProperty(p, (props as any)[p]);\n }\n }\n }\n\n /**\n * Returns the property name for the given attribute `name`.\n * @nocollapse\n */\n private static _attributeNameForProperty(\n name: PropertyKey, options: PropertyDeclaration) {\n const attribute = options.attribute;\n return attribute === false ?\n undefined :\n (typeof attribute === 'string' ?\n attribute :\n (typeof name === 'string' ? name.toLowerCase() : undefined));\n }\n\n /**\n * Returns true if a property should request an update.\n * Called when a property value is set and uses the `hasChanged`\n * option for the property if present or a strict identity check.\n * @nocollapse\n */\n private static _valueHasChanged(\n value: unknown, old: unknown, hasChanged: HasChanged = notEqual) {\n return hasChanged(value, old);\n }\n\n /**\n * Returns the property value for the given attribute value.\n * Called via the `attributeChangedCallback` and uses the property's\n * `converter` or `converter.fromAttribute` property option.\n * @nocollapse\n */\n private static _propertyValueFromAttribute(\n value: string|null, options: PropertyDeclaration) {\n const type = options.type;\n const converter = options.converter || defaultConverter;\n const fromAttribute =\n (typeof converter === 'function' ? converter : converter.fromAttribute);\n return fromAttribute ? fromAttribute(value, type) : value;\n }\n\n /**\n * Returns the attribute value for the given property value. If this\n * returns undefined, the property will *not* be reflected to an attribute.\n * If this returns null, the attribute will be removed, otherwise the\n * attribute will be set to the value.\n * This uses the property's `reflect` and `type.toAttribute` property options.\n * @nocollapse\n */\n private static _propertyValueToAttribute(\n value: unknown, options: PropertyDeclaration) {\n if (options.reflect === undefined) {\n return;\n }\n const type = options.type;\n const converter = options.converter;\n const toAttribute =\n converter && (converter as ComplexAttributeConverter).toAttribute ||\n defaultConverter.toAttribute;\n return toAttribute!(value, type);\n }\n\n private _updateState!: UpdateState;\n private _instanceProperties?: PropertyValues;\n // Initialize to an unresolved Promise so we can make sure the element has\n // connected before first update.\n private _updatePromise!: Promise<unknown>;\n private _enableUpdatingResolver: ((r?: unknown) => void)|undefined;\n\n /**\n * Map with keys for any properties that have changed since the last\n * update cycle with previous values.\n */\n private _changedProperties!: PropertyValues;\n\n /**\n * Map with keys of properties that should be reflected when updated.\n */\n private _reflectingProperties?: Map<PropertyKey, PropertyDeclaration>;\n\n constructor() {\n super();\n this.initialize();\n }\n\n /**\n * Performs element initialization. By default captures any pre-set values for\n * registered properties.\n */\n protected initialize() {\n this._updateState = 0;\n this._updatePromise =\n new Promise((res) => this._enableUpdatingResolver = res);\n this._changedProperties = new Map();\n this._saveInstanceProperties();\n // ensures first update will be caught by an early access of\n // `updateComplete`\n this.requestUpdateInternal();\n }\n\n /**\n * Fixes any properties set on the instance before upgrade time.\n * Otherwise these would shadow the accessor and break these properties.\n * The properties are stored in a Map which is played back after the\n * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n * (<=41), properties created for native platform properties like (`id` or\n * `name`) may not have default values set in the element constructor. On\n * these browsers native properties appear on instances and therefore their\n * default value will overwrite any element default (e.g. if the element sets\n * this.id = 'id' in the constructor, the 'id' will become '' since this is\n * the native platform default).\n */\n private _saveInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n (this.constructor as typeof UpdatingElement)\n ._classProperties!.forEach((_v, p) => {\n if (this.hasOwnProperty(p)) {\n const value = this[p as keyof this];\n delete this[p as keyof this];\n if (!this._instanceProperties) {\n this._instanceProperties = new Map();\n }\n this._instanceProperties.set(p, value);\n }\n });\n }\n\n /**\n * Applies previously saved instance properties.\n */\n private _applyInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n // tslint:disable-next-line:no-any\n this._instanceProperties!.forEach((v, p) => (this as any)[p] = v);\n this._instanceProperties = undefined;\n }\n\n connectedCallback() {\n // Ensure first connection completes an update. Updates cannot complete\n // before connection.\n this.enableUpdating();\n }\n\n protected enableUpdating() {\n if (this._enableUpdatingResolver !== undefined) {\n this._enableUpdatingResolver();\n this._enableUpdatingResolver = undefined;\n }\n }\n\n /**\n * Allows for `super.disconnectedCallback()` in extensions while\n * reserving the possibility of making non-breaking feature additions\n * when disconnecting at some point in the future.\n */\n disconnectedCallback() {\n }\n\n /**\n * Synchronizes property values when attributes change.\n */\n attributeChangedCallback(name: string, old: string|null, value: string|null) {\n if (old !== value) {\n this._attributeToProperty(name, value);\n }\n }\n\n private _propertyToAttribute(\n name: PropertyKey, value: unknown,\n options: PropertyDeclaration = defaultPropertyDeclaration) {\n const ctor = (this.constructor as typeof UpdatingElement);\n const attr = ctor._attributeNameForProperty(name, options);\n if (attr !== undefined) {\n const attrValue = ctor._propertyValueToAttribute(value, options);\n // an undefined value does not change the attribute.\n if (attrValue === undefined) {\n return;\n }\n // Track if the property is being reflected to avoid\n // setting the property again via `attributeChangedCallback`. Note:\n // 1. this takes advantage of the fact that the callback is synchronous.\n // 2. will behave incorrectly if multiple attributes are in the reaction\n // stack at time of calling. However, since we process attributes\n // in `update` this should not be possible (or an extreme corner case\n // that we'd like to discover).\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n if (attrValue == null) {\n this.removeAttribute(attr);\n } else {\n this.setAttribute(attr, attrValue as string);\n }\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n }\n }\n\n private _attributeToProperty(name: string, value: string|null) {\n // Use tracking info to avoid deserializing attribute value if it was\n // just set from a property setter.\n if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n return;\n }\n const ctor = (this.constructor as typeof UpdatingElement);\n // Note, hint this as an `AttributeMap` so closure clearly understands\n // the type; it has issues with tracking types through statics\n // tslint:disable-next-line:no-unnecessary-type-assertion\n const propName = (ctor._attributeToPropertyMap as AttributeMap).get(name);\n if (propName !== undefined) {\n const options = ctor.getPropertyOptions(propName);\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n this[propName as keyof this] =\n // tslint:disable-next-line:no-any\n ctor._propertyValueFromAttribute(value, options) as any;\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n }\n }\n\n /**\n * This protected version of `requestUpdate` does not access or return the\n * `updateComplete` promise. This promise can be overridden and is therefore\n * not free to access.\n */\n protected requestUpdateInternal(\n name?: PropertyKey, oldValue?: unknown, options?: PropertyDeclaration) {\n let shouldRequestUpdate = true;\n // If we have a property key, perform property update steps.\n if (name !== undefined) {\n const ctor = this.constructor as typeof UpdatingElement;\n options = options || ctor.getPropertyOptions(name);\n if (ctor._valueHasChanged(\n this[name as keyof this], oldValue, options.hasChanged)) {\n if (!this._changedProperties.has(name)) {\n this._changedProperties.set(name, oldValue);\n }\n // Add to reflecting properties set.\n // Note, it's important that every change has a chance to add the\n // property to `_reflectingProperties`. This ensures setting\n // attribute + property reflects correctly.\n if (options.reflect === true &&\n !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n if (this._reflectingProperties === undefined) {\n this._reflectingProperties = new Map();\n }\n this._reflectingProperties.set(name, options);\n }\n } else {\n // Abort the request if the property should not be considered changed.\n shouldRequestUpdate = false;\n }\n }\n if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n this._updatePromise = this._enqueueUpdate();\n }\n }\n\n /**\n * Requests an update which is processed asynchronously. This should\n * be called when an element should update based on some state not triggered\n * by setting a property. In this case, pass no arguments. It should also be\n * called when manually implementing a property setter. In this case, pass the\n * property `name` and `oldValue` to ensure that any configured property\n * options are honored. Returns the `updateComplete` Promise which is resolved\n * when the update completes.\n *\n * @param name {PropertyKey} (optional) name of requesting property\n * @param oldValue {any} (optional) old value of requesting property\n * @returns {Promise} A Promise that is resolved when the update completes.\n */\n requestUpdate(name?: PropertyKey, oldValue?: unknown) {\n this.requestUpdateInternal(name, oldValue);\n return this.updateComplete;\n }\n\n /**\n * Sets up the element to asynchronously update.\n */\n private async _enqueueUpdate() {\n this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n try {\n // Ensure any previous update has resolved before updating.\n // This `await` also ensures that property changes are batched.\n await this._updatePromise;\n } catch (e) {\n // Ignore any previous errors. We only care that the previous cycle is\n // done. Any error should have been handled in the previous update.\n }\n const result = this.performUpdate();\n // If `performUpdate` returns a Promise, we await it. This is done to\n // enable coordinating updates with a scheduler. Note, the result is\n // checked to avoid delaying an additional microtask unless we need to.\n if (result != null) {\n await result;\n }\n return !this._hasRequestedUpdate;\n }\n\n private get _hasRequestedUpdate() {\n return (this._updateState & STATE_UPDATE_REQUESTED);\n }\n\n protected get hasUpdated() {\n return (this._updateState & STATE_HAS_UPDATED);\n }\n\n /**\n * Performs an element update. Note, if an exception is thrown during the\n * update, `firstUpdated` and `updated` will not be called.\n *\n * You can override this method to change the timing of updates. If this\n * method is overridden, `super.performUpdate()` must be called.\n *\n * For instance, to schedule updates to occur just before the next frame:\n *\n * ```\n * protected async performUpdate(): Promise<unknown> {\n * await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n * super.performUpdate();\n * }\n * ```\n */\n protected performUpdate(): void|Promise<unknown> {\n // Abort any update if one is not pending when this is called.\n // This can happen if `performUpdate` is called early to \"flush\"\n // the update.\n if (!this._hasRequestedUpdate) {\n return;\n }\n // Mixin instance properties once, if they exist.\n if (this._instanceProperties) {\n this._applyInstanceProperties();\n }\n let shouldUpdate = false;\n const changedProperties = this._changedProperties;\n try {\n shouldUpdate = this.shouldUpdate(changedProperties);\n if (shouldUpdate) {\n this.update(changedProperties);\n } else {\n this._markUpdated();\n }\n } catch (e) {\n // Prevent `firstUpdated` and `updated` from running when there's an\n // update exception.\n shouldUpdate = false;\n // Ensure element can accept additional updates after an exception.\n this._markUpdated();\n throw e;\n }\n if (shouldUpdate) {\n if (!(this._updateState & STATE_HAS_UPDATED)) {\n this._updateState = this._updateState | STATE_HAS_UPDATED;\n this.firstUpdated(changedProperties);\n }\n this.updated(changedProperties);\n }\n }\n\n private _markUpdated() {\n this._changedProperties = new Map();\n this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n }\n\n /**\n * Returns a Promise that resolves when the element has completed updating.\n * The Promise value is a boolean that is `true` if the element completed the\n * update without triggering another update. The Promise result is `false` if\n * a property was set inside `updated()`. If the Promise is rejected, an\n * exception was thrown during the update.\n *\n * To await additional asynchronous work, override the `_getUpdateComplete`\n * method. For example, it is sometimes useful to await a rendered element\n * before fulfilling this Promise. To do this, first await\n * `super._getUpdateComplete()`, then any subsequent state.\n *\n * @returns {Promise} The Promise returns a boolean that indicates if the\n * update resolved without triggering another update.\n */\n get updateComplete() {\n return this._getUpdateComplete();\n }\n\n /**\n * Override point for the `updateComplete` promise.\n *\n * It is not safe to override the `updateComplete` getter directly due to a\n * limitation in TypeScript which means it is not possible to call a\n * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n * This method should be overridden instead. For example:\n *\n * class MyElement extends LitElement {\n * async _getUpdateComplete() {\n * await super._getUpdateComplete();\n * await this._myChild.updateComplete;\n * }\n * }\n * @deprecated Override `getUpdateComplete()` instead for forward\n * compatibility with `lit-element` 3.0 / `@lit/reactive-element`.\n */\n protected _getUpdateComplete() {\n return this.getUpdateComplete();\n }\n\n /**\n * Override point for the `updateComplete` promise.\n *\n * It is not safe to override the `updateComplete` getter directly due to a\n * limitation in TypeScript which means it is not possible to call a\n * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n * This method should be overridden instead. For example:\n *\n * class MyElement extends LitElement {\n * async getUpdateComplete() {\n * await super.getUpdateComplete();\n * await this._myChild.updateComplete;\n * }\n * }\n */\n protected getUpdateComplete() {\n return this._updatePromise;\n }\n\n /**\n * Controls whether or not `update` should be called when the element requests\n * an update. By default, this method always returns `true`, but this can be\n * customized to control when to update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n protected shouldUpdate(_changedProperties: PropertyValues): boolean {\n return true;\n }\n\n /**\n * Updates the element. This method reflects property values to attributes.\n * It can be overridden to render and keep updated element DOM.\n * Setting properties inside this method will *not* trigger\n * another update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n protected update(_changedProperties: PropertyValues) {\n if (this._reflectingProperties !== undefined &&\n this._reflectingProperties.size > 0) {\n // Use forEach so this works even if for/of loops are compiled to for\n // loops expecting arrays\n this._reflectingProperties.forEach(\n (v, k) => this._propertyToAttribute(k, this[k as keyof this], v));\n this._reflectingProperties = undefined;\n }\n this._markUpdated();\n }\n\n /**\n * Invoked whenever the element is updated. Implement to perform\n * post-updating tasks via DOM APIs, for example, focusing an element.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n protected updated(_changedProperties: PropertyValues) {\n }\n\n /**\n * Invoked when the element is first updated. Implement to perform one time\n * work on the element after update.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n protected firstUpdated(_changedProperties: PropertyValues) {\n }\n}\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure Compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport {LitElement} from '../lit-element.js';\n\nimport {PropertyDeclaration, UpdatingElement} from './updating-element.js';\n\nexport type Constructor<T> = {\n // tslint:disable-next-line:no-any\n new (...args: any[]): T\n};\n\n// From the TC39 Decorators proposal\ninterface ClassDescriptor {\n kind: 'class';\n elements: ClassElement[];\n finisher?: <T>(clazz: Constructor<T>) => undefined | Constructor<T>;\n}\n\n// From the TC39 Decorators proposal\ninterface ClassElement {\n kind: 'field'|'method';\n key: PropertyKey;\n placement: 'static'|'prototype'|'own';\n initializer?: Function;\n extras?: ClassElement[];\n finisher?: <T>(clazz: Constructor<T>) => undefined | Constructor<T>;\n descriptor?: PropertyDescriptor;\n}\n\nconst legacyCustomElement =\n (tagName: string, clazz: Constructor<HTMLElement>) => {\n window.customElements.define(tagName, clazz);\n // Cast as any because TS doesn't recognize the return type as being a\n // subtype of the decorated class when clazz is typed as\n // `Constructor<HTMLElement>` for some reason.\n // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n // applied to elements however.\n // tslint:disable-next-line:no-any\n return clazz as any;\n };\n\nconst standardCustomElement =\n (tagName: string, descriptor: ClassDescriptor) => {\n const {kind, elements} = descriptor;\n return {\n kind,\n elements,\n // This callback is called once the class is otherwise fully defined\n finisher(clazz: Constructor<HTMLElement>) {\n window.customElements.define(tagName, clazz);\n }\n };\n };\n\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```\n * @customElement('my-element')\n * class MyElement {\n * render() {\n * return html``;\n * }\n * }\n * ```\n * @category Decorator\n * @param tagName The name of the custom element to define.\n */\nexport const customElement = (tagName: string) =>\n (classOrDescriptor: Constructor<HTMLElement>|ClassDescriptor) =>\n (typeof classOrDescriptor === 'function') ?\n legacyCustomElement(tagName, classOrDescriptor) :\n standardCustomElement(tagName, classOrDescriptor);\n\nconst standardProperty =\n (options: PropertyDeclaration, element: ClassElement) => {\n // When decorating an accessor, pass it through and add property metadata.\n // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n // stomp over the user's accessor.\n if (element.kind === 'method' && element.descriptor &&\n !('value' in element.descriptor)) {\n return {\n ...element,\n finisher(clazz: typeof UpdatingElement) {\n clazz.createProperty(element.key, options);\n }\n };\n } else {\n // createProperty() takes care of defining the property, but we still\n // must return some kind of descriptor, so return a descriptor for an\n // unused prototype field. The finisher calls createProperty().\n return {\n kind: 'field',\n key: Symbol(),\n placement: 'own',\n descriptor: {},\n // When @babel/plugin-proposal-decorators implements initializers,\n // do this instead of the initializer below. See:\n // https://github.com/babel/babel/issues/9260 extras: [\n // {\n // kind: 'initializer',\n // placement: 'own',\n // initializer: descriptor.initializer,\n // }\n // ],\n initializer(this: {[key: string]: unknown}) {\n if (typeof element.initializer === 'function') {\n this[element.key as string] = element.initializer.call(this);\n }\n },\n finisher(clazz: typeof UpdatingElement) {\n clazz.createProperty(element.key, options);\n }\n };\n }\n };\n\nconst legacyProperty =\n (options: PropertyDeclaration, proto: Object, name: PropertyKey) => {\n (proto.constructor as typeof UpdatingElement)\n .createProperty(name, options);\n };\n\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n * @property({ type: Boolean })\n * clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options?: PropertyDeclaration) {\n // tslint:disable-next-line:no-any decorator\n return (protoOrDescriptor: Object|ClassElement, name?: PropertyKey): any =>\n (name !== undefined) ?\n legacyProperty(options!, protoOrDescriptor as Object, name) :\n standardProperty(options!, protoOrDescriptor as ClassElement);\n}\n\nexport interface InternalPropertyDeclaration<Type = unknown> {\n /**\n * A function that indicates if a property should be considered changed when\n * it is set. The function should take the `newValue` and `oldValue` and\n * return `true` if an update should be requested.\n */\n hasChanged?(value: Type, oldValue: Type): boolean;\n}\n\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like the Closure Compiler.\n * @category Decorator\n * @deprecated `internalProperty` has been renamed to `state` in lit-element\n * 3.0. Please update to `state` now to be compatible with 3.0.\n */\nexport function internalProperty(options?: InternalPropertyDeclaration) {\n return property({attribute: false, hasChanged: options?.hasChanged});\n}\n\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like the Closure Compiler.\n * @category Decorator\n */\nexport const state = (options?: InternalPropertyDeclaration) =>\n internalProperty(options);\n\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n * once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n *\n * ```ts\n * class MyElement {\n * @query('#first')\n * first;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector: string, cache?: boolean) {\n return (protoOrDescriptor: Object|ClassElement,\n // tslint:disable-next-line:no-any decorator\n name?: PropertyKey): any => {\n const descriptor = {\n get(this: LitElement) {\n return this.renderRoot.querySelector(selector);\n },\n enumerable: true,\n configurable: true,\n };\n if (cache) {\n const prop =\n name !== undefined ? name : (protoOrDescriptor as ClassElement).key;\n const key = typeof prop === 'symbol' ? Symbol() : `__${prop}`;\n descriptor.get = function(this: LitElement) {\n if ((this as unknown as\n {[key: string]: Element | null})[key as string] === undefined) {\n ((this as unknown as {[key: string]: Element | null})[key as string] =\n this.renderRoot.querySelector(selector));\n }\n return (\n this as unknown as {[key: string]: Element | null})[key as string];\n };\n }\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n standardQuery(descriptor, protoOrDescriptor as ClassElement);\n };\n}\n\n// Note, in the future, we may extend this decorator to support the use case\n// where the queried element may need to do work to become ready to interact\n// with (e.g. load some implementation code). If so, we might elect to\n// add a second argument defining a function that can be run to make the\n// queried element loaded/updated/ready.\n/**\n * A property decorator that converts a class property into a getter that\n * returns a promise that resolves to the result of a querySelector on the\n * element's renderRoot done after the element's `updateComplete` promise\n * resolves. When the queried property may change with element state, this\n * decorator can be used instead of requiring users to await the\n * `updateComplete` before accessing the property.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n * ```ts\n * class MyElement {\n * @queryAsync('#first')\n * first;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n *\n * // external usage\n * async doSomethingWithFirst() {\n * (await aMyElement.first).doSomething();\n * }\n * ```\n * @category Decorator\n */\nexport function queryAsync(selector: string) {\n return (protoOrDescriptor: Object|ClassElement,\n // tslint:disable-next-line:no-any decorator\n name?: PropertyKey): any => {\n const descriptor = {\n async get(this: LitElement) {\n await this.updateComplete;\n return this.renderRoot.querySelector(selector);\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n standardQuery(descriptor, protoOrDescriptor as ClassElement);\n };\n}\n\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\n *\n * @example\n * ```ts\n * class MyElement {\n * @queryAll('div')\n * divs;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAll(selector: string) {\n return (protoOrDescriptor: Object|ClassElement,\n // tslint:disable-next-line:no-any decorator\n name?: PropertyKey): any => {\n const descriptor = {\n get(this: LitElement) {\n return this.renderRoot.querySelectorAll(selector);\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n standardQuery(descriptor, protoOrDescriptor as ClassElement);\n };\n}\n\nconst legacyQuery =\n (descriptor: PropertyDescriptor, proto: Object, name: PropertyKey) => {\n Object.defineProperty(proto, name, descriptor);\n };\n\nconst standardQuery = (descriptor: PropertyDescriptor, element: ClassElement) =>\n ({\n kind: 'method',\n placement: 'prototype',\n key: element.key,\n descriptor,\n });\n\nconst standardEventOptions =\n (options: AddEventListenerOptions, element: ClassElement) => {\n return {\n ...element,\n finisher(clazz: typeof UpdatingElement) {\n Object.assign(\n clazz.prototype[element.key as keyof UpdatingElement], options);\n }\n };\n };\n\nconst legacyEventOptions =\n // tslint:disable-next-line:no-any legacy decorator\n (options: AddEventListenerOptions, proto: any, name: PropertyKey) => {\n Object.assign(proto[name], options);\n };\n\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifies event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n * ```ts\n * class MyElement {\n * clicked = false;\n *\n * render() {\n * return html`\n * <div @click=${this._onClick}`>\n * <button></button>\n * </div>\n * `;\n * }\n *\n * @eventOptions({capture: true})\n * _onClick(e) {\n * this.clicked = true;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function eventOptions(options: AddEventListenerOptions) {\n // Return value typed as any to prevent TypeScript from complaining that\n // standard decorator function signature does not match TypeScript decorator\n // signature\n // TODO(kschaaf): unclear why it was only failing on this decorator and not\n // the others\n return ((protoOrDescriptor: Object|ClassElement, name?: string) =>\n (name !== undefined) ?\n legacyEventOptions(options, protoOrDescriptor as Object, name) :\n standardEventOptions(\n options, protoOrDescriptor as ClassElement)) as\n // tslint:disable-next-line:no-any decorator\n any;\n}\n\n// x-browser support for matches\n// tslint:disable-next-line:no-any\nconst ElementProto = Element.prototype as any;\nconst legacyMatches =\n ElementProto.msMatchesSelector || ElementProto.webkitMatchesSelector;\n\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedNodes` of the given named `slot`. Note, the type of\n * this property should be annotated as `NodeListOf<HTMLElement>`.\n *\n * @param slotName A string name of the slot.\n * @param flatten A boolean which when true flattens the assigned nodes,\n * meaning any assigned nodes that are slot elements are replaced with their\n * assigned nodes.\n * @param selector A string which filters the results to elements that match\n * the given css selector.\n *\n * * @example\n * ```ts\n * class MyElement {\n * @queryAssignedNodes('list', true, '.item')\n * listItems;\n *\n * render() {\n * return html`\n * <slot name=\"list\"></slot>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAssignedNodes(\n slotName = '', flatten = false, selector = '') {\n return (protoOrDescriptor: Object|ClassElement,\n // tslint:disable-next-line:no-any decorator\n name?: PropertyKey): any => {\n const descriptor = {\n get(this: LitElement) {\n const slotSelector =\n `slot${slotName ? `[name=${slotName}]` : ':not([name])'}`;\n const slot = this.renderRoot.querySelector(slotSelector);\n let nodes = slot && (slot as HTMLSlotElement).assignedNodes({flatten});\n if (nodes && selector) {\n nodes = nodes.filter(\n (node) => node.nodeType === Node.ELEMENT_NODE &&\n // tslint:disable-next-line:no-any testing existence on older browsers\n ((node as any).matches ?\n (node as Element).matches(selector) :\n legacyMatches.call(node as Element, selector)));\n }\n return nodes;\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n standardQuery(descriptor, protoOrDescriptor as ClassElement);\n };\n}\n", "/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets = (window.ShadowRoot) &&\n (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n ('adoptedStyleSheets' in Document.prototype) &&\n ('replace' in CSSStyleSheet.prototype);\n\nconst constructionToken = Symbol();\n\nexport class CSSResult {\n _styleSheet?: CSSStyleSheet|null;\n\n readonly cssText: string;\n\n constructor(cssText: string, safeToken: symbol) {\n if (safeToken !== constructionToken) {\n throw new Error(\n 'CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n }\n\n this.cssText = cssText;\n }\n\n // Note, this is a getter so that it's lazy. In practice, this means\n // stylesheets are not created until the first element instance is made.\n get styleSheet(): CSSStyleSheet|null {\n if (this._styleSheet === undefined) {\n // Note, if `supportsAdoptingStyleSheets` is true then we assume\n // CSSStyleSheet is constructable.\n if (supportsAdoptingStyleSheets) {\n this._styleSheet = new CSSStyleSheet();\n this._styleSheet.replaceSync(this.cssText);\n } else {\n this._styleSheet = null;\n }\n }\n return this._styleSheet;\n }\n\n toString(): string {\n return this.cssText;\n }\n}\n\n/**\n * Wrap a value for interpolation in a [[`css`]] tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value: unknown) => {\n return new CSSResult(String(value), constructionToken);\n};\n\nconst textFromCSSResult = (value: CSSResult|number) => {\n if (value instanceof CSSResult) {\n return value.cssText;\n } else if (typeof value === 'number') {\n return value;\n } else {\n throw new Error(\n `Value passed to 'css' function must be a 'css' function result: ${\n value}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`);\n }\n};\n\n/**\n * Template tag which which can be used with LitElement's [[LitElement.styles |\n * `styles`]] property to set element styles. For security reasons, only literal\n * string values may be used. To incorporate non-literal values [[`unsafeCSS`]]\n * may be used inside a template string part.\n */\nexport const css =\n (strings: TemplateStringsArray, ...values: (CSSResult|number)[]) => {\n const cssText = values.reduce(\n (acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1],\n strings[0]);\n return new CSSResult(cssText, constructionToken);\n };\n", "/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The main LitElement module, which defines the [[`LitElement`]] base class and\n * related APIs.\n *\n * LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n * Import [[`LitElement`]] and [[`html`]] from this module to create a\n * component:\n *\n * ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n * // Declare observed properties\n * static get properties() {\n * return {\n * adjective: {}\n * }\n * }\n *\n * constructor() {\n * this.adjective = 'awesome';\n * }\n *\n * // Define the element's template\n * render() {\n * return html`<p>your ${adjective} template here</p>`;\n * }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends [[`UpdatingElement`]] and adds lit-html templating.\n * The `UpdatingElement` class is provided for users that want to build\n * their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport {render, ShadyRenderOptions} from 'lit-html/lib/shady-render.js';\n\nimport {PropertyValues, UpdatingElement} from './lib/updating-element.js';\n\nexport * from './lib/updating-element.js';\nexport {UpdatingElement as ReactiveElement} from './lib/updating-element.js';\nexport * from './lib/decorators.js';\nexport {html, svg, TemplateResult, SVGTemplateResult} from 'lit-html/lit-html.js';\nimport {supportsAdoptingStyleSheets, CSSResult, unsafeCSS} from './lib/css-tag.js';\nexport * from './lib/css-tag.js';\n\ndeclare global {\n interface Window {\n litElementVersions: string[];\n }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n .push('2.5.1');\n\nexport type CSSResultOrNative = CSSResult|CSSStyleSheet;\n\nexport interface CSSResultArray extends\n Array<CSSResultOrNative|CSSResultArray> {}\n\nexport type CSSResultGroup = CSSResultOrNative|CSSResultArray;\n\n/**\n * Sentinal value used to avoid calling lit-html's render function when\n * subclasses do not implement `render`\n */\nconst renderNotImplemented = {};\n\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the [[`properties`]] property or the [[`property`]] decorator.\n */\nexport class LitElement extends UpdatingElement {\n /**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n *\n * Note this property name is a string to prevent breaking Closure JS Compiler\n * optimizations. See updating-element.ts for more information.\n */\n protected static['finalized'] = true;\n\n /**\n * Reference to the underlying library method used to render the element's\n * DOM. By default, points to the `render` method from lit-html's shady-render\n * module.\n *\n * **Most users will never need to touch this property.**\n *\n * This property should not be confused with the `render` instance method,\n * which should be overridden to define a template for the element.\n *\n * Advanced users creating a new base class based on LitElement can override\n * this property to point to a custom render method with a signature that\n * matches [shady-render's `render`\n * method](https://lit-html.polymer-project.org/api/modules/shady_render.html#render).\n *\n * @nocollapse\n */\n static render:\n (result: unknown, container: Element|DocumentFragment,\n options: ShadyRenderOptions) => void = render;\n\n /**\n * Array of styles to apply to the element. The styles should be defined\n * using the [[`css`]] tag function or via constructible stylesheets.\n */\n static styles?: CSSResultGroup;\n\n /** @nocollapse */\n static shadowRootOptions: ShadowRootInit = {mode: 'open'};\n\n private static _styles: Array<CSSResultOrNative|CSSResult>|undefined;\n\n /**\n * Return the array of styles to apply to the element.\n * Override this method to integrate into a style management system.\n *\n * @nocollapse\n */\n static getStyles(): CSSResultGroup|undefined {\n return this.styles;\n }\n\n /** @nocollapse */\n private static _getUniqueStyles() {\n // Only gather styles once per class\n if (this.hasOwnProperty(JSCompiler_renameProperty('_styles', this))) {\n return;\n }\n // Take care not to call `this.getStyles()` multiple times since this\n // generates new CSSResults each time.\n // TODO(sorvell): Since we do not cache CSSResults by input, any\n // shared styles will generate new stylesheet objects, which is wasteful.\n // This should be addressed when a browser ships constructable\n // stylesheets.\n const userStyles = this.getStyles();\n\n if (Array.isArray(userStyles)) {\n // De-duplicate styles preserving the _last_ instance in the set.\n // This is a performance optimization to avoid duplicated styles that can\n // occur especially when composing via subclassing.\n // The last item is kept to try to preserve the cascade order with the\n // assumption that it's most important that last added styles override\n // previous styles.\n const addStyles = (styles: CSSResultArray, set: Set<CSSResultOrNative>):\n Set<CSSResultOrNative> => styles.reduceRight(\n (set: Set<CSSResultOrNative>, s) =>\n // Note: On IE set.add() does not return the set\n Array.isArray(s) ? addStyles(s, set) : (set.add(s), set),\n set);\n // Array.from does not work on Set in IE, otherwise return\n // Array.from(addStyles(userStyles, new Set<CSSResult>())).reverse()\n const set = addStyles(userStyles, new Set<CSSResultOrNative>());\n const styles: CSSResultOrNative[] = [];\n set.forEach((v) => styles.unshift(v));\n this._styles = styles;\n } else {\n this._styles = userStyles === undefined ? [] : [userStyles];\n }\n\n // Ensure that there are no invalid CSSStyleSheet instances here. They are\n // invalid in two conditions.\n // (1) the sheet is non-constructible (`sheet` of a HTMLStyleElement), but\n // this is impossible to check except via .replaceSync or use\n // (2) the ShadyCSS polyfill is enabled (:. supportsAdoptingStyleSheets is\n // false)\n this._styles = this._styles.map((s) => {\n if (s instanceof CSSStyleSheet && !supportsAdoptingStyleSheets) {\n // Flatten the cssText from the passed constructible stylesheet (or\n // undetectable non-constructible stylesheet). The user might have\n // expected to update their stylesheets over time, but the alternative\n // is a crash.\n const cssText = Array.prototype.slice.call(s.cssRules)\n .reduce((css, rule) => css + rule.cssText, '');\n return unsafeCSS(cssText);\n }\n return s;\n });\n }\n\n private _needsShimAdoptedStyleSheets?: boolean;\n\n /**\n * Node or ShadowRoot into which element DOM should be rendered. Defaults\n * to an open shadowRoot.\n */\n readonly renderRoot!: Element|DocumentFragment;\n\n /**\n * Performs element initialization. By default this calls\n * [[`createRenderRoot`]] to create the element [[`renderRoot`]] node and\n * captures any pre-set values for registered properties.\n */\n protected initialize() {\n super.initialize();\n (this.constructor as typeof LitElement)._getUniqueStyles();\n (this as {\n renderRoot: Element|DocumentFragment;\n }).renderRoot = this.createRenderRoot();\n // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n // element's getRootNode(). While this could be done, we're choosing not to\n // support this now since it would require different logic around de-duping.\n if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n this.adoptStyles();\n }\n }\n\n /**\n * Returns the node into which the element should render and by default\n * creates and returns an open shadowRoot. Implement to customize where the\n * element's DOM is rendered. For example, to render into the element's\n * childNodes, return `this`.\n * @returns {Element|DocumentFragment} Returns a node into which to render.\n */\n protected createRenderRoot(): Element|ShadowRoot {\n return this.attachShadow(\n (this.constructor as typeof LitElement).shadowRootOptions);\n }\n\n /**\n * Applies styling to the element shadowRoot using the [[`styles`]]\n * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n * available and will fallback otherwise. When Shadow DOM is polyfilled,\n * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n * is available but `adoptedStyleSheets` is not, styles are appended to the\n * end of the `shadowRoot` to [mimic spec\n * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n */\n protected adoptStyles() {\n const styles = (this.constructor as typeof LitElement)._styles!;\n if (styles.length === 0) {\n return;\n }\n // There are three separate cases here based on Shadow DOM support.\n // (1) shadowRoot polyfilled: use ShadyCSS\n // (2) shadowRoot.adoptedStyleSheets available: use it\n // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n // rendering\n if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n window.ShadyCSS.ScopingShim!.prepareAdoptedCssText(\n styles.map((s) => (s as CSSResult).cssText), this.localName);\n } else if (supportsAdoptingStyleSheets) {\n (this.renderRoot as ShadowRoot).adoptedStyleSheets =\n styles.map((s) => s instanceof CSSStyleSheet ? s : s.styleSheet!);\n } else {\n // This must be done after rendering so the actual style insertion is done\n // in `update`.\n this._needsShimAdoptedStyleSheets = true;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n // Note, first update/render handles styleElement so we only call this if\n // connected after first update.\n if (this.hasUpdated && window.ShadyCSS !== undefined) {\n window.ShadyCSS.styleElement(this);\n }\n }\n\n /**\n * Updates the element. This method reflects property values to attributes\n * and calls `render` to render DOM via lit-html. Setting properties inside\n * this method will *not* trigger another update.\n * @param _changedProperties Map of changed properties with old values\n */\n protected update(changedProperties: PropertyValues) {\n // Setting properties in `render` should not trigger an update. Since\n // updates are allowed after super.update, it's important to call `render`\n // before that.\n const templateResult = this.render();\n super.update(changedProperties);\n // If render is not implemented by the component, don't call lit-html render\n if (templateResult !== renderNotImplemented) {\n (this.constructor as typeof LitElement)\n .render(\n templateResult,\n this.renderRoot,\n {scopeName: this.localName, eventContext: this});\n }\n // When native Shadow DOM is used but adoptedStyles are not supported,\n // insert styling after rendering to ensure adoptedStyles have highest\n // priority.\n if (this._needsShimAdoptedStyleSheets) {\n this._needsShimAdoptedStyleSheets = false;\n (this.constructor as typeof LitElement)._styles!.forEach((s) => {\n const style = document.createElement('style');\n style.textContent = (s as CSSResult).cssText;\n this.renderRoot.appendChild(style);\n });\n }\n }\n\n /**\n * Invoked on each update to perform rendering tasks. This method may return\n * any value renderable by lit-html's `NodePart` - typically a\n * `TemplateResult`. Setting properties inside this method will *not* trigger\n * the element to update.\n */\n protected render(): unknown {\n return renderNotImplemented;\n }\n}\n", "import { ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { html, LitElement, TemplateResult } from 'lit-element';\nimport { isIterable } from './lib.js';\n\n/** @typedef {import('@open-wc/scoped-elements').ScopedElementsMap} ScopedElementsMap */\n\nconst transform = template => {\n if (isIterable(template)) {\n return [...template].map(v => transform(v));\n }\n\n if (template instanceof TemplateResult) {\n return html(template.strings, ...template.values);\n }\n\n return template;\n};\n\n/**\n * Regarding the @ts-expect-error, it is caused by having '& typeof ScopedElementsHost' on ScopedElementsMixin.\n * This type intersection is necessary though, in order to access static props of the mixin. For example:\n *\n * static get scopedElements() {\n * return {\n * ...super.scopedElements, // <-- this will error without '& typeof ScopedElementsHost'\n * }\n * }\n *\n * However, a new type error is created --> Base constructors must all have the same return type.ts(2510)\n * But this can be ignored, and then at least you do get the super static props typed properly.\n */\n// @ts-ignore https://github.com/microsoft/TypeScript/issues/40110 , not using expect-error, because in some TS versions it does not throw\nclass ScopedElementsTestWrapper extends ScopedElementsMixin(LitElement) {\n static get properties() {\n return {\n scopedElements: { type: Object },\n template: { type: Object },\n };\n }\n\n constructor() {\n super();\n\n /** @type {ScopedElementsMap} */\n this.scopedElements = {};\n\n /** @type {import('./litFixture').LitHTMLRenderable} */\n // eslint-disable-next-line no-unused-expressions\n this.template;\n }\n\n firstUpdated(_changed) {\n super.firstUpdated(_changed);\n\n Object.keys(this.scopedElements).forEach(key =>\n // @ts-ignore\n this.defineScopedElement(key, this.scopedElements[key]),\n );\n }\n\n render() {\n return transform(this.template);\n }\n}\n\n/**\n * Obtains a unique tag name for the test wrapper\n * @param {number} [counter=0]\n * @returns {string}\n */\nconst getWrapperUniqueName = (counter = 0) => {\n const tag = `scoped-elements-test-wrapper-${counter}`;\n\n if (customElements.get(tag) !== undefined) {\n return getWrapperUniqueName(counter + 1);\n }\n\n return tag;\n};\n\nconst wrapperTagName = getWrapperUniqueName();\n\n// @ts-ignore\ncustomElements.define(wrapperTagName, ScopedElementsTestWrapper);\n\n/**\n * Wraps the template inside a scopedElements component\n *\n * @param {import('./litFixture').LitHTMLRenderable} template\n * @param {ScopedElementsMap} scopedElements\n * @returns {TemplateResult}\n */\nexport function getScopedElementsTemplate(template, scopedElements) {\n const strings = [\n `<${wrapperTagName} .scopedElements=\"`,\n '\" .template=\"',\n `\"></${wrapperTagName}>`,\n ];\n\n // @ts-ignore\n return html(strings, scopedElements, template);\n}\n", "import { fixtureCleanup } from './fixtureWrapper.js';\n\nexport { fixture, fixtureSync } from './fixture-no-side-effect.js';\n\n/**\n * This registers the fixture cleanup as a side effect\n */\ntry {\n // we should not assume that our users load mocha types globally\n // @ts-ignore\n if ('afterEach' in window) {\n // @ts-ignore\n afterEach(() => {\n fixtureCleanup();\n });\n }\n // @ts-ignore\n if ('teardown' in window) {\n // @ts-ignore\n teardown(() => {\n fixtureCleanup();\n });\n }\n} catch (error) {\n /* do nothing */\n}\n", "/**\n * In the browser, importing chai/chai.js will register to the window. In webpack it will\n * be parsed as a commonjs module, so it won't be on the window. In this file we conditionally\n * export from the window, or a webpack specific module import.\n */\n\n/* eslint-disable global-require, import/no-mutable-exports */\nimport 'chai/chai.js';\n\n// @ts-ignore\nexport default window.chai ||\n (() => {\n if (typeof require === 'function') {\n return require('chai/chai.js');\n }\n\n throw new Error(\n 'Error importing chai/chai.js, are you using a bundler or build tool that doesnt handle es modules?',\n );\n })();\n", "const DEFAULT_IGNORE_TAGS = ['script', 'style', 'svg'];\nconst DEFAULT_EMPTY_ATTRS = ['class', 'id'];\nconst VOID_ELEMENTS = [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'menuitem',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n];\n\n/**\n * Reverses the sense of a predicate\n * @param {(x: any) => Boolean} p predicate\n * @return {(x: any) => Boolean}\n */\nconst not = p => (...args) => !p(...args);\n\n/**\n * @typedef IgnoreAttributesForTags\n * @property {string[]} tags tags on which to ignore the given attributes\n * @property {string[]} attributes attributes to ignore for the given tags\n */\n\n/**\n * @typedef DiffOptions\n * @property {(string | IgnoreAttributesForTags)[]} [ignoreAttributes]\n * array of attributes to ignore, when given a string that attribute will be ignored on all tags\n * when given an object of type `IgnoreAttributesForTags`, you can specify on which tags to ignore which attributes\n * @property {string[]} [ignoreTags] array of tags to ignore, these tags are stripped from the output\n * @property {string[]} [ignoreChildren] array of tags whose children to ignore, the children of\n * these tags are stripped from the output\n * @property {string[]} [stripEmptyAttributes] array of attributes which should be removed when empty.\n * Be careful not to add any boolean attributes here (e.g. `hidden`) unless you know what you're doing\n */\n\n/**\n * Restructures given HTML string, returning it in a format which can be used for comparison:\n * - whitespace and newlines are normalized\n * - tags and attributes are printed on individual lines\n * - comments, style, script and svg tags are removed\n * - additional tags and attributes can optionally be ignored\n *\n * See README.md for details.\n *\n * @example\n * import getDiffableHTML from '@open-wc/semantic-dom-diff';\n *\n * const htmlA = getDiffableHTML(`... some html ...`, { ignoredAttributes: [], ignoredTags: [], ignoreChildren: [] });\n * const htmlB = getDiffableHTML(`... some html ...`);\n *\n * // use regular string comparison to spot the differences\n * expect(htmlA).to.equal(htmlB);\n *\n * @param {Node | string} html\n * @param {DiffOptions} [options]\n * @returns {string} html restructured in a diffable format\n */\nexport function getDiffableHTML(html, options = {}) {\n const ignoreAttributes = /** @type {string[]} */ (options.ignoreAttributes\n ? options.ignoreAttributes.filter(e => typeof e === 'string')\n : []);\n const ignoreAttributesForTags = /** @type {IgnoreAttributesForTags[]} */ (options.ignoreAttributes\n ? options.ignoreAttributes.filter(e => typeof e !== 'string')\n : []);\n const ignoreTags = [...(options.ignoreTags || []), ...DEFAULT_IGNORE_TAGS];\n const ignoreChildren = options.ignoreChildren || [];\n const stripEmptyAttributes = options.stripEmptyAttributes || DEFAULT_EMPTY_ATTRS;\n const escapeAttributes = /(&|\")/g;\n /** @param {string} match */\n const escapeAttributesFn = match => (match === '&' ? '&amp;' : '&quot;');\n\n let text = '';\n let depth = -1;\n /** @type {Set<Node>} */\n const handledChildrenForNode = new Set();\n /** @type {Set<Node>} */\n const handledNodeStarted = new Set();\n\n /** @returns {string} */\n function getIndentation() {\n return ' '.repeat(depth);\n }\n\n /**\n * @param {Text} textNode\n * @param {TreeWalker} walker\n */\n function printText(textNode, walker) {\n let value = '';\n let node = textNode;\n\n while (node && node instanceof Text) {\n value += node.nodeValue;\n\n node = walker.nextSibling();\n }\n\n if (node) {\n walker.previousSibling();\n }\n\n value = value.trim();\n\n if (value !== '') {\n text += `${getIndentation()}${value}\\n`;\n }\n }\n\n /** @param {Node} node */\n function getTagName(node) {\n // Use original tag if available via data-tag-name attribute (use-case for scoped elements)\n // See packages/scoped-elements for more info\n if (node instanceof Element) {\n return node.getAttribute('data-tag-name') || node.localName;\n }\n return node.nodeName.toLowerCase();\n }\n\n /** @param {Node} node */\n function shouldProcessChildren(node) {\n const name = getTagName(node);\n return (\n !ignoreTags.includes(name) &&\n !ignoreChildren.includes(name) &&\n !handledChildrenForNode.has(node)\n );\n }\n\n /**\n * An element's classList, sorted, as string\n * @param {Element} el Element\n * @return {String}\n */\n function getClassListValueString(el) {\n // @ts-ignore\n return [...el.classList.values()].sort().join(' ');\n }\n\n function shouldStripAttribute({ name, value }) {\n return stripEmptyAttributes.includes(name) && value.trim() === '';\n }\n\n /**\n * @param {Element} el\n * @param {Attr} attr\n */\n function getAttributeString(el, { name, value }) {\n if (shouldStripAttribute({ name, value })) return '';\n if (name === 'class') return ` class=\"${getClassListValueString(el)}\"`;\n return ` ${name}=\"${value.replace(escapeAttributes, escapeAttributesFn)}\"`;\n }\n\n /**\n * @param {Element} el\n * @return {(attr: Attr) => Boolean}\n */\n function isIgnoredAttribute(el) {\n return function isIgnoredElementAttibute(attr) {\n if (ignoreAttributes.includes(attr.name) || shouldStripAttribute(attr)) {\n return true;\n }\n\n return !!ignoreAttributesForTags.find(e => {\n if (!e.tags || !e.attributes) {\n throw new Error(\n `An object entry to ignoreAttributes should contain a 'tags' and an 'attributes' property.`,\n );\n }\n return e.tags.includes(getTagName(el)) && e.attributes.includes(attr.name);\n });\n };\n }\n\n const sortAttribute = (a, b) => a.name.localeCompare(b.name);\n\n /** @param {Element} el */\n function getAttributesString(el) {\n let attrStr = '';\n const attributes = Array.from(el.attributes)\n .filter(not(isIgnoredAttribute(el)))\n .sort(sortAttribute);\n\n if (attributes.length === 1) {\n attrStr = getAttributeString(el, attributes[0]);\n } else if (attributes.length > 1) {\n for (let i = 0; i < attributes.length; i += 1) {\n attrStr += `\\n${getIndentation()} ${getAttributeString(el, attributes[i])}`;\n }\n attrStr += `\\n${getIndentation()}`;\n }\n\n return attrStr;\n }\n\n /** @param {Element} el */\n function printOpenElement(el) {\n text += `${getIndentation()}<${getTagName(el)}${getAttributesString(el)}>\\n`;\n }\n\n /**\n * @param {Node} node\n * @param {TreeWalker} walker\n */\n function onNodeStart(node, walker) {\n // don't print this node if we should ignore it\n if (getTagName(node) === 'diff-container' || ignoreTags.includes(getTagName(node))) {\n return;\n }\n\n // don't print this node if it was already printed, this happens when\n // crawling upwards after handling children\n if (handledNodeStarted.has(node)) {\n return;\n }\n handledNodeStarted.add(node);\n\n if (node instanceof Text) {\n printText(node, walker);\n } else if (node instanceof Element) {\n printOpenElement(node);\n } else {\n throw new Error(`Unknown node type: ${node}`);\n }\n }\n\n /** @param {Element} el */\n function printCloseElement(el) {\n if (getTagName(el) === 'diff-container' || VOID_ELEMENTS.includes(getTagName(el))) {\n return;\n }\n\n text += `${getIndentation()}</${getTagName(el)}>\\n`;\n }\n\n /** @param {Node} node */\n function onNodeEnd(node) {\n // don't print this node if we should ignore it\n if (ignoreTags.includes(getTagName(node))) {\n return;\n }\n\n if (node instanceof Element) {\n printCloseElement(node);\n }\n }\n\n let container;\n\n if (typeof html === 'string') {\n container = document.createElement('diff-container');\n container.innerHTML = html;\n depth = -1;\n } else if (html instanceof Node) {\n container = html;\n depth = 0;\n } else {\n throw new Error(`Cannot create diffable HTML from: ${html}`);\n }\n\n const walker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_TEXT + NodeFilter.SHOW_ELEMENT,\n null,\n false,\n );\n\n // walk the dom and create a diffable string representation\n while (walker.currentNode) {\n const current = walker.currentNode;\n onNodeStart(current, walker);\n\n // crawl children if we should for this node, and if it has children\n if (shouldProcessChildren(current) && walker.firstChild()) {\n depth += 1;\n } else {\n // we are done processing this node's children, handle this node's end\n onNodeEnd(current);\n\n // move to next sibling\n const sibling = walker.nextSibling();\n\n // otherwise move back up to parent node\n if (!sibling) {\n depth -= 1;\n\n const parent = walker.parentNode();\n // if there is no parent node, we are done\n if (!parent) {\n break;\n }\n\n // we just processed the parent's children, remember so that we don't\n // process them again later\n handledChildrenForNode.add(parent);\n }\n }\n }\n\n return text;\n}\n\n/**\n * @param {*} arg\n * @return {arg is DiffOptions}\n */\nexport function isDiffOptions(arg) {\n return (\n arg &&\n arg !== null &&\n typeof arg === 'object' &&\n ('ignoreAttributes' in arg ||\n 'ignoreTags' in arg ||\n 'ignoreChildren' in arg ||\n 'stripEmptyAttributes' in arg)\n );\n}\n", "/* eslint-env browser, es2020 */\nconst PARAM_SESSION_ID = 'wtr-session-id';\n\nconst sessionId = new URL(window.location.href).searchParams.get(PARAM_SESSION_ID);\n\nfunction isObject(payload) {\n return payload != null && typeof payload === 'object';\n}\n\nexport async function executeServerCommand(command, payload, pluginName) {\n if (typeof sessionId !== 'string') {\n throw new Error(\n 'Unable to execute server commands in a browser not controlled by the test runner. ' +\n 'Use the debug option from the watch menu to debug in a controlled browser.',\n );\n }\n\n let sendMessageWaitForResponse;\n try {\n const webSocketModule = await import('/__web-dev-server__web-socket.js');\n ({ sendMessageWaitForResponse } = webSocketModule);\n } catch (error) {\n throw new Error(\n 'Could not setup web socket connection. Are you executing this test through Web Test Runner?',\n );\n }\n\n try {\n const response = await sendMessageWaitForResponse({\n type: 'wtr-command',\n sessionId,\n command,\n payload,\n });\n\n if (!response.executed) {\n let msg;\n if (pluginName) {\n msg = `Unknown command ${command}. Add the ${pluginName} to your config.`;\n } else {\n msg = `Unknown command ${command}. Did you install a plugin to handle this command?`;\n }\n throw new Error(msg);\n }\n\n return response.result;\n } catch (error) {\n throw new Error(\n `Error while executing command ${command}${\n payload ? ` with payload ${JSON.stringify(payload)}` : ''\n }: ${error.message}`,\n );\n }\n}\n\nexport function setViewport(viewport) {\n return executeServerCommand('set-viewport', viewport);\n}\n\nexport function emulateMedia(media) {\n return executeServerCommand('emulate-media', media);\n}\n\nexport function setUserAgent(options) {\n return executeServerCommand('set-user-agent', options);\n}\n\nexport function sendKeys(options) {\n return executeServerCommand('send-keys', options);\n}\n\nexport function sendMouse(options) {\n return executeServerCommand('send-mouse', options);\n}\n\nexport function resetMouse(options) {\n return executeServerCommand('reset-mouse', options);\n}\n\nexport function a11ySnapshot(options) {\n return executeServerCommand('a11y-snapshot', options);\n}\n\nexport function writeFile(options) {\n return executeServerCommand('write-file', options, 'filePlugin from @web/test-runner-commands');\n}\n\nexport function readFile(options) {\n return executeServerCommand('read-file', options, 'filePlugin from @web/test-runner-commands');\n}\n\nexport function removeFile(options) {\n return executeServerCommand('remove-file', options, 'filePlugin from @web/test-runner-commands');\n}\n\nexport function findAccessibilityNode(node, test) {\n if (test(node)) return node;\n for (const child of node.children || []) {\n const foundNode = findAccessibilityNode(child, test);\n if (foundNode) {\n return foundNode;\n }\n }\n return null;\n}\n\nlet snapshotConfig;\nlet cachedSnapshots;\n\nexport async function getSnapshotConfig() {\n if (!snapshotConfig) {\n snapshotConfig = await executeServerCommand(\n 'get-snapshot-config',\n undefined,\n 'snapshotPlugin from @web/test-runner-commands',\n );\n }\n\n return snapshotConfig;\n}\n\n/**\n * This regexp is used to capture the snapshots contents.\n *\n * snapshots\\[[^\\]]+] = (\\n)? - snapshot definition. Sometimes the initial content backtick is placed in the next line\n * (?<content>`[^`]+`) - capture the snapshot content, which is included between backticks \"`\"\n * /gm - global and multiline\n * @type {RegExp}\n */\nconst ESCAPE_REGEX = /snapshots\\[[^\\]]+] = (\\n)?(?<content>`[^`]*`)/gm;\n\nconst escapeContent = content => {\n [...content.matchAll(ESCAPE_REGEX)].forEach(({ groups: { content: itemContent } }) => {\n content = content.replaceAll(itemContent, encodeURIComponent(itemContent));\n });\n\n return content;\n};\n\nexport async function getSnapshots({ cache = true } = {}) {\n if (cache && cachedSnapshots) {\n return cachedSnapshots;\n }\n\n const result = await executeServerCommand(\n 'get-snapshots',\n undefined,\n 'snapshotPlugin from @web/test-runner-commands',\n );\n\n if (typeof result?.content !== 'string') {\n throw new Error('Expected a result as string');\n }\n\n const content = `${escapeContent(result.content)}/* ${Math.random()} */`;\n const module = await import(`data:text/javascript;charset=utf-8,${content}`);\n\n if (!module || !isObject(module.snapshots)) {\n throw new Error('Expected snapshot result to be a module that exports an object.');\n }\n\n cachedSnapshots = module.snapshots;\n\n return cachedSnapshots;\n}\n\nexport async function getSnapshot(options) {\n if (!isObject(options)) throw new Error('You must provide a payload object');\n if (typeof options.name !== 'string') throw new Error('You must provide a snapshot name');\n\n const snapshots = await getSnapshots(options);\n\n return snapshots[options.name];\n}\n\nexport async function saveSnapshot(options) {\n if (!isObject(options)) throw new Error('You must provide a payload object');\n if (typeof options.name !== 'string') throw new Error('You must provide a snapshot name');\n if (options.content !== undefined && typeof options.content !== 'string')\n throw new Error('You must provide a snapshot content');\n\n // ensure snapshots for this file are loaded\n const snapshots = await getSnapshots();\n\n // store snapshot in-memory\n snapshots[options.name] = options.content;\n\n return executeServerCommand(\n 'save-snapshot',\n options,\n 'snapshotPlugin from @web/test-runner-commands',\n );\n}\n\nexport function removeSnapshot(options) {\n if (!isObject(options)) throw new Error('You must provide a payload object');\n if (typeof options.name !== 'string') throw new Error('You must provide a snapshot name');\n\n return saveSnapshot({ ...options, content: undefined });\n}\n\nexport async function compareSnapshot({ name, content }) {\n const currentSnapshot = await getSnapshot({ name });\n if (currentSnapshot) {\n const config = await getSnapshotConfig();\n if (!config.updateSnapshots) {\n if (currentSnapshot !== content) {\n throw new Error(\n `Snapshots for ${name} are not equal. \\n\\n` +\n `Stored:\\n${currentSnapshot}\\n\\n` +\n `New:\\n${content}`,\n );\n }\n } else if (currentSnapshot === content) {\n return;\n }\n }\n await saveSnapshot({ name, content });\n}\n", "// @ts-nocheck\n\n/**\n * el.outerHTML is not polyfilled so we need to recreate the tag + attributes and\n * combine it with el.innerHTML.\n *\n * @param {Element} el Element you want to get the out Html from\n * @returns {String} outer html\n */\nexport const getOuterHtml = el => {\n /* istanbul ignore next */\n if (window.ShadyCSS && window.ShadyCSS.nativeShadow === false) {\n const tagName = el.tagName.toLowerCase();\n let attributes = ' ';\n Array.prototype.slice.call(el.attributes).forEach(item => {\n attributes += `${item.name}=\"${item.value}\" `;\n });\n // removes last ' ' or if there are no attributes makes it to equal ''\n attributes = attributes.slice(0, -1);\n return `<${tagName}${attributes}>${el.innerHTML}</${tagName}>`;\n }\n return el.outerHTML;\n};\n\n/**\n * For comparison we do not need the style scoping classes on polyfilled browsers\n * Rather naive approach for now - probably need to improve once we have failing cases.\n *\n * @param {Element} el Element you want to get the cleaned shadow dom\n * @returns {String} cleaned shadow dom\n */\nexport const getCleanedShadowDom = el => {\n /* istanbul ignore next */\n if (window.ShadyCSS && window.ShadyCSS.nativeShadow === false) {\n const tagName = el.tagName.toLowerCase();\n const regexTagName = new RegExp(tagName, 'g');\n let domString = el.shadowRoot.innerHTML;\n domString = domString.replace(/style-scope/g, ''); // remove style-scope class\n domString = domString.replace(regexTagName, ''); // remove scoped class name\n domString = domString.replace(/(class=\".*?)(\\s)*\"/g, '$1\"'); // remove trailing spaces in class=\" \"\n domString = domString.replace(/ class=\"\\w?\"/g, ''); // remove empty class attributes\n return domString;\n }\n return el.shadowRoot.innerHTML;\n};\n\nexport function getMochaTestPath(runnable) {\n const path = [];\n let node;\n if (runnable.type === 'hook') {\n node = runnable.ctx.currentTest;\n } else {\n node = runnable;\n }\n\n while (node && node.parent) {\n if (node.title) {\n path.push(node.title);\n }\n node = node.parent;\n }\n return path.reverse();\n}\n", "/* eslint-disable no-param-reassign */\nimport { getSnapshot, getSnapshotConfig, saveSnapshot } from '@web/test-runner-commands';\nimport { getDiffableHTML, isDiffOptions } from './get-diffable-html.js';\nimport { getCleanedShadowDom, getMochaTestPath, getOuterHtml } from './src/utils.js';\n\n/** @typedef {import('./get-diffable-html.js').DiffOptions} DiffOptions */\n\nfunction disambiguateArgs(...args) {\n switch (args.length) {\n // equal<T>(actual: T, expected: T, message?: string, options?: DiffOptions): void;\n case 2: {\n const [message, options] = args;\n return { message, options };\n }\n\n // equal<T>(actual: T, expected: T, message?: string): void;\n // equal<T>(actual: T, expected: T, options?: DiffOptions): void;\n case 1: {\n const [first] = args;\n return isDiffOptions(first) ? { options: first } : { message: first };\n }\n\n default:\n return {};\n }\n}\n\n/**\n * @type {Chai.ChaiPlugin}\n */\nexport const chaiDomDiff = (chai, utils) => {\n /**\n * can not be an arrow function as it gets rebound by chai\n */\n chai.Assertion.addProperty('lightDom', function lightDom() {\n new chai.Assertion(this._obj.nodeType).to.equal(1);\n utils.flag(this, 'lightDom', true);\n });\n\n /**\n * can not be an arrow function as it gets rebound by chai\n */\n chai.Assertion.addProperty('shadowDom', function shadowDom() {\n new chai.Assertion(this._obj.nodeType).to.equal(1);\n utils.flag(this, 'shadowDom', true);\n });\n\n /**\n * can not be an arrow function as it gets rebound by chai\n */\n chai.Assertion.addProperty('dom', function dom() {\n new chai.Assertion(this._obj.nodeType).to.equal(1);\n utils.flag(this, 'dom', true);\n });\n\n const getDomHtml = el => getOuterHtml(el);\n const getLightDomHtml = el => el.innerHTML;\n const getShadowDomHtml = el => getCleanedShadowDom(el);\n\n /**\n * Base HTML assertion for `assert` interface.\n * @param {string | Node} actual\n * @param {string | Node} expected\n * @param {boolean} negate\n * @param {[string]|[DiffOptions]|[string, DiffOptions]} rest\n */\n const assertHtmlEquals = (actual, expected, negate, ...rest) => {\n const { message, options } = disambiguateArgs(...rest);\n // use chai's built-in string comparison, log the updated snapshot on error\n const assertion = new chai.Assertion(getDiffableHTML(actual, options), message);\n const expectedDiffableHTML = getDiffableHTML(expected, options);\n\n if (negate) {\n assertion.not.equal(expectedDiffableHTML, message);\n } else {\n assertion.equal(expectedDiffableHTML, message);\n }\n };\n\n /** DOM assertion for `should` and `expect` interfaces. */\n const domEquals = _super =>\n /**\n * @this {Chai.AssertionStatic}\n */\n function handleDom(value, ...args) {\n if (\n utils.flag(this, 'lightDom') ||\n utils.flag(this, 'shadowDom') ||\n utils.flag(this, 'dom')\n ) {\n let html;\n if (utils.flag(this, 'lightDom')) {\n html = getLightDomHtml(this._obj);\n } else if (utils.flag(this, 'shadowDom')) {\n html = getShadowDomHtml(this._obj);\n } else {\n html = getDomHtml(this._obj);\n }\n\n assertHtmlEquals(html, value, utils.flag(this, 'negate'), args[0]);\n } else {\n _super.apply(this, [value, ...args]);\n }\n };\n\n chai.Assertion.overwriteMethod('equals', domEquals);\n chai.Assertion.overwriteMethod('equal', domEquals);\n chai.Assertion.overwriteMethod('eq', domEquals);\n\n /**\n * Base HTML snapshot assertion for `assert` interface.\n * @this {Chai.AssertionStatic}\n * @param {string|Node} actual\n * @param {boolean} negate\n * @param {[string]|[DiffOptions]|[string, DiffOptions]} rest\n */\n function assertHtmlEqualsSnapshotKarma(actual, negate, ...rest) {\n const context = window.__mocha_context__;\n const snapshotState = window.__snapshot__;\n\n const { message, options } = disambiguateArgs(...rest);\n const { index } = context;\n context.index += 1;\n const path = getMochaTestPath(context.runnable);\n const html = getDiffableHTML(actual, options);\n\n if (snapshotState.update) {\n snapshotState.set(path, index, html, 'html');\n } else {\n const snapshot = snapshotState.get(path, index);\n\n if (!snapshot) {\n snapshotState.set(path, index, html, 'html');\n } else {\n const isMatch = snapshotState.match(html, getDiffableHTML(snapshot.code, options));\n if ((isMatch && negate) || (!isMatch && !negate)) {\n /* istanbul ignore next */\n throw new chai.AssertionError(\n message || `Received value does not match stored snapshot ${index}`,\n {\n actual: html,\n expected: snapshot.code,\n showDiff: true,\n },\n chai.util.flag(this, 'ssfi'),\n );\n }\n }\n }\n }\n\n /**\n * Base HTML snapshot assertion for `assert` interface.\n * @this {Chai.AssertionStatic}\n * @param {string|Node} actual\n * @param {boolean} negate\n * @param {[string]|[DiffOptions]|[string, DiffOptions]} rest\n */\n async function assertHtmlEqualsSnapshotWebTestRunner(actual, negate, ...rest) {\n const { message, options } = disambiguateArgs(...rest);\n const path = getMochaTestPath(window.__WTR_MOCHA_RUNNER__.test);\n const name = path.join(' ');\n const snapshot = getDiffableHTML(actual, options);\n const currentSnapshot = await getSnapshot({ name });\n const config = await getSnapshotConfig();\n\n if (currentSnapshot && !config.updateSnapshots) {\n if (negate ? currentSnapshot === snapshot : currentSnapshot !== snapshot) {\n throw new chai.AssertionError(\n message || `Snapshot ${name} does not match the saved snapshot on disk`,\n {\n actual: snapshot,\n expected: currentSnapshot,\n showDiff: true,\n },\n chai.util.flag(this, 'ssfi'),\n );\n }\n } else if (currentSnapshot !== snapshot) {\n await saveSnapshot({ name, content: snapshot });\n }\n }\n\n function assertHtmlEqualsSnapshot(actual, negate, ...rest) {\n if (window.__mocha_context__ && window.__snapshot__) {\n return assertHtmlEqualsSnapshotKarma.call(this, actual, negate, ...rest);\n }\n if (window.__WTR_MOCHA_RUNNER__) {\n return assertHtmlEqualsSnapshotWebTestRunner.call(this, actual, negate, ...rest);\n }\n throw new Error(\n 'Could not detect test runner environment. ' +\n 'Snapshots require either Web Test Runner with mocha, ' +\n 'or Karma with mocha and karma mocha snapshot',\n );\n }\n\n /**\n * Snapshot assertion for `should` and `expect` interfaces.\n * @this {Chai.AssertionStatic}\n */\n function equalSnapshot(options) {\n const el = chai.util.flag(this, 'object');\n let html;\n if (utils.flag(this, 'shadowDom')) {\n html = getShadowDomHtml(el);\n } else if (utils.flag(this, 'lightDom')) {\n html = getLightDomHtml(el);\n } else {\n html = el;\n }\n return assertHtmlEqualsSnapshot.call(this, html, utils.flag(this, 'negate'), options);\n }\n\n utils.addMethod(chai.Assertion.prototype, 'equalSnapshot', equalSnapshot);\n utils.addMethod(chai.Assertion.prototype, 'notEqualSnapshot', equalSnapshot);\n\n utils.addMethod(chai.assert, 'equalSnapshot', assertHtmlEqualsSnapshot);\n utils.addMethod(chai.assert, 'notEqualSnapshot', assertHtmlEqualsSnapshot);\n\n /** @type {Chai.Assert['dom']} */\n chai.assert.dom = {\n equal(actualEl, expectedHTML, ...rest) {\n const negate = false;\n return assertHtmlEquals.call(this, getDomHtml(actualEl), expectedHTML, negate, ...rest);\n },\n notEqual(actualEl, expectedHTML, ...rest) {\n const negate = true;\n return assertHtmlEquals.call(this, getDomHtml(actualEl), expectedHTML, negate, ...rest);\n },\n equalSnapshot(actualEl, ...rest) {\n const negate = false;\n return assertHtmlEqualsSnapshot.call(this, actualEl, negate, ...rest);\n },\n notEqualSnapshot(actualEl, ...rest) {\n const negate = true;\n return assertHtmlEqualsSnapshot.call(this, actualEl, negate, ...rest);\n },\n };\n\n /** @type {Chai.Assert['lightDom']} */\n chai.assert.lightDom = {\n equal(actualEl, expectedHTML, ...rest) {\n const negate = false;\n return assertHtmlEquals.call(this, getLightDomHtml(actualEl), expectedHTML, negate, ...rest);\n },\n notEqual(actualEl, expectedHTML, ...rest) {\n const negate = true;\n return assertHtmlEquals.call(this, getLightDomHtml(actualEl), expectedHTML, negate, ...rest);\n },\n equalSnapshot(actualEl, ...rest) {\n const negate = false;\n return assertHtmlEqualsSnapshot.call(this, getLightDomHtml(actualEl), negate, ...rest);\n },\n notEqualSnapshot(actualEl, ...rest) {\n const negate = true;\n return assertHtmlEqualsSnapshot.call(this, getLightDomHtml(actualEl), negate, ...rest);\n },\n };\n\n /** @type {Chai.Assert['shadowDom']} */\n chai.assert.shadowDom = {\n equal(actualEl, expectedHTML, ...rest) {\n const negate = false;\n return assertHtmlEquals.call(this, getShadowDomHtml(actualEl), expectedHTML, negate, ...rest);\n },\n notEqual(actualEl, expectedHTML, ...rest) {\n const negate = true;\n return assertHtmlEquals.call(this, getShadowDomHtml(actualEl), expectedHTML, negate, ...rest);\n },\n equalSnapshot(actualEl, ...rest) {\n const negate = false;\n return assertHtmlEqualsSnapshot.call(this, getShadowDomHtml(actualEl), negate, ...rest);\n },\n notEqualSnapshot(actualEl, ...rest) {\n const negate = true;\n return assertHtmlEqualsSnapshot.call(this, getShadowDomHtml(actualEl), negate, ...rest);\n },\n };\n};\n", "// @ts-nocheck\n/**\n * In the browser, importing axe-core/axe.min.js will register to the window. In webpack it will\n * be parsed as a commonjs module, so it won't be on the window. In this file we conditionally\n * export from the window, or a webpack specific module import.\n */\n\n/* eslint-disable global-require, import/no-mutable-exports */\nexport let axe;\n\nexport async function loadAxe() {\n if (window.axe) {\n // axe was already imported before\n axe = window.axe;\n return;\n }\n\n if (typeof require === 'function') {\n // we are in a webpack environment\n axe = require('axe-core/axe.min.js');\n return;\n }\n\n // regular behavior, load axe as an es module and let it\n // register to the window\n await import('axe-core/axe.min.js');\n if (!window.axe) {\n throw new Error(\n 'Error importing axe-core/axe.min.js, are you using a bundler or build tool that doesnt handle es modules?',\n );\n }\n axe = window.axe;\n}\n", "import { axe, loadAxe } from './axe-import.js';\n\n/**\n * Creates a map of rules to disable during the test.\n * @param {Array<String>?} ignored List of rule names to ignore during the test.\n * @return {Object|undefined} List of rules to be passed to test configuration or\n * `undefined` when not needed.\n */\nfunction getRules(ignored) {\n if (!ignored || !ignored.length) {\n return undefined;\n }\n const result = {};\n ignored.forEach(rule => {\n result[rule] = { enabled: false };\n });\n return result;\n}\n\n/**\n * Performs the test using AXE core.\n * @param {Element} element The element to be used to perform the test on.\n * @param {Object} opts AXE configuration options.\n * @return {Promise} Promise resolved to the test results object\n */\nasync function runTestAsync(element, opts) {\n if (!axe) {\n // ensure axe is loaded before running tests\n await loadAxe();\n }\n\n return new Promise((resolve, reject) => {\n // @ts-ignore\n axe.run(element, opts, (err, results) => {\n if (err) {\n reject(new Error(err));\n } else {\n resolve(results);\n }\n });\n });\n}\n\n/**\n * Processes axe testing results.\n * @param {Boolean} negate When true \"not\" was used with the test and the output is the opposite\n * (failed test won't throw error)\n * @param {Object} results Axe test result object\n * @param {Function} done A function to be called when ready.\n * @throws {Error} When test did not pass.\n */\nfunction processResults(negate, results, done) {\n const { violations } = results;\n\n if (violations.length && negate) {\n done();\n return;\n }\n\n if (!violations.length && !negate) {\n done();\n return;\n }\n\n const messages = [];\n if (violations.length) {\n messages[messages.length] = 'Accessibility Violations';\n messages[messages.length] = '---';\n violations.forEach(violation => {\n messages[messages.length] = `Rule: ${violation.id}`;\n messages[messages.length] = `Impact: ${violation.impact}`;\n messages[messages.length] = `${violation.help} (${violation.helpUrl})`;\n violation.nodes.forEach(node => {\n messages[messages.length] = '';\n if (node.target) {\n messages[messages.length] = `Issue target: ${node.target}`;\n }\n messages[messages.length] = `Context: ${node.html}`;\n if (node.failureSummary) {\n messages[messages.length] = `${node.failureSummary}`;\n }\n });\n messages[messages.length] = '---';\n });\n }\n\n const msg = new Error(messages.join('\\n'));\n done(msg);\n throw msg;\n}\n\n/**\n * @param {any} chai\n * @param {any} utils\n */\nexport const chaiA11yAxe = (chai, utils) => {\n const { assert } = chai;\n utils.addMethod(chai.Assertion.prototype, 'accessible', function axeTest(options) {\n // @ts-ignore\n const fixture = this._obj;\n const opts = options || {};\n\n const rules = getRules(opts.ignoredRules);\n\n const testOpts = {\n resultTypes: ['violations'],\n };\n if (rules) {\n testOpts.rules = rules;\n }\n let done = opts.done ? opts.done : undefined;\n if (!done) {\n done = () => {};\n }\n\n if (opts.ignoredTags) {\n const ariaHiddenElements = fixture.parentNode.querySelectorAll(opts.ignoredTags.toString());\n ariaHiddenElements.forEach(el => el.setAttribute('aria-hidden', true));\n }\n\n const result = runTestAsync(fixture, testOpts).then(results =>\n // @ts-ignore\n processResults(utils.flag(this, 'negate'), results, done),\n );\n // @ts-ignore\n this.then = result.then.bind(result);\n // @ts-ignore\n return this;\n });\n\n assert.isAccessible = function isAccessible(fixture, options) {\n return new chai.Assertion(fixture).to.be.accessible(options);\n };\n\n assert.isNotAccessible = function isAccessible(fixture, options) {\n return new chai.Assertion(fixture).not.to.be.accessible(options);\n };\n};\n", "/* eslint-disable global-require, import/no-mutable-exports */\nimport chai from './chai.js';\nimport 'chai-dom';\n\n/**\n * In the browser chai-dom registers itself to chai, while when parsed as a\n * commonjs module in webpack it doesn't self register. We need to register\n * it in that case.\n */\nif (typeof require === 'function') {\n const chaiDom = require('chai-dom');\n chai.use(chaiDom);\n}\n", "/* eslint-disable global-require, import/no-mutable-exports */\nimport chai from './chai.js';\nimport 'sinon-chai';\n\n/**\n * In the browser sinon-chai registers itself to chai, while when parsed as a\n * commonjs module in webpack it doesn't self register. We need to register\n * it in that case.\n */\nif (typeof require === 'function') {\n const sinonChai = require('sinon-chai');\n chai.use(sinonChai);\n}\n", "// es module plugins\nimport { chaiDomDiff } from '@open-wc/semantic-dom-diff';\nimport { chaiA11yAxe } from 'chai-a11y-axe';\n\nimport chai from './import-wrappers/chai.js';\n// non es module plugins\nimport './import-wrappers/chai-dom.js';\nimport './import-wrappers/sinon-chai.js';\n\n// @ts-ignore\nchai.use(chaiDomDiff);\n// @ts-ignore\nchai.use(chaiA11yAxe);\n", "import chai from './import-wrappers/chai.js';\nimport './register-chai-plugins.js';\n\nexport {\n html,\n unsafeStatic,\n triggerBlurFor,\n triggerFocusFor,\n oneEvent,\n isIE,\n defineCE,\n aTimeout,\n nextFrame,\n litFixture,\n litFixtureSync,\n fixture,\n fixtureSync,\n fixtureCleanup,\n elementUpdated,\n waitUntil,\n} from '@open-wc/testing-helpers';\n\n// @ts-ignore\nconst { expect, should, assert } = chai;\nexport { expect, should, assert };\n"],
5
- "mappings": "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",
6
- "names": ["require_chai", "__commonJSMin", "exports", "module", "f", "g", "define", "r", "e", "n", "t", "o", "i", "c", "__require", "u", "a", "p", "require", "used", "util", "fn", "config", "assertion", "core", "expect", "should", "assert", "_chai", "AssertionError", "flag", "Assertion", "obj", "msg", "ssfi", "lockSsfi", "value", "name", "chainingBehavior", "expr", "negateMsg", "expected", "_actual", "showDiff", "ok", "actual", "assertionErrorObjectProperties", "operator", "val", "chai", "_", "chain", "an", "type", "article", "SameValueZero", "b", "includeChainingBehavior", "include", "objType", "flagMsg", "negate", "isDeep", "descriptor", "included", "isEql", "item", "props", "firstErr", "numErrs", "prop", "propAssertion", "err", "assertExist", "itemsCount", "checkArguments", "assertEqual", "prevLockSsfi", "assertEql", "assertAbove", "doLength", "msgPrefix", "nType", "errorMessage", "shouldThrow", "printObj", "assertLeast", "assertBelow", "assertMost", "start", "finish", "startType", "finishType", "range", "assertInstanceOf", "constructor", "target", "isInstanceOf", "assertProperty", "isNested", "isOwn", "nameType", "pathInfo", "hasProperty", "assertOwnProperty", "assertOwnPropertyDescriptor", "actualDescriptor", "assertLengthChain", "assertLength", "assertMatch", "re", "str", "assertKeys", "keys", "keysType", "deepStr", "mixedArgsMsg", "key", "len", "any", "all", "expectedKey", "actualKey", "last", "assertThrows", "errorLike", "errMsgMatcher", "caughtErr", "everyArgIsUndefined", "everyArgIsDefined", "errorLikeFail", "errMsgMatcherFail", "errorLikeString", "isCompatibleInstance", "isCompatibleConstructor", "placeholder", "isCompatibleMessage", "respondTo", "method", "itself", "context", "satisfy", "matcher", "result", "closeTo", "delta", "deltaMessage", "isSubsetOf", "subset", "superset", "cmp", "contains", "ordered", "elem", "idx", "matchIdx", "elem2", "subject", "failMsg", "failNegateMsg", "oneOf", "list", "possibility", "assertChanges", "initial", "final", "msgObj", "assertIncreases", "assertDecreases", "assertDelta", "behavior", "realDelta", "expression", "isExtensible", "isSealed", "isFrozen", "express", "errmsg", "test", "message", "act", "exp", "abv", "atlst", "blw", "atmst", "inc", "assertErr", "val2", "set1", "set2", "inList", "tmpMsg", "alias", "as", "loadShould", "shouldGetter", "shouldSetter", "val1", "errt", "errs", "addLengthGuard", "proxify", "transferFlags", "canSetPrototype", "testFn", "excludeNames", "propDesc", "call", "apply", "ctx", "chainableBehavior", "chainableMethodWrapper", "newAssertion", "prototype", "asserterNames", "asserterName", "pd", "fnLengthDesc", "assertionName", "isChainable", "methodWrapper", "isProxyEnabled", "getter", "propertyGetter", "inspect", "types", "index", "art", "or", "flags", "args", "getActual", "objDisplay", "isObjectType", "objectType", "objectTypes", "isObject", "getOwnEnumerablePropertySymbols", "sym", "object", "addProperty", "property", "proto", "pathval", "getName", "loupe", "showHidden", "depth", "colors", "options", "isNaN", "kstr", "_chainingBehavior", "_method", "_super", "overwritingMethodWrapper", "origLockSsfi", "_get", "overwritingPropertyGetter", "getProperties", "builtins", "nonChainableMethodName", "proxyGetter", "suggestion", "suggestionDistance", "dist", "stringDistanceCapped", "strA", "strB", "cap", "memo", "j", "ch", "includeAll", "exclude", "excludes", "excludeProps", "res", "_props", "ssf", "extend", "stack", "compatibleInstance", "thrown", "compatibleConstructor", "compatibleMessage", "errMatcher", "comparisonString", "functionNameMatch", "getFunctionName", "constructorFn", "match", "getConstructorName", "constructorName", "getMessage", "FakeMap", "MemoizeMap", "memoizeCompare", "leftHandOperand", "rightHandOperand", "memoizeMap", "isPrimitive", "leftHandMap", "memoizeSet", "deepEqual", "extensiveDeepEqual", "simpleResult", "simpleEqual", "comparator", "memoizeResultLeft", "memoizeResultRight", "comparatorResult", "leftHandType", "extensiveDeepEqualByType", "iterableEqual", "regexpEqual", "generatorEqual", "entriesEqual", "objectEqual", "leftHandItems", "rightHandItems", "length", "getGeneratorEntries", "hasIteratorFunction", "getIteratorEntries", "generator", "generatorResult", "accumulator", "getEnumerableKeys", "keysEqual", "leftHandKeys", "rightHandKeys", "leftHandEntries", "rightHandEntries", "toString", "getFuncName", "aFunc", "global", "factory", "_typeof", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "_arr", "_n", "_d", "_e", "_i", "_s", "minLen", "_arrayLikeToArray", "arr2", "ansiColors", "styles", "truncator", "colorise", "styleType", "color", "normaliseOptions", "_ref", "_ref$showHidden", "_ref$depth", "_ref$colors", "_ref$customInspect", "customInspect", "_ref$showProxy", "showProxy", "_ref$maxArrayLength", "maxArrayLength", "_ref$breakLength", "breakLength", "_ref$seen", "seen", "_ref$truncate", "truncate", "_ref$stylize", "stylize", "string", "tail", "tailLength", "stringLength", "inspectList", "inspectItem", "separator", "size", "originalLength", "output", "peek", "truncated", "secondToLast", "nextLength", "truncatedLength", "quoteComplexKey", "inspectProperty", "_ref2", "_ref3", "inspectArray", "array", "nonIndexProperties", "listContents", "propertyContents", "getFuncName_1", "getArrayName", "inspectTypedArray", "inspectDate", "dateObject", "split", "date", "inspectFunction", "func", "inspectMapEntry", "mapToEntries", "map", "entries", "inspectMap", "inspectNumber", "number", "inspectBigInt", "nums", "inspectRegExp", "sourceLength", "source", "arrayFromSet", "set", "values", "inspectSet", "stringEscapeChars", "escapeCharacters", "hex", "unicodeLength", "escape", "char", "inspectString", "inspectSymbol", "getPromiseValue", "_process$binding", "getPromiseDetails", "kPending", "kRejected", "_getPromiseDetails", "_getPromiseDetails2", "state", "innerValue", "inspectPromise", "inspectObject", "properties", "symbols", "symbolContents", "sep", "toStringTag", "inspectClass", "inspectArguments", "errorKeys", "inspectObject$1", "error", "inspectAttribute", "inspectHTMLCollection", "collection", "inspectHTML", "element", "head", "headClose", "children", "symbolsSupported", "chaiInspect", "nodeInspect", "nodeUtil", "constructorMap", "stringTagMap", "baseTypesMap", "inspectCustom", "toString$1", "_options", "registerConstructor", "inspector", "registerStringTag", "stringTag", "custom", "parsePath", "path", "parts", "regexp", "mArr", "parsed", "internalGetPathValue", "pathDepth", "temporaryValue", "part", "internalSetPathValue", "tempObj", "propName", "propVal", "next", "getPathInfo", "info", "getPathValue", "setPathValue", "promiseExists", "globalObject", "symbolExists", "mapExists", "setExists", "weakMapExists", "weakSetExists", "dataViewExists", "symbolIteratorExists", "symbolToStringTagExists", "setEntriesExists", "mapEntriesExists", "setIteratorPrototype", "mapIteratorPrototype", "arrayIteratorExists", "arrayIteratorPrototype", "stringIteratorExists", "stringIteratorPrototype", "toStringLeftSliceLength", "toStringRightSliceLength", "typeDetect", "typeofObj", "objPrototype", "require_chai_dom", "__commonJSMin", "exports", "module", "chaiDom", "__require", "chai", "utils", "flag", "elToString", "el", "desc", "isNodeList", "isHTMLElement", "attr", "attrAssert", "name", "val", "actual", "obj", "className", "cls", "id", "html", "text", "contains", "trim", "result", "property", "t", "objDesc", "textMsg", "value", "_super", "length", "actualLength", "selector", "subitem", "tagName", "styleProp", "styleValue", "style", "require_sinon_chai", "__commonJSMin", "exports", "module", "sinonChai", "__require", "chai", "utils", "slice", "isSpy", "putativeSpy", "timesInWords", "count", "isCall", "putativeCall", "assertCanWorkWith", "assertion", "getMessages", "spy", "action", "nonNegatedSuffix", "always", "args", "verbPhrase", "printfArray", "array", "sinonProperty", "name", "messages", "sinonPropertyAsBooleanMethod", "arg", "createSinonMethodHandler", "sinonName", "alwaysSinonMethod", "shouldBeAlways", "sinonMethodName", "sinonMethodAsProperty", "handler", "exceptionalSinonMethod", "chaiName", "sinonMethod", "waitUntil", "predicate", "message", "options", "interval", "timeout", "resolve", "reject", "timeoutId", "nextInterval", "error", "cachedWrappers", "fixtureCleanup", "cachedWrappers", "wrapper", "directives", "isDirective", "o", "directives", "isCEPolyfill", "removeNodes", "container", "start", "end", "n", "noChange", "nothing", "marker", "nodeMarker", "markerRegex", "boundAttributeSuffix", "Template", "result", "element", "nodesToRemove", "stack", "walker", "lastPartIndex", "index", "partIndex", "strings", "length", "node", "attributes", "count", "i", "endsWith", "stringForPart", "name", "lastAttributeNameRegex", "attributeLookupName", "attributeValue", "statics", "data", "parent", "lastIndex", "insert", "s", "createMarker", "match", "n", "str", "suffix", "isTemplatePartActive", "part", "TemplateInstance", "template", "processor", "options", "values", "i", "part", "fragment", "isCEPolyfill", "stack", "parts", "walker", "partIndex", "nodeIndex", "node", "isTemplatePartActive", "policy", "s", "commentMarker", "marker", "TemplateResult", "strings", "values", "type", "processor", "l", "html", "isCommentBinding", "i", "commentOpen", "attributeMatch", "lastAttributeNameRegex", "nodeMarker", "boundAttributeSuffix", "template", "value", "isPrimitive", "value", "isIterable", "AttributeCommitter", "element", "name", "strings", "i", "AttributePart", "l", "parts", "v", "text", "part", "t", "committer", "noChange", "isDirective", "directive", "NodePart", "options", "container", "createMarker", "ref", "TemplateResult", "nothing", "node", "valueAsString", "template", "TemplateInstance", "instance", "fragment", "itemParts", "partIndex", "itemPart", "item", "startNode", "removeNodes", "BooleanAttributePart", "PropertyCommitter", "PropertyPart", "eventOptionsSupported", "EventPart", "eventName", "eventContext", "e", "newListener", "oldListener", "shouldRemoveListener", "shouldAddListener", "getOptions", "event", "o", "DefaultTemplateProcessor", "element", "name", "strings", "options", "prefix", "PropertyCommitter", "EventPart", "BooleanAttributePart", "AttributeCommitter", "NodePart", "defaultTemplateProcessor", "templateFactory", "result", "templateCache", "templateCaches", "template", "key", "marker", "Template", "parts", "render", "result", "container", "options", "part", "removeNodes", "NodePart", "templateFactory", "html", "strings", "values", "TemplateResult", "defaultTemplateProcessor", "isIterable", "object", "NODE_TYPES", "directives", "isDirective", "o", "directives", "isCEPolyfill", "removeNodes", "container", "start", "end", "n", "noChange", "nothing", "marker", "nodeMarker", "markerRegex", "boundAttributeSuffix", "Template", "result", "element", "nodesToRemove", "stack", "walker", "lastPartIndex", "index", "partIndex", "strings", "length", "node", "attributes", "count", "i", "endsWith", "stringForPart", "name", "lastAttributeNameRegex", "attributeLookupName", "attributeValue", "statics", "data", "parent", "lastIndex", "insert", "s", "createMarker", "match", "n", "str", "suffix", "isTemplatePartActive", "part", "TemplateInstance", "template", "processor", "options", "values", "i", "part", "fragment", "isCEPolyfill", "stack", "parts", "walker", "partIndex", "nodeIndex", "node", "isTemplatePartActive", "policy", "s", "commentMarker", "marker", "TemplateResult", "strings", "values", "type", "processor", "l", "html", "isCommentBinding", "i", "commentOpen", "attributeMatch", "lastAttributeNameRegex", "nodeMarker", "boundAttributeSuffix", "template", "value", "isPrimitive", "value", "isIterable", "AttributeCommitter", "element", "name", "strings", "i", "AttributePart", "l", "parts", "v", "text", "part", "t", "committer", "noChange", "isDirective", "directive", "NodePart", "options", "container", "createMarker", "ref", "TemplateResult", "nothing", "node", "valueAsString", "template", "TemplateInstance", "instance", "fragment", "itemParts", "partIndex", "itemPart", "item", "startNode", "removeNodes", "BooleanAttributePart", "PropertyCommitter", "PropertyPart", "eventOptionsSupported", "EventPart", "eventName", "eventContext", "e", "newListener", "oldListener", "shouldRemoveListener", "shouldAddListener", "getOptions", "event", "o", "DefaultTemplateProcessor", "element", "name", "strings", "options", "prefix", "PropertyCommitter", "EventPart", "BooleanAttributePart", "AttributeCommitter", "NodePart", "defaultTemplateProcessor", "templateCaches", "appliedClassMixins", "wasMixinPreviouslyApplied", "mixin", "superClass", "klass", "dedupeMixin", "mixedClass", "Cache", "parent", "key", "value", "counter", "chars", "tagRegExp", "isValid", "tag", "isTagRegistered", "name", "registry", "incrementTagName", "tagName", "newTagName", "createUniqueTag", "globalTagsCache", "addToGlobalTagsCache", "tag", "klass", "getFromGlobalTagsCache", "extendsHTMLElement", "klass", "currentClass", "defineElement", "tagName", "registry", "addToGlobalTagsCache", "storeLazyElementInCache", "tagsCache", "tag", "createUniqueTag", "defineElementAndStoreInCache", "registerElement", "getFromGlobalTagsCache", "defineScopedElement", "chars", "re", "globalCache", "Cache", "matchAll", "str", "matches", "result", "transformTemplate", "strings", "scopedElements", "templateCache", "tagsCache", "transformedStrings", "acc", "i", "item", "block", "tagName", "tag", "registerElement", "start", "end", "isClosingTag", "transform", "getTemplateCacheKey", "type", "scopeName", "compatibleShadyCSSVersion", "ShadyCSS", "shadyTemplateFactory", "result", "cacheKey", "templateCache", "templateCaches", "template", "key", "marker", "element", "Template", "templateCaches", "getTemplateCache", "key", "Cache", "tagsCaches", "getTagsCache", "transformArray", "items", "scopedElements", "templateCache", "tagsCache", "value", "TemplateResult", "transformTemplate", "template", "transform", "scopedElementsTemplateFactory", "scopeName", "newTemplate", "shadyTemplateFactory", "ScopedElementsMixinImplementation", "superclass", "container", "options", "eventContext", "tagName", "klass", "defineScopedElement", "registerElement", "ScopedElementsMixin", "dedupeMixin", "walkerNodeFilter", "removeNodesFromTemplate", "template", "nodesToRemove", "content", "parts", "walker", "partIndex", "nextActiveIndexInTemplateParts", "part", "nodeIndex", "removeCount", "nodesToRemoveInTemplate", "currentRemovingNode", "node", "n", "countNodes", "count", "startIndex", "i", "isTemplatePartActive", "insertNodeIntoTemplate", "refNode", "insertCount", "walkerIndex", "getTemplateCacheKey", "type", "scopeName", "compatibleShadyCSSVersion", "shadyTemplateFactory", "result", "cacheKey", "templateCache", "templateCaches", "template", "key", "marker", "element", "Template", "TEMPLATE_TYPES", "removeStylesFromLitTemplates", "templates", "content", "styles", "s", "removeNodesFromTemplate", "shadyRenderSet", "prepareTemplateStyles", "renderedDOM", "templateElement", "length", "condensedStyle", "i", "style", "insertNodeIntoTemplate", "removes", "render", "container", "options", "hasRendered", "parts", "needsScoping", "firstScopeRender", "renderContainer", "part", "TemplateInstance", "removeNodes", "prop", "_obj", "defaultConverter", "value", "type", "notEqual", "old", "defaultPropertyDeclaration", "STATE_HAS_UPDATED", "STATE_UPDATE_REQUESTED", "STATE_IS_REFLECTING_TO_ATTRIBUTE", "STATE_IS_REFLECTING_TO_PROPERTY", "finalized", "UpdatingElement", "attributes", "v", "p", "attr", "superProperties", "k", "name", "options", "key", "descriptor", "oldValue", "superCtor", "props", "propKeys", "attribute", "hasChanged", "converter", "fromAttribute", "res", "_v", "ctor", "attrValue", "propName", "shouldRequestUpdate", "result", "shouldUpdate", "changedProperties", "e", "_changedProperties", "_a", "ElementProto", "legacyMatches", "supportsAdoptingStyleSheets", "constructionToken", "CSSResult", "cssText", "safeToken", "unsafeCSS", "value", "renderNotImplemented", "LitElement", "UpdatingElement", "userStyles", "addStyles", "styles", "set", "s", "v", "supportsAdoptingStyleSheets", "cssText", "css", "rule", "unsafeCSS", "changedProperties", "templateResult", "style", "render", "transform", "template", "isIterable", "v", "TemplateResult", "html", "ScopedElementsTestWrapper", "ScopedElementsMixin", "LitElement", "_changed", "key", "getWrapperUniqueName", "counter", "tag", "wrapperTagName", "fixtureCleanup", "import_chai", "chai_default", "__require", "DEFAULT_IGNORE_TAGS", "DEFAULT_EMPTY_ATTRS", "VOID_ELEMENTS", "not", "p", "args", "getDiffableHTML", "html", "options", "ignoreAttributes", "e", "ignoreAttributesForTags", "ignoreTags", "ignoreChildren", "stripEmptyAttributes", "escapeAttributes", "escapeAttributesFn", "match", "text", "depth", "handledChildrenForNode", "handledNodeStarted", "getIndentation", "printText", "textNode", "walker", "value", "node", "getTagName", "shouldProcessChildren", "name", "getClassListValueString", "el", "shouldStripAttribute", "getAttributeString", "isIgnoredAttribute", "attr", "sortAttribute", "a", "b", "getAttributesString", "attrStr", "attributes", "i", "printOpenElement", "onNodeStart", "printCloseElement", "onNodeEnd", "container", "current", "parent", "isDiffOptions", "arg", "PARAM_SESSION_ID", "sessionId", "isObject", "payload", "executeServerCommand", "command", "pluginName", "sendMessageWaitForResponse", "response", "msg", "error", "snapshotConfig", "cachedSnapshots", "getSnapshotConfig", "executeServerCommand", "ESCAPE_REGEX", "escapeContent", "content", "itemContent", "getSnapshots", "cache", "result", "module", "isObject", "getSnapshot", "options", "saveSnapshot", "snapshots", "getOuterHtml", "el", "tagName", "attributes", "item", "getCleanedShadowDom", "regexTagName", "domString", "getMochaTestPath", "runnable", "path", "node", "disambiguateArgs", "args", "message", "options", "first", "isDiffOptions", "chaiDomDiff", "chai", "utils", "getDomHtml", "el", "getOuterHtml", "getLightDomHtml", "getShadowDomHtml", "getCleanedShadowDom", "assertHtmlEquals", "actual", "expected", "negate", "rest", "assertion", "getDiffableHTML", "expectedDiffableHTML", "domEquals", "_super", "value", "html", "assertHtmlEqualsSnapshotKarma", "context", "snapshotState", "index", "path", "getMochaTestPath", "snapshot", "isMatch", "assertHtmlEqualsSnapshotWebTestRunner", "name", "currentSnapshot", "getSnapshot", "config", "getSnapshotConfig", "saveSnapshot", "assertHtmlEqualsSnapshot", "equalSnapshot", "actualEl", "expectedHTML", "axe", "loadAxe", "__require", "getRules", "ignored", "result", "rule", "runTestAsync", "element", "opts", "axe", "loadAxe", "resolve", "reject", "err", "results", "processResults", "negate", "done", "violations", "messages", "violation", "node", "msg", "chaiA11yAxe", "chai", "utils", "assert", "options", "fixture", "rules", "testOpts", "el", "import_chai_dom", "__require", "chaiDom", "chai_default", "import_sinon_chai", "__require", "sinonChai", "chai_default", "chai_default", "chaiDomDiff", "chaiA11yAxe", "expect", "should", "assert", "chai_default"]
7
- }