@mhmo91/schmancy 0.2.125 → 0.2.127

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 (236) hide show
  1. package/dist/{animated-text-CR7nS6VW.js → animated-text-BJXm6krF.js} +3 -3
  2. package/dist/{animated-text-CR7nS6VW.js.map → animated-text-BJXm6krF.js.map} +1 -1
  3. package/dist/{animated-text-C7Kwa_OI.cjs → animated-text-rLaot0v2.cjs} +2 -2
  4. package/dist/{animated-text-C7Kwa_OI.cjs.map → animated-text-rLaot0v2.cjs.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-AypdoH-o.cjs → area.component-CP5oin2j.cjs} +2 -2
  9. package/dist/{area.component-AypdoH-o.cjs.map → area.component-CP5oin2j.cjs.map} +1 -1
  10. package/dist/{area.component-DP34t7HX.js → area.component-DlAEUmgd.js} +3 -3
  11. package/dist/{area.component-DP34t7HX.js.map → area.component-DlAEUmgd.js.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-DtXL-EYa.js → autocomplete-Bbi68nzP.js} +3 -3
  14. package/dist/{autocomplete-DtXL-EYa.js.map → autocomplete-Bbi68nzP.js.map} +1 -1
  15. package/dist/{autocomplete-BrXYON3m.cjs → autocomplete-DEUfHcCH.cjs} +2 -2
  16. package/dist/{autocomplete-BrXYON3m.cjs.map → autocomplete-DEUfHcCH.cjs.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/busy.cjs +1 -1
  20. package/dist/busy.js +1 -1
  21. package/dist/button.cjs +1 -1
  22. package/dist/button.js +1 -1
  23. package/dist/card.cjs +1 -1
  24. package/dist/card.js +1 -1
  25. package/dist/{checkbox-D9hGlFti.cjs → checkbox-DrrcDAjr.cjs} +2 -2
  26. package/dist/{checkbox-D9hGlFti.cjs.map → checkbox-DrrcDAjr.cjs.map} +1 -1
  27. package/dist/{checkbox-C6z4niEj.js → checkbox-N_JVa-1W.js} +2 -2
  28. package/dist/{checkbox-C6z4niEj.js.map → checkbox-N_JVa-1W.js.map} +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.js +1 -1
  31. package/dist/{chips-wP7Z-qFr.cjs → chips-DrYrCyTG.cjs} +2 -2
  32. package/dist/{chips-wP7Z-qFr.cjs.map → chips-DrYrCyTG.cjs.map} +1 -1
  33. package/dist/{chips-De6Vldxt.js → chips-DuSV3Pg2.js} +3 -3
  34. package/dist/{chips-De6Vldxt.js.map → chips-DuSV3Pg2.js.map} +1 -1
  35. package/dist/chips.cjs +1 -1
  36. package/dist/chips.js +1 -1
  37. package/dist/components.cjs +1 -1
  38. package/dist/components.js +1 -1
  39. package/dist/content-drawer.cjs +1 -1
  40. package/dist/content-drawer.js +1 -1
  41. package/dist/{date-range-rIm4WhKI.js → date-range-6fQ4ypDJ.js} +3 -3
  42. package/dist/{date-range-rIm4WhKI.js.map → date-range-6fQ4ypDJ.js.map} +1 -1
  43. package/dist/{date-range-BHtt61m5.cjs → date-range-DoZNetuD.cjs} +2 -2
  44. package/dist/{date-range-BHtt61m5.cjs.map → date-range-DoZNetuD.cjs.map} +1 -1
  45. package/dist/date-range.cjs +1 -1
  46. package/dist/date-range.js +1 -1
  47. package/dist/{delay-PEhN0JaA.js → delay-CSAsNZ4k.js} +2 -2
  48. package/dist/{delay-PEhN0JaA.js.map → delay-CSAsNZ4k.js.map} +1 -1
  49. package/dist/{delay-xd8PmM2r.cjs → delay-WrR6CJK_.cjs} +2 -2
  50. package/dist/{delay-xd8PmM2r.cjs.map → delay-WrR6CJK_.cjs.map} +1 -1
  51. package/dist/delay.cjs +1 -1
  52. package/dist/delay.js +1 -1
  53. package/dist/{divider-B_GBA6wG.js → divider-ByXACxEQ.js} +3 -3
  54. package/dist/{divider-B_GBA6wG.js.map → divider-ByXACxEQ.js.map} +1 -1
  55. package/dist/{divider-CW3prtEN.cjs → divider-Cl2Thq2Y.cjs} +2 -2
  56. package/dist/{divider-CW3prtEN.cjs.map → divider-Cl2Thq2Y.cjs.map} +1 -1
  57. package/dist/divider.cjs +1 -1
  58. package/dist/divider.js +1 -1
  59. package/dist/extra.cjs +1 -1
  60. package/dist/extra.js +1 -1
  61. package/dist/{flex-Cmd1vWus.js → flex-BGVyAdBX.js} +2 -2
  62. package/dist/{flex-Cmd1vWus.js.map → flex-BGVyAdBX.js.map} +1 -1
  63. package/dist/{flex-CbweZ1uz.cjs → flex-DeB79N0h.cjs} +2 -2
  64. package/dist/{flex-CbweZ1uz.cjs.map → flex-DeB79N0h.cjs.map} +1 -1
  65. package/dist/{form-qGZu5wRz.js → form-DATARECy.js} +2 -2
  66. package/dist/{form-qGZu5wRz.js.map → form-DATARECy.js.map} +1 -1
  67. package/dist/{form-GwdkWkeq.cjs → form-Dkh-YG_8.cjs} +2 -2
  68. package/dist/{form-GwdkWkeq.cjs.map → form-Dkh-YG_8.cjs.map} +1 -1
  69. package/dist/form.cjs +1 -1
  70. package/dist/form.js +1 -1
  71. package/dist/{icon-DYd0ia3y.cjs → icon-BbqYaRVu.cjs} +2 -2
  72. package/dist/{icon-DYd0ia3y.cjs.map → icon-BbqYaRVu.cjs.map} +1 -1
  73. package/dist/{icon-0jYWClYF.js → icon-BdqEZEF8.js} +3 -3
  74. package/dist/{icon-0jYWClYF.js.map → icon-BdqEZEF8.js.map} +1 -1
  75. package/dist/{icon-button-CNn-TBQr.cjs → icon-button-BUUtmKnu.cjs} +2 -2
  76. package/dist/{icon-button-CNn-TBQr.cjs.map → icon-button-BUUtmKnu.cjs.map} +1 -1
  77. package/dist/{icon-button-Cb9UFHRA.js → icon-button-DlnuclQQ.js} +3 -3
  78. package/dist/{icon-button-Cb9UFHRA.js.map → icon-button-DlnuclQQ.js.map} +1 -1
  79. package/dist/icons.cjs +1 -1
  80. package/dist/icons.js +1 -1
  81. package/dist/index.cjs +1 -1
  82. package/dist/index.js +35 -35
  83. package/dist/{input-BwUKlNLv.js → input-BDUd1ZGs.js} +2 -2
  84. package/dist/{input-BwUKlNLv.js.map → input-BDUd1ZGs.js.map} +1 -1
  85. package/dist/{input-BDvmjqzB.cjs → input-B_MWCRet.cjs} +2 -2
  86. package/dist/{input-BDvmjqzB.cjs.map → input-B_MWCRet.cjs.map} +1 -1
  87. package/dist/input.cjs +1 -1
  88. package/dist/input.js +1 -1
  89. package/dist/layout.cjs +1 -1
  90. package/dist/layout.js +1 -1
  91. package/dist/{list-nuLmomtu.js → list-D0J2ndMA.js} +2 -2
  92. package/dist/{list-nuLmomtu.js.map → list-D0J2ndMA.js.map} +1 -1
  93. package/dist/{list-DGZ8nQDV.cjs → list-UOeNjOTt.cjs} +2 -2
  94. package/dist/{list-DGZ8nQDV.cjs.map → list-UOeNjOTt.cjs.map} +1 -1
  95. package/dist/list.cjs +1 -1
  96. package/dist/list.js +1 -1
  97. package/dist/{litElement.mixin-CsMY3rsN.cjs → litElement.mixin-CfkMd-bR.cjs} +2 -2
  98. package/dist/{litElement.mixin-CsMY3rsN.cjs.map → litElement.mixin-CfkMd-bR.cjs.map} +1 -1
  99. package/dist/{litElement.mixin-KVNPHS0h.js → litElement.mixin-PXLBM6N4.js} +2 -2
  100. package/dist/{litElement.mixin-KVNPHS0h.js.map → litElement.mixin-PXLBM6N4.js.map} +1 -1
  101. package/dist/{menu-BoAxrHvz.cjs → menu-B4k2_5rl.cjs} +2 -2
  102. package/dist/{menu-BoAxrHvz.cjs.map → menu-B4k2_5rl.cjs.map} +1 -1
  103. package/dist/{menu-DCdcWg1Q.js → menu-D7PxtMOz.js} +3 -3
  104. package/dist/{menu-DCdcWg1Q.js.map → menu-D7PxtMOz.js.map} +1 -1
  105. package/dist/menu.cjs +1 -1
  106. package/dist/menu.js +1 -1
  107. package/dist/nav-drawer.cjs +1 -1
  108. package/dist/nav-drawer.js +1 -1
  109. package/dist/notification.cjs +1 -1
  110. package/dist/notification.js +1 -1
  111. package/dist/{option-BOoGEXyd.cjs → option-hsAZB8ji.cjs} +2 -2
  112. package/dist/{option-BOoGEXyd.cjs.map → option-hsAZB8ji.cjs.map} +1 -1
  113. package/dist/{option-04xx4j0z.js → option-vV2BM1B_.js} +2 -2
  114. package/dist/{option-04xx4j0z.js.map → option-vV2BM1B_.js.map} +1 -1
  115. package/dist/option.cjs +1 -1
  116. package/dist/option.js +1 -1
  117. package/dist/{outlet-C9H_6XOK.cjs → outlet-DMOeEL6g.cjs} +2 -2
  118. package/dist/{outlet-C9H_6XOK.cjs.map → outlet-DMOeEL6g.cjs.map} +1 -1
  119. package/dist/{outlet-DlGwFO9i.js → outlet-DRaXjbOY.js} +2 -2
  120. package/dist/{outlet-DlGwFO9i.js.map → outlet-DRaXjbOY.js.map} +1 -1
  121. package/dist/{payment-card-form-DtcRjZp8.js → payment-card-form-8oXgNTFN.js} +3 -3
  122. package/dist/{payment-card-form-DtcRjZp8.js.map → payment-card-form-8oXgNTFN.js.map} +1 -1
  123. package/dist/{payment-card-form-BaysKg6Z.cjs → payment-card-form-DfbqzyTv.cjs} +2 -2
  124. package/dist/{payment-card-form-BaysKg6Z.cjs.map → payment-card-form-DfbqzyTv.cjs.map} +1 -1
  125. package/dist/{radio-group-BV6zZQBP.cjs → radio-group-CLt-d-Ni.cjs} +2 -2
  126. package/dist/{radio-group-BV6zZQBP.cjs.map → radio-group-CLt-d-Ni.cjs.map} +1 -1
  127. package/dist/{radio-group-BPFwj4dx.js → radio-group-DRXtgyf5.js} +2 -2
  128. package/dist/{radio-group-BPFwj4dx.js.map → radio-group-DRXtgyf5.js.map} +1 -1
  129. package/dist/radio-group.cjs +1 -1
  130. package/dist/radio-group.js +1 -1
  131. package/dist/{schmancy-steps-container-CT4W6h4t.js → schmancy-steps-container-D1k0kjKI.js} +2 -2
  132. package/dist/{schmancy-steps-container-CT4W6h4t.js.map → schmancy-steps-container-D1k0kjKI.js.map} +1 -1
  133. package/dist/{schmancy-steps-container-CQp7mdgo.cjs → schmancy-steps-container-DguK5NK4.cjs} +2 -2
  134. package/dist/{schmancy-steps-container-CQp7mdgo.cjs.map → schmancy-steps-container-DguK5NK4.cjs.map} +1 -1
  135. package/dist/{select-dLquQtbc.cjs → select-BUUelLow.cjs} +3 -3
  136. package/dist/select-BUUelLow.cjs.map +1 -0
  137. package/dist/{select-CGse8Q3B.js → select-By_Pm8TG.js} +4 -4
  138. package/dist/select-By_Pm8TG.js.map +1 -0
  139. package/dist/select.cjs +1 -1
  140. package/dist/select.js +1 -1
  141. package/dist/{sheet-PKhdztII.js → sheet-CHow9LJ8.js} +3 -3
  142. package/dist/{sheet-PKhdztII.js.map → sheet-CHow9LJ8.js.map} +1 -1
  143. package/dist/{sheet-RxCJqnwE.cjs → sheet-CyZB5a4W.cjs} +2 -2
  144. package/dist/{sheet-RxCJqnwE.cjs.map → sheet-CyZB5a4W.cjs.map} +1 -1
  145. package/dist/sheet.cjs +1 -1
  146. package/dist/sheet.js +1 -1
  147. package/dist/{slider-DKZODC7g.js → slider-BORUoU4I.js} +3 -3
  148. package/dist/{slider-DKZODC7g.js.map → slider-BORUoU4I.js.map} +1 -1
  149. package/dist/{slider-Cw5jFlAO.cjs → slider-DCRfwhaP.cjs} +2 -2
  150. package/dist/{slider-Cw5jFlAO.cjs.map → slider-DCRfwhaP.cjs.map} +1 -1
  151. package/dist/slider.cjs +1 -1
  152. package/dist/slider.js +1 -1
  153. package/dist/{spinner-Cr6ZRUW_.js → spinner-C-rMlbyB.js} +3 -3
  154. package/dist/{spinner-Cr6ZRUW_.js.map → spinner-C-rMlbyB.js.map} +1 -1
  155. package/dist/{spinner-BIT7SlWT.cjs → spinner-DeHbns2e.cjs} +2 -2
  156. package/dist/{spinner-BIT7SlWT.cjs.map → spinner-DeHbns2e.cjs.map} +1 -1
  157. package/dist/steps.cjs +1 -1
  158. package/dist/steps.js +1 -1
  159. package/dist/{surface-BwHzF1Al.js → surface-HAEl5c8W.js} +2 -2
  160. package/dist/{surface-BwHzF1Al.js.map → surface-HAEl5c8W.js.map} +1 -1
  161. package/dist/{surface-CU_71bTu.cjs → surface-TpxKBWnD.cjs} +2 -2
  162. package/dist/{surface-CU_71bTu.cjs.map → surface-TpxKBWnD.cjs.map} +1 -1
  163. package/dist/surface.cjs +1 -1
  164. package/dist/surface.js +1 -1
  165. package/dist/{table-CAAYvRWb.js → table-D7KL2FaN.js} +166 -164
  166. package/dist/table-D7KL2FaN.js.map +1 -0
  167. package/dist/table-DXPDEHEh.cjs +65 -0
  168. package/dist/table-DXPDEHEh.cjs.map +1 -0
  169. package/dist/table.cjs +1 -1
  170. package/dist/table.js +1 -1
  171. package/dist/{tabs-group-DKgFtkF4.cjs → tabs-group-CR2cSCNr.cjs} +2 -2
  172. package/dist/{tabs-group-DKgFtkF4.cjs.map → tabs-group-CR2cSCNr.cjs.map} +1 -1
  173. package/dist/{tabs-group-3mMfpHn0.js → tabs-group-Dm_FCj7q.js} +2 -2
  174. package/dist/{tabs-group-3mMfpHn0.js.map → tabs-group-Dm_FCj7q.js.map} +1 -1
  175. package/dist/tabs.cjs +1 -1
  176. package/dist/tabs.js +1 -1
  177. package/dist/tailwind.mixin-CjSVtdHt.cjs +2 -0
  178. package/dist/{tailwind.mixin-BAMa8YNR.cjs.map → tailwind.mixin-CjSVtdHt.cjs.map} +1 -1
  179. package/dist/tailwind.mixin-Cxj7n9Jd.js +43 -0
  180. package/dist/{tailwind.mixin-BQyZrGP1.js.map → tailwind.mixin-Cxj7n9Jd.js.map} +1 -1
  181. package/dist/teleport.cjs +1 -1
  182. package/dist/{teleport.component-CoBmvVft.cjs → teleport.component-AE9wd-Xe.cjs} +2 -2
  183. package/dist/{teleport.component-CoBmvVft.cjs.map → teleport.component-AE9wd-Xe.cjs.map} +1 -1
  184. package/dist/{teleport.component-kmPwZ6q9.js → teleport.component-B8yyRFCq.js} +37 -37
  185. package/dist/{teleport.component-kmPwZ6q9.js.map → teleport.component-B8yyRFCq.js.map} +1 -1
  186. package/dist/teleport.js +1 -1
  187. package/dist/{textarea-BX6iD8ez.cjs → textarea-CLlh5-HA.cjs} +2 -2
  188. package/dist/{textarea-BX6iD8ez.cjs.map → textarea-CLlh5-HA.cjs.map} +1 -1
  189. package/dist/{textarea-DrtTwsZf.js → textarea-DcSAsR60.js} +2 -2
  190. package/dist/{textarea-DrtTwsZf.js.map → textarea-DcSAsR60.js.map} +1 -1
  191. package/dist/textarea.cjs +1 -1
  192. package/dist/textarea.js +1 -1
  193. package/dist/{theme-button-C8uLYaSN.cjs → theme-button-53Mhj3kQ.cjs} +2 -2
  194. package/dist/{theme-button-C8uLYaSN.cjs.map → theme-button-53Mhj3kQ.cjs.map} +1 -1
  195. package/dist/{theme-button-BedwumBT.js → theme-button-B7_LXWoe.js} +2 -2
  196. package/dist/{theme-button-BedwumBT.js.map → theme-button-B7_LXWoe.js.map} +1 -1
  197. package/dist/theme-button.cjs +1 -1
  198. package/dist/theme-button.js +1 -1
  199. package/dist/theme.cjs +1 -1
  200. package/dist/{theme.component-DvlxAH1p.cjs → theme.component-Drmkh4sF.cjs} +2 -2
  201. package/dist/{theme.component-DvlxAH1p.cjs.map → theme.component-Drmkh4sF.cjs.map} +1 -1
  202. package/dist/{theme.component-zxDCAaxd.js → theme.component-yFb6vlsT.js} +2 -2
  203. package/dist/{theme.component-zxDCAaxd.js.map → theme.component-yFb6vlsT.js.map} +1 -1
  204. package/dist/theme.js +1 -1
  205. package/dist/{timezone-1BrrQMHz.js → timezone-DxkvIe7V.js} +3 -3
  206. package/dist/{timezone-1BrrQMHz.js.map → timezone-DxkvIe7V.js.map} +1 -1
  207. package/dist/{timezone-D14kTMKK.cjs → timezone-enXRjPy1.cjs} +2 -2
  208. package/dist/{timezone-D14kTMKK.cjs.map → timezone-enXRjPy1.cjs.map} +1 -1
  209. package/dist/{tree-C_TPLHEo.cjs → tree-Bt4J6QVI.cjs} +2 -2
  210. package/dist/{tree-C_TPLHEo.cjs.map → tree-Bt4J6QVI.cjs.map} +1 -1
  211. package/dist/{tree-DuaRuwS9.js → tree-CQccoc9W.js} +2 -2
  212. package/dist/{tree-DuaRuwS9.js.map → tree-CQccoc9W.js.map} +1 -1
  213. package/dist/tree.cjs +1 -1
  214. package/dist/tree.js +1 -1
  215. package/dist/{typewriter-Fim6s-vF.js → typewriter-DGserMVU.js} +4 -4
  216. package/dist/{typewriter-Fim6s-vF.js.map → typewriter-DGserMVU.js.map} +1 -1
  217. package/dist/{typewriter-C2NQzIJ9.cjs → typewriter-WqDo75_3.cjs} +2 -2
  218. package/dist/{typewriter-C2NQzIJ9.cjs.map → typewriter-WqDo75_3.cjs.map} +1 -1
  219. package/dist/typewriter.cjs +1 -1
  220. package/dist/typewriter.js +1 -1
  221. package/dist/{typography-C4RygG_b.js → typography-D5E46rwN.js} +2 -2
  222. package/dist/{typography-C4RygG_b.js.map → typography-D5E46rwN.js.map} +1 -1
  223. package/dist/{typography-f0kdRUDj.cjs → typography-DbNitvGl.cjs} +2 -2
  224. package/dist/{typography-f0kdRUDj.cjs.map → typography-DbNitvGl.cjs.map} +1 -1
  225. package/dist/typography.cjs +1 -1
  226. package/dist/typography.js +1 -1
  227. package/package.json +1 -1
  228. package/types/src/table/row.d.ts +8 -7
  229. package/types/src/table/table.d.ts +11 -5
  230. package/dist/select-CGse8Q3B.js.map +0 -1
  231. package/dist/select-dLquQtbc.cjs.map +0 -1
  232. package/dist/table-B3lX6zue.cjs +0 -80
  233. package/dist/table-B3lX6zue.cjs.map +0 -1
  234. package/dist/table-CAAYvRWb.js.map +0 -1
  235. package/dist/tailwind.mixin-BAMa8YNR.cjs +0 -2
  236. package/dist/tailwind.mixin-BQyZrGP1.js +0 -43
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-CGse8Q3B.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value: string | string[] = '' // for single-select or multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\t@property({ type: String }) validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('sch-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\t@state() _userInteracted = false\n\t@state() private _touched = false\n\t@state() private _dirty = false\n\t@state() private _submitted = false\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\n\t\t// Listen for form submission events to mark field as submitted\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.addEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t\tthis.checkValidity()\n\t\t\t})\n\n\t\t\t// Listen for form reset\n\t\t\tthis.internals.form.addEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Remove form event listeners\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.removeEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t})\n\n\t\t\tthis.internals.form.removeEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Mark as dirty if value changes from initial value\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis._dirty = true\n\t\t\t}\n\n\t\t\t// Check validity based on validation strategy\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this._touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this._dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this._submitted\n\t\t\tdefault:\n\t\t\t\treturn this._touched\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\t\t\tthis.options.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\tthis._touched = true // Mark as touched when dropdown is opened\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis._touched = true // Mark as touched when dropdown is closed\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\n\t\t// Check validity when closing, respecting validation strategy\n\t\tif (this.shouldShowValidation()) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tthis._userInteracted = true\n\t\tthis._touched = true\n\t\tthis._dirty = true\n\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tlet selectedValues = Array.isArray(this.value) ? [...this.value] : []\n\n\t\t\tif (option.selected) {\n\t\t\t\tselectedValues = [...selectedValues, value]\n\t\t\t} else {\n\t\t\t\tselectedValues = selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.value = selectedValues\n\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\n\t\t// Check validity respecting validation strategy\n\t\tthis.checkValidity()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\t// Dispatch events first\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }))\n\n\t\t// Then check validity (only show error if validation should be shown)\n\t\tthis.checkValidity()\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\t// Determine if the select is empty based on whether it's multi-select or single-select\n\t\tconst isEmpty = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value\n\n\t\t// Check if the value is valid (not empty when required)\n\t\tconst isValid = !(this.required && isEmpty)\n\n\t\t// Set the validity state\n\t\tthis.isValid = isValid\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\t// Clear validation message\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update the input component to reflect our validation state\n\t\tif (this.inputRef && this.hasUpdated) {\n\t\t\tconst showError = !this.isValid && this.shouldShowValidation()\n\t\t\tthis.inputRef.error = showError\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\t// Force validation display regardless of validation strategy\n\t\tconst valid = this.checkValidity()\n\n\t\t// Force the input to show validation errors\n\t\tif (this.inputRef) {\n\t\t\t// Set the input's error state\n\t\t\tthis.inputRef.error = !valid\n\t\t\tthis.inputRef.hint = !valid ? this.validationMessage : this.hint\n\n\t\t\t// Only call reportValidity on the input if invalid to show the native popup\n\t\t\tif (!valid) {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tif (message) {\n\t\t\tthis.isValid = false\n\t\t\tthis.internals?.setValidity({ customError: true }, message, this.inputRef)\n\t\t} else {\n\t\t\tthis.isValid = true\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update input if needed\n\t\tif (this.inputRef && this.shouldShowValidation()) {\n\t\t\tthis.inputRef.error = !this.isValid\n\t\t\tthis.inputRef.hint = !this.isValid ? this.validationMessage : this.hint\n\t\t}\n\t}\n\n\tpublic reset() {\n\t\tthis.value = ''\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis._touched = false\n\t\tthis._dirty = false\n\t\tthis._submitted = false\n\t\tthis._userInteracted = false\n\t\tthis.internals?.setValidity({})\n\t\tthis.options.forEach(o => (o.selected = false))\n\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t\tthis.inputRef.hint = this.hint\n\t\t}\n\t}\n\n\trender(): TemplateResult {\n\t\t// Determine if we should show errors based on the validation strategy\n\t\tconst showErrors = !this.isValid && this.shouldShowValidation()\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<sch-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.hint=${showErrors ? this.validationMessage : this.hint}\n\t\t\t\t\t.error=${showErrors}\n\t\t\t\t\t.validateOn=${this.validateOn}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></sch-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","constructor","super","this","required","placeholder","value","multi","label","hint","validateOn","isOpen","valueLabel","isValid","validationMessage","_userInteracted","_touched","_dirty","_submitted","handleKeyDown","e","includes","key","preventDefault","openDropdown","current","options","findIndex","o","matches","closeDropdown","focusOption","Math","min","length","max","handleOptionSelect","internals","attachInternals","form","connectedCallback","id","random","toString","substr","addEventListener","checkValidity","reset","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","Array","isArray","join","setFormValue","hasUpdated","forceValidation","selectedValues","forEach","selected","filter","map","selectedOption","find","option","index","setAttribute","tabIndex","String","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","focus","combobox","report","updateComplete","positionDropdown","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","shouldShowValidation","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","Event","isEmpty","setValidity","valueMissing","inputRef","showError","error","valid","message","customError","showErrors","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","formAssociated","__decorateClass","property","type","prototype","Boolean","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-dLquQtbc.cjs","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value: string | string[] = '' // for single-select or multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\t@property({ type: String }) validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('sch-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\t@state() _userInteracted = false\n\t@state() private _touched = false\n\t@state() private _dirty = false\n\t@state() private _submitted = false\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\n\t\t// Listen for form submission events to mark field as submitted\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.addEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t\tthis.checkValidity()\n\t\t\t})\n\n\t\t\t// Listen for form reset\n\t\t\tthis.internals.form.addEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Remove form event listeners\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.removeEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t})\n\n\t\t\tthis.internals.form.removeEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Mark as dirty if value changes from initial value\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis._dirty = true\n\t\t\t}\n\n\t\t\t// Check validity based on validation strategy\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this._touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this._dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this._submitted\n\t\t\tdefault:\n\t\t\t\treturn this._touched\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\t\t\tthis.options.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\tthis._touched = true // Mark as touched when dropdown is opened\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis._touched = true // Mark as touched when dropdown is closed\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\n\t\t// Check validity when closing, respecting validation strategy\n\t\tif (this.shouldShowValidation()) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tthis._userInteracted = true\n\t\tthis._touched = true\n\t\tthis._dirty = true\n\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tlet selectedValues = Array.isArray(this.value) ? [...this.value] : []\n\n\t\t\tif (option.selected) {\n\t\t\t\tselectedValues = [...selectedValues, value]\n\t\t\t} else {\n\t\t\t\tselectedValues = selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.value = selectedValues\n\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\n\t\t// Check validity respecting validation strategy\n\t\tthis.checkValidity()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\t// Dispatch events first\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }))\n\n\t\t// Then check validity (only show error if validation should be shown)\n\t\tthis.checkValidity()\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\t// Determine if the select is empty based on whether it's multi-select or single-select\n\t\tconst isEmpty = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value\n\n\t\t// Check if the value is valid (not empty when required)\n\t\tconst isValid = !(this.required && isEmpty)\n\n\t\t// Set the validity state\n\t\tthis.isValid = isValid\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\t// Clear validation message\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update the input component to reflect our validation state\n\t\tif (this.inputRef && this.hasUpdated) {\n\t\t\tconst showError = !this.isValid && this.shouldShowValidation()\n\t\t\tthis.inputRef.error = showError\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\t// Force validation display regardless of validation strategy\n\t\tconst valid = this.checkValidity()\n\n\t\t// Force the input to show validation errors\n\t\tif (this.inputRef) {\n\t\t\t// Set the input's error state\n\t\t\tthis.inputRef.error = !valid\n\t\t\tthis.inputRef.hint = !valid ? this.validationMessage : this.hint\n\n\t\t\t// Only call reportValidity on the input if invalid to show the native popup\n\t\t\tif (!valid) {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tif (message) {\n\t\t\tthis.isValid = false\n\t\t\tthis.internals?.setValidity({ customError: true }, message, this.inputRef)\n\t\t} else {\n\t\t\tthis.isValid = true\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update input if needed\n\t\tif (this.inputRef && this.shouldShowValidation()) {\n\t\t\tthis.inputRef.error = !this.isValid\n\t\t\tthis.inputRef.hint = !this.isValid ? this.validationMessage : this.hint\n\t\t}\n\t}\n\n\tpublic reset() {\n\t\tthis.value = ''\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis._touched = false\n\t\tthis._dirty = false\n\t\tthis._submitted = false\n\t\tthis._userInteracted = false\n\t\tthis.internals?.setValidity({})\n\t\tthis.options.forEach(o => (o.selected = false))\n\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t\tthis.inputRef.hint = this.hint\n\t\t}\n\t}\n\n\trender(): TemplateResult {\n\t\t// Determine if we should show errors based on the validation strategy\n\t\tconst showErrors = !this.isValid && this.shouldShowValidation()\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<sch-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.hint=${showErrors ? this.validationMessage : this.hint}\n\t\t\t\t\t.error=${showErrors}\n\t\t\t\t\t.validateOn=${this.validateOn}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></sch-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","constructor","super","this","required","placeholder","value","multi","label","hint","validateOn","isOpen","valueLabel","isValid","validationMessage","_userInteracted","_touched","_dirty","_submitted","handleKeyDown","e","includes","key","preventDefault","openDropdown","current","options","findIndex","o","matches","closeDropdown","focusOption","Math","min","length","max","handleOptionSelect","internals","attachInternals","form","connectedCallback","id","random","toString","substr","addEventListener","checkValidity","reset","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","Array","isArray","join","setFormValue","hasUpdated","forceValidation","selectedValues","forEach","selected","filter","map","selectedOption","find","option","index","setAttribute","tabIndex","String","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","focus","combobox","report","updateComplete","positionDropdown","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","shouldShowValidation","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","Event","isEmpty","setValidity","valueMissing","inputRef","showError","error","valid","message","customError","render","showErrors","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","formAssociated","__decorateClass","property","type","prototype","Boolean","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
@@ -1,80 +0,0 @@
1
- "use strict";const p=require("./tslib.es6-DgOcxv4s.cjs"),h=require("lit"),y=require("lit/decorators/property.js"),R=require("lit/directive.js"),D=require("lit/async-directive.js"),C=require("lit/directives/repeat.js"),O=require("./litElement.mixin-CsMY3rsN.cjs"),c=require("lit/decorators.js");var N=Object.defineProperty,j=Object.getOwnPropertyDescriptor,g=(r,t,e,i)=>{for(var s,l=i>1?void 0:i?j(t,e):t,n=r.length-1;n>=0;n--)(s=r[n])&&(l=(i?s(t,e,l):s(l))||l);return i&&l&&N(t,e,l),l};exports.SchmancyTableRow=class extends O.$LitElement(h.css`
2
- :host {
3
- display: block;
4
- z-index: -1;
5
- }
6
- `){constructor(){super(...arguments),this.columns=[],this.cols="1fr"}render(){return h.html`
7
- <schmancy-list-item
8
- @click=${()=>{this.dispatchEvent(new CustomEvent("row-click",{detail:this.item,bubbles:!0,composed:!0}))}}
9
- class="w-full"
10
- >
11
- <schmancy-grid .cols=${this.cols} align="center" gap="md">
12
- ${this.columns.map(r=>{var t;return h.html`
13
- <div class="overflow-hidden text-ellipsis">
14
- <schmancy-typography
15
- align="${r.align||"left"}"
16
- maxLines="2"
17
- weight="${r.weight||"normal"}"
18
- >
19
- ${r.render?r.render(this.item):r.key?(t=this.item)==null?void 0:t[r.key]:""}
20
- </schmancy-typography>
21
- </div>
22
- `})}
23
- <sch-flex
24
- class="min-w-fit block"
25
- flow="row-dense"
26
- .hidden=${Array.isArray(this.actions)&&this.actions.length===0}
27
- >
28
- ${C.repeat(this.actions??[],({name:r})=>r,({name:r,action:t})=>h.html`
29
- <schmancy-icon-button
30
- @click=${e=>{e.stopPropagation(),t(this.item)}}
31
- >
32
- ${r}
33
- </schmancy-icon-button>
34
- `)}
35
- </sch-flex>
36
- <!-- <schmancy-menu .hidden=${Array.isArray(this.actions)&&this.actions.length===0}>
37
- ${C.repeat(this.actions??[],({name:r})=>r,({name:r,action:t})=>h.html`
38
- <schmancy-menu-item
39
- class="z-[10000]"
40
- @click=${e=>{e.stopPropagation(),t(this.item)}}
41
- >
42
- ${r}
43
- </schmancy-menu-item>
44
- `)}
45
- </schmancy-menu> -->
46
- </schmancy-grid>
47
- </schmancy-list-item>
48
- `}},g([c.property({type:Array,attribute:!1})],exports.SchmancyTableRow.prototype,"columns",2),g([c.property({type:Object,attribute:!1})],exports.SchmancyTableRow.prototype,"item",2),g([c.property({type:String})],exports.SchmancyTableRow.prototype,"cols",2),g([c.property({type:Array})],exports.SchmancyTableRow.prototype,"actions",2),exports.SchmancyTableRow=g([c.customElement("schmancy-table-row")],exports.SchmancyTableRow);class b extends Event{constructor(t){super(b.eventName,{bubbles:!1}),this.first=t.first,this.last=t.last}}b.eventName="rangeChanged";class w extends Event{constructor(t){super(w.eventName,{bubbles:!1}),this.first=t.first,this.last=t.last}}w.eventName="visibilityChanged";class S extends Event{constructor(){super(S.eventName,{bubbles:!1})}}S.eventName="unpinned";class H{constructor(t){this._element=null;const e=t??window;this._node=e,t&&(this._element=t)}get element(){return this._element||document.scrollingElement||document.documentElement}get scrollTop(){return this.element.scrollTop||window.scrollY}get scrollLeft(){return this.element.scrollLeft||window.scrollX}get scrollHeight(){return this.element.scrollHeight}get scrollWidth(){return this.element.scrollWidth}get viewportHeight(){return this._element?this._element.getBoundingClientRect().height:window.innerHeight}get viewportWidth(){return this._element?this._element.getBoundingClientRect().width:window.innerWidth}get maxScrollTop(){return this.scrollHeight-this.viewportHeight}get maxScrollLeft(){return this.scrollWidth-this.viewportWidth}}class q extends H{constructor(t,e){super(e),this._clients=new Set,this._retarget=null,this._end=null,this.t=null,this.correctingScrollError=!1,this._checkForArrival=this._checkForArrival.bind(this),this._updateManagedScrollTo=this._updateManagedScrollTo.bind(this),this.scrollTo=this.scrollTo.bind(this),this.scrollBy=this.scrollBy.bind(this);const i=this._node;this._originalScrollTo=i.scrollTo,this._originalScrollBy=i.scrollBy,this._originalScroll=i.scroll,this._attach(t)}get _destination(){return this.t}get scrolling(){return this._destination!==null}scrollTo(t,e){const i=typeof t=="number"&&typeof e=="number"?{left:t,top:e}:t;this._scrollTo(i)}scrollBy(t,e){const i=typeof t=="number"&&typeof e=="number"?{left:t,top:e}:t;i.top!==void 0&&(i.top+=this.scrollTop),i.left!==void 0&&(i.left+=this.scrollLeft),this._scrollTo(i)}_nativeScrollTo(t){this._originalScrollTo.bind(this._element||window)(t)}_scrollTo(t,e=null,i=null){this._end!==null&&this._end(),t.behavior==="smooth"?(this._setDestination(t),this._retarget=e,this._end=i):this._resetScrollState(),this._nativeScrollTo(t)}_setDestination(t){let{top:e,left:i}=t;return e=e===void 0?void 0:Math.max(0,Math.min(e,this.maxScrollTop)),i=i===void 0?void 0:Math.max(0,Math.min(i,this.maxScrollLeft)),(this._destination===null||i!==this._destination.left||e!==this._destination.top)&&(this.t={top:e,left:i,behavior:"smooth"},!0)}_resetScrollState(){this.t=null,this._retarget=null,this._end=null}_updateManagedScrollTo(t){this._destination&&this._setDestination(t)&&this._nativeScrollTo(this._destination)}managedScrollTo(t,e,i){return this._scrollTo(t,e,i),this._updateManagedScrollTo}correctScrollError(t){this.correctingScrollError=!0,requestAnimationFrame(()=>requestAnimationFrame(()=>this.correctingScrollError=!1)),this._nativeScrollTo(t),this._retarget&&this._setDestination(this._retarget()),this._destination&&this._nativeScrollTo(this._destination)}_checkForArrival(){if(this._destination!==null){const{scrollTop:t,scrollLeft:e}=this;let{top:i,left:s}=this._destination;i=Math.min(i||0,this.maxScrollTop),s=Math.min(s||0,this.maxScrollLeft);const l=Math.abs(i-t),n=Math.abs(s-e);l<1&&n<1&&(this._end&&this._end(),this._resetScrollState())}}detach(t){return this._clients.delete(t),this._clients.size===0&&(this._node.scrollTo=this._originalScrollTo,this._node.scrollBy=this._originalScrollBy,this._node.scroll=this._originalScroll,this._node.removeEventListener("scroll",this._checkForArrival)),null}_attach(t){this._clients.add(t),this._clients.size===1&&(this._node.scrollTo=this.scrollTo,this._node.scrollBy=this.scrollBy,this._node.scroll=this.scrollTo,this._node.addEventListener("scroll",this._checkForArrival))}}let z=typeof window<"u"?window.ResizeObserver:void 0;const E=Symbol("virtualizerRef"),f="virtualizer-sizer";let x;class W{constructor(t){if(this._benchmarkStart=null,this._layout=null,this._clippingAncestors=[],this._scrollSize=null,this._scrollError=null,this._childrenPos=null,this._childMeasurements=null,this._toBeMeasured=new Map,this._rangeChanged=!0,this._itemsChanged=!0,this._visibilityChanged=!0,this._scrollerController=null,this._isScroller=!1,this._sizer=null,this._hostElementRO=null,this._childrenRO=null,this._mutationObserver=null,this._scrollEventListeners=[],this._scrollEventListenerOptions={passive:!0},this._loadListener=this._childLoaded.bind(this),this._scrollIntoViewTarget=null,this._updateScrollIntoViewCoordinates=null,this._items=[],this._first=-1,this._last=-1,this._firstVisible=-1,this._lastVisible=-1,this._scheduled=new WeakSet,this._measureCallback=null,this._measureChildOverride=null,this._layoutCompletePromise=null,this._layoutCompleteResolver=null,this._layoutCompleteRejecter=null,this._pendingLayoutComplete=null,this._layoutInitialized=null,this._connected=!1,!t)throw new Error("Virtualizer constructor requires a configuration object");if(!t.hostElement)throw new Error('Virtualizer configuration requires the "hostElement" property');this._init(t)}set items(t){Array.isArray(t)&&t!==this._items&&(this._itemsChanged=!0,this._items=t,this._schedule(this._updateLayout))}_init(t){this._isScroller=!!t.scroller,this._initHostElement(t);const e=t.layout||{};this._layoutInitialized=this._initLayout(e)}_initObservers(){this._mutationObserver=new MutationObserver(this._finishDOMUpdate.bind(this)),this._hostElementRO=new z(()=>this._hostElementSizeChanged()),this._childrenRO=new z(this._childrenSizeChanged.bind(this))}_initHostElement(t){const e=this._hostElement=t.hostElement;this._applyVirtualizerStyles(),e[E]=this}connected(){this._initObservers();const t=this._isScroller;this._clippingAncestors=function(e,i=!1){let s=!1;return function(l,n=!1){const d=[];let a=n?l:k(l);for(;a!==null;)d.push(a),a=k(a);return d}(e,i).filter(l=>{if(s)return!1;const n=getComputedStyle(l);return s=n.position==="fixed",n.overflow!=="visible"})}(this._hostElement,t),this._scrollerController=new q(this,this._clippingAncestors[0]),this._schedule(this._updateLayout),this._observeAndListen(),this._connected=!0}_observeAndListen(){this._mutationObserver.observe(this._hostElement,{childList:!0}),this._hostElementRO.observe(this._hostElement),this._scrollEventListeners.push(window),window.addEventListener("scroll",this,this._scrollEventListenerOptions),this._clippingAncestors.forEach(t=>{t.addEventListener("scroll",this,this._scrollEventListenerOptions),this._scrollEventListeners.push(t),this._hostElementRO.observe(t)}),this._hostElementRO.observe(this._scrollerController.element),this._children.forEach(t=>this._childrenRO.observe(t)),this._scrollEventListeners.forEach(t=>t.addEventListener("scroll",this,this._scrollEventListenerOptions))}disconnected(){var t,e,i,s;this._scrollEventListeners.forEach(l=>l.removeEventListener("scroll",this,this._scrollEventListenerOptions)),this._scrollEventListeners=[],this._clippingAncestors=[],(t=this._scrollerController)==null||t.detach(this),this._scrollerController=null,(e=this._mutationObserver)==null||e.disconnect(),this._mutationObserver=null,(i=this._hostElementRO)==null||i.disconnect(),this._hostElementRO=null,(s=this._childrenRO)==null||s.disconnect(),this._childrenRO=null,this._rejectLayoutCompletePromise("disconnected"),this._connected=!1}_applyVirtualizerStyles(){const t=this._hostElement.style;t.display=t.display||"block",t.position=t.position||"relative",t.contain=t.contain||"size layout",this._isScroller&&(t.overflow=t.overflow||"auto",t.minHeight=t.minHeight||"150px")}_getSizer(){const t=this._hostElement;if(!this._sizer){let e=t.querySelector(`[${f}]`);e||(e=document.createElement("div"),e.setAttribute(f,""),t.appendChild(e)),Object.assign(e.style,{position:"absolute",margin:"-2px 0 0 0",padding:0,visibility:"hidden",fontSize:"2px"}),e.textContent="&nbsp;",e.setAttribute(f,""),this._sizer=e}return this._sizer}async updateLayoutConfig(t){await this._layoutInitialized;const e=t.type||x;if(typeof e=="function"&&this._layout instanceof e){const i={...t};return delete i.type,this._layout.config=i,!0}return!1}async _initLayout(t){let e,i;if(typeof t.type=="function"){i=t.type;const s={...t};delete s.type,e=s}else e=t;i===void 0&&(x=i=(await Promise.resolve().then(()=>require("./flow-CnJl1T1A.cjs"))).FlowLayout),this._layout=new i(s=>this._handleLayoutMessage(s),e),this._layout.measureChildren&&typeof this._layout.updateItemSizes=="function"&&(typeof this._layout.measureChildren=="function"&&(this._measureChildOverride=this._layout.measureChildren),this._measureCallback=this._layout.updateItemSizes.bind(this._layout)),this._layout.listenForChildLoadEvents&&this._hostElement.addEventListener("load",this._loadListener,!0),this._schedule(this._updateLayout)}startBenchmarking(){this._benchmarkStart===null&&(this._benchmarkStart=window.performance.now())}stopBenchmarking(){if(this._benchmarkStart!==null){const t=window.performance.now(),e=t-this._benchmarkStart,i=performance.getEntriesByName("uv-virtualizing","measure").filter(s=>s.startTime>=this._benchmarkStart&&s.startTime<t).reduce((s,l)=>s+l.duration,0);return this._benchmarkStart=null,{timeElapsed:e,virtualizationTime:i}}return null}_measureChildren(){const t={},e=this._children,i=this._measureChildOverride||this._measureChild;for(let s=0;s<e.length;s++){const l=e[s],n=this._first+s;(this._itemsChanged||this._toBeMeasured.has(l))&&(t[n]=i.call(this,l,this._items[n]))}this._childMeasurements=t,this._schedule(this._updateLayout),this._toBeMeasured.clear()}_measureChild(t){const{width:e,height:i}=t.getBoundingClientRect();return Object.assign({width:e,height:i},function(s){const l=window.getComputedStyle(s);return{marginTop:v(l.marginTop),marginRight:v(l.marginRight),marginBottom:v(l.marginBottom),marginLeft:v(l.marginLeft)}}(t))}async _schedule(t){this._scheduled.has(t)||(this._scheduled.add(t),await Promise.resolve(),this._scheduled.delete(t),t.call(this))}async _updateDOM(t){this._scrollSize=t.scrollSize,this._adjustRange(t.range),this._childrenPos=t.childPositions,this._scrollError=t.scrollError||null;const{_rangeChanged:e,_itemsChanged:i}=this;this._visibilityChanged&&(this._notifyVisibility(),this._visibilityChanged=!1),(e||i)&&(this._notifyRange(),this._rangeChanged=!1),this._finishDOMUpdate()}_finishDOMUpdate(){this._connected&&(this._children.forEach(t=>this._childrenRO.observe(t)),this._checkScrollIntoViewTarget(this._childrenPos),this._positionChildren(this._childrenPos),this._sizeHostElement(this._scrollSize),this._correctScrollError(),this._benchmarkStart&&"mark"in window.performance&&window.performance.mark("uv-end"))}_updateLayout(){this._layout&&this._connected&&(this._layout.items=this._items,this._updateView(),this._childMeasurements!==null&&(this._measureCallback&&this._measureCallback(this._childMeasurements),this._childMeasurements=null),this._layout.reflowIfNeeded(),this._benchmarkStart&&"mark"in window.performance&&window.performance.mark("uv-end"))}_handleScrollEvent(){var t;if(this._benchmarkStart&&"mark"in window.performance){try{window.performance.measure("uv-virtualizing","uv-start","uv-end")}catch{}window.performance.mark("uv-start")}this._scrollerController.correctingScrollError===!1&&((t=this._layout)==null||t.unpin()),this._schedule(this._updateLayout)}handleEvent(t){t.type==="scroll"&&(t.currentTarget===window||this._clippingAncestors.includes(t.currentTarget))&&this._handleScrollEvent()}_handleLayoutMessage(t){t.type==="stateChanged"?this._updateDOM(t):t.type==="visibilityChanged"?(this._firstVisible=t.firstVisible,this._lastVisible=t.lastVisible,this._notifyVisibility()):t.type==="unpinned"&&this._hostElement.dispatchEvent(new S)}get _children(){const t=[];let e=this._hostElement.firstElementChild;for(;e;)e.hasAttribute(f)||t.push(e),e=e.nextElementSibling;return t}_updateView(){var s;const t=this._hostElement,e=(s=this._scrollerController)==null?void 0:s.element,i=this._layout;if(t&&e&&i){let l,n,d,a;const o=t.getBoundingClientRect();l=0,n=0,d=window.innerHeight,a=window.innerWidth;const T=this._clippingAncestors.map(u=>u.getBoundingClientRect());T.unshift(o);for(const u of T)l=Math.max(l,u.top),n=Math.max(n,u.left),d=Math.min(d,u.bottom),a=Math.min(a,u.right);const L=e.getBoundingClientRect(),$={left:o.left-L.left,top:o.top-L.top},I={width:e.scrollWidth,height:e.scrollHeight},A=l-o.top+t.scrollTop,F=n-o.left+t.scrollLeft,B=Math.max(0,d-l),P=Math.max(0,a-n);i.viewportSize={width:P,height:B},i.viewportScroll={top:A,left:F},i.totalScrollSize=I,i.offsetWithinScroller=$}}_sizeHostElement(t){const i=t&&t.width!==null?Math.min(82e5,t.width):0,s=t&&t.height!==null?Math.min(82e5,t.height):0;if(this._isScroller)this._getSizer().style.transform=`translate(${i}px, ${s}px)`;else{const l=this._hostElement.style;l.minWidth=i?`${i}px`:"100%",l.minHeight=s?`${s}px`:"100%"}}_positionChildren(t){t&&t.forEach(({top:e,left:i,width:s,height:l,xOffset:n,yOffset:d},a)=>{const o=this._children[a-this._first];o&&(o.style.position="absolute",o.style.boxSizing="border-box",o.style.transform=`translate(${i}px, ${e}px)`,s!==void 0&&(o.style.width=s+"px"),l!==void 0&&(o.style.height=l+"px"),o.style.left=n===void 0?null:n+"px",o.style.top=d===void 0?null:d+"px")})}async _adjustRange(t){const{_first:e,_last:i,_firstVisible:s,_lastVisible:l}=this;this._first=t.first,this._last=t.last,this._firstVisible=t.firstVisible,this._lastVisible=t.lastVisible,this._rangeChanged=this._rangeChanged||this._first!==e||this._last!==i,this._visibilityChanged=this._visibilityChanged||this._firstVisible!==s||this._lastVisible!==l}_correctScrollError(){if(this._scrollError){const{scrollTop:t,scrollLeft:e}=this._scrollerController,{top:i,left:s}=this._scrollError;this._scrollError=null,this._scrollerController.correctScrollError({top:t-i,left:e-s})}}element(t){var e;return t===1/0&&(t=this._items.length-1),((e=this._items)==null?void 0:e[t])===void 0?void 0:{scrollIntoView:(i={})=>this._scrollElementIntoView({...i,index:t})}}_scrollElementIntoView(t){if(t.index>=this._first&&t.index<=this._last)this._children[t.index-this._first].scrollIntoView(t);else if(t.index=Math.min(t.index,this._items.length-1),t.behavior==="smooth"){const e=this._layout.getScrollIntoViewCoordinates(t),{behavior:i}=t;this._updateScrollIntoViewCoordinates=this._scrollerController.managedScrollTo(Object.assign(e,{behavior:i}),()=>this._layout.getScrollIntoViewCoordinates(t),()=>this._scrollIntoViewTarget=null),this._scrollIntoViewTarget=t}else this._layout.pin=t}_checkScrollIntoViewTarget(t){const{index:e}=this._scrollIntoViewTarget||{};e&&(t!=null&&t.has(e))&&this._updateScrollIntoViewCoordinates(this._layout.getScrollIntoViewCoordinates(this._scrollIntoViewTarget))}_notifyRange(){this._hostElement.dispatchEvent(new b({first:this._first,last:this._last}))}_notifyVisibility(){this._hostElement.dispatchEvent(new w({first:this._firstVisible,last:this._lastVisible}))}get layoutComplete(){return this._layoutCompletePromise||(this._layoutCompletePromise=new Promise((t,e)=>{this._layoutCompleteResolver=t,this._layoutCompleteRejecter=e})),this._layoutCompletePromise}_rejectLayoutCompletePromise(t){this._layoutCompleteRejecter!==null&&this._layoutCompleteRejecter(t),this._resetLayoutCompleteState()}_scheduleLayoutComplete(){this._layoutCompletePromise&&this._pendingLayoutComplete===null&&(this._pendingLayoutComplete=requestAnimationFrame(()=>requestAnimationFrame(()=>this._resolveLayoutCompletePromise())))}_resolveLayoutCompletePromise(){this._layoutCompleteResolver!==null&&this._layoutCompleteResolver(),this._resetLayoutCompleteState()}_resetLayoutCompleteState(){this._layoutCompletePromise=null,this._layoutCompleteResolver=null,this._layoutCompleteRejecter=null,this._pendingLayoutComplete=null}_hostElementSizeChanged(){this._schedule(this._updateLayout)}_childLoaded(){}_childrenSizeChanged(t){var e;if((e=this._layout)!=null&&e.measureChildren){for(const i of t)this._toBeMeasured.set(i.target,i.contentRect);this._measureChildren()}this._scheduleLayoutComplete(),this._itemsChanged=!1,this._rangeChanged=!1}}function v(r){const t=r?parseFloat(r):NaN;return Number.isNaN(t)?0:t}function k(r){if(r.assignedSlot!==null)return r.assignedSlot;if(r.parentElement!==null)return r.parentElement;const t=r.parentNode;return t&&t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host||null}const V=r=>r,M=(r,t)=>h.html`${t}: ${JSON.stringify(r,null,2)}`;class U extends D.AsyncDirective{constructor(t){if(super(t),this._virtualizer=null,this._first=0,this._last=-1,this._renderItem=(e,i)=>M(e,i+this._first),this._keyFunction=(e,i)=>V(e,this._first),this._items=[],t.type!==R.PartType.CHILD)throw new Error("The virtualize directive can only be used in child expressions")}render(t){t&&this._setFunctions(t);const e=[];if(this._first>=0&&this._last>=this._first)for(let i=this._first;i<=this._last;i++)e.push(this._items[i]);return C.repeat(e,this._keyFunction,this._renderItem)}update(t,[e]){this._setFunctions(e);const i=this._items!==e.items;return this._items=e.items||[],this._virtualizer?this._updateVirtualizerConfig(t,e):this._initialize(t,e),i?h.noChange:this.render()}async _updateVirtualizerConfig(t,e){if(!await this._virtualizer.updateLayoutConfig(e.layout||{})){const i=t.parentNode;this._makeVirtualizer(i,e)}this._virtualizer.items=this._items}_setFunctions(t){const{renderItem:e,keyFunction:i}=t;e&&(this._renderItem=(s,l)=>e(s,l+this._first)),i&&(this._keyFunction=(s,l)=>i(s,l+this._first))}_makeVirtualizer(t,e){this._virtualizer&&this._virtualizer.disconnected();const{layout:i,scroller:s,items:l}=e;this._virtualizer=new W({hostElement:t,layout:i,scroller:s}),this._virtualizer.items=l,this._virtualizer.connected()}_initialize(t,e){const i=t.parentNode;i&&i.nodeType===1&&(i.addEventListener("rangeChanged",s=>{this._first=s.first,this._last=s.last,this.setValue(this.render())}),this._makeVirtualizer(i,e))}disconnected(){var t;(t=this._virtualizer)==null||t.disconnected()}reconnected(){var t;(t=this._virtualizer)==null||t.connected()}}const G=R.directive(U);class _ extends h.LitElement{constructor(){super(...arguments),this.items=[],this.renderItem=M,this.keyFunction=V,this.layout={},this.scroller=!1}createRenderRoot(){return this}render(){const{items:t,renderItem:e,keyFunction:i,layout:s,scroller:l}=this;return h.html`${G({items:t,renderItem:e,keyFunction:i,layout:s,scroller:l})}`}element(t){var e;return(e=this[E])==null?void 0:e.element(t)}get layoutComplete(){var t;return(t=this[E])==null?void 0:t.layoutComplete}scrollToIndex(t,e="start"){var i;(i=this.element(t))==null||i.scrollIntoView({block:e})}}p.i([y.property({attribute:!1})],_.prototype,"items",void 0),p.i([y.property()],_.prototype,"renderItem",void 0),p.i([y.property()],_.prototype,"keyFunction",void 0),p.i([y.property({attribute:!1})],_.prototype,"layout",void 0),p.i([y.property({reflect:!0,type:Boolean})],_.prototype,"scroller",void 0),customElements.define("lit-virtualizer",_);var J=Object.defineProperty,X=Object.getOwnPropertyDescriptor,m=(r,t,e,i)=>{for(var s,l=i>1?void 0:i?X(t,e):t,n=r.length-1;n>=0;n--)(s=r[n])&&(l=(i?s(t,e,l):s(l))||l);return i&&l&&J(t,e,l),l};exports.SchmancyDataTable=class extends O.$LitElement(){constructor(){super(...arguments),this.columns=[],this.data=[],this.keyField="id",this.cols="1fr",this.actions=[]}handleRowEvent(r,t){this.dispatchEvent(new CustomEvent(r,{detail:t.detail,bubbles:!0,composed:!0}))}render(){return h.html`
49
- <schmancy-surface fill="all" type="container" rounded="all" elevation="2">
50
- <schmancy-grid class="h-full w-full" cols="1fr" rows="auto 1fr">
51
- <schmancy-surface rounded="top" elevation="1" type="containerHighest" class="sticky top-0 z-10">
52
- <schmancy-grid align="center" class="px-4 py-3" .cols=${this.cols} gap="md" rows="1fr">
53
- ${this.columns.map(r=>h.html`
54
- <schmancy-typography align=${r.align??"left"} weight=${r.weight??"bold"}>
55
- ${r.name}
56
- </schmancy-typography>
57
- `)}
58
- </schmancy-grid>
59
- </schmancy-surface>
60
-
61
- <lit-virtualizer
62
- scroller
63
- class="w-full h-full relative overflow-auto"
64
- .items=${this.data}
65
- .renderItem=${(r,t)=>h.html`
66
- <schmancy-table-row
67
- .actions=${this.actions}
68
- class="w-full border-b-1 border-solid border-outlineVariant"
69
- .columns=${this.columns}
70
- .item=${r}
71
- cols=${this.cols}
72
- @edit=${e=>{e.detail.item=r,e.detail.index=t,this.handleRowEvent("edit",e)}}
73
- @delete=${e=>{e.detail.item=r,e.detail.index=t,this.handleRowEvent("delete",e)}}
74
- ></schmancy-table-row>
75
- `}
76
- ></lit-virtualizer>
77
- </schmancy-grid>
78
- </schmancy-surface>
79
- `}},m([c.property({type:Array,attribute:!1})],exports.SchmancyDataTable.prototype,"columns",2),m([c.property({type:Array,attribute:!1})],exports.SchmancyDataTable.prototype,"data",2),m([c.property({type:String})],exports.SchmancyDataTable.prototype,"keyField",2),m([c.property({type:String})],exports.SchmancyDataTable.prototype,"cols",2),m([c.property({type:Array})],exports.SchmancyDataTable.prototype,"actions",2),exports.SchmancyDataTable=m([c.customElement("schmancy-table-v2")],exports.SchmancyDataTable);
80
- //# sourceMappingURL=table-B3lX6zue.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-B3lX6zue.cjs","sources":["../src/table/row.ts","../../../../.yarn/berry/cache/@lit-labs-virtualizer-npm-2.1.0-a92d413c90-10c0.zip/node_modules/@lit-labs/virtualizer/events.js","../../../../.yarn/berry/cache/@lit-labs-virtualizer-npm-2.1.0-a92d413c90-10c0.zip/node_modules/@lit-labs/virtualizer/ScrollerController.js","../../../../.yarn/berry/cache/@lit-labs-virtualizer-npm-2.1.0-a92d413c90-10c0.zip/node_modules/@lit-labs/virtualizer/Virtualizer.js","../../../../.yarn/berry/cache/@lit-labs-virtualizer-npm-2.1.0-a92d413c90-10c0.zip/node_modules/@lit-labs/virtualizer/virtualize.js","../../../../.yarn/berry/cache/@lit-labs-virtualizer-npm-2.1.0-a92d413c90-10c0.zip/node_modules/@lit-labs/virtualizer/LitVirtualizer.js","../../../../.yarn/berry/cache/@lit-labs-virtualizer-npm-2.1.0-a92d413c90-10c0.zip/node_modules/@lit-labs/virtualizer/lit-virtualizer.js","../src/table/table.ts"],"sourcesContent":["import { $LitElement } from '@mixins/litElement.mixin'\nimport { css, html, TemplateResult } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { TableColumn } from './table' //Import TableColumn interface.\n\n@customElement('schmancy-table-row')\nexport class SchmancyTableRow extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tz-index: -1;\n\t}\n`) {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn[] = []\n\n\t@property({ type: Object, attribute: false }) //Important to use object for complex properties\n\titem: any\n\n\t@property({ type: String })\n\tcols: string = '1fr'\n\n\t@property({\n\t\ttype: Array,\n\t})\n\tactions: Array<{ name: string; action: (item: any) => void }> | undefined\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<schmancy-list-item\n\t\t\t\t@click=${() => {\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('row-click', {\n\t\t\t\t\t\t\tdetail: this.item,\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t\tclass=\"w-full\"\n\t\t\t>\n\t\t\t\t<schmancy-grid .cols=${this.cols} align=\"center\" gap=\"md\">\n\t\t\t\t\t${this.columns.map(\n\t\t\t\t\t\tcolumn => html`\n\t\t\t\t\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t\t\t\t\t<schmancy-typography\n\t\t\t\t\t\t\t\t\talign=\"${column.align || 'left'}\"\n\t\t\t\t\t\t\t\t\tmaxLines=\"2\"\n\t\t\t\t\t\t\t\t\tweight=\"${column.weight || 'normal'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t${column.render ? column.render(this.item) : column.key ? this.item?.[column.key] : ''}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t\t<sch-flex\n\t\t\t\t\t\tclass=\"min-w-fit block\"\n\t\t\t\t\t\tflow=\"row-dense\"\n\t\t\t\t\t\t.hidden=${Array.isArray(this.actions) && this.actions.length === 0}\n\t\t\t\t\t>\n\t\t\t\t\t\t${repeat(\n\t\t\t\t\t\t\tthis.actions ?? [],\n\t\t\t\t\t\t\t({ name }) => name,\n\t\t\t\t\t\t\t({ name, action }) => html`\n\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\taction(this.item)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t${name}\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</sch-flex>\n\t\t\t\t\t<!-- <schmancy-menu .hidden=${Array.isArray(this.actions) && this.actions.length === 0}>\n\t\t\t\t\t\t${repeat(\n\t\t\t\t\t\tthis.actions ?? [],\n\t\t\t\t\t\t({ name }) => name,\n\t\t\t\t\t\t({ name, action }) => html`\n\t\t\t\t\t\t\t<schmancy-menu-item\n\t\t\t\t\t\t\t\tclass=\"z-[10000]\"\n\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\taction(this.item)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${name}\n\t\t\t\t\t\t\t</schmancy-menu-item>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t\t</schmancy-menu> -->\n\t\t\t\t</schmancy-grid>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-table-row': SchmancyTableRow\n\t}\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nexport class RangeChangedEvent extends Event {\n constructor(range) {\n super(RangeChangedEvent.eventName, { bubbles: false });\n this.first = range.first;\n this.last = range.last;\n }\n}\nRangeChangedEvent.eventName = 'rangeChanged';\nexport class VisibilityChangedEvent extends Event {\n constructor(range) {\n super(VisibilityChangedEvent.eventName, { bubbles: false });\n this.first = range.first;\n this.last = range.last;\n }\n}\nVisibilityChangedEvent.eventName = 'visibilityChanged';\nexport class UnpinnedEvent extends Event {\n constructor() {\n super(UnpinnedEvent.eventName, { bubbles: false });\n }\n}\nUnpinnedEvent.eventName = 'unpinned';\n//# sourceMappingURL=events.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nexport class ScrollerShim {\n constructor(element) {\n this._element = null;\n const node = element ?? window;\n this._node = node;\n if (element) {\n this._element = element;\n }\n }\n get element() {\n return (this._element || document.scrollingElement || document.documentElement);\n }\n get scrollTop() {\n return this.element.scrollTop || window.scrollY;\n }\n get scrollLeft() {\n return this.element.scrollLeft || window.scrollX;\n }\n get scrollHeight() {\n return this.element.scrollHeight;\n }\n get scrollWidth() {\n return this.element.scrollWidth;\n }\n get viewportHeight() {\n return this._element\n ? this._element.getBoundingClientRect().height\n : window.innerHeight;\n }\n get viewportWidth() {\n return this._element\n ? this._element.getBoundingClientRect().width\n : window.innerWidth;\n }\n get maxScrollTop() {\n return this.scrollHeight - this.viewportHeight;\n }\n get maxScrollLeft() {\n return this.scrollWidth - this.viewportWidth;\n }\n}\nexport class ScrollerController extends ScrollerShim {\n constructor(client, element) {\n super(element);\n this._clients = new Set();\n this._retarget = null;\n this._end = null;\n this.__destination = null;\n this.correctingScrollError = false;\n this._checkForArrival = this._checkForArrival.bind(this);\n this._updateManagedScrollTo = this._updateManagedScrollTo.bind(this);\n this.scrollTo = this.scrollTo.bind(this);\n this.scrollBy = this.scrollBy.bind(this);\n const node = this._node;\n this._originalScrollTo = node.scrollTo;\n this._originalScrollBy = node.scrollBy;\n this._originalScroll = node.scroll;\n this._attach(client);\n }\n get _destination() {\n return this.__destination;\n }\n get scrolling() {\n return this._destination !== null;\n }\n scrollTo(p1, p2) {\n const options = typeof p1 === 'number' && typeof p2 === 'number'\n ? { left: p1, top: p2 }\n : p1;\n this._scrollTo(options);\n }\n scrollBy(p1, p2) {\n const options = typeof p1 === 'number' && typeof p2 === 'number'\n ? { left: p1, top: p2 }\n : p1;\n if (options.top !== undefined) {\n options.top += this.scrollTop;\n }\n if (options.left !== undefined) {\n options.left += this.scrollLeft;\n }\n this._scrollTo(options);\n }\n _nativeScrollTo(options) {\n this._originalScrollTo.bind(this._element || window)(options);\n }\n _scrollTo(options, retarget = null, end = null) {\n if (this._end !== null) {\n this._end();\n }\n if (options.behavior === 'smooth') {\n this._setDestination(options);\n this._retarget = retarget;\n this._end = end;\n }\n else {\n this._resetScrollState();\n }\n this._nativeScrollTo(options);\n }\n _setDestination(options) {\n let { top, left } = options;\n top =\n top === undefined\n ? undefined\n : Math.max(0, Math.min(top, this.maxScrollTop));\n left =\n left === undefined\n ? undefined\n : Math.max(0, Math.min(left, this.maxScrollLeft));\n if (this._destination !== null &&\n left === this._destination.left &&\n top === this._destination.top) {\n return false;\n }\n this.__destination = { top, left, behavior: 'smooth' };\n return true;\n }\n _resetScrollState() {\n this.__destination = null;\n this._retarget = null;\n this._end = null;\n }\n _updateManagedScrollTo(coordinates) {\n if (this._destination) {\n if (this._setDestination(coordinates)) {\n this._nativeScrollTo(this._destination);\n }\n }\n }\n managedScrollTo(options, retarget, end) {\n this._scrollTo(options, retarget, end);\n return this._updateManagedScrollTo;\n }\n correctScrollError(coordinates) {\n this.correctingScrollError = true;\n requestAnimationFrame(() => requestAnimationFrame(() => (this.correctingScrollError = false)));\n // Correct the error\n this._nativeScrollTo(coordinates);\n // Then, if we were headed for a specific destination, we continue scrolling:\n // First, we update our target destination, if applicable...\n if (this._retarget) {\n this._setDestination(this._retarget());\n }\n // Then we go ahead and resume scrolling\n if (this._destination) {\n this._nativeScrollTo(this._destination);\n }\n }\n _checkForArrival() {\n if (this._destination !== null) {\n const { scrollTop, scrollLeft } = this;\n let { top, left } = this._destination;\n top = Math.min(top || 0, this.maxScrollTop);\n left = Math.min(left || 0, this.maxScrollLeft);\n const topDiff = Math.abs(top - scrollTop);\n const leftDiff = Math.abs(left - scrollLeft);\n // We check to see if we've arrived at our destination.\n if (topDiff < 1 && leftDiff < 1) {\n if (this._end) {\n this._end();\n }\n this._resetScrollState();\n }\n }\n }\n detach(client) {\n this._clients.delete(client);\n /**\n * If there aren't any more clients, then return the node's default\n * scrolling methods\n */\n if (this._clients.size === 0) {\n this._node.scrollTo = this._originalScrollTo;\n this._node.scrollBy = this._originalScrollBy;\n this._node.scroll = this._originalScroll;\n this._node.removeEventListener('scroll', this._checkForArrival);\n }\n return null;\n }\n _attach(client) {\n this._clients.add(client);\n /**\n * The node should only have the methods shimmed when adding the first\n * client – otherwise it's redundant\n */\n if (this._clients.size === 1) {\n this._node.scrollTo = this.scrollTo;\n this._node.scrollBy = this.scrollBy;\n this._node.scroll = this.scrollTo;\n this._node.addEventListener('scroll', this._checkForArrival);\n }\n }\n}\n//# sourceMappingURL=ScrollerController.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { RangeChangedEvent, VisibilityChangedEvent, UnpinnedEvent, } from './events.js';\nimport { ScrollerController } from './ScrollerController.js';\n// Virtualizer depends on `ResizeObserver`, which is supported in\n// all modern browsers. For developers whose browser support\n// matrix includes older browsers, we include a compatible\n// polyfill in the package; this bit of module state facilitates\n// a simple mechanism (see ./polyfillLoaders/ResizeObserver.js.)\n// for loading the polyfill.\nlet _ResizeObserver = typeof window !== 'undefined' ? window.ResizeObserver : undefined;\n/**\n * Call this function to provide a `ResizeObserver` polyfill for Virtualizer to use.\n * @param Ctor Constructor for a `ResizeObserver` polyfill (recommend using the one provided with the Virtualizer package)\n */\nexport function provideResizeObserver(Ctor) {\n _ResizeObserver = Ctor;\n}\nexport const virtualizerRef = Symbol('virtualizerRef');\nconst SIZER_ATTRIBUTE = 'virtualizer-sizer';\nlet DefaultLayoutConstructor;\n/**\n * Provides virtual scrolling boilerplate.\n *\n * Extensions of this class must set hostElement and layout.\n *\n * Extensions of this class must also override VirtualRepeater's DOM\n * manipulation methods.\n */\nexport class Virtualizer {\n constructor(config) {\n this._benchmarkStart = null;\n this._layout = null;\n this._clippingAncestors = [];\n /**\n * Layout provides these values, we set them on _render().\n * TODO @straversi: Can we find an XOR type, usable for the key here?\n */\n this._scrollSize = null;\n /**\n * Difference between scroll target's current and required scroll offsets.\n * Provided by layout.\n */\n this._scrollError = null;\n /**\n * A list of the positions (top, left) of the children in the current range.\n */\n this._childrenPos = null;\n // TODO: (graynorton): type\n this._childMeasurements = null;\n this._toBeMeasured = new Map();\n this._rangeChanged = true;\n this._itemsChanged = true;\n this._visibilityChanged = true;\n this._scrollerController = null;\n this._isScroller = false;\n this._sizer = null;\n /**\n * Resize observer attached to hostElement.\n */\n this._hostElementRO = null;\n /**\n * Resize observer attached to children.\n */\n this._childrenRO = null;\n this._mutationObserver = null;\n this._scrollEventListeners = [];\n this._scrollEventListenerOptions = {\n passive: true,\n };\n // TODO (graynorton): Rethink, per longer comment below\n this._loadListener = this._childLoaded.bind(this);\n /**\n * Index of element to scroll into view, plus scroll\n * behavior options, as imperatively specified via\n * `element(index).scrollIntoView()`\n */\n this._scrollIntoViewTarget = null;\n this._updateScrollIntoViewCoordinates = null;\n /**\n * Items to render. Set by items.\n */\n this._items = [];\n /**\n * Index of the first child in the range, not necessarily the first visible child.\n * TODO @straversi: Consider renaming these.\n */\n this._first = -1;\n /**\n * Index of the last child in the range.\n */\n this._last = -1;\n /**\n * Index of the first item intersecting the viewport.\n */\n this._firstVisible = -1;\n /**\n * Index of the last item intersecting the viewport.\n */\n this._lastVisible = -1;\n this._scheduled = new WeakSet();\n /**\n * Invoked at the end of each render cycle: children in the range are\n * measured, and their dimensions passed to this callback. Use it to layout\n * children as needed.\n */\n this._measureCallback = null;\n this._measureChildOverride = null;\n /**\n * State for `layoutComplete` promise\n */\n this._layoutCompletePromise = null;\n this._layoutCompleteResolver = null;\n this._layoutCompleteRejecter = null;\n this._pendingLayoutComplete = null;\n /**\n * Layout initialization is async because we dynamically load\n * the default layout if none is specified. This state is to track\n * whether init is complete.\n */\n this._layoutInitialized = null;\n /**\n * Track connection state to guard against errors / unnecessary work\n */\n this._connected = false;\n if (!config) {\n throw new Error('Virtualizer constructor requires a configuration object');\n }\n if (config.hostElement) {\n this._init(config);\n }\n else {\n throw new Error('Virtualizer configuration requires the \"hostElement\" property');\n }\n }\n set items(items) {\n if (Array.isArray(items) && items !== this._items) {\n this._itemsChanged = true;\n this._items = items;\n this._schedule(this._updateLayout);\n }\n }\n _init(config) {\n this._isScroller = !!config.scroller;\n this._initHostElement(config);\n // If no layout is specified, we make an empty\n // layout config, which will result in the default\n // layout with default parameters\n const layoutConfig = config.layout || {};\n // Save the promise returned by `_initLayout` as a state\n // variable we can check before updating layout config\n this._layoutInitialized = this._initLayout(layoutConfig);\n }\n _initObservers() {\n this._mutationObserver = new MutationObserver(this._finishDOMUpdate.bind(this));\n this._hostElementRO = new _ResizeObserver(() => this._hostElementSizeChanged());\n this._childrenRO = new _ResizeObserver(this._childrenSizeChanged.bind(this));\n }\n _initHostElement(config) {\n const hostElement = (this._hostElement = config.hostElement);\n this._applyVirtualizerStyles();\n hostElement[virtualizerRef] = this;\n }\n connected() {\n this._initObservers();\n const includeSelf = this._isScroller;\n this._clippingAncestors = getClippingAncestors(this._hostElement, includeSelf);\n this._scrollerController = new ScrollerController(this, this._clippingAncestors[0]);\n this._schedule(this._updateLayout);\n this._observeAndListen();\n this._connected = true;\n }\n _observeAndListen() {\n this._mutationObserver.observe(this._hostElement, { childList: true });\n this._hostElementRO.observe(this._hostElement);\n this._scrollEventListeners.push(window);\n window.addEventListener('scroll', this, this._scrollEventListenerOptions);\n this._clippingAncestors.forEach((ancestor) => {\n ancestor.addEventListener('scroll', this, this._scrollEventListenerOptions);\n this._scrollEventListeners.push(ancestor);\n this._hostElementRO.observe(ancestor);\n });\n this._hostElementRO.observe(this._scrollerController.element);\n this._children.forEach((child) => this._childrenRO.observe(child));\n this._scrollEventListeners.forEach((target) => target.addEventListener('scroll', this, this._scrollEventListenerOptions));\n }\n disconnected() {\n this._scrollEventListeners.forEach((target) => target.removeEventListener('scroll', this, this._scrollEventListenerOptions));\n this._scrollEventListeners = [];\n this._clippingAncestors = [];\n this._scrollerController?.detach(this);\n this._scrollerController = null;\n this._mutationObserver?.disconnect();\n this._mutationObserver = null;\n this._hostElementRO?.disconnect();\n this._hostElementRO = null;\n this._childrenRO?.disconnect();\n this._childrenRO = null;\n this._rejectLayoutCompletePromise('disconnected');\n this._connected = false;\n }\n _applyVirtualizerStyles() {\n const hostElement = this._hostElement;\n // Would rather set these CSS properties on the host using Shadow Root\n // style scoping (and falling back to a global stylesheet where native\n // Shadow DOM is not available), but this Mobile Safari bug is preventing\n // that from working: https://bugs.webkit.org/show_bug.cgi?id=226195\n const style = hostElement.style;\n style.display = style.display || 'block';\n style.position = style.position || 'relative';\n style.contain = style.contain || 'size layout';\n if (this._isScroller) {\n style.overflow = style.overflow || 'auto';\n style.minHeight = style.minHeight || '150px';\n }\n }\n _getSizer() {\n const hostElement = this._hostElement;\n if (!this._sizer) {\n // Use a preexisting sizer element if provided (for better integration\n // with vDOM renderers)\n let sizer = hostElement.querySelector(`[${SIZER_ATTRIBUTE}]`);\n if (!sizer) {\n sizer = document.createElement('div');\n sizer.setAttribute(SIZER_ATTRIBUTE, '');\n hostElement.appendChild(sizer);\n }\n // When the scrollHeight is large, the height of this element might be\n // ignored. Setting content and font-size ensures the element has a size.\n Object.assign(sizer.style, {\n position: 'absolute',\n margin: '-2px 0 0 0',\n padding: 0,\n visibility: 'hidden',\n fontSize: '2px',\n });\n sizer.textContent = '&nbsp;';\n sizer.setAttribute(SIZER_ATTRIBUTE, '');\n this._sizer = sizer;\n }\n return this._sizer;\n }\n async updateLayoutConfig(layoutConfig) {\n // If layout initialization hasn't finished yet, we wait\n // for it to finish so we can check whether the new config\n // is compatible with the existing layout before proceeding.\n await this._layoutInitialized;\n const Ctor = layoutConfig.type ||\n // The new config is compatible with the current layout,\n // so we update the config and return true to indicate\n // a successful update\n DefaultLayoutConstructor;\n if (typeof Ctor === 'function' && this._layout instanceof Ctor) {\n const config = { ...layoutConfig };\n delete config.type;\n this._layout.config = config;\n // The new config requires a different layout altogether, but\n // to limit implementation complexity we don't support dynamically\n // changing the layout of an existing virtualizer instance.\n // Returning false here lets the caller know that they should\n // instead make a new virtualizer instance with the desired layout.\n return true;\n }\n return false;\n }\n async _initLayout(layoutConfig) {\n let config;\n let Ctor;\n if (typeof layoutConfig.type === 'function') {\n // If we have a full LayoutSpecifier, the `type` property\n // gives us our constructor...\n Ctor = layoutConfig.type;\n // ...while the rest of the specifier is our layout config\n const copy = { ...layoutConfig };\n delete copy.type;\n config = copy;\n }\n else {\n // If we don't have a full LayoutSpecifier, we just\n // have a config for the default layout\n config = layoutConfig;\n }\n if (Ctor === undefined) {\n // If we don't have a constructor yet, load the default\n DefaultLayoutConstructor = Ctor = (await import('./layouts/flow.js'))\n .FlowLayout;\n }\n this._layout = new Ctor((message) => this._handleLayoutMessage(message), config);\n if (this._layout.measureChildren &&\n typeof this._layout.updateItemSizes === 'function') {\n if (typeof this._layout.measureChildren === 'function') {\n this._measureChildOverride = this._layout.measureChildren;\n }\n this._measureCallback = this._layout.updateItemSizes.bind(this._layout);\n }\n if (this._layout.listenForChildLoadEvents) {\n this._hostElement.addEventListener('load', this._loadListener, true);\n }\n this._schedule(this._updateLayout);\n }\n // TODO (graynorton): Rework benchmarking so that it has no API and\n // instead is always on except in production builds\n startBenchmarking() {\n if (this._benchmarkStart === null) {\n this._benchmarkStart = window.performance.now();\n }\n }\n stopBenchmarking() {\n if (this._benchmarkStart !== null) {\n const now = window.performance.now();\n const timeElapsed = now - this._benchmarkStart;\n const entries = performance.getEntriesByName('uv-virtualizing', 'measure');\n const virtualizationTime = entries\n .filter((e) => e.startTime >= this._benchmarkStart && e.startTime < now)\n .reduce((t, m) => t + m.duration, 0);\n this._benchmarkStart = null;\n return { timeElapsed, virtualizationTime };\n }\n return null;\n }\n _measureChildren() {\n const mm = {};\n const children = this._children;\n const fn = this._measureChildOverride || this._measureChild;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const idx = this._first + i;\n if (this._itemsChanged || this._toBeMeasured.has(child)) {\n mm[idx] = fn.call(this, child, this._items[idx]);\n }\n }\n this._childMeasurements = mm;\n this._schedule(this._updateLayout);\n this._toBeMeasured.clear();\n }\n /**\n * Returns the width, height, and margins of the given child.\n */\n _measureChild(element) {\n // offsetWidth doesn't take transforms in consideration, so we use\n // getBoundingClientRect which does.\n const { width, height } = element.getBoundingClientRect();\n return Object.assign({ width, height }, getMargins(element));\n }\n async _schedule(method) {\n if (!this._scheduled.has(method)) {\n this._scheduled.add(method);\n await Promise.resolve();\n this._scheduled.delete(method);\n method.call(this);\n }\n }\n async _updateDOM(state) {\n this._scrollSize = state.scrollSize;\n this._adjustRange(state.range);\n this._childrenPos = state.childPositions;\n this._scrollError = state.scrollError || null;\n const { _rangeChanged, _itemsChanged } = this;\n if (this._visibilityChanged) {\n this._notifyVisibility();\n this._visibilityChanged = false;\n }\n if (_rangeChanged || _itemsChanged) {\n this._notifyRange();\n this._rangeChanged = false;\n }\n this._finishDOMUpdate();\n }\n _finishDOMUpdate() {\n if (this._connected) {\n // _childrenRO should be non-null if we're connected\n this._children.forEach((child) => this._childrenRO.observe(child));\n this._checkScrollIntoViewTarget(this._childrenPos);\n this._positionChildren(this._childrenPos);\n this._sizeHostElement(this._scrollSize);\n this._correctScrollError();\n if (this._benchmarkStart && 'mark' in window.performance) {\n window.performance.mark('uv-end');\n }\n }\n }\n _updateLayout() {\n if (this._layout && this._connected) {\n this._layout.items = this._items;\n this._updateView();\n if (this._childMeasurements !== null) {\n // If the layout has been changed, we may have measurements but no callback\n if (this._measureCallback) {\n this._measureCallback(this._childMeasurements);\n }\n this._childMeasurements = null;\n }\n this._layout.reflowIfNeeded();\n if (this._benchmarkStart && 'mark' in window.performance) {\n window.performance.mark('uv-end');\n }\n }\n }\n _handleScrollEvent() {\n if (this._benchmarkStart && 'mark' in window.performance) {\n try {\n window.performance.measure('uv-virtualizing', 'uv-start', 'uv-end');\n }\n catch (e) {\n console.warn('Error measuring performance data: ', e);\n }\n window.performance.mark('uv-start');\n }\n if (this._scrollerController.correctingScrollError === false) {\n // This is a user-initiated scroll, so we unpin the layout\n this._layout?.unpin();\n }\n this._schedule(this._updateLayout);\n }\n handleEvent(event) {\n switch (event.type) {\n case 'scroll':\n if (event.currentTarget === window ||\n this._clippingAncestors.includes(event.currentTarget)) {\n this._handleScrollEvent();\n }\n break;\n default:\n console.warn('event not handled', event);\n }\n }\n _handleLayoutMessage(message) {\n if (message.type === 'stateChanged') {\n this._updateDOM(message);\n }\n else if (message.type === 'visibilityChanged') {\n this._firstVisible = message.firstVisible;\n this._lastVisible = message.lastVisible;\n this._notifyVisibility();\n }\n else if (message.type === 'unpinned') {\n this._hostElement.dispatchEvent(new UnpinnedEvent());\n }\n }\n get _children() {\n const arr = [];\n let next = this._hostElement.firstElementChild;\n while (next) {\n if (!next.hasAttribute(SIZER_ATTRIBUTE)) {\n arr.push(next);\n }\n next = next.nextElementSibling;\n }\n return arr;\n }\n _updateView() {\n const hostElement = this._hostElement;\n const scrollingElement = this._scrollerController?.element;\n const layout = this._layout;\n if (hostElement && scrollingElement && layout) {\n let top, left, bottom, right;\n const hostElementBounds = hostElement.getBoundingClientRect();\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n const ancestorBounds = this._clippingAncestors.map((ancestor) => ancestor.getBoundingClientRect());\n ancestorBounds.unshift(hostElementBounds);\n for (const bounds of ancestorBounds) {\n top = Math.max(top, bounds.top);\n left = Math.max(left, bounds.left);\n bottom = Math.min(bottom, bounds.bottom);\n right = Math.min(right, bounds.right);\n }\n const scrollingElementBounds = scrollingElement.getBoundingClientRect();\n const offsetWithinScroller = {\n left: hostElementBounds.left - scrollingElementBounds.left,\n top: hostElementBounds.top - scrollingElementBounds.top,\n };\n const totalScrollSize = {\n width: scrollingElement.scrollWidth,\n height: scrollingElement.scrollHeight,\n };\n const scrollTop = top - hostElementBounds.top + hostElement.scrollTop;\n const scrollLeft = left - hostElementBounds.left + hostElement.scrollLeft;\n const height = Math.max(0, bottom - top);\n const width = Math.max(0, right - left);\n layout.viewportSize = { width, height };\n layout.viewportScroll = { top: scrollTop, left: scrollLeft };\n layout.totalScrollSize = totalScrollSize;\n layout.offsetWithinScroller = offsetWithinScroller;\n }\n }\n /**\n * Styles the host element so that its size reflects the\n * total size of all items.\n */\n _sizeHostElement(size) {\n // Some browsers seem to crap out if the host element gets larger than\n // a certain size, so we clamp it here (this value based on ad hoc\n // testing in Chrome / Safari / Firefox Mac)\n const max = 8200000;\n const h = size && size.width !== null ? Math.min(max, size.width) : 0;\n const v = size && size.height !== null ? Math.min(max, size.height) : 0;\n if (this._isScroller) {\n this._getSizer().style.transform = `translate(${h}px, ${v}px)`;\n }\n else {\n const style = this._hostElement.style;\n style.minWidth = h ? `${h}px` : '100%';\n style.minHeight = v ? `${v}px` : '100%';\n }\n }\n /**\n * Sets the top and left transform style of the children from the values in\n * pos.\n */\n _positionChildren(pos) {\n if (pos) {\n pos.forEach(({ top, left, width, height, xOffset, yOffset }, index) => {\n const child = this._children[index - this._first];\n if (child) {\n child.style.position = 'absolute';\n child.style.boxSizing = 'border-box';\n child.style.transform = `translate(${left}px, ${top}px)`;\n if (width !== undefined) {\n child.style.width = width + 'px';\n }\n if (height !== undefined) {\n child.style.height = height + 'px';\n }\n child.style.left =\n xOffset === undefined ? null : xOffset + 'px';\n child.style.top =\n yOffset === undefined ? null : yOffset + 'px';\n }\n });\n }\n }\n async _adjustRange(range) {\n const { _first, _last, _firstVisible, _lastVisible } = this;\n this._first = range.first;\n this._last = range.last;\n this._firstVisible = range.firstVisible;\n this._lastVisible = range.lastVisible;\n this._rangeChanged =\n this._rangeChanged || this._first !== _first || this._last !== _last;\n this._visibilityChanged =\n this._visibilityChanged ||\n this._firstVisible !== _firstVisible ||\n this._lastVisible !== _lastVisible;\n }\n _correctScrollError() {\n if (this._scrollError) {\n const { scrollTop, scrollLeft } = this._scrollerController;\n const { top, left } = this._scrollError;\n this._scrollError = null;\n this._scrollerController.correctScrollError({\n top: scrollTop - top,\n left: scrollLeft - left,\n });\n }\n }\n element(index) {\n if (index === Infinity) {\n index = this._items.length - 1;\n }\n return this._items?.[index] === undefined\n ? undefined\n : {\n scrollIntoView: (options = {}) => this._scrollElementIntoView({ ...options, index }),\n };\n }\n _scrollElementIntoView(options) {\n if (options.index >= this._first && options.index <= this._last) {\n this._children[options.index - this._first].scrollIntoView(options);\n }\n else {\n options.index = Math.min(options.index, this._items.length - 1);\n if (options.behavior === 'smooth') {\n const coordinates = this._layout.getScrollIntoViewCoordinates(options);\n const { behavior } = options;\n this._updateScrollIntoViewCoordinates =\n this._scrollerController.managedScrollTo(Object.assign(coordinates, { behavior }), () => this._layout.getScrollIntoViewCoordinates(options), () => (this._scrollIntoViewTarget = null));\n this._scrollIntoViewTarget = options;\n }\n else {\n this._layout.pin = options;\n }\n }\n }\n /**\n * If we are smoothly scrolling to an element and the target element\n * is in the DOM, we update our target coordinates as needed\n */\n _checkScrollIntoViewTarget(pos) {\n const { index } = this._scrollIntoViewTarget || {};\n if (index && pos?.has(index)) {\n this._updateScrollIntoViewCoordinates(this._layout.getScrollIntoViewCoordinates(this._scrollIntoViewTarget));\n }\n }\n /**\n * Emits a rangechange event with the current first, last, firstVisible, and\n * lastVisible.\n */\n _notifyRange() {\n this._hostElement.dispatchEvent(new RangeChangedEvent({ first: this._first, last: this._last }));\n }\n _notifyVisibility() {\n this._hostElement.dispatchEvent(new VisibilityChangedEvent({\n first: this._firstVisible,\n last: this._lastVisible,\n }));\n }\n get layoutComplete() {\n // Lazily create promise\n if (!this._layoutCompletePromise) {\n this._layoutCompletePromise = new Promise((resolve, reject) => {\n this._layoutCompleteResolver = resolve;\n this._layoutCompleteRejecter = reject;\n });\n }\n return this._layoutCompletePromise;\n }\n _rejectLayoutCompletePromise(reason) {\n if (this._layoutCompleteRejecter !== null) {\n this._layoutCompleteRejecter(reason);\n }\n this._resetLayoutCompleteState();\n }\n _scheduleLayoutComplete() {\n // Don't do anything unless we have a pending promise\n // And only request a frame if we haven't already done so\n if (this._layoutCompletePromise && this._pendingLayoutComplete === null) {\n // Wait one additional frame to be sure the layout is stable\n this._pendingLayoutComplete = requestAnimationFrame(() => requestAnimationFrame(() => this._resolveLayoutCompletePromise()));\n }\n }\n _resolveLayoutCompletePromise() {\n if (this._layoutCompleteResolver !== null) {\n this._layoutCompleteResolver();\n }\n this._resetLayoutCompleteState();\n }\n _resetLayoutCompleteState() {\n this._layoutCompletePromise = null;\n this._layoutCompleteResolver = null;\n this._layoutCompleteRejecter = null;\n this._pendingLayoutComplete = null;\n }\n /**\n * Render and update the view at the next opportunity with the given\n * hostElement size.\n */\n _hostElementSizeChanged() {\n this._schedule(this._updateLayout);\n }\n // TODO (graynorton): Rethink how this works. Probably child loading is too specific\n // to have dedicated support for; might want some more generic lifecycle hooks for\n // layouts to use. Possibly handle measurement this way, too, or maybe that remains\n // a first-class feature?\n _childLoaded() { }\n // This is the callback for the ResizeObserver that watches the\n // virtualizer's children. We land here at the end of every virtualizer\n // update cycle that results in changes to physical items, and we also\n // end up here if one or more children change size independently of\n // the virtualizer update cycle.\n _childrenSizeChanged(changes) {\n // Only measure if the layout requires it\n if (this._layout?.measureChildren) {\n for (const change of changes) {\n this._toBeMeasured.set(change.target, change.contentRect);\n }\n this._measureChildren();\n }\n // If this is the end of an update cycle, we need to reset some\n // internal state. This should be a harmless no-op if we're handling\n // an out-of-cycle ResizeObserver callback, so we don't need to\n // distinguish between the two cases.\n this._scheduleLayoutComplete();\n this._itemsChanged = false;\n this._rangeChanged = false;\n }\n}\nfunction getMargins(el) {\n const style = window.getComputedStyle(el);\n return {\n marginTop: getMarginValue(style.marginTop),\n marginRight: getMarginValue(style.marginRight),\n marginBottom: getMarginValue(style.marginBottom),\n marginLeft: getMarginValue(style.marginLeft),\n };\n}\nfunction getMarginValue(value) {\n const float = value ? parseFloat(value) : NaN;\n return Number.isNaN(float) ? 0 : float;\n}\n// TODO (graynorton): Deal with iframes?\nfunction getParentElement(el) {\n if (el.assignedSlot !== null) {\n return el.assignedSlot;\n }\n if (el.parentElement !== null) {\n return el.parentElement;\n }\n const parentNode = el.parentNode;\n if (parentNode && parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n return parentNode.host || null;\n }\n return null;\n}\n///\nfunction getElementAncestors(el, includeSelf = false) {\n const ancestors = [];\n let parent = includeSelf ? el : getParentElement(el);\n while (parent !== null) {\n ancestors.push(parent);\n parent = getParentElement(parent);\n }\n return ancestors;\n}\nfunction getClippingAncestors(el, includeSelf = false) {\n let foundFixed = false;\n return getElementAncestors(el, includeSelf).filter((a) => {\n if (foundFixed) {\n return false;\n }\n const style = getComputedStyle(a);\n foundFixed = style.position === 'fixed';\n return style.overflow !== 'visible';\n });\n}\n//# sourceMappingURL=Virtualizer.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { html, noChange } from 'lit';\nimport { directive, PartType } from 'lit/directive.js';\nimport { AsyncDirective } from 'lit/async-directive.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { Virtualizer } from './Virtualizer.js';\nexport { virtualizerRef } from './Virtualizer.js';\nexport const defaultKeyFunction = (item) => item;\nexport const defaultRenderItem = (item, idx) => html `${idx}: ${JSON.stringify(item, null, 2)}`;\nclass VirtualizeDirective extends AsyncDirective {\n constructor(part) {\n super(part);\n this._virtualizer = null;\n this._first = 0;\n this._last = -1;\n this._renderItem = (item, idx) => defaultRenderItem(item, idx + this._first);\n this._keyFunction = (item, idx) => defaultKeyFunction(item, idx + this._first);\n this._items = [];\n if (part.type !== PartType.CHILD) {\n throw new Error('The virtualize directive can only be used in child expressions');\n }\n }\n render(config) {\n if (config) {\n this._setFunctions(config);\n }\n const itemsToRender = [];\n if (this._first >= 0 && this._last >= this._first) {\n for (let i = this._first; i <= this._last; i++) {\n itemsToRender.push(this._items[i]);\n }\n }\n return repeat(itemsToRender, this._keyFunction, this._renderItem);\n }\n update(part, [config]) {\n this._setFunctions(config);\n const itemsChanged = this._items !== config.items;\n this._items = config.items || [];\n if (this._virtualizer) {\n this._updateVirtualizerConfig(part, config);\n }\n else {\n this._initialize(part, config);\n }\n return itemsChanged ? noChange : this.render();\n }\n async _updateVirtualizerConfig(part, config) {\n const compatible = await this._virtualizer.updateLayoutConfig(config.layout || {});\n if (!compatible) {\n const hostElement = part.parentNode;\n this._makeVirtualizer(hostElement, config);\n }\n this._virtualizer.items = this._items;\n }\n _setFunctions(config) {\n const { renderItem, keyFunction } = config;\n if (renderItem) {\n this._renderItem = (item, idx) => renderItem(item, idx + this._first);\n }\n if (keyFunction) {\n this._keyFunction = (item, idx) => keyFunction(item, idx + this._first);\n }\n }\n _makeVirtualizer(hostElement, config) {\n if (this._virtualizer) {\n this._virtualizer.disconnected();\n }\n const { layout, scroller, items } = config;\n this._virtualizer = new Virtualizer({ hostElement, layout, scroller });\n this._virtualizer.items = items;\n this._virtualizer.connected();\n }\n _initialize(part, config) {\n const hostElement = part.parentNode;\n if (hostElement && hostElement.nodeType === 1) {\n hostElement.addEventListener('rangeChanged', (e) => {\n this._first = e.first;\n this._last = e.last;\n this.setValue(this.render());\n });\n this._makeVirtualizer(hostElement, config);\n }\n }\n disconnected() {\n this._virtualizer?.disconnected();\n }\n reconnected() {\n this._virtualizer?.connected();\n }\n}\nexport const virtualize = directive(VirtualizeDirective);\n//# sourceMappingURL=virtualize.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { __decorate } from \"tslib\";\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { virtualize, virtualizerRef, defaultRenderItem, defaultKeyFunction, } from './virtualize.js';\nexport class LitVirtualizer extends LitElement {\n constructor() {\n super(...arguments);\n this.items = [];\n this.renderItem = defaultRenderItem;\n this.keyFunction = defaultKeyFunction;\n this.layout = {};\n this.scroller = false;\n }\n createRenderRoot() {\n return this;\n }\n render() {\n const { items, renderItem, keyFunction, layout, scroller } = this;\n return html `${virtualize({\n items,\n renderItem,\n keyFunction,\n layout,\n scroller,\n })}`;\n }\n element(index) {\n return this[virtualizerRef]?.element(index);\n }\n get layoutComplete() {\n return this[virtualizerRef]?.layoutComplete;\n }\n /**\n * This scrollToIndex() shim is here to provide backwards compatibility with other 0.x versions of\n * lit-virtualizer. It is deprecated and will likely be removed in the 1.0.0 release.\n */\n scrollToIndex(index, position = 'start') {\n this.element(index)?.scrollIntoView({ block: position });\n }\n}\n__decorate([\n property({ attribute: false })\n], LitVirtualizer.prototype, \"items\", void 0);\n__decorate([\n property()\n], LitVirtualizer.prototype, \"renderItem\", void 0);\n__decorate([\n property()\n], LitVirtualizer.prototype, \"keyFunction\", void 0);\n__decorate([\n property({ attribute: false })\n], LitVirtualizer.prototype, \"layout\", void 0);\n__decorate([\n property({ reflect: true, type: Boolean })\n], LitVirtualizer.prototype, \"scroller\", void 0);\n//# sourceMappingURL=LitVirtualizer.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nimport { LitVirtualizer } from './LitVirtualizer.js';\nexport { LitVirtualizer };\nexport { RangeChangedEvent, VisibilityChangedEvent } from './events.js';\n/**\n * Import this module to declare the lit-virtualizer custom element.\n */\ncustomElements.define('lit-virtualizer', LitVirtualizer);\n//# sourceMappingURL=lit-virtualizer.js.map","import '@lit-labs/virtualizer'\nimport { $LitElement } from '@mixins/litElement.mixin'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport './row' // Import the schmancy-table-row component\n\n// Define a generic TableColumn interface.\n// The `key` is now a key of T, and the render function accepts T.\nexport interface TableColumn<T extends Record<string, any> = any> {\n\tname: string\n\tkey?: keyof T // Key to access the property on the data object.\n\talign?: 'left' | 'right' | 'center'\n\tweight?: 'normal' | 'bold'\n\trender?: (item: T) => TemplateResult | string | number // Custom render function for complex content\n}\n\n// Define an event detail interface for row events.\nexport interface RowEventDetail<T> {\n\titem: T\n\tindex: number\n}\n\n@customElement('schmancy-table-v2')\nexport class SchmancyDataTable<T extends Record<string, any> = any> extends $LitElement() {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Array, attribute: false })\n\tdata: T[] = []\n\n\t// The keyField is now of type keyof T. You may need to adjust the default if needed.\n\t@property({ type: String })\n\tkeyField: keyof T = 'id' as keyof T\n\n\t@property({ type: String })\n\tcols: string = '1fr'\n\n\t@property({ type: Array }) actions: Array<{ name: string; action: (item: T) => void }> = []\n\n\t// Helper to handle row events.\n\tprivate handleRowEvent(eventName: 'row-click' | 'edit' | 'delete', e: CustomEvent<RowEventDetail<T>>) {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<RowEventDetail<T>>(eventName, {\n\t\t\t\tdetail: e.detail,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<schmancy-surface fill=\"all\" type=\"container\" rounded=\"all\" elevation=\"2\">\n\t\t\t\t<schmancy-grid class=\"h-full w-full\" cols=\"1fr\" rows=\"auto 1fr\">\n\t\t\t\t\t<schmancy-surface rounded=\"top\" elevation=\"1\" type=\"containerHighest\" class=\"sticky top-0 z-10\">\n\t\t\t\t\t\t<schmancy-grid align=\"center\" class=\"px-4 py-3\" .cols=${this.cols} gap=\"md\" rows=\"1fr\">\n\t\t\t\t\t\t\t${this.columns.map(\n\t\t\t\t\t\t\t\tcolumn => html`\n\t\t\t\t\t\t\t\t\t<schmancy-typography align=${column.align ?? 'left'} weight=${column.weight ?? 'bold'}>\n\t\t\t\t\t\t\t\t\t\t${column.name}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</schmancy-grid>\n\t\t\t\t\t</schmancy-surface>\n\n\t\t\t\t\t<lit-virtualizer\n\t\t\t\t\t\tscroller\n\t\t\t\t\t\tclass=\"w-full h-full relative overflow-auto\"\n\t\t\t\t\t\t.items=${this.data}\n\t\t\t\t\t\t.renderItem=${(item: T, index: number) =>\n\t\t\t\t\t\t\thtml`\n\t\t\t\t\t\t\t\t<schmancy-table-row\n\t\t\t\t\t\t\t\t\t.actions=${this.actions}\n\t\t\t\t\t\t\t\t\tclass=\"w-full border-b-1 border-solid border-outlineVariant\"\n\t\t\t\t\t\t\t\t\t.columns=${this.columns}\n\t\t\t\t\t\t\t\t\t.item=${item}\n\t\t\t\t\t\t\t\t\tcols=${this.cols}\n\t\t\t\t\t\t\t\t\t@edit=${(e: CustomEvent<RowEventDetail<T>>) => {\n\t\t\t\t\t\t\t\t\t\te.detail.item = item\n\t\t\t\t\t\t\t\t\t\te.detail.index = index\n\t\t\t\t\t\t\t\t\t\tthis.handleRowEvent('edit', e)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t@delete=${(e: CustomEvent<RowEventDetail<T>>) => {\n\t\t\t\t\t\t\t\t\t\te.detail.item = item\n\t\t\t\t\t\t\t\t\t\te.detail.index = index\n\t\t\t\t\t\t\t\t\t\tthis.handleRowEvent('delete', e)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t></schmancy-table-row>\n\t\t\t\t\t\t\t` as TemplateResult}\n\t\t\t\t\t></lit-virtualizer>\n\t\t\t\t</schmancy-grid>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-table-v2': SchmancyDataTable\n\t}\n}\n"],"names":["SchmancyTableRow","$LitElement","css","super","arguments","this","columns","cols","html","dispatchEvent","CustomEvent","detail","item","bubbles","composed","map","column","align","weight","render","key","Array","isArray","actions","length","repeat","name","action","e","stopPropagation","__decorateClass","property","type","attribute","prototype","Object","String","customElement","RangeChangedEvent","Event","range","eventName","first","last","VisibilityChangedEvent","UnpinnedEvent","ScrollerShim","element","_element","node","window","_node","document","scrollingElement","documentElement","scrollTop","scrollY","scrollLeft","scrollX","scrollHeight","scrollWidth","viewportHeight","getBoundingClientRect","height","innerHeight","width","innerWidth","viewportWidth","ScrollerController","client","_clients","Set","_retarget","_end","__destination","correctingScrollError","_checkForArrival","bind","_updateManagedScrollTo","scrollTo","scrollBy","_originalScrollTo","_originalScrollBy","_originalScroll","scroll","_attach","_destination","p1","p2","options","left","top","_scrollTo","undefined","retarget","end","behavior","_setDestination","_resetScrollState","_nativeScrollTo","Math","max","min","maxScrollTop","maxScrollLeft","coordinates","requestAnimationFrame","topDiff","abs","leftDiff","delete","size","removeEventListener","add","addEventListener","_ResizeObserver","ResizeObserver","virtualizerRef","Symbol","SIZER_ATTRIBUTE","DefaultLayoutConstructor","Virtualizer","config","_benchmarkStart","_layout","_clippingAncestors","_scrollSize","_scrollError","_childrenPos","_childMeasurements","_toBeMeasured","Map","_rangeChanged","_itemsChanged","_visibilityChanged","_scrollerController","_isScroller","_sizer","_hostElementRO","_childrenRO","_mutationObserver","_scrollEventListeners","_scrollEventListenerOptions","passive","_loadListener","_childLoaded","_scrollIntoViewTarget","_updateScrollIntoViewCoordinates","_items","_first","_last","_firstVisible","_lastVisible","_scheduled","WeakSet","_measureCallback","_measureChildOverride","_layoutCompletePromise","_layoutCompleteResolver","_layoutCompleteRejecter","_pendingLayoutComplete","_layoutInitialized","_connected","Error","hostElement","_init","items","_schedule","_updateLayout","scroller","_initHostElement","layoutConfig","layout","_initLayout","MutationObserver","_finishDOMUpdate","_hostElementSizeChanged","_childrenSizeChanged","_hostElement","_applyVirtualizerStyles","_initObservers","includeSelf","el","foundFixed","ancestors","parent","getParentElement","push","filter","a","style","getComputedStyle","position","overflow","_observeAndListen","observe","childList","forEach","ancestor","_children","child","target","detach","disconnect","_rejectLayoutCompletePromise","display","contain","minHeight","sizer","querySelector","createElement","setAttribute","appendChild","assign","margin","padding","visibility","fontSize","textContent","Ctor","copy","Promise","resolve","then","require","FlowLayout","message","_handleLayoutMessage","measureChildren","updateItemSizes","listenForChildLoadEvents","startBenchmarking","performance","now","timeElapsed","virtualizationTime","getEntriesByName","startTime","reduce","t","m","duration","s","mm","children","fn","_measureChild","i","idx","has","call","clear","marginTop","getMarginValue","marginRight","marginBottom","marginLeft","method","state","scrollSize","_adjustRange","childPositions","scrollError","_notifyVisibility","_notifyRange","_checkScrollIntoViewTarget","_positionChildren","_sizeHostElement","_correctScrollError","mark","_updateView","reflowIfNeeded","measure","unpin","event","currentTarget","includes","_handleScrollEvent","_updateDOM","firstVisible","lastVisible","arr","next","firstElementChild","hasAttribute","nextElementSibling","bottom","right","hostElementBounds","ancestorBounds","unshift","bounds","scrollingElementBounds","offsetWithinScroller","totalScrollSize","viewportSize","viewportScroll","h","v","_getSizer","transform","minWidth","pos","xOffset","yOffset","index","boxSizing","correctScrollError","Infinity","scrollIntoView","_scrollElementIntoView","getScrollIntoViewCoordinates","managedScrollTo","pin","reject","reason","_resetLayoutCompleteState","_scheduleLayoutComplete","_resolveLayoutCompletePromise","changes","change","set","contentRect","_measureChildren","value","float","parseFloat","NaN","Number","isNaN","assignedSlot","parentElement","parentNode","nodeType","Node","DOCUMENT_FRAGMENT_NODE","host","defaultKeyFunction","defaultRenderItem","JSON","stringify","VirtualizeDirective","AsyncDirective","part","_virtualizer","_renderItem","_keyFunction","PartType","CHILD","_setFunctions","itemsToRender","itemsChanged","_updateVirtualizerConfig","_initialize","noChange","updateLayoutConfig","_makeVirtualizer","renderItem","keyFunction","disconnected","connected","setValue","virtualize","directive","LitVirtualizer","LitElement","constructor","layoutComplete","block","__decorate","reflect","Boolean","customElements","define","SchmancyDataTable","data","keyField","handleRowEvent"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6]}