@descope/web-components-ui 1.32.0 → 1.33.0

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 (321) hide show
  1. package/dist/cjs/index.cjs.js +481 -364
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +524 -438
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/umd/1408.js +382 -0
  6. package/dist/umd/1408.js.LICENSE.txt +17 -0
  7. package/dist/umd/1408.js.map +1 -0
  8. package/dist/umd/{9243.js → 1519.js} +7 -6
  9. package/dist/umd/1519.js.map +1 -0
  10. package/dist/umd/189.js +109 -276
  11. package/dist/umd/189.js.LICENSE.txt +12 -0
  12. package/dist/umd/189.js.map +1 -0
  13. package/dist/umd/{7979.js → 1899.js} +11 -10
  14. package/dist/umd/1899.js.map +1 -0
  15. package/dist/umd/{1172.js → 1995.js} +10 -9
  16. package/dist/umd/1995.js.map +1 -0
  17. package/dist/umd/2540.js +2 -1
  18. package/dist/umd/2540.js.map +1 -0
  19. package/dist/umd/2672.js +2 -0
  20. package/dist/umd/2672.js.map +1 -0
  21. package/dist/umd/2739.js +2 -0
  22. package/dist/umd/2739.js.map +1 -0
  23. package/dist/umd/{2570.js → 2894.js} +6 -5
  24. package/dist/umd/2894.js.map +1 -0
  25. package/dist/umd/{404.js → 3620.js} +9 -8
  26. package/dist/umd/3620.js.map +1 -0
  27. package/dist/umd/{4455.js → 384.js} +8 -7
  28. package/dist/umd/384.js.map +1 -0
  29. package/dist/umd/4467.js +3 -0
  30. package/dist/umd/4467.js.map +1 -0
  31. package/dist/umd/{4127.js → 4518.js} +11 -10
  32. package/dist/umd/4518.js.map +1 -0
  33. package/dist/umd/{1902.js → 4550.js} +7 -6
  34. package/dist/umd/4550.js.map +1 -0
  35. package/dist/umd/{4554.js → 4623.js} +7 -6
  36. package/dist/umd/4623.js.map +1 -0
  37. package/dist/umd/{742.js → 4914.js} +3 -2
  38. package/dist/umd/4914.js.map +1 -0
  39. package/dist/umd/{9478.js → 513.js} +6 -5
  40. package/dist/umd/513.js.map +1 -0
  41. package/dist/umd/{201.js → 5260.js} +6 -5
  42. package/dist/umd/5260.js.map +1 -0
  43. package/dist/umd/5414.js +2 -1
  44. package/dist/umd/5414.js.map +1 -0
  45. package/dist/umd/5648.js +110 -0
  46. package/dist/umd/5648.js.map +1 -0
  47. package/dist/umd/5780.js +2 -0
  48. package/dist/umd/5780.js.map +1 -0
  49. package/dist/umd/{5563.js → 6227.js} +6 -5
  50. package/dist/umd/6227.js.map +1 -0
  51. package/dist/umd/6424.js +149 -0
  52. package/dist/umd/6424.js.map +1 -0
  53. package/dist/umd/{7097.js → 6649.js} +6 -5
  54. package/dist/umd/6649.js.map +1 -0
  55. package/dist/umd/676.js +3 -0
  56. package/dist/umd/676.js.map +1 -0
  57. package/dist/umd/{1738.js → 7092.js} +2 -1
  58. package/dist/umd/7092.js.map +1 -0
  59. package/dist/umd/{3638.js → 7182.js} +3 -2
  60. package/dist/umd/7182.js.map +1 -0
  61. package/dist/umd/{507.js → 7291.js} +6 -5
  62. package/dist/umd/7291.js.map +1 -0
  63. package/dist/umd/{4187.js → 7565.js} +3 -2
  64. package/dist/umd/7565.js.map +1 -0
  65. package/dist/umd/{3191.js → 7620.js} +11 -7
  66. package/dist/umd/7620.js.map +1 -0
  67. package/dist/umd/{6050.js → 7774.js} +10 -9
  68. package/dist/umd/7774.js.map +1 -0
  69. package/dist/umd/{2666.js → 7939.js} +5 -4
  70. package/dist/umd/7939.js.map +1 -0
  71. package/dist/umd/{4114.js → 8618.js} +5 -4
  72. package/dist/umd/8618.js.map +1 -0
  73. package/dist/umd/8961.js +2 -0
  74. package/dist/umd/8961.js.map +1 -0
  75. package/dist/umd/{4574.js → 8983.js} +6 -5
  76. package/dist/umd/8983.js.map +1 -0
  77. package/dist/umd/9030.js +265 -307
  78. package/dist/umd/9030.js.LICENSE.txt +0 -6
  79. package/dist/umd/9030.js.map +1 -0
  80. package/dist/umd/9365.js +2 -0
  81. package/dist/umd/9365.js.map +1 -0
  82. package/dist/umd/{4218.js → 9380.js} +5 -4
  83. package/dist/umd/9380.js.map +1 -0
  84. package/dist/umd/9871.js +276 -0
  85. package/dist/umd/9871.js.map +1 -0
  86. package/dist/umd/9970.js +833 -0
  87. package/dist/umd/9970.js.map +1 -0
  88. package/dist/umd/DescopeDev.js +2 -1
  89. package/dist/umd/DescopeDev.js.map +1 -0
  90. package/dist/umd/boolean-fields-descope-boolean-field-internal-index-js.js +2 -1
  91. package/dist/umd/boolean-fields-descope-boolean-field-internal-index-js.js.map +1 -0
  92. package/dist/umd/boolean-fields-descope-checkbox-index-js.js +2 -1
  93. package/dist/umd/boolean-fields-descope-checkbox-index-js.js.map +1 -0
  94. package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js +2 -1
  95. package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js.map +1 -0
  96. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js +2 -1
  97. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js.map +1 -0
  98. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js +2 -1
  99. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js.map +1 -0
  100. package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js +2 -1
  101. package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js.map +1 -0
  102. package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js +2 -1
  103. package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js.map +1 -0
  104. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +2 -1
  105. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js.map +1 -0
  106. package/dist/umd/descope-address-field.js +2 -1
  107. package/dist/umd/descope-address-field.js.map +1 -0
  108. package/dist/umd/descope-alert-index-js.js +2 -1
  109. package/dist/umd/descope-alert-index-js.js.map +1 -0
  110. package/dist/umd/descope-apps-list-index-js.js +2 -1
  111. package/dist/umd/descope-apps-list-index-js.js.map +1 -0
  112. package/dist/umd/descope-autocomplete-field.js +2 -1
  113. package/dist/umd/descope-autocomplete-field.js.map +1 -0
  114. package/dist/umd/descope-avatar.js +2 -1
  115. package/dist/umd/descope-avatar.js.map +1 -0
  116. package/dist/umd/descope-badge-index-js.js +2 -1
  117. package/dist/umd/descope-badge-index-js.js.map +1 -0
  118. package/dist/umd/descope-button-index-js.js +5 -4
  119. package/dist/umd/descope-button-index-js.js.map +1 -0
  120. package/dist/umd/descope-code-snippet-index-js.js +2 -1
  121. package/dist/umd/descope-code-snippet-index-js.js.map +1 -0
  122. package/dist/umd/descope-combo-box.js +7 -6
  123. package/dist/umd/descope-combo-box.js.map +1 -0
  124. package/dist/umd/descope-container-index-js.js +2 -1
  125. package/dist/umd/descope-container-index-js.js.map +1 -0
  126. package/dist/umd/descope-date-field-descope-calendar-index-js.js +2 -1
  127. package/dist/umd/descope-date-field-descope-calendar-index-js.js.map +1 -0
  128. package/dist/umd/descope-date-field-index-js.js +2 -1
  129. package/dist/umd/descope-date-field-index-js.js.map +1 -0
  130. package/dist/umd/descope-divider-index-js.js +2 -1
  131. package/dist/umd/descope-divider-index-js.js.map +1 -0
  132. package/dist/umd/descope-email-field-index-js.js +5 -4
  133. package/dist/umd/descope-email-field-index-js.js.map +1 -0
  134. package/dist/umd/descope-enriched-text-index-js.js +2 -1
  135. package/dist/umd/descope-enriched-text-index-js.js.map +1 -0
  136. package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js +5 -4
  137. package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js.map +1 -0
  138. package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js +6 -5
  139. package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js.map +1 -0
  140. package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js +2 -1
  141. package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js.map +1 -0
  142. package/dist/umd/descope-grid-descope-grid-text-column-index-js.js +5 -4
  143. package/dist/umd/descope-grid-descope-grid-text-column-index-js.js.map +1 -0
  144. package/dist/umd/descope-grid-index-js.js +2 -1
  145. package/dist/umd/descope-grid-index-js.js.map +1 -0
  146. package/dist/umd/descope-hybrid-field-index-js.js +4 -3
  147. package/dist/umd/descope-hybrid-field-index-js.js.map +1 -0
  148. package/dist/umd/descope-icon-index-js.js +2 -1
  149. package/dist/umd/descope-icon-index-js.js.map +1 -0
  150. package/dist/umd/descope-image-index-js.js +2 -1
  151. package/dist/umd/descope-image-index-js.js.map +1 -0
  152. package/dist/umd/descope-link-index-js.js +2 -1
  153. package/dist/umd/descope-link-index-js.js.map +1 -0
  154. package/dist/umd/descope-list-index-js.js +2 -1
  155. package/dist/umd/descope-list-index-js.js.map +1 -0
  156. package/dist/umd/descope-loader-linear-index-js.js +2 -1
  157. package/dist/umd/descope-loader-linear-index-js.js.map +1 -0
  158. package/dist/umd/descope-loader-radial-index-js.js +2 -1
  159. package/dist/umd/descope-loader-radial-index-js.js.map +1 -0
  160. package/dist/umd/descope-logo-index-js.js +2 -1
  161. package/dist/umd/descope-logo-index-js.js.map +1 -0
  162. package/dist/umd/descope-modal-index-js.js +2 -1
  163. package/dist/umd/descope-modal-index-js.js.map +1 -0
  164. package/dist/umd/descope-multi-select-combo-box-index-js.js +2 -1
  165. package/dist/umd/descope-multi-select-combo-box-index-js.js.map +1 -0
  166. package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +2 -1
  167. package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js.map +1 -0
  168. package/dist/umd/descope-new-password-index-js.js +2 -1
  169. package/dist/umd/descope-new-password-index-js.js.map +1 -0
  170. package/dist/umd/descope-notification-descope-notification-card-index-js.js +2 -1
  171. package/dist/umd/descope-notification-descope-notification-card-index-js.js.map +1 -0
  172. package/dist/umd/descope-notification-index-js.js +2 -1
  173. package/dist/umd/descope-notification-index-js.js.map +1 -0
  174. package/dist/umd/descope-notp-image-index-js.js +2 -1
  175. package/dist/umd/descope-notp-image-index-js.js.map +1 -0
  176. package/dist/umd/descope-number-field-index-js.js +2 -1
  177. package/dist/umd/descope-number-field-index-js.js.map +1 -0
  178. package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +2 -1
  179. package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js.map +1 -0
  180. package/dist/umd/descope-passcode-index-js.js +3 -2
  181. package/dist/umd/descope-passcode-index-js.js.map +1 -0
  182. package/dist/umd/descope-password-index-js.js +2 -1
  183. package/dist/umd/descope-password-index-js.js.map +1 -0
  184. package/dist/umd/descope-policy-validation-index-js.js +2 -1
  185. package/dist/umd/descope-policy-validation-index-js.js.map +1 -0
  186. package/dist/umd/descope-radio-group-index-js.js +2 -1
  187. package/dist/umd/descope-radio-group-index-js.js.map +1 -0
  188. package/dist/umd/descope-recaptcha-index-js.js +2 -1
  189. package/dist/umd/descope-recaptcha-index-js.js.map +1 -0
  190. package/dist/umd/descope-scopes-list-index-js.js +2 -1
  191. package/dist/umd/descope-scopes-list-index-js.js.map +1 -0
  192. package/dist/umd/descope-security-questions-setup-index-js.js +2 -1
  193. package/dist/umd/descope-security-questions-setup-index-js.js.map +1 -0
  194. package/dist/umd/descope-security-questions-verify-index-js.js +3 -2
  195. package/dist/umd/descope-security-questions-verify-index-js.js.map +1 -0
  196. package/dist/umd/descope-text-area-index-js.js +2 -1
  197. package/dist/umd/descope-text-area-index-js.js.map +1 -0
  198. package/dist/umd/descope-text-field-index-js.js +3 -2
  199. package/dist/umd/descope-text-field-index-js.js.map +1 -0
  200. package/dist/umd/descope-text.js +2 -1
  201. package/dist/umd/descope-text.js.map +1 -0
  202. package/dist/umd/descope-third-party-app-logo-index-js.js +2 -1
  203. package/dist/umd/descope-third-party-app-logo-index-js.js.map +1 -0
  204. package/dist/umd/descope-totp-image-index-js.js +2 -1
  205. package/dist/umd/descope-totp-image-index-js.js.map +1 -0
  206. package/dist/umd/descope-upload-file-index-js.js +2 -1
  207. package/dist/umd/descope-upload-file-index-js.js.map +1 -0
  208. package/dist/umd/descope-user-attribute-index-js.js +2 -1
  209. package/dist/umd/descope-user-attribute-index-js.js.map +1 -0
  210. package/dist/umd/descope-user-auth-method-index-js.js +2 -1
  211. package/dist/umd/descope-user-auth-method-index-js.js.map +1 -0
  212. package/dist/umd/fonts/font-1364590020.woff +0 -0
  213. package/dist/umd/fonts/font-1949233557.woff +0 -0
  214. package/dist/umd/index.js +2 -1
  215. package/dist/umd/index.js.map +1 -0
  216. package/dist/umd/mapping-fields-descope-mappings-field-descope-mapping-item-index-js.js +2 -1
  217. package/dist/umd/mapping-fields-descope-mappings-field-descope-mapping-item-index-js.js.map +1 -0
  218. package/dist/umd/mapping-fields-descope-mappings-field-descope-mappings-field-internal-index-js.js +2 -1
  219. package/dist/umd/mapping-fields-descope-mappings-field-descope-mappings-field-internal-index-js.js.map +1 -0
  220. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +2 -1
  221. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -0
  222. package/dist/umd/mapping-fields-descope-saml-group-mappings-descope-saml-group-mappings-internal-index-js.js +2 -1
  223. package/dist/umd/mapping-fields-descope-saml-group-mappings-descope-saml-group-mappings-internal-index-js.js.map +1 -0
  224. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +2 -1
  225. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -0
  226. package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +2 -1
  227. package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js.map +1 -0
  228. package/dist/umd/phone-fields-descope-phone-field-index-js.js +2 -1
  229. package/dist/umd/phone-fields-descope-phone-field-index-js.js.map +1 -0
  230. package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +3 -2
  231. package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js.map +1 -0
  232. package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +8 -7
  233. package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js.map +1 -0
  234. package/package.json +10 -8
  235. package/src/baseClasses/createCssVarImageClass.js +10 -5
  236. package/src/components/button-selection-group-fields/baseButtonSelectionGroup.js +7 -0
  237. package/src/components/button-selection-group-fields/createBaseButtonSelectionGroupInternalClass.js +1 -8
  238. package/src/components/button-selection-group-fields/descope-button-selection-group-item/ButtonSelectionGroupItemClass.js +11 -6
  239. package/src/components/descope-alert/AlertClass.js +16 -12
  240. package/src/components/descope-badge/BadgeClass.js +11 -6
  241. package/src/components/descope-code-snippet/CodeSnippetClass.js +9 -4
  242. package/src/components/descope-container/ContainerClass.js +9 -4
  243. package/src/components/descope-date-field/DateFieldClass.js +22 -17
  244. package/src/components/descope-date-field/descope-calendar/CalendarClass.js +28 -18
  245. package/src/components/descope-date-field/descope-calendar/helpers.js +1 -2
  246. package/src/components/descope-divider/DividerClass.js +14 -9
  247. package/src/components/descope-enriched-text/EnrichedTextClass.js +9 -4
  248. package/src/components/descope-grid/GridClass.js +1 -1
  249. package/src/components/descope-hybrid-field/HybridFieldClass.js +15 -10
  250. package/src/components/descope-icon/IconClass.js +9 -4
  251. package/src/components/descope-image/ImageClass.js +10 -5
  252. package/src/components/descope-link/LinkClass.js +14 -9
  253. package/src/components/descope-list/ListClass.js +15 -13
  254. package/src/components/descope-list/ListItemClass.js +16 -14
  255. package/src/components/descope-loader-linear/LoaderLinearClass.js +10 -5
  256. package/src/components/descope-loader-radial/LoaderRadialClass.js +10 -5
  257. package/src/components/descope-modal/ModalClass.js +16 -4
  258. package/src/components/descope-new-password/NewPasswordClass.js +1 -1
  259. package/src/components/descope-new-password/descope-new-password-internal/NewPasswordInternal.js +8 -6
  260. package/src/components/descope-passcode/PasscodeClass.js +28 -1
  261. package/src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js +26 -23
  262. package/src/components/descope-passcode/descope-passcode-internal/helpers.js +3 -22
  263. package/src/components/descope-policy-validation/PolicyValidationClass.js +8 -3
  264. package/src/components/descope-recaptcha/RecaptchaClass.js +13 -8
  265. package/src/components/descope-scopes-list/ScopesListClass.js +9 -5
  266. package/src/components/descope-security-questions-setup/SecurityQuestionsSetupClass.js +9 -5
  267. package/src/components/descope-security-questions-verify/SecurityQuestionsVerifyClass.js +9 -5
  268. package/src/components/descope-text-field/TextFieldClass.js +1 -1
  269. package/src/components/descope-third-party-app-logo/ThirdPartyAppLogoClass.js +20 -16
  270. package/src/components/descope-upload-file/UploadFileClass.js +20 -15
  271. package/src/components/descope-user-attribute/UserAttributeClass.js +25 -22
  272. package/src/components/descope-user-auth-method/UserAuthMethodClass.js +25 -22
  273. package/src/components/mapping-fields/descope-mappings-field/descope-mapping-item/MappingItem.js +15 -9
  274. package/src/components/phone-fields/descope-phone-field/PhoneFieldClass.js +1 -0
  275. package/src/components/phone-fields/descope-phone-field/helpers.js +0 -1
  276. package/src/mixins/createProxy.js +3 -1
  277. package/src/mixins/createStyleMixin/index.js +9 -22
  278. package/src/mixins/draggableMixin.js +3 -2
  279. package/dist/umd/1402.js +0 -1
  280. package/dist/umd/1484.js +0 -148
  281. package/dist/umd/3110.js +0 -275
  282. package/dist/umd/3437.js +0 -2
  283. package/dist/umd/4619.js +0 -1
  284. package/dist/umd/4902.js +0 -170
  285. package/dist/umd/4902.js.LICENSE.txt +0 -23
  286. package/dist/umd/5096.js +0 -109
  287. package/dist/umd/5318.js +0 -1
  288. package/dist/umd/5459.js +0 -1
  289. package/dist/umd/7150.js +0 -2
  290. package/dist/umd/731.js +0 -832
  291. package/dist/umd/8823.js +0 -1
  292. /package/dist/umd/{9243.js.LICENSE.txt → 1519.js.LICENSE.txt} +0 -0
  293. /package/dist/umd/{1902.js.LICENSE.txt → 1899.js.LICENSE.txt} +0 -0
  294. /package/dist/umd/{1172.js.LICENSE.txt → 1995.js.LICENSE.txt} +0 -0
  295. /package/dist/umd/{2570.js.LICENSE.txt → 2894.js.LICENSE.txt} +0 -0
  296. /package/dist/umd/{1484.js.LICENSE.txt → 3620.js.LICENSE.txt} +0 -0
  297. /package/dist/umd/{2666.js.LICENSE.txt → 384.js.LICENSE.txt} +0 -0
  298. /package/dist/umd/{3437.js.LICENSE.txt → 4467.js.LICENSE.txt} +0 -0
  299. /package/dist/umd/{404.js.LICENSE.txt → 4518.js.LICENSE.txt} +0 -0
  300. /package/dist/umd/{4455.js.LICENSE.txt → 4550.js.LICENSE.txt} +0 -0
  301. /package/dist/umd/{4554.js.LICENSE.txt → 4623.js.LICENSE.txt} +0 -0
  302. /package/dist/umd/{742.js.LICENSE.txt → 4914.js.LICENSE.txt} +0 -0
  303. /package/dist/umd/{507.js.LICENSE.txt → 513.js.LICENSE.txt} +0 -0
  304. /package/dist/umd/{201.js.LICENSE.txt → 5260.js.LICENSE.txt} +0 -0
  305. /package/dist/umd/{5096.js.LICENSE.txt → 5648.js.LICENSE.txt} +0 -0
  306. /package/dist/umd/{5563.js.LICENSE.txt → 6227.js.LICENSE.txt} +0 -0
  307. /package/dist/umd/{4127.js.LICENSE.txt → 6424.js.LICENSE.txt} +0 -0
  308. /package/dist/umd/{7097.js.LICENSE.txt → 6649.js.LICENSE.txt} +0 -0
  309. /package/dist/umd/{7150.js.LICENSE.txt → 676.js.LICENSE.txt} +0 -0
  310. /package/dist/umd/{3638.js.LICENSE.txt → 7182.js.LICENSE.txt} +0 -0
  311. /package/dist/umd/{7979.js.LICENSE.txt → 7291.js.LICENSE.txt} +0 -0
  312. /package/dist/umd/{4187.js.LICENSE.txt → 7565.js.LICENSE.txt} +0 -0
  313. /package/dist/umd/{3191.js.LICENSE.txt → 7620.js.LICENSE.txt} +0 -0
  314. /package/dist/umd/{6050.js.LICENSE.txt → 7774.js.LICENSE.txt} +0 -0
  315. /package/dist/umd/{9478.js.LICENSE.txt → 7939.js.LICENSE.txt} +0 -0
  316. /package/dist/umd/{4114.js.LICENSE.txt → 8618.js.LICENSE.txt} +0 -0
  317. /package/dist/umd/{4574.js.LICENSE.txt → 8983.js.LICENSE.txt} +0 -0
  318. /package/dist/umd/{4218.js.LICENSE.txt → 9380.js.LICENSE.txt} +0 -0
  319. /package/dist/umd/{3110.js.LICENSE.txt → 9871.js.LICENSE.txt} +0 -0
  320. /package/dist/umd/{731.js.LICENSE.txt → 9970.js.LICENSE.txt} +0 -0
  321. /package/dist/umd/{bcdfe87ae253c2cf789c9a737f8d8c22.woff → fonts/font-38673212.woff} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"9970.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../../../node_modules/@vaadin/a11y-base/src/announce.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/a11y-base/src/focus-restoration-controller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/a11y-base/src/focus-trap-controller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-selection-column-base-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-selection-column-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-selection-column.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/theme/lumo/vaadin-grid-sorter-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-sorter-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-sorter.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-sort-column-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-sort-column.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/theme/lumo/vaadin-grid-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-a11y-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-active-item-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/array-data-provider.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-array-data-provider-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-column-reordering-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-column-resizing-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/component-base/src/data-provider-controller/helpers.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/component-base/src/data-provider-controller/cache.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/component-base/src/data-provider-controller/data-provider-controller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-data-provider-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-drag-and-drop-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-dynamic-columns-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-event-context-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-filter-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-keyboard-navigation-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-row-details-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/component-base/src/dir-utils.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-scroll-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-selection-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-sort-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-styling-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/grid/src/vaadin-grid.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2022 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { animationFrame } from '@vaadin/component-base/src/async.js';\nimport { Debouncer } from '@vaadin/component-base/src/debounce.js';\n\nconst region = document.createElement('div');\n\nregion.style.position = 'fixed';\nregion.style.clip = 'rect(0px, 0px, 0px, 0px)';\nregion.setAttribute('aria-live', 'polite');\n\ndocument.body.appendChild(region);\n\nlet alertDebouncer;\n/**\n * Cause a text string to be announced by screen readers.\n *\n * @param {string} text The text that should be announced by the screen reader.\n * @param {{mode?: string, timeout?: number}} options Additional options.\n */\nexport function announce(text, options = {}) {\n const mode = options.mode || 'polite';\n const timeout = options.timeout === undefined ? 150 : options.timeout;\n\n if (mode === 'alert') {\n region.removeAttribute('aria-live');\n region.removeAttribute('role');\n alertDebouncer = Debouncer.debounce(alertDebouncer, animationFrame, () => {\n region.setAttribute('role', 'alert');\n });\n } else {\n if (alertDebouncer) {\n alertDebouncer.cancel();\n }\n region.removeAttribute('role');\n region.setAttribute('aria-live', mode);\n }\n\n region.textContent = '';\n\n setTimeout(() => {\n region.textContent = text;\n }, timeout);\n}\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { getDeepActiveElement } from './focus-utils.js';\n\n/**\n * A controller for saving a focused node and restoring focus to it later.\n */\nexport class FocusRestorationController {\n /**\n * Saves the given node as a target for restoring focus to\n * when `restoreFocus()` is called. If no node is provided,\n * the currently focused node in the DOM is saved as a target.\n *\n * @param {Node | null | undefined} focusNode\n */\n saveFocus(focusNode) {\n this.focusNode = focusNode || getDeepActiveElement();\n }\n\n /**\n * Restores focus to the target node that was saved previously with `saveFocus()`.\n */\n restoreFocus(options) {\n const focusNode = this.focusNode;\n if (!focusNode) {\n return;\n }\n\n const preventScroll = options ? options.preventScroll : false;\n\n if (getDeepActiveElement() === document.body) {\n // In Firefox and Safari, focusing the node synchronously\n // doesn't work as expected when the overlay is closing on outside click.\n // These browsers force focus to move to the body element and retain it\n // there until the next event loop iteration.\n setTimeout(() => focusNode.focus({ preventScroll }));\n } else {\n focusNode.focus({ preventScroll });\n }\n\n this.focusNode = null;\n }\n}\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { getFocusableElements, isElementFocused } from './focus-utils.js';\n\nconst instances = [];\n\n/**\n * A controller for trapping focus within a DOM node.\n */\nexport class FocusTrapController {\n /**\n * @param {HTMLElement} host\n */\n constructor(host) {\n /**\n * The controller host element.\n *\n * @type {HTMLElement}\n */\n this.host = host;\n\n /**\n * A node for trapping focus in.\n *\n * @type {HTMLElement | null}\n * @private\n */\n this.__trapNode = null;\n\n this.__onKeyDown = this.__onKeyDown.bind(this);\n }\n\n /**\n * An array of tab-ordered focusable elements inside the trap node.\n *\n * @return {HTMLElement[]}\n * @private\n */\n get __focusableElements() {\n return getFocusableElements(this.__trapNode);\n }\n\n /**\n * The index of the element inside the trap node that currently has focus.\n *\n * @return {HTMLElement | undefined}\n * @private\n */\n get __focusedElementIndex() {\n const focusableElements = this.__focusableElements;\n return focusableElements.indexOf(focusableElements.filter(isElementFocused).pop());\n }\n\n hostConnected() {\n document.addEventListener('keydown', this.__onKeyDown);\n }\n\n hostDisconnected() {\n document.removeEventListener('keydown', this.__onKeyDown);\n }\n\n /**\n * Activates a focus trap for a DOM node that will prevent focus from escaping the node.\n * The trap can be deactivated with the `.releaseFocus()` method.\n *\n * If focus is initially outside the trap, the method will move focus inside,\n * on the first focusable element of the trap in the tab order.\n * The first focusable element can be the trap node itself if it is focusable\n * and comes first in the tab order.\n *\n * If there are no focusable elements, the method will throw an exception\n * and the trap will not be set.\n *\n * @param {HTMLElement} trapNode\n */\n trapFocus(trapNode) {\n this.__trapNode = trapNode;\n\n if (this.__focusableElements.length === 0) {\n this.__trapNode = null;\n throw new Error('The trap node should have at least one focusable descendant or be focusable itself.');\n }\n\n instances.push(this);\n\n if (this.__focusedElementIndex === -1) {\n this.__focusableElements[0].focus();\n }\n }\n\n /**\n * Deactivates the focus trap set with the `.trapFocus()` method\n * so that it becomes possible to tab outside the trap node.\n */\n releaseFocus() {\n this.__trapNode = null;\n\n instances.pop();\n }\n\n /**\n * A `keydown` event handler that manages tabbing navigation when the trap is enabled.\n *\n * - Moves focus to the next focusable element of the trap on `Tab` press.\n * When no next element to focus, the method moves focus to the first focusable element.\n * - Moves focus to the prev focusable element of the trap on `Shift+Tab` press.\n * When no prev element to focus, the method moves focus to the last focusable element.\n *\n * @param {KeyboardEvent} event\n * @private\n */\n __onKeyDown(event) {\n if (!this.__trapNode) {\n return;\n }\n\n // Only handle events for the last instance\n if (this !== Array.from(instances).pop()) {\n return;\n }\n\n if (event.key === 'Tab') {\n event.preventDefault();\n\n const backward = event.shiftKey;\n this.__focusNextElement(backward);\n }\n }\n\n /**\n * - Moves focus to the next focusable element if `backward === false`.\n * When no next element to focus, the method moves focus to the first focusable element.\n * - Moves focus to the prev focusable element if `backward === true`.\n * When no prev element to focus the method moves focus to the last focusable element.\n *\n * If no focusable elements, the method returns immediately.\n *\n * @param {boolean} backward\n * @private\n */\n __focusNextElement(backward = false) {\n const focusableElements = this.__focusableElements;\n const step = backward ? -1 : 1;\n const currentIndex = this.__focusedElementIndex;\n const nextIndex = (focusableElements.length + currentIndex + step) % focusableElements.length;\n const element = focusableElements[nextIndex];\n element.focus();\n if (element.localName === 'input') {\n element.select();\n }\n }\n}\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { addListener } from '@vaadin/component-base/src/gestures.js';\n\n/**\n * A mixin that provides basic functionality for the\n * `<vaadin-grid-selection-column>`. This includes properties, cell rendering,\n * and overridable methods for handling changes to the selection state.\n *\n * **NOTE**: This mixin is re-used by the Flow component, and as such must not\n * implement any selection state updates for the column element or the grid.\n * Web component-specific selection state updates must be implemented in the\n * `<vaadin-grid-selection-column>` itself, by overriding the protected methods\n * provided by this mixin.\n *\n * @polymerMixin\n */\nexport const GridSelectionColumnBaseMixin = (superClass) =>\n class GridSelectionColumnBaseMixin extends superClass {\n static get properties() {\n return {\n /**\n * Width of the cells for this column.\n */\n width: {\n type: String,\n value: '58px',\n sync: true,\n },\n\n /**\n * Flex grow ratio for the cell widths. When set to 0, cell width is fixed.\n * @attr {number} flex-grow\n * @type {number}\n */\n flexGrow: {\n type: Number,\n value: 0,\n sync: true,\n },\n\n /**\n * When true, all the items are selected.\n * @attr {boolean} select-all\n * @type {boolean}\n */\n selectAll: {\n type: Boolean,\n value: false,\n notify: true,\n sync: true,\n },\n\n /**\n * When true, the active gets automatically selected.\n * @attr {boolean} auto-select\n * @type {boolean}\n */\n autoSelect: {\n type: Boolean,\n value: false,\n sync: true,\n },\n\n /**\n * When true, rows can be selected by dragging over the selection column.\n * @attr {boolean} drag-select\n * @type {boolean}\n */\n dragSelect: {\n type: Boolean,\n value: false,\n sync: true,\n },\n\n /** @protected */\n _indeterminate: {\n type: Boolean,\n sync: true,\n },\n\n /** @protected */\n _selectAllHidden: Boolean,\n };\n }\n\n static get observers() {\n return [\n '_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header, selectAll, _indeterminate, _selectAllHidden)',\n ];\n }\n\n /**\n * Renders the Select All checkbox to the header cell.\n *\n * @override\n */\n _defaultHeaderRenderer(root, _column) {\n let checkbox = root.firstElementChild;\n if (!checkbox) {\n checkbox = document.createElement('vaadin-checkbox');\n checkbox.setAttribute('aria-label', 'Select All');\n checkbox.classList.add('vaadin-grid-select-all-checkbox');\n root.appendChild(checkbox);\n // Add listener after appending, so we can skip the initial change event\n checkbox.addEventListener('checked-changed', this.__onSelectAllCheckedChanged.bind(this));\n }\n\n const checked = this.__isChecked(this.selectAll, this._indeterminate);\n checkbox.__rendererChecked = checked;\n checkbox.checked = checked;\n checkbox.hidden = this._selectAllHidden;\n checkbox.indeterminate = this._indeterminate;\n }\n\n /**\n * Renders the Select Row checkbox to the body cell.\n *\n * @override\n */\n _defaultRenderer(root, _column, { item, selected }) {\n let checkbox = root.firstElementChild;\n if (!checkbox) {\n checkbox = document.createElement('vaadin-checkbox');\n checkbox.setAttribute('aria-label', 'Select Row');\n root.appendChild(checkbox);\n // Add listener after appending, so we can skip the initial change event\n checkbox.addEventListener('checked-changed', this.__onSelectRowCheckedChanged.bind(this));\n addListener(root, 'track', this.__onCellTrack.bind(this));\n root.addEventListener('mousedown', this.__onCellMouseDown.bind(this));\n root.addEventListener('click', this.__onCellClick.bind(this));\n }\n\n checkbox.__item = item;\n checkbox.__rendererChecked = selected;\n checkbox.checked = selected;\n }\n\n /**\n * Updates the select all state when the Select All checkbox is switched.\n * The listener handles only user-fired events.\n *\n * @private\n */\n __onSelectAllCheckedChanged(e) {\n // Skip if the state is changed by the renderer.\n if (e.target.checked === e.target.__rendererChecked) {\n return;\n }\n\n if (this._indeterminate || e.target.checked) {\n this._selectAll();\n } else {\n this._deselectAll();\n }\n }\n\n /**\n * Selects or deselects the row when the Select Row checkbox is switched.\n * The listener handles only user-fired events.\n *\n * @private\n */\n __onSelectRowCheckedChanged(e) {\n // Skip if the state is changed by the renderer.\n if (e.target.checked === e.target.__rendererChecked) {\n return;\n }\n\n if (e.target.checked) {\n this._selectItem(e.target.__item);\n } else {\n this._deselectItem(e.target.__item);\n }\n }\n\n /** @private */\n __onCellTrack(event) {\n if (!this.dragSelect) {\n return;\n }\n this.__dragCurrentY = event.detail.y;\n this.__dragDy = event.detail.dy;\n if (event.detail.state === 'start') {\n const renderedRows = this._grid._getRenderedRows();\n // Get the row where the drag started\n const dragStartRow = renderedRows.find((row) => row.contains(event.currentTarget.assignedSlot));\n // Whether to select or deselect the items on drag\n this.__selectOnDrag = !this._grid._isSelected(dragStartRow._item);\n // Store the index of the row where the drag started\n this.__dragStartIndex = dragStartRow.index;\n // Store the item of the row where the drag started\n this.__dragStartItem = dragStartRow._item;\n // Start the auto scroller\n this.__dragAutoScroller();\n } else if (event.detail.state === 'end') {\n // if drag start and end stays within the same item, then toggle its state\n if (this.__dragStartItem) {\n if (this.__selectOnDrag) {\n this._selectItem(this.__dragStartItem);\n } else {\n this._deselectItem(this.__dragStartItem);\n }\n }\n // clear drag state after timeout, which allows preventing the\n // subsequent click event if drag started and ended on the same item\n setTimeout(() => {\n this.__dragStartIndex = undefined;\n });\n }\n }\n\n /** @private */\n __onCellMouseDown(e) {\n if (this.dragSelect) {\n // Prevent text selection when starting to drag\n e.preventDefault();\n }\n }\n\n /** @private */\n __onCellClick(e) {\n if (this.__dragStartIndex !== undefined) {\n // Stop the click event if drag was enabled. This click event should\n // only occur if drag started and stopped on the same item. In that case\n // the selection state has already been toggled on drag end, and we\n // don't want to toggle it again from clicking the checkbox or changing\n // the active item.\n e.preventDefault();\n }\n }\n\n /** @private */\n __dragAutoScroller() {\n if (this.__dragStartIndex === undefined) {\n return;\n }\n // Get the row being hovered over\n const renderedRows = this._grid._getRenderedRows();\n const hoveredRow = renderedRows.find((row) => {\n const rowRect = row.getBoundingClientRect();\n return this.__dragCurrentY >= rowRect.top && this.__dragCurrentY <= rowRect.bottom;\n });\n\n // Get the index of the row being hovered over or the first/last\n // visible row if hovering outside the grid\n let hoveredIndex = hoveredRow ? hoveredRow.index : undefined;\n const scrollableArea = this.__getScrollableArea();\n if (this.__dragCurrentY < scrollableArea.top) {\n hoveredIndex = this._grid._firstVisibleIndex;\n } else if (this.__dragCurrentY > scrollableArea.bottom) {\n hoveredIndex = this._grid._lastVisibleIndex;\n }\n\n if (hoveredIndex !== undefined) {\n // Select all items between the start and the current row\n renderedRows.forEach((row) => {\n if (\n (hoveredIndex > this.__dragStartIndex && row.index >= this.__dragStartIndex && row.index <= hoveredIndex) ||\n (hoveredIndex < this.__dragStartIndex && row.index <= this.__dragStartIndex && row.index >= hoveredIndex)\n ) {\n if (this.__selectOnDrag) {\n this._selectItem(row._item);\n } else {\n this._deselectItem(row._item);\n }\n this.__dragStartItem = undefined;\n }\n });\n }\n\n // Start scrolling in the top/bottom 15% of the scrollable area\n const scrollTriggerArea = scrollableArea.height * 0.15;\n // Maximum number of pixels to scroll per iteration\n const maxScrollAmount = 10;\n\n if (this.__dragDy < 0 && this.__dragCurrentY < scrollableArea.top + scrollTriggerArea) {\n const dy = scrollableArea.top + scrollTriggerArea - this.__dragCurrentY;\n const percentage = Math.min(1, dy / scrollTriggerArea);\n this._grid.$.table.scrollTop -= percentage * maxScrollAmount;\n }\n if (this.__dragDy > 0 && this.__dragCurrentY > scrollableArea.bottom - scrollTriggerArea) {\n const dy = this.__dragCurrentY - (scrollableArea.bottom - scrollTriggerArea);\n const percentage = Math.min(1, dy / scrollTriggerArea);\n this._grid.$.table.scrollTop += percentage * maxScrollAmount;\n }\n\n // Schedule the next auto scroll\n setTimeout(() => this.__dragAutoScroller(), 10);\n }\n\n /**\n * Gets the scrollable area of the grid as a bounding client rect. The\n * scrollable area is the bounding rect of the grid minus the header and\n * footer.\n *\n * @private\n */\n __getScrollableArea() {\n const gridRect = this._grid.$.table.getBoundingClientRect();\n const headerRect = this._grid.$.header.getBoundingClientRect();\n const footerRect = this._grid.$.footer.getBoundingClientRect();\n\n return {\n top: gridRect.top + headerRect.height,\n bottom: gridRect.bottom - footerRect.height,\n left: gridRect.left,\n right: gridRect.right,\n height: gridRect.height - headerRect.height - footerRect.height,\n width: gridRect.width,\n };\n }\n\n /**\n * Override to handle the user selecting all items.\n * @protected\n */\n _selectAll() {}\n\n /**\n * Override to handle the user deselecting all items.\n * @protected\n */\n _deselectAll() {}\n\n /**\n * Override to handle the user selecting an item.\n * @param {Object} item the item to select\n * @protected\n */\n _selectItem(item) {}\n\n /**\n * Override to handle the user deselecting an item.\n * @param {Object} item the item to deselect\n * @protected\n */\n _deselectItem(item) {}\n\n /**\n * IOS needs indeterminate + checked at the same time\n * @private\n */\n __isChecked(selectAll, indeterminate) {\n return indeterminate || selectAll;\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { GridSelectionColumnBaseMixin } from './vaadin-grid-selection-column-base-mixin.js';\n\n/**\n * @polymerMixin\n * @mixes GridSelectionColumnBaseMixin\n */\nexport const GridSelectionColumnMixin = (superClass) =>\n class extends GridSelectionColumnBaseMixin(superClass) {\n static get properties() {\n return {\n /**\n * The previous state of activeItem. When activeItem turns to `null`,\n * previousActiveItem will have an Object with just unselected activeItem\n * @private\n */\n __previousActiveItem: Object,\n };\n }\n\n static get observers() {\n return ['__onSelectAllChanged(selectAll)'];\n }\n\n constructor() {\n super();\n\n this.__boundOnActiveItemChanged = this.__onActiveItemChanged.bind(this);\n this.__boundOnDataProviderChanged = this.__onDataProviderChanged.bind(this);\n this.__boundOnSelectedItemsChanged = this.__onSelectedItemsChanged.bind(this);\n }\n\n /** @protected */\n disconnectedCallback() {\n this._grid.removeEventListener('active-item-changed', this.__boundOnActiveItemChanged);\n this._grid.removeEventListener('data-provider-changed', this.__boundOnDataProviderChanged);\n this._grid.removeEventListener('filter-changed', this.__boundOnSelectedItemsChanged);\n this._grid.removeEventListener('selected-items-changed', this.__boundOnSelectedItemsChanged);\n\n super.disconnectedCallback();\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n if (this._grid) {\n this._grid.addEventListener('active-item-changed', this.__boundOnActiveItemChanged);\n this._grid.addEventListener('data-provider-changed', this.__boundOnDataProviderChanged);\n this._grid.addEventListener('filter-changed', this.__boundOnSelectedItemsChanged);\n this._grid.addEventListener('selected-items-changed', this.__boundOnSelectedItemsChanged);\n }\n }\n\n /** @private */\n __onSelectAllChanged(selectAll) {\n if (selectAll === undefined || !this._grid) {\n return;\n }\n\n if (!this.__selectAllInitialized) {\n // The initial value for selectAll property was applied, avoid clearing pre-selected items\n this.__selectAllInitialized = true;\n return;\n }\n\n if (this._selectAllChangeLock) {\n return;\n }\n\n if (selectAll && this.__hasArrayDataProvider()) {\n this.__withFilteredItemsArray((items) => {\n this._grid.selectedItems = items;\n });\n } else {\n this._grid.selectedItems = [];\n }\n }\n\n /**\n * Return true if array `a` contains all the items in `b`\n * We need this when sorting or to preserve selection after filtering.\n * @private\n */\n __arrayContains(a, b) {\n return Array.isArray(a) && Array.isArray(b) && b.every((i) => a.includes(i));\n }\n\n /**\n * Override a method from `GridSelectionColumnBaseMixin` to handle the user\n * selecting all items.\n *\n * @protected\n * @override\n */\n _selectAll() {\n this.selectAll = true;\n }\n\n /**\n * Override a method from `GridSelectionColumnBaseMixin` to handle the user\n * deselecting all items.\n *\n * @protected\n * @override\n */\n _deselectAll() {\n this.selectAll = false;\n }\n\n /**\n * Override a method from `GridSelectionColumnBaseMixin` to handle the user\n * selecting an item.\n *\n * @param {Object} item the item to select\n * @protected\n * @override\n */\n _selectItem(item) {\n this._grid.selectItem(item);\n }\n\n /**\n * Override a method from `GridSelectionColumnBaseMixin` to handle the user\n * deselecting an item.\n *\n * @param {Object} item the item to deselect\n * @protected\n * @override\n */\n _deselectItem(item) {\n this._grid.deselectItem(item);\n }\n\n /** @private */\n __onActiveItemChanged(e) {\n const activeItem = e.detail.value;\n if (this.autoSelect) {\n const item = activeItem || this.__previousActiveItem;\n if (item) {\n this._grid._toggleItem(item);\n }\n }\n this.__previousActiveItem = activeItem;\n }\n\n /** @private */\n __hasArrayDataProvider() {\n return Array.isArray(this._grid.items) && !!this._grid.dataProvider;\n }\n\n /** @private */\n __onSelectedItemsChanged() {\n this._selectAllChangeLock = true;\n if (this.__hasArrayDataProvider()) {\n this.__withFilteredItemsArray((items) => {\n if (!this._grid.selectedItems.length) {\n this.selectAll = false;\n this._indeterminate = false;\n } else if (this.__arrayContains(this._grid.selectedItems, items)) {\n this.selectAll = true;\n this._indeterminate = false;\n } else {\n this.selectAll = false;\n this._indeterminate = true;\n }\n });\n }\n this._selectAllChangeLock = false;\n }\n\n /** @private */\n __onDataProviderChanged() {\n this._selectAllHidden = !Array.isArray(this._grid.items);\n }\n\n /**\n * Assuming the grid uses an items array data provider, fetches all the filtered items\n * from the data provider and invokes the callback with the resulting array.\n *\n * @private\n */\n __withFilteredItemsArray(callback) {\n const params = {\n page: 0,\n pageSize: Infinity,\n sortOrders: [],\n filters: this._grid._mapFilters(),\n };\n this._grid.dataProvider(params, (items) => callback(items));\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport '@vaadin/checkbox/src/vaadin-checkbox.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { GridColumn } from './vaadin-grid-column.js';\nimport { GridSelectionColumnMixin } from './vaadin-grid-selection-column-mixin.js';\n\n/**\n * `<vaadin-grid-selection-column>` is a helper element for the `<vaadin-grid>`\n * that provides default renderers and functionality for item selection.\n *\n * #### Example:\n * ```html\n * <vaadin-grid items=\"[[items]]\">\n * <vaadin-grid-selection-column frozen auto-select></vaadin-grid-selection-column>\n *\n * <vaadin-grid-column>\n * ...\n * ```\n *\n * By default the selection column displays `<vaadin-checkbox>` elements in the\n * column cells. The checkboxes in the body rows toggle selection of the corresponding row items.\n *\n * When the grid data is provided as an array of [`items`](#/elements/vaadin-grid#property-items),\n * the column header gets an additional checkbox that can be used for toggling\n * selection for all the items at once.\n *\n * __The default content can also be overridden__\n *\n * @customElement\n * @fires {CustomEvent} select-all-changed - Fired when the `selectAll` property changes.\n * @extends GridColumn\n * @mixes GridSelectionColumnMixin\n */\nclass GridSelectionColumn extends GridSelectionColumnMixin(GridColumn) {\n static get is() {\n return 'vaadin-grid-selection-column';\n }\n}\n\ndefineCustomElement(GridSelectionColumn);\n\nexport { GridSelectionColumn };\n","import '@vaadin/vaadin-lumo-styles/color.js';\nimport '@vaadin/vaadin-lumo-styles/style.js';\nimport '@vaadin/vaadin-lumo-styles/spacing.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nregisterStyles(\n 'vaadin-grid-sorter',\n css`\n :host {\n justify-content: flex-start;\n align-items: baseline;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n cursor: var(--lumo-clickable-cursor);\n }\n\n [part='content'] {\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n [part='indicators'] {\n margin-left: var(--lumo-space-s);\n }\n\n [part='indicators']::before {\n transform: scale(0.8);\n }\n\n :host(:not([direction]):not(:hover)) [part='indicators'] {\n color: var(--lumo-tertiary-text-color);\n }\n\n :host([direction]) {\n color: var(--vaadin-selection-color-text, var(--lumo-primary-text-color));\n }\n\n [part='order'] {\n font-size: var(--lumo-font-size-xxs);\n line-height: 1;\n }\n\n /* RTL specific styles */\n\n :host([dir='rtl']) [part='indicators'] {\n margin-right: var(--lumo-space-s);\n margin-left: 0;\n }\n `,\n { moduleId: 'lumo-grid-sorter' },\n);\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = `\n <style nonce=${window.DESCOPE_NONCE}>\n @font-face {\n font-family: 'vaadin-grid-sorter-icons';\n src: url('` + __webpack_public_path__ + `fonts/font-1364590020.woff');\n font-weight: normal;\n font-style: normal;\n }\n </style>\n`;\n\ndocument.head.appendChild(template.content);\n\nregisterStyles(\n 'vaadin-grid-sorter',\n css`\n :host {\n display: inline-flex;\n cursor: pointer;\n max-width: 100%;\n }\n\n [part='content'] {\n flex: 1 1 auto;\n }\n\n [part='indicators'] {\n position: relative;\n align-self: center;\n flex: none;\n }\n\n [part='order'] {\n display: inline;\n vertical-align: super;\n }\n\n [part='indicators']::before {\n font-family: 'vaadin-grid-sorter-icons';\n display: inline-block;\n }\n\n :host(:not([direction])) [part='indicators']::before {\n content: '\\\\e901';\n }\n\n :host([direction='asc']) [part='indicators']::before {\n content: '\\\\e900';\n }\n\n :host([direction='desc']) [part='indicators']::before {\n content: '\\\\e902';\n }\n `,\n { moduleId: 'vaadin-grid-sorter-styles' },\n);\n\n/**\n * A mixin providing common sorter functionality.\n *\n * @polymerMixin\n */\nexport const GridSorterMixin = (superClass) =>\n class GridSorterMixinClass extends superClass {\n static get properties() {\n return {\n /**\n * JS Path of the property in the item used for sorting the data.\n */\n path: String,\n\n /**\n * How to sort the data.\n * Possible values are `asc` to use an ascending algorithm, `desc` to sort the data in\n * descending direction, or `null` for not sorting the data.\n * @type {GridSorterDirection | undefined}\n */\n direction: {\n type: String,\n reflectToAttribute: true,\n notify: true,\n value: null,\n sync: true,\n },\n\n /**\n * @type {number | null}\n * @protected\n */\n _order: {\n type: Number,\n value: null,\n sync: true,\n },\n\n /** @private */\n _isConnected: {\n type: Boolean,\n observer: '__isConnectedChanged',\n },\n };\n }\n\n static get observers() {\n return ['_pathOrDirectionChanged(path, direction)'];\n }\n\n /** @protected */\n ready() {\n super.ready();\n this.addEventListener('click', this._onClick.bind(this));\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n this._isConnected = true;\n }\n\n /** @protected */\n disconnectedCallback() {\n super.disconnectedCallback();\n this._isConnected = false;\n\n if (!this.parentNode && this._grid) {\n this._grid.__removeSorters([this]);\n }\n }\n\n /** @private */\n _pathOrDirectionChanged() {\n this.__dispatchSorterChangedEvenIfPossible();\n }\n\n /** @private */\n __isConnectedChanged(newValue, oldValue) {\n if (oldValue === false) {\n return;\n }\n\n this.__dispatchSorterChangedEvenIfPossible();\n }\n\n /** @private */\n __dispatchSorterChangedEvenIfPossible() {\n if (this.path === undefined || this.direction === undefined || !this._isConnected) {\n return;\n }\n\n this.dispatchEvent(\n new CustomEvent('sorter-changed', {\n detail: { shiftClick: Boolean(this._shiftClick), fromSorterClick: Boolean(this._fromSorterClick) },\n bubbles: true,\n composed: true,\n }),\n );\n // Cleaning up as a programatically sorting can be done after some user interaction\n this._fromSorterClick = false;\n this._shiftClick = false;\n }\n\n /** @private */\n _getDisplayOrder(order) {\n return order === null ? '' : order + 1;\n }\n\n /** @private */\n _onClick(e) {\n if (e.defaultPrevented) {\n // Something else has already handled the click event, do nothing.\n return;\n }\n\n const activeElement = this.getRootNode().activeElement;\n if (this !== activeElement && this.contains(activeElement)) {\n // Some focusable content inside the sorter was clicked, do nothing.\n return;\n }\n\n e.preventDefault();\n this._shiftClick = e.shiftKey;\n this._fromSorterClick = true;\n if (this.direction === 'asc') {\n this.direction = 'desc';\n } else if (this.direction === 'desc') {\n this.direction = null;\n } else {\n this.direction = 'asc';\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { html, PolymerElement } from '@polymer/polymer/polymer-element.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { GridSorterMixin } from './vaadin-grid-sorter-mixin.js';\n\n/**\n * `<vaadin-grid-sorter>` is a helper element for the `<vaadin-grid>` that provides out-of-the-box UI controls,\n * visual feedback, and handlers for sorting the grid data.\n *\n * #### Example:\n * ```html\n * <vaadin-grid-column id=\"column\"></vaadin-grid-column>\n * ```\n * ```js\n * const column = document.querySelector('#column');\n * column.renderer = (root, column, model) => {\n * let sorter = root.firstElementChild;\n * if (!sorter) {\n * sorter = document.createElement('vaadin-grid-sorter');\n * root.appendChild(sorter);\n * }\n * sorter.path = 'name.first';\n * };\n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `content` | The slotted content wrapper\n * `indicators` | The internal sorter indicators.\n * `order` | The internal sorter order\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `direction` | Sort direction of a sorter | :host\n *\n * @fires {CustomEvent} direction-changed - Fired when the `direction` property changes.\n * @fires {CustomEvent} sorter-changed - Fired when the `path` or `direction` property changes.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes GridSorterMixin\n * @mixes ThemableMixin\n * @mixes DirMixin\n */\nclass GridSorter extends GridSorterMixin(ThemableMixin(DirMixin(PolymerElement))) {\n static get template() {\n return html`\n <div part=\"content\">\n <slot></slot>\n </div>\n <div part=\"indicators\">\n <span part=\"order\">[[_getDisplayOrder(_order)]]</span>\n </div>\n `;\n }\n\n static get is() {\n return 'vaadin-grid-sorter';\n }\n}\n\ndefineCustomElement(GridSorter);\n\nexport { GridSorter };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * @polymerMixin\n */\nexport const GridSortColumnMixin = (superClass) =>\n class extends superClass {\n static get properties() {\n return {\n /**\n * JS Path of the property in the item used for sorting the data.\n */\n path: {\n type: String,\n sync: true,\n },\n\n /**\n * How to sort the data.\n * Possible values are `asc` to use an ascending algorithm, `desc` to sort the data in\n * descending direction, or `null` for not sorting the data.\n * @type {GridSorterDirection | undefined}\n */\n direction: {\n type: String,\n notify: true,\n sync: true,\n },\n };\n }\n\n static get observers() {\n return ['_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header, direction)'];\n }\n\n constructor() {\n super();\n\n this.__boundOnDirectionChanged = this.__onDirectionChanged.bind(this);\n }\n\n /**\n * Renders the grid sorter to the header cell.\n *\n * @override\n */\n _defaultHeaderRenderer(root, _column) {\n let sorter = root.firstElementChild;\n if (!sorter) {\n sorter = document.createElement('vaadin-grid-sorter');\n sorter.addEventListener('direction-changed', this.__boundOnDirectionChanged);\n root.appendChild(sorter);\n }\n\n sorter.path = this.path;\n sorter.__rendererDirection = this.direction;\n sorter.direction = this.direction;\n sorter.textContent = this.__getHeader(this.header, this.path);\n }\n\n /**\n * The sort column doesn't allow to use a custom header renderer\n * to override the header cell content.\n * It always renders the grid sorter to the header cell.\n *\n * @override\n */\n _computeHeaderRenderer() {\n return this._defaultHeaderRenderer;\n }\n\n /**\n * Updates the sorting direction once the grid sorter's direction is changed.\n * The listener handles only user-fired events.\n *\n * @private\n */\n __onDirectionChanged(e) {\n // Skip if the direction is changed by the renderer.\n if (e.detail.value === e.target.__rendererDirection) {\n return;\n }\n\n this.direction = e.detail.value;\n }\n\n /** @private */\n __getHeader(header, path) {\n if (header) {\n return header;\n }\n\n if (path) {\n return this._generateHeader(path);\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport './vaadin-grid-sorter.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { GridColumn } from './vaadin-grid-column.js';\nimport { GridSortColumnMixin } from './vaadin-grid-sort-column-mixin.js';\n\n/**\n * `<vaadin-grid-sort-column>` is a helper element for the `<vaadin-grid>`\n * that provides default header renderer and functionality for sorting.\n *\n * #### Example:\n * ```html\n * <vaadin-grid items=\"[[items]]\">\n * <vaadin-grid-sort-column path=\"name.first\" direction=\"asc\"></vaadin-grid-sort-column>\n *\n * <vaadin-grid-column>\n * ...\n * ```\n *\n * @fires {CustomEvent} direction-changed - Fired when the `direction` property changes.\n *\n * @customElement\n * @extends GridColumn\n * @mixes GridSortColumnMixin\n */\nclass GridSortColumn extends GridSortColumnMixin(GridColumn) {\n static get is() {\n return 'vaadin-grid-sort-column';\n }\n}\n\ndefineCustomElement(GridSortColumn);\n\nexport { GridSortColumn };\n","import '@vaadin/vaadin-lumo-styles/color.js';\nimport '@vaadin/vaadin-lumo-styles/font-icons.js';\nimport '@vaadin/vaadin-lumo-styles/sizing.js';\nimport '@vaadin/vaadin-lumo-styles/spacing.js';\nimport '@vaadin/vaadin-lumo-styles/style.js';\nimport '@vaadin/vaadin-lumo-styles/typography.js';\nimport '@vaadin/checkbox/theme/lumo/vaadin-checkbox-styles.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nregisterStyles(\n 'vaadin-grid',\n css`\n :host {\n font-family: var(--lumo-font-family);\n font-size: var(--lumo-font-size-m);\n line-height: var(--lumo-line-height-s);\n color: var(--lumo-body-text-color);\n background-color: var(--lumo-base-color);\n box-sizing: border-box;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n --_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));\n --_focus-ring-width: var(--vaadin-focus-ring-width, 2px);\n /* For internal use only */\n --_lumo-grid-border-color: var(--lumo-contrast-20pct);\n --_lumo-grid-secondary-border-color: var(--lumo-contrast-10pct);\n --_lumo-grid-border-width: 1px;\n --_lumo-grid-selected-row-color: var(--lumo-primary-color-10pct);\n }\n\n /* No (outer) border */\n\n :host(:not([theme~='no-border'])) {\n border: var(--_lumo-grid-border-width) solid var(--_lumo-grid-border-color);\n }\n\n :host([disabled]) {\n opacity: 0.7;\n }\n\n /* Cell styles */\n\n [part~='cell'] {\n min-height: var(--lumo-size-m);\n background-color: var(--vaadin-grid-cell-background, var(--lumo-base-color));\n cursor: default;\n --_cell-padding: var(--vaadin-grid-cell-padding, var(--_cell-default-padding));\n --_cell-default-padding: var(--lumo-space-xs) var(--lumo-space-m);\n }\n\n [part~='cell'] ::slotted(vaadin-grid-cell-content) {\n cursor: inherit;\n padding: var(--_cell-padding);\n }\n\n /* Apply row borders by default and introduce the \"no-row-borders\" variant */\n :host(:not([theme~='no-row-borders'])) [part~='cell']:not([part~='details-cell']) {\n border-top: var(--_lumo-grid-border-width) solid var(--_lumo-grid-secondary-border-color);\n }\n\n /* Hide first body row top border */\n :host(:not([theme~='no-row-borders'])) [part~='first-row'] [part~='cell']:not([part~='details-cell']) {\n border-top: 0;\n min-height: calc(var(--lumo-size-m) - var(--_lumo-grid-border-width));\n }\n\n /* Focus-ring */\n\n [part~='row'] {\n position: relative;\n }\n\n [part~='row']:focus,\n [part~='focused-cell']:focus {\n outline: none;\n }\n\n :host([navigating]) [part~='row']:focus::before,\n :host([navigating]) [part~='focused-cell']:focus::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);\n }\n\n :host([navigating]) [part~='row']:focus::before {\n transform: translateX(calc(-1 * var(--_grid-horizontal-scroll-position)));\n z-index: 3;\n }\n\n /* Drag and Drop styles */\n :host([dragover])::after {\n content: '';\n position: absolute;\n z-index: 100;\n inset: 0;\n pointer-events: none;\n box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);\n }\n\n [part~='row'][dragover] {\n z-index: 100 !important;\n }\n\n [part~='row'][dragover] [part~='cell'] {\n overflow: visible;\n }\n\n [part~='row'][dragover] [part~='cell']::after {\n content: '';\n position: absolute;\n inset: 0;\n height: calc(var(--_lumo-grid-border-width) + 2px);\n pointer-events: none;\n background: var(--lumo-primary-color-50pct);\n }\n\n [part~='row'][dragover] [part~='cell'][last-frozen]::after {\n right: -1px;\n }\n\n :host([theme~='no-row-borders']) [dragover] [part~='cell']::after {\n height: 2px;\n }\n\n [part~='row'][dragover='below'] [part~='cell']::after {\n top: 100%;\n bottom: auto;\n margin-top: -1px;\n }\n\n :host([all-rows-visible]) [part~='last-row'][dragover='below'] [part~='cell']::after {\n height: 1px;\n }\n\n [part~='row'][dragover='above'] [part~='cell']::after {\n top: auto;\n bottom: 100%;\n margin-bottom: -1px;\n }\n\n [part~='row'][details-opened][dragover='below'] [part~='cell']:not([part~='details-cell'])::after,\n [part~='row'][details-opened][dragover='above'] [part~='details-cell']::after {\n display: none;\n }\n\n [part~='row'][dragover][dragover='on-top'] [part~='cell']::after {\n height: 100%;\n opacity: 0.5;\n }\n\n [part~='row'][dragstart] [part~='cell'] {\n border: none !important;\n box-shadow: none !important;\n }\n\n [part~='row'][dragstart] [part~='cell'][last-column] {\n border-radius: 0 var(--lumo-border-radius-s) var(--lumo-border-radius-s) 0;\n }\n\n [part~='row'][dragstart] [part~='cell'][first-column] {\n border-radius: var(--lumo-border-radius-s) 0 0 var(--lumo-border-radius-s);\n }\n\n #scroller [part~='row'][dragstart]:not([dragstart=''])::after {\n display: block;\n position: absolute;\n left: var(--_grid-drag-start-x);\n top: var(--_grid-drag-start-y);\n z-index: 100;\n content: attr(dragstart);\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n padding: calc(var(--lumo-space-xs) * 0.8);\n color: var(--lumo-error-contrast-color);\n background-color: var(--lumo-error-color);\n border-radius: var(--lumo-border-radius-m);\n font-family: var(--lumo-font-family);\n font-size: var(--lumo-font-size-xxs);\n line-height: 1;\n font-weight: 500;\n text-transform: initial;\n letter-spacing: initial;\n min-width: calc(var(--lumo-size-s) * 0.7);\n text-align: center;\n }\n\n /* Headers and footers */\n\n [part~='header-cell'],\n [part~='footer-cell'],\n [part~='reorder-ghost'] {\n font-size: var(--lumo-font-size-s);\n font-weight: 500;\n }\n\n [part~='footer-cell'] {\n font-weight: 400;\n }\n\n [part~='row']:only-child [part~='header-cell'] {\n min-height: var(--lumo-size-xl);\n }\n\n /* Header borders */\n\n /* Hide first header row top border */\n :host(:not([theme~='no-row-borders'])) [part~='row']:first-child [part~='header-cell'] {\n border-top: 0;\n }\n\n /* Hide header row top border if previous row is hidden */\n [part~='row'][hidden] + [part~='row'] [part~='header-cell'] {\n border-top: 0;\n }\n\n [part~='row']:last-child [part~='header-cell'] {\n border-bottom: var(--_lumo-grid-border-width) solid transparent;\n }\n\n :host(:not([theme~='no-row-borders'])) [part~='row']:last-child [part~='header-cell'] {\n border-bottom-color: var(--_lumo-grid-secondary-border-color);\n }\n\n /* Overflow uses a stronger border color */\n :host([overflow~='top']) [part~='row']:last-child [part~='header-cell'] {\n border-bottom-color: var(--_lumo-grid-border-color);\n }\n\n /* Footer borders */\n\n [part~='row']:first-child [part~='footer-cell'] {\n border-top: var(--_lumo-grid-border-width) solid transparent;\n }\n\n :host(:not([theme~='no-row-borders'])) [part~='row']:first-child [part~='footer-cell'] {\n border-top-color: var(--_lumo-grid-secondary-border-color);\n }\n\n /* Overflow uses a stronger border color */\n :host([overflow~='bottom']) [part~='row']:first-child [part~='footer-cell'] {\n border-top-color: var(--_lumo-grid-border-color);\n }\n\n /* Column reordering */\n\n :host([reordering]) [part~='cell'] {\n background: linear-gradient(var(--lumo-shade-20pct), var(--lumo-shade-20pct)) var(--lumo-base-color);\n }\n\n :host([reordering]) [part~='cell'][reorder-status='allowed'] {\n background: var(--lumo-base-color);\n }\n\n :host([reordering]) [part~='cell'][reorder-status='dragging'] {\n background: linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct)) var(--lumo-base-color);\n }\n\n [part~='reorder-ghost'] {\n opacity: 0.85;\n box-shadow: var(--lumo-box-shadow-s);\n /* TODO Use the same styles as for the cell element (reorder-ghost copies styles from the cell element) */\n padding: var(--lumo-space-s) var(--lumo-space-m) !important;\n }\n\n /* Column resizing */\n\n [part='resize-handle'] {\n width: 3px;\n background-color: var(--lumo-primary-color-50pct);\n opacity: 0;\n transition: opacity 0.2s;\n }\n\n :host(:not([reordering])) *:not([column-resizing]) [part~='cell']:hover [part='resize-handle'],\n [part='resize-handle']:active {\n opacity: 1;\n transition-delay: 0.15s;\n }\n\n /* Column borders */\n\n :host([theme~='column-borders']) [part~='cell']:not([last-column]):not([part~='details-cell']) {\n border-right: var(--_lumo-grid-border-width) solid var(--_lumo-grid-secondary-border-color);\n }\n\n /* Frozen columns */\n\n [last-frozen] {\n border-right: var(--_lumo-grid-border-width) solid transparent;\n overflow: hidden;\n }\n\n :host([overflow~='start']) [part~='cell'][last-frozen]:not([part~='details-cell']) {\n border-right-color: var(--_lumo-grid-border-color);\n }\n\n [first-frozen-to-end] {\n border-left: var(--_lumo-grid-border-width) solid transparent;\n }\n\n :host([overflow~='end']) [part~='cell'][first-frozen-to-end]:not([part~='details-cell']) {\n border-left-color: var(--_lumo-grid-border-color);\n }\n\n /* Row stripes */\n\n :host([theme~='row-stripes']) [part~='even-row'] [part~='body-cell'],\n :host([theme~='row-stripes']) [part~='even-row'] [part~='details-cell'] {\n background-image: linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct));\n background-repeat: repeat-x;\n }\n\n /* Selected row */\n\n /* Raise the selected rows above unselected rows (so that box-shadow can cover unselected rows) */\n :host(:not([reordering])) [part~='row'][selected] {\n z-index: 1;\n }\n\n :host(:not([reordering])) [part~='row'][selected] [part~='body-cell']:not([part~='details-cell']) {\n background-image: linear-gradient(var(--_lumo-grid-selected-row-color), var(--_lumo-grid-selected-row-color));\n background-repeat: repeat;\n }\n\n /* Cover the border of an unselected row */\n :host(:not([theme~='no-row-borders'])) [part~='row'][selected] [part~='cell']:not([part~='details-cell']) {\n box-shadow: 0 var(--_lumo-grid-border-width) 0 0 var(--_lumo-grid-selected-row-color);\n }\n\n /* Compact */\n\n :host([theme~='compact']) [part~='row']:only-child [part~='header-cell'] {\n min-height: var(--lumo-size-m);\n }\n\n :host([theme~='compact']) [part~='cell'] {\n min-height: var(--lumo-size-s);\n --_cell-default-padding: var(--lumo-space-xs) var(--lumo-space-s);\n }\n\n :host([theme~='compact']) [part~='first-row'] [part~='cell']:not([part~='details-cell']) {\n min-height: calc(var(--lumo-size-s) - var(--_lumo-grid-border-width));\n }\n\n /* Wrap cell contents */\n\n :host([theme~='wrap-cell-content']) [part~='cell'] ::slotted(vaadin-grid-cell-content) {\n white-space: normal;\n }\n\n /* RTL specific styles */\n\n :host([dir='rtl']) [part~='row'][dragstart] [part~='cell'][last-column] {\n border-radius: var(--lumo-border-radius-s) 0 0 var(--lumo-border-radius-s);\n }\n\n :host([dir='rtl']) [part~='row'][dragstart] [part~='cell'][first-column] {\n border-radius: 0 var(--lumo-border-radius-s) var(--lumo-border-radius-s) 0;\n }\n\n :host([dir='rtl'][theme~='column-borders']) [part~='cell']:not([last-column]):not([part~='details-cell']) {\n border-right: none;\n border-left: var(--_lumo-grid-border-width) solid var(--_lumo-grid-secondary-border-color);\n }\n\n :host([dir='rtl']) [last-frozen] {\n border-right: none;\n border-left: var(--_lumo-grid-border-width) solid transparent;\n }\n\n :host([dir='rtl']) [first-frozen-to-end] {\n border-left: none;\n border-right: var(--_lumo-grid-border-width) solid transparent;\n }\n\n :host([dir='rtl'][overflow~='start']) [part~='cell'][last-frozen]:not([part~='details-cell']) {\n border-left-color: var(--_lumo-grid-border-color);\n }\n\n :host([dir='rtl'][overflow~='end']) [part~='cell'][first-frozen-to-end]:not([part~='details-cell']) {\n border-right-color: var(--_lumo-grid-border-color);\n }\n `,\n { moduleId: 'lumo-grid' },\n);\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { iterateChildren, iterateRowCells } from './vaadin-grid-helpers.js';\n\n/**\n * @polymerMixin\n */\nexport const A11yMixin = (superClass) =>\n class A11yMixin extends superClass {\n static get observers() {\n return ['_a11yUpdateGridSize(size, _columnTree)'];\n }\n\n /** @private */\n _a11yGetHeaderRowCount(_columnTree) {\n return _columnTree.filter((level) => level.some((col) => col.headerRenderer || col.path || col.header)).length;\n }\n\n /** @private */\n _a11yGetFooterRowCount(_columnTree) {\n return _columnTree.filter((level) => level.some((col) => col.headerRenderer)).length;\n }\n\n /** @private */\n _a11yUpdateGridSize(size, _columnTree) {\n if (size === undefined || _columnTree === undefined) {\n return;\n }\n\n const bodyColumns = _columnTree[_columnTree.length - 1];\n this.$.table.setAttribute(\n 'aria-rowcount',\n size + this._a11yGetHeaderRowCount(_columnTree) + this._a11yGetFooterRowCount(_columnTree),\n );\n this.$.table.setAttribute('aria-colcount', (bodyColumns && bodyColumns.length) || 0);\n\n this._a11yUpdateHeaderRows();\n this._a11yUpdateFooterRows();\n }\n\n /** @protected */\n _a11yUpdateHeaderRows() {\n iterateChildren(this.$.header, (headerRow, index) => {\n headerRow.setAttribute('aria-rowindex', index + 1);\n });\n }\n\n /** @protected */\n _a11yUpdateFooterRows() {\n iterateChildren(this.$.footer, (footerRow, index) => {\n footerRow.setAttribute('aria-rowindex', this._a11yGetHeaderRowCount(this._columnTree) + this.size + index + 1);\n });\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {number} index\n * @protected\n */\n _a11yUpdateRowRowindex(row, index) {\n row.setAttribute('aria-rowindex', index + this._a11yGetHeaderRowCount(this._columnTree) + 1);\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {boolean} selected\n * @protected\n */\n _a11yUpdateRowSelected(row, selected) {\n // Jaws reads selection only for rows, NVDA only for cells\n row.setAttribute('aria-selected', Boolean(selected));\n iterateRowCells(row, (cell) => {\n cell.setAttribute('aria-selected', Boolean(selected));\n });\n }\n\n /**\n * @param {!HTMLElement} row\n * @protected\n */\n _a11yUpdateRowExpanded(row) {\n if (this.__isRowExpandable(row)) {\n row.setAttribute('aria-expanded', 'false');\n } else if (this.__isRowCollapsible(row)) {\n row.setAttribute('aria-expanded', 'true');\n } else {\n row.removeAttribute('aria-expanded');\n }\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {number} level\n * @protected\n */\n _a11yUpdateRowLevel(row, level) {\n // Set level for the expandable rows itself, and all the nested rows.\n if (level > 0 || this.__isRowCollapsible(row) || this.__isRowExpandable(row)) {\n row.setAttribute('aria-level', level + 1);\n } else {\n row.removeAttribute('aria-level');\n }\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {!HTMLElement} detailsCell\n * @protected\n */\n _a11ySetRowDetailsCell(row, detailsCell) {\n iterateRowCells(row, (cell) => {\n if (cell !== detailsCell) {\n cell.setAttribute('aria-controls', detailsCell.id);\n }\n });\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {number} colspan\n * @protected\n */\n _a11yUpdateCellColspan(cell, colspan) {\n cell.setAttribute('aria-colspan', Number(colspan));\n }\n\n /** @protected */\n _a11yUpdateSorters() {\n Array.from(this.querySelectorAll('vaadin-grid-sorter')).forEach((sorter) => {\n let cellContent = sorter.parentNode;\n while (cellContent && cellContent.localName !== 'vaadin-grid-cell-content') {\n cellContent = cellContent.parentNode;\n }\n if (cellContent && cellContent.assignedSlot) {\n const cell = cellContent.assignedSlot.parentNode;\n cell.setAttribute(\n 'aria-sort',\n {\n asc: 'ascending',\n desc: 'descending',\n }[String(sorter.direction)] || 'none',\n );\n }\n });\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * @param {!Element} target\n * @return {boolean}\n * @protected\n */\nexport const isFocusable = (target) => {\n if (!target.parentNode) {\n return false;\n }\n const focusables = Array.from(\n target.parentNode.querySelectorAll(\n '[tabindex], button, input, select, textarea, object, iframe, a[href], area[href]',\n ),\n ).filter((element) => {\n const part = element.getAttribute('part');\n return !(part && part.includes('body-cell'));\n });\n\n const isFocusableElement = focusables.includes(target);\n return (\n !target.disabled && isFocusableElement && target.offsetParent && getComputedStyle(target).visibility !== 'hidden'\n );\n};\n\n/**\n * @polymerMixin\n */\nexport const ActiveItemMixin = (superClass) =>\n class ActiveItemMixin extends superClass {\n static get properties() {\n return {\n /**\n * The item user has last interacted with. Turns to `null` after user deactivates\n * the item by re-interacting with the currently active item.\n * @type {GridItem}\n */\n activeItem: {\n type: Object,\n notify: true,\n value: null,\n sync: true,\n },\n };\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.$.scroller.addEventListener('click', this._onClick.bind(this));\n this.addEventListener('cell-activate', this._activateItem.bind(this));\n this.addEventListener('row-activate', this._activateItem.bind(this));\n }\n\n /** @private */\n _activateItem(e) {\n const model = e.detail.model;\n const clickedItem = model ? model.item : null;\n\n if (clickedItem) {\n this.activeItem = !this._itemsEqual(this.activeItem, clickedItem) ? clickedItem : null;\n }\n }\n\n /**\n * We need to listen to click instead of tap because on mobile safari, the\n * document.activeElement has not been updated (focus has not been shifted)\n * yet at the point when tap event is being executed.\n * @param {!MouseEvent} e\n * @protected\n */\n _onClick(e) {\n if (e.defaultPrevented) {\n // Something has handled this click already, e. g., <vaadin-grid-sorter>\n return;\n }\n\n const path = e.composedPath();\n const cell = path[path.indexOf(this.$.table) - 3];\n if (!cell || cell.getAttribute('part').indexOf('details-cell') > -1) {\n return;\n }\n const cellContent = cell._content;\n\n const activeElement = this.getRootNode().activeElement;\n const cellContentHasFocus = cellContent.contains(activeElement);\n if (!cellContentHasFocus && !this._isFocusable(e.target) && !(e.target instanceof HTMLLabelElement)) {\n this.dispatchEvent(\n new CustomEvent('cell-activate', {\n detail: {\n model: this.__getRowModel(cell.parentElement),\n },\n }),\n );\n }\n }\n\n /**\n * @param {!Element} target\n * @return {boolean}\n * @protected\n */\n _isFocusable(target) {\n return isFocusable(target);\n }\n\n /**\n * Fired when the `activeItem` property changes.\n *\n * @event active-item-changed\n */\n\n /**\n * Fired when the cell is activated with click or keyboard.\n *\n * @event cell-activate\n */\n };\n","/**\n * Returns a sub-property of an object\n *\n * @param {string} path dot-separated path to the sub property\n * @param {*} object\n * @returns {*}\n */\nfunction get(path, object) {\n return path.split('.').reduce((obj, property) => obj[property], object);\n}\n\n/**\n * Check array of filters/sorters for paths validity, console.warn invalid items\n * @param {!Array<!GridFilterDefinition | !GridSorterDefinition>} arrayToCheck The array of filters/sorters to check\n * @param {string} action The name of action to include in warning (filtering, sorting)\n * @param {!Array<!GridItem>} items\n */\nfunction checkPaths(arrayToCheck, action, items) {\n if (items.length === 0) {\n return false;\n }\n\n let result = true;\n\n arrayToCheck.forEach(({ path }) => {\n // Skip simple paths\n if (!path || path.indexOf('.') === -1) {\n return;\n }\n\n const parentProperty = path.replace(/\\.[^.]*$/u, ''); // A.b.c -> a.b\n if (get(parentProperty, items[0]) === undefined) {\n console.warn(`Path \"${path}\" used for ${action} does not exist in all of the items, ${action} is disabled.`);\n result = false;\n }\n });\n\n return result;\n}\n\n/**\n * @param {unknown} value\n * @return {string}\n */\nfunction normalizeEmptyValue(value) {\n if ([undefined, null].indexOf(value) >= 0) {\n return '';\n } else if (isNaN(value)) {\n return value.toString();\n }\n return value;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @return {number}\n */\nfunction compare(a, b) {\n a = normalizeEmptyValue(a);\n b = normalizeEmptyValue(b);\n\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\n\n/**\n * Sorts the given array of items based on the sorting rules and returns the result.\n *\n * @param {Array<any>} items\n * @param {Array<GridSorterDefinition>} items\n * @return {Array<any>}\n */\nfunction multiSort(items, sortOrders) {\n return items.sort((a, b) => {\n return sortOrders\n .map((sortOrder) => {\n if (sortOrder.direction === 'asc') {\n return compare(get(sortOrder.path, a), get(sortOrder.path, b));\n } else if (sortOrder.direction === 'desc') {\n return compare(get(sortOrder.path, b), get(sortOrder.path, a));\n }\n return 0;\n })\n .reduce((p, n) => {\n return p !== 0 ? p : n;\n }, 0);\n });\n}\n\n/**\n * @param {!Array<!GridItem>} items\n * @return {!Array<!GridItem>}\n */\nfunction filter(items, filters) {\n return items.filter((item) => {\n return filters.every((filter) => {\n const value = normalizeEmptyValue(get(filter.path, item));\n const filterValueLowercase = normalizeEmptyValue(filter.value).toString().toLowerCase();\n return value.toString().toLowerCase().includes(filterValueLowercase);\n });\n });\n}\n\n/**\n * WARNING: This API is still intended for internal purposes only and\n * may change any time.\n *\n * Creates a new grid compatible data provider that serves the items\n * from the given array as data when requested by the grid.\n *\n * @param {Array<any>} items\n * @return {GridDataProvider<any>}\n */\nexport const createArrayDataProvider = (allItems) => {\n return (params, callback) => {\n let items = allItems ? [...allItems] : [];\n\n if (params.filters && checkPaths(params.filters, 'filtering', items)) {\n items = filter(items, params.filters);\n }\n\n if (\n Array.isArray(params.sortOrders) &&\n params.sortOrders.length &&\n checkPaths(params.sortOrders, 'sorting', items)\n ) {\n items = multiSort(items, params.sortOrders);\n }\n\n const count = Math.min(items.length, params.pageSize);\n const start = params.page * count;\n const end = start + count;\n const slice = items.slice(start, end);\n callback(slice, items.length);\n };\n};\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { createArrayDataProvider } from './array-data-provider.js';\n\n/**\n * @polymerMixin\n */\nexport const ArrayDataProviderMixin = (superClass) =>\n class ArrayDataProviderMixin extends superClass {\n static get properties() {\n return {\n /**\n * An array containing the items which will be passed to renderer functions.\n *\n * @type {Array<!GridItem> | undefined}\n */\n items: {\n type: Array,\n sync: true,\n },\n };\n }\n\n static get observers() {\n return ['__dataProviderOrItemsChanged(dataProvider, items, isAttached, _filters, _sorters, items.*)'];\n }\n\n /** @private */\n __setArrayDataProvider(items) {\n const arrayDataProvider = createArrayDataProvider(this.items, {});\n arrayDataProvider.__items = items;\n this._arrayDataProvider = arrayDataProvider;\n this.size = items.length;\n this.dataProvider = arrayDataProvider;\n }\n\n /** @private */\n __dataProviderOrItemsChanged(dataProvider, items, isAttached) {\n if (!isAttached) {\n return;\n }\n\n if (this._arrayDataProvider) {\n // Has an items array data provider beforehand\n\n if (dataProvider !== this._arrayDataProvider) {\n // A custom data provider was set externally\n this._arrayDataProvider = undefined;\n this.items = undefined;\n } else if (!items) {\n // The items array was unset\n this._arrayDataProvider = undefined;\n this.dataProvider = undefined;\n this.size = 0;\n this.clearCache();\n } else if (this._arrayDataProvider.__items === items) {\n // The items array was modified\n this.clearCache();\n this.size = this._flatSize;\n } else {\n // The items array was replaced\n this.__setArrayDataProvider(items);\n }\n } else if (items) {\n // There was no array data provider before items was set\n this.__setArrayDataProvider(items);\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { isTouch } from '@vaadin/component-base/src/browser-utils.js';\nimport { addListener } from '@vaadin/component-base/src/gestures.js';\nimport { iterateChildren, updateColumnOrders } from './vaadin-grid-helpers.js';\n\n/**\n * @polymerMixin\n */\nexport const ColumnReorderingMixin = (superClass) =>\n class ColumnReorderingMixin extends superClass {\n static get properties() {\n return {\n /**\n * Set to true to allow column reordering.\n * @attr {boolean} column-reordering-allowed\n * @type {boolean}\n */\n columnReorderingAllowed: {\n type: Boolean,\n value: false,\n },\n\n /** @private */\n _orderBaseScope: {\n type: Number,\n value: 10000000,\n },\n };\n }\n\n static get observers() {\n return ['_updateOrders(_columnTree)'];\n }\n\n /** @protected */\n ready() {\n super.ready();\n addListener(this, 'track', this._onTrackEvent);\n this._reorderGhost = this.shadowRoot.querySelector('[part=\"reorder-ghost\"]');\n\n this.addEventListener('touchstart', this._onTouchStart.bind(this));\n this.addEventListener('touchmove', this._onTouchMove.bind(this));\n this.addEventListener('touchend', this._onTouchEnd.bind(this));\n this.addEventListener('contextmenu', this._onContextMenu.bind(this));\n }\n\n /** @private */\n _onContextMenu(e) {\n if (this.hasAttribute('reordering')) {\n e.preventDefault();\n\n // A contextmenu event is fired on mobile Chrome on long-press\n // (which should start reordering). Don't end the reorder on touch devices.\n if (!isTouch) {\n // Context menu cancels the track gesture on desktop without firing an end event.\n // End the reorder manually.\n this._onTrackEnd();\n }\n }\n }\n\n /** @private */\n _onTouchStart(e) {\n // Touch event, delay activation by 100ms\n this._startTouchReorderTimeout = setTimeout(() => {\n this._onTrackStart({\n detail: {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY,\n },\n });\n }, 100);\n }\n\n /** @private */\n _onTouchMove(e) {\n if (this._draggedColumn) {\n e.preventDefault();\n }\n clearTimeout(this._startTouchReorderTimeout);\n }\n\n /** @private */\n _onTouchEnd() {\n clearTimeout(this._startTouchReorderTimeout);\n this._onTrackEnd();\n }\n\n /** @private */\n _onTrackEvent(e) {\n if (e.detail.state === 'start') {\n const path = e.composedPath();\n const headerCell = path[path.indexOf(this.$.header) - 2];\n if (!headerCell || !headerCell._content) {\n // Not a header column\n return;\n }\n\n if (headerCell._content.contains(this.getRootNode().activeElement)) {\n // Something was focused inside the cell\n return;\n }\n\n if (this.$.scroller.hasAttribute('column-resizing')) {\n // Resizing is in progress\n return;\n }\n\n if (!this._touchDevice) {\n // Not a touch device\n this._onTrackStart(e);\n }\n } else if (e.detail.state === 'track') {\n this._onTrack(e);\n } else if (e.detail.state === 'end') {\n this._onTrackEnd(e);\n }\n }\n\n /** @private */\n _onTrackStart(e) {\n if (!this.columnReorderingAllowed) {\n return;\n }\n\n // Cancel reordering if there are draggable nodes on the event path\n const path = e.composedPath && e.composedPath();\n if (path && path.some((node) => node.hasAttribute && node.hasAttribute('draggable'))) {\n return;\n }\n\n const headerCell = this._cellFromPoint(e.detail.x, e.detail.y);\n if (!headerCell || !headerCell.getAttribute('part').includes('header-cell')) {\n return;\n }\n\n this.toggleAttribute('reordering', true);\n this._draggedColumn = headerCell._column;\n while (this._draggedColumn.parentElement.childElementCount === 1) {\n // This is the only column in the group, drag the whole group instead\n this._draggedColumn = this._draggedColumn.parentElement;\n }\n this._setSiblingsReorderStatus(this._draggedColumn, 'allowed');\n this._draggedColumn._reorderStatus = 'dragging';\n\n this._updateGhost(headerCell);\n this._reorderGhost.style.visibility = 'visible';\n this._updateGhostPosition(e.detail.x, this._touchDevice ? e.detail.y - 50 : e.detail.y);\n this._autoScroller();\n }\n\n /** @private */\n _onTrack(e) {\n if (!this._draggedColumn) {\n // Reordering didn't start. Skip this event.\n return;\n }\n\n const targetCell = this._cellFromPoint(e.detail.x, e.detail.y);\n if (!targetCell) {\n return;\n }\n\n const targetColumn = this._getTargetColumn(targetCell, this._draggedColumn);\n if (\n this._isSwapAllowed(this._draggedColumn, targetColumn) &&\n this._isSwappableByPosition(targetColumn, e.detail.x)\n ) {\n // Get the header level of the target column (and the dragged column)\n const columnTreeLevel = this._columnTree.findIndex((level) => level.includes(targetColumn));\n // Get the columns on that level in visual order\n const levelColumnsInOrder = this._getColumnsInOrder(columnTreeLevel);\n\n // Index of the column being dragged\n const startIndex = levelColumnsInOrder.indexOf(this._draggedColumn);\n // Index of the column being dragged over\n const endIndex = levelColumnsInOrder.indexOf(targetColumn);\n\n // Direction of iteration\n const direction = startIndex < endIndex ? 1 : -1;\n\n // Iteratively swap all the columns from the dragged column to the target column\n for (let i = startIndex; i !== endIndex; i += direction) {\n this._swapColumnOrders(this._draggedColumn, levelColumnsInOrder[i + direction]);\n }\n }\n\n this._updateGhostPosition(e.detail.x, this._touchDevice ? e.detail.y - 50 : e.detail.y);\n this._lastDragClientX = e.detail.x;\n }\n\n /** @private */\n _onTrackEnd() {\n if (!this._draggedColumn) {\n // Reordering didn't start. Skip this event.\n return;\n }\n\n this.toggleAttribute('reordering', false);\n this._draggedColumn._reorderStatus = '';\n this._setSiblingsReorderStatus(this._draggedColumn, '');\n this._draggedColumn = null;\n this._lastDragClientX = null;\n this._reorderGhost.style.visibility = 'hidden';\n\n this.dispatchEvent(\n new CustomEvent('column-reorder', {\n detail: {\n columns: this._getColumnsInOrder(),\n },\n }),\n );\n }\n\n /**\n * Returns the columns (or column groups) on the specified header level in visual order.\n * By default, the bottom level is used.\n *\n * @return {!Array<!GridColumn>}\n * @protected\n */\n _getColumnsInOrder(headerLevel = this._columnTree.length - 1) {\n return this._columnTree[headerLevel].filter((c) => !c.hidden).sort((b, a) => b._order - a._order);\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @return {HTMLElement | undefined}\n * @protected\n */\n _cellFromPoint(x = 0, y = 0) {\n if (!this._draggedColumn) {\n this.$.scroller.toggleAttribute('no-content-pointer-events', true);\n }\n const cell = this.shadowRoot.elementFromPoint(x, y);\n this.$.scroller.toggleAttribute('no-content-pointer-events', false);\n\n // Make sure the element is actually a cell\n if (cell && cell._column) {\n return cell;\n }\n }\n\n /**\n * @param {number} eventClientX\n * @param {number} eventClientY\n * @protected\n */\n _updateGhostPosition(eventClientX, eventClientY) {\n const ghostRect = this._reorderGhost.getBoundingClientRect();\n // // This is where we want to position the ghost\n const targetLeft = eventClientX - ghostRect.width / 2;\n const targetTop = eventClientY - ghostRect.height / 2;\n // Current position\n const _left = parseInt(this._reorderGhost._left || 0);\n const _top = parseInt(this._reorderGhost._top || 0);\n // Reposition the ghost\n this._reorderGhost._left = _left - (ghostRect.left - targetLeft);\n this._reorderGhost._top = _top - (ghostRect.top - targetTop);\n this._reorderGhost.style.transform = `translate(${this._reorderGhost._left}px, ${this._reorderGhost._top}px)`;\n }\n\n /**\n * @param {!HTMLElement} cell\n * @return {!HTMLElement}\n * @protected\n */\n _updateGhost(cell) {\n const ghost = this._reorderGhost;\n ghost.textContent = cell._content.innerText;\n const style = window.getComputedStyle(cell);\n [\n 'boxSizing',\n 'display',\n 'width',\n 'height',\n 'background',\n 'alignItems',\n 'padding',\n 'border',\n 'flex-direction',\n 'overflow',\n ].forEach((propertyName) => {\n ghost.style[propertyName] = style[propertyName];\n });\n return ghost;\n }\n\n /** @private */\n _updateOrders(columnTree) {\n if (columnTree === undefined) {\n return;\n }\n\n // Reset all column orders\n columnTree[0].forEach((column) => {\n column._order = 0;\n });\n // Set order numbers to top-level columns\n updateColumnOrders(columnTree[0], this._orderBaseScope, 0);\n }\n\n /**\n * @param {!GridColumn} column\n * @param {string} status\n * @protected\n */\n _setSiblingsReorderStatus(column, status) {\n iterateChildren(column.parentNode, (sibling) => {\n if (/column/u.test(sibling.localName) && this._isSwapAllowed(sibling, column)) {\n sibling._reorderStatus = status;\n }\n });\n }\n\n /** @protected */\n _autoScroller() {\n if (this._lastDragClientX) {\n const rightDiff = this._lastDragClientX - this.getBoundingClientRect().right + 50;\n const leftDiff = this.getBoundingClientRect().left - this._lastDragClientX + 50;\n\n if (rightDiff > 0) {\n this.$.table.scrollLeft += rightDiff / 10;\n } else if (leftDiff > 0) {\n this.$.table.scrollLeft -= leftDiff / 10;\n }\n }\n\n if (this._draggedColumn) {\n setTimeout(() => this._autoScroller(), 10);\n }\n }\n\n /**\n * @param {GridColumn | undefined} column1\n * @param {GridColumn | undefined} column2\n * @return {boolean | undefined}\n * @protected\n */\n _isSwapAllowed(column1, column2) {\n if (column1 && column2) {\n const differentColumns = column1 !== column2;\n const sameParent = column1.parentElement === column2.parentElement;\n const sameFrozen =\n (column1.frozen && column2.frozen) || // Both columns are frozen\n (column1.frozenToEnd && column2.frozenToEnd) || // Both columns are frozen to end\n (!column1.frozen && !column1.frozenToEnd && !column2.frozen && !column2.frozenToEnd);\n return differentColumns && sameParent && sameFrozen;\n }\n }\n\n /**\n * @param {!GridColumn} targetColumn\n * @param {number} clientX\n * @return {boolean}\n * @protected\n */\n _isSwappableByPosition(targetColumn, clientX) {\n const targetCell = Array.from(this.$.header.querySelectorAll('tr:not([hidden]) [part~=\"cell\"]')).find((cell) =>\n targetColumn.contains(cell._column),\n );\n const sourceCellRect = this.$.header\n .querySelector('tr:not([hidden]) [reorder-status=dragging]')\n .getBoundingClientRect();\n const targetRect = targetCell.getBoundingClientRect();\n if (targetRect.left > sourceCellRect.left) {\n return clientX > targetRect.right - sourceCellRect.width;\n }\n return clientX < targetRect.left + sourceCellRect.width;\n }\n\n /**\n * @param {!GridColumn} column1\n * @param {!GridColumn} column2\n * @protected\n */\n _swapColumnOrders(column1, column2) {\n [column1._order, column2._order] = [column2._order, column1._order];\n this._debounceUpdateFrozenColumn();\n this._updateFirstAndLastColumn();\n }\n\n /**\n * @param {HTMLElement | undefined} targetCell\n * @param {GridColumn} draggedColumn\n * @return {GridColumn | undefined}\n * @protected\n */\n _getTargetColumn(targetCell, draggedColumn) {\n if (targetCell && draggedColumn) {\n let candidate = targetCell._column;\n while (candidate.parentElement !== draggedColumn.parentElement && candidate !== this) {\n candidate = candidate.parentElement;\n }\n if (candidate.parentElement === draggedColumn.parentElement) {\n return candidate;\n }\n return targetCell._column;\n }\n }\n\n /**\n * Fired when the columns in the grid are reordered.\n *\n * @event column-reorder\n * @param {Object} detail\n * @param {Object} detail.columns the columns in the new order\n */\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { addListener } from '@vaadin/component-base/src/gestures.js';\n\n/**\n * @polymerMixin\n */\nexport const ColumnResizingMixin = (superClass) =>\n class ColumnResizingMixin extends superClass {\n /** @protected */\n ready() {\n super.ready();\n const scroller = this.$.scroller;\n addListener(scroller, 'track', this._onHeaderTrack.bind(this));\n\n // Disallow scrolling while resizing\n scroller.addEventListener('touchmove', (e) => scroller.hasAttribute('column-resizing') && e.preventDefault());\n\n // Disable contextmenu on any resize separator.\n scroller.addEventListener(\n 'contextmenu',\n (e) => e.target.getAttribute('part') === 'resize-handle' && e.preventDefault(),\n );\n\n // Disable native cell focus when resizing\n scroller.addEventListener(\n 'mousedown',\n (e) => e.target.getAttribute('part') === 'resize-handle' && e.preventDefault(),\n );\n }\n\n /** @private */\n _onHeaderTrack(e) {\n const handle = e.target;\n if (handle.getAttribute('part') === 'resize-handle') {\n const cell = handle.parentElement;\n let column = cell._column;\n\n this.$.scroller.toggleAttribute('column-resizing', true);\n\n // Get the target column to resize\n while (column.localName === 'vaadin-grid-column-group') {\n column = column._childColumns\n .slice(0)\n .sort((a, b) => a._order - b._order)\n .filter((column) => !column.hidden)\n .pop();\n }\n\n const isRTL = this.__isRTL;\n const eventX = e.detail.x;\n const columnRowCells = Array.from(this.$.header.querySelectorAll('[part~=\"row\"]:last-child [part~=\"cell\"]'));\n const targetCell = columnRowCells.find((cell) => cell._column === column);\n // Resize the target column\n if (targetCell.offsetWidth) {\n const style = getComputedStyle(targetCell._content);\n const minWidth =\n 10 +\n parseInt(style.paddingLeft) +\n parseInt(style.paddingRight) +\n parseInt(style.borderLeftWidth) +\n parseInt(style.borderRightWidth) +\n parseInt(style.marginLeft) +\n parseInt(style.marginRight);\n\n let maxWidth;\n\n const cellWidth = targetCell.offsetWidth;\n const cellRect = targetCell.getBoundingClientRect();\n\n // For cells frozen to end, resize handle is flipped horizontally.\n if (targetCell.hasAttribute('frozen-to-end')) {\n maxWidth = cellWidth + (isRTL ? eventX - cellRect.right : cellRect.left - eventX);\n } else {\n maxWidth = cellWidth + (isRTL ? cellRect.left - eventX : eventX - cellRect.right);\n }\n\n column.width = `${Math.max(minWidth, maxWidth)}px`;\n column.flexGrow = 0;\n }\n // Fix width and flex-grow for all preceding columns\n columnRowCells\n .sort((a, b) => a._column._order - b._column._order)\n .forEach((cell, index, array) => {\n if (index < array.indexOf(targetCell)) {\n cell._column.width = `${cell.offsetWidth}px`;\n cell._column.flexGrow = 0;\n }\n });\n\n const cellFrozenToEnd = this._frozenToEndCells[0];\n\n // When handle moves below the cell frozen to end, scroll into view.\n if (cellFrozenToEnd && this.$.table.scrollWidth > this.$.table.offsetWidth) {\n const frozenRect = cellFrozenToEnd.getBoundingClientRect();\n const offset = eventX - (isRTL ? frozenRect.right : frozenRect.left);\n\n if ((isRTL && offset <= 0) || (!isRTL && offset >= 0)) {\n this.$.table.scrollLeft += offset;\n }\n }\n\n if (e.detail.state === 'end') {\n this.$.scroller.toggleAttribute('column-resizing', false);\n this.dispatchEvent(\n new CustomEvent('column-resize', {\n detail: { resizedColumn: column },\n }),\n );\n }\n\n // Notify resize\n this._resizeHandler();\n }\n }\n\n /**\n * Fired when a column in the grid is resized by the user.\n *\n * @event column-resize\n * @param {Object} detail\n * @param {Object} detail.resizedColumn the column that was resized\n */\n };\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * @typedef {import('./cache.js').Cache} Cache\n */\n\n/**\n * Returns context for the given flattened index, including:\n * - the corresponding cache\n * - the cache level\n * - the corresponding item (if loaded)\n * - the item's index in the cache's items array\n * - the page containing the item\n *\n * @param {Cache} cache\n * @param {number} flatIndex\n */\nexport function getFlatIndexContext(cache, flatIndex, level = 0) {\n let levelIndex = flatIndex;\n\n for (const subCache of cache.subCaches) {\n const index = subCache.parentCacheIndex;\n if (levelIndex <= index) {\n break;\n } else if (levelIndex <= index + subCache.flatSize) {\n return getFlatIndexContext(subCache, levelIndex - index - 1, level + 1);\n }\n levelIndex -= subCache.flatSize;\n }\n\n return {\n cache,\n item: cache.items[levelIndex],\n index: levelIndex,\n page: Math.floor(levelIndex / cache.pageSize),\n level,\n };\n}\n\n/**\n * Returns context for the given item, including:\n * - the cache containing the item\n * - the cache level\n * - the item\n * - the item's index in the cache's items array\n * - the item's flattened index\n * - the item's sub-cache (if exists)\n * - the page containing the item\n *\n * If the item isn't found, the method returns undefined.\n *\n * @param {Cache} cache\n * @param {{ getItemId: (item: unknown) => unknown}} context\n * @param {Cache} cache\n * @param {unknown} targetItem\n * @param {number} level\n * @param {number} levelFlatIndex\n */\nexport function getItemContext({ getItemId }, cache, targetItem, level = 0, levelFlatIndex = 0) {\n // Start looking in this cache\n for (let index = 0; index < cache.items.length; index++) {\n const item = cache.items[index];\n if (!!item && getItemId(item) === getItemId(targetItem)) {\n return {\n cache,\n level,\n item,\n index,\n page: Math.floor(index / cache.pageSize),\n subCache: cache.getSubCache(index),\n flatIndex: levelFlatIndex + cache.getFlatIndex(index),\n };\n }\n }\n\n // Look through sub-caches\n for (const subCache of cache.subCaches) {\n const parentItemFlatIndex = levelFlatIndex + cache.getFlatIndex(subCache.parentCacheIndex);\n const result = getItemContext({ getItemId }, subCache, targetItem, level + 1, parentItemFlatIndex + 1);\n if (result) {\n return result;\n }\n }\n}\n\n/**\n * Recursively returns the globally flat index of the item the given indexes point to.\n * Each index in the array points to a sub-item of the previous index.\n * Using `Infinity` as an index will point to the last item on the level.\n *\n * @param {Cache} cache\n * @param {number[]} path\n * @param {number} flatIndex\n * @return {number}\n */\nexport function getFlatIndexByPath(cache, [levelIndex, ...subIndexes], flatIndex = 0) {\n if (levelIndex === Infinity) {\n // Treat Infinity as the last index on the level\n levelIndex = cache.size - 1;\n }\n\n const flatIndexOnLevel = cache.getFlatIndex(levelIndex);\n const subCache = cache.getSubCache(levelIndex);\n if (subCache && subCache.flatSize > 0 && subIndexes.length) {\n return getFlatIndexByPath(subCache, subIndexes, flatIndex + flatIndexOnLevel + 1);\n }\n return flatIndex + flatIndexOnLevel;\n}\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { getFlatIndexContext } from './helpers.js';\n\n/**\n * A class that stores items with their associated sub-caches.\n */\nexport class Cache {\n /**\n * A context object.\n *\n * @type {{ isExpanded: (item: unknown) => boolean }}\n */\n context;\n\n /**\n * The number of items.\n *\n * @type {number}\n */\n size = 0;\n\n /**\n * The number of items to display per page.\n *\n * @type {number}\n */\n pageSize;\n\n /**\n * An array of cached items.\n *\n * @type {object[]}\n */\n items = [];\n\n /**\n * A map where the key is a requested page and the value is a callback\n * that will be called with data once the request is complete.\n *\n * @type {Record<number, Function>}\n */\n pendingRequests = {};\n\n /**\n * A map where the key is the index of an item in the `items` array\n * and the value is a sub-cache associated with that item.\n *\n * Note, it's intentionally defined as an object instead of a Map\n * to ensure that Object.entries() returns an array with keys sorted\n * in alphabetical order, rather than the order they were added.\n *\n * @type {Record<number, Cache>}\n * @private\n */\n __subCacheByIndex = {};\n\n /**\n * The total number of items, including items from expanded sub-caches.\n *\n * @type {number}\n * @private\n */\n __flatSize = 0;\n\n /**\n * @param {Cache['context']} context\n * @param {number} pageSize\n * @param {number | undefined} size\n * @param {Cache | undefined} parentCache\n * @param {number | undefined} parentCacheIndex\n */\n constructor(context, pageSize, size, parentCache, parentCacheIndex) {\n this.context = context;\n this.pageSize = pageSize;\n this.size = size || 0;\n this.parentCache = parentCache;\n this.parentCacheIndex = parentCacheIndex;\n this.__flatSize = size || 0;\n }\n\n /**\n * An item in the parent cache that the current cache is associated with.\n *\n * @return {object | undefined}\n */\n get parentItem() {\n return this.parentCache && this.parentCache.items[this.parentCacheIndex];\n }\n\n /**\n * An array of sub-caches sorted in the same order as their associated items\n * appear in the `items` array.\n *\n * @return {Cache[]}\n */\n get subCaches() {\n return Object.values(this.__subCacheByIndex);\n }\n\n /**\n * Whether the cache or any of its descendant caches have pending requests.\n *\n * @return {boolean}\n */\n get isLoading() {\n if (Object.keys(this.pendingRequests).length > 0) {\n return true;\n }\n\n return this.subCaches.some((subCache) => subCache.isLoading);\n }\n\n /**\n * The total number of items, including items from expanded sub-caches.\n *\n * @return {number}\n */\n get flatSize() {\n return this.__flatSize;\n }\n\n /**\n * The total number of items, including items from expanded sub-caches.\n *\n * @protected\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n get effectiveSize() {\n console.warn(\n '<vaadin-grid> The `effectiveSize` property of ItemCache is deprecated and will be removed in Vaadin 25.',\n );\n return this.flatSize;\n }\n\n /**\n * Recalculates the flattened size for the cache and its descendant caches recursively.\n */\n recalculateFlatSize() {\n this.__flatSize =\n !this.parentItem || this.context.isExpanded(this.parentItem)\n ? this.size +\n this.subCaches.reduce((total, subCache) => {\n subCache.recalculateFlatSize();\n return total + subCache.flatSize;\n }, 0)\n : 0;\n }\n\n /**\n * Adds an array of items corresponding to the given page\n * to the `items` array.\n *\n * @param {number} page\n * @param {object[]} items\n */\n setPage(page, items) {\n const startIndex = page * this.pageSize;\n items.forEach((item, i) => {\n this.items[startIndex + i] = item;\n });\n }\n\n /**\n * Retrieves the sub-cache associated with the item at the given index\n * in the `items` array.\n *\n * @param {number} index\n * @return {Cache | undefined}\n */\n getSubCache(index) {\n return this.__subCacheByIndex[index];\n }\n\n /**\n * Removes the sub-cache associated with the item at the given index\n * in the `items` array.\n *\n * @param {number} index\n */\n removeSubCache(index) {\n delete this.__subCacheByIndex[index];\n }\n\n /**\n * Removes all sub-caches.\n */\n removeSubCaches() {\n this.__subCacheByIndex = {};\n }\n\n /**\n * Creates and associates a sub-cache for the item at the given index\n * in the `items` array.\n *\n * @param {number} index\n * @return {Cache}\n */\n createSubCache(index) {\n const subCache = new Cache(this.context, this.pageSize, 0, this, index);\n this.__subCacheByIndex[index] = subCache;\n return subCache;\n }\n\n /**\n * Retrieves the flattened index corresponding to the given index\n * of an item in the `items` array.\n *\n * @param {number} index\n * @return {number}\n */\n getFlatIndex(index) {\n const clampedIndex = Math.max(0, Math.min(this.size - 1, index));\n\n return this.subCaches.reduce((prev, subCache) => {\n const index = subCache.parentCacheIndex;\n return clampedIndex > index ? prev + subCache.flatSize : prev;\n }, clampedIndex);\n }\n\n /**\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n getItemForIndex(index) {\n console.warn(\n '<vaadin-grid> The `getItemForIndex` method of ItemCache is deprecated and will be removed in Vaadin 25.',\n );\n const { item } = getFlatIndexContext(this, index);\n return item;\n }\n\n /**\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n getCacheAndIndex(index) {\n console.warn(\n '<vaadin-grid> The `getCacheAndIndex` method of ItemCache is deprecated and will be removed in Vaadin 25.',\n );\n const { cache, index: scaledIndex } = getFlatIndexContext(this, index);\n return { cache, scaledIndex };\n }\n\n /**\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n updateSize() {\n console.warn('<vaadin-grid> The `updateSize` method of ItemCache is deprecated and will be removed in Vaadin 25.');\n this.recalculateFlatSize();\n }\n\n /**\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n ensureSubCacheForScaledIndex(scaledIndex) {\n console.warn(\n '<vaadin-grid> The `ensureSubCacheForScaledIndex` method of ItemCache is deprecated and will be removed in Vaadin 25.',\n );\n\n if (!this.getSubCache(scaledIndex)) {\n const subCache = this.createSubCache(scaledIndex);\n this.context.__controller.__loadCachePage(subCache, 0);\n }\n }\n\n /**\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n get grid() {\n console.warn('<vaadin-grid> The `grid` property of ItemCache is deprecated and will be removed in Vaadin 25.');\n return this.context.__controller.host;\n }\n\n /**\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n get itemCaches() {\n console.warn(\n '<vaadin-grid> The `itemCaches` property of ItemCache is deprecated and will be removed in Vaadin 25.',\n );\n return this.__subCacheByIndex;\n }\n}\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { Cache } from './cache.js';\nimport { getFlatIndexByPath, getFlatIndexContext, getItemContext } from './helpers.js';\n\n/**\n * A controller that stores and manages items loaded with a data provider.\n */\nexport class DataProviderController extends EventTarget {\n /**\n * The controller host element.\n *\n * @param {HTMLElement}\n */\n host;\n\n /**\n * A callback that returns data based on the passed params such as\n * `page`, `pageSize`, `parentItem`, etc.\n */\n dataProvider;\n\n /**\n * A callback that returns additional params that need to be passed\n * to the data provider callback with every request.\n */\n dataProviderParams;\n\n /**\n * A number of items in the root cache.\n *\n * @type {number}\n */\n size;\n\n /**\n * A number of items to display per page.\n *\n * @type {number}\n */\n pageSize;\n\n /**\n * A callback that returns whether the given item is expanded.\n *\n * @type {(item: unknown) => boolean}\n */\n isExpanded;\n\n /**\n * A callback that returns the id for the given item and that\n * is used when checking object items for equality.\n *\n * @type { (item: unknown) => unknown}\n */\n getItemId;\n\n /**\n * A reference to the root cache instance.\n *\n * @param {Cache}\n */\n rootCache;\n\n constructor(host, { size, pageSize, isExpanded, getItemId, dataProvider, dataProviderParams }) {\n super();\n this.host = host;\n this.pageSize = pageSize;\n this.getItemId = getItemId;\n this.isExpanded = isExpanded;\n this.dataProvider = dataProvider;\n this.dataProviderParams = dataProviderParams;\n this.rootCache = this.__createRootCache(size);\n }\n\n /**\n * The total number of items, including items from expanded sub-caches.\n */\n get flatSize() {\n return this.rootCache.flatSize;\n }\n\n /** @private */\n get __cacheContext() {\n return {\n isExpanded: this.isExpanded,\n // The controller instance is needed to ensure deprecated cache methods work.\n __controller: this,\n };\n }\n\n /**\n * Whether the root cache or any of its decendant caches have pending requests.\n *\n * @return {boolean}\n */\n isLoading() {\n return this.rootCache.isLoading;\n }\n\n /**\n * Sets the page size and clears the cache.\n *\n * @param {number} pageSize\n */\n setPageSize(pageSize) {\n this.pageSize = pageSize;\n this.clearCache();\n }\n\n /**\n * Sets the data provider callback and clears the cache.\n *\n * @type {Function}\n */\n setDataProvider(dataProvider) {\n this.dataProvider = dataProvider;\n this.clearCache();\n }\n\n /**\n * Recalculates the flattened size.\n */\n recalculateFlatSize() {\n this.rootCache.recalculateFlatSize();\n }\n\n /**\n * Clears the cache.\n */\n clearCache() {\n this.rootCache = this.__createRootCache(this.rootCache.size);\n }\n\n /**\n * Returns context for the given flattened index, including:\n * - the corresponding cache\n * - the cache level\n * - the corresponding item (if loaded)\n * - the item's index in the cache's items array\n * - the page containing the item\n *\n * @param {number} flatIndex\n */\n getFlatIndexContext(flatIndex) {\n return getFlatIndexContext(this.rootCache, flatIndex);\n }\n\n /**\n * Returns context for the given item, including:\n * - the cache containing the item\n * - the cache level\n * - the item\n * - the item's index in the cache's items array\n * - the item's flattened index\n * - the item's sub-cache (if exists)\n * - the page containing the item\n *\n * If the item isn't found, the method returns undefined.\n */\n getItemContext(item) {\n return getItemContext({ getItemId: this.getItemId }, this.rootCache, item);\n }\n\n /**\n * Returns the flattened index for the item that the given indexes point to.\n * Each index in the path array points to a sub-item of the previous index.\n * Using `Infinity` as an index will point to the last item on the level.\n *\n * @param {number[]} path\n * @return {number}\n */\n getFlatIndexByPath(path) {\n return getFlatIndexByPath(this.rootCache, path);\n }\n\n /**\n * Requests the data provider to load the page with the item corresponding\n * to the given flattened index. If the item is already loaded, the method\n * returns immediatelly.\n *\n * @param {number} flatIndex\n */\n ensureFlatIndexLoaded(flatIndex) {\n const { cache, page, item } = this.getFlatIndexContext(flatIndex);\n\n if (!item) {\n this.__loadCachePage(cache, page);\n }\n }\n\n /**\n * Creates a sub-cache for the item corresponding to the given flattened index and\n * requests the data provider to load the first page into the created sub-cache.\n * If the sub-cache already exists, the method returns immediatelly.\n *\n * @param {number} flatIndex\n */\n ensureFlatIndexHierarchy(flatIndex) {\n const { cache, item, index } = this.getFlatIndexContext(flatIndex);\n\n if (item && this.isExpanded(item) && !cache.getSubCache(index)) {\n const subCache = cache.createSubCache(index);\n this.__loadCachePage(subCache, 0);\n }\n }\n\n /**\n * Loads the first page into the root cache.\n */\n loadFirstPage() {\n this.__loadCachePage(this.rootCache, 0);\n }\n\n /** @private */\n __createRootCache(size) {\n return new Cache(this.__cacheContext, this.pageSize, size);\n }\n\n /** @private */\n __loadCachePage(cache, page) {\n if (!this.dataProvider || cache.pendingRequests[page]) {\n return;\n }\n\n let params = {\n page,\n pageSize: this.pageSize,\n parentItem: cache.parentItem,\n };\n\n if (this.dataProviderParams) {\n params = { ...params, ...this.dataProviderParams() };\n }\n\n const callback = (items, size) => {\n if (size !== undefined) {\n cache.size = size;\n } else if (params.parentItem) {\n cache.size = items.length;\n }\n\n cache.setPage(page, items);\n\n this.recalculateFlatSize();\n\n this.dispatchEvent(new CustomEvent('page-received'));\n\n delete cache.pendingRequests[page];\n\n this.dispatchEvent(new CustomEvent('page-loaded'));\n };\n\n cache.pendingRequests[page] = callback;\n\n this.dispatchEvent(new CustomEvent('page-requested'));\n\n this.dataProvider(params, callback);\n }\n}\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { microTask, timeOut } from '@vaadin/component-base/src/async.js';\nimport { DataProviderController } from '@vaadin/component-base/src/data-provider-controller/data-provider-controller.js';\nimport { Debouncer } from '@vaadin/component-base/src/debounce.js';\nimport { get } from '@vaadin/component-base/src/path-utils.js';\nimport { getBodyRowCells, updateCellsPart, updateState } from './vaadin-grid-helpers.js';\n\n/**\n * @polymerMixin\n */\nexport const DataProviderMixin = (superClass) =>\n class DataProviderMixin extends superClass {\n static get properties() {\n return {\n /**\n * The number of root-level items in the grid.\n * @attr {number} size\n * @type {number}\n */\n size: {\n type: Number,\n notify: true,\n sync: true,\n },\n\n /**\n * @type {number}\n * @protected\n */\n _flatSize: {\n type: Number,\n sync: true,\n },\n\n /**\n * Number of items fetched at a time from the dataprovider.\n * @attr {number} page-size\n * @type {number}\n */\n pageSize: {\n type: Number,\n value: 50,\n observer: '_pageSizeChanged',\n sync: true,\n },\n\n /**\n * Function that provides items lazily. Receives arguments `params`, `callback`\n *\n * `params.page` Requested page index\n *\n * `params.pageSize` Current page size\n *\n * `params.filters` Currently applied filters\n *\n * `params.sortOrders` Currently applied sorting orders\n *\n * `params.parentItem` When tree is used, and sublevel items\n * are requested, reference to parent item of the requested sublevel.\n * Otherwise `undefined`.\n *\n * `callback(items, size)` Callback function with arguments:\n * - `items` Current page of items\n * - `size` Total number of items. When tree sublevel items\n * are requested, total number of items in the requested sublevel.\n * Optional when tree is not used, required for tree.\n *\n * @type {GridDataProvider | null | undefined}\n */\n dataProvider: {\n type: Object,\n notify: true,\n observer: '_dataProviderChanged',\n sync: true,\n },\n\n /**\n * `true` while data is being requested from the data provider.\n */\n loading: {\n type: Boolean,\n notify: true,\n readOnly: true,\n reflectToAttribute: true,\n },\n\n /**\n * @protected\n */\n _hasData: {\n type: Boolean,\n value: false,\n sync: true,\n },\n\n /**\n * Path to an item sub-property that indicates whether the item has child items.\n * @attr {string} item-has-children-path\n */\n itemHasChildrenPath: {\n type: String,\n value: 'children',\n observer: '__itemHasChildrenPathChanged',\n sync: true,\n },\n\n /**\n * Path to an item sub-property that identifies the item.\n * @attr {string} item-id-path\n */\n itemIdPath: {\n type: String,\n value: null,\n sync: true,\n },\n\n /**\n * An array that contains the expanded items.\n * @type {!Array<!GridItem>}\n */\n expandedItems: {\n type: Object,\n notify: true,\n value: () => [],\n sync: true,\n },\n\n /**\n * @private\n */\n __expandedKeys: {\n type: Object,\n computed: '__computeExpandedKeys(itemIdPath, expandedItems)',\n },\n };\n }\n\n static get observers() {\n return ['_sizeChanged(size)', '_expandedItemsChanged(expandedItems)'];\n }\n\n constructor() {\n super();\n\n /** @type {DataProviderController} */\n this._dataProviderController = new DataProviderController(this, {\n size: this.size,\n pageSize: this.pageSize,\n getItemId: this.getItemId.bind(this),\n isExpanded: this._isExpanded.bind(this),\n dataProvider: this.dataProvider ? this.dataProvider.bind(this) : null,\n dataProviderParams: () => {\n return {\n sortOrders: this._mapSorters(),\n filters: this._mapFilters(),\n };\n },\n });\n\n this._dataProviderController.addEventListener('page-requested', this._onDataProviderPageRequested.bind(this));\n this._dataProviderController.addEventListener('page-received', this._onDataProviderPageReceived.bind(this));\n this._dataProviderController.addEventListener('page-loaded', this._onDataProviderPageLoaded.bind(this));\n }\n\n /**\n * @protected\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n get _cache() {\n console.warn('<vaadin-grid> The `_cache` property is deprecated and will be removed in Vaadin 25.');\n return this._dataProviderController.rootCache;\n }\n\n /**\n * @protected\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n get _effectiveSize() {\n console.warn('<vaadin-grid> The `_effectiveSize` property is deprecated and will be removed in Vaadin 25.');\n return this._flatSize;\n }\n\n /** @private */\n _sizeChanged(size) {\n this._dataProviderController.rootCache.size = size;\n this._dataProviderController.recalculateFlatSize();\n this._flatSize = this._dataProviderController.flatSize;\n }\n\n /** @private */\n __itemHasChildrenPathChanged(value, oldValue) {\n if (!oldValue && value === 'children') {\n // Avoid an unnecessary content update on init.\n return;\n }\n this.requestContentUpdate();\n }\n\n /**\n * @param {number} index\n * @param {HTMLElement} el\n * @protected\n */\n _getItem(index, el) {\n if (index >= this._flatSize) {\n return;\n }\n\n el.index = index;\n\n const { item } = this._dataProviderController.getFlatIndexContext(index);\n if (item) {\n this.__updateLoading(el, false);\n this._updateItem(el, item);\n if (this._isExpanded(item)) {\n this._dataProviderController.ensureFlatIndexHierarchy(index);\n }\n } else {\n this.__updateLoading(el, true);\n this._dataProviderController.ensureFlatIndexLoaded(index);\n }\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {boolean} loading\n * @private\n */\n __updateLoading(row, loading) {\n const cells = getBodyRowCells(row);\n\n // Row state attribute\n updateState(row, 'loading', loading);\n\n // Cells part attribute\n updateCellsPart(cells, 'loading-row-cell', loading);\n }\n\n /**\n * Returns a value that identifies the item. Uses `itemIdPath` if available.\n * Can be customized by overriding.\n * @param {!GridItem} item\n * @return {!GridItem | !unknown}\n */\n getItemId(item) {\n return this.itemIdPath ? get(this.itemIdPath, item) : item;\n }\n\n /**\n * @param {!GridItem} item\n * @return {boolean}\n * @protected\n */\n _isExpanded(item) {\n return this.__expandedKeys && this.__expandedKeys.has(this.getItemId(item));\n }\n\n /** @private */\n _expandedItemsChanged() {\n this._dataProviderController.recalculateFlatSize();\n this._flatSize = this._dataProviderController.flatSize;\n this.__updateVisibleRows();\n }\n\n /** @private */\n __computeExpandedKeys(itemIdPath, expandedItems) {\n const expanded = expandedItems || [];\n const expandedKeys = new Set();\n expanded.forEach((item) => {\n expandedKeys.add(this.getItemId(item));\n });\n\n return expandedKeys;\n }\n\n /**\n * Expands the given item tree.\n * @param {!GridItem} item\n */\n expandItem(item) {\n if (!this._isExpanded(item)) {\n this.expandedItems = [...this.expandedItems, item];\n }\n }\n\n /**\n * Collapses the given item tree.\n * @param {!GridItem} item\n */\n collapseItem(item) {\n if (this._isExpanded(item)) {\n this.expandedItems = this.expandedItems.filter((i) => !this._itemsEqual(i, item));\n }\n }\n\n /**\n * @param {number} index\n * @return {number}\n * @protected\n */\n _getIndexLevel(index = 0) {\n const { level } = this._dataProviderController.getFlatIndexContext(index);\n return level;\n }\n\n /**\n * @param {number} page\n * @param {ItemCache} cache\n * @protected\n * @deprecated since 24.3 and will be removed in Vaadin 25.\n */\n _loadPage(page, cache) {\n console.warn('<vaadin-grid> The `_loadPage` method is deprecated and will be removed in Vaadin 25.');\n this._dataProviderController.__loadCachePage(cache, page);\n }\n\n /** @protected */\n _onDataProviderPageRequested() {\n this._setLoading(true);\n }\n\n /** @protected */\n _onDataProviderPageReceived() {\n // With the new items added, update the cache size and the grid's effective size\n this._flatSize = this._dataProviderController.flatSize;\n\n // After updating the cache, check if some of the expanded items should have sub-caches loaded\n this._getRenderedRows().forEach((row) => {\n this._dataProviderController.ensureFlatIndexHierarchy(row.index);\n });\n\n this._hasData = true;\n }\n\n /** @protected */\n _onDataProviderPageLoaded() {\n // Schedule a debouncer to update the visible rows\n this._debouncerApplyCachedData = Debouncer.debounce(this._debouncerApplyCachedData, timeOut.after(0), () => {\n this._setLoading(false);\n\n this._getRenderedRows().forEach((row) => {\n const { item } = this._dataProviderController.getFlatIndexContext(row.index);\n if (item) {\n this._getItem(row.index, row);\n }\n });\n\n this.__scrollToPendingIndexes();\n this.__dispatchPendingBodyCellFocus();\n });\n\n // If the grid is not loading anything, flush the debouncer immediately\n if (!this._dataProviderController.isLoading()) {\n this._debouncerApplyCachedData.flush();\n }\n }\n\n /** @private */\n __debounceClearCache() {\n this.__clearCacheDebouncer = Debouncer.debounce(this.__clearCacheDebouncer, microTask, () => this.clearCache());\n }\n\n /**\n * Clears the cached pages and reloads data from dataprovider when needed.\n */\n clearCache() {\n this._dataProviderController.clearCache();\n this._dataProviderController.rootCache.size = this.size;\n this._dataProviderController.recalculateFlatSize();\n this._hasData = false;\n this.__updateVisibleRows();\n\n if (!this.__virtualizer.size) {\n this._dataProviderController.loadFirstPage();\n }\n }\n\n /** @private */\n _pageSizeChanged(pageSize, oldPageSize) {\n this._dataProviderController.setPageSize(pageSize);\n\n if (oldPageSize !== undefined && pageSize !== oldPageSize) {\n this.clearCache();\n }\n }\n\n /** @protected */\n _checkSize() {\n if (this.size === undefined && this._flatSize === 0) {\n console.warn(\n 'The <vaadin-grid> needs the total number of items in' +\n ' order to display rows, which you can specify either by setting' +\n ' the `size` property, or by providing it to the second argument' +\n ' of the `dataProvider` function `callback` call.',\n );\n }\n }\n\n /** @private */\n _dataProviderChanged(dataProvider, oldDataProvider) {\n this._dataProviderController.setDataProvider(dataProvider ? dataProvider.bind(this) : null);\n\n if (oldDataProvider !== undefined) {\n this.clearCache();\n }\n\n this._ensureFirstPageLoaded();\n\n this._debouncerCheckSize = Debouncer.debounce(\n this._debouncerCheckSize,\n timeOut.after(2000),\n this._checkSize.bind(this),\n );\n }\n\n /** @protected */\n _ensureFirstPageLoaded() {\n if (!this._hasData) {\n // Load data before adding rows to make sure they have content when\n // rendered for the first time.\n this._dataProviderController.loadFirstPage();\n }\n }\n\n /**\n * @param {!GridItem} item1\n * @param {!GridItem} item2\n * @return {boolean}\n * @protected\n */\n _itemsEqual(item1, item2) {\n return this.getItemId(item1) === this.getItemId(item2);\n }\n\n /**\n * @param {!GridItem} item\n * @param {!Array<!GridItem>} array\n * @return {number}\n * @protected\n */\n _getItemIndexInArray(item, array) {\n let result = -1;\n array.forEach((i, idx) => {\n if (this._itemsEqual(i, item)) {\n result = idx;\n }\n });\n return result;\n }\n\n /**\n * Scroll to a specific row index in the virtual list. Note that the row index is\n * not always the same for any particular item. For example, sorting or filtering\n * items can affect the row index related to an item.\n *\n * The `indexes` parameter can be either a single number or multiple numbers.\n * The grid will first try to scroll to the item at the first index on the top level.\n * In case the item at the first index is expanded, the grid will then try scroll to the\n * item at the second index within the children of the expanded first item, and so on.\n * Each given index points to a child of the item at the previous index.\n *\n * Using `Infinity` as an index will point to the last item on the level.\n *\n * @param indexes {...number} Row indexes to scroll to\n */\n scrollToIndex(...indexes) {\n // Synchronous data provider may cause changes to the cache on scroll without\n // ending up in a loading state. Try scrolling to the index until the target\n // index stabilizes.\n let targetIndex;\n while (targetIndex !== (targetIndex = this._dataProviderController.getFlatIndexByPath(indexes))) {\n this._scrollToFlatIndex(targetIndex);\n }\n\n if (this._dataProviderController.isLoading() || !this.clientHeight) {\n this.__pendingScrollToIndexes = indexes;\n }\n }\n\n /** @private */\n __scrollToPendingIndexes() {\n if (this.__pendingScrollToIndexes && this.$.items.children.length) {\n const indexes = this.__pendingScrollToIndexes;\n delete this.__pendingScrollToIndexes;\n this.scrollToIndex(...indexes);\n }\n }\n\n /**\n * Fired when the `expandedItems` property changes.\n *\n * @event expanded-items-changed\n */\n\n /**\n * Fired when the `loading` property changes.\n *\n * @event loading-changed\n */\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport {\n iterateChildren,\n iterateRowCells,\n updateBooleanRowStates,\n updateStringRowStates,\n} from './vaadin-grid-helpers.js';\n\nconst DropMode = {\n BETWEEN: 'between',\n ON_TOP: 'on-top',\n ON_TOP_OR_BETWEEN: 'on-top-or-between',\n ON_GRID: 'on-grid',\n};\n\nconst DropLocation = {\n ON_TOP: 'on-top',\n ABOVE: 'above',\n BELOW: 'below',\n EMPTY: 'empty',\n};\n\n// Detects if the browser doesn't support HTML5 Drag & Drop API (and falls back to the @vaadin/vaadin-mobile-drag-drop polyfill)\nconst usesDnDPolyfill = !('draggable' in document.createElement('div'));\n\n/**\n * @polymerMixin\n */\nexport const DragAndDropMixin = (superClass) =>\n class DragAndDropMixin extends superClass {\n static get properties() {\n return {\n /**\n * Defines the locations within the Grid row where an element can be dropped.\n *\n * Possible values are:\n * - `between`: The drop event can happen between Grid rows.\n * - `on-top`: The drop event can happen on top of Grid rows.\n * - `on-top-or-between`: The drop event can happen either on top of or between Grid rows.\n * - `on-grid`: The drop event will not happen on any specific row, it will show the drop target outline around the whole grid.\n * @attr {between|on-top|on-top-or-between|on-grid} drop-mode\n * @type {GridDropMode | null | undefined}\n */\n dropMode: {\n type: String,\n sync: true,\n },\n\n /**\n * Marks the grid's rows to be available for dragging.\n * @attr {boolean} rows-draggable\n */\n rowsDraggable: {\n type: Boolean,\n sync: true,\n },\n\n /**\n * A function that filters dragging of specific grid rows. The return value should be false\n * if dragging of the row should be disabled.\n *\n * Receives one argument:\n * - `model` The object with the properties related with\n * the rendered item, contains:\n * - `model.index` The index of the item.\n * - `model.item` The item.\n * - `model.expanded` Sublevel toggle state.\n * - `model.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `model.selected` Selected state.\n *\n * @type {GridDragAndDropFilter | null | undefined}\n */\n dragFilter: {\n type: Function,\n sync: true,\n },\n\n /**\n * A function that filters dropping on specific grid rows. The return value should be false\n * if dropping on the row should be disabled.\n *\n * Receives one argument:\n * - `model` The object with the properties related with\n * the rendered item, contains:\n * - `model.index` The index of the item.\n * - `model.item` The item.\n * - `model.expanded` Sublevel toggle state.\n * - `model.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `model.selected` Selected state.\n *\n * @type {GridDragAndDropFilter | null | undefined}\n */\n dropFilter: {\n type: Function,\n sync: true,\n },\n\n /** @private */\n __dndAutoScrollThreshold: {\n value: 50,\n },\n };\n }\n\n static get observers() {\n return ['_dragDropAccessChanged(rowsDraggable, dropMode, dragFilter, dropFilter, loading)'];\n }\n\n /** @protected */\n ready() {\n super.ready();\n this.$.table.addEventListener('dragstart', this._onDragStart.bind(this));\n this.$.table.addEventListener('dragend', this._onDragEnd.bind(this));\n this.$.table.addEventListener('dragover', this._onDragOver.bind(this));\n this.$.table.addEventListener('dragleave', this._onDragLeave.bind(this));\n this.$.table.addEventListener('drop', this._onDrop.bind(this));\n this.$.table.addEventListener('dragenter', (e) => {\n if (this.dropMode) {\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n /** @private */\n _onDragStart(e) {\n if (this.rowsDraggable) {\n let row = e.target;\n if (row.localName === 'vaadin-grid-cell-content') {\n // The draggable node is the cell content element on browsers that support native shadow\n row = row.assignedSlot.parentNode.parentNode;\n }\n if (row.parentNode !== this.$.items) {\n return;\n }\n\n e.stopPropagation();\n this.toggleAttribute('dragging-rows', true);\n\n if (this._safari) {\n // Safari doesn't position drag images from transformed\n // elements properly so we need to switch to use top temporarily\n const transform = row.style.transform;\n row.style.top = /translateY\\((.*)\\)/u.exec(transform)[1];\n row.style.transform = 'none';\n requestAnimationFrame(() => {\n row.style.top = '';\n row.style.transform = transform;\n });\n }\n\n const rowRect = row.getBoundingClientRect();\n\n if (usesDnDPolyfill) {\n // The polyfill drag image is automatically centered so there is no need to adjust the position\n e.dataTransfer.setDragImage(row);\n } else {\n // The native drag image needs to be shifted manually to compensate for the touch position offset\n e.dataTransfer.setDragImage(row, e.clientX - rowRect.left, e.clientY - rowRect.top);\n }\n\n let rows = [row];\n if (this._isSelected(row._item)) {\n rows = this.__getViewportRows()\n .filter((row) => this._isSelected(row._item))\n .filter((row) => !this.dragFilter || this.dragFilter(this.__getRowModel(row)));\n }\n\n // Set the default transfer data\n e.dataTransfer.setData('text', this.__formatDefaultTransferData(rows));\n\n updateBooleanRowStates(row, { dragstart: rows.length > 1 ? `${rows.length}` : '' });\n this.style.setProperty('--_grid-drag-start-x', `${e.clientX - rowRect.left + 20}px`);\n this.style.setProperty('--_grid-drag-start-y', `${e.clientY - rowRect.top + 10}px`);\n\n requestAnimationFrame(() => {\n updateBooleanRowStates(row, { dragstart: false });\n this.style.setProperty('--_grid-drag-start-x', '');\n this.style.setProperty('--_grid-drag-start-y', '');\n });\n\n const event = new CustomEvent('grid-dragstart', {\n detail: {\n draggedItems: rows.map((row) => row._item),\n setDragData: (type, data) => e.dataTransfer.setData(type, data),\n setDraggedItemsCount: (count) => row.setAttribute('dragstart', count),\n },\n });\n event.originalEvent = e;\n this.dispatchEvent(event);\n }\n }\n\n /** @private */\n _onDragEnd(e) {\n this.toggleAttribute('dragging-rows', false);\n e.stopPropagation();\n const event = new CustomEvent('grid-dragend');\n event.originalEvent = e;\n this.dispatchEvent(event);\n }\n\n /** @private */\n _onDragLeave(e) {\n e.stopPropagation();\n this._clearDragStyles();\n }\n\n /** @private */\n _onDragOver(e) {\n if (this.dropMode) {\n this._dropLocation = undefined;\n this._dragOverItem = undefined;\n\n if (this.__dndAutoScroll(e.clientY)) {\n this._clearDragStyles();\n return;\n }\n\n let row = e.composedPath().find((node) => node.localName === 'tr');\n\n if (!this._flatSize || this.dropMode === DropMode.ON_GRID) {\n // The grid is empty or \"on-grid\" drop mode was used, always default to \"empty\"\n this._dropLocation = DropLocation.EMPTY;\n } else if (!row || row.parentNode !== this.$.items) {\n // The dragover didn't occur on a body row but the grid has items\n if (row) {\n // The dragover occurred over a header/footer row\n return;\n } else if (this.dropMode === DropMode.BETWEEN || this.dropMode === DropMode.ON_TOP_OR_BETWEEN) {\n // The drop mode allows setting the last row as the drag over item\n row = Array.from(this.$.items.children)\n .filter((row) => !row.hidden)\n .pop();\n this._dropLocation = DropLocation.BELOW;\n } else {\n // Drop mode on-top used but the dragover didn't occur over one of the existing rows\n return;\n }\n } else {\n // The dragover occurred on a body row, determine the drop location from coordinates\n const rowRect = row.getBoundingClientRect();\n\n this._dropLocation = DropLocation.ON_TOP;\n\n if (this.dropMode === DropMode.BETWEEN) {\n const dropAbove = e.clientY - rowRect.top < rowRect.bottom - e.clientY;\n this._dropLocation = dropAbove ? DropLocation.ABOVE : DropLocation.BELOW;\n } else if (this.dropMode === DropMode.ON_TOP_OR_BETWEEN) {\n if (e.clientY - rowRect.top < rowRect.height / 3) {\n this._dropLocation = DropLocation.ABOVE;\n } else if (e.clientY - rowRect.top > (rowRect.height / 3) * 2) {\n this._dropLocation = DropLocation.BELOW;\n }\n }\n }\n\n if (row && row.hasAttribute('drop-disabled')) {\n this._dropLocation = undefined;\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n if (this._dropLocation === DropLocation.EMPTY) {\n this.toggleAttribute('dragover', true);\n } else if (row) {\n this._dragOverItem = row._item;\n if (row.getAttribute('dragover') !== this._dropLocation) {\n updateStringRowStates(row, { dragover: this._dropLocation });\n }\n } else {\n this._clearDragStyles();\n }\n }\n }\n\n /** @private */\n __dndAutoScroll(clientY) {\n if (this.__dndAutoScrolling) {\n return true;\n }\n\n const headerBottom = this.$.header.getBoundingClientRect().bottom;\n const footerTop = this.$.footer.getBoundingClientRect().top;\n const topDiff = headerBottom - clientY + this.__dndAutoScrollThreshold;\n const bottomDiff = clientY - footerTop + this.__dndAutoScrollThreshold;\n let scrollTopDelta = 0;\n\n if (bottomDiff > 0) {\n scrollTopDelta = bottomDiff * 2;\n } else if (topDiff > 0) {\n scrollTopDelta = -topDiff * 2;\n }\n\n if (scrollTopDelta) {\n const scrollTop = this.$.table.scrollTop;\n this.$.table.scrollTop += scrollTopDelta;\n const scrollTopChanged = scrollTop !== this.$.table.scrollTop;\n if (scrollTopChanged) {\n this.__dndAutoScrolling = true;\n // Disallow more auto-scrolls within 20ms\n setTimeout(() => {\n this.__dndAutoScrolling = false;\n }, 20);\n return true;\n }\n }\n }\n\n /** @private */\n __getViewportRows() {\n const headerBottom = this.$.header.getBoundingClientRect().bottom;\n const footerTop = this.$.footer.getBoundingClientRect().top;\n return Array.from(this.$.items.children).filter((row) => {\n const rowRect = row.getBoundingClientRect();\n return rowRect.bottom > headerBottom && rowRect.top < footerTop;\n });\n }\n\n /** @protected */\n _clearDragStyles() {\n this.removeAttribute('dragover');\n iterateChildren(this.$.items, (row) => {\n updateStringRowStates(row, { dragover: null });\n });\n }\n\n /** @private */\n _onDrop(e) {\n if (this.dropMode) {\n e.stopPropagation();\n e.preventDefault();\n\n const dragData =\n e.dataTransfer.types &&\n Array.from(e.dataTransfer.types).map((type) => {\n return {\n type,\n data: e.dataTransfer.getData(type),\n };\n });\n\n this._clearDragStyles();\n\n const event = new CustomEvent('grid-drop', {\n bubbles: e.bubbles,\n cancelable: e.cancelable,\n detail: {\n dropTargetItem: this._dragOverItem,\n dropLocation: this._dropLocation,\n dragData,\n },\n });\n event.originalEvent = e;\n this.dispatchEvent(event);\n }\n }\n\n /** @private */\n __formatDefaultTransferData(rows) {\n return rows\n .map((row) => {\n return Array.from(row.children)\n .filter((cell) => !cell.hidden && cell.getAttribute('part').indexOf('details-cell') === -1)\n .sort((a, b) => {\n return a._column._order > b._column._order ? 1 : -1;\n })\n .map((cell) => cell._content.textContent.trim())\n .filter((content) => content)\n .join('\\t');\n })\n .join('\\n');\n }\n\n /** @private */\n _dragDropAccessChanged() {\n this.filterDragAndDrop();\n }\n\n /**\n * Runs the `dragFilter` and `dropFilter` hooks for the visible cells.\n * If the filter depends on varying conditions, you may need to\n * call this function manually in order to update the draggability when\n * the conditions change.\n */\n filterDragAndDrop() {\n iterateChildren(this.$.items, (row) => {\n if (!row.hidden) {\n this._filterDragAndDrop(row, this.__getRowModel(row));\n }\n });\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {!GridItemModel} model\n * @protected\n */\n _filterDragAndDrop(row, model) {\n const loading = this.loading || row.hasAttribute('loading');\n const dragDisabled = !this.rowsDraggable || loading || (this.dragFilter && !this.dragFilter(model));\n const dropDisabled = !this.dropMode || loading || (this.dropFilter && !this.dropFilter(model));\n\n iterateRowCells(row, (cell) => {\n if (dragDisabled) {\n cell._content.removeAttribute('draggable');\n } else {\n cell._content.setAttribute('draggable', true);\n }\n });\n\n updateBooleanRowStates(row, {\n 'drag-disabled': !!dragDisabled,\n 'drop-disabled': !!dropDisabled,\n });\n }\n\n /**\n * Fired when starting to drag grid rows.\n *\n * @event grid-dragstart\n * @param {Object} originalEvent The native dragstart event\n * @param {Object} detail\n * @param {Object} detail.draggedItems the items in the visible viewport that are dragged\n * @param {Function} detail.setDraggedItemsCount Overrides the default number shown in the drag image on multi row drag.\n * Parameter is of type number.\n * @param {Function} detail.setDragData Sets dataTransfer data for the drag operation.\n * Note that \"text\" is the only data type supported by all the browsers the grid currently supports (including IE11).\n * The function takes two parameters:\n * - type:string The type of the data\n * - data:string The data\n */\n\n /**\n * Fired when the dragging of the rows ends.\n *\n * @event grid-dragend\n * @param {Object} originalEvent The native dragend event\n */\n\n /**\n * Fired when a drop occurs on top of the grid.\n *\n * @event grid-drop\n * @param {Object} originalEvent The native drop event\n * @param {Object} detail\n * @param {Object} detail.dropTargetItem The item of the grid row on which the drop occurred.\n * @param {string} detail.dropLocation The position at which the drop event took place relative to a row.\n * Depending on the dropMode value, the drop location can be one of the following\n * - `on-top`: when the drop occurred on top of the row\n * - `above`: when the drop occurred above the row\n * - `below`: when the drop occurred below the row\n * - `empty`: when the drop occurred over the grid, not relative to any specific row\n * @param {string} detail.dragData An array of items with the payload as a string representation as the\n * `data` property and the type of the data as `type` property.\n */\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { microTask, timeOut } from '@vaadin/component-base/src/async.js';\nimport { Debouncer } from '@vaadin/component-base/src/debounce.js';\nimport { ColumnObserver, updateCellState } from './vaadin-grid-helpers.js';\n\nfunction arrayEquals(arr1, arr2) {\n if (!arr1 || !arr2 || arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0, l = arr1.length; i < l; i++) {\n // Check if we have nested arrays\n if (arr1[i] instanceof Array && arr2[i] instanceof Array) {\n // Recurse into the nested arrays\n if (!arrayEquals(arr1[i], arr2[i])) {\n return false;\n }\n } else if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @polymerMixin\n */\nexport const DynamicColumnsMixin = (superClass) =>\n class DynamicColumnsMixin extends superClass {\n static get properties() {\n return {\n /**\n * @protected\n */\n _columnTree: Object,\n };\n }\n\n /** @protected */\n ready() {\n super.ready();\n this._addNodeObserver();\n }\n\n /** @private */\n _hasColumnGroups(columns) {\n return columns.some((column) => column.localName === 'vaadin-grid-column-group');\n }\n\n /**\n * @param {!GridColumnGroup} el\n * @return {!Array<!GridColumn>}\n * @protected\n */\n _getChildColumns(el) {\n return ColumnObserver.getColumns(el);\n }\n\n /** @private */\n _flattenColumnGroups(columns) {\n return columns\n .map((col) => {\n if (col.localName === 'vaadin-grid-column-group') {\n return this._getChildColumns(col);\n }\n return [col];\n })\n .reduce((prev, curr) => {\n return prev.concat(curr);\n }, []);\n }\n\n /** @private */\n _getColumnTree() {\n const rootColumns = ColumnObserver.getColumns(this);\n const columnTree = [rootColumns];\n\n let c = rootColumns;\n while (this._hasColumnGroups(c)) {\n c = this._flattenColumnGroups(c);\n columnTree.push(c);\n }\n\n return columnTree;\n }\n\n /** @protected */\n _debounceUpdateColumnTree() {\n this.__updateColumnTreeDebouncer = Debouncer.debounce(this.__updateColumnTreeDebouncer, microTask, () =>\n this._updateColumnTree(),\n );\n }\n\n /** @protected */\n _updateColumnTree() {\n const columnTree = this._getColumnTree();\n\n if (!arrayEquals(columnTree, this._columnTree)) {\n // Request a synchronoys update for each column\n columnTree.forEach((columnArray) => {\n columnArray.forEach((column) => {\n if (column.performUpdate) {\n column.performUpdate();\n }\n });\n });\n\n this._columnTree = columnTree;\n }\n }\n\n /** @private */\n _addNodeObserver() {\n this._observer = new ColumnObserver(this, (_addedColumns, removedColumns) => {\n const allRemovedCells = removedColumns.flatMap((c) => c._allCells);\n const filterNotConnected = (element) =>\n allRemovedCells.filter((cell) => cell && cell._content.contains(element)).length;\n\n this.__removeSorters(this._sorters.filter(filterNotConnected));\n this.__removeFilters(this._filters.filter(filterNotConnected));\n this._debounceUpdateColumnTree();\n\n this._debouncerCheckImports = Debouncer.debounce(\n this._debouncerCheckImports,\n timeOut.after(2000),\n this._checkImports.bind(this),\n );\n\n this._ensureFirstPageLoaded();\n });\n }\n\n /** @protected */\n _checkImports() {\n [\n 'vaadin-grid-column-group',\n 'vaadin-grid-filter',\n 'vaadin-grid-filter-column',\n 'vaadin-grid-tree-toggle',\n 'vaadin-grid-selection-column',\n 'vaadin-grid-sort-column',\n 'vaadin-grid-sorter',\n ].forEach((elementName) => {\n const element = this.querySelector(elementName);\n if (element && !customElements.get(elementName)) {\n console.warn(`Make sure you have imported the required module for <${elementName}> element.`);\n }\n });\n }\n\n /** @protected */\n _updateFirstAndLastColumn() {\n Array.from(this.shadowRoot.querySelectorAll('tr')).forEach((row) => this._updateFirstAndLastColumnForRow(row));\n }\n\n /**\n * @param {!HTMLElement} row\n * @protected\n */\n _updateFirstAndLastColumnForRow(row) {\n Array.from(row.querySelectorAll('[part~=\"cell\"]:not([part~=\"details-cell\"])'))\n .sort((a, b) => {\n return a._column._order - b._column._order;\n })\n .forEach((cell, cellIndex, children) => {\n updateCellState(cell, 'first-column', cellIndex === 0);\n updateCellState(cell, 'last-column', cellIndex === children.length - 1);\n });\n }\n\n /**\n * @param {!Node} node\n * @return {boolean}\n * @protected\n */\n _isColumnElement(node) {\n return node.nodeType === Node.ELEMENT_NODE && /\\bcolumn\\b/u.test(node.localName);\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * @polymerMixin\n */\nexport const EventContextMixin = (superClass) =>\n class EventContextMixin extends superClass {\n /**\n * Returns an object with context information about the event target:\n * - `item`: the data object corresponding to the targeted row (not specified when targeting header or footer)\n * - `column`: the column element corresponding to the targeted cell (not specified when targeting row details)\n * - `section`: whether the event targeted the body, header, footer or details of the grid\n *\n * These additional properties are included when `item` is specified:\n * - `index`: the index of the item\n * - `selected`: the selected state of the item\n * - `detailsOpened`: whether the row details are open for the item\n * - `expanded`: the expanded state of the tree toggle\n * - `level`: the tree hierarchy level\n *\n * The returned object is populated only when a grid cell, header, footer or row details is found in `event.composedPath()`.\n * This means mostly mouse and keyboard events. If such a grid part is not found in the path, an empty object is returned.\n * This may be the case eg. if the event is fired on the `<vaadin-grid>` element and not any deeper in the DOM, or if\n * the event targets the empty part of the grid body.\n *\n * @param {!Event} event\n * @return {GridEventContext}\n */\n getEventContext(event) {\n const context = {};\n\n // Use `composedPath()` stored by vaadin-context-menu gesture\n // to avoid problem when accessing it after a timeout on iOS\n const path = event.__composedPath || event.composedPath();\n const cell = path[path.indexOf(this.$.table) - 3];\n\n if (!cell) {\n return context;\n }\n\n context.section = ['body', 'header', 'footer', 'details'].find(\n (section) => cell.getAttribute('part').indexOf(section) > -1,\n );\n\n if (cell._column) {\n context.column = cell._column;\n }\n\n if (context.section === 'body' || context.section === 'details') {\n Object.assign(context, this.__getRowModel(cell.parentElement));\n }\n\n return context;\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * @polymerMixin\n */\nexport const FilterMixin = (superClass) =>\n class FilterMixin extends superClass {\n static get properties() {\n return {\n /** @private */\n _filters: {\n type: Array,\n value: () => [],\n },\n };\n }\n\n constructor() {\n super();\n this._filterChanged = this._filterChanged.bind(this);\n this.addEventListener('filter-changed', this._filterChanged);\n }\n\n /** @private */\n _filterChanged(e) {\n e.stopPropagation();\n\n this.__addFilter(e.target);\n this.__applyFilters();\n }\n\n /** @private */\n __removeFilters(filtersToRemove) {\n if (filtersToRemove.length === 0) {\n return;\n }\n\n this._filters = this._filters.filter((filter) => filtersToRemove.indexOf(filter) < 0);\n this.__applyFilters();\n }\n\n /** @private */\n __addFilter(filter) {\n const filterIndex = this._filters.indexOf(filter);\n\n if (filterIndex === -1) {\n this._filters.push(filter);\n }\n }\n\n /** @private */\n __applyFilters() {\n if (this.dataProvider && this.isAttached) {\n this.clearCache();\n }\n }\n\n /**\n * @return {!Array<!GridFilterDefinition>}\n * @protected\n */\n _mapFilters() {\n return this._filters.map((filter) => {\n return {\n path: filter.path,\n value: filter.value,\n };\n });\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { isKeyboardActive } from '@vaadin/a11y-base/src/focus-utils.js';\nimport { addValueToAttribute, removeValueFromAttribute } from '@vaadin/component-base/src/dom-utils.js';\nimport { get } from '@vaadin/component-base/src/path-utils.js';\n\n/**\n * @polymerMixin\n */\nexport const KeyboardNavigationMixin = (superClass) =>\n class KeyboardNavigationMixin extends superClass {\n static get properties() {\n return {\n /** @private */\n _headerFocusable: {\n type: Object,\n observer: '_focusableChanged',\n sync: true,\n },\n\n /**\n * @type {!HTMLElement | undefined}\n * @protected\n */\n _itemsFocusable: {\n type: Object,\n observer: '_focusableChanged',\n sync: true,\n },\n\n /** @private */\n _footerFocusable: {\n type: Object,\n observer: '_focusableChanged',\n sync: true,\n },\n\n /** @private */\n _navigatingIsHidden: Boolean,\n\n /**\n * @type {number}\n * @protected\n */\n _focusedItemIndex: {\n type: Number,\n value: 0,\n },\n\n /** @private */\n _focusedColumnOrder: Number,\n\n /** @private */\n _focusedCell: {\n type: Object,\n observer: '_focusedCellChanged',\n sync: true,\n },\n\n /**\n * Indicates whether the grid is currently in interaction mode.\n * In interaction mode the user is currently interacting with a control,\n * such as an input or a select, within a cell.\n * In interaction mode keyboard navigation between cells is disabled.\n * Interaction mode also prevents the focus target cell of that section of\n * the grid from receiving focus, allowing the user to switch focus to\n * controls in adjacent cells, rather than focussing the outer cell\n * itself.\n * @type {boolean}\n * @private\n */\n interacting: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n readOnly: true,\n observer: '_interactingChanged',\n },\n };\n }\n\n /** @private */\n get __rowFocusMode() {\n return (\n this.__isRow(this._itemsFocusable) || this.__isRow(this._headerFocusable) || this.__isRow(this._footerFocusable)\n );\n }\n\n set __rowFocusMode(value) {\n ['_itemsFocusable', '_footerFocusable', '_headerFocusable'].forEach((prop) => {\n const focusable = this[prop];\n if (value) {\n const parent = focusable && focusable.parentElement;\n if (this.__isCell(focusable)) {\n // Cell itself focusable (default)\n this[prop] = parent;\n } else if (this.__isCell(parent)) {\n // Focus button mode is enabled for the column,\n // button element inside the cell is focusable.\n this[prop] = parent.parentElement;\n }\n } else if (!value && this.__isRow(focusable)) {\n const cell = focusable.firstElementChild;\n this[prop] = cell._focusButton || cell;\n }\n });\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n if (this._ios || this._android) {\n // Disable keyboard navigation on mobile devices\n return;\n }\n\n this.addEventListener('keydown', this._onKeyDown);\n this.addEventListener('keyup', this._onKeyUp);\n\n this.addEventListener('focusin', this._onFocusIn);\n this.addEventListener('focusout', this._onFocusOut);\n\n // When focus goes from cell to another cell, focusin/focusout events do\n // not escape the grid's shadowRoot, thus listening inside the shadowRoot.\n this.$.table.addEventListener('focusin', this._onContentFocusIn.bind(this));\n\n this.addEventListener('mousedown', () => {\n this.toggleAttribute('navigating', false);\n this._isMousedown = true;\n\n // Reset stored order when moving focus with mouse.\n this._focusedColumnOrder = undefined;\n });\n this.addEventListener('mouseup', () => {\n this._isMousedown = false;\n });\n }\n\n /** @private */\n _focusableChanged(focusable, oldFocusable) {\n if (oldFocusable) {\n oldFocusable.setAttribute('tabindex', '-1');\n }\n if (focusable) {\n this._updateGridSectionFocusTarget(focusable);\n }\n }\n\n /** @private */\n _focusedCellChanged(focusedCell, oldFocusedCell) {\n if (oldFocusedCell) {\n removeValueFromAttribute(oldFocusedCell, 'part', 'focused-cell');\n }\n\n if (focusedCell) {\n addValueToAttribute(focusedCell, 'part', 'focused-cell');\n }\n }\n\n /** @private */\n _interactingChanged() {\n // Update focus targets when entering / exiting interaction mode\n this._updateGridSectionFocusTarget(this._headerFocusable);\n this._updateGridSectionFocusTarget(this._itemsFocusable);\n this._updateGridSectionFocusTarget(this._footerFocusable);\n }\n\n /**\n * Since the focused cell/row state is stored as an element reference, the reference may get\n * out of sync when the virtual indexes for elements update due to effective size change.\n * This function updates the reference to the correct element after a possible index change.\n * @private\n */\n __updateItemsFocusable() {\n if (!this._itemsFocusable) {\n return;\n }\n\n const wasFocused = this.shadowRoot.activeElement === this._itemsFocusable;\n\n this._getRenderedRows().forEach((row) => {\n if (row.index === this._focusedItemIndex) {\n if (this.__rowFocusMode) {\n // Row focus mode\n this._itemsFocusable = row;\n } else {\n // Cell focus mode\n let parent = this._itemsFocusable.parentElement;\n let cell = this._itemsFocusable;\n\n if (parent) {\n // Focus button mode is enabled for the column,\n // button element inside the cell is focusable.\n if (this.__isCell(parent)) {\n cell = parent;\n parent = parent.parentElement;\n }\n\n const cellIndex = [...parent.children].indexOf(cell);\n this._itemsFocusable = this.__getFocusable(row, row.children[cellIndex]);\n }\n }\n }\n });\n\n if (wasFocused) {\n this._itemsFocusable.focus();\n }\n }\n\n /**\n * @param {!KeyboardEvent} e\n * @protected\n */\n _onKeyDown(e) {\n const key = e.key;\n\n let keyGroup;\n switch (key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'PageUp':\n case 'PageDown':\n case 'Home':\n case 'End':\n keyGroup = 'Navigation';\n break;\n case 'Enter':\n case 'Escape':\n case 'F2':\n keyGroup = 'Interaction';\n break;\n case 'Tab':\n keyGroup = 'Tab';\n break;\n case ' ':\n keyGroup = 'Space';\n break;\n default:\n break;\n }\n\n this._detectInteracting(e);\n if (this.interacting && keyGroup !== 'Interaction') {\n // When in the interacting mode, only the \"Interaction\" keys are handled.\n keyGroup = undefined;\n }\n\n if (keyGroup) {\n this[`_on${keyGroup}KeyDown`](e, key);\n }\n }\n\n /** @private */\n _ensureScrolledToIndex(index) {\n const targetRowInDom = [...this.$.items.children].find((child) => child.index === index);\n if (!targetRowInDom) {\n this.scrollToIndex(index);\n } else {\n this.__scrollIntoViewport(index);\n }\n }\n\n /** @private */\n __isRowExpandable(row) {\n if (this.itemHasChildrenPath) {\n const item = row._item;\n return !!(item && get(this.itemHasChildrenPath, item) && !this._isExpanded(item));\n }\n }\n\n /** @private */\n __isRowCollapsible(row) {\n return this._isExpanded(row._item);\n }\n\n /** @private */\n __isDetailsCell(element) {\n return element.matches('[part~=\"details-cell\"]');\n }\n\n /** @private */\n __isCell(element) {\n return element instanceof HTMLTableCellElement;\n }\n\n /** @private */\n __isRow(element) {\n return element instanceof HTMLTableRowElement;\n }\n\n /** @private */\n __getIndexOfChildElement(el) {\n return Array.prototype.indexOf.call(el.parentNode.children, el);\n }\n\n /** @private */\n _onNavigationKeyDown(e, key) {\n e.preventDefault();\n\n const visibleItemsCount = this._lastVisibleIndex - this._firstVisibleIndex - 1;\n const isRTL = this.__isRTL;\n\n // Handle keyboard interaction as defined in:\n // https://w3c.github.io/aria-practices/#keyboard-interaction-24\n\n let dx = 0,\n dy = 0;\n switch (key) {\n case 'ArrowRight':\n dx = isRTL ? -1 : 1;\n break;\n case 'ArrowLeft':\n dx = isRTL ? 1 : -1;\n break;\n case 'Home':\n if (this.__rowFocusMode) {\n // \"If focus is on a row, moves focus to the first row. If focus is in the first row, focus does not move.\"\n dy = -Infinity;\n } else if (e.ctrlKey) {\n // \"If focus is on a cell, moves focus to the first cell in the column. If focus is in the first row, focus does not move.\"\n dy = -Infinity;\n } else {\n // \"If focus is on a cell, moves focus to the first cell in the row. If focus is in the first cell of the row, focus does not move.\"\n dx = -Infinity;\n }\n break;\n case 'End':\n if (this.__rowFocusMode) {\n // \"If focus is on a row, moves focus to the last row. If focus is in the last row, focus does not move.\"\n dy = Infinity;\n } else if (e.ctrlKey) {\n // \"If focus is on a cell, moves focus to the last cell in the column. If focus is in the last row, focus does not move.\"\n dy = Infinity;\n } else {\n // \"If focus is on a cell, moves focus to the last cell in the row. If focus is in the last cell of the row, focus does not move.\"\n dx = Infinity;\n }\n break;\n case 'ArrowDown':\n dy = 1;\n break;\n case 'ArrowUp':\n dy = -1;\n break;\n case 'PageDown':\n dy = visibleItemsCount;\n break;\n case 'PageUp':\n dy = -visibleItemsCount;\n break;\n default:\n break;\n }\n\n const activeRow = e.composedPath().find((el) => this.__isRow(el));\n const activeCell = e.composedPath().find((el) => this.__isCell(el));\n\n if ((this.__rowFocusMode && !activeRow) || (!this.__rowFocusMode && !activeCell)) {\n // When using a screen reader, it's possible that neither a cell nor a row is focused.\n return;\n }\n\n const forwardsKey = isRTL ? 'ArrowLeft' : 'ArrowRight';\n const backwardsKey = isRTL ? 'ArrowRight' : 'ArrowLeft';\n if (key === forwardsKey) {\n // \"Right Arrow:\"\n if (this.__rowFocusMode) {\n // In row focus mode\n if (this.__isRowExpandable(activeRow)) {\n // \"If focus is on a collapsed row, expands the row.\"\n this.expandItem(activeRow._item);\n return;\n }\n // \"If focus is on an expanded row or is on a row that does not have child rows,\n // moves focus to the first cell in the row.\"\n this.__rowFocusMode = false;\n this._onCellNavigation(activeRow.firstElementChild, 0, 0);\n return;\n }\n } else if (key === backwardsKey) {\n // \"Left Arrow:\"\n if (this.__rowFocusMode) {\n // In row focus mode\n if (this.__isRowCollapsible(activeRow)) {\n // \"If focus is on an expanded row, collapses the row.\"\n this.collapseItem(activeRow._item);\n return;\n }\n } else {\n // In cell focus mode\n const activeRowCells = [...activeRow.children].sort((a, b) => a._order - b._order);\n if (activeCell === activeRowCells[0] || this.__isDetailsCell(activeCell)) {\n // \"If focus is on the first cell in a row and row focus is supported, moves focus to the row.\"\n this.__rowFocusMode = true;\n this._onRowNavigation(activeRow, 0);\n return;\n }\n }\n }\n\n // Navigate\n if (this.__rowFocusMode) {\n // Navigate the rows\n this._onRowNavigation(activeRow, dy);\n } else {\n // Navigate the cells\n this._onCellNavigation(activeCell, dx, dy);\n }\n }\n\n /**\n * Focuses the target row after navigating by the given dy offset.\n * If the row is not in the viewport, it is first scrolled to.\n * @private\n */\n _onRowNavigation(activeRow, dy) {\n const { dstRow } = this.__navigateRows(dy, activeRow);\n\n if (dstRow) {\n dstRow.focus();\n }\n }\n\n /** @private */\n __getIndexInGroup(row, bodyFallbackIndex) {\n const rowGroup = row.parentNode;\n // Body rows have index property, otherwise DOM child index of the row is used.\n if (rowGroup === this.$.items) {\n return bodyFallbackIndex !== undefined ? bodyFallbackIndex : row.index;\n }\n return this.__getIndexOfChildElement(row);\n }\n\n /**\n * Returns the target row after navigating by the given dy offset.\n * Also returns information whether the details cell should be the target on the target row.\n * If the row is not in the viewport, it is first scrolled to.\n * @private\n */\n __navigateRows(dy, activeRow, activeCell) {\n const currentRowIndex = this.__getIndexInGroup(activeRow, this._focusedItemIndex);\n const activeRowGroup = activeRow.parentNode;\n const maxRowIndex = (activeRowGroup === this.$.items ? this._flatSize : activeRowGroup.children.length) - 1;\n\n // Index of the destination row\n let dstRowIndex = Math.max(0, Math.min(currentRowIndex + dy, maxRowIndex));\n\n if (activeRowGroup !== this.$.items) {\n // Navigating header/footer rows\n\n // Header and footer could have hidden rows, e. g., if none of the columns\n // or groups on the given column tree level define template. Skip them\n // in vertical keyboard navigation.\n if (dstRowIndex > currentRowIndex) {\n while (dstRowIndex < maxRowIndex && activeRowGroup.children[dstRowIndex].hidden) {\n dstRowIndex += 1;\n }\n } else if (dstRowIndex < currentRowIndex) {\n while (dstRowIndex > 0 && activeRowGroup.children[dstRowIndex].hidden) {\n dstRowIndex -= 1;\n }\n }\n\n this.toggleAttribute('navigating', true);\n\n return { dstRow: activeRowGroup.children[dstRowIndex] };\n }\n // Navigating body rows\n\n let dstIsRowDetails = false;\n if (activeCell) {\n const isRowDetails = this.__isDetailsCell(activeCell);\n // Row details navigation logic\n if (activeRowGroup === this.$.items) {\n const item = activeRow._item;\n const { item: dstItem } = this._dataProviderController.getFlatIndexContext(dstRowIndex);\n // Should we navigate to row details?\n if (isRowDetails) {\n dstIsRowDetails = dy === 0;\n } else {\n dstIsRowDetails =\n (dy === 1 && this._isDetailsOpened(item)) ||\n (dy === -1 && dstRowIndex !== currentRowIndex && this._isDetailsOpened(dstItem));\n }\n // Should we navigate between details and regular cells of the same row?\n if (dstIsRowDetails !== isRowDetails && ((dy === 1 && dstIsRowDetails) || (dy === -1 && !dstIsRowDetails))) {\n dstRowIndex = currentRowIndex;\n }\n }\n }\n\n // Ensure correct vertical scroll position, destination row is visible\n this._ensureScrolledToIndex(dstRowIndex);\n\n // When scrolling with repeated keydown, sometimes FocusEvent listeners\n // are too late to update _focusedItemIndex. Ensure next keydown\n // listener invocation gets updated _focusedItemIndex value.\n this._focusedItemIndex = dstRowIndex;\n\n // This has to be set after scrolling, otherwise it can be removed by\n // `_preventScrollerRotatingCellFocus(row, index)` during scrolling.\n this.toggleAttribute('navigating', true);\n\n return {\n dstRow: [...activeRowGroup.children].find((el) => !el.hidden && el.index === dstRowIndex),\n dstIsRowDetails,\n };\n }\n\n /**\n * Focuses the target cell after navigating by the given dx and dy offset.\n * If the cell is not in the viewport, it is first scrolled to.\n * @private\n */\n _onCellNavigation(activeCell, dx, dy) {\n const activeRow = activeCell.parentNode;\n const { dstRow, dstIsRowDetails } = this.__navigateRows(dy, activeRow, activeCell);\n if (!dstRow) {\n return;\n }\n\n let columnIndex = this.__getIndexOfChildElement(activeCell);\n if (this.$.items.contains(activeCell)) {\n // lazy column rendering may be enabled, so we need use the always visible sizer cells to find the column index\n columnIndex = [...this.$.sizer.children].findIndex((sizerCell) => sizerCell._column === activeCell._column);\n }\n\n const isCurrentCellRowDetails = this.__isDetailsCell(activeCell);\n const activeRowGroup = activeRow.parentNode;\n const currentRowIndex = this.__getIndexInGroup(activeRow, this._focusedItemIndex);\n\n // _focusedColumnOrder is memoized - this is to ensure predictable\n // navigation when entering and leaving detail and column group cells.\n if (this._focusedColumnOrder === undefined) {\n if (isCurrentCellRowDetails) {\n this._focusedColumnOrder = 0;\n } else {\n this._focusedColumnOrder = this._getColumns(activeRowGroup, currentRowIndex).filter((c) => !c.hidden)[\n columnIndex\n ]._order;\n }\n }\n\n if (dstIsRowDetails) {\n // Focusing a row details cell on the destination row\n const dstCell = [...dstRow.children].find((el) => this.__isDetailsCell(el));\n dstCell.focus();\n } else {\n // Focusing a regular cell on the destination row\n\n // Find orderedColumnIndex - the index of order closest matching the\n // original _focusedColumnOrder in the sorted array of orders\n // of the visible columns on the destination row.\n const dstRowIndex = this.__getIndexInGroup(dstRow, this._focusedItemIndex);\n const dstColumns = this._getColumns(activeRowGroup, dstRowIndex).filter((c) => !c.hidden);\n const dstSortedColumnOrders = dstColumns.map((c) => c._order).sort((b, a) => b - a);\n const maxOrderedColumnIndex = dstSortedColumnOrders.length - 1;\n const orderedColumnIndex = dstSortedColumnOrders.indexOf(\n dstSortedColumnOrders\n .slice(0)\n .sort((b, a) => Math.abs(b - this._focusedColumnOrder) - Math.abs(a - this._focusedColumnOrder))[0],\n );\n\n // Index of the destination column order\n const dstOrderedColumnIndex =\n dy === 0 && isCurrentCellRowDetails\n ? orderedColumnIndex\n : Math.max(0, Math.min(orderedColumnIndex + dx, maxOrderedColumnIndex));\n\n if (dstOrderedColumnIndex !== orderedColumnIndex) {\n // Horizontal movement invalidates stored _focusedColumnOrder\n this._focusedColumnOrder = undefined;\n }\n\n const columnIndexByOrder = dstColumns.reduce((acc, col, i) => {\n acc[col._order] = i;\n return acc;\n }, {});\n const dstColumnIndex = columnIndexByOrder[dstSortedColumnOrders[dstOrderedColumnIndex]];\n\n let dstCell;\n if (this.$.items.contains(activeCell)) {\n const dstSizerCell = this.$.sizer.children[dstColumnIndex];\n if (this._lazyColumns) {\n // If the column is not in the viewport, scroll it into view.\n if (!this.__isColumnInViewport(dstSizerCell._column)) {\n dstSizerCell.scrollIntoView();\n }\n this.__updateColumnsBodyContentHidden();\n this.__updateHorizontalScrollPosition();\n }\n\n dstCell = [...dstRow.children].find((cell) => cell._column === dstSizerCell._column);\n // Ensure correct horizontal scroll position once the destination cell is available.\n this._scrollHorizontallyToCell(dstCell);\n } else {\n dstCell = dstRow.children[dstColumnIndex];\n this._scrollHorizontallyToCell(dstCell);\n }\n\n dstCell.focus();\n }\n }\n\n /** @private */\n _onInteractionKeyDown(e, key) {\n const localTarget = e.composedPath()[0];\n const localTargetIsTextInput =\n localTarget.localName === 'input' &&\n !/^(button|checkbox|color|file|image|radio|range|reset|submit)$/iu.test(localTarget.type);\n\n let wantInteracting;\n switch (key) {\n case 'Enter':\n wantInteracting = this.interacting ? !localTargetIsTextInput : true;\n break;\n case 'Escape':\n wantInteracting = false;\n break;\n case 'F2':\n wantInteracting = !this.interacting;\n break;\n default:\n break;\n }\n\n const { cell } = this._getGridEventLocation(e);\n\n if (this.interacting !== wantInteracting && cell !== null) {\n if (wantInteracting) {\n const focusTarget =\n cell._content.querySelector('[focus-target]') ||\n // If a child element hasn't been explicitly marked as a focus target,\n // fall back to any focusable element inside the cell.\n [...cell._content.querySelectorAll('*')].find((node) => this._isFocusable(node));\n if (focusTarget) {\n e.preventDefault();\n focusTarget.focus();\n this._setInteracting(true);\n this.toggleAttribute('navigating', false);\n }\n } else {\n e.preventDefault();\n this._focusedColumnOrder = undefined;\n cell.focus();\n this._setInteracting(false);\n this.toggleAttribute('navigating', true);\n }\n }\n\n if (key === 'Escape') {\n this._hideTooltip(true);\n }\n }\n\n /** @private */\n _predictFocusStepTarget(srcElement, step) {\n const tabOrder = [\n this.$.table,\n this._headerFocusable,\n this._itemsFocusable,\n this._footerFocusable,\n this.$.focusexit,\n ];\n\n let index = tabOrder.indexOf(srcElement);\n\n index += step;\n while (index >= 0 && index <= tabOrder.length - 1) {\n let rowElement = tabOrder[index];\n if (rowElement && !this.__rowFocusMode) {\n rowElement = tabOrder[index].parentNode;\n }\n\n if (!rowElement || rowElement.hidden) {\n index += step;\n } else {\n break;\n }\n }\n\n let focusStepTarget = tabOrder[index];\n\n // If the target focusable is tied to a column that is not visible,\n // find the first visible column and update the target in order to\n // prevent scrolling to the start of the row.\n if (focusStepTarget && !this.__isHorizontallyInViewport(focusStepTarget)) {\n const firstVisibleColumn = this._getColumnsInOrder().find((column) => this.__isColumnInViewport(column));\n if (firstVisibleColumn) {\n if (focusStepTarget === this._headerFocusable) {\n focusStepTarget = firstVisibleColumn._headerCell;\n } else if (focusStepTarget === this._itemsFocusable) {\n const rowIndex = focusStepTarget._column._cells.indexOf(focusStepTarget);\n focusStepTarget = firstVisibleColumn._cells[rowIndex];\n } else if (focusStepTarget === this._footerFocusable) {\n focusStepTarget = firstVisibleColumn._footerCell;\n }\n }\n }\n\n return focusStepTarget;\n }\n\n /** @private */\n _onTabKeyDown(e) {\n const focusTarget = this._predictFocusStepTarget(e.composedPath()[0], e.shiftKey ? -1 : 1);\n\n // Can be undefined if grid has tabindex\n if (!focusTarget) {\n return;\n }\n\n // Prevent focus-trap logic from intercepting the event.\n e.stopPropagation();\n\n if (focusTarget === this.$.table) {\n // The focus is about to exit the grid to the top.\n this.$.table.focus();\n } else if (focusTarget === this.$.focusexit) {\n // The focus is about to exit the grid to the bottom.\n this.$.focusexit.focus();\n } else if (focusTarget === this._itemsFocusable) {\n let itemsFocusTarget = focusTarget;\n const targetRow = this.__isRow(focusTarget) ? focusTarget : focusTarget.parentNode;\n this._ensureScrolledToIndex(this._focusedItemIndex);\n if (targetRow.index !== this._focusedItemIndex && this.__isCell(focusTarget)) {\n // The target row, which is about to be focused next, has been\n // assigned with a new index since last focus, probably because of\n // scrolling. Focus the row for the stored focused item index instead.\n const columnIndex = Array.from(targetRow.children).indexOf(this._itemsFocusable);\n const focusedItemRow = Array.from(this.$.items.children).find(\n (row) => !row.hidden && row.index === this._focusedItemIndex,\n );\n if (focusedItemRow) {\n itemsFocusTarget = focusedItemRow.children[columnIndex];\n }\n }\n e.preventDefault();\n itemsFocusTarget.focus();\n } else {\n e.preventDefault();\n focusTarget.focus();\n }\n\n this.toggleAttribute('navigating', true);\n }\n\n /** @private */\n _onSpaceKeyDown(e) {\n e.preventDefault();\n\n const element = e.composedPath()[0];\n const isRow = this.__isRow(element);\n if (isRow || !element._content || !element._content.firstElementChild) {\n this.dispatchEvent(\n new CustomEvent(isRow ? 'row-activate' : 'cell-activate', {\n detail: {\n model: this.__getRowModel(isRow ? element : element.parentElement),\n },\n }),\n );\n }\n }\n\n /** @private */\n _onKeyUp(e) {\n if (!/^( |SpaceBar)$/u.test(e.key) || this.interacting) {\n return;\n }\n\n e.preventDefault();\n\n const cell = e.composedPath()[0];\n if (cell._content && cell._content.firstElementChild) {\n const wasNavigating = this.hasAttribute('navigating');\n cell._content.firstElementChild.dispatchEvent(\n new MouseEvent('click', {\n shiftKey: e.shiftKey,\n bubbles: true,\n composed: true,\n cancelable: true,\n }),\n );\n this.toggleAttribute('navigating', wasNavigating);\n }\n }\n\n /**\n * @param {!FocusEvent} e\n * @protected\n */\n _onFocusIn(e) {\n if (!this._isMousedown) {\n this.toggleAttribute('navigating', true);\n }\n\n const rootTarget = e.composedPath()[0];\n\n if (rootTarget === this.$.table || rootTarget === this.$.focusexit) {\n // The focus enters the top (bottom) of the grid, meaning that user has\n // tabbed (shift-tabbed) into the grid. Move the focus to\n // the first (the last) focusable.\n this._predictFocusStepTarget(rootTarget, rootTarget === this.$.table ? 1 : -1).focus();\n this._setInteracting(false);\n } else {\n this._detectInteracting(e);\n }\n }\n\n /**\n * @param {!FocusEvent} e\n * @protected\n */\n _onFocusOut(e) {\n this.toggleAttribute('navigating', false);\n this._detectInteracting(e);\n this._hideTooltip();\n this._focusedCell = null;\n }\n\n /** @private */\n _onContentFocusIn(e) {\n const { section, cell, row } = this._getGridEventLocation(e);\n\n if (!cell && !this.__rowFocusMode) {\n return;\n }\n\n this._detectInteracting(e);\n\n if (section && (cell || row)) {\n this._activeRowGroup = section;\n if (this.$.header === section) {\n this._headerFocusable = this.__getFocusable(row, cell);\n } else if (this.$.items === section) {\n this._itemsFocusable = this.__getFocusable(row, cell);\n } else if (this.$.footer === section) {\n this._footerFocusable = this.__getFocusable(row, cell);\n }\n\n if (cell) {\n const context = this.getEventContext(e);\n this.__pendingBodyCellFocus = this.loading && context.section === 'body';\n if (!this.__pendingBodyCellFocus) {\n // Fire a cell-focus event for the cell\n cell.dispatchEvent(new CustomEvent('cell-focus', { bubbles: true, composed: true, detail: { context } }));\n }\n this._focusedCell = cell._focusButton || cell;\n\n if (isKeyboardActive() && e.target === cell) {\n this._showTooltip(e);\n }\n } else {\n this._focusedCell = null;\n }\n }\n\n this._detectFocusedItemIndex(e);\n }\n\n /**\n * @private\n */\n __dispatchPendingBodyCellFocus() {\n // If the body cell focus was pending, dispatch the event once loading is done\n if (this.__pendingBodyCellFocus && this.shadowRoot.activeElement === this._itemsFocusable) {\n this._itemsFocusable.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));\n }\n }\n\n /**\n * Get the focusable element depending on the current focus mode.\n * It can be a row, a cell, or a focusable div inside a cell.\n *\n * @param {HTMLElement} row\n * @param {HTMLElement} cell\n * @return {HTMLElement}\n * @private\n */\n __getFocusable(row, cell) {\n return this.__rowFocusMode ? row : cell._focusButton || cell;\n }\n\n /**\n * Enables interaction mode if a cells descendant receives focus or keyboard\n * input. Disables it if the event is not related to cell content.\n * @param {!KeyboardEvent|!FocusEvent} e\n * @private\n */\n _detectInteracting(e) {\n const isInteracting = e.composedPath().some((el) => el.localName === 'vaadin-grid-cell-content');\n this._setInteracting(isInteracting);\n this.__updateHorizontalScrollPosition();\n }\n\n /** @private */\n _detectFocusedItemIndex(e) {\n const { section, row } = this._getGridEventLocation(e);\n if (section === this.$.items) {\n this._focusedItemIndex = row.index;\n }\n }\n\n /**\n * Enables or disables the focus target of the containing section of the\n * grid from receiving focus, based on whether the user is interacting with\n * that section of the grid.\n * @param {HTMLElement} focusTarget\n * @private\n */\n _updateGridSectionFocusTarget(focusTarget) {\n if (!focusTarget) {\n return;\n }\n\n const section = this._getGridSectionFromFocusTarget(focusTarget);\n const isInteractingWithinActiveSection = this.interacting && section === this._activeRowGroup;\n\n focusTarget.tabIndex = isInteractingWithinActiveSection ? -1 : 0;\n }\n\n /**\n * @param {!HTMLTableRowElement} row\n * @param {number} index\n * @protected\n */\n _preventScrollerRotatingCellFocus(row, index) {\n if (\n row.index === this._focusedItemIndex &&\n this.hasAttribute('navigating') &&\n this._activeRowGroup === this.$.items\n ) {\n // Focused item has went, hide navigation mode\n this._navigatingIsHidden = true;\n this.toggleAttribute('navigating', false);\n }\n if (index === this._focusedItemIndex && this._navigatingIsHidden) {\n // Focused item is back, restore navigation mode\n this._navigatingIsHidden = false;\n this.toggleAttribute('navigating', true);\n }\n }\n\n /**\n * @param {HTMLTableSectionElement=} rowGroup\n * @param {number=} rowIndex\n * @return {!Array<!GridColumn>}\n * @protected\n */\n _getColumns(rowGroup, rowIndex) {\n let columnTreeLevel = this._columnTree.length - 1;\n if (rowGroup === this.$.header) {\n columnTreeLevel = rowIndex;\n } else if (rowGroup === this.$.footer) {\n columnTreeLevel = this._columnTree.length - 1 - rowIndex;\n }\n return this._columnTree[columnTreeLevel];\n }\n\n /** @private */\n __isValidFocusable(element) {\n return this.$.table.contains(element) && element.offsetHeight;\n }\n\n /** @protected */\n _resetKeyboardNavigation() {\n if (!this.$ && this.performUpdate) {\n this.performUpdate();\n }\n // Header / footer\n ['header', 'footer'].forEach((section) => {\n if (!this.__isValidFocusable(this[`_${section}Focusable`])) {\n const firstVisibleRow = [...this.$[section].children].find((row) => row.offsetHeight);\n const firstVisibleCell = firstVisibleRow ? [...firstVisibleRow.children].find((cell) => !cell.hidden) : null;\n if (firstVisibleRow && firstVisibleCell) {\n this[`_${section}Focusable`] = this.__getFocusable(firstVisibleRow, firstVisibleCell);\n }\n }\n });\n\n // Body\n if (!this.__isValidFocusable(this._itemsFocusable) && this.$.items.firstElementChild) {\n const firstVisibleRow = this.__getFirstVisibleItem();\n const firstVisibleCell = firstVisibleRow ? [...firstVisibleRow.children].find((cell) => !cell.hidden) : null;\n\n if (firstVisibleCell && firstVisibleRow) {\n // Reset memoized column\n this._focusedColumnOrder = undefined;\n this._itemsFocusable = this.__getFocusable(firstVisibleRow, firstVisibleCell);\n }\n } else {\n this.__updateItemsFocusable();\n }\n }\n\n /**\n * @param {!HTMLElement} dstCell\n * @protected\n */\n _scrollHorizontallyToCell(dstCell) {\n if (dstCell.hasAttribute('frozen') || dstCell.hasAttribute('frozen-to-end') || this.__isDetailsCell(dstCell)) {\n // These cells are, by design, always visible, no need to scroll.\n return;\n }\n\n const dstCellRect = dstCell.getBoundingClientRect();\n const dstRow = dstCell.parentNode;\n const dstCellIndex = Array.from(dstRow.children).indexOf(dstCell);\n const tableRect = this.$.table.getBoundingClientRect();\n let leftBoundary = tableRect.left,\n rightBoundary = tableRect.right;\n for (let i = dstCellIndex - 1; i >= 0; i--) {\n const cell = dstRow.children[i];\n if (cell.hasAttribute('hidden') || this.__isDetailsCell(cell)) {\n continue;\n }\n if (cell.hasAttribute('frozen') || cell.hasAttribute('frozen-to-end')) {\n leftBoundary = cell.getBoundingClientRect().right;\n break;\n }\n }\n for (let i = dstCellIndex + 1; i < dstRow.children.length; i++) {\n const cell = dstRow.children[i];\n if (cell.hasAttribute('hidden') || this.__isDetailsCell(cell)) {\n continue;\n }\n if (cell.hasAttribute('frozen') || cell.hasAttribute('frozen-to-end')) {\n rightBoundary = cell.getBoundingClientRect().left;\n break;\n }\n }\n\n if (dstCellRect.left < leftBoundary) {\n this.$.table.scrollLeft += Math.round(dstCellRect.left - leftBoundary);\n }\n if (dstCellRect.right > rightBoundary) {\n this.$.table.scrollLeft += Math.round(dstCellRect.right - rightBoundary);\n }\n }\n\n /**\n * @typedef {Object} GridEventLocation\n * @property {HTMLTableSectionElement | null} section - The table section element that the event occurred in (header, body, or footer), or null if the event did not occur in a section\n * @property {HTMLTableRowElement | null} row - The row element that the event occurred in, or null if the event did not occur in a row\n * @property {HTMLTableCellElement | null} cell - The cell element that the event occurred in, or null if the event did not occur in a cell\n * @private\n */\n /**\n * Takes an event and returns a location object describing in which part of the grid the event occurred.\n * The event may either target table section, a row, a cell or contents of a cell.\n * @param {Event} e\n * @returns {GridEventLocation}\n * @private\n */\n _getGridEventLocation(e) {\n const path = e.composedPath();\n const tableIndex = path.indexOf(this.$.table);\n // Assuming ascending path to table is: [...,] th|td, tr, thead|tbody, table [,...]\n const section = tableIndex >= 1 ? path[tableIndex - 1] : null;\n const row = tableIndex >= 2 ? path[tableIndex - 2] : null;\n const cell = tableIndex >= 3 ? path[tableIndex - 3] : null;\n\n return {\n section,\n row,\n cell,\n };\n }\n\n /**\n * Helper method that maps a focus target cell to the containing grid section\n * @param {HTMLElement} focusTarget\n * @returns {HTMLTableSectionElement | null}\n * @private\n */\n _getGridSectionFromFocusTarget(focusTarget) {\n if (focusTarget === this._headerFocusable) {\n return this.$.header;\n }\n if (focusTarget === this._itemsFocusable) {\n return this.$.items;\n }\n if (focusTarget === this._footerFocusable) {\n return this.$.footer;\n }\n return null;\n }\n\n /**\n * Fired when a cell is focused with click or keyboard navigation.\n *\n * Use context property of @see {@link GridCellFocusEvent} to get detail information about the event.\n *\n * @event cell-focus\n */\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { iterateChildren } from './vaadin-grid-helpers.js';\n\n/**\n * @polymerMixin\n */\nexport const RowDetailsMixin = (superClass) =>\n class RowDetailsMixin extends superClass {\n static get properties() {\n return {\n /**\n * An array containing references to items with open row details.\n * @type {!Array<!GridItem>}\n */\n detailsOpenedItems: {\n type: Array,\n value: () => [],\n sync: true,\n },\n\n /**\n * Custom function for rendering the content of the row details.\n * Receives three arguments:\n *\n * - `root` The row details content DOM element. Append your content to it.\n * - `grid` The `<vaadin-grid>` element.\n * - `model` The object with the properties related with\n * the rendered item, contains:\n * - `model.index` The index of the item.\n * - `model.item` The item.\n * - `model.level` The number of the item's tree sublevel, starts from 0.\n * - `model.expanded` True if the item's tree sublevel is expanded.\n * - `model.selected` True if the item is selected.\n *\n * @type {GridRowDetailsRenderer | null | undefined}\n */\n rowDetailsRenderer: {\n type: Function,\n sync: true,\n },\n\n /**\n * @type {!Array<!HTMLElement> | undefined}\n * @protected\n */\n _detailsCells: {\n type: Array,\n },\n };\n }\n\n static get observers() {\n return [\n '_detailsOpenedItemsChanged(detailsOpenedItems, rowDetailsRenderer)',\n '_rowDetailsRendererChanged(rowDetailsRenderer)',\n ];\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this._detailsCellResizeObserver = new ResizeObserver((entries) => {\n entries.forEach(({ target: cell }) => {\n this._updateDetailsCellHeight(cell.parentElement);\n });\n\n // This workaround is needed until Safari also supports\n // ResizeObserver.observe with {box: 'border-box'}\n this.__virtualizer.__adapter._resizeHandler();\n });\n }\n\n /** @private */\n _rowDetailsRendererChanged(rowDetailsRenderer) {\n if (!rowDetailsRenderer) {\n return;\n }\n\n if (this._columnTree) {\n // Only update the rows if the column tree has already been initialized\n iterateChildren(this.$.items, (row) => {\n if (!row.querySelector('[part~=details-cell]')) {\n this._updateRow(row, this._columnTree[this._columnTree.length - 1]);\n const isDetailsOpened = this._isDetailsOpened(row._item);\n this._toggleDetailsCell(row, isDetailsOpened);\n }\n });\n }\n }\n\n /** @private */\n _detailsOpenedItemsChanged(detailsOpenedItems, rowDetailsRenderer) {\n iterateChildren(this.$.items, (row) => {\n // Re-renders the row to possibly close the previously opened details.\n if (row.hasAttribute('details-opened')) {\n this._updateItem(row, row._item);\n return;\n }\n\n // Re-renders the row to open the details when a row details renderer is provided.\n if (rowDetailsRenderer && this._isDetailsOpened(row._item)) {\n this._updateItem(row, row._item);\n }\n });\n }\n\n /**\n * @param {!HTMLElement} cell\n * @protected\n */\n _configureDetailsCell(cell) {\n cell.setAttribute('part', 'cell details-cell');\n // Freeze the details cell, so that it does not scroll horizontally\n // with the normal cells. This way it looks less weird.\n cell.toggleAttribute('frozen', true);\n\n this._detailsCellResizeObserver.observe(cell);\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {!GridItem} item\n * @protected\n */\n _toggleDetailsCell(row, detailsOpened) {\n const cell = row.querySelector('[part~=\"details-cell\"]');\n if (!cell) {\n return;\n }\n\n cell.hidden = !detailsOpened;\n\n if (cell.hidden) {\n return;\n }\n\n // Assigns a renderer when the details cell is opened.\n // The details cell content is rendered later in the `_updateItem` method.\n if (this.rowDetailsRenderer) {\n cell._renderer = this.rowDetailsRenderer;\n }\n }\n\n /** @protected */\n _updateDetailsCellHeight(row) {\n const cell = row.querySelector('[part~=\"details-cell\"]');\n if (!cell) {\n return;\n }\n\n this.__updateDetailsRowPadding(row, cell);\n // Ensure the row has correct padding after frame (the resize observer might miss it)\n requestAnimationFrame(() => this.__updateDetailsRowPadding(row, cell));\n }\n\n /** @private */\n __updateDetailsRowPadding(row, cell) {\n if (cell.hidden) {\n row.style.removeProperty('padding-bottom');\n } else {\n row.style.setProperty('padding-bottom', `${cell.offsetHeight}px`);\n }\n }\n\n /** @protected */\n _updateDetailsCellHeights() {\n iterateChildren(this.$.items, (row) => {\n this._updateDetailsCellHeight(row);\n });\n }\n\n /**\n * @param {!GridItem} item\n * @return {boolean}\n * @protected\n */\n _isDetailsOpened(item) {\n return this.detailsOpenedItems && this._getItemIndexInArray(item, this.detailsOpenedItems) !== -1;\n }\n\n /**\n * Open the details row of a given item.\n * @param {!GridItem} item\n */\n openItemDetails(item) {\n if (!this._isDetailsOpened(item)) {\n this.detailsOpenedItems = [...this.detailsOpenedItems, item];\n }\n }\n\n /**\n * Close the details row of a given item.\n * @param {!GridItem} item\n */\n closeItemDetails(item) {\n if (this._isDetailsOpened(item)) {\n this.detailsOpenedItems = this.detailsOpenedItems.filter((i) => !this._itemsEqual(i, item));\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * Get the scrollLeft value of the element relative to the direction\n *\n * @param {HTMLElement} element\n * @param {string} direction current direction of the element\n * @return {number} the scrollLeft value.\n */\nexport function getNormalizedScrollLeft(element, direction) {\n const { scrollLeft } = element;\n if (direction !== 'rtl') {\n return scrollLeft;\n }\n\n return element.scrollWidth - element.clientWidth + scrollLeft;\n}\n\n/**\n * Set the scrollLeft value of the element relative to the direction\n *\n * @param {HTMLElement} element\n * @param {string} direction current direction of the element\n * @param {number} scrollLeft the scrollLeft value to be set\n */\nexport function setNormalizedScrollLeft(element, direction, scrollLeft) {\n if (direction !== 'rtl') {\n element.scrollLeft = scrollLeft;\n } else {\n element.scrollLeft = element.clientWidth - element.scrollWidth + scrollLeft;\n }\n}\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { isElementHidden } from '@vaadin/a11y-base';\nimport { animationFrame, microTask, timeOut } from '@vaadin/component-base/src/async.js';\nimport { Debouncer } from '@vaadin/component-base/src/debounce.js';\nimport { getNormalizedScrollLeft } from '@vaadin/component-base/src/dir-utils.js';\nimport { ResizeMixin } from '@vaadin/component-base/src/resize-mixin.js';\n\nconst timeouts = {\n SCROLLING: 500,\n UPDATE_CONTENT_VISIBILITY: 100,\n};\n\n/**\n * @polymerMixin\n */\nexport const ScrollMixin = (superClass) =>\n class ScrollMixin extends ResizeMixin(superClass) {\n static get properties() {\n return {\n /**\n * Allows you to choose between modes for rendering columns in the grid:\n *\n * \"eager\" (default): All columns are rendered upfront, regardless of their visibility within the viewport.\n * This mode should generally be preferred, as it avoids the limitations imposed by the \"lazy\" mode.\n * Use this mode unless the grid has a large number of columns and performance outweighs the limitations\n * in priority.\n *\n * \"lazy\": Optimizes the rendering of cells when there are multiple columns in the grid by virtualizing\n * horizontal scrolling. In this mode, body cells are rendered only when their corresponding columns are\n * inside the visible viewport.\n *\n * Using \"lazy\" rendering should be used only if you're dealing with a large number of columns and performance\n * is your highest priority. For most use cases, the default \"eager\" mode is recommended due to the\n * limitations imposed by the \"lazy\" mode.\n *\n * When using the \"lazy\" mode, keep the following limitations in mind:\n *\n * - Row Height: When only a number of columns are visible at once, the height of a row can only be that of\n * the highest cell currently visible on that row. Make sure each cell on a single row has the same height\n * as all other cells on that row. If row cells have different heights, users may experience jumpiness when\n * scrolling the grid horizontally as lazily rendered cells with different heights are scrolled into view.\n *\n * - Auto-width Columns: For the columns that are initially outside the visible viewport but still use auto-width,\n * only the header content is taken into account when calculating the column width because the body cells\n * of the columns outside the viewport are not initially rendered.\n *\n * - Screen Reader Compatibility: Screen readers may not be able to associate the focused cells with the correct\n * headers when only a subset of the body cells on a row is rendered.\n *\n * - Keyboard Navigation: Tabbing through focusable elements inside the grid body may not work as expected because\n * some of the columns that would include focusable elements in the body cells may be outside the visible viewport\n * and thus not rendered.\n *\n * @attr {eager|lazy} column-rendering\n * @type {!ColumnRendering}\n */\n columnRendering: {\n type: String,\n value: 'eager',\n sync: true,\n },\n\n /**\n * Cached array of frozen cells\n * @private\n */\n _frozenCells: {\n type: Array,\n value: () => [],\n },\n\n /**\n * Cached array of cells frozen to end\n * @private\n */\n _frozenToEndCells: {\n type: Array,\n value: () => [],\n },\n\n /** @private */\n _rowWithFocusedElement: Element,\n };\n }\n\n static get observers() {\n return ['__columnRenderingChanged(_columnTree, columnRendering)'];\n }\n\n /** @private */\n get _scrollLeft() {\n return this.$.table.scrollLeft;\n }\n\n /** @private */\n get _scrollTop() {\n return this.$.table.scrollTop;\n }\n\n /**\n * Override (from iron-scroll-target-behavior) to avoid document scroll\n * @private\n */\n set _scrollTop(top) {\n this.$.table.scrollTop = top;\n }\n\n /** @protected */\n get _lazyColumns() {\n return this.columnRendering === 'lazy';\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.scrollTarget = this.$.table;\n\n this.$.items.addEventListener('focusin', (e) => {\n const itemsIndex = e.composedPath().indexOf(this.$.items);\n this._rowWithFocusedElement = e.composedPath()[itemsIndex - 1];\n });\n this.$.items.addEventListener('focusout', () => {\n this._rowWithFocusedElement = undefined;\n });\n\n this.$.table.addEventListener('scroll', () => this._afterScroll());\n }\n\n /**\n * @protected\n * @override\n */\n _onResize() {\n this._updateOverflow();\n this.__updateHorizontalScrollPosition();\n\n // For Firefox, manually restore last scroll position when grid becomes\n // visible again. This solves an issue where switching visibility of two\n // grids causes Firefox trying to synchronize the scroll positions between\n // the two grid's table elements.\n // See https://github.com/vaadin/web-components/issues/5796\n if (this._firefox) {\n const isVisible = !isElementHidden(this);\n if (isVisible && this.__previousVisible === false) {\n this._scrollTop = this.__memorizedScrollTop || 0;\n }\n this.__previousVisible = isVisible;\n }\n }\n\n /**\n * Scroll to a flat index in the grid. The method doesn't take into account\n * the hierarchy of the items.\n *\n * @param {number} index Row index to scroll to\n * @protected\n */\n _scrollToFlatIndex(index) {\n index = Math.min(this._flatSize - 1, Math.max(0, index));\n this.__virtualizer.scrollToIndex(index);\n this.__scrollIntoViewport(index);\n }\n\n /**\n * Makes sure the row with the given index (if found in the DOM) is fully\n * inside the visible viewport, taking header/footer into account.\n * @private\n */\n __scrollIntoViewport(index) {\n const rowElement = [...this.$.items.children].find((child) => child.index === index);\n if (rowElement) {\n const dstRect = rowElement.getBoundingClientRect();\n const footerTop = this.$.footer.getBoundingClientRect().top;\n const headerBottom = this.$.header.getBoundingClientRect().bottom;\n if (dstRect.bottom > footerTop) {\n this.$.table.scrollTop += dstRect.bottom - footerTop;\n } else if (dstRect.top < headerBottom) {\n this.$.table.scrollTop -= headerBottom - dstRect.top;\n }\n }\n }\n\n /** @private */\n _scheduleScrolling() {\n if (!this._scrollingFrame) {\n // Defer setting state attributes to avoid Edge hiccups\n this._scrollingFrame = requestAnimationFrame(() => this.$.scroller.toggleAttribute('scrolling', true));\n }\n this._debounceScrolling = Debouncer.debounce(this._debounceScrolling, timeOut.after(timeouts.SCROLLING), () => {\n cancelAnimationFrame(this._scrollingFrame);\n delete this._scrollingFrame;\n this.$.scroller.toggleAttribute('scrolling', false);\n });\n }\n\n /** @private */\n _afterScroll() {\n this.__updateHorizontalScrollPosition();\n\n if (!this.hasAttribute('reordering')) {\n this._scheduleScrolling();\n }\n if (!this.hasAttribute('navigating')) {\n this._hideTooltip(true);\n }\n\n this._updateOverflow();\n\n this._debounceColumnContentVisibility = Debouncer.debounce(\n this._debounceColumnContentVisibility,\n timeOut.after(timeouts.UPDATE_CONTENT_VISIBILITY),\n () => {\n // If horizontal scroll position changed and lazy column rendering is enabled,\n // update the visible columns.\n if (this._lazyColumns && this.__cachedScrollLeft !== this._scrollLeft) {\n this.__cachedScrollLeft = this._scrollLeft;\n this.__updateColumnsBodyContentHidden();\n }\n },\n );\n\n // Memorize last scroll position in Firefox\n if (this._firefox) {\n const isVisible = !isElementHidden(this);\n if (isVisible && this.__previousVisible !== false) {\n this.__memorizedScrollTop = this._scrollTop;\n }\n }\n }\n\n /** @private */\n __updateColumnsBodyContentHidden() {\n if (!this._columnTree) {\n return;\n }\n\n const columnsInOrder = this._getColumnsInOrder();\n\n // Return if sizer cells are not yet assigned to columns\n if (!columnsInOrder[0] || !columnsInOrder[0]._sizerCell) {\n return;\n }\n\n let bodyContentHiddenChanged = false;\n\n // Remove the column cells from the DOM if the column is outside the viewport.\n // Add the column cells to the DOM if the column is inside the viewport.\n //\n // Update the _bodyContentHidden property of the column to reflect the current\n // visibility state and make it run renderers for the cells if necessary.\n columnsInOrder.forEach((column) => {\n const bodyContentHidden = this._lazyColumns && !this.__isColumnInViewport(column);\n\n if (column._bodyContentHidden !== bodyContentHidden) {\n bodyContentHiddenChanged = true;\n column._cells.forEach((cell) => {\n if (cell !== column._sizerCell) {\n if (bodyContentHidden) {\n cell.remove();\n } else if (cell.__parentRow) {\n // Add the cell to the correct DOM position in the row\n const followingColumnCell = [...cell.__parentRow.children].find(\n (child) => columnsInOrder.indexOf(child._column) > columnsInOrder.indexOf(column),\n );\n cell.__parentRow.insertBefore(cell, followingColumnCell);\n }\n }\n });\n }\n\n column._bodyContentHidden = bodyContentHidden;\n });\n\n if (bodyContentHiddenChanged) {\n // Frozen columns may have changed their visibility\n this._frozenCellsChanged();\n }\n\n if (this._lazyColumns) {\n // Calculate the offset to apply to the body cells\n const lastFrozenColumn = [...columnsInOrder].reverse().find((column) => column.frozen);\n const lastFrozenColumnEnd = this.__getColumnEnd(lastFrozenColumn);\n const firstVisibleColumn = columnsInOrder.find((column) => !column.frozen && !column._bodyContentHidden);\n this.__lazyColumnsStart = this.__getColumnStart(firstVisibleColumn) - lastFrozenColumnEnd;\n this.$.items.style.setProperty('--_grid-lazy-columns-start', `${this.__lazyColumnsStart}px`);\n\n // Make sure the body has a focusable element in lazy columns mode\n this._resetKeyboardNavigation();\n }\n }\n\n /** @private */\n __getColumnEnd(column) {\n if (!column) {\n return this.__isRTL ? this.$.table.clientWidth : 0;\n }\n return column._sizerCell.offsetLeft + (this.__isRTL ? 0 : column._sizerCell.offsetWidth);\n }\n\n /** @private */\n __getColumnStart(column) {\n if (!column) {\n return this.__isRTL ? this.$.table.clientWidth : 0;\n }\n return column._sizerCell.offsetLeft + (this.__isRTL ? column._sizerCell.offsetWidth : 0);\n }\n\n /**\n * Returns true if the given column is horizontally inside the viewport.\n * @private\n */\n __isColumnInViewport(column) {\n if (column.frozen || column.frozenToEnd) {\n // Assume frozen columns to always be inside the viewport\n return true;\n }\n\n // Check if the column's sizer cell is inside the viewport\n return this.__isHorizontallyInViewport(column._sizerCell);\n }\n\n /** @private */\n __isHorizontallyInViewport(element) {\n return (\n element.offsetLeft + element.offsetWidth >= this._scrollLeft &&\n element.offsetLeft <= this._scrollLeft + this.clientWidth\n );\n }\n\n /** @private */\n __columnRenderingChanged(_columnTree, columnRendering) {\n if (columnRendering === 'eager') {\n this.$.scroller.removeAttribute('column-rendering');\n } else {\n this.$.scroller.setAttribute('column-rendering', columnRendering);\n }\n\n this.__updateColumnsBodyContentHidden();\n }\n\n /** @private */\n _updateOverflow() {\n this._debounceOverflow = Debouncer.debounce(this._debounceOverflow, animationFrame, () => {\n this.__doUpdateOverflow();\n });\n }\n\n /** @private */\n __doUpdateOverflow() {\n // Set overflow styling attributes\n let overflow = '';\n const table = this.$.table;\n if (table.scrollTop < table.scrollHeight - table.clientHeight) {\n overflow += ' bottom';\n }\n\n if (table.scrollTop > 0) {\n overflow += ' top';\n }\n\n const scrollLeft = getNormalizedScrollLeft(table, this.getAttribute('dir'));\n if (scrollLeft > 0) {\n overflow += ' start';\n }\n\n if (scrollLeft < table.scrollWidth - table.clientWidth) {\n overflow += ' end';\n }\n\n if (this.__isRTL) {\n overflow = overflow.replace(/start|end/giu, (matched) => {\n return matched === 'start' ? 'end' : 'start';\n });\n }\n\n // TODO: Remove \"right\" and \"left\" values in the next major.\n if (table.scrollLeft < table.scrollWidth - table.clientWidth) {\n overflow += ' right';\n }\n\n if (table.scrollLeft > 0) {\n overflow += ' left';\n }\n\n const value = overflow.trim();\n if (value.length > 0 && this.getAttribute('overflow') !== value) {\n this.setAttribute('overflow', value);\n } else if (value.length === 0 && this.hasAttribute('overflow')) {\n this.removeAttribute('overflow');\n }\n }\n\n /** @protected */\n _frozenCellsChanged() {\n this._debouncerCacheElements = Debouncer.debounce(this._debouncerCacheElements, microTask, () => {\n Array.from(this.shadowRoot.querySelectorAll('[part~=\"cell\"]')).forEach((cell) => {\n cell.style.transform = '';\n });\n this._frozenCells = Array.prototype.slice.call(this.$.table.querySelectorAll('[frozen]'));\n this._frozenToEndCells = Array.prototype.slice.call(this.$.table.querySelectorAll('[frozen-to-end]'));\n this.__updateHorizontalScrollPosition();\n });\n this._debounceUpdateFrozenColumn();\n }\n\n /** @protected */\n _debounceUpdateFrozenColumn() {\n this.__debounceUpdateFrozenColumn = Debouncer.debounce(this.__debounceUpdateFrozenColumn, microTask, () =>\n this._updateFrozenColumn(),\n );\n }\n\n /** @private */\n _updateFrozenColumn() {\n if (!this._columnTree) {\n return;\n }\n\n const columnsRow = this._columnTree[this._columnTree.length - 1].slice(0);\n columnsRow.sort((a, b) => {\n return a._order - b._order;\n });\n\n let lastFrozen;\n let firstFrozenToEnd;\n\n // Use for loop to only iterate columns once\n for (let i = 0; i < columnsRow.length; i++) {\n const col = columnsRow[i];\n\n col._lastFrozen = false;\n col._firstFrozenToEnd = false;\n\n if (firstFrozenToEnd === undefined && col.frozenToEnd && !col.hidden) {\n firstFrozenToEnd = i;\n }\n\n if (col.frozen && !col.hidden) {\n lastFrozen = i;\n }\n }\n\n if (lastFrozen !== undefined) {\n columnsRow[lastFrozen]._lastFrozen = true;\n }\n\n if (firstFrozenToEnd !== undefined) {\n columnsRow[firstFrozenToEnd]._firstFrozenToEnd = true;\n }\n\n this.__updateColumnsBodyContentHidden();\n }\n\n /** @private */\n __updateHorizontalScrollPosition() {\n if (!this._columnTree) {\n return;\n }\n const scrollWidth = this.$.table.scrollWidth;\n const clientWidth = this.$.table.clientWidth;\n const scrollLeft = Math.max(0, this.$.table.scrollLeft);\n const normalizedScrollLeft = getNormalizedScrollLeft(this.$.table, this.getAttribute('dir'));\n\n // Position header, footer and items container\n const transform = `translate(${-scrollLeft}px, 0)`;\n this.$.header.style.transform = transform;\n this.$.footer.style.transform = transform;\n this.$.items.style.transform = transform;\n\n // Position frozen cells\n const x = this.__isRTL ? normalizedScrollLeft + clientWidth - scrollWidth : scrollLeft;\n const transformFrozen = `translate(${x}px, 0)`;\n this._frozenCells.forEach((cell) => {\n cell.style.transform = transformFrozen;\n });\n\n // Position cells frozen to end\n const remaining = this.__isRTL ? normalizedScrollLeft : scrollLeft + clientWidth - scrollWidth;\n const transformFrozenToEnd = `translate(${remaining}px, 0)`;\n\n let transformFrozenToEndBody = transformFrozenToEnd;\n\n if (this._lazyColumns) {\n // Lazy column rendering is used, calculate the offset to apply to the frozen to end cells\n const columnsInOrder = this._getColumnsInOrder();\n\n const lastVisibleColumn = [...columnsInOrder]\n .reverse()\n .find((column) => !column.frozenToEnd && !column._bodyContentHidden);\n const lastVisibleColumnEnd = this.__getColumnEnd(lastVisibleColumn);\n\n const firstFrozenToEndColumn = columnsInOrder.find((column) => column.frozenToEnd);\n const firstFrozenToEndColumnStart = this.__getColumnStart(firstFrozenToEndColumn);\n\n const translateX = remaining + (firstFrozenToEndColumnStart - lastVisibleColumnEnd) + this.__lazyColumnsStart;\n transformFrozenToEndBody = `translate(${translateX}px, 0)`;\n }\n\n this._frozenToEndCells.forEach((cell) => {\n if (this.$.items.contains(cell)) {\n cell.style.transform = transformFrozenToEndBody;\n } else {\n cell.style.transform = transformFrozenToEnd;\n }\n });\n\n // Only update the --_grid-horizontal-scroll-position custom property when navigating\n // on row focus mode to avoid performance issues.\n if (this.hasAttribute('navigating') && this.__rowFocusMode) {\n this.$.table.style.setProperty('--_grid-horizontal-scroll-position', `${-x}px`);\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\n/**\n * @polymerMixin\n */\nexport const SelectionMixin = (superClass) =>\n class SelectionMixin extends superClass {\n static get properties() {\n return {\n /**\n * An array that contains the selected items.\n * @type {!Array<!GridItem>}\n */\n selectedItems: {\n type: Object,\n notify: true,\n value: () => [],\n sync: true,\n },\n\n /**\n * Set of selected item ids\n * @private\n */\n __selectedKeys: {\n type: Object,\n computed: '__computeSelectedKeys(itemIdPath, selectedItems)',\n },\n };\n }\n\n static get observers() {\n return ['__selectedItemsChanged(itemIdPath, selectedItems)'];\n }\n\n /**\n * @param {!GridItem} item\n * @return {boolean}\n * @protected\n */\n _isSelected(item) {\n return this.__selectedKeys.has(this.getItemId(item));\n }\n\n /**\n * Selects the given item.\n *\n * @method selectItem\n * @param {!GridItem} item The item object\n */\n selectItem(item) {\n if (!this._isSelected(item)) {\n this.selectedItems = [...this.selectedItems, item];\n }\n }\n\n /**\n * Deselects the given item if it is already selected.\n *\n * @method deselect\n * @param {!GridItem} item The item object\n */\n deselectItem(item) {\n if (this._isSelected(item)) {\n this.selectedItems = this.selectedItems.filter((i) => !this._itemsEqual(i, item));\n }\n }\n\n /**\n * Toggles the selected state of the given item.\n *\n * @method toggle\n * @param {!GridItem} item The item object\n * @protected\n */\n _toggleItem(item) {\n if (!this._isSelected(item)) {\n this.selectItem(item);\n } else {\n this.deselectItem(item);\n }\n }\n\n /** @private */\n __selectedItemsChanged() {\n this.requestContentUpdate();\n }\n\n /** @private */\n __computeSelectedKeys(itemIdPath, selectedItems) {\n const selected = selectedItems || [];\n const selectedKeys = new Set();\n selected.forEach((item) => {\n selectedKeys.add(this.getItemId(item));\n });\n\n return selectedKeys;\n }\n\n /**\n * Fired when the `selectedItems` property changes.\n *\n * @event selected-items-changed\n */\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\n\nlet defaultMultiSortPriority = 'prepend';\n\n/**\n * @polymerMixin\n */\nexport const SortMixin = (superClass) =>\n class SortMixin extends superClass {\n static get properties() {\n return {\n /**\n * When `true`, all `<vaadin-grid-sorter>` are applied for sorting.\n * @attr {boolean} multi-sort\n * @type {boolean}\n */\n multiSort: {\n type: Boolean,\n value: false,\n },\n\n /**\n * Controls how columns are added to the sort order when using multi-sort.\n * The sort order is visually indicated by numbers in grid sorters placed in column headers.\n *\n * By default, whenever an unsorted column is sorted, or the sort-direction of a column is\n * changed, that column gets sort priority 1, thus affecting the priority for all the other\n * sorted columns. This is identical to using `multi-sort-priority=\"prepend\"`.\n *\n * Using this property allows to change this behavior so that sorting an unsorted column\n * would add it to the \"end\" of the sort, and changing column's sort direction would retain\n * it's previous priority. To set this, use `multi-sort-priority=\"append\"`.\n *\n * @attr {string} multi-sort-priority\n */\n multiSortPriority: {\n type: String,\n value: () => defaultMultiSortPriority,\n },\n\n /**\n * When `true`, Shift-clicking an unsorted column's sorter adds it to the multi-sort.\n * Shift + Space does the same action via keyboard. This property has precedence over the\n * `multiSort` property. If `multiSortOnShiftClick` is true, the multiSort property is effectively ignored.\n *\n * @attr {boolean} multi-sort-on-shift-click\n * @type {boolean}\n */\n multiSortOnShiftClick: {\n type: Boolean,\n value: false,\n },\n\n /**\n * @type {!Array<!GridSorterDefinition>}\n * @protected\n */\n _sorters: {\n type: Array,\n value: () => [],\n },\n\n /** @private */\n _previousSorters: {\n type: Array,\n value: () => [],\n },\n };\n }\n\n /**\n * Sets the default multi-sort priority to use for all grid instances.\n * This method should be called before creating any grid instances.\n * Changing this setting does not affect the default for existing grids.\n *\n * @param {string} priority\n */\n static setDefaultMultiSortPriority(priority) {\n defaultMultiSortPriority = ['append', 'prepend'].includes(priority) ? priority : 'prepend';\n }\n\n /** @protected */\n ready() {\n super.ready();\n this.addEventListener('sorter-changed', this._onSorterChanged);\n }\n\n /** @private */\n _onSorterChanged(e) {\n const sorter = e.target;\n e.stopPropagation();\n sorter._grid = this;\n this.__updateSorter(sorter, e.detail.shiftClick, e.detail.fromSorterClick);\n this.__applySorters();\n }\n\n /** @private */\n __removeSorters(sortersToRemove) {\n if (sortersToRemove.length === 0) {\n return;\n }\n\n this._sorters = this._sorters.filter((sorter) => sortersToRemove.indexOf(sorter) < 0);\n if (this.multiSort) {\n this.__updateSortOrders();\n }\n this.__applySorters();\n }\n\n /** @private */\n __updateSortOrders() {\n this._sorters.forEach((sorter, index) => {\n sorter._order = this._sorters.length > 1 ? index : null;\n });\n }\n\n /** @private */\n __appendSorter(sorter) {\n if (!sorter.direction) {\n this._removeArrayItem(this._sorters, sorter);\n } else if (!this._sorters.includes(sorter)) {\n this._sorters.push(sorter);\n }\n\n this.__updateSortOrders();\n }\n\n /** @private */\n __prependSorter(sorter) {\n this._removeArrayItem(this._sorters, sorter);\n if (sorter.direction) {\n this._sorters.unshift(sorter);\n }\n this.__updateSortOrders();\n }\n\n /** @private */\n __updateSorter(sorter, shiftClick, fromSorterClick) {\n if (!sorter.direction && this._sorters.indexOf(sorter) === -1) {\n return;\n }\n\n sorter._order = null;\n\n if (\n (this.multiSort && (!this.multiSortOnShiftClick || !fromSorterClick)) ||\n (this.multiSortOnShiftClick && shiftClick)\n ) {\n if (this.multiSortPriority === 'append') {\n this.__appendSorter(sorter);\n } else {\n this.__prependSorter(sorter);\n }\n } else if (sorter.direction || this.multiSortOnShiftClick) {\n const otherSorters = this._sorters.filter((s) => s !== sorter);\n this._sorters = sorter.direction ? [sorter] : [];\n otherSorters.forEach((sorter) => {\n sorter._order = null;\n sorter.direction = null;\n });\n }\n }\n\n /** @private */\n __applySorters() {\n if (\n this.dataProvider &&\n // No need to clear cache if sorters didn't change and grid is attached\n this.isAttached &&\n JSON.stringify(this._previousSorters) !== JSON.stringify(this._mapSorters())\n ) {\n this.__debounceClearCache();\n }\n\n this._a11yUpdateSorters();\n\n this._previousSorters = this._mapSorters();\n }\n\n /**\n * @return {!Array<!GridSorterDefinition>}\n * @protected\n */\n _mapSorters() {\n return this._sorters.map((sorter) => {\n return {\n path: sorter.path,\n direction: sorter.direction,\n };\n });\n }\n\n /** @private */\n _removeArrayItem(array, item) {\n const index = array.indexOf(item);\n if (index > -1) {\n array.splice(index, 1);\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { iterateChildren, iterateRowCells, updatePart } from './vaadin-grid-helpers.js';\n\n/**\n * @polymerMixin\n */\nexport const StylingMixin = (superClass) =>\n class StylingMixin extends superClass {\n static get properties() {\n return {\n /**\n * A function that allows generating CSS class names for grid cells\n * based on their row and column. The return value should be the generated\n * class name as a string, or multiple class names separated by whitespace\n * characters.\n *\n * Receives two arguments:\n * - `column` The `<vaadin-grid-column>` element (`undefined` for details-cell).\n * - `model` The object with the properties related with\n * the rendered item, contains:\n * - `model.index` The index of the item.\n * - `model.item` The item.\n * - `model.expanded` Sublevel toggle state.\n * - `model.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `model.selected` Selected state.\n *\n * @type {GridCellClassNameGenerator | null | undefined}\n * @deprecated Use `cellPartNameGenerator` instead.\n */\n cellClassNameGenerator: {\n type: Function,\n sync: true,\n },\n\n /**\n * A function that allows generating CSS `part` names for grid cells in Shadow DOM based\n * on their row and column, for styling from outside using the `::part()` selector.\n *\n * The return value should be the generated part name as a string, or multiple part names\n * separated by whitespace characters.\n *\n * Receives two arguments:\n * - `column` The `<vaadin-grid-column>` element (`undefined` for details-cell).\n * - `model` The object with the properties related with\n * the rendered item, contains:\n * - `model.index` The index of the item.\n * - `model.item` The item.\n * - `model.expanded` Sublevel toggle state.\n * - `model.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `model.selected` Selected state.\n *\n * @type {GridCellPartNameGenerator | null | undefined}\n */\n cellPartNameGenerator: {\n type: Function,\n sync: true,\n },\n };\n }\n\n static get observers() {\n return [\n '__cellClassNameGeneratorChanged(cellClassNameGenerator)',\n '__cellPartNameGeneratorChanged(cellPartNameGenerator)',\n ];\n }\n\n /** @private */\n __cellClassNameGeneratorChanged() {\n this.generateCellClassNames();\n }\n\n /** @private */\n __cellPartNameGeneratorChanged() {\n this.generateCellPartNames();\n }\n\n /**\n * Runs the `cellClassNameGenerator` for the visible cells.\n * If the generator depends on varying conditions, you need to\n * call this function manually in order to update the styles when\n * the conditions change.\n *\n * @deprecated Use `cellPartNameGenerator` and `generateCellPartNames()` instead.\n */\n generateCellClassNames() {\n iterateChildren(this.$.items, (row) => {\n if (!row.hidden && !row.hasAttribute('loading')) {\n this._generateCellClassNames(row, this.__getRowModel(row));\n }\n });\n }\n\n /**\n * Runs the `cellPartNameGenerator` for the visible cells.\n * If the generator depends on varying conditions, you need to\n * call this function manually in order to update the styles when\n * the conditions change.\n */\n generateCellPartNames() {\n iterateChildren(this.$.items, (row) => {\n if (!row.hidden && !row.hasAttribute('loading')) {\n this._generateCellPartNames(row, this.__getRowModel(row));\n }\n });\n }\n\n /** @private */\n _generateCellClassNames(row, model) {\n iterateRowCells(row, (cell) => {\n if (cell.__generatedClasses) {\n cell.__generatedClasses.forEach((className) => cell.classList.remove(className));\n }\n if (this.cellClassNameGenerator) {\n const result = this.cellClassNameGenerator(cell._column, model);\n cell.__generatedClasses = result && result.split(' ').filter((className) => className.length > 0);\n if (cell.__generatedClasses) {\n cell.__generatedClasses.forEach((className) => cell.classList.add(className));\n }\n }\n });\n }\n\n /** @private */\n _generateCellPartNames(row, model) {\n iterateRowCells(row, (cell) => {\n if (cell.__generatedParts) {\n cell.__generatedParts.forEach((partName) => {\n // Remove previously generated part names\n updatePart(cell, null, partName);\n });\n }\n if (this.cellPartNameGenerator) {\n const result = this.cellPartNameGenerator(cell._column, model);\n cell.__generatedParts = result && result.split(' ').filter((partName) => partName.length > 0);\n if (cell.__generatedParts) {\n cell.__generatedParts.forEach((partName) => {\n // Add the newly generated names to part\n updatePart(cell, true, partName);\n });\n }\n }\n });\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { isElementHidden } from '@vaadin/a11y-base/src/focus-utils.js';\nimport { TabindexMixin } from '@vaadin/a11y-base/src/tabindex-mixin.js';\nimport { animationFrame, microTask } from '@vaadin/component-base/src/async.js';\nimport { isAndroid, isChrome, isFirefox, isIOS, isSafari, isTouch } from '@vaadin/component-base/src/browser-utils.js';\nimport { Debouncer } from '@vaadin/component-base/src/debounce.js';\nimport { getClosestElement } from '@vaadin/component-base/src/dom-utils.js';\nimport { processTemplates } from '@vaadin/component-base/src/templates.js';\nimport { TooltipController } from '@vaadin/component-base/src/tooltip-controller.js';\nimport { Virtualizer } from '@vaadin/component-base/src/virtualizer.js';\nimport { A11yMixin } from './vaadin-grid-a11y-mixin.js';\nimport { ActiveItemMixin } from './vaadin-grid-active-item-mixin.js';\nimport { ArrayDataProviderMixin } from './vaadin-grid-array-data-provider-mixin.js';\nimport { ColumnReorderingMixin } from './vaadin-grid-column-reordering-mixin.js';\nimport { ColumnResizingMixin } from './vaadin-grid-column-resizing-mixin.js';\nimport { DataProviderMixin } from './vaadin-grid-data-provider-mixin.js';\nimport { DragAndDropMixin } from './vaadin-grid-drag-and-drop-mixin.js';\nimport { DynamicColumnsMixin } from './vaadin-grid-dynamic-columns-mixin.js';\nimport { EventContextMixin } from './vaadin-grid-event-context-mixin.js';\nimport { FilterMixin } from './vaadin-grid-filter-mixin.js';\nimport {\n getBodyRowCells,\n iterateChildren,\n iterateRowCells,\n updateBooleanRowStates,\n updateCellsPart,\n} from './vaadin-grid-helpers.js';\nimport { KeyboardNavigationMixin } from './vaadin-grid-keyboard-navigation-mixin.js';\nimport { RowDetailsMixin } from './vaadin-grid-row-details-mixin.js';\nimport { ScrollMixin } from './vaadin-grid-scroll-mixin.js';\nimport { SelectionMixin } from './vaadin-grid-selection-mixin.js';\nimport { SortMixin } from './vaadin-grid-sort-mixin.js';\nimport { StylingMixin } from './vaadin-grid-styling-mixin.js';\n\n/**\n * A mixin providing common grid functionality.\n *\n * @polymerMixin\n * @mixes A11yMixin\n * @mixes ActiveItemMixin\n * @mixes ArrayDataProviderMixin\n * @mixes ColumnResizingMixin\n * @mixes DataProviderMixin\n * @mixes DynamicColumnsMixin\n * @mixes FilterMixin\n * @mixes RowDetailsMixin\n * @mixes ScrollMixin\n * @mixes SelectionMixin\n * @mixes SortMixin\n * @mixes KeyboardNavigationMixin\n * @mixes ColumnReorderingMixin\n * @mixes EventContextMixin\n * @mixes StylingMixin\n * @mixes DragAndDropMixin\n */\nexport const GridMixin = (superClass) =>\n class extends ArrayDataProviderMixin(\n DataProviderMixin(\n DynamicColumnsMixin(\n ActiveItemMixin(\n ScrollMixin(\n SelectionMixin(\n SortMixin(\n RowDetailsMixin(\n KeyboardNavigationMixin(\n A11yMixin(\n FilterMixin(\n ColumnReorderingMixin(\n ColumnResizingMixin(\n EventContextMixin(DragAndDropMixin(StylingMixin(TabindexMixin(superClass)))),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ) {\n static get observers() {\n return ['_columnTreeChanged(_columnTree)', '_flatSizeChanged(_flatSize, __virtualizer, _hasData, _columnTree)'];\n }\n\n static get properties() {\n return {\n /** @private */\n _safari: {\n type: Boolean,\n value: isSafari,\n },\n\n /** @private */\n _ios: {\n type: Boolean,\n value: isIOS,\n },\n\n /** @private */\n _firefox: {\n type: Boolean,\n value: isFirefox,\n },\n\n /** @private */\n _android: {\n type: Boolean,\n value: isAndroid,\n },\n\n /** @private */\n _touchDevice: {\n type: Boolean,\n value: isTouch,\n },\n\n /**\n * If true, the grid's height is defined by its rows.\n *\n * Effectively, this disables the grid's virtual scrolling so that all the rows are rendered in the DOM at once.\n * If the grid has a large number of items, using the feature is discouraged to avoid performance issues.\n * @attr {boolean} all-rows-visible\n * @type {boolean}\n */\n allRowsVisible: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n },\n\n /** @private */\n __pendingRecalculateColumnWidths: {\n type: Boolean,\n value: true,\n },\n\n /** @private */\n isAttached: {\n value: false,\n },\n\n /**\n * An internal property that is mainly used by `vaadin-template-renderer`\n * to identify grid elements.\n *\n * @private\n */\n __gridElement: {\n type: Boolean,\n value: true,\n },\n };\n }\n\n constructor() {\n super();\n this.addEventListener('animationend', this._onAnimationEnd);\n }\n\n /** @private */\n get _firstVisibleIndex() {\n const firstVisibleItem = this.__getFirstVisibleItem();\n return firstVisibleItem ? firstVisibleItem.index : undefined;\n }\n\n /** @private */\n get _lastVisibleIndex() {\n const lastVisibleItem = this.__getLastVisibleItem();\n return lastVisibleItem ? lastVisibleItem.index : undefined;\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n this.isAttached = true;\n this.recalculateColumnWidths();\n }\n\n /** @protected */\n disconnectedCallback() {\n super.disconnectedCallback();\n this.isAttached = false;\n this._hideTooltip(true);\n }\n\n /** @private */\n __getFirstVisibleItem() {\n return this._getRenderedRows().find((row) => this._isInViewport(row));\n }\n\n /** @private */\n __getLastVisibleItem() {\n return this._getRenderedRows()\n .reverse()\n .find((row) => this._isInViewport(row));\n }\n\n /** @private */\n _isInViewport(item) {\n const scrollTargetRect = this.$.table.getBoundingClientRect();\n const itemRect = item.getBoundingClientRect();\n const headerHeight = this.$.header.getBoundingClientRect().height;\n const footerHeight = this.$.footer.getBoundingClientRect().height;\n return (\n itemRect.bottom > scrollTargetRect.top + headerHeight && itemRect.top < scrollTargetRect.bottom - footerHeight\n );\n }\n\n /** @private */\n _getRenderedRows() {\n return Array.from(this.$.items.children)\n .filter((item) => !item.hidden)\n .sort((a, b) => a.index - b.index);\n }\n\n /** @protected */\n _getRowContainingNode(node) {\n const content = getClosestElement('vaadin-grid-cell-content', node);\n if (!content) {\n return;\n }\n\n const cell = content.assignedSlot.parentElement;\n return cell.parentElement;\n }\n\n /** @protected */\n _isItemAssignedToRow(item, row) {\n const model = this.__getRowModel(row);\n return this.getItemId(item) === this.getItemId(model.item);\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.__virtualizer = new Virtualizer({\n createElements: this._createScrollerRows.bind(this),\n updateElement: this._updateScrollerItem.bind(this),\n scrollContainer: this.$.items,\n scrollTarget: this.$.table,\n reorderElements: true,\n });\n\n new ResizeObserver(() =>\n setTimeout(() => {\n this.__updateColumnsBodyContentHidden();\n this.__tryToRecalculateColumnWidthsIfPending();\n }),\n ).observe(this.$.table);\n\n processTemplates(this);\n\n this._tooltipController = new TooltipController(this);\n this.addController(this._tooltipController);\n this._tooltipController.setManual(true);\n }\n\n /** @private */\n __getBodyCellCoordinates(cell) {\n if (this.$.items.contains(cell) && cell.localName === 'td') {\n return {\n item: cell.parentElement._item,\n column: cell._column,\n };\n }\n }\n\n /** @private */\n __focusBodyCell({ item, column }) {\n const row = this._getRenderedRows().find((row) => row._item === item);\n const cell = row && [...row.children].find((cell) => cell._column === column);\n if (cell) {\n cell.focus();\n }\n }\n\n /** @protected */\n _focusFirstVisibleRow() {\n const row = this.__getFirstVisibleItem();\n this.__rowFocusMode = true;\n row.focus();\n }\n\n /** @private */\n _flatSizeChanged(flatSize, virtualizer, hasData, columnTree) {\n if (virtualizer && hasData && columnTree) {\n // Changing the virtualizer size may result in the row with focus getting hidden\n const cell = this.shadowRoot.activeElement;\n const cellCoordinates = this.__getBodyCellCoordinates(cell);\n\n const previousSize = virtualizer.size || 0;\n virtualizer.size = flatSize;\n\n // Request an update for the previous last row to have the \"last\" state removed\n virtualizer.update(previousSize - 1, previousSize - 1);\n if (flatSize < previousSize) {\n // Size was decreased, so the new last row requires an explicit update\n virtualizer.update(flatSize - 1, flatSize - 1);\n }\n\n // If the focused cell's parent row got hidden by the size change, focus the corresponding new cell\n if (cellCoordinates && cell.parentElement.hidden) {\n this.__focusBodyCell(cellCoordinates);\n }\n\n // Make sure the body has a tabbable element\n this._resetKeyboardNavigation();\n }\n }\n\n /** @private */\n __hasRowsWithClientHeight() {\n return !!Array.from(this.$.items.children).filter((row) => row.clientHeight).length;\n }\n\n /** @private */\n __getIntrinsicWidth(col) {\n if (!this.__intrinsicWidthCache.has(col)) {\n this.__calculateAndCacheIntrinsicWidths([col]);\n }\n return this.__intrinsicWidthCache.get(col);\n }\n\n /** @private */\n __getDistributedWidth(col, innerColumn) {\n if (col == null || col === this) {\n return 0;\n }\n\n const columnWidth = Math.max(\n this.__getIntrinsicWidth(col),\n this.__getDistributedWidth((col.assignedSlot || col).parentElement, col),\n );\n\n // We're processing a regular grid-column and not a grid-column-group\n if (!innerColumn) {\n return columnWidth;\n }\n\n // At the end, the width of each vaadin-grid-column-group is determined by the sum of the width of its children.\n // Here we determine how much space the vaadin-grid-column-group actually needs to render properly and then we distribute that space\n // to its children, so when we actually do the summation it will be rendered properly.\n // Check out vaadin-grid-column-group:_updateFlexAndWidth\n const columnGroup = col;\n const columnGroupWidth = columnWidth;\n const sumOfWidthOfAllChildColumns = columnGroup._visibleChildColumns\n .map((col) => this.__getIntrinsicWidth(col))\n .reduce((sum, curr) => sum + curr, 0);\n\n const extraNecessarySpaceForGridColumnGroup = Math.max(0, columnGroupWidth - sumOfWidthOfAllChildColumns);\n\n // The distribution of the extra necessary space is done according to the intrinsic width of each child column.\n // Lets say we need 100 pixels of extra space for the grid-column-group to render properly\n // it has two grid-column children, |100px|300px| in total 400px\n // the first column gets 25px of the additional space (100/400)*100 = 25\n // the second column gets the 75px of the additional space (300/400)*100 = 75\n const proportionOfExtraSpace = this.__getIntrinsicWidth(innerColumn) / sumOfWidthOfAllChildColumns;\n const shareOfInnerColumnFromNecessaryExtraSpace = proportionOfExtraSpace * extraNecessarySpaceForGridColumnGroup;\n\n return this.__getIntrinsicWidth(innerColumn) + shareOfInnerColumnFromNecessaryExtraSpace;\n }\n\n /**\n * @param {!Array<!GridColumn>} cols the columns to auto size based on their content width\n * @private\n */\n _recalculateColumnWidths(cols) {\n // Flush to make sure DOM is up-to-date when measuring the column widths\n this.__virtualizer.flush();\n [...this.$.header.children, ...this.$.footer.children].forEach((row) => {\n if (row.__debounceUpdateHeaderFooterRowVisibility) {\n row.__debounceUpdateHeaderFooterRowVisibility.flush();\n }\n });\n\n // Flush to account for any changes to the visibility of the columns\n if (this._debouncerHiddenChanged) {\n this._debouncerHiddenChanged.flush();\n }\n\n this.__intrinsicWidthCache = new Map();\n // Cache the viewport rows to avoid unnecessary reflows while measuring the column widths\n const fvi = this._firstVisibleIndex;\n const lvi = this._lastVisibleIndex;\n this.__viewportRowsCache = this._getRenderedRows().filter((row) => row.index >= fvi && row.index <= lvi);\n\n // Pre-cache the intrinsic width of each column\n this.__calculateAndCacheIntrinsicWidths(cols);\n\n cols.forEach((col) => {\n col.width = `${this.__getDistributedWidth(col)}px`;\n });\n }\n\n /**\n * Toggles the cell content for the given column to use or not use auto width.\n *\n * While content for all the column cells uses auto width (instead of the default 100%),\n * their offsetWidth can be used to calculate the collective intrinsic width of the column.\n *\n * @private\n */\n __setVisibleCellContentAutoWidth(col, autoWidth) {\n col._allCells\n .filter((cell) => {\n if (this.$.items.contains(cell)) {\n return this.__viewportRowsCache.includes(cell.parentElement);\n }\n return true;\n })\n .forEach((cell) => {\n cell.__measuringAutoWidth = autoWidth;\n\n if (cell.__measuringAutoWidth) {\n // Store the original inline width of the cell to restore it later\n cell.__originalWidth = cell.style.width;\n // Prepare the cell for having its intrinsic width measured\n cell.style.width = 'auto';\n cell.style.position = 'absolute';\n } else {\n // Restore the original width\n cell.style.width = cell.__originalWidth;\n delete cell.__originalWidth;\n cell.style.position = '';\n }\n });\n }\n\n /**\n * Returns the maximum intrinsic width of the cell content in the given column.\n * Only cells which are marked for measuring auto width are considered.\n *\n * @private\n */\n __getAutoWidthCellsMaxWidth(col) {\n // Note: _allCells only contains cells which are currently rendered in DOM\n return col._allCells.reduce((width, cell) => {\n // Add 1px buffer to the offset width to avoid too narrow columns (sub-pixel rendering)\n return cell.__measuringAutoWidth ? Math.max(width, cell.offsetWidth + 1) : width;\n }, 0);\n }\n\n /**\n * Calculates and caches the intrinsic width of each given column.\n *\n * @private\n */\n __calculateAndCacheIntrinsicWidths(cols) {\n // Make all the columns use auto width at once before measuring to\n // avoid reflows in between the measurements\n cols.forEach((col) => this.__setVisibleCellContentAutoWidth(col, true));\n // Measure and cache\n cols.forEach((col) => {\n const width = this.__getAutoWidthCellsMaxWidth(col);\n this.__intrinsicWidthCache.set(col, width);\n });\n // Reset the columns to use 100% width\n cols.forEach((col) => this.__setVisibleCellContentAutoWidth(col, false));\n }\n\n /**\n * Updates the `width` of all columns which have `autoWidth` set to `true`.\n */\n recalculateColumnWidths() {\n if (!this._columnTree) {\n return; // No columns\n }\n if (isElementHidden(this) || this._dataProviderController.isLoading()) {\n this.__pendingRecalculateColumnWidths = true;\n return;\n }\n const cols = this._getColumns().filter((col) => !col.hidden && col.autoWidth);\n this._recalculateColumnWidths(cols);\n }\n\n /** @private */\n __tryToRecalculateColumnWidthsIfPending() {\n if (\n this.__pendingRecalculateColumnWidths &&\n !isElementHidden(this) &&\n !this._dataProviderController.isLoading() &&\n this.__hasRowsWithClientHeight()\n ) {\n this.__pendingRecalculateColumnWidths = false;\n this.recalculateColumnWidths();\n }\n }\n\n /**\n * @protected\n * @override\n */\n _onDataProviderPageLoaded() {\n super._onDataProviderPageLoaded();\n this.__tryToRecalculateColumnWidthsIfPending();\n }\n\n /** @private */\n _createScrollerRows(count) {\n const rows = [];\n for (let i = 0; i < count; i++) {\n const row = document.createElement('tr');\n row.setAttribute('part', 'row body-row');\n row.setAttribute('role', 'row');\n row.setAttribute('tabindex', '-1');\n if (this._columnTree) {\n this._updateRow(row, this._columnTree[this._columnTree.length - 1], 'body', false, true);\n }\n rows.push(row);\n }\n\n if (this._columnTree) {\n this._columnTree[this._columnTree.length - 1].forEach((c) => {\n if (c.isConnected && c._cells) {\n c._cells = [...c._cells];\n }\n });\n }\n\n this.__afterCreateScrollerRowsDebouncer = Debouncer.debounce(\n this.__afterCreateScrollerRowsDebouncer,\n animationFrame,\n () => {\n this._afterScroll();\n this.__tryToRecalculateColumnWidthsIfPending();\n },\n );\n return rows;\n }\n\n /** @private */\n _createCell(tagName, column) {\n const contentId = (this._contentIndex = this._contentIndex + 1 || 0);\n const slotName = `vaadin-grid-cell-content-${contentId}`;\n\n const cellContent = document.createElement('vaadin-grid-cell-content');\n cellContent.setAttribute('slot', slotName);\n\n const cell = document.createElement(tagName);\n cell.id = slotName.replace('-content-', '-');\n cell.setAttribute('role', tagName === 'td' ? 'gridcell' : 'columnheader');\n\n // For now we only support tooltip on desktop\n if (!isAndroid && !isIOS) {\n cell.addEventListener('mouseenter', (event) => {\n if (!this.$.scroller.hasAttribute('scrolling')) {\n this._showTooltip(event);\n }\n });\n\n cell.addEventListener('mouseleave', () => {\n this._hideTooltip();\n });\n\n cell.addEventListener('mousedown', () => {\n this._hideTooltip(true);\n });\n }\n\n const slot = document.createElement('slot');\n slot.setAttribute('name', slotName);\n\n if (column && column._focusButtonMode) {\n const div = document.createElement('div');\n div.setAttribute('role', 'button');\n div.setAttribute('tabindex', '-1');\n cell.appendChild(div);\n\n // Patch `focus()` to use the button\n cell._focusButton = div;\n cell.focus = function () {\n cell._focusButton.focus();\n };\n\n div.appendChild(slot);\n } else {\n cell.setAttribute('tabindex', '-1');\n cell.appendChild(slot);\n }\n\n cell._content = cellContent;\n\n // With native Shadow DOM, mousedown on slotted element does not focus\n // focusable slot wrapper, that is why cells are not focused with\n // mousedown. Workaround: listen for mousedown and focus manually.\n cellContent.addEventListener('mousedown', () => {\n if (isChrome) {\n // Chrome bug: focusing before mouseup prevents text selection, see http://crbug.com/771903\n const mouseUpListener = (event) => {\n // If focus is on element within the cell content - respect it, do not change\n const contentContainsFocusedElement = cellContent.contains(this.getRootNode().activeElement);\n // Only focus if mouse is released on cell content itself\n const mouseUpWithinCell = event.composedPath().includes(cellContent);\n if (!contentContainsFocusedElement && mouseUpWithinCell) {\n cell.focus();\n }\n document.removeEventListener('mouseup', mouseUpListener, true);\n };\n document.addEventListener('mouseup', mouseUpListener, true);\n } else {\n // Focus on mouseup, on the other hand, removes selection on Safari.\n // Watch out sync focus removal issue, only async focus works here.\n setTimeout(() => {\n if (!cellContent.contains(this.getRootNode().activeElement)) {\n cell.focus();\n }\n });\n }\n });\n\n return cell;\n }\n\n /**\n * @param {!HTMLTableRowElement} row\n * @param {!Array<!GridColumn>} columns\n * @param {?string} section\n * @param {boolean} isColumnRow\n * @param {boolean} noNotify\n * @protected\n */\n _updateRow(row, columns, section = 'body', isColumnRow = false, noNotify = false) {\n const contentsFragment = document.createDocumentFragment();\n\n iterateRowCells(row, (cell) => {\n cell._vacant = true;\n });\n row.innerHTML = '';\n if (section === 'body') {\n // Clear the cached cell references\n row.__cells = [];\n row.__detailsCell = null;\n }\n\n columns\n .filter((column) => !column.hidden)\n .forEach((column, index, cols) => {\n let cell;\n\n if (section === 'body') {\n // Body\n if (!column._cells) {\n column._cells = [];\n }\n cell = column._cells.find((cell) => cell._vacant);\n if (!cell) {\n cell = this._createCell('td', column);\n column._cells.push(cell);\n }\n cell.setAttribute('part', 'cell body-cell');\n cell.__parentRow = row;\n // Cache the cell reference\n row.__cells.push(cell);\n if (!column._bodyContentHidden) {\n row.appendChild(cell);\n }\n\n if (row === this.$.sizer) {\n column._sizerCell = cell;\n }\n\n if (index === cols.length - 1 && this.rowDetailsRenderer) {\n // Add details cell as last cell to body rows\n if (!this._detailsCells) {\n this._detailsCells = [];\n }\n const detailsCell = this._detailsCells.find((cell) => cell._vacant) || this._createCell('td');\n if (this._detailsCells.indexOf(detailsCell) === -1) {\n this._detailsCells.push(detailsCell);\n }\n if (!detailsCell._content.parentElement) {\n contentsFragment.appendChild(detailsCell._content);\n }\n this._configureDetailsCell(detailsCell);\n row.appendChild(detailsCell);\n // Cache the details cell reference\n row.__detailsCell = detailsCell;\n this._a11ySetRowDetailsCell(row, detailsCell);\n detailsCell._vacant = false;\n }\n\n if (!noNotify) {\n column._cells = [...column._cells];\n }\n } else {\n // Header & footer\n const tagName = section === 'header' ? 'th' : 'td';\n if (isColumnRow || column.localName === 'vaadin-grid-column-group') {\n cell = column[`_${section}Cell`] || this._createCell(tagName);\n cell._column = column;\n row.appendChild(cell);\n column[`_${section}Cell`] = cell;\n } else {\n if (!column._emptyCells) {\n column._emptyCells = [];\n }\n cell = column._emptyCells.find((cell) => cell._vacant) || this._createCell(tagName);\n cell._column = column;\n row.appendChild(cell);\n if (column._emptyCells.indexOf(cell) === -1) {\n column._emptyCells.push(cell);\n }\n }\n cell.part.add('cell', `${section}-cell`);\n }\n\n if (!cell._content.parentElement) {\n contentsFragment.appendChild(cell._content);\n }\n cell._vacant = false;\n cell._column = column;\n });\n\n if (section !== 'body') {\n this.__debounceUpdateHeaderFooterRowVisibility(row);\n }\n\n // Might be empty if only cache was used\n this.appendChild(contentsFragment);\n\n this._frozenCellsChanged();\n this._updateFirstAndLastColumnForRow(row);\n }\n\n /**\n * @param {HTMLTableRowElement} row\n * @protected\n */\n __debounceUpdateHeaderFooterRowVisibility(row) {\n row.__debounceUpdateHeaderFooterRowVisibility = Debouncer.debounce(\n row.__debounceUpdateHeaderFooterRowVisibility,\n microTask,\n () => this.__updateHeaderFooterRowVisibility(row),\n );\n }\n\n /**\n * @param {HTMLTableRowElement} row\n * @protected\n */\n __updateHeaderFooterRowVisibility(row) {\n if (!row) {\n return;\n }\n\n const visibleRowCells = Array.from(row.children).filter((cell) => {\n const column = cell._column;\n if (column._emptyCells && column._emptyCells.indexOf(cell) > -1) {\n // The cell is an \"empty cell\" -> doesn't block hiding the row\n return false;\n }\n if (row.parentElement === this.$.header) {\n if (column.headerRenderer) {\n // The cell is the header cell of a column that has a header renderer\n // -> row should be visible\n return true;\n }\n if (column.header === null) {\n // The column header is explicilty set to null -> doesn't block hiding the row\n return false;\n }\n if (column.path || column.header !== undefined) {\n // The column has an explicit non-null header or a path that generates a header\n // -> row should be visible\n return true;\n }\n } else if (column.footerRenderer) {\n // The cell is the footer cell of a column that has a footer renderer\n // -> row should be visible\n return true;\n }\n return false;\n });\n\n if (row.hidden !== !visibleRowCells.length) {\n row.hidden = !visibleRowCells.length;\n }\n\n // Make sure the section has a tabbable element\n this._resetKeyboardNavigation();\n }\n\n /** @private */\n _updateScrollerItem(row, index) {\n this._preventScrollerRotatingCellFocus(row, index);\n\n if (!this._columnTree) {\n return;\n }\n\n this._updateRowOrderParts(row, index);\n\n this._a11yUpdateRowRowindex(row, index);\n this._getItem(index, row);\n }\n\n /** @private */\n _columnTreeChanged(columnTree) {\n this._renderColumnTree(columnTree);\n this.recalculateColumnWidths();\n this.__updateColumnsBodyContentHidden();\n }\n\n /** @private */\n _updateRowOrderParts(row, index = row.index) {\n updateBooleanRowStates(row, {\n first: index === 0,\n last: index === this._flatSize - 1,\n odd: index % 2 !== 0,\n even: index % 2 === 0,\n });\n }\n\n /** @private */\n _updateRowStateParts(row, { expanded, selected, detailsOpened }) {\n updateBooleanRowStates(row, {\n expanded,\n collapsed: this.__isRowExpandable(row),\n selected,\n 'details-opened': detailsOpened,\n });\n }\n\n /**\n * @param {!Array<!GridColumn>} columnTree\n * @protected\n */\n _renderColumnTree(columnTree) {\n iterateChildren(this.$.items, (row) => {\n this._updateRow(row, columnTree[columnTree.length - 1], 'body', false, true);\n\n const model = this.__getRowModel(row);\n this._updateRowOrderParts(row);\n this._updateRowStateParts(row, model);\n this._filterDragAndDrop(row, model);\n });\n\n while (this.$.header.children.length < columnTree.length) {\n const headerRow = document.createElement('tr');\n headerRow.setAttribute('part', 'row');\n headerRow.setAttribute('role', 'row');\n headerRow.setAttribute('tabindex', '-1');\n this.$.header.appendChild(headerRow);\n\n const footerRow = document.createElement('tr');\n footerRow.setAttribute('part', 'row');\n footerRow.setAttribute('role', 'row');\n footerRow.setAttribute('tabindex', '-1');\n this.$.footer.appendChild(footerRow);\n }\n while (this.$.header.children.length > columnTree.length) {\n this.$.header.removeChild(this.$.header.firstElementChild);\n this.$.footer.removeChild(this.$.footer.firstElementChild);\n }\n\n iterateChildren(this.$.header, (headerRow, index, rows) => {\n this._updateRow(headerRow, columnTree[index], 'header', index === columnTree.length - 1);\n\n const cells = getBodyRowCells(headerRow);\n updateCellsPart(cells, 'first-header-row-cell', index === 0);\n updateCellsPart(cells, 'last-header-row-cell', index === rows.length - 1);\n });\n\n iterateChildren(this.$.footer, (footerRow, index, rows) => {\n this._updateRow(footerRow, columnTree[columnTree.length - 1 - index], 'footer', index === 0);\n\n const cells = getBodyRowCells(footerRow);\n updateCellsPart(cells, 'first-footer-row-cell', index === 0);\n updateCellsPart(cells, 'last-footer-row-cell', index === rows.length - 1);\n });\n\n // Sizer rows\n this._updateRow(this.$.sizer, columnTree[columnTree.length - 1]);\n\n this._resizeHandler();\n this._frozenCellsChanged();\n this._updateFirstAndLastColumn();\n this._resetKeyboardNavigation();\n this._a11yUpdateHeaderRows();\n this._a11yUpdateFooterRows();\n this.generateCellClassNames();\n this.generateCellPartNames();\n this.__updateHeaderAndFooter();\n }\n\n /**\n * @param {!HTMLElement} row\n * @param {GridItem} item\n * @protected\n */\n _updateItem(row, item) {\n row._item = item;\n const model = this.__getRowModel(row);\n\n this._toggleDetailsCell(row, model.detailsOpened);\n\n this._a11yUpdateRowLevel(row, model.level);\n this._a11yUpdateRowSelected(row, model.selected);\n\n this._updateRowStateParts(row, model);\n\n this._generateCellClassNames(row, model);\n this._generateCellPartNames(row, model);\n this._filterDragAndDrop(row, model);\n\n iterateChildren(row, (cell) => {\n if (cell._renderer) {\n const owner = cell._column || this;\n cell._renderer.call(owner, cell._content, owner, model);\n }\n });\n\n this._updateDetailsCellHeight(row);\n\n this._a11yUpdateRowExpanded(row, model.expanded);\n }\n\n /** @private */\n _resizeHandler() {\n this._updateDetailsCellHeights();\n this.__updateHorizontalScrollPosition();\n }\n\n /** @private */\n _onAnimationEnd(e) {\n // ShadyCSS applies scoping suffixes to animation names\n if (e.animationName.indexOf('vaadin-grid-appear') === 0) {\n e.stopPropagation();\n this.__tryToRecalculateColumnWidthsIfPending();\n\n requestAnimationFrame(() => {\n this.__scrollToPendingIndexes();\n });\n }\n }\n\n /**\n * @param {!HTMLTableRowElement} row\n * @return {!GridItemModel}\n * @protected\n */\n __getRowModel(row) {\n return {\n index: row.index,\n item: row._item,\n level: this._getIndexLevel(row.index),\n expanded: this._isExpanded(row._item),\n selected: this._isSelected(row._item),\n detailsOpened: !!this.rowDetailsRenderer && this._isDetailsOpened(row._item),\n };\n }\n\n /**\n * @param {Event} event\n * @protected\n */\n _showTooltip(event) {\n // Check if there is a slotted vaadin-tooltip element.\n const tooltip = this._tooltipController.node;\n if (tooltip && tooltip.isConnected) {\n this._tooltipController.setTarget(event.target);\n this._tooltipController.setContext(this.getEventContext(event));\n\n // Trigger opening using the corresponding delay.\n tooltip._stateController.open({\n focus: event.type === 'focusin',\n hover: event.type === 'mouseenter',\n });\n }\n }\n\n /** @protected */\n _hideTooltip(immediate) {\n const tooltip = this._tooltipController && this._tooltipController.node;\n if (tooltip) {\n tooltip._stateController.close(immediate);\n }\n }\n\n /**\n * Requests an update for the content of cells.\n *\n * While performing the update, the following renderers are invoked:\n * - `Grid.rowDetailsRenderer`\n * - `GridColumn.renderer`\n * - `GridColumn.headerRenderer`\n * - `GridColumn.footerRenderer`\n *\n * It is not guaranteed that the update happens immediately (synchronously) after it is requested.\n */\n requestContentUpdate() {\n // Header and footer renderers\n this.__updateHeaderAndFooter();\n\n // Body and row details renderers\n this.__updateVisibleRows();\n }\n\n /** @private */\n __updateHeaderAndFooter() {\n (this._columnTree || []).forEach((level) => {\n level.forEach((column) => {\n if (column._renderHeaderAndFooter) {\n column._renderHeaderAndFooter();\n }\n });\n });\n }\n\n /** @protected */\n __updateVisibleRows(start, end) {\n if (this.__virtualizer) {\n this.__virtualizer.update(start, end);\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { css } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nexport const gridStyles = css`\n @keyframes vaadin-grid-appear {\n to {\n opacity: 1;\n }\n }\n\n :host {\n display: flex;\n flex-direction: column;\n animation: 1ms vaadin-grid-appear;\n height: 400px;\n flex: 1 1 auto;\n align-self: stretch;\n position: relative;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n :host([disabled]) {\n pointer-events: none;\n }\n\n #scroller {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n transform: translateY(0);\n width: auto;\n height: auto;\n position: absolute;\n inset: 0;\n }\n\n :host([all-rows-visible]) {\n height: auto;\n align-self: flex-start;\n flex-grow: 0;\n width: 100%;\n }\n\n :host([all-rows-visible]) #scroller {\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n :host([all-rows-visible]) #items {\n min-height: 1px;\n }\n\n #table {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: auto;\n position: relative;\n outline: none;\n /* Workaround for a Desktop Safari bug: new stacking context here prevents the scrollbar from getting hidden */\n z-index: 0;\n }\n\n #header,\n #footer {\n display: block;\n position: -webkit-sticky;\n position: sticky;\n left: 0;\n overflow: visible;\n width: 100%;\n z-index: 1;\n }\n\n #header {\n top: 0;\n }\n\n th {\n text-align: inherit;\n }\n\n /* Safari doesn't work with \"inherit\" */\n [safari] th {\n text-align: initial;\n }\n\n #footer {\n bottom: 0;\n }\n\n #items {\n flex-grow: 1;\n flex-shrink: 0;\n display: block;\n position: -webkit-sticky;\n position: sticky;\n width: 100%;\n left: 0;\n overflow: visible;\n }\n\n [part~='row'] {\n display: flex;\n width: 100%;\n box-sizing: border-box;\n margin: 0;\n }\n\n [part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {\n visibility: hidden;\n }\n\n [column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {\n transform: translateX(var(--_grid-lazy-columns-start));\n }\n\n #items [part~='row'] {\n position: absolute;\n }\n\n #items [part~='row']:empty {\n height: 100%;\n }\n\n [part~='cell']:not([part~='details-cell']) {\n flex-shrink: 0;\n flex-grow: 1;\n box-sizing: border-box;\n display: flex;\n width: 100%;\n position: relative;\n align-items: center;\n padding: 0;\n white-space: nowrap;\n }\n\n [part~='cell'] > [tabindex] {\n display: flex;\n align-items: inherit;\n outline: none;\n position: absolute;\n inset: 0;\n }\n\n [part~='details-cell'] {\n position: absolute;\n bottom: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 0;\n }\n\n [part~='cell'] ::slotted(vaadin-grid-cell-content) {\n display: block;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [frozen],\n [frozen-to-end] {\n z-index: 2;\n will-change: transform;\n }\n\n [no-scrollbars][safari] #table,\n [no-scrollbars][firefox] #table {\n overflow: hidden;\n }\n\n /* Reordering styles */\n :host([reordering]) [part~='cell'] ::slotted(vaadin-grid-cell-content),\n :host([reordering]) [part~='resize-handle'],\n #scroller[no-content-pointer-events] [part~='cell'] ::slotted(vaadin-grid-cell-content) {\n pointer-events: none;\n }\n\n [part~='reorder-ghost'] {\n visibility: hidden;\n position: fixed;\n pointer-events: none;\n opacity: 0.5;\n\n /* Prevent overflowing the grid in Firefox */\n top: 0;\n left: 0;\n }\n\n :host([reordering]) {\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n }\n\n /* Resizing styles */\n [part~='resize-handle'] {\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n cursor: col-resize;\n z-index: 1;\n }\n\n [part~='resize-handle']::before {\n position: absolute;\n content: '';\n height: 100%;\n width: 35px;\n transform: translateX(-50%);\n }\n\n [last-column] [part~='resize-handle']::before,\n [last-frozen] [part~='resize-handle']::before {\n width: 18px;\n transform: none;\n right: 0;\n }\n\n [frozen-to-end] [part~='resize-handle'] {\n left: 0;\n right: auto;\n }\n\n [frozen-to-end] [part~='resize-handle']::before {\n left: 0;\n right: auto;\n }\n\n [first-frozen-to-end] [part~='resize-handle']::before {\n width: 18px;\n transform: none;\n }\n\n [first-frozen-to-end] {\n margin-inline-start: auto;\n }\n\n /* Hide resize handle if scrolled to end */\n :host(:not([overflow~='end'])) [first-frozen-to-end] [part~='resize-handle'] {\n display: none;\n }\n\n #scroller[column-resizing] {\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n }\n\n /* Sizer styles */\n #sizer {\n display: flex;\n position: absolute;\n visibility: hidden;\n }\n\n #sizer [part~='details-cell'] {\n display: none !important;\n }\n\n #sizer [part~='cell'][hidden] {\n display: none !important;\n }\n\n #sizer [part~='cell'] {\n display: block;\n flex-shrink: 0;\n line-height: 0;\n height: 0 !important;\n min-height: 0 !important;\n max-height: 0 !important;\n padding: 0 !important;\n border: none !important;\n }\n\n #sizer [part~='cell']::before {\n content: '-';\n }\n\n #sizer [part~='cell'] ::slotted(vaadin-grid-cell-content) {\n display: none !important;\n }\n\n /* RTL specific styles */\n\n :host([dir='rtl']) #items,\n :host([dir='rtl']) #header,\n :host([dir='rtl']) #footer {\n left: auto;\n }\n\n :host([dir='rtl']) [part~='reorder-ghost'] {\n left: auto;\n right: 0;\n }\n\n :host([dir='rtl']) [part~='resize-handle'] {\n left: 0;\n right: auto;\n }\n\n :host([dir='rtl']) [part~='resize-handle']::before {\n transform: translateX(50%);\n }\n\n :host([dir='rtl']) [last-column] [part~='resize-handle']::before,\n :host([dir='rtl']) [last-frozen] [part~='resize-handle']::before {\n left: 0;\n right: auto;\n }\n\n :host([dir='rtl']) [frozen-to-end] [part~='resize-handle'] {\n right: 0;\n left: auto;\n }\n\n :host([dir='rtl']) [frozen-to-end] [part~='resize-handle']::before {\n right: 0;\n left: auto;\n }\n\n @media (forced-colors: active) {\n [part~='selected-row'] [part~='first-column-cell']::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n border: 2px solid;\n }\n\n [part~='focused-cell']::before {\n outline: 2px solid !important;\n outline-offset: -1px;\n }\n }\n`;\n","/**\n * @license\n * Copyright (c) 2016 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport './vaadin-grid-column.js';\nimport { html, PolymerElement } from '@polymer/polymer/polymer-element.js';\nimport { ControllerMixin } from '@vaadin/component-base/src/controller-mixin.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';\nimport { registerStyles, ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { GridMixin } from './vaadin-grid-mixin.js';\nimport { gridStyles } from './vaadin-grid-styles.js';\n\nregisterStyles('vaadin-grid', gridStyles, { moduleId: 'vaadin-grid-styles' });\n\n/**\n * `<vaadin-grid>` is a free, high quality data grid / data table Web Component. The content of the\n * the grid can be populated by using renderer callback function.\n *\n * ### Quick Start\n *\n * Start with an assigning an array to the [`items`](#/elements/vaadin-grid#property-items) property to visualize your data.\n *\n * Use the [`<vaadin-grid-column>`](#/elements/vaadin-grid-column) element to configure the grid columns. Set `path` and `header`\n * shorthand properties for the columns to define what gets rendered in the cells of the column.\n *\n * #### Example:\n * ```html\n * <vaadin-grid>\n * <vaadin-grid-column path=\"name.first\" header=\"First name\"></vaadin-grid-column>\n * <vaadin-grid-column path=\"name.last\" header=\"Last name\"></vaadin-grid-column>\n * <vaadin-grid-column path=\"email\"></vaadin-grid-column>\n * </vaadin-grid>\n * ```\n *\n * For custom content `vaadin-grid-column` element provides you with three types of `renderer` callback functions: `headerRenderer`,\n * `renderer` and `footerRenderer`.\n *\n * Each of those renderer functions provides `root`, `column`, `model` arguments when applicable.\n * Generate DOM content, append it to the `root` element and control the state\n * of the host element by accessing `column`. Before generating new content,\n * users are able to check if there is already content in `root` for reusing it.\n *\n * Renderers are called on initialization of new column cells and each time the\n * related row model is updated. DOM generated during the renderer call can be reused\n * in the next renderer call and will be provided with the `root` argument.\n * On first call it will be empty.\n *\n * #### Example:\n * ```html\n * <vaadin-grid>\n * <vaadin-grid-column></vaadin-grid-column>\n * <vaadin-grid-column></vaadin-grid-column>\n * <vaadin-grid-column></vaadin-grid-column>\n * </vaadin-grid>\n * ```\n * ```js\n * const grid = document.querySelector('vaadin-grid');\n * grid.items = [{'name': 'John', 'surname': 'Lennon', 'role': 'singer'},\n * {'name': 'Ringo', 'surname': 'Starr', 'role': 'drums'}];\n *\n * const columns = grid.querySelectorAll('vaadin-grid-column');\n *\n * columns[0].headerRenderer = function(root) {\n * root.textContent = 'Name';\n * };\n * columns[0].renderer = function(root, column, model) {\n * root.textContent = model.item.name;\n * };\n *\n * columns[1].headerRenderer = function(root) {\n * root.textContent = 'Surname';\n * };\n * columns[1].renderer = function(root, column, model) {\n * root.textContent = model.item.surname;\n * };\n *\n * columns[2].headerRenderer = function(root) {\n * root.textContent = 'Role';\n * };\n * columns[2].renderer = function(root, column, model) {\n * root.textContent = model.item.role;\n * };\n * ```\n *\n * The following properties are available in the `model` argument:\n *\n * Property name | Type | Description\n * --------------|------|------------\n * `index`| Number | The index of the item.\n * `item` | String or Object | The item.\n * `level` | Number | Number of the item's tree sublevel, starts from 0.\n * `expanded` | Boolean | True if the item's tree sublevel is expanded.\n * `selected` | Boolean | True if the item is selected.\n * `detailsOpened` | Boolean | True if the item's row details are open.\n *\n * The following helper elements can be used for further customization:\n * - [`<vaadin-grid-column-group>`](#/elements/vaadin-grid-column-group)\n * - [`<vaadin-grid-filter>`](#/elements/vaadin-grid-filter)\n * - [`<vaadin-grid-sorter>`](#/elements/vaadin-grid-sorter)\n * - [`<vaadin-grid-selection-column>`](#/elements/vaadin-grid-selection-column)\n * - [`<vaadin-grid-tree-toggle>`](#/elements/vaadin-grid-tree-toggle)\n *\n * __Note that the helper elements must be explicitly imported.__\n * If you want to import everything at once you can use the `all-imports.html` bundle.\n *\n * ### Lazy Loading with Function Data Provider\n *\n * In addition to assigning an array to the items property, you can alternatively\n * provide the `<vaadin-grid>` data through the\n * [`dataProvider`](#/elements/vaadin-grid#property-dataProvider) function property.\n * The `<vaadin-grid>` calls this function lazily, only when it needs more data\n * to be displayed.\n *\n * See the [`dataProvider`](#/elements/vaadin-grid#property-dataProvider) property\n * documentation for the detailed data provider arguments description.\n *\n * __Note that expanding the tree grid's item will trigger a call to the `dataProvider`.__\n *\n * __Also, note that when using function data providers, the total number of items\n * needs to be set manually. The total number of items can be returned\n * in the second argument of the data provider callback:__\n *\n * ```javascript\n * grid.dataProvider = ({page, pageSize}, callback) => {\n * // page: the requested page index\n * // pageSize: number of items on one page\n * const url = `https://api.example/data?page=${page}&per_page=${pageSize}`;\n *\n * fetch(url)\n * .then((res) => res.json())\n * .then(({ employees, totalSize }) => {\n * callback(employees, totalSize);\n * });\n * };\n * ```\n *\n * __Alternatively, you can use the `size` property to set the total number of items:__\n *\n * ```javascript\n * grid.size = 200; // The total number of items\n * grid.dataProvider = ({page, pageSize}, callback) => {\n * const url = `https://api.example/data?page=${page}&per_page=${pageSize}`;\n *\n * fetch(url)\n * .then((res) => res.json())\n * .then((resJson) => callback(resJson.employees));\n * };\n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---------------------------|----------------\n * `row` | Row in the internal table\n * `body-row` | Body row in the internal table\n * `collapsed-row` | Collapsed row\n * `expanded-row` | Expanded row\n * `selected-row` | Selected row\n * `details-opened-row` | Row with details open\n * `odd-row` | Odd row\n * `even-row` | Even row\n * `first-row` | The first body row\n * `last-row` | The last body row\n * `dragstart-row` | Set on the row for one frame when drag is starting.\n * `dragover-above-row` | Set on the row when the a row is dragged over above\n * `dragover-below-row` | Set on the row when the a row is dragged over below\n * `dragover-on-top-row` | Set on the row when the a row is dragged over on top\n * `drag-disabled-row` | Set to a row that isn't available for dragging\n * `drop-disabled-row` | Set to a row that can't be dropped on top of\n * `cell` | Cell in the internal table\n * `header-cell` | Header cell in the internal table\n * `body-cell` | Body cell in the internal table\n * `footer-cell` | Footer cell in the internal table\n * `details-cell` | Row details cell in the internal table\n * `focused-cell` | Focused cell in the internal table\n * `odd-row-cell` | Cell in an odd row\n * `even-row-cell` | Cell in an even row\n * `first-row-cell` | Cell in the first body row\n * `last-row-cell` | Cell in the last body row\n * `first-header-row-cell` | Cell in the first header row\n * `first-footer-row-cell` | Cell in the first footer row\n * `last-header-row-cell` | Cell in the last header row\n * `last-footer-row-cell` | Cell in the last footer row\n * `loading-row-cell` | Cell in a row that is waiting for data from data provider\n * `selected-row-cell` | Cell in a selected row\n * `collapsed-row-cell` | Cell in a collapsed row\n * `expanded-row-cell` | Cell in an expanded row\n * `details-opened-row-cell` | Cell in an row with details open\n * `dragstart-row-cell` | Cell in a row that user started to drag (set for one frame)\n * `dragover-above-row-cell` | Cell in a row that has another row dragged over above\n * `dragover-below-row-cell` | Cell in a row that has another row dragged over below\n * `dragover-on-top-row-cell` | Cell in a row that has another row dragged over on top\n * `drag-disabled-row-cell` | Cell in a row that isn't available for dragging\n * `drop-disabled-row-cell` | Cell in a row that can't be dropped on top of\n * `frozen-cell` | Frozen cell in the internal table\n * `frozen-to-end-cell` | Frozen to end cell in the internal table\n * `last-frozen-cell` | Last frozen cell\n * `first-frozen-to-end-cell` | First cell frozen to end\n * `first-column-cell` | First visible cell on a row\n * `last-column-cell` | Last visible cell on a row\n * `reorder-allowed-cell` | Cell in a column where another column can be reordered\n * `reorder-dragging-cell` | Cell in a column currently being reordered\n * `resize-handle` | Handle for resizing the columns\n * `reorder-ghost` | Ghost element of the header cell being dragged\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * ----------------------|---------------------------------------------------------------------------------------------------|-----------\n * `loading` | Set when the grid is loading data from data provider | :host\n * `interacting` | Keyboard navigation in interaction mode | :host\n * `navigating` | Keyboard navigation in navigation mode | :host\n * `overflow` | Set when rows are overflowing the grid viewport. Possible values: `top`, `bottom`, `start`, `end` | :host\n * `reordering` | Set when the grid's columns are being reordered | :host\n * `dragover` | Set when the grid (not a specific row) is dragged over | :host\n * `dragging-rows` | Set when grid rows are dragged | :host\n * `reorder-status` | Reflects the status of a cell while columns are being reordered | cell\n * `frozen` | Frozen cell | cell\n * `frozen-to-end` | Cell frozen to end | cell\n * `last-frozen` | Last frozen cell | cell\n * `first-frozen-to-end` | First cell frozen to end | cell\n * `first-column` | First visible cell on a row | cell\n * `last-column` | Last visible cell on a row | cell\n * `selected` | Selected row | row\n * `expanded` | Expanded row | row\n * `details-opened` | Row with details open | row\n * `loading` | Row that is waiting for data from data provider | row\n * `odd` | Odd row | row\n * `first` | The first body row | row\n * `last` | The last body row | row\n * `dragstart` | Set for one frame when starting to drag a row. The value is a number when dragging multiple rows | row\n * `dragover` | Set when the row is dragged over | row\n * `drag-disabled` | Set to a row that isn't available for dragging | row\n * `drop-disabled` | Set to a row that can't be dropped on top of | row\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @fires {CustomEvent} active-item-changed - Fired when the `activeItem` property changes.\n * @fires {CustomEvent} cell-activate - Fired when the cell is activated with click or keyboard.\n * @fires {CustomEvent} cell-focus - Fired when a cell is focused with click or keyboard navigation.\n * @fires {CustomEvent} column-reorder - Fired when the columns in the grid are reordered.\n * @fires {CustomEvent} column-resize - Fired when the grid column resize is finished.\n * @fires {CustomEvent} data-provider-changed - Fired when the `dataProvider` property changes.\n * @fires {CustomEvent} expanded-items-changed - Fired when the `expandedItems` property changes.\n * @fires {CustomEvent} grid-dragstart - Fired when starting to drag grid rows.\n * @fires {CustomEvent} grid-dragend - Fired when the dragging of the rows ends.\n * @fires {CustomEvent} grid-drop - Fired when a drop occurs on top of the grid.\n * @fires {CustomEvent} loading-changed - Fired when the `loading` property changes.\n * @fires {CustomEvent} selected-items-changed - Fired when the `selectedItems` property changes.\n * @fires {CustomEvent} size-changed - Fired when the `size` property changes.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes GridMixin\n * @mixes ThemableMixin\n * @mixes ControllerMixin\n */\nclass Grid extends GridMixin(ElementMixin(ThemableMixin(ControllerMixin(PolymerElement)))) {\n static get template() {\n return html`\n <div\n id=\"scroller\"\n safari$=\"[[_safari]]\"\n ios$=\"[[_ios]]\"\n loading$=\"[[loading]]\"\n column-reordering-allowed$=\"[[columnReorderingAllowed]]\"\n >\n <table id=\"table\" role=\"treegrid\" aria-multiselectable=\"true\" tabindex=\"0\">\n <caption id=\"sizer\" part=\"row\"></caption>\n <thead id=\"header\" role=\"rowgroup\"></thead>\n <tbody id=\"items\" role=\"rowgroup\"></tbody>\n <tfoot id=\"footer\" role=\"rowgroup\"></tfoot>\n </table>\n\n <div part=\"reorder-ghost\"></div>\n </div>\n\n <slot name=\"tooltip\"></slot>\n\n <div id=\"focusexit\" tabindex=\"0\"></div>\n `;\n }\n\n static get is() {\n return 'vaadin-grid';\n }\n}\n\ndefineCustomElement(Grid);\n\nexport { Grid };\n"],"names":["region","document","createElement","alertDebouncer","announce","text","options","mode","timeout","undefined","removeAttribute","debounce","setAttribute","cancel","textContent","setTimeout","style","position","clip","body","appendChild","FocusRestorationController","saveFocus","focusNode","this","restoreFocus","preventScroll","focus","instances","FocusTrapController","constructor","host","__trapNode","__onKeyDown","bind","__focusableElements","__focusedElementIndex","focusableElements","indexOf","filter","pop","hostConnected","addEventListener","hostDisconnected","removeEventListener","trapFocus","trapNode","length","Error","push","releaseFocus","event","Array","from","key","preventDefault","backward","shiftKey","__focusNextElement","step","currentIndex","element","localName","select","GridSelectionColumnBaseMixin","superClass","properties","width","type","String","value","sync","flexGrow","Number","selectAll","Boolean","notify","autoSelect","dragSelect","_indeterminate","_selectAllHidden","observers","_defaultHeaderRenderer","root","_column","checkbox","firstElementChild","classList","add","__onSelectAllCheckedChanged","checked","__isChecked","__rendererChecked","hidden","indeterminate","_defaultRenderer","item","selected","__onSelectRowCheckedChanged","__onCellTrack","__onCellMouseDown","__onCellClick","__item","e","target","_selectAll","_deselectAll","_selectItem","_deselectItem","__dragCurrentY","detail","y","__dragDy","dy","state","dragStartRow","_grid","_getRenderedRows","find","row","contains","currentTarget","assignedSlot","__selectOnDrag","_isSelected","_item","__dragStartIndex","index","__dragStartItem","__dragAutoScroller","renderedRows","hoveredRow","rowRect","getBoundingClientRect","top","bottom","hoveredIndex","scrollableArea","__getScrollableArea","_firstVisibleIndex","_lastVisibleIndex","forEach","scrollTriggerArea","height","percentage","Math","min","$","table","scrollTop","gridRect","headerRect","header","footerRect","footer","left","right","GridSelectionColumnMixin","__previousActiveItem","Object","super","__boundOnActiveItemChanged","__onActiveItemChanged","__boundOnDataProviderChanged","__onDataProviderChanged","__boundOnSelectedItemsChanged","__onSelectedItemsChanged","disconnectedCallback","connectedCallback","__onSelectAllChanged","__selectAllInitialized","_selectAllChangeLock","__hasArrayDataProvider","__withFilteredItemsArray","items","selectedItems","__arrayContains","a","b","isArray","every","i","includes","selectItem","deselectItem","activeItem","_toggleItem","dataProvider","callback","params","page","pageSize","Infinity","sortOrders","filters","_mapFilters","GridSelectionColumn","is","moduleId","template","innerHTML","window","DESCOPE_NONCE","head","content","GridSorterMixin","path","direction","reflectToAttribute","_order","_isConnected","observer","ready","_onClick","parentNode","__removeSorters","_pathOrDirectionChanged","__dispatchSorterChangedEvenIfPossible","__isConnectedChanged","newValue","oldValue","dispatchEvent","CustomEvent","shiftClick","_shiftClick","fromSorterClick","_fromSorterClick","bubbles","composed","_getDisplayOrder","order","defaultPrevented","activeElement","getRootNode","GridSorter","GridSortColumnMixin","__boundOnDirectionChanged","__onDirectionChanged","sorter","__rendererDirection","__getHeader","_computeHeaderRenderer","_generateHeader","GridSortColumn","A11yMixin","_a11yGetHeaderRowCount","_columnTree","level","some","col","headerRenderer","_a11yGetFooterRowCount","_a11yUpdateGridSize","size","bodyColumns","_a11yUpdateHeaderRows","_a11yUpdateFooterRows","headerRow","footerRow","_a11yUpdateRowRowindex","_a11yUpdateRowSelected","cell","_a11yUpdateRowExpanded","__isRowExpandable","__isRowCollapsible","_a11yUpdateRowLevel","_a11ySetRowDetailsCell","detailsCell","id","_a11yUpdateCellColspan","colspan","_a11yUpdateSorters","querySelectorAll","cellContent","asc","desc","ActiveItemMixin","scroller","_activateItem","model","clickedItem","_itemsEqual","composedPath","getAttribute","_content","_isFocusable","HTMLLabelElement","__getRowModel","parentElement","isFocusableElement","part","disabled","offsetParent","getComputedStyle","visibility","isFocusable","get","object","split","reduce","obj","property","checkPaths","arrayToCheck","action","result","replace","console","warn","normalizeEmptyValue","isNaN","toString","compare","ArrayDataProviderMixin","__setArrayDataProvider","arrayDataProvider","allItems","filterValueLowercase","toLowerCase","sort","map","sortOrder","p","n","multiSort","count","start","end","slice","__items","_arrayDataProvider","__dataProviderOrItemsChanged","isAttached","clearCache","_flatSize","ColumnReorderingMixin","columnReorderingAllowed","_orderBaseScope","_onTrackEvent","_reorderGhost","shadowRoot","querySelector","_onTouchStart","_onTouchMove","_onTouchEnd","_onContextMenu","hasAttribute","_onTrackEnd","_startTouchReorderTimeout","_onTrackStart","x","touches","clientX","clientY","_draggedColumn","clearTimeout","headerCell","_touchDevice","_onTrack","node","_cellFromPoint","toggleAttribute","childElementCount","_setSiblingsReorderStatus","_reorderStatus","_updateGhost","_updateGhostPosition","_autoScroller","targetCell","targetColumn","_getTargetColumn","_isSwapAllowed","_isSwappableByPosition","columnTreeLevel","findIndex","levelColumnsInOrder","_getColumnsInOrder","startIndex","endIndex","_swapColumnOrders","_lastDragClientX","columns","headerLevel","c","elementFromPoint","eventClientX","eventClientY","ghostRect","targetLeft","targetTop","_left","parseInt","_top","transform","ghost","innerText","propertyName","_updateOrders","columnTree","column","status","sibling","test","rightDiff","leftDiff","scrollLeft","column1","column2","differentColumns","sameParent","sameFrozen","frozen","frozenToEnd","sourceCellRect","targetRect","_debounceUpdateFrozenColumn","_updateFirstAndLastColumn","draggedColumn","candidate","ColumnResizingMixin","_onHeaderTrack","handle","_childColumns","isRTL","__isRTL","eventX","columnRowCells","offsetWidth","minWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","marginLeft","marginRight","maxWidth","cellWidth","cellRect","max","array","cellFrozenToEnd","_frozenToEndCells","scrollWidth","frozenRect","offset","resizedColumn","_resizeHandler","getFlatIndexContext","cache","flatIndex","levelIndex","subCache","subCaches","parentCacheIndex","flatSize","floor","getItemContext","getItemId","targetItem","levelFlatIndex","getSubCache","getFlatIndex","getFlatIndexByPath","subIndexes","flatIndexOnLevel","Cache","context","pendingRequests","__subCacheByIndex","__flatSize","parentCache","parentItem","values","isLoading","keys","effectiveSize","recalculateFlatSize","isExpanded","total","setPage","removeSubCache","removeSubCaches","createSubCache","clampedIndex","prev","getItemForIndex","getCacheAndIndex","scaledIndex","updateSize","ensureSubCacheForScaledIndex","__controller","__loadCachePage","grid","itemCaches","DataProviderController","EventTarget","dataProviderParams","rootCache","__createRootCache","__cacheContext","setPageSize","setDataProvider","ensureFlatIndexLoaded","ensureFlatIndexHierarchy","loadFirstPage","DataProviderMixin","loading","readOnly","_hasData","itemHasChildrenPath","itemIdPath","expandedItems","__expandedKeys","computed","_dataProviderController","_isExpanded","_mapSorters","_onDataProviderPageRequested","_onDataProviderPageReceived","_onDataProviderPageLoaded","_cache","_effectiveSize","_sizeChanged","__itemHasChildrenPathChanged","requestContentUpdate","_getItem","el","__updateLoading","_updateItem","cells","has","_expandedItemsChanged","__updateVisibleRows","__computeExpandedKeys","expanded","expandedKeys","Set","expandItem","collapseItem","_getIndexLevel","_loadPage","_setLoading","_debouncerApplyCachedData","after","__scrollToPendingIndexes","__dispatchPendingBodyCellFocus","flush","__debounceClearCache","__clearCacheDebouncer","__virtualizer","_pageSizeChanged","oldPageSize","_checkSize","_dataProviderChanged","oldDataProvider","_ensureFirstPageLoaded","_debouncerCheckSize","item1","item2","_getItemIndexInArray","idx","scrollToIndex","indexes","targetIndex","_scrollToFlatIndex","clientHeight","__pendingScrollToIndexes","children","DropMode","DropLocation","usesDnDPolyfill","DragAndDropMixin","dropMode","rowsDraggable","dragFilter","Function","dropFilter","__dndAutoScrollThreshold","_onDragStart","_onDragEnd","_onDragOver","_onDragLeave","_onDrop","stopPropagation","_safari","exec","requestAnimationFrame","dataTransfer","setDragImage","rows","__getViewportRows","setData","__formatDefaultTransferData","dragstart","setProperty","draggedItems","setDragData","data","setDraggedItemsCount","originalEvent","_clearDragStyles","_dropLocation","_dragOverItem","__dndAutoScroll","dropAbove","dragover","__dndAutoScrolling","headerBottom","footerTop","topDiff","bottomDiff","scrollTopDelta","dragData","types","getData","cancelable","dropTargetItem","dropLocation","trim","join","_dragDropAccessChanged","filterDragAndDrop","_filterDragAndDrop","dragDisabled","dropDisabled","arrayEquals","arr1","arr2","l","DynamicColumnsMixin","_addNodeObserver","_hasColumnGroups","_getChildColumns","getColumns","_flattenColumnGroups","curr","concat","_getColumnTree","rootColumns","_debounceUpdateColumnTree","__updateColumnTreeDebouncer","_updateColumnTree","columnArray","performUpdate","_observer","_addedColumns","removedColumns","allRemovedCells","flatMap","_allCells","filterNotConnected","_sorters","__removeFilters","_filters","_debouncerCheckImports","_checkImports","elementName","customElements","_updateFirstAndLastColumnForRow","cellIndex","_isColumnElement","nodeType","Node","ELEMENT_NODE","EventContextMixin","getEventContext","__composedPath","section","assign","FilterMixin","_filterChanged","__addFilter","__applyFilters","filtersToRemove","KeyboardNavigationMixin","_headerFocusable","_itemsFocusable","_footerFocusable","_navigatingIsHidden","_focusedItemIndex","_focusedColumnOrder","_focusedCell","interacting","__rowFocusMode","__isRow","prop","focusable","parent","__isCell","_focusButton","_ios","_android","_onKeyDown","_onKeyUp","_onFocusIn","_onFocusOut","_onContentFocusIn","_isMousedown","_focusableChanged","oldFocusable","_updateGridSectionFocusTarget","_focusedCellChanged","focusedCell","oldFocusedCell","_interactingChanged","__updateItemsFocusable","wasFocused","__getFocusable","keyGroup","_detectInteracting","_ensureScrolledToIndex","child","__scrollIntoViewport","__isDetailsCell","matches","HTMLTableCellElement","HTMLTableRowElement","__getIndexOfChildElement","prototype","call","_onNavigationKeyDown","visibleItemsCount","dx","ctrlKey","activeRow","activeCell","backwardsKey","_onCellNavigation","_onRowNavigation","dstRow","__navigateRows","__getIndexInGroup","bodyFallbackIndex","currentRowIndex","activeRowGroup","maxRowIndex","dstRowIndex","dstIsRowDetails","isRowDetails","dstItem","_isDetailsOpened","columnIndex","sizer","sizerCell","isCurrentCellRowDetails","_getColumns","dstColumns","dstSortedColumnOrders","maxOrderedColumnIndex","orderedColumnIndex","abs","dstOrderedColumnIndex","dstColumnIndex","acc","dstCell","dstSizerCell","_lazyColumns","__isColumnInViewport","scrollIntoView","__updateColumnsBodyContentHidden","__updateHorizontalScrollPosition","_scrollHorizontallyToCell","_onInteractionKeyDown","localTarget","localTargetIsTextInput","wantInteracting","_getGridEventLocation","focusTarget","_setInteracting","_hideTooltip","_predictFocusStepTarget","srcElement","tabOrder","focusexit","rowElement","focusStepTarget","__isHorizontallyInViewport","firstVisibleColumn","_headerCell","rowIndex","_cells","_footerCell","_onTabKeyDown","itemsFocusTarget","targetRow","focusedItemRow","_onSpaceKeyDown","isRow","wasNavigating","MouseEvent","rootTarget","_activeRowGroup","__pendingBodyCellFocus","_showTooltip","_detectFocusedItemIndex","Event","isInteracting","_getGridSectionFromFocusTarget","isInteractingWithinActiveSection","tabIndex","_preventScrollerRotatingCellFocus","rowGroup","__isValidFocusable","offsetHeight","_resetKeyboardNavigation","firstVisibleRow","firstVisibleCell","__getFirstVisibleItem","dstCellRect","dstCellIndex","tableRect","leftBoundary","rightBoundary","round","tableIndex","RowDetailsMixin","detailsOpenedItems","rowDetailsRenderer","_detailsCells","_detailsCellResizeObserver","ResizeObserver","entries","_updateDetailsCellHeight","__adapter","_rowDetailsRendererChanged","_updateRow","isDetailsOpened","_toggleDetailsCell","_detailsOpenedItemsChanged","_configureDetailsCell","observe","detailsOpened","_renderer","__updateDetailsRowPadding","removeProperty","_updateDetailsCellHeights","openItemDetails","closeItemDetails","clientWidth","ScrollMixin","columnRendering","_frozenCells","_rowWithFocusedElement","Element","_scrollLeft","_scrollTop","scrollTarget","itemsIndex","_afterScroll","_onResize","_updateOverflow","_firefox","isVisible","__previousVisible","__memorizedScrollTop","dstRect","_scheduleScrolling","_scrollingFrame","_debounceScrolling","cancelAnimationFrame","_debounceColumnContentVisibility","__cachedScrollLeft","columnsInOrder","_sizerCell","bodyContentHiddenChanged","bodyContentHidden","_bodyContentHidden","remove","__parentRow","followingColumnCell","insertBefore","_frozenCellsChanged","lastFrozenColumn","reverse","lastFrozenColumnEnd","__getColumnEnd","__lazyColumnsStart","__getColumnStart","offsetLeft","__columnRenderingChanged","_debounceOverflow","__doUpdateOverflow","overflow","scrollHeight","matched","_debouncerCacheElements","__debounceUpdateFrozenColumn","_updateFrozenColumn","columnsRow","lastFrozen","firstFrozenToEnd","_lastFrozen","_firstFrozenToEnd","normalizedScrollLeft","transformFrozen","remaining","transformFrozenToEnd","transformFrozenToEndBody","lastVisibleColumn","lastVisibleColumnEnd","firstFrozenToEndColumn","translateX","SelectionMixin","__selectedKeys","__selectedItemsChanged","__computeSelectedKeys","selectedKeys","defaultMultiSortPriority","SortMixin","multiSortPriority","multiSortOnShiftClick","_previousSorters","setDefaultMultiSortPriority","priority","_onSorterChanged","__updateSorter","__applySorters","sortersToRemove","__updateSortOrders","__appendSorter","_removeArrayItem","__prependSorter","unshift","otherSorters","s","JSON","stringify","splice","StylingMixin","cellClassNameGenerator","cellPartNameGenerator","__cellClassNameGeneratorChanged","generateCellClassNames","__cellPartNameGeneratorChanged","generateCellPartNames","_generateCellClassNames","_generateCellPartNames","__generatedClasses","className","__generatedParts","partName","GridMixin","allRowsVisible","__pendingRecalculateColumnWidths","__gridElement","_onAnimationEnd","firstVisibleItem","lastVisibleItem","__getLastVisibleItem","recalculateColumnWidths","_isInViewport","scrollTargetRect","itemRect","headerHeight","footerHeight","_getRowContainingNode","_isItemAssignedToRow","createElements","_createScrollerRows","updateElement","_updateScrollerItem","scrollContainer","reorderElements","__tryToRecalculateColumnWidthsIfPending","_tooltipController","addController","setManual","__getBodyCellCoordinates","__focusBodyCell","_focusFirstVisibleRow","_flatSizeChanged","virtualizer","hasData","cellCoordinates","previousSize","update","__hasRowsWithClientHeight","__getIntrinsicWidth","__intrinsicWidthCache","__calculateAndCacheIntrinsicWidths","__getDistributedWidth","innerColumn","columnWidth","columnGroupWidth","sumOfWidthOfAllChildColumns","_visibleChildColumns","sum","extraNecessarySpaceForGridColumnGroup","shareOfInnerColumnFromNecessaryExtraSpace","_recalculateColumnWidths","cols","__debounceUpdateHeaderFooterRowVisibility","_debouncerHiddenChanged","Map","fvi","lvi","__viewportRowsCache","__setVisibleCellContentAutoWidth","autoWidth","__measuringAutoWidth","__originalWidth","__getAutoWidthCellsMaxWidth","set","isConnected","__afterCreateScrollerRowsDebouncer","_createCell","tagName","slotName","_contentIndex","slot","_focusButtonMode","div","mouseUpListener","contentContainsFocusedElement","mouseUpWithinCell","isColumnRow","noNotify","contentsFragment","createDocumentFragment","_vacant","__cells","__detailsCell","_emptyCells","__updateHeaderFooterRowVisibility","visibleRowCells","footerRenderer","_updateRowOrderParts","_columnTreeChanged","_renderColumnTree","first","last","odd","even","_updateRowStateParts","collapsed","removeChild","__updateHeaderAndFooter","owner","animationName","tooltip","setTarget","setContext","_stateController","open","hover","immediate","close","_renderHeaderAndFooter","gridStyles","Grid"],"sourceRoot":""}