@eos-ui/vue 0.1.1 → 0.2.1

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 (407) hide show
  1. package/THIRD_PARTY.md +1 -1
  2. package/dist/component-names.js +1 -1
  3. package/dist/component-names.js.map +1 -1
  4. package/dist/components/Actions/EActions.js.map +1 -1
  5. package/dist/components/Actions/EActions.vue.d.ts +3 -1
  6. package/dist/components/Actions/EActions.vue_vue_type_script_setup_true_lang.js +12 -3
  7. package/dist/components/Actions/EActions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  8. package/dist/components/AppHeader/EAppHeader.js.map +1 -1
  9. package/dist/components/AppHeader/EAppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/AppShell/EAppShell.js.map +1 -1
  11. package/dist/components/AppShell/EAppShell.vue.d.ts +2 -2
  12. package/dist/components/AppShell/EAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/Avatar/EAvatar.js.map +1 -1
  14. package/dist/components/Avatar/EAvatar.vue.d.ts +4 -4
  15. package/dist/components/Avatar/EAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/components/Breadcrumb/EBreadcrumb.js.map +1 -1
  17. package/dist/components/Breadcrumb/EBreadcrumb.vue.d.ts +2 -2
  18. package/dist/components/Breadcrumb/EBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/Button/EButton.js.map +1 -1
  20. package/dist/components/Button/EButton.vue.d.ts +5 -3
  21. package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/dist/components/Calendar/ECalendar.js.map +1 -1
  23. package/dist/components/Calendar/ECalendar.vue.d.ts +12 -9
  24. package/dist/components/Calendar/ECalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/Checkbox/ECheckbox.js.map +1 -1
  26. package/dist/components/Checkbox/ECheckbox.vue.d.ts +6 -3
  27. package/dist/components/Checkbox/ECheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  28. package/dist/components/CodeBlock/ECodeBlock.js.map +1 -1
  29. package/dist/components/CodeBlock/ECodeBlock.vue.d.ts +2 -2
  30. package/dist/components/CodeBlock/ECodeBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/components/ColorField/EColorField.js.map +1 -1
  32. package/dist/components/ColorField/EColorField.vue.d.ts +5 -3
  33. package/dist/components/ColorField/EColorField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  34. package/dist/components/Combobox/ECombobox.js.map +1 -1
  35. package/dist/components/Combobox/ECombobox.vue.d.ts +7 -5
  36. package/dist/components/Combobox/ECombobox.vue_vue_type_script_setup_true_lang.js +3 -2
  37. package/dist/components/Combobox/ECombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/components/Combobox/EComboboxBase.js.map +1 -1
  39. package/dist/components/Combobox/EComboboxBase.vue.d.ts +6 -14
  40. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js +9 -8
  41. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/Combobox/EComboboxOption.js.map +1 -1
  43. package/dist/components/Combobox/EComboboxOption.vue_vue_type_script_setup_true_lang.js +1 -1
  44. package/dist/components/Combobox/EComboboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/Combobox/{EHighlight.js → matchHighlight.js} +3 -3
  46. package/dist/components/Combobox/matchHighlight.js.map +1 -0
  47. package/dist/components/Combobox/types.d.ts +13 -8
  48. package/dist/components/CurrencyField/ECurrencyField.js.map +1 -1
  49. package/dist/components/CurrencyField/ECurrencyField.vue.d.ts +8 -6
  50. package/dist/components/CurrencyField/ECurrencyField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/DataGrid/EDataGrid.js.map +1 -1
  52. package/dist/components/DataGrid/EDataGrid.vue.d.ts +20 -15
  53. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js +213 -213
  54. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/DatePicker/EDatePicker.js.map +1 -1
  56. package/dist/components/DatePicker/EDatePicker.vue.d.ts +9 -6
  57. package/dist/components/DatePicker/EDatePicker.vue_vue_type_script_setup_true_lang.js +10 -10
  58. package/dist/components/DatePicker/EDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/components/Definition/EDefinition.js +8 -0
  60. package/dist/components/Definition/EDefinition.js.map +1 -0
  61. package/dist/components/{Popover/EPopover.vue.d.ts → Definition/EDefinition.vue.d.ts} +2 -1
  62. package/dist/components/{Popover/EPopover.vue_vue_type_script_setup_true_lang.js → Definition/EDefinition.vue_vue_type_script_setup_true_lang.js} +4 -4
  63. package/dist/components/Definition/EDefinition.vue_vue_type_script_setup_true_lang.js.map +1 -0
  64. package/dist/components/Definition/index.d.ts +1 -0
  65. package/dist/components/DescriptionList/EDescriptionList.js.map +1 -1
  66. package/dist/components/DescriptionList/EDescriptionList.vue.d.ts +32 -5
  67. package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js +70 -8
  68. package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/Dialog/DialogFrame.js.map +1 -1
  70. package/dist/components/Dialog/DialogFrame.vue.d.ts +1 -0
  71. package/dist/components/Dialog/DialogFrame.vue_vue_type_script_setup_true_lang.js +19 -18
  72. package/dist/components/Dialog/DialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/components/Dialog/EDialog.js.map +1 -1
  74. package/dist/components/Dialog/EDialog.vue.d.ts +4 -1
  75. package/dist/components/Dialog/EDialog.vue_vue_type_script_setup_true_lang.js +3 -0
  76. package/dist/components/Dialog/EDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  77. package/dist/components/Disclosure/EDisclosure.js.map +1 -1
  78. package/dist/components/Disclosure/EDisclosure.vue.d.ts +6 -9
  79. package/dist/components/Disclosure/EDisclosure.vue_vue_type_script_setup_true_lang.js +14 -19
  80. package/dist/components/Disclosure/EDisclosure.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/Drawer/EDrawer.js.map +1 -1
  82. package/dist/components/Drawer/EDrawer.vue.d.ts +4 -1
  83. package/dist/components/Drawer/EDrawer.vue_vue_type_script_setup_true_lang.js +3 -0
  84. package/dist/components/Drawer/EDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/components/EmptyState/EEmptyState.js.map +1 -1
  86. package/dist/components/EmptyState/EEmptyState.vue.d.ts +1 -1
  87. package/dist/components/EmptyState/EEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/components/ExpandableRow/EExpandableRow.js +8 -0
  89. package/dist/components/ExpandableRow/EExpandableRow.js.map +1 -0
  90. package/dist/components/{ButtonGroup/EButtonGroup.vue.d.ts → ExpandableRow/EExpandableRow.vue.d.ts} +12 -4
  91. package/dist/components/ExpandableRow/EExpandableRow.vue_vue_type_script_setup_true_lang.js +40 -0
  92. package/dist/components/ExpandableRow/EExpandableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  93. package/dist/components/ExpandableRow/index.d.ts +1 -0
  94. package/dist/components/Field/EField.js.map +1 -1
  95. package/dist/components/Field/EField.vue.d.ts +1 -1
  96. package/dist/components/Field/EField.vue_vue_type_script_setup_true_lang.js +4 -4
  97. package/dist/components/Field/EField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/Field/labelProps.d.ts +2 -2
  99. package/dist/components/Fieldset/EFieldset.js.map +1 -1
  100. package/dist/components/Fieldset/EFieldset.vue.d.ts +5 -3
  101. package/dist/components/Fieldset/EFieldset.vue_vue_type_script_setup_true_lang.js +54 -35
  102. package/dist/components/Fieldset/EFieldset.vue_vue_type_script_setup_true_lang.js.map +1 -1
  103. package/dist/components/Grid/EGrid.js.map +1 -1
  104. package/dist/components/Grid/EGrid.vue.d.ts +5 -2
  105. package/dist/components/Grid/EGrid.vue_vue_type_script_setup_true_lang.js +15 -11
  106. package/dist/components/Grid/EGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  107. package/dist/components/Heading/EHeading.js.map +1 -1
  108. package/dist/components/Heading/EHeading.vue.d.ts +1 -1
  109. package/dist/components/Heading/EHeading.vue_vue_type_script_setup_true_lang.js +10 -10
  110. package/dist/components/Heading/EHeading.vue_vue_type_script_setup_true_lang.js.map +1 -1
  111. package/dist/components/Highlight/EHighlight.js.map +1 -1
  112. package/dist/components/Highlight/EHighlight.vue_vue_type_script_setup_true_lang.js.map +1 -1
  113. package/dist/components/IconButton/EIconButton.js.map +1 -1
  114. package/dist/components/IconButton/EIconButton.vue.d.ts +1 -0
  115. package/dist/components/IconButton/EIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  116. package/dist/components/Inline/EInline.js.map +1 -1
  117. package/dist/components/Inline/EInline.vue.d.ts +3 -3
  118. package/dist/components/Inline/EInline.vue_vue_type_script_setup_true_lang.js.map +1 -1
  119. package/dist/components/Kbd/EKbd.js.map +1 -1
  120. package/dist/components/Kbd/EKbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/components/Link/ELink.js.map +1 -1
  122. package/dist/components/Link/ELink.vue.d.ts +2 -2
  123. package/dist/components/Link/ELink.vue_vue_type_script_setup_true_lang.js.map +1 -1
  124. package/dist/components/Menu/EMenu.js.map +1 -1
  125. package/dist/components/Menu/EMenu.vue.d.ts +4 -3
  126. package/dist/components/Menu/EMenu.vue_vue_type_script_setup_true_lang.js +1 -1
  127. package/dist/components/Menu/EMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  128. package/dist/components/NavList/ENavList.js.map +1 -1
  129. package/dist/components/NavList/ENavList.vue.d.ts +7 -9
  130. package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js +2 -3
  131. package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/components/{Tabs → NavList}/LinkNav.js +1 -1
  133. package/dist/components/NavList/LinkNav.js.map +1 -0
  134. package/dist/components/{Tabs → NavList}/LinkNav.vue_vue_type_script_setup_true_lang.js +1 -1
  135. package/dist/components/NavList/LinkNav.vue_vue_type_script_setup_true_lang.js.map +1 -0
  136. package/dist/components/Notice/ENotice.js.map +1 -1
  137. package/dist/components/Notice/ENotice.vue.d.ts +2 -2
  138. package/dist/components/Notice/ENotice.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/components/NumberField/ENumberField.js.map +1 -1
  140. package/dist/components/NumberField/ENumberField.vue.d.ts +5 -3
  141. package/dist/components/NumberField/ENumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/components/OtpField/EOtpField.js.map +1 -1
  143. package/dist/components/OtpField/EOtpField.vue.d.ts +10 -8
  144. package/dist/components/OtpField/EOtpField.vue_vue_type_script_setup_true_lang.js +2 -2
  145. package/dist/components/OtpField/EOtpField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/components/PageHeader/EPageHeader.js.map +1 -1
  147. package/dist/components/PageHeader/EPageHeader.vue.d.ts +1 -1
  148. package/dist/components/PageHeader/EPageHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  149. package/dist/components/Pagination/EPagination.js.map +1 -1
  150. package/dist/components/Pagination/EPagination.vue.d.ts +1 -0
  151. package/dist/components/Pagination/EPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  152. package/dist/components/PasswordField/EPasswordField.js.map +1 -1
  153. package/dist/components/PasswordField/EPasswordField.vue.d.ts +14 -10
  154. package/dist/components/PasswordField/EPasswordField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/PhoneField/EPhoneField.js.map +1 -1
  156. package/dist/components/PhoneField/EPhoneField.vue.d.ts +6 -4
  157. package/dist/components/PhoneField/EPhoneField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  158. package/dist/components/Progress/EProgress.js.map +1 -1
  159. package/dist/components/Progress/EProgress.vue.d.ts +5 -5
  160. package/dist/components/Progress/EProgress.vue_vue_type_script_setup_true_lang.js +20 -14
  161. package/dist/components/Progress/EProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/RadioGroup/ERadioGroup.js.map +1 -1
  163. package/dist/components/RadioGroup/ERadioGroup.vue.d.ts +8 -4
  164. package/dist/components/RadioGroup/ERadioGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  165. package/dist/components/RadioGroup/ERadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/components/RangePicker/ERangePicker.js.map +1 -1
  167. package/dist/components/RangePicker/ERangePicker.vue.d.ts +12 -8
  168. package/dist/components/RangePicker/ERangePicker.vue_vue_type_script_setup_true_lang.js +65 -65
  169. package/dist/components/RangePicker/ERangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/components/SearchBar/ESearchBar.js.map +1 -1
  171. package/dist/components/SearchBar/ESearchBar.vue.d.ts +8 -7
  172. package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js +1 -1
  173. package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  174. package/dist/components/SearchResults/ESearchResults.js.map +1 -1
  175. package/dist/components/SearchResults/ESearchResults.vue.d.ts +3 -3
  176. package/dist/components/SearchResults/ESearchResults.vue_vue_type_script_setup_true_lang.js +1 -1
  177. package/dist/components/SearchResults/ESearchResults.vue_vue_type_script_setup_true_lang.js.map +1 -1
  178. package/dist/components/Segmented/ESegmented.js.map +1 -1
  179. package/dist/components/Segmented/ESegmented.vue.d.ts +10 -6
  180. package/dist/components/Segmented/ESegmented.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/components/Select/ESelect.js.map +1 -1
  182. package/dist/components/Select/ESelect.vue.d.ts +9 -6
  183. package/dist/components/Select/ESelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  184. package/dist/components/Select/ESelectControl.vue.d.ts +2 -2
  185. package/dist/components/Select/ESelectControl.vue_vue_type_script_setup_true_lang.js +6 -6
  186. package/dist/components/Select/options.d.ts +1 -1
  187. package/dist/components/Select/options.js.map +1 -1
  188. package/dist/components/SignatureField/ESignatureField.js.map +1 -1
  189. package/dist/components/SignatureField/ESignatureField.vue.d.ts +14 -10
  190. package/dist/components/SignatureField/ESignatureField.vue_vue_type_script_setup_true_lang.js +4 -4
  191. package/dist/components/SignatureField/ESignatureField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  192. package/dist/components/SignaturePad/ESignaturePad.js.map +1 -1
  193. package/dist/components/SignaturePad/ESignaturePad.vue.d.ts +3 -1
  194. package/dist/components/SignaturePad/ESignaturePad.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/components/Skeleton/ESkeleton.js.map +1 -1
  196. package/dist/components/Skeleton/ESkeleton.vue.d.ts +3 -3
  197. package/dist/components/Skeleton/ESkeleton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/components/Stack/EStack.js.map +1 -1
  199. package/dist/components/Stack/EStack.vue.d.ts +2 -2
  200. package/dist/components/Stack/EStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
  201. package/dist/components/Stamp/EStamp.js.map +1 -1
  202. package/dist/components/Stamp/EStamp.vue.d.ts +18 -12
  203. package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js +27 -40
  204. package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js.map +1 -1
  205. package/dist/components/Stepper/EStepper.js.map +1 -1
  206. package/dist/components/Stepper/EStepper.vue.d.ts +2 -2
  207. package/dist/components/Stepper/EStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  208. package/dist/components/Surface/ESurface.js.map +1 -1
  209. package/dist/components/Surface/ESurface.vue.d.ts +5 -5
  210. package/dist/components/Surface/ESurface.vue_vue_type_script_setup_true_lang.js +5 -5
  211. package/dist/components/Surface/ESurface.vue_vue_type_script_setup_true_lang.js.map +1 -1
  212. package/dist/components/Switch/ESwitch.js.map +1 -1
  213. package/dist/components/Switch/ESwitch.vue.d.ts +3 -1
  214. package/dist/components/Switch/ESwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/components/Tabs/ETabs.js.map +1 -1
  216. package/dist/components/Tabs/ETabs.vue.d.ts +10 -32
  217. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js +21 -50
  218. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/components/Tabs/index.d.ts +1 -1
  220. package/dist/components/Text/EText.js.map +1 -1
  221. package/dist/components/Text/EText.vue.d.ts +4 -3
  222. package/dist/components/Text/EText.vue_vue_type_script_setup_true_lang.js +7 -2
  223. package/dist/components/Text/EText.vue_vue_type_script_setup_true_lang.js.map +1 -1
  224. package/dist/components/TextField/ETextField.js.map +1 -1
  225. package/dist/components/TextField/ETextField.vue.d.ts +8 -6
  226. package/dist/components/TextField/ETextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  227. package/dist/components/Textarea/ETextarea.js.map +1 -1
  228. package/dist/components/Textarea/ETextarea.vue.d.ts +4 -2
  229. package/dist/components/Textarea/ETextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  230. package/dist/components/Toast/EToast.js.map +1 -1
  231. package/dist/components/Toast/EToast.vue_vue_type_script_setup_true_lang.js +5 -5
  232. package/dist/components/Toast/EToast.vue_vue_type_script_setup_true_lang.js.map +1 -1
  233. package/dist/components/ToastProvider/EToastProvider.js.map +1 -1
  234. package/dist/components/ToastProvider/EToastProvider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/components/Tooltip/ETooltip.js.map +1 -1
  236. package/dist/components/Tooltip/ETooltip.vue.d.ts +1 -0
  237. package/dist/components/Tooltip/ETooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  238. package/dist/components/Upload/EUpload.js.map +1 -1
  239. package/dist/components/Upload/EUpload.vue.d.ts +5 -3
  240. package/dist/components/Upload/EUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/fonts.css +1 -1
  242. package/dist/index.d.ts +2 -25
  243. package/dist/index.js +71 -94
  244. package/dist/messages.d.ts +0 -13
  245. package/dist/messages.js +0 -13
  246. package/dist/messages.js.map +1 -1
  247. package/dist/style.css +2668 -3128
  248. package/package.json +4 -2
  249. package/dist/components/Accordion/EAccordion.js +0 -8
  250. package/dist/components/Accordion/EAccordion.js.map +0 -1
  251. package/dist/components/Accordion/EAccordion.vue.d.ts +0 -32
  252. package/dist/components/Accordion/EAccordion.vue_vue_type_script_setup_true_lang.js +0 -35
  253. package/dist/components/Accordion/EAccordion.vue_vue_type_script_setup_true_lang.js.map +0 -1
  254. package/dist/components/Accordion/index.d.ts +0 -2
  255. package/dist/components/AddressField/EAddressField.js +0 -8
  256. package/dist/components/AddressField/EAddressField.js.map +0 -1
  257. package/dist/components/AddressField/EAddressField.vue.d.ts +0 -39
  258. package/dist/components/AddressField/EAddressField.vue_vue_type_script_setup_true_lang.js +0 -119
  259. package/dist/components/AddressField/EAddressField.vue_vue_type_script_setup_true_lang.js.map +0 -1
  260. package/dist/components/AddressField/index.d.ts +0 -2
  261. package/dist/components/AddressField/usStates.d.ts +0 -5
  262. package/dist/components/AddressField/usStates.js +0 -211
  263. package/dist/components/AddressField/usStates.js.map +0 -1
  264. package/dist/components/Amount/EAmount.js +0 -8
  265. package/dist/components/Amount/EAmount.js.map +0 -1
  266. package/dist/components/Amount/EAmount.vue.d.ts +0 -21
  267. package/dist/components/Amount/EAmount.vue_vue_type_script_setup_true_lang.js +0 -38
  268. package/dist/components/Amount/EAmount.vue_vue_type_script_setup_true_lang.js.map +0 -1
  269. package/dist/components/Amount/index.d.ts +0 -2
  270. package/dist/components/Autocomplete/EAutocomplete.js +0 -7
  271. package/dist/components/Autocomplete/EAutocomplete.js.map +0 -1
  272. package/dist/components/Autocomplete/EAutocomplete.vue.d.ts +0 -44
  273. package/dist/components/Autocomplete/EAutocomplete.vue_vue_type_script_setup_true_lang.js +0 -58
  274. package/dist/components/Autocomplete/EAutocomplete.vue_vue_type_script_setup_true_lang.js.map +0 -1
  275. package/dist/components/Autocomplete/index.d.ts +0 -1
  276. package/dist/components/BackLink/EBackLink.js +0 -8
  277. package/dist/components/BackLink/EBackLink.js.map +0 -1
  278. package/dist/components/BackLink/EBackLink.vue.d.ts +0 -23
  279. package/dist/components/BackLink/EBackLink.vue_vue_type_script_setup_true_lang.js +0 -27
  280. package/dist/components/BackLink/EBackLink.vue_vue_type_script_setup_true_lang.js.map +0 -1
  281. package/dist/components/BackLink/index.d.ts +0 -1
  282. package/dist/components/BookingCard/EBookingCard.js +0 -8
  283. package/dist/components/BookingCard/EBookingCard.js.map +0 -1
  284. package/dist/components/BookingCard/EBookingCard.vue.d.ts +0 -46
  285. package/dist/components/BookingCard/EBookingCard.vue_vue_type_script_setup_true_lang.js +0 -86
  286. package/dist/components/BookingCard/EBookingCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
  287. package/dist/components/BookingCard/index.d.ts +0 -2
  288. package/dist/components/ButtonGroup/EButtonGroup.js +0 -8
  289. package/dist/components/ButtonGroup/EButtonGroup.js.map +0 -1
  290. package/dist/components/ButtonGroup/EButtonGroup.vue_vue_type_script_setup_true_lang.js +0 -18
  291. package/dist/components/ButtonGroup/EButtonGroup.vue_vue_type_script_setup_true_lang.js.map +0 -1
  292. package/dist/components/ButtonGroup/index.d.ts +0 -1
  293. package/dist/components/CardField/ECardField.js +0 -8
  294. package/dist/components/CardField/ECardField.js.map +0 -1
  295. package/dist/components/CardField/ECardField.vue.d.ts +0 -31
  296. package/dist/components/CardField/ECardField.vue_vue_type_script_setup_true_lang.js +0 -65
  297. package/dist/components/CardField/ECardField.vue_vue_type_script_setup_true_lang.js.map +0 -1
  298. package/dist/components/CardField/index.d.ts +0 -1
  299. package/dist/components/Chip/EChip.js +0 -8
  300. package/dist/components/Chip/EChip.js.map +0 -1
  301. package/dist/components/Chip/EChip.vue.d.ts +0 -22
  302. package/dist/components/Chip/EChip.vue_vue_type_script_setup_true_lang.js +0 -18
  303. package/dist/components/Chip/EChip.vue_vue_type_script_setup_true_lang.js.map +0 -1
  304. package/dist/components/Chip/index.d.ts +0 -2
  305. package/dist/components/Combobox/EHighlight.js.map +0 -1
  306. package/dist/components/DetailRow/EDetailRow.js +0 -8
  307. package/dist/components/DetailRow/EDetailRow.js.map +0 -1
  308. package/dist/components/DetailRow/EDetailRow.vue.d.ts +0 -30
  309. package/dist/components/DetailRow/EDetailRow.vue_vue_type_script_setup_true_lang.js +0 -53
  310. package/dist/components/DetailRow/EDetailRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
  311. package/dist/components/DetailRow/index.d.ts +0 -1
  312. package/dist/components/ErrorSummary/EErrorSummary.js +0 -8
  313. package/dist/components/ErrorSummary/EErrorSummary.js.map +0 -1
  314. package/dist/components/ErrorSummary/EErrorSummary.vue.d.ts +0 -30
  315. package/dist/components/ErrorSummary/EErrorSummary.vue_vue_type_script_setup_true_lang.js +0 -52
  316. package/dist/components/ErrorSummary/EErrorSummary.vue_vue_type_script_setup_true_lang.js.map +0 -1
  317. package/dist/components/ErrorSummary/index.d.ts +0 -2
  318. package/dist/components/FormSection/EFormSection.js +0 -8
  319. package/dist/components/FormSection/EFormSection.js.map +0 -1
  320. package/dist/components/FormSection/EFormSection.vue.d.ts +0 -28
  321. package/dist/components/FormSection/EFormSection.vue_vue_type_script_setup_true_lang.js +0 -38
  322. package/dist/components/FormSection/EFormSection.vue_vue_type_script_setup_true_lang.js.map +0 -1
  323. package/dist/components/FormSection/index.d.ts +0 -1
  324. package/dist/components/ItemList/EItemList.js +0 -8
  325. package/dist/components/ItemList/EItemList.js.map +0 -1
  326. package/dist/components/ItemList/EItemList.vue.d.ts +0 -13
  327. package/dist/components/ItemList/EItemList.vue_vue_type_script_setup_true_lang.js +0 -17
  328. package/dist/components/ItemList/EItemList.vue_vue_type_script_setup_true_lang.js.map +0 -1
  329. package/dist/components/ItemList/context.d.ts +0 -3
  330. package/dist/components/ItemList/context.js +0 -6
  331. package/dist/components/ItemList/context.js.map +0 -1
  332. package/dist/components/ItemList/index.d.ts +0 -1
  333. package/dist/components/ItemRow/EItemRow.js +0 -8
  334. package/dist/components/ItemRow/EItemRow.js.map +0 -1
  335. package/dist/components/ItemRow/EItemRow.vue.d.ts +0 -29
  336. package/dist/components/ItemRow/EItemRow.vue_vue_type_script_setup_true_lang.js +0 -54
  337. package/dist/components/ItemRow/EItemRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
  338. package/dist/components/ItemRow/index.d.ts +0 -1
  339. package/dist/components/LinkCard/ELinkCard.js +0 -8
  340. package/dist/components/LinkCard/ELinkCard.js.map +0 -1
  341. package/dist/components/LinkCard/ELinkCard.vue.d.ts +0 -39
  342. package/dist/components/LinkCard/ELinkCard.vue_vue_type_script_setup_true_lang.js +0 -61
  343. package/dist/components/LinkCard/ELinkCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
  344. package/dist/components/LinkCard/index.d.ts +0 -1
  345. package/dist/components/LoadingBar/ELoadingBar.js +0 -8
  346. package/dist/components/LoadingBar/ELoadingBar.js.map +0 -1
  347. package/dist/components/LoadingBar/ELoadingBar.vue.d.ts +0 -7
  348. package/dist/components/LoadingBar/ELoadingBar.vue_vue_type_script_setup_true_lang.js +0 -21
  349. package/dist/components/LoadingBar/ELoadingBar.vue_vue_type_script_setup_true_lang.js.map +0 -1
  350. package/dist/components/LoadingBar/index.d.ts +0 -1
  351. package/dist/components/MetaList/EMetaList.js +0 -8
  352. package/dist/components/MetaList/EMetaList.js.map +0 -1
  353. package/dist/components/MetaList/EMetaList.vue.d.ts +0 -15
  354. package/dist/components/MetaList/EMetaList.vue_vue_type_script_setup_true_lang.js +0 -19
  355. package/dist/components/MetaList/EMetaList.vue_vue_type_script_setup_true_lang.js.map +0 -1
  356. package/dist/components/MetaList/index.d.ts +0 -2
  357. package/dist/components/MultiSelect/EMultiSelect.js +0 -7
  358. package/dist/components/MultiSelect/EMultiSelect.js.map +0 -1
  359. package/dist/components/MultiSelect/EMultiSelect.vue.d.ts +0 -44
  360. package/dist/components/MultiSelect/EMultiSelect.vue_vue_type_script_setup_true_lang.js +0 -58
  361. package/dist/components/MultiSelect/EMultiSelect.vue_vue_type_script_setup_true_lang.js.map +0 -1
  362. package/dist/components/MultiSelect/index.d.ts +0 -1
  363. package/dist/components/Panel/EPanel.js +0 -8
  364. package/dist/components/Panel/EPanel.js.map +0 -1
  365. package/dist/components/Panel/EPanel.vue.d.ts +0 -25
  366. package/dist/components/Panel/EPanel.vue_vue_type_script_setup_true_lang.js +0 -38
  367. package/dist/components/Panel/EPanel.vue_vue_type_script_setup_true_lang.js.map +0 -1
  368. package/dist/components/Panel/index.d.ts +0 -1
  369. package/dist/components/Popover/EPopover.js +0 -8
  370. package/dist/components/Popover/EPopover.js.map +0 -1
  371. package/dist/components/Popover/EPopover.vue_vue_type_script_setup_true_lang.js.map +0 -1
  372. package/dist/components/Popover/index.d.ts +0 -1
  373. package/dist/components/SlotPicker/ESlotPicker.js +0 -8
  374. package/dist/components/SlotPicker/ESlotPicker.js.map +0 -1
  375. package/dist/components/SlotPicker/ESlotPicker.vue.d.ts +0 -55
  376. package/dist/components/SlotPicker/ESlotPicker.vue_vue_type_script_setup_true_lang.js +0 -82
  377. package/dist/components/SlotPicker/ESlotPicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  378. package/dist/components/SlotPicker/index.d.ts +0 -2
  379. package/dist/components/StatementCard/EStatementCard.js +0 -8
  380. package/dist/components/StatementCard/EStatementCard.js.map +0 -1
  381. package/dist/components/StatementCard/EStatementCard.vue.d.ts +0 -20
  382. package/dist/components/StatementCard/EStatementCard.vue_vue_type_script_setup_true_lang.js +0 -96
  383. package/dist/components/StatementCard/EStatementCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
  384. package/dist/components/StatementCard/index.d.ts +0 -2
  385. package/dist/components/StatementCard/types.d.ts +0 -37
  386. package/dist/components/StatementRow/EStatementRow.js +0 -8
  387. package/dist/components/StatementRow/EStatementRow.js.map +0 -1
  388. package/dist/components/StatementRow/EStatementRow.vue.d.ts +0 -14
  389. package/dist/components/StatementRow/EStatementRow.vue_vue_type_script_setup_true_lang.js +0 -96
  390. package/dist/components/StatementRow/EStatementRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
  391. package/dist/components/StatementRow/index.d.ts +0 -1
  392. package/dist/components/Tabs/LinkNav.js.map +0 -1
  393. package/dist/components/Tabs/LinkNav.vue_vue_type_script_setup_true_lang.js.map +0 -1
  394. package/dist/components/Timeline/ETimeline.js +0 -8
  395. package/dist/components/Timeline/ETimeline.js.map +0 -1
  396. package/dist/components/Timeline/ETimeline.vue.d.ts +0 -15
  397. package/dist/components/Timeline/ETimeline.vue_vue_type_script_setup_true_lang.js +0 -43
  398. package/dist/components/Timeline/ETimeline.vue_vue_type_script_setup_true_lang.js.map +0 -1
  399. package/dist/components/Timeline/index.d.ts +0 -2
  400. package/dist/components/Toggle/EToggle.js +0 -8
  401. package/dist/components/Toggle/EToggle.js.map +0 -1
  402. package/dist/components/Toggle/EToggle.vue.d.ts +0 -27
  403. package/dist/components/Toggle/EToggle.vue_vue_type_script_setup_true_lang.js +0 -40
  404. package/dist/components/Toggle/EToggle.vue_vue_type_script_setup_true_lang.js.map +0 -1
  405. package/dist/components/Toggle/index.d.ts +0 -1
  406. /package/dist/components/Combobox/{EHighlight.d.ts → matchHighlight.d.ts} +0 -0
  407. /package/dist/components/{Tabs → NavList}/LinkNav.vue.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"EDataGrid.js","names":["_sfc_main","EDataGrid_vue_vue_type_script_setup_true_lang_default","EDataGrid_default"],"sources":["../../../src/components/DataGrid/EDataGrid.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"Row extends DataGridRow\">\nimport { computed, nextTick, ref, watch, type CSSProperties } from \"vue\";\nimport { PopoverClose, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger } from \"reka-ui\";\nimport {\n columnFilteringFeature,\n columnSizingFeature,\n columnVisibilityFeature,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n functionalUpdate,\n globalFilteringFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n tableFeatures,\n useTable,\n type ColumnDef,\n type FilterFn,\n type SortFn,\n} from \"@tanstack/vue-table\";\nimport { useVirtualizer } from \"@tanstack/vue-virtual\";\nimport EButton from \"../Button/EButton.vue\";\nimport ECheckbox from \"../Checkbox/ECheckbox.vue\";\nimport EEmptyState from \"../EmptyState/EEmptyState.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport EIconButton from \"../IconButton/EIconButton.vue\";\nimport EPagination from \"../Pagination/EPagination.vue\";\nimport ESelect from \"../Select/ESelect.vue\";\nimport ETextField from \"../TextField/ETextField.vue\";\nimport EDataGridResizer from \"./EDataGridResizer.vue\";\nimport \"../Popover/EPopover.vue\";\nimport { normalizeOptions, type EOption } from \"../Select/options.js\";\nimport type { IconProp } from \"../../icons/types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport { cellValue, compareValues, filterActive, parsePx, passesFilter } from \"./grid.js\";\nimport type {\n DataGridColumn,\n DataGridFilterValue,\n DataGridQuery,\n DataGridRow,\n DataGridSort,\n DataGridVirtual,\n} from \"./types.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\n\nconst props = withDefaults(\n defineProps<{\n /** The columns, in order. See `DataGridColumn`. */\n columns: DataGridColumn<Row>[];\n /** The rows. Each needs a unique `id`. */\n rows: Row[];\n /** Names the table for screen readers and the scrolling region. Required. */\n caption: string;\n /** One search box over all shown columns. */\n searchable?: boolean;\n /** The search box's placeholder. Default \"Search all columns\". */\n searchPlaceholder?: string;\n /** A filter row under the headings, for columns that define a `filter`. */\n filterable?: boolean;\n /** Column edges can be dragged, or moved with the arrow keys. */\n resizable?: boolean;\n /** Keeps the first column in view while scrolling sideways. */\n stickyFirst?: boolean;\n /** A Columns menu to show and hide columns. */\n columnToggle?: boolean;\n /** A checkbox on each row and a select-all in the heading. */\n selectable?: boolean;\n /** Rows per page; 0 turns paging off. Default 10. */\n pageSize?: number;\n /** Stops the table growing past this height (any CSS length) and scrolls inside it. */\n maxHeight?: string;\n /** Renders only the rows in view, for thousands of rows. Replaces paging. */\n virtual?: boolean | DataGridVirtual;\n /** Turns rows into cards below 40rem of the grid's own width. Default on; virtual and resizable grids keep the table. */\n cards?: boolean;\n /** Data lives on a server: show the rows given, and report every change through `queryChange`. */\n manual?: boolean;\n /** With `manual`, how many rows there are in all. */\n total?: number;\n /** Shows placeholder rows while data loads. */\n loading?: boolean;\n /** The title when there are no rows. Default \"No results\". */\n emptyTitle?: string;\n /** The sentence under the title when there are no rows. */\n emptyText?: string;\n /** The glyph above the title when there are no rows. Default \"search\". */\n emptyIcon?: IconProp;\n /** A bare table for a short static list: no toolbar, filters, paging or footer. */\n plain?: boolean;\n }>(),\n { pageSize: 10, cards: true },\n);\n\nconst emit = defineEmits<{\n /** Sort, page, search or filters changed. With `manual`, fetch the rows this describes. */\n queryChange: [query: DataGridQuery];\n}>();\n\nconst slots = defineSlots<{\n [K: `cell-${string}`]: (props: { row: Row; value: unknown }) => unknown;\n [K: `header-${string}`]: (props: { column: DataGridColumn<Row> }) => unknown;\n /** Buttons that act on the selected rows, shown beside the count. */\n \"bulk-actions\"?: () => unknown;\n /** Anything else for the bar above the table. */\n toolbar?: () => unknown;\n}>();\n\nconst sort = defineModel<DataGridSort | null>(\"sort\", { default: null });\nconst page = defineModel<number>(\"page\", { default: 1 });\nconst search = defineModel<string>(\"search\", { default: \"\" });\nconst filters = defineModel<Record<string, DataGridFilterValue>>(\"filters\", { default: () => ({}) });\nconst selected = defineModel<string[]>(\"selected\", { default: () => [] });\n\nconst t = useMessages();\nconst portal = usePortalTarget();\n\nconst uid = useUid();\nconst menuOpen = ref(false);\nconst menuTrigger = ref<{ $el: HTMLElement } | null>(null);\nwatch(\n menuOpen,\n async (open) => {\n if (!open) return;\n await nextTick();\n const panel = document.getElementById(menuTrigger.value?.$el?.getAttribute(\"aria-controls\") ?? \"\");\n panel?.setAttribute(\"aria-labelledby\", `${uid.value}-columns`);\n },\n { flush: \"post\" },\n);\n\nconst ALL = \"__e-all__\";\nconst NONE = \"__e-none__\";\n\nconst features = tableFeatures({\n rowSortingFeature,\n sortedRowModel: createSortedRowModel(),\n columnFilteringFeature,\n globalFilteringFeature,\n filteredRowModel: createFilteredRowModel(),\n rowPaginationFeature,\n paginatedRowModel: createPaginatedRowModel(),\n rowSelectionFeature,\n columnVisibilityFeature,\n columnSizingFeature,\n});\n\nconst columnVisibility = ref<Record<string, boolean>>({});\nconst columnSizing = ref<Record<string, number>>({});\n\nconst sortFn: SortFn<typeof features, Row> = (a, b, id) => compareValues(a.getValue(id), b.getValue(id));\ntype GlobalFilter = { q: string; cols: string[] };\nconst globalFilterFn: FilterFn<typeof features, Row> = (row, id, f: GlobalFilter) => {\n if (!f.cols.includes(id)) return false;\n const v = row.getValue(id);\n return v != null && String(v).toLowerCase().includes(f.q);\n};\n\nconst colByKey = computed(() => new Map(props.columns.map((c) => [c.key, c])));\nconst columnDefs = computed<ColumnDef<typeof features, Row>[]>(() =>\n props.columns.map((c) => ({\n id: c.key,\n accessorFn: (row: Row) => cellValue(row, c),\n header: c.label,\n enableSorting: !!c.sortable,\n sortDescFirst: false,\n sortFn,\n enableColumnFilter: !!c.filter,\n filterFn: ((row, id, f) => passesFilter(c, row.getValue(id), f)) as FilterFn<typeof features, Row>,\n enableResizing: c.resizable !== false,\n })),\n);\n\nconst vopt = computed(() =>\n props.virtual ? { rowHeight: 48, height: 440, overscan: 8, ...(props.virtual === true ? {} : props.virtual) } : null,\n);\nconst pageSize = computed(() => (vopt.value || props.plain ? 0 : (props.pageSize ?? 10)));\nconst paging = computed(() => pageSize.value > 0 && !props.manual);\nconst resizable = computed(() => !!props.resizable && !props.plain);\nconst cards = computed(() => props.cards !== false && !vopt.value && !resizable.value);\nconst q = computed(() => search.value.trim().toLowerCase());\nconst anyFilter = computed(() => Object.values(filters.value).some(filterActive));\n\nconst table = useTable({\n features,\n columns: columnDefs,\n data: computed(() => props.rows),\n getRowId: (row: Row) => String(row.id),\n enableMultiSort: false,\n enableSubRowSelection: false,\n autoResetPageIndex: false,\n manualSorting: computed(() => !!props.manual),\n manualFiltering: computed(() => !!props.manual),\n manualPagination: computed(() => !paging.value),\n rowCount: computed(() => (props.manual ? (props.total ?? props.rows.length) : undefined)),\n globalFilterFn,\n state: computed(() => ({\n sorting: sort.value ? [{ id: sort.value.key, desc: sort.value.dir === \"desc\" }] : [],\n columnFilters: Object.entries(filters.value)\n .filter(([key, value]) => colByKey.value.has(key) && filterActive(value))\n .map(([id, value]) => ({ id, value })),\n globalFilter: q.value\n ? ({\n q: q.value,\n cols: props.columns.filter((c) => columnVisibility.value[c.key] !== false).map((c) => c.key),\n } satisfies GlobalFilter)\n : undefined,\n rowSelection: Object.fromEntries(selected.value.map((id) => [id, true])),\n columnVisibility: columnVisibility.value,\n columnSizing: columnSizing.value,\n pagination: { pageIndex: Math.max(0, page.value - 1), pageSize: pageSize.value || 1 },\n })),\n onSortingChange: (updater) => {\n const next = functionalUpdate(updater, sort.value ? [{ id: sort.value.key, desc: sort.value.dir === \"desc\" }] : []);\n const first = next[0];\n sort.value = first ? { key: first.id, dir: first.desc ? \"desc\" : \"asc\" } : null;\n page.value = 1;\n },\n onRowSelectionChange: (updater) => {\n const next = functionalUpdate(updater, Object.fromEntries(selected.value.map((id) => [id, true])));\n selected.value = Object.keys(next).filter((k) => next[k]);\n },\n onColumnVisibilityChange: (updater) => {\n columnVisibility.value = functionalUpdate(updater, columnVisibility.value);\n },\n onColumnSizingChange: (updater) => {\n columnSizing.value = functionalUpdate(updater, columnSizing.value);\n },\n});\n\nconst view = computed(() => table.getRowModel().rows);\nconst total = computed(() =>\n props.manual ? (props.total ?? props.rows.length) : table.getPrePaginatedRowModel().rows.length,\n);\nconst pages = computed(() => (pageSize.value > 0 ? Math.max(1, Math.ceil(total.value / pageSize.value)) : 1));\nconst cur = computed(() => Math.min(page.value, pages.value));\nwatch(pages, (n) => {\n if (page.value > n) page.value = n;\n});\nconst cols = computed(() =>\n table\n .getVisibleLeafColumns()\n .map((c) => colByKey.value.get(c.id))\n .filter((c): c is DataGridColumn<Row> => !!c),\n);\nconst hasFilterRow = computed(() => !!props.filterable && !props.plain && cols.value.some((c) => c.filter));\nconst colCount = computed(() => cols.value.length + (props.selectable ? 1 : 0));\nconst from = computed(() =>\n total.value === 0 ? 0 : (cur.value - 1) * (pageSize.value > 0 ? pageSize.value : total.value) + 1,\n);\nconst to = computed(() => (pageSize.value > 0 ? Math.min(total.value, cur.value * pageSize.value) : total.value));\nconst sortedCol = computed(() => (sort.value ? colByKey.value.get(sort.value.key) : undefined));\nconst nPicked = computed(() => selected.value.length);\nconst allOn = computed(() => view.value.length > 0 && view.value.every((r) => r.getIsSelected()));\nconst someOn = computed(() => view.value.some((r) => r.getIsSelected()));\n\nconst scrollEl = ref<HTMLElement | null>(null);\nconst virtualizer = useVirtualizer(\n computed(() => ({\n count: vopt.value ? view.value.length : 0,\n getScrollElement: () => scrollEl.value,\n estimateSize: () => vopt.value?.rowHeight ?? 48,\n overscan: vopt.value?.overscan ?? 8,\n getItemKey: (i: number) => view.value[i]?.id ?? i,\n initialRect: { width: 0, height: vopt.value?.height ?? 0 },\n })),\n);\nconst items = computed(() => (vopt.value ? virtualizer.value.getVirtualItems() : []));\nconst shown = computed(() => (vopt.value ? items.value.flatMap((i) => (view.value[i.index] ? [i] : [])) : []));\nconst spaceTop = computed(() => items.value[0]?.start ?? 0);\nconst spaceBottom = computed(() => {\n const last = items.value[items.value.length - 1];\n return last ? Math.max(0, virtualizer.value.getTotalSize() - last.end) : 0;\n});\nconst rowsToRender = computed(() =>\n vopt.value\n ? shown.value.map((i) => ({ row: view.value[i.index]!, index: i.index }))\n : view.value.map((row, index) => ({ row, index })),\n);\n\nconst cellProps = (row: (typeof view.value)[number], c: DataGridColumn<Row>) => ({\n row: row.original,\n value: row.getValue(c.key),\n});\n\nconst fixedLayout = computed(() => resizable.value || !!vopt.value || cols.value.some((c) => c.width));\nconst stickyLeft = computed(() => (props.selectable ? 52 : 0));\nconst widthOf = (c: DataGridColumn<Row>) => columnSizing.value[c.key] || parsePx(c.width) || undefined;\nconst minTable = computed(\n () => (props.selectable ? 52 : 0) + cols.value.reduce((s, c) => s + (widthOf(c) || c.minWidth || 96), 0),\n);\nconst stick = (i: number) => !!props.stickyFirst && i === 0;\nconst stickStyle = (i: number): CSSProperties | undefined =>\n stick(i) ? { insetInlineStart: `${stickyLeft.value}px` } : undefined;\nconst tableStyle = computed(\n () =>\n ({\n tableLayout: fixedLayout.value ? \"fixed\" : undefined,\n \"--e-grid-min-w\": fixedLayout.value ? `${minTable.value}px` : undefined,\n \"--e-row-h\": vopt.value ? `${vopt.value.rowHeight}px` : undefined,\n }) as CSSProperties,\n);\nconst scrollStyle = computed(\n () =>\n (vopt.value\n ? { height: `${vopt.value.height}px` }\n : props.maxHeight\n ? { \"--e-grid-max-h\": props.maxHeight }\n : undefined) as CSSProperties | undefined,\n);\nconst role = (r: string) => (cards.value ? r : undefined);\n\nconst sortables = computed(() => props.columns.filter((c) => c.sortable));\nconst sortOptions = computed<EOption[]>(() => [\n { value: NONE, label: t(\"sortBy\") },\n ...sortables.value.flatMap((c) =>\n ([\"asc\", \"desc\"] as const).map((d) => ({\n value: `${c.key}:${d}`,\n label: `${c.label}, ${t(d === \"asc\" ? \"ascending\" : \"descending\")}`,\n })),\n ),\n]);\nconst sortSelectValue = computed(() => (sort.value ? `${sort.value.key}:${sort.value.dir}` : NONE));\nconst showSortSelect = computed(() => cards.value && sortables.value.length > 0);\nconst hasToolbar = computed(() => !!slots.toolbar);\nconst barOther = computed(\n () => !!props.searchable || !!props.columnToggle || nPicked.value > 0 || anyFilter.value || hasToolbar.value,\n);\nconst showBar = computed(() => !props.plain && (barOther.value || showSortSelect.value));\n\nfunction onSearch(e: Event) {\n search.value = (e.target as HTMLInputElement).value;\n page.value = 1;\n}\nfunction setFilter(key: string, value: DataGridFilterValue) {\n filters.value = { ...filters.value, [key]: value };\n page.value = 1;\n}\nfunction clearFilters() {\n filters.value = {};\n search.value = \"\";\n page.value = 1;\n}\nfunction chooseSort(v: string) {\n if (v === NONE) sort.value = null;\n else {\n const at = v.lastIndexOf(\":\");\n sort.value = { key: v.slice(0, at), dir: v.slice(at + 1) === \"desc\" ? \"desc\" : \"asc\" };\n }\n page.value = 1;\n}\nfunction setWidth(key: string, px: number) {\n table.setColumnSizing((old) => ({ ...old, [key]: px }));\n}\nfunction resetWidth(key: string) {\n table.setColumnSizing((old) => {\n const next = { ...old };\n delete next[key];\n return next;\n });\n}\nconst numberFilter = (key: string) => {\n const f = filters.value[key];\n return typeof f === \"object\" ? f : { min: \"\", max: \"\" };\n};\nconst textFilter = (key: string) => {\n const f = filters.value[key];\n return typeof f === \"string\" ? f : \"\";\n};\nconst selectOptions = (c: DataGridColumn<Row>): EOption[] => [\n { value: ALL, label: t(\"all\") },\n ...normalizeOptions(c.filter?.type === \"select\" ? c.filter.options : []),\n];\n\nwatch([sort, page, search, filters], () => {\n emit(\"queryChange\", {\n sort: sort.value,\n page: page.value,\n pageSize: pageSize.value,\n search: search.value,\n filters: filters.value,\n });\n});\n</script>\n\n<template>\n <div class=\"e-grid\" :class=\"{ 'e-grid--plain': plain, 'e-grid--cards': cards }\">\n <div class=\"e-grid-frame\">\n <div v-if=\"showBar\" class=\"e-grid-bar\" :class=\"{ 'e-grid-bar--sortonly': !barOther }\">\n <div v-if=\"searchable\" class=\"e-input-wrap e-grid-search\">\n <span class=\"e-affix e-affix--pre\"><EIcon name=\"search\" /></span>\n <input\n class=\"e-input\"\n type=\"search\"\n :placeholder=\"searchPlaceholder || t('searchAll')\"\n :aria-label=\"t('searchAll')\"\n :value=\"search\"\n @input=\"onSearch\"\n />\n </div>\n <div v-if=\"nPicked\" class=\"e-grid-picked\">\n <span class=\"e-grid-count\">{{ t(\"selected\", { n: nPicked }) }}</span>\n <slot name=\"bulk-actions\" />\n </div>\n <div v-if=\"showSortSelect\" class=\"e-grid-sortsel\">\n <ESelect\n bare\n :aria-label=\"t('sortBy')\"\n :placeholder=\"t('sortBy')\"\n :options=\"sortOptions\"\n :model-value=\"sortSelectValue\"\n @update:model-value=\"chooseSort\"\n />\n </div>\n <div class=\"e-grid-tools\">\n <EButton v-if=\"anyFilter || q\" variant=\"quiet\" @click=\"clearFilters\">{{ t(\"clearFilters\") }}</EButton>\n <PopoverRoot v-if=\"columnToggle\" v-model:open=\"menuOpen\">\n <PopoverTrigger as-child>\n <EButton ref=\"menuTrigger\" variant=\"outline\" :aria-label=\"t('chooseColumns')\">{{ t(\"columns\") }}</EButton>\n </PopoverTrigger>\n <PopoverPortal :to=\"portal\">\n <PopoverContent\n class=\"e-popover e-root\"\n side=\"bottom\"\n align=\"start\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n >\n <header class=\"e-pop-head\">\n <h3 :id=\"`${uid}-columns`\" class=\"e-pop-title\">{{ t(\"showColumns\") }}</h3>\n <PopoverClose as-child>\n <EIconButton icon=\"x\" :label=\"t('close')\" />\n </PopoverClose>\n </header>\n <div class=\"e-pop-body\">\n <ECheckbox\n v-for=\"column in table.getAllLeafColumns()\"\n :key=\"column.id\"\n :label=\"colByKey.get(column.id)?.label ?? column.id\"\n :model-value=\"column.getIsVisible()\"\n @update:model-value=\"column.toggleVisibility($event)\"\n />\n </div>\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n <slot name=\"toolbar\" />\n </div>\n </div>\n <div ref=\"scrollEl\" class=\"e-grid-scroll\" :style=\"scrollStyle\" tabindex=\"0\" role=\"region\" :aria-label=\"caption\">\n <table\n class=\"e-table e-gridtable\"\n :class=\"{ 'e-gridtable--virtual': vopt }\"\n :style=\"tableStyle\"\n :role=\"role('table')\"\n :aria-busy=\"loading ? 'true' : undefined\"\n :aria-rowcount=\"vopt ? total + 1 + (hasFilterRow ? 1 : 0) : undefined\"\n >\n <caption class=\"e-sr\">\n {{\n caption\n }}\n </caption>\n <colgroup v-if=\"fixedLayout\">\n <col v-if=\"selectable\" style=\"width: 52px\" />\n <col v-for=\"c in cols\" :key=\"c.key\" :style=\"widthOf(c) ? { width: `${widthOf(c)}px` } : undefined\" />\n </colgroup>\n <thead :role=\"role('rowgroup')\">\n <tr :role=\"role('row')\">\n <th v-if=\"selectable\" scope=\"col\" class=\"e-cell-check\" :role=\"role('columnheader')\">\n <ECheckbox\n bare\n :label=\"vopt ? t('selectAll') : t('selectAllPage')\"\n :model-value=\"allOn\"\n :indeterminate=\"someOn && !allOn\"\n @update:model-value=\"table.toggleAllPageRowsSelected(!allOn)\"\n />\n </th>\n <th\n v-for=\"(c, i) in cols\"\n :key=\"c.key\"\n scope=\"col\"\n :role=\"role('columnheader')\"\n :class=\"{ 'e-num': c.numeric, 'e-center': c.align === 'center', 'e-sticky': stick(i) }\"\n :style=\"stickStyle(i)\"\n :aria-sort=\"\n c.sortable\n ? sort?.key === c.key\n ? sort.dir === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n : undefined\n \"\n >\n <button\n v-if=\"c.sortable\"\n type=\"button\"\n class=\"e-sortbtn\"\n @click=\"table.getColumn(c.key)?.toggleSorting()\"\n >\n <slot :name=\"`header-${c.key}`\" :column=\"c\">{{ c.label }}</slot>\n <EIcon\n :name=\"sort?.key === c.key ? (sort.dir === 'asc' ? 'arrow-up' : 'arrow-down') : 'sort'\"\n small\n />\n </button>\n <slot v-else :name=\"`header-${c.key}`\" :column=\"c\">{{ c.label }}</slot>\n <EDataGridResizer\n v-if=\"resizable && c.resizable !== false\"\n :label=\"c.label\"\n :width=\"widthOf(c)\"\n :min=\"c.minWidth || 72\"\n @resize=\"setWidth(c.key, $event)\"\n @reset=\"resetWidth(c.key)\"\n />\n </th>\n </tr>\n <tr v-if=\"hasFilterRow\" class=\"e-filterrow\" :role=\"role('row')\">\n <td v-if=\"selectable\" class=\"e-cell-check\" :role=\"role('cell')\" />\n <td\n v-for=\"(c, i) in cols\"\n :key=\"c.key\"\n :role=\"role('cell')\"\n :class=\"{ 'e-sticky': stick(i) }\"\n :style=\"stickStyle(i)\"\n >\n <template v-if=\"c.filter\">\n <ESelect\n v-if=\"c.filter.type === 'select'\"\n bare\n :aria-label=\"t('filterColumn', { col: c.label })\"\n :placeholder=\"t('all')\"\n :options=\"selectOptions(c)\"\n :model-value=\"textFilter(c.key) || ALL\"\n @update:model-value=\"setFilter(c.key, $event === ALL ? '' : $event)\"\n />\n <div v-else-if=\"c.filter.type === 'number'\" class=\"e-filter-range\">\n <ETextField\n hide-label\n inputmode=\"decimal\"\n :label=\"t('minOf', { col: t('filterColumn', { col: c.label }) })\"\n :placeholder=\"t('min')\"\n :model-value=\"numberFilter(c.key).min\"\n @update:model-value=\"setFilter(c.key, { min: $event, max: numberFilter(c.key).max })\"\n />\n <ETextField\n hide-label\n inputmode=\"decimal\"\n :label=\"t('maxOf', { col: t('filterColumn', { col: c.label }) })\"\n :placeholder=\"t('max')\"\n :model-value=\"numberFilter(c.key).max\"\n @update:model-value=\"setFilter(c.key, { min: numberFilter(c.key).min, max: $event })\"\n />\n </div>\n <ETextField\n v-else\n hide-label\n type=\"search\"\n :label=\"t('filterColumn', { col: c.label })\"\n :placeholder=\"t('filter')\"\n :model-value=\"textFilter(c.key)\"\n @update:model-value=\"setFilter(c.key, $event)\"\n />\n </template>\n </td>\n </tr>\n </thead>\n <tbody :role=\"role('rowgroup')\">\n <template v-if=\"loading\">\n <tr v-for=\"n in 5\" :key=\"`s${n}`\" :role=\"role('row')\">\n <td v-if=\"selectable\" class=\"e-cell-check\" :role=\"role('cell')\" />\n <td v-for=\"c in cols\" :key=\"c.key\" :role=\"role('cell')\"><span class=\"e-skel\" /></td>\n </tr>\n </template>\n <tr v-else-if=\"view.length === 0\" :role=\"role('row')\">\n <td :colspan=\"colCount\" class=\"e-grid-empty\" :role=\"role('cell')\">\n <EEmptyState bare :icon=\"emptyIcon || 'search'\" :title=\"emptyTitle || t('noResults')\">\n {{ emptyText || (anyFilter || q ? t(\"noMatchesFilters\") : t(\"nothingYet\")) }}\n <template v-if=\"anyFilter || q\" #action>\n <EButton variant=\"outline\" @click=\"clearFilters\">{{ t(\"clearFilters\") }}</EButton>\n </template>\n </EEmptyState>\n </td>\n </tr>\n <template v-else>\n <tr v-if=\"vopt && spaceTop > 0\" aria-hidden=\"true\" class=\"e-spacer\" :style=\"{ height: `${spaceTop}px` }\">\n <td :colspan=\"colCount\" />\n </tr>\n <tr\n v-for=\"{ row, index } in rowsToRender\"\n :key=\"row.id\"\n :role=\"role('row')\"\n :data-selected=\"row.getIsSelected() ? '' : undefined\"\n :aria-rowindex=\"vopt ? index + 2 + (hasFilterRow ? 1 : 0) : undefined\"\n >\n <td v-if=\"selectable\" class=\"e-cell-check\" :role=\"role('cell')\">\n <ECheckbox\n bare\n :label=\"t('selectRow')\"\n :model-value=\"row.getIsSelected()\"\n @update:model-value=\"row.toggleSelected($event)\"\n />\n </td>\n <td\n v-for=\"(c, i) in cols\"\n :key=\"c.key\"\n :role=\"role('cell')\"\n :data-label=\"c.label\"\n :class=\"{ 'e-num': c.numeric, 'e-center': c.align === 'center', 'e-sticky': stick(i) }\"\n :style=\"stickStyle(i)\"\n >\n <slot :name=\"`cell-${c.key}`\" v-bind=\"cellProps(row, c)\">{{ row.original[c.key] }}</slot>\n </td>\n </tr>\n <tr\n v-if=\"vopt && spaceBottom > 0\"\n aria-hidden=\"true\"\n class=\"e-spacer\"\n :style=\"{ height: `${spaceBottom}px` }\"\n >\n <td :colspan=\"colCount\" />\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n <div v-if=\"!plain\" class=\"e-grid-foot\">\n <span class=\"e-grid-range\">{{\n total === 0\n ? t(\"rows\", { n: 0 })\n : vopt || pageSize === 0\n ? t(\"rows\", { n: total })\n : t(\"showing\", { from, to, total })\n }}</span>\n <EPagination\n v-if=\"pageSize > 0 && pages > 1\"\n :model-value=\"cur\"\n :page-count=\"pages\"\n @update:model-value=\"page = $event\"\n />\n </div>\n <span class=\"e-sr\" role=\"status\" aria-live=\"polite\">{{\n loading\n ? t(\"loading\")\n : (sortedCol\n ? t(\"sortedBy\", { col: sortedCol.label, dir: t(sort?.dir === \"asc\" ? \"ascending\" : \"descending\") }) + \" \"\n : \"\") + t(\"rowsAnnounce\", { n: total })\n }}</span>\n </div>\n </div>\n</template>\n\n<style>\n@layer e.containers {\n .e-table {\n width: 100%;\n border-collapse: collapse;\n font: 400 var(--e-text-md) / 1.4 var(--e-font-sans);\n }\n\n .e-table th {\n padding: var(--e-space-3) var(--e-space-4);\n border-bottom: var(--e-stroke-card) solid var(--e-border-strong);\n background: var(--e-surface-tint);\n text-align: start;\n white-space: nowrap;\n font: 600 var(--e-text-xs) / 1.2 var(--e-font-mono);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--e-muted);\n }\n\n .e-table td {\n padding: var(--e-space-3) var(--e-space-4);\n border-top: var(--e-stroke-hair) solid var(--e-border);\n vertical-align: middle;\n }\n\n .e-table tbody tr:first-child td {\n border-top: 0;\n }\n\n .e-table tbody tr:hover td {\n background: var(--e-surface-tint);\n }\n\n .e-table .e-num {\n text-align: end;\n font-family: var(--e-font-mono);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n\n .e-table th.e-num {\n font-family: var(--e-font-mono);\n }\n\n .e-table .e-center {\n text-align: center;\n }\n\n .e-skel {\n display: block;\n height: 14px;\n border-radius: var(--e-radius-sm);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 1px var(--e-border);\n animation: e-pulse 1.4s ease-in-out infinite;\n }\n\n @keyframes e-pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .e-skel {\n animation: none;\n }\n }\n\n .e-grid {\n isolation: isolate;\n border-radius: var(--e-radius-md);\n min-width: 0;\n }\n\n .e-grid-frame::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: var(--e-z-sticky);\n border-radius: inherit;\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-border);\n pointer-events: none;\n }\n\n .e-grid-frame {\n position: relative;\n overflow: hidden;\n border-radius: inherit;\n background: var(--e-surface);\n }\n\n .e-grid-bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--e-space-3);\n padding: var(--e-space-3) var(--e-space-4);\n border-bottom: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-grid-search {\n flex: 1 1 10rem;\n max-width: 24rem;\n }\n\n .e-grid-search .e-input {\n padding-inline-start: var(--e-space-2);\n }\n\n .e-grid-picked {\n display: flex;\n align-items: center;\n gap: var(--e-space-3);\n }\n\n .e-grid-count {\n font: 600 var(--e-text-xs) / 1 var(--e-font-mono);\n letter-spacing: 0.04em;\n }\n\n .e-grid-tools {\n margin-inline-start: auto;\n display: flex;\n gap: var(--e-space-2);\n }\n\n .e-grid-scroll {\n overflow: auto;\n max-height: var(--e-grid-max-h, none);\n }\n\n .e-grid-scroll:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n }\n\n .e-gridtable {\n border-radius: 0;\n box-shadow: none;\n min-width: var(--e-grid-min-w, 0);\n }\n\n .e-gridtable thead th {\n position: sticky;\n top: 0;\n z-index: var(--e-z-raised);\n height: 45px;\n box-sizing: border-box;\n }\n\n .e-gridtable th[aria-sort=\"ascending\"],\n .e-gridtable th[aria-sort=\"descending\"] {\n color: var(--e-ink);\n }\n\n .e-sortbtn {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n min-height: var(--e-control-height);\n padding: 4px 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n letter-spacing: inherit;\n text-transform: inherit;\n cursor: pointer;\n }\n\n .e-sortbtn:hover {\n color: var(--e-ink);\n }\n\n .e-sortbtn:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n border-radius: var(--e-radius-sm);\n }\n\n .e-gridtable .e-cell-check {\n width: 52px;\n padding-inline-end: 0;\n vertical-align: middle;\n }\n\n .e-gridtable tbody tr[data-selected] td {\n background: var(--e-surface-tint);\n }\n\n .e-gridtable tbody tr[data-selected]:hover td {\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 0 transparent;\n }\n\n .e-table td.e-grid-empty {\n padding: 0;\n }\n\n .e-grid-foot {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--e-space-3);\n padding: var(--e-space-3) var(--e-space-4);\n border-top: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-grid-range {\n font: 500 var(--e-text-xs) / 1.2 var(--e-font-mono);\n color: var(--e-muted);\n font-variant-numeric: tabular-nums;\n }\n\n .e-grid-foot .e-pager {\n justify-content: flex-end;\n }\n\n .e-filterrow td {\n padding: var(--e-space-1) var(--e-space-3);\n background: var(--e-surface);\n border-bottom: var(--e-stroke-card) solid var(--e-border-strong);\n border-top: 0;\n position: sticky;\n top: 45px;\n z-index: var(--e-z-raised);\n }\n\n .e-filterrow .e-input {\n height: var(--e-control-height);\n font-size: var(--e-text-md);\n padding-inline: var(--e-space-3);\n }\n\n .e-filterrow .e-sel-trigger {\n height: var(--e-control-height);\n padding-inline-end: var(--e-space-2);\n }\n\n .e-filter-range {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--e-space-1);\n }\n\n .e-gridtable thead th,\n .e-gridtable thead td {\n white-space: nowrap;\n }\n\n .e-resizer {\n position: absolute;\n top: 0;\n inset-inline-end: -12px;\n z-index: var(--e-z-raised);\n width: 24px;\n height: 100%;\n cursor: col-resize;\n touch-action: none;\n }\n\n .e-resizer::before {\n content: \"\";\n position: absolute;\n inset-block: 0;\n inset-inline: -10px;\n }\n\n .e-resizer::after {\n content: \"\";\n position: absolute;\n top: 22%;\n inset-inline-start: 11px;\n width: 1px;\n height: 56%;\n background: var(--e-border-strong);\n transition: width var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-resizer:hover::after,\n .e-resizer:focus-visible::after {\n inset-inline-start: 10px;\n width: 3px;\n background: var(--e-primary);\n border-radius: 2px;\n }\n\n .e-resizer:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n border-radius: var(--e-radius-sm);\n }\n\n .e-gridtable[style*=\"table-layout\"] td,\n .e-gridtable[style*=\"table-layout\"] th {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .e-gridtable .e-sticky {\n position: sticky;\n z-index: var(--e-z-raised);\n box-shadow: inset -1px 0 0 var(--e-border);\n }\n\n .e-gridtable thead th.e-sticky {\n z-index: var(--e-z-sticky);\n background: var(--e-surface-tint);\n }\n\n .e-gridtable tbody td.e-sticky {\n background: var(--e-surface);\n }\n\n .e-gridtable tbody tr:hover td.e-sticky {\n background: var(--e-surface-tint);\n }\n\n .e-gridtable tbody tr[data-selected] td.e-sticky {\n background: var(--e-surface-tint);\n }\n\n .e-gridtable--virtual td {\n height: var(--e-row-h);\n padding-block: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .e-spacer td {\n padding: 0;\n border: 0;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .e-resizer::after {\n transition: none;\n }\n }\n\n @media print {\n .e-grid-scroll {\n overflow: visible;\n max-height: none;\n }\n }\n\n .e-grid--cards {\n container-type: inline-size;\n }\n\n .e-grid-sortsel {\n display: none;\n min-width: 11rem;\n }\n\n .e-grid-bar--sortonly {\n display: none;\n }\n\n @container (max-width: 40rem) {\n .e-grid-sortsel {\n display: block;\n flex: 1 1 11rem;\n }\n\n .e-grid-bar--sortonly {\n display: flex;\n }\n\n .e-grid--cards .e-grid-scroll {\n overflow: visible;\n max-height: none;\n }\n\n .e-grid--cards .e-gridtable,\n .e-grid--cards .e-gridtable tbody {\n display: block;\n min-width: 0;\n width: 100%;\n }\n\n .e-grid--cards .e-gridtable thead {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n /* stylelint-disable-next-line property-no-deprecated -- clip hides text visually */\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n\n .e-grid--cards .e-grid-frame {\n overflow: visible;\n background: transparent;\n }\n\n .e-grid--cards .e-grid-frame::after {\n content: none;\n }\n\n .e-grid--cards .e-gridtable tbody tr {\n display: block;\n margin: 0 0 var(--e-space-3);\n padding: var(--e-space-1) var(--e-space-4);\n border-radius: var(--e-radius-md);\n background: var(--e-surface);\n box-shadow: var(--e-edge);\n }\n\n .e-grid--cards .e-gridtable tbody tr:hover td {\n background: transparent;\n }\n\n .e-grid--cards .e-gridtable tbody tr[data-selected] {\n background: var(--e-surface-tint);\n }\n\n .e-grid--cards .e-gridtable tbody tr[data-selected] td {\n background: transparent;\n }\n\n .e-grid--cards .e-gridtable td {\n display: grid;\n grid-template-columns: minmax(5rem, 38%) minmax(0, 1fr);\n gap: var(--e-space-3);\n align-items: baseline;\n padding: var(--e-space-2) 0;\n border-top: var(--e-stroke-hair) solid var(--e-border);\n overflow: visible;\n white-space: normal;\n text-align: start;\n }\n\n .e-grid--cards .e-gridtable tbody tr:first-child td:not(:first-child) {\n border-top: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-grid--cards .e-gridtable tbody td:first-child {\n border-top: 0;\n }\n\n .e-grid--cards .e-gridtable td::before {\n content: attr(data-label);\n font: 600 var(--e-text-xs) / 1.3 var(--e-font-mono);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--e-muted);\n }\n\n .e-grid--cards .e-gridtable td.e-cell-check {\n display: flex;\n width: auto;\n padding: var(--e-space-2) 0;\n }\n\n .e-grid--cards .e-gridtable td.e-cell-check::before {\n content: none;\n }\n\n .e-grid--cards .e-gridtable .e-sticky {\n position: static;\n box-shadow: none;\n }\n\n .e-grid--cards .e-gridtable .e-num {\n text-align: start;\n }\n\n .e-grid--cards .e-gridtable .e-grid-empty {\n display: block;\n }\n\n .e-grid--cards .e-gridtable .e-grid-empty::before {\n content: none;\n }\n\n .e-grid--cards .e-filterrow {\n display: none;\n }\n\n .e-grid--cards .e-gridtable[style*=\"table-layout\"] td {\n overflow: visible;\n text-overflow: clip;\n }\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"EDataGrid.js","names":["_sfc_main","EDataGrid_vue_vue_type_script_setup_true_lang_default","EDataGrid_default"],"sources":["../../../src/components/DataGrid/EDataGrid.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"Row extends DataGridRow\">\nimport { computed, nextTick, ref, watch, type CSSProperties } from \"vue\";\nimport { PopoverClose, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger } from \"reka-ui\";\nimport {\n columnFilteringFeature,\n columnSizingFeature,\n columnVisibilityFeature,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n functionalUpdate,\n globalFilteringFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n tableFeatures,\n useTable,\n type ColumnDef,\n type FilterFn,\n type SortFn,\n} from \"@tanstack/vue-table\";\nimport { useVirtualizer } from \"@tanstack/vue-virtual\";\nimport EButton from \"../Button/EButton.vue\";\nimport ECheckbox from \"../Checkbox/ECheckbox.vue\";\nimport EEmptyState from \"../EmptyState/EEmptyState.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport EIconButton from \"../IconButton/EIconButton.vue\";\nimport EPagination from \"../Pagination/EPagination.vue\";\nimport ESelect from \"../Select/ESelect.vue\";\nimport ETextField from \"../TextField/ETextField.vue\";\nimport EDataGridResizer from \"./EDataGridResizer.vue\";\nimport \"../Definition/EDefinition.vue\";\nimport { normalizeOptions, type EOption } from \"../Select/options.js\";\nimport type { IconProp } from \"../../icons/types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport { cellValue, compareValues, filterActive, parsePx, passesFilter } from \"./grid.js\";\nimport type {\n DataGridColumn,\n DataGridFilterValue,\n DataGridQuery,\n DataGridRow,\n DataGridSort,\n DataGridVirtual,\n} from \"./types.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\n\nconst props = withDefaults(\n defineProps<{\n /** The columns, in order. See `DataGridColumn` below. */\n columns: DataGridColumn<Row>[];\n /** The rows. Each needs a unique `id`; selection is by id. */\n rows: Row[];\n /** Names the table for screen readers, and its scrolling region. */\n caption: string;\n /** One search box over all shown columns. */\n searchable?: boolean;\n /** The search box's placeholder. @default \"Search all columns\" */\n searchPlaceholder?: string;\n /** A filter row under the headings, for columns that define a `filter`. */\n filterable?: boolean;\n /** Column edges can be dragged, or moved with the arrow keys. */\n resizable?: boolean;\n /** Keeps the first column in view while scrolling sideways. */\n stickyFirst?: boolean;\n /** A Columns menu to show and hide columns. */\n columnToggle?: boolean;\n /** A checkbox on each row and a select-all in the heading. */\n selectable?: boolean;\n /** Rows per page; 0 turns paging off. */\n pageSize?: number;\n /** Stops the table growing past this height (any CSS length) and scrolls inside it, with a sticky header. */\n maxHeight?: string;\n /** Renders only the rows in view, for thousands of rows. Replaces paging. `true` or `{ rowHeight = 48, height = 440, overscan = 8 }`. */\n virtual?: boolean | DataGridVirtual;\n /** Turns rows into cards below 40rem of the grid's own width. On by default; `virtual` and `resizable` grids keep the table. */\n cards?: boolean;\n /** Data lives on a server: show the rows given, in the order given, and report every change through `queryChange`. */\n manual?: boolean;\n /** With `manual`, how many rows there are in all. */\n total?: number;\n /** Shows placeholder rows while data loads, with `aria-busy`. */\n loading?: boolean;\n /** The title when there are no rows. @default \"No results\" */\n emptyTitle?: string;\n /** The sentence under the empty title, when there are no rows. */\n emptyText?: string;\n /** The icon above the empty title. @default \"search\" */\n emptyIcon?: IconProp;\n /** No chrome: a bare table for a short static list, with no toolbar, filters, paging or footer. */\n bare?: boolean;\n }>(),\n { pageSize: 10, cards: true },\n);\n\nconst emit = defineEmits<{\n /** Sort, page, search or filters changed. With `manual`, fetch the rows this describes. */\n queryChange: [query: DataGridQuery];\n}>();\n\nconst slots = defineSlots<{\n [K: `cell-${string}`]: (props: { row: Row; value: unknown }) => unknown;\n [K: `header-${string}`]: (props: { column: DataGridColumn<Row> }) => unknown;\n /** Buttons that act on the selected rows, shown beside the count. */\n \"bulk-actions\"?: () => unknown;\n /** Anything else for the bar above the table. */\n toolbar?: () => unknown;\n}>();\n\n/** The sort: `{ key, dir: \"asc\" | \"desc\" }`, or `null` for none. */\nconst sort = defineModel<DataGridSort | null>(\"sort\", { default: null });\n/** The current page, from 1. */\nconst page = defineModel<number>(\"page\", { default: 1 });\n/** The text in the search box. */\nconst search = defineModel<string>(\"search\", { default: \"\" });\n/** The column filters, by column `key`: text, or `{ min, max }` strings for `number`. */\nconst filters = defineModel<Record<string, DataGridFilterValue>>(\"filters\", { default: () => ({}) });\n/** The selected row ids, kept across pages and filters. */\nconst selected = defineModel<string[]>(\"selected\", { default: () => [] });\n\nconst t = useMessages();\nconst portal = usePortalTarget();\n\nconst uid = useUid();\nconst menuOpen = ref(false);\nconst menuTrigger = ref<{ $el: HTMLElement } | null>(null);\nwatch(\n menuOpen,\n async (open) => {\n if (!open) return;\n await nextTick();\n const panel = document.getElementById(menuTrigger.value?.$el?.getAttribute(\"aria-controls\") ?? \"\");\n panel?.setAttribute(\"aria-labelledby\", `${uid.value}-columns`);\n },\n { flush: \"post\" },\n);\n\nconst ALL = \"__e-all__\";\nconst NONE = \"__e-none__\";\n\nconst features = tableFeatures({\n rowSortingFeature,\n sortedRowModel: createSortedRowModel(),\n columnFilteringFeature,\n globalFilteringFeature,\n filteredRowModel: createFilteredRowModel(),\n rowPaginationFeature,\n paginatedRowModel: createPaginatedRowModel(),\n rowSelectionFeature,\n columnVisibilityFeature,\n columnSizingFeature,\n});\n\nconst columnVisibility = ref<Record<string, boolean>>({});\nconst columnSizing = ref<Record<string, number>>({});\n\nconst sortFn: SortFn<typeof features, Row> = (a, b, id) => compareValues(a.getValue(id), b.getValue(id));\ntype GlobalFilter = { q: string; cols: string[] };\nconst globalFilterFn: FilterFn<typeof features, Row> = (row, id, f: GlobalFilter) => {\n if (!f.cols.includes(id)) return false;\n const v = row.getValue(id);\n return v != null && String(v).toLowerCase().includes(f.q);\n};\n\nconst colByKey = computed(() => new Map(props.columns.map((c) => [c.key, c])));\nconst columnDefs = computed<ColumnDef<typeof features, Row>[]>(() =>\n props.columns.map((c) => ({\n id: c.key,\n accessorFn: (row: Row) => cellValue(row, c),\n header: c.label,\n enableSorting: !!c.sortable,\n sortDescFirst: false,\n sortFn,\n enableColumnFilter: !!c.filter,\n filterFn: ((row, id, f) => passesFilter(c, row.getValue(id), f)) as FilterFn<typeof features, Row>,\n enableResizing: c.resizable !== false,\n })),\n);\n\nconst vopt = computed(() =>\n props.virtual ? { rowHeight: 48, height: 440, overscan: 8, ...(props.virtual === true ? {} : props.virtual) } : null,\n);\nconst pageSize = computed(() => (vopt.value || props.bare ? 0 : (props.pageSize ?? 10)));\nconst paging = computed(() => pageSize.value > 0 && !props.manual);\nconst resizable = computed(() => !!props.resizable && !props.bare);\nconst cards = computed(() => props.cards !== false && !vopt.value && !resizable.value);\nconst q = computed(() => search.value.trim().toLowerCase());\nconst anyFilter = computed(() => Object.values(filters.value).some(filterActive));\n\nconst table = useTable({\n features,\n columns: columnDefs,\n data: computed(() => props.rows),\n getRowId: (row: Row) => String(row.id),\n enableMultiSort: false,\n enableSubRowSelection: false,\n autoResetPageIndex: false,\n manualSorting: computed(() => !!props.manual),\n manualFiltering: computed(() => !!props.manual),\n manualPagination: computed(() => !paging.value),\n rowCount: computed(() => (props.manual ? (props.total ?? props.rows.length) : undefined)),\n globalFilterFn,\n state: computed(() => ({\n sorting: sort.value ? [{ id: sort.value.key, desc: sort.value.dir === \"desc\" }] : [],\n columnFilters: Object.entries(filters.value)\n .filter(([key, value]) => colByKey.value.has(key) && filterActive(value))\n .map(([id, value]) => ({ id, value })),\n globalFilter: q.value\n ? ({\n q: q.value,\n cols: props.columns.filter((c) => columnVisibility.value[c.key] !== false).map((c) => c.key),\n } satisfies GlobalFilter)\n : undefined,\n rowSelection: Object.fromEntries(selected.value.map((id) => [id, true])),\n columnVisibility: columnVisibility.value,\n columnSizing: columnSizing.value,\n pagination: { pageIndex: Math.max(0, page.value - 1), pageSize: pageSize.value || 1 },\n })),\n onSortingChange: (updater) => {\n const next = functionalUpdate(updater, sort.value ? [{ id: sort.value.key, desc: sort.value.dir === \"desc\" }] : []);\n const first = next[0];\n sort.value = first ? { key: first.id, dir: first.desc ? \"desc\" : \"asc\" } : null;\n page.value = 1;\n },\n onRowSelectionChange: (updater) => {\n const next = functionalUpdate(updater, Object.fromEntries(selected.value.map((id) => [id, true])));\n selected.value = Object.keys(next).filter((k) => next[k]);\n },\n onColumnVisibilityChange: (updater) => {\n columnVisibility.value = functionalUpdate(updater, columnVisibility.value);\n },\n onColumnSizingChange: (updater) => {\n columnSizing.value = functionalUpdate(updater, columnSizing.value);\n },\n});\n\nconst view = computed(() => table.getRowModel().rows);\nconst total = computed(() =>\n props.manual ? (props.total ?? props.rows.length) : table.getPrePaginatedRowModel().rows.length,\n);\nconst pages = computed(() => (pageSize.value > 0 ? Math.max(1, Math.ceil(total.value / pageSize.value)) : 1));\nconst cur = computed(() => Math.min(page.value, pages.value));\nwatch(pages, (n) => {\n if (page.value > n) page.value = n;\n});\nconst cols = computed(() =>\n table\n .getVisibleLeafColumns()\n .map((c) => colByKey.value.get(c.id))\n .filter((c): c is DataGridColumn<Row> => !!c),\n);\nconst hasFilterRow = computed(() => !!props.filterable && !props.bare && cols.value.some((c) => c.filter));\nconst colCount = computed(() => cols.value.length + (props.selectable ? 1 : 0));\nconst from = computed(() =>\n total.value === 0 ? 0 : (cur.value - 1) * (pageSize.value > 0 ? pageSize.value : total.value) + 1,\n);\nconst to = computed(() => (pageSize.value > 0 ? Math.min(total.value, cur.value * pageSize.value) : total.value));\nconst sortedCol = computed(() => (sort.value ? colByKey.value.get(sort.value.key) : undefined));\nconst nPicked = computed(() => selected.value.length);\nconst allOn = computed(() => view.value.length > 0 && view.value.every((r) => r.getIsSelected()));\nconst someOn = computed(() => view.value.some((r) => r.getIsSelected()));\n\nconst scrollEl = ref<HTMLElement | null>(null);\nconst virtualizer = useVirtualizer(\n computed(() => ({\n count: vopt.value ? view.value.length : 0,\n getScrollElement: () => scrollEl.value,\n estimateSize: () => vopt.value?.rowHeight ?? 48,\n overscan: vopt.value?.overscan ?? 8,\n getItemKey: (i: number) => view.value[i]?.id ?? i,\n initialRect: { width: 0, height: vopt.value?.height ?? 0 },\n })),\n);\nconst items = computed(() => (vopt.value ? virtualizer.value.getVirtualItems() : []));\nconst shown = computed(() => (vopt.value ? items.value.flatMap((i) => (view.value[i.index] ? [i] : [])) : []));\nconst spaceTop = computed(() => items.value[0]?.start ?? 0);\nconst spaceBottom = computed(() => {\n const last = items.value[items.value.length - 1];\n return last ? Math.max(0, virtualizer.value.getTotalSize() - last.end) : 0;\n});\nconst rowsToRender = computed(() =>\n vopt.value\n ? shown.value.map((i) => ({ row: view.value[i.index]!, index: i.index }))\n : view.value.map((row, index) => ({ row, index })),\n);\n\nconst cellProps = (row: (typeof view.value)[number], c: DataGridColumn<Row>) => ({\n row: row.original,\n value: row.getValue(c.key),\n});\n\nconst fixedLayout = computed(() => resizable.value || !!vopt.value || cols.value.some((c) => c.width));\nconst stickyLeft = computed(() => (props.selectable ? 52 : 0));\nconst widthOf = (c: DataGridColumn<Row>) => columnSizing.value[c.key] || parsePx(c.width) || undefined;\nconst minTable = computed(\n () => (props.selectable ? 52 : 0) + cols.value.reduce((s, c) => s + (widthOf(c) || c.minWidth || 96), 0),\n);\nconst stick = (i: number) => !!props.stickyFirst && i === 0;\nconst stickStyle = (i: number): CSSProperties | undefined =>\n stick(i) ? { insetInlineStart: `${stickyLeft.value}px` } : undefined;\nconst tableStyle = computed(\n () =>\n ({\n tableLayout: fixedLayout.value ? \"fixed\" : undefined,\n \"--e-grid-min-w\": fixedLayout.value ? `${minTable.value}px` : undefined,\n \"--e-row-h\": vopt.value ? `${vopt.value.rowHeight}px` : undefined,\n }) as CSSProperties,\n);\nconst scrollStyle = computed(\n () =>\n (vopt.value\n ? { height: `${vopt.value.height}px` }\n : props.maxHeight\n ? { \"--e-grid-max-h\": props.maxHeight }\n : undefined) as CSSProperties | undefined,\n);\nconst role = (r: string) => (cards.value ? r : undefined);\n\nconst sortables = computed(() => props.columns.filter((c) => c.sortable));\nconst sortOptions = computed<EOption[]>(() => [\n { value: NONE, label: t(\"sortBy\") },\n ...sortables.value.flatMap((c) =>\n ([\"asc\", \"desc\"] as const).map((d) => ({\n value: `${c.key}:${d}`,\n label: `${c.label}, ${t(d === \"asc\" ? \"ascending\" : \"descending\")}`,\n })),\n ),\n]);\nconst sortSelectValue = computed(() => (sort.value ? `${sort.value.key}:${sort.value.dir}` : NONE));\nconst showSortSelect = computed(() => cards.value && sortables.value.length > 0);\nconst hasToolbar = computed(() => !!slots.toolbar);\nconst barOther = computed(\n () => !!props.searchable || !!props.columnToggle || nPicked.value > 0 || anyFilter.value || hasToolbar.value,\n);\nconst showBar = computed(() => !props.bare && (barOther.value || showSortSelect.value));\n\nfunction onSearch(e: Event) {\n search.value = (e.target as HTMLInputElement).value;\n page.value = 1;\n}\nfunction setFilter(key: string, value: DataGridFilterValue) {\n filters.value = { ...filters.value, [key]: value };\n page.value = 1;\n}\nfunction clearFilters() {\n filters.value = {};\n search.value = \"\";\n page.value = 1;\n}\nfunction chooseSort(v: string) {\n if (v === NONE) sort.value = null;\n else {\n const at = v.lastIndexOf(\":\");\n sort.value = { key: v.slice(0, at), dir: v.slice(at + 1) === \"desc\" ? \"desc\" : \"asc\" };\n }\n page.value = 1;\n}\nfunction setWidth(key: string, px: number) {\n table.setColumnSizing((old) => ({ ...old, [key]: px }));\n}\nfunction resetWidth(key: string) {\n table.setColumnSizing((old) => {\n const next = { ...old };\n delete next[key];\n return next;\n });\n}\nconst numberFilter = (key: string) => {\n const f = filters.value[key];\n return typeof f === \"object\" ? f : { min: \"\", max: \"\" };\n};\nconst textFilter = (key: string) => {\n const f = filters.value[key];\n return typeof f === \"string\" ? f : \"\";\n};\nconst selectOptions = (c: DataGridColumn<Row>): EOption[] => [\n { value: ALL, label: t(\"all\") },\n ...normalizeOptions(c.filter?.type === \"select\" ? c.filter.options : []),\n];\n\nwatch([sort, page, search, filters], () => {\n emit(\"queryChange\", {\n sort: sort.value,\n page: page.value,\n pageSize: pageSize.value,\n search: search.value,\n filters: filters.value,\n });\n});\n</script>\n\n<template>\n <div class=\"e-grid\" :class=\"{ 'e-grid--bare': bare, 'e-grid--cards': cards }\">\n <div class=\"e-grid-frame\">\n <div v-if=\"showBar\" class=\"e-grid-bar\" :class=\"{ 'e-grid-bar--sortonly': !barOther }\">\n <div v-if=\"searchable\" class=\"e-input-wrap e-grid-search\">\n <span class=\"e-affix e-affix--pre\"><EIcon name=\"search\" /></span>\n <input\n class=\"e-input\"\n type=\"search\"\n :placeholder=\"searchPlaceholder || t('searchAll')\"\n :aria-label=\"t('searchAll')\"\n :value=\"search\"\n @input=\"onSearch\"\n />\n </div>\n <div v-if=\"nPicked\" class=\"e-grid-picked\">\n <span class=\"e-grid-count\">{{ t(\"selected\", { n: nPicked }) }}</span>\n <slot name=\"bulk-actions\" />\n </div>\n <div v-if=\"showSortSelect\" class=\"e-grid-sortsel\">\n <ESelect\n bare\n :aria-label=\"t('sortBy')\"\n :placeholder=\"t('sortBy')\"\n :options=\"sortOptions\"\n :model-value=\"sortSelectValue\"\n @update:model-value=\"chooseSort\"\n />\n </div>\n <div class=\"e-grid-tools\">\n <EButton v-if=\"anyFilter || q\" variant=\"quiet\" @click=\"clearFilters\">{{ t(\"clearFilters\") }}</EButton>\n <PopoverRoot v-if=\"columnToggle\" v-model:open=\"menuOpen\">\n <PopoverTrigger as-child>\n <EButton ref=\"menuTrigger\" variant=\"outline\" :aria-label=\"t('chooseColumns')\">{{ t(\"columns\") }}</EButton>\n </PopoverTrigger>\n <PopoverPortal :to=\"portal\">\n <PopoverContent\n class=\"e-popover e-root\"\n side=\"bottom\"\n align=\"start\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n >\n <header class=\"e-pop-head\">\n <h3 :id=\"`${uid}-columns`\" class=\"e-pop-title\">{{ t(\"showColumns\") }}</h3>\n <PopoverClose as-child>\n <EIconButton icon=\"x\" :label=\"t('close')\" />\n </PopoverClose>\n </header>\n <div class=\"e-pop-body\">\n <ECheckbox\n v-for=\"column in table.getAllLeafColumns()\"\n :key=\"column.id\"\n :label=\"colByKey.get(column.id)?.label ?? column.id\"\n :model-value=\"column.getIsVisible()\"\n @update:model-value=\"column.toggleVisibility($event)\"\n />\n </div>\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n <slot name=\"toolbar\" />\n </div>\n </div>\n <div ref=\"scrollEl\" class=\"e-grid-scroll\" :style=\"scrollStyle\" tabindex=\"0\" role=\"region\" :aria-label=\"caption\">\n <table\n class=\"e-table e-gridtable\"\n :class=\"{ 'e-gridtable--virtual': vopt }\"\n :style=\"tableStyle\"\n :role=\"role('table')\"\n :aria-busy=\"loading ? 'true' : undefined\"\n :aria-rowcount=\"vopt ? total + 1 + (hasFilterRow ? 1 : 0) : undefined\"\n >\n <caption class=\"e-sr\">\n {{\n caption\n }}\n </caption>\n <colgroup v-if=\"fixedLayout\">\n <col v-if=\"selectable\" style=\"width: 52px\" />\n <col v-for=\"c in cols\" :key=\"c.key\" :style=\"widthOf(c) ? { width: `${widthOf(c)}px` } : undefined\" />\n </colgroup>\n <thead :role=\"role('rowgroup')\">\n <tr :role=\"role('row')\">\n <th v-if=\"selectable\" scope=\"col\" class=\"e-cell-check\" :role=\"role('columnheader')\">\n <ECheckbox\n bare\n :label=\"vopt ? t('selectAll') : t('selectAllPage')\"\n :model-value=\"allOn\"\n :indeterminate=\"someOn && !allOn\"\n @update:model-value=\"table.toggleAllPageRowsSelected(!allOn)\"\n />\n </th>\n <th\n v-for=\"(c, i) in cols\"\n :key=\"c.key\"\n scope=\"col\"\n :role=\"role('columnheader')\"\n :class=\"{ 'e-num': c.numeric, 'e-center': c.align === 'center', 'e-sticky': stick(i) }\"\n :style=\"stickStyle(i)\"\n :aria-sort=\"\n c.sortable\n ? sort?.key === c.key\n ? sort.dir === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n : undefined\n \"\n >\n <button\n v-if=\"c.sortable\"\n type=\"button\"\n class=\"e-sortbtn\"\n @click=\"table.getColumn(c.key)?.toggleSorting()\"\n >\n <slot :name=\"`header-${c.key}`\" :column=\"c\">{{ c.label }}</slot>\n <EIcon\n :name=\"sort?.key === c.key ? (sort.dir === 'asc' ? 'arrow-up' : 'arrow-down') : 'sort'\"\n small\n />\n </button>\n <slot v-else :name=\"`header-${c.key}`\" :column=\"c\">{{ c.label }}</slot>\n <EDataGridResizer\n v-if=\"resizable && c.resizable !== false\"\n :label=\"c.label\"\n :width=\"widthOf(c)\"\n :min=\"c.minWidth || 72\"\n @resize=\"setWidth(c.key, $event)\"\n @reset=\"resetWidth(c.key)\"\n />\n </th>\n </tr>\n <tr v-if=\"hasFilterRow\" class=\"e-filterrow\" :role=\"role('row')\">\n <td v-if=\"selectable\" class=\"e-cell-check\" :role=\"role('cell')\" />\n <td\n v-for=\"(c, i) in cols\"\n :key=\"c.key\"\n :role=\"role('cell')\"\n :class=\"{ 'e-sticky': stick(i) }\"\n :style=\"stickStyle(i)\"\n >\n <template v-if=\"c.filter\">\n <ESelect\n v-if=\"c.filter.type === 'select'\"\n bare\n :aria-label=\"t('filterColumn', { col: c.label })\"\n :placeholder=\"t('all')\"\n :options=\"selectOptions(c)\"\n :model-value=\"textFilter(c.key) || ALL\"\n @update:model-value=\"setFilter(c.key, $event === ALL ? '' : $event)\"\n />\n <div v-else-if=\"c.filter.type === 'number'\" class=\"e-filter-range\">\n <ETextField\n hide-label\n inputmode=\"decimal\"\n :label=\"t('minOf', { col: t('filterColumn', { col: c.label }) })\"\n :placeholder=\"t('min')\"\n :model-value=\"numberFilter(c.key).min\"\n @update:model-value=\"setFilter(c.key, { min: $event, max: numberFilter(c.key).max })\"\n />\n <ETextField\n hide-label\n inputmode=\"decimal\"\n :label=\"t('maxOf', { col: t('filterColumn', { col: c.label }) })\"\n :placeholder=\"t('max')\"\n :model-value=\"numberFilter(c.key).max\"\n @update:model-value=\"setFilter(c.key, { min: numberFilter(c.key).min, max: $event })\"\n />\n </div>\n <ETextField\n v-else\n hide-label\n type=\"search\"\n :label=\"t('filterColumn', { col: c.label })\"\n :placeholder=\"t('filter')\"\n :model-value=\"textFilter(c.key)\"\n @update:model-value=\"setFilter(c.key, $event)\"\n />\n </template>\n </td>\n </tr>\n </thead>\n <tbody :role=\"role('rowgroup')\">\n <template v-if=\"loading\">\n <tr v-for=\"n in 5\" :key=\"`s${n}`\" :role=\"role('row')\">\n <td v-if=\"selectable\" class=\"e-cell-check\" :role=\"role('cell')\" />\n <td v-for=\"c in cols\" :key=\"c.key\" :role=\"role('cell')\"><span class=\"e-skel\" /></td>\n </tr>\n </template>\n <tr v-else-if=\"view.length === 0\" :role=\"role('row')\">\n <td :colspan=\"colCount\" class=\"e-grid-empty\" :role=\"role('cell')\">\n <EEmptyState bare :icon=\"emptyIcon || 'search'\" :title=\"emptyTitle || t('noResults')\">\n {{ emptyText || (anyFilter || q ? t(\"noMatchesFilters\") : t(\"nothingYet\")) }}\n <template v-if=\"anyFilter || q\" #action>\n <EButton variant=\"outline\" @click=\"clearFilters\">{{ t(\"clearFilters\") }}</EButton>\n </template>\n </EEmptyState>\n </td>\n </tr>\n <template v-else>\n <tr v-if=\"vopt && spaceTop > 0\" aria-hidden=\"true\" class=\"e-spacer\" :style=\"{ height: `${spaceTop}px` }\">\n <td :colspan=\"colCount\" />\n </tr>\n <tr\n v-for=\"{ row, index } in rowsToRender\"\n :key=\"row.id\"\n :role=\"role('row')\"\n :data-selected=\"row.getIsSelected() ? '' : undefined\"\n :aria-rowindex=\"vopt ? index + 2 + (hasFilterRow ? 1 : 0) : undefined\"\n >\n <td v-if=\"selectable\" class=\"e-cell-check\" :role=\"role('cell')\">\n <ECheckbox\n bare\n :label=\"t('selectRow')\"\n :model-value=\"row.getIsSelected()\"\n @update:model-value=\"row.toggleSelected($event)\"\n />\n </td>\n <td\n v-for=\"(c, i) in cols\"\n :key=\"c.key\"\n :role=\"role('cell')\"\n :data-label=\"c.label\"\n :class=\"{ 'e-num': c.numeric, 'e-center': c.align === 'center', 'e-sticky': stick(i) }\"\n :style=\"stickStyle(i)\"\n >\n <slot :name=\"`cell-${c.key}`\" v-bind=\"cellProps(row, c)\">{{ row.original[c.key] }}</slot>\n </td>\n </tr>\n <tr\n v-if=\"vopt && spaceBottom > 0\"\n aria-hidden=\"true\"\n class=\"e-spacer\"\n :style=\"{ height: `${spaceBottom}px` }\"\n >\n <td :colspan=\"colCount\" />\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n <div v-if=\"!bare\" class=\"e-grid-foot\">\n <span class=\"e-grid-range\">{{\n total === 0\n ? t(\"rows\", { n: 0 })\n : vopt || pageSize === 0\n ? t(\"rows\", { n: total })\n : t(\"showing\", { from, to, total })\n }}</span>\n <EPagination\n v-if=\"pageSize > 0 && pages > 1\"\n :model-value=\"cur\"\n :page-count=\"pages\"\n @update:model-value=\"page = $event\"\n />\n </div>\n <span class=\"e-sr\" role=\"status\" aria-live=\"polite\">{{\n loading\n ? t(\"loading\")\n : (sortedCol\n ? t(\"sortedBy\", { col: sortedCol.label, dir: t(sort?.dir === \"asc\" ? \"ascending\" : \"descending\") }) + \" \"\n : \"\") + t(\"rowsAnnounce\", { n: total })\n }}</span>\n </div>\n </div>\n</template>\n\n<style>\n@layer e.containers {\n .e-table {\n width: 100%;\n border-collapse: collapse;\n font: 400 var(--e-text-md) / 1.4 var(--e-font-sans);\n }\n\n .e-table th {\n padding: var(--e-space-3) var(--e-space-4);\n border-bottom: var(--e-stroke-card) solid var(--e-border-strong);\n background: var(--e-surface-tint);\n text-align: start;\n white-space: nowrap;\n font: 600 var(--e-text-xs) / 1.2 var(--e-font-mono);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--e-muted);\n }\n\n .e-table td {\n padding: var(--e-space-3) var(--e-space-4);\n border-top: var(--e-stroke-hair) solid var(--e-border);\n vertical-align: middle;\n }\n\n .e-table tbody tr:first-child td {\n border-top: 0;\n }\n\n .e-table tbody tr:hover td {\n background: var(--e-surface-hover);\n }\n\n .e-table .e-num {\n text-align: end;\n font-family: var(--e-font-mono);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n\n .e-table th.e-num {\n font-family: var(--e-font-mono);\n }\n\n .e-table .e-center {\n text-align: center;\n }\n\n .e-skel {\n display: block;\n height: 14px;\n border-radius: var(--e-radius-sm);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-hair) var(--e-border);\n outline: var(--e-stroke-hair) solid var(--e-border);\n outline-offset: calc(-1 * var(--e-stroke-hair));\n animation: e-pulse 1.4s ease-in-out infinite;\n }\n\n @keyframes e-pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .e-skel {\n animation: none;\n }\n }\n\n .e-grid {\n --e-grid-head-h: 45px;\n\n isolation: isolate;\n border-radius: var(--e-radius-md);\n min-width: 0;\n }\n\n .e-grid-frame::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: var(--e-z-sticky);\n border-radius: inherit;\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-border-strong);\n outline: var(--e-stroke-card) solid var(--e-border-strong);\n outline-offset: calc(-1 * var(--e-stroke-card));\n pointer-events: none;\n }\n\n .e-grid-frame {\n position: relative;\n overflow: hidden;\n border-radius: inherit;\n background: var(--e-surface);\n }\n\n .e-grid-bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--e-space-3);\n padding: var(--e-space-3) var(--e-space-4);\n border-bottom: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-grid-search {\n flex: 1 1 10rem;\n max-width: 24rem;\n }\n\n .e-grid-search .e-input {\n padding-inline-start: var(--e-space-2);\n }\n\n .e-grid-picked {\n display: flex;\n align-items: center;\n gap: var(--e-space-3);\n }\n\n .e-grid-count {\n font: 600 var(--e-text-xs) / 1 var(--e-font-mono);\n letter-spacing: 0.04em;\n }\n\n .e-grid-tools {\n margin-inline-start: auto;\n display: flex;\n gap: var(--e-space-2);\n }\n\n .e-grid-scroll {\n overflow: auto;\n max-height: var(--e-grid-max-h, none);\n }\n\n .e-grid-scroll:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n }\n\n .e-gridtable {\n border-radius: 0;\n box-shadow: none;\n min-width: var(--e-grid-min-w, 0);\n }\n\n .e-gridtable thead th {\n position: sticky;\n top: 0;\n z-index: var(--e-z-raised);\n height: var(--e-grid-head-h);\n box-sizing: border-box;\n }\n\n .e-gridtable th[aria-sort=\"ascending\"],\n .e-gridtable th[aria-sort=\"descending\"] {\n color: var(--e-ink);\n }\n\n .e-sortbtn {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n min-height: var(--e-control-height);\n padding: var(--e-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n letter-spacing: inherit;\n text-transform: inherit;\n cursor: pointer;\n }\n\n .e-sortbtn:hover {\n color: var(--e-ink);\n }\n\n .e-sortbtn:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n border-radius: var(--e-radius-sm);\n }\n\n .e-gridtable .e-cell-check {\n width: 52px;\n padding-inline-end: 0;\n vertical-align: middle;\n }\n\n .e-gridtable tbody tr[data-selected] td {\n background: var(--e-surface-tint);\n }\n\n .e-gridtable tbody tr[data-selected]:hover td {\n background: var(--e-surface-hover);\n box-shadow: inset 0 0 0 0 transparent;\n }\n\n .e-table td.e-grid-empty {\n padding: 0;\n }\n\n .e-grid-foot {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--e-space-3);\n padding: var(--e-space-3) var(--e-space-4);\n border-top: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-grid-range {\n font: 500 var(--e-text-xs) / 1.2 var(--e-font-mono);\n color: var(--e-muted);\n font-variant-numeric: tabular-nums;\n }\n\n .e-grid-foot .e-pager {\n justify-content: flex-end;\n }\n\n .e-filterrow td {\n padding: var(--e-space-1) var(--e-space-3);\n background: var(--e-surface);\n border-bottom: var(--e-stroke-card) solid var(--e-border-strong);\n border-top: 0;\n position: sticky;\n top: var(--e-grid-head-h);\n z-index: var(--e-z-raised);\n }\n\n .e-filterrow .e-input {\n height: var(--e-control-height);\n font-size: var(--e-text-md);\n padding-inline: var(--e-space-3);\n }\n\n .e-filterrow .e-sel-trigger {\n height: var(--e-control-height);\n padding-inline-end: var(--e-space-2);\n }\n\n .e-filter-range {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--e-space-1);\n }\n\n .e-gridtable thead th,\n .e-gridtable thead td {\n white-space: nowrap;\n }\n\n .e-resizer {\n position: absolute;\n top: 0;\n inset-inline-end: calc(var(--e-space-6) / -2);\n z-index: var(--e-z-raised);\n width: var(--e-space-6);\n height: 100%;\n cursor: col-resize;\n touch-action: none;\n }\n\n .e-resizer::before {\n content: \"\";\n position: absolute;\n inset-block: 0;\n inset-inline: -10px;\n }\n\n .e-resizer::after {\n content: \"\";\n position: absolute;\n top: 22%;\n inset-inline-start: 11px;\n width: var(--e-stroke-hair);\n height: 56%;\n background: var(--e-border-strong);\n transition: width var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-resizer:hover::after,\n .e-resizer:focus-visible::after {\n inset-inline-start: 10px;\n width: 3px;\n background: var(--e-primary);\n border-radius: var(--e-radius-sm);\n }\n\n .e-resizer:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n border-radius: var(--e-radius-sm);\n }\n\n .e-gridtable[style*=\"table-layout\"] td,\n .e-gridtable[style*=\"table-layout\"] th {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .e-gridtable .e-sticky {\n position: sticky;\n z-index: var(--e-z-raised);\n box-shadow: inset calc(-1 * var(--e-stroke-hair)) 0 0 var(--e-border);\n }\n\n .e-gridtable thead th.e-sticky {\n z-index: var(--e-z-sticky);\n background: var(--e-surface-tint);\n }\n\n .e-gridtable tbody td.e-sticky {\n background: var(--e-surface);\n }\n\n .e-gridtable tbody tr:hover td.e-sticky {\n background: var(--e-surface-hover);\n }\n\n .e-gridtable tbody tr[data-selected] td.e-sticky {\n background: var(--e-surface-tint);\n }\n\n .e-gridtable--virtual td {\n height: var(--e-row-h);\n padding-block: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .e-spacer td {\n padding: 0;\n border: 0;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .e-resizer::after {\n transition: none;\n }\n }\n\n @media (forced-colors: active) {\n .e-gridtable tbody tr[data-selected] td {\n forced-color-adjust: none;\n background: Highlight;\n color: HighlightText;\n }\n\n .e-resizer::after {\n background: CanvasText;\n }\n\n .e-resizer:hover::after,\n .e-resizer:focus-visible::after {\n background: Highlight;\n }\n\n .e-skel {\n background: GrayText;\n }\n }\n\n @media print {\n .e-grid-scroll {\n overflow: visible;\n max-height: none;\n }\n }\n\n .e-grid--cards {\n container-type: inline-size;\n }\n\n .e-grid-sortsel {\n display: none;\n min-width: 11rem;\n }\n\n .e-grid-bar--sortonly {\n display: none;\n }\n\n @container (max-width: 40rem) {\n .e-grid-sortsel {\n display: block;\n flex: 1 1 11rem;\n }\n\n .e-grid-bar--sortonly {\n display: flex;\n }\n\n .e-grid--cards .e-grid-scroll {\n overflow: visible;\n max-height: none;\n }\n\n .e-grid--cards .e-gridtable,\n .e-grid--cards .e-gridtable tbody {\n display: block;\n min-width: 0;\n width: 100%;\n }\n\n .e-grid--cards .e-gridtable thead {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n /* stylelint-disable-next-line property-no-deprecated -- clip hides text visually */\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n\n .e-grid--cards .e-grid-frame {\n overflow: visible;\n background: transparent;\n }\n\n .e-grid--cards .e-grid-frame::after {\n content: none;\n }\n\n .e-grid--cards .e-gridtable tbody tr {\n display: block;\n margin: 0 0 var(--e-space-3);\n padding: var(--e-space-1) var(--e-space-4);\n border-radius: var(--e-radius-md);\n background: var(--e-surface);\n box-shadow: var(--e-edge);\n outline: var(--e-stroke-card) solid var(--e-border-strong);\n outline-offset: 0;\n }\n\n .e-grid--cards .e-gridtable tbody tr:hover td {\n background: transparent;\n }\n\n .e-grid--cards .e-gridtable tbody tr[data-selected] {\n background: var(--e-surface-tint);\n }\n\n .e-grid--cards .e-gridtable tbody tr[data-selected] td {\n background: transparent;\n }\n\n .e-grid--cards .e-gridtable td {\n display: grid;\n grid-template-columns: minmax(5rem, 38%) minmax(0, 1fr);\n gap: var(--e-space-3);\n align-items: baseline;\n padding: var(--e-space-2) 0;\n border-top: var(--e-stroke-hair) solid var(--e-border);\n overflow: visible;\n white-space: normal;\n text-align: start;\n }\n\n .e-grid--cards .e-gridtable tbody tr:first-child td:not(:first-child) {\n border-top: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-grid--cards .e-gridtable tbody td:first-child {\n border-top: 0;\n }\n\n .e-grid--cards .e-gridtable td::before {\n content: attr(data-label);\n font: 600 var(--e-text-xs) / 1.3 var(--e-font-mono);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--e-muted);\n }\n\n .e-grid--cards .e-gridtable td.e-cell-check {\n display: flex;\n width: auto;\n padding: var(--e-space-2) 0;\n }\n\n .e-grid--cards .e-gridtable td.e-cell-check::before {\n content: none;\n }\n\n .e-grid--cards .e-gridtable .e-sticky {\n position: static;\n box-shadow: none;\n }\n\n .e-grid--cards .e-gridtable .e-num {\n text-align: start;\n }\n\n .e-grid--cards .e-gridtable .e-grid-empty {\n display: block;\n }\n\n .e-grid--cards .e-gridtable .e-grid-empty::before {\n content: none;\n }\n\n .e-grid--cards .e-filterrow {\n display: none;\n }\n\n .e-grid--cards .e-gridtable[style*=\"table-layout\"] td {\n overflow: visible;\n text-overflow: clip;\n }\n }\n}\n</style>\n"],"mappings":""}
@@ -2,15 +2,15 @@ import { IconProp } from '../../icons/types.js';
2
2
  import { DataGridColumn, DataGridFilterValue, DataGridQuery, DataGridRow, DataGridSort, DataGridVirtual } from './types.js';
3
3
  declare const __VLS_export: <Row extends DataGridRow>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
4
  props: import('vue').PublicProps & __VLS_PrettifyLocal<({
5
- /** The columns, in order. See `DataGridColumn`. */
5
+ /** The columns, in order. See `DataGridColumn` below. */
6
6
  columns: DataGridColumn<Row>[];
7
- /** The rows. Each needs a unique `id`. */
7
+ /** The rows. Each needs a unique `id`; selection is by id. */
8
8
  rows: Row[];
9
- /** Names the table for screen readers and the scrolling region. Required. */
9
+ /** Names the table for screen readers, and its scrolling region. */
10
10
  caption: string;
11
11
  /** One search box over all shown columns. */
12
12
  searchable?: boolean;
13
- /** The search box's placeholder. Default "Search all columns". */
13
+ /** The search box's placeholder. @default "Search all columns" */
14
14
  searchPlaceholder?: string;
15
15
  /** A filter row under the headings, for columns that define a `filter`. */
16
16
  filterable?: boolean;
@@ -22,33 +22,38 @@ declare const __VLS_export: <Row extends DataGridRow>(__VLS_props: NonNullable<A
22
22
  columnToggle?: boolean;
23
23
  /** A checkbox on each row and a select-all in the heading. */
24
24
  selectable?: boolean;
25
- /** Rows per page; 0 turns paging off. Default 10. */
25
+ /** Rows per page; 0 turns paging off. */
26
26
  pageSize?: number;
27
- /** Stops the table growing past this height (any CSS length) and scrolls inside it. */
27
+ /** Stops the table growing past this height (any CSS length) and scrolls inside it, with a sticky header. */
28
28
  maxHeight?: string;
29
- /** Renders only the rows in view, for thousands of rows. Replaces paging. */
29
+ /** Renders only the rows in view, for thousands of rows. Replaces paging. `true` or `{ rowHeight = 48, height = 440, overscan = 8 }`. */
30
30
  virtual?: boolean | DataGridVirtual;
31
- /** Turns rows into cards below 40rem of the grid's own width. Default on; virtual and resizable grids keep the table. */
31
+ /** Turns rows into cards below 40rem of the grid's own width. On by default; `virtual` and `resizable` grids keep the table. */
32
32
  cards?: boolean;
33
- /** Data lives on a server: show the rows given, and report every change through `queryChange`. */
33
+ /** Data lives on a server: show the rows given, in the order given, and report every change through `queryChange`. */
34
34
  manual?: boolean;
35
35
  /** With `manual`, how many rows there are in all. */
36
36
  total?: number;
37
- /** Shows placeholder rows while data loads. */
37
+ /** Shows placeholder rows while data loads, with `aria-busy`. */
38
38
  loading?: boolean;
39
- /** The title when there are no rows. Default "No results". */
39
+ /** The title when there are no rows. @default "No results" */
40
40
  emptyTitle?: string;
41
- /** The sentence under the title when there are no rows. */
41
+ /** The sentence under the empty title, when there are no rows. */
42
42
  emptyText?: string;
43
- /** The glyph above the title when there are no rows. Default "search". */
43
+ /** The icon above the empty title. @default "search" */
44
44
  emptyIcon?: IconProp;
45
- /** A bare table for a short static list: no toolbar, filters, paging or footer. */
46
- plain?: boolean;
45
+ /** No chrome: a bare table for a short static list, with no toolbar, filters, paging or footer. */
46
+ bare?: boolean;
47
47
  } & {
48
+ /** The sort: `{ key, dir: "asc" | "desc" }`, or `null` for none. */
48
49
  sort?: DataGridSort | null;
50
+ /** The current page, from 1. */
49
51
  page?: number;
52
+ /** The text in the search box. */
50
53
  search?: string;
54
+ /** The column filters, by column `key`: text, or `{ min, max }` strings for `number`. */
51
55
  filters?: Record<string, DataGridFilterValue>;
56
+ /** The selected row ids, kept across pages and filters. */
52
57
  selected?: string[];
53
58
  }) & {
54
59
  onQueryChange?: ((query: DataGridQuery) => any) | undefined;