@davincihealthcare/elty-design-system-vue 1.72.0 → 1.72.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/ElAccordion.vue.cjs2.js.map +1 -1
  2. package/dist/ElAccordion.vue.esm2.js.map +1 -1
  3. package/dist/ElActionButton.vue.cjs2.js +1 -1
  4. package/dist/ElActionButton.vue.cjs2.js.map +1 -1
  5. package/dist/ElActionButton.vue.esm2.js +1 -1
  6. package/dist/ElActionButton.vue.esm2.js.map +1 -1
  7. package/dist/ElAvatar.vue.cjs2.js.map +1 -1
  8. package/dist/ElAvatar.vue.esm2.js.map +1 -1
  9. package/dist/ElBadge.vue.cjs2.js.map +1 -1
  10. package/dist/ElBadge.vue.esm2.js.map +1 -1
  11. package/dist/ElBubbleChat.vue.cjs2.js +1 -1
  12. package/dist/ElBubbleChat.vue.cjs2.js.map +1 -1
  13. package/dist/ElBubbleChat.vue.esm2.js +1 -1
  14. package/dist/ElBubbleChat.vue.esm2.js.map +1 -1
  15. package/dist/ElButton.vue.cjs2.js.map +1 -1
  16. package/dist/ElButton.vue.esm2.js.map +1 -1
  17. package/dist/ElCalendarCard.vue.cjs2.js.map +1 -1
  18. package/dist/ElCalendarCard.vue.esm2.js.map +1 -1
  19. package/dist/ElCalendarCell.vue.cjs2.js +1 -1
  20. package/dist/ElCalendarCell.vue.cjs2.js.map +1 -1
  21. package/dist/ElCalendarCell.vue.d.ts +5 -0
  22. package/dist/ElCalendarCell.vue.esm2.js +1 -1
  23. package/dist/ElCalendarCell.vue.esm2.js.map +1 -1
  24. package/dist/ElCarousel.vue.cjs2.js +1 -1
  25. package/dist/ElCarousel.vue.cjs2.js.map +1 -1
  26. package/dist/ElCarousel.vue.esm2.js +1 -1
  27. package/dist/ElCarousel.vue.esm2.js.map +1 -1
  28. package/dist/ElClipToAnchor.vue.cjs2.js +1 -1
  29. package/dist/ElClipToAnchor.vue.cjs2.js.map +1 -1
  30. package/dist/ElClipToAnchor.vue.esm2.js +1 -1
  31. package/dist/ElClipToAnchor.vue.esm2.js.map +1 -1
  32. package/dist/ElContainerTemplate.vue.cjs2.js +1 -1
  33. package/dist/ElContainerTemplate.vue.cjs2.js.map +1 -1
  34. package/dist/ElContainerTemplate.vue.esm2.js +1 -1
  35. package/dist/ElContainerTemplate.vue.esm2.js.map +1 -1
  36. package/dist/ElDivider.vue.cjs2.js.map +1 -1
  37. package/dist/ElDivider.vue.esm2.js.map +1 -1
  38. package/dist/ElDrawer.vue.cjs2.js.map +1 -1
  39. package/dist/ElDrawer.vue.esm2.js.map +1 -1
  40. package/dist/ElDropdown.vue.cjs2.js +1 -1
  41. package/dist/ElDropdown.vue.cjs2.js.map +1 -1
  42. package/dist/ElDropdown.vue.esm2.js +1 -1
  43. package/dist/ElDropdown.vue.esm2.js.map +1 -1
  44. package/dist/ElFile.vue.cjs2.js.map +1 -1
  45. package/dist/ElFile.vue.esm2.js.map +1 -1
  46. package/dist/ElIcon.vue.cjs2.js +1 -1
  47. package/dist/ElIcon.vue.cjs2.js.map +1 -1
  48. package/dist/ElIcon.vue.esm2.js +1 -1
  49. package/dist/ElIcon.vue.esm2.js.map +1 -1
  50. package/dist/ElIconButton.vue.cjs2.js +1 -1
  51. package/dist/ElIconButton.vue.cjs2.js.map +1 -1
  52. package/dist/ElIconButton.vue.d.ts +4 -0
  53. package/dist/ElIconButton.vue.esm2.js +1 -1
  54. package/dist/ElIconButton.vue.esm2.js.map +1 -1
  55. package/dist/ElInlineBanner.vue.cjs2.js.map +1 -1
  56. package/dist/ElInlineBanner.vue.esm2.js.map +1 -1
  57. package/dist/ElInputChat.vue.cjs2.js.map +1 -1
  58. package/dist/ElInputChat.vue.esm2.js.map +1 -1
  59. package/dist/ElListItem.vue.cjs2.js.map +1 -1
  60. package/dist/ElListItem.vue.esm2.js.map +1 -1
  61. package/dist/ElLogo.vue.cjs2.js.map +1 -1
  62. package/dist/ElLogo.vue.esm2.js.map +1 -1
  63. package/dist/ElModal.vue.cjs2.js +1 -1
  64. package/dist/ElModal.vue.cjs2.js.map +1 -1
  65. package/dist/ElModal.vue.esm2.js +1 -1
  66. package/dist/ElModal.vue.esm2.js.map +1 -1
  67. package/dist/ElSortingHeader.vue.cjs2.js.map +1 -1
  68. package/dist/ElSortingHeader.vue.esm2.js.map +1 -1
  69. package/dist/ElSpinner.vue.cjs2.js.map +1 -1
  70. package/dist/ElSpinner.vue.esm2.js.map +1 -1
  71. package/dist/ElTab.vue.cjs2.js.map +1 -1
  72. package/dist/ElTab.vue.esm2.js.map +1 -1
  73. package/dist/ElTabGroup.vue.cjs2.js.map +1 -1
  74. package/dist/ElTabGroup.vue.esm2.js.map +1 -1
  75. package/dist/ElTabs.vue.cjs2.js.map +1 -1
  76. package/dist/ElTabs.vue.esm2.js.map +1 -1
  77. package/dist/ElTag.vue.cjs2.js.map +1 -1
  78. package/dist/ElTag.vue.esm2.js.map +1 -1
  79. package/dist/ElTextCell.vue.cjs2.js.map +1 -1
  80. package/dist/ElTextCell.vue.esm2.js.map +1 -1
  81. package/dist/ElToast.vue.cjs2.js +1 -1
  82. package/dist/ElToast.vue.cjs2.js.map +1 -1
  83. package/dist/ElToast.vue.esm2.js +1 -1
  84. package/dist/ElToast.vue.esm2.js.map +1 -1
  85. package/dist/ElTooltip.vue.cjs2.js.map +1 -1
  86. package/dist/ElTooltip.vue.esm2.js.map +1 -1
  87. package/dist/ElVerticalTab.vue.cjs2.js.map +1 -1
  88. package/dist/ElVerticalTab.vue.esm2.js.map +1 -1
  89. package/dist/_CustomTransition.vue.cjs2.js.map +1 -1
  90. package/dist/_CustomTransition.vue.esm2.js.map +1 -1
  91. package/dist/assets/logo/davinci-dark.svg.cjs.js.map +1 -1
  92. package/dist/assets/logo/davinci-dark.svg.esm.js.map +1 -1
  93. package/dist/assets/logo/davinci-white.svg.cjs.js.map +1 -1
  94. package/dist/assets/logo/davinci-white.svg.esm.js.map +1 -1
  95. package/dist/assets/logo/elty-dark.svg.cjs.js.map +1 -1
  96. package/dist/assets/logo/elty-dark.svg.esm.js.map +1 -1
  97. package/dist/assets/logo/elty-two-tone.svg.cjs.js.map +1 -1
  98. package/dist/assets/logo/elty-two-tone.svg.esm.js.map +1 -1
  99. package/dist/assets/logo/elty-white.svg.cjs.js.map +1 -1
  100. package/dist/assets/logo/elty-white.svg.esm.js.map +1 -1
  101. package/dist/assets/logo/heart-dark.svg.cjs.js.map +1 -1
  102. package/dist/assets/logo/heart-dark.svg.esm.js.map +1 -1
  103. package/dist/assets/logo/heart-two-tone.svg.cjs.js.map +1 -1
  104. package/dist/assets/logo/heart-two-tone.svg.esm.js.map +1 -1
  105. package/dist/assets/logo/heart-white.svg.cjs.js.map +1 -1
  106. package/dist/assets/logo/heart-white.svg.esm.js.map +1 -1
  107. package/dist/composable/mobileComposable.cjs.js +1 -1
  108. package/dist/composable/mobileComposable.cjs.js.map +1 -1
  109. package/dist/composable/mobileComposable.esm.js +1 -1
  110. package/dist/composable/mobileComposable.esm.js.map +1 -1
  111. package/dist/forms/ElInputCheckbox.vue.cjs2.js.map +1 -1
  112. package/dist/forms/ElInputCheckbox.vue.esm2.js.map +1 -1
  113. package/dist/forms/ElInputDate.vue.cjs2.js +1 -1
  114. package/dist/forms/ElInputDate.vue.cjs2.js.map +1 -1
  115. package/dist/forms/ElInputDate.vue.esm2.js +1 -1
  116. package/dist/forms/ElInputDate.vue.esm2.js.map +1 -1
  117. package/dist/forms/ElInputFile.vue.cjs2.js.map +1 -1
  118. package/dist/forms/ElInputFile.vue.esm2.js.map +1 -1
  119. package/dist/forms/ElInputMeasureUnit.vue.cjs2.js.map +1 -1
  120. package/dist/forms/ElInputMeasureUnit.vue.esm2.js.map +1 -1
  121. package/dist/forms/ElInputNumber.vue.cjs2.js.map +1 -1
  122. package/dist/forms/ElInputNumber.vue.esm2.js.map +1 -1
  123. package/dist/forms/ElInputPhone.vue.cjs2.js.map +1 -1
  124. package/dist/forms/ElInputPhone.vue.esm2.js.map +1 -1
  125. package/dist/forms/ElInputRadioButton.vue.cjs2.js.map +1 -1
  126. package/dist/forms/ElInputRadioButton.vue.esm2.js.map +1 -1
  127. package/dist/forms/ElInputRichText/Editor.vue.cjs2.js +1 -1
  128. package/dist/forms/ElInputRichText/Editor.vue.cjs2.js.map +1 -1
  129. package/dist/forms/ElInputRichText/Editor.vue.esm2.js +1 -1
  130. package/dist/forms/ElInputRichText/Editor.vue.esm2.js.map +1 -1
  131. package/dist/forms/ElInputRichText/translations/it.cjs.js +1 -1
  132. package/dist/forms/ElInputRichText/translations/it.cjs.js.map +1 -1
  133. package/dist/forms/ElInputRichText/translations/it.esm.js +1 -1
  134. package/dist/forms/ElInputRichText/translations/it.esm.js.map +1 -1
  135. package/dist/forms/ElInputRichText.vue.cjs2.js +1 -1
  136. package/dist/forms/ElInputRichText.vue.cjs2.js.map +1 -1
  137. package/dist/forms/ElInputRichText.vue.esm2.js +2 -2
  138. package/dist/forms/ElInputRichText.vue.esm2.js.map +1 -1
  139. package/dist/forms/ElInputSearch.vue.cjs2.js +1 -1
  140. package/dist/forms/ElInputSearch.vue.cjs2.js.map +1 -1
  141. package/dist/forms/ElInputSearch.vue.esm2.js +1 -1
  142. package/dist/forms/ElInputSearch.vue.esm2.js.map +1 -1
  143. package/dist/forms/ElInputSelect.vue.cjs2.js +1 -1
  144. package/dist/forms/ElInputSelect.vue.cjs2.js.map +1 -1
  145. package/dist/forms/ElInputSelect.vue.esm2.js +1 -1
  146. package/dist/forms/ElInputSelect.vue.esm2.js.map +1 -1
  147. package/dist/forms/ElInputSwitch.vue.cjs2.js.map +1 -1
  148. package/dist/forms/ElInputSwitch.vue.esm2.js.map +1 -1
  149. package/dist/forms/ElInputText.vue.cjs2.js +1 -1
  150. package/dist/forms/ElInputText.vue.cjs2.js.map +1 -1
  151. package/dist/forms/ElInputText.vue.esm2.js +1 -1
  152. package/dist/forms/ElInputText.vue.esm2.js.map +1 -1
  153. package/dist/forms/ElInputTextarea.vue.cjs2.js.map +1 -1
  154. package/dist/forms/ElInputTextarea.vue.esm2.js.map +1 -1
  155. package/dist/forms/input.cjs.js.map +1 -1
  156. package/dist/forms/input.esm.js.map +1 -1
  157. package/dist/forms/unicodeCharsRule.cjs.js +1 -1
  158. package/dist/forms/unicodeCharsRule.cjs.js.map +1 -1
  159. package/dist/forms/unicodeCharsRule.esm.js +1 -1
  160. package/dist/forms/unicodeCharsRule.esm.js.map +1 -1
  161. package/dist/forms/utils.cjs.js +1 -1
  162. package/dist/forms/utils.cjs.js.map +1 -1
  163. package/dist/forms/utils.esm.js +1 -1
  164. package/dist/forms/utils.esm.js.map +1 -1
  165. package/dist/forms/validation-rules.cjs.js +1 -1
  166. package/dist/forms/validation-rules.cjs.js.map +1 -1
  167. package/dist/forms/validation-rules.esm.js +1 -1
  168. package/dist/forms/validation-rules.esm.js.map +1 -1
  169. package/dist/index.cjs.js +1 -1
  170. package/dist/index.esm.js +1 -1
  171. package/dist/polyfills.cjs.js.map +1 -1
  172. package/dist/polyfills.esm.js.map +1 -1
  173. package/dist/preset.cjs.js +1 -1
  174. package/dist/preset.esm.js +1 -1
  175. package/dist/table/ElMobileTable.vue.cjs2.js.map +1 -1
  176. package/dist/table/ElMobileTable.vue.esm2.js.map +1 -1
  177. package/dist/table/ElResponsiveTable.vue.cjs2.js.map +1 -1
  178. package/dist/table/ElResponsiveTable.vue.esm2.js.map +1 -1
  179. package/dist/table/ElServerSideMobileTable.vue.cjs2.js.map +1 -1
  180. package/dist/table/ElServerSideMobileTable.vue.esm2.js.map +1 -1
  181. package/dist/table/ElServerSideResponsiveTable.vue.cjs2.js.map +1 -1
  182. package/dist/table/ElServerSideResponsiveTable.vue.d.ts +2 -0
  183. package/dist/table/ElServerSideResponsiveTable.vue.esm2.js.map +1 -1
  184. package/dist/table/ElServerSideTable.vue.cjs2.js +1 -1
  185. package/dist/table/ElServerSideTable.vue.cjs2.js.map +1 -1
  186. package/dist/table/ElServerSideTable.vue.esm2.js +1 -1
  187. package/dist/table/ElServerSideTable.vue.esm2.js.map +1 -1
  188. package/dist/table/ElServerSideTablePagination.vue.cjs2.js.map +1 -1
  189. package/dist/table/ElServerSideTablePagination.vue.esm2.js.map +1 -1
  190. package/dist/table/ElTable.vue.cjs2.js.map +1 -1
  191. package/dist/table/ElTable.vue.esm2.js.map +1 -1
  192. package/dist/table/ElTableCell.vue.cjs2.js.map +1 -1
  193. package/dist/table/ElTableCell.vue.esm2.js.map +1 -1
  194. package/dist/table/ElTablePagination.vue.cjs2.js.map +1 -1
  195. package/dist/table/ElTablePagination.vue.esm2.js.map +1 -1
  196. package/dist/tailwind.plugin.cjs.js +1 -1
  197. package/dist/tailwind.plugin.cjs.js.map +1 -1
  198. package/dist/tailwind.plugin.esm.js +1 -1
  199. package/dist/tailwind.plugin.esm.js.map +1 -1
  200. package/dist/types.cjs.js.map +1 -1
  201. package/dist/types.esm.js.map +1 -1
  202. package/dist/utils.cjs.js.map +1 -1
  203. package/dist/utils.esm.js.map +1 -1
  204. package/dist/vue.plugin.cjs.js.map +1 -1
  205. package/dist/vue.plugin.esm.js.map +1 -1
  206. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ElMobileTable.vue.cjs2.js","sources":["../../../src/table/ElMobileTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ElListItem, { ElListItemProps } from '@/ElListItem.vue';\nimport ElInputText from '@/forms/ElInputText.vue';\nimport ElIconButton from '@/ElIconButton.vue';\nimport ElButton, { ElButtonProps } from '@/ElButton.vue';\nimport { computed, ref, watch } from 'vue';\nimport ElTag, { ElTagColor } from '@/ElTag.vue';\nimport ElModal from '@/ElModal.vue';\nimport ElInputSelect from '@/forms/ElInputSelect.vue';\nimport ElInputDate from '@/forms/ElInputDate.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport CustomTransition from '@/_CustomTransition.vue';\nimport ElSpinner from '@/ElSpinner.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport { OptionType } from '@/types';\n\nexport type SelectOptions = OptionType[];\n\nexport type MobileTableFiltersStatus = {\n freeSearch?: string;\n fromDate?: number;\n multiSelect: {\n mainText?: string;\n secondaryRow?: string;\n tertiaryRow?: string;\n tags?: string;\n time?: string;\n amount?: string;\n avatar?: string;\n };\n};\n\nexport type MobileTableFilter = {\n freeSearch?: {\n placeholder?: string;\n filterOn: ('mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar')[];\n initialValue?: string;\n };\n multiValue?: {\n mainText?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n secondaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tertiaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n amount?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tags?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n time?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n avatar?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n };\n dateRange?: {\n enabled: boolean;\n label: string;\n initialValue?: number;\n placeholder?: string;\n };\n resetButton?: boolean;\n // if true filters won't be applied by the table (used for server side table)\n managed?: boolean;\n};\n\nexport type MobileTableRow = Omit<ElListItemProps, 'color'> & {\n id: string;\n rowNotSelectable?: boolean;\n relatedObject?: any;\n clickAction?: (payload: PointerEvent) => void;\n actions?: {\n primary: InstanceType<typeof ElButton>['$props'];\n secondary?: InstanceType<typeof ElButton>['$props'];\n };\n sortableAndFilterableValue?: string;\n details: {\n label: string;\n value:\n | { type?: 'default'; text: string }\n | { type: 'tag'; text: string; color?: ElTagColor }\n | { type: 'avatar'; label?: string; picture?: string };\n }[];\n};\n\nexport interface ElMobileTableProps {\n color: 'primary' | 'secondary';\n filters: MobileTableFilter;\n loading?: boolean;\n preventDefaultItemClick?: boolean;\n selection?: {\n enabled: boolean;\n selectionMode?: 'single' | 'multiple'; // defaults to multiple\n destructiveAction?: {\n enabled: boolean;\n button: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label?: (count: number) => string };\n };\n bulkActionButton: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label: (count: number) => string };\n selectedLabel?: (selectionCount: number) => string;\n cancelText?: (selectionCount: number) => string;\n };\n sortBy?: {\n on: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar';\n order: 'asc' | 'desc';\n };\n itemsCountLabel?: (count: number) => string;\n noItemsCountLabel?: boolean;\n data: MobileTableRow[];\n}\n\nconst props = defineProps<ElMobileTableProps>();\n\nconst search = ref<string>('');\nconst selectedItems = ref<number[]>([]);\nconst selectedItemToShow = ref<MobileTableRow | null>(null);\nconst filterModalOpen = ref(false);\nconst filterDateFrom = ref<number>(0);\nconst managedSearchDebounceTimeout = ref<NodeJS.Timeout | undefined>(undefined);\n\nwatch(search, (newValue, oldValue) => {\n if (managedSearchDebounceTimeout.value) {\n clearTimeout(managedSearchDebounceTimeout.value);\n }\n managedSearchDebounceTimeout.value = setTimeout(() => {\n if (oldValue !== newValue) {\n emitFiltersUpdated();\n }\n }, 500);\n});\n\nconst filtersAreApplied = computed(() => {\n return (\n search.value.trim().length > 0 ||\n Object.values(multiValueFiltersValues.value).some(filter => filter && filter.trim().length > 0) ||\n filterDateFrom.value !== 0\n );\n});\n\nconst getSelectedRows = () => selectedItems.value.map(index => props.data[index]);\n\nconst matchesSearch = (value: string): boolean => {\n const searchText = search.value?.trim();\n if (!searchText) return true;\n return value.split(' ').some(part => part.toLowerCase().includes(searchText.toLowerCase()));\n};\n\nconst multiValueFiltersValues = ref<MobileTableFiltersStatus['multiSelect']>({\n avatar: props.filters.multiValue?.avatar?.initialValue ?? '',\n mainText: props.filters.multiValue?.mainText?.initialValue ?? '',\n secondaryRow: props.filters.multiValue?.secondaryRow?.initialValue ?? '',\n tertiaryRow: props.filters.multiValue?.tertiaryRow?.initialValue ?? '',\n amount: props.filters.multiValue?.amount?.initialValue ?? '',\n tags: props.filters.multiValue?.tags?.initialValue ?? '',\n time: props.filters.multiValue?.time?.initialValue ?? '',\n});\n\nconst multiValueFiltersModalValues = ref<MobileTableFiltersStatus['multiSelect']>({\n ...multiValueFiltersValues.value,\n});\n\nconst makeArrUnique = (arr: string[]): string[] => Array.from(new Set(arr));\nconst isDefined = <T,>(value: T | undefined): value is T => value !== undefined;\n\nconst multiValueAvailabeOptions = computed<{\n mainText: SelectOptions;\n secondaryRow: SelectOptions;\n tertiaryRow: SelectOptions;\n amount: SelectOptions;\n tags: SelectOptions;\n time: SelectOptions;\n avatar: SelectOptions;\n}>(() => {\n return {\n mainText: props.filters.multiValue?.mainText\n ? props.filters.multiValue.mainText.selectOptions ??\n makeArrUnique(props.data.map(item => item.mainText.label)).map(value => ({ value, label: value }))\n : [],\n secondaryRow: props.filters.multiValue?.secondaryRow\n ? props.filters.multiValue.secondaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.secondaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tertiaryRow: props.filters.multiValue?.tertiaryRow\n ? props.filters.multiValue.tertiaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.tertiaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n amount: props.filters.multiValue?.amount\n ? props.filters.multiValue.amount.selectOptions ??\n makeArrUnique(props.data.map(item => item.amount).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tags: props.filters.multiValue?.tags\n ? props.filters.multiValue.tags.selectOptions ??\n makeArrUnique(props.data.flatMap(item => (item.tags ?? []).map(tag => tag.text).filter(isDefined))).map(value => ({\n value,\n label: value,\n }))\n : [],\n time: props.filters.multiValue?.time\n ? props.filters.multiValue.time.selectOptions ??\n makeArrUnique(props.data.map(item => item.time).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n avatar: props.filters.multiValue?.avatar\n ? props.filters.multiValue.avatar.selectOptions ??\n makeArrUnique(props.data.map(item => item.avatar?.label).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n };\n});\n\nconst filteredData = computed(() => {\n let data = props.data.slice();\n if (props.filters.managed) return data;\n if (props.filters.freeSearch && search.value.trim().length > 0) {\n const searchParams = props.filters.freeSearch;\n data = data.filter(item =>\n searchParams.filterOn.some(filter => {\n switch (filter) {\n case 'avatar':\n return item.avatar && item.avatar.label && matchesSearch(item.avatar.label);\n case 'time':\n return item.time && matchesSearch(item.time);\n case 'mainText':\n return item.mainText && matchesSearch(item.mainText.label);\n case 'secondaryRow':\n return item.secondaryRow && matchesSearch(item.secondaryRow);\n case 'tertiaryRow':\n return item.tertiaryRow && matchesSearch(item.tertiaryRow);\n case 'amount':\n return item.amount && matchesSearch(item.amount);\n case 'tags':\n return item.tags && item.tags.some(tag => matchesSearch(tag.text));\n }\n }),\n );\n }\n\n if (props.filters.multiValue) {\n if (props.filters.multiValue.mainText) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.mainText ||\n multiValueFiltersValues.value.mainText.length === 0 ||\n multiValueFiltersValues.value.mainText.includes(item.sortableAndFilterableValue ?? item.mainText.label),\n );\n }\n if (props.filters.multiValue.secondaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.secondaryRow ||\n multiValueFiltersValues.value.secondaryRow.length === 0 ||\n multiValueFiltersValues.value.secondaryRow.includes(item.sortableAndFilterableValue ?? item.secondaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.tertiaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tertiaryRow ||\n multiValueFiltersValues.value.tertiaryRow.length === 0 ||\n multiValueFiltersValues.value.tertiaryRow.includes(item.sortableAndFilterableValue ?? item.tertiaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.amount) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.amount ||\n multiValueFiltersValues.value.amount.length === 0 ||\n multiValueFiltersValues.value.amount.includes(item.sortableAndFilterableValue ?? item.amount ?? ''),\n );\n }\n if (props.filters.multiValue.tags) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tags ||\n multiValueFiltersValues.value.tags.length === 0 ||\n item.tags?.some(tag => multiValueFiltersValues.value.tags!.includes(tag.text)),\n );\n }\n if (props.filters.multiValue.avatar) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.avatar ||\n multiValueFiltersValues.value.avatar.length === 0 ||\n multiValueFiltersValues.value.avatar.includes(item.sortableAndFilterableValue ?? item.avatar?.label ?? ''),\n );\n }\n }\n\n if (props.filters.dateRange?.enabled) {\n data = data.filter(item => {\n if (!filterDateFrom.value) return true;\n return item.time && new Date(item.time).getTime() >= filterDateFrom.value;\n });\n }\n\n if (props.sortBy) {\n data = data.sort((a, b) => {\n let result = 0;\n if (a.sortableAndFilterableValue && b.sortableAndFilterableValue) {\n result = a.sortableAndFilterableValue.localeCompare(b.sortableAndFilterableValue);\n } else {\n switch (props.sortBy!.on) {\n case 'mainText':\n result = a.mainText.label.localeCompare(b.mainText.label);\n break;\n case 'avatar':\n result = (a.avatar?.label ?? '').localeCompare(b.avatar?.label ?? '');\n break;\n case 'time':\n case 'secondaryRow':\n case 'tertiaryRow':\n result = (a[props.sortBy!.on] ?? '').localeCompare(b[props.sortBy!.on] ?? '');\n break;\n case 'amount':\n const numA = parseFloat(a.amount ?? '0');\n const numB = parseFloat(b.amount ?? '0');\n result = numA - numB;\n break;\n case 'tags':\n result = (a.tags?.map(tag => tag.text).join('') ?? '').localeCompare(b.tags?.map(tag => tag.text).join('') ?? '');\n break;\n }\n }\n if (props.sortBy?.order === 'desc') {\n result *= -1;\n }\n return result;\n });\n }\n\n return data;\n});\n\nconst enabledSelectFilters = computed(() => {\n return Object.fromEntries(Object.entries(props.filters.multiValue ?? {}).filter(([_, filter]) => filter.enabled));\n});\n\nconst showFiltersButton = computed(() => {\n return props.filters.dateRange?.enabled || Object.values(props.filters.multiValue ?? {}).some(filter => filter.enabled);\n});\n\nconst hasFiltersApplied = computed(() => {\n return Object.values(multiValueFiltersValues.value).some(filter => filter.length > 0) || filterDateFrom.value !== 0;\n});\n\nconst selectRows = (rowsIds: string[]) => {\n const indexes = rowsIds.map(id => getItemIndex({ id: id }));\n if (props.selection?.selectionMode === 'single' && indexes.length > 0) {\n selectedItems.value = [indexes.at(0)!];\n }\n selectedItems.value.push(...indexes);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n};\n\nconst selectRow = (rowIndex: number) => {\n if (props.selection?.selectionMode === 'single') {\n selectedItems.value = [rowIndex];\n } else {\n selectedItems.value.push(rowIndex);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n }\n emit('rows-selected', getSelectedRows());\n};\n\nconst deselectRow = (rowIndex: number) => {\n selectedItems.value = selectedItems.value.filter(index => index !== rowIndex);\n};\n\nconst getItemIndex = (item: { id: string }) => {\n const idx = props.data.findIndex(i => i.id === item.id);\n if (idx === -1) throw new Error(`Item with id ${item.id} not found`);\n return idx;\n};\n\nconst unselectAllRows = () => {\n selectedItems.value = [];\n};\n\nconst getDataRows = () => props.data;\n\nconst openFiltersModal = () => {\n filterModalOpen.value = true;\n};\n\nconst showItemDetails = (item: MobileTableRow) => {\n selectedItemToShow.value = item;\n};\n\nconst closeItemDetails = () => {\n selectedItemToShow.value = null;\n};\n\nconst detailsPrimaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'>>(() => {\n if (selectedItemToShow.value?.actions) {\n return selectedItemToShow.value.actions.primary;\n } else {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n }\n});\nconst detailsSecondaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return selectedItemToShow.value.actions.secondary;\n } else if (selectedItemToShow.value?.actions?.primary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\nconst detailsTertiaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\n\nconst applyFilters = () => {\n filterModalOpen.value = false;\n multiValueFiltersValues.value = { ...multiValueFiltersModalValues.value };\n emitFiltersUpdated();\n};\n\nconst resetFilters = () => {\n multiValueFiltersValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n filterDateFrom.value = 0;\n multiValueFiltersModalValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n emitFiltersUpdated();\n};\n\nconst emitFiltersUpdated = () => {\n if (props.filters.managed) {\n emit('filters-updated', {\n freeSearch: props.filters.freeSearch ? search.value : undefined,\n fromDate: props.filters.dateRange ? filterDateFrom.value : undefined,\n multiSelect: multiValueFiltersValues.value,\n });\n }\n};\n\nconst emit = defineEmits<{\n (event: 'destructive:click', selectedItems: MobileTableRow[]): void;\n (event: 'bulk:click', selectedItems: MobileTableRow[]): void;\n (event: 'item:click', item: MobileTableRow): void;\n (event: 'selection:exit'): void;\n (event: 'rows-selected', selectedItems: MobileTableRow[]): void;\n (event: 'filters-updated', filters: MobileTableFiltersStatus): void;\n}>();\n\ndefineExpose({\n filteredData,\n selectRows,\n unselectAllRows,\n getDataRows,\n getSelectedRows,\n closeItemDetails,\n});\n</script>\n\n<template>\n <div class=\"bg-neutral-surface flex flex-col px-4 pt-2 h-full min-w-80 overflow-auto\">\n <div v-if=\"!props.selection?.enabled\" class=\"flex flex-row gap-4 pb-2\">\n <div class=\"flex-grow\">\n <ElInputText\n v-if=\"props.filters.freeSearch\"\n v-model=\"search\"\n :placeholder=\"props.filters.freeSearch.placeholder ?? 'Cerca'\"\n :leading-icon=\"{ name: 'MagnifyingGlassIcon' }\"\n />\n </div>\n <ElIconButton\n v-if=\"showFiltersButton\"\n :badge=\"hasFiltersApplied\"\n :badge-color=\"props.color\"\n :icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n :class=\"\n props.color === 'primary'\n ? 'text-primary hover:text-primary-hover hover:bg-primary-light-hover active:bg-primary-light-active'\n : 'text-secondary hover:text-secondary-hover hover:bg-secondary-light-hover active:bg-secondary-light-active'\n \"\n @click=\"openFiltersModal\"\n />\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"py-3 px-4 border-b border-b-neutral-surface grid grid-cols-3\">\n <div class=\"flex flex-row justify-start items-center\">\n <ElButton\n error\n variant=\"tertiary\"\n type=\"button\"\n :label=\"`Elimina (${selectedItems.length})`\"\n @click=\"$emit('destructive:click', getSelectedRows())\"\n />\n </div>\n <div class=\"flex flex-row justify-center items-center\">\n <span class=\"text-neutral-darker font-normal text-sm\">\n <template v-if=\"props.selection.selectedLabel\">\n {{ props.selection.selectedLabel(selectedItems.length) }}\n </template>\n <template v-else-if=\"props.selection.selectionMode !== 'single'\">{{ selectedItems.length }} Selezionati</template>\n </span>\n </div>\n </div>\n <slot />\n\n <CustomTransition name=\"fade\">\n <div class=\"relative\">\n <ElSpinner\n v-if=\"props.loading\"\n label=\"Caricamento dati...\"\n class=\"p-4 absolute bg-neutral-surface w-full\"\n :extra-loading-msg-after-seconds=\"3\"\n />\n </div>\n </CustomTransition>\n\n <div v-if=\"filtersAreApplied && noItemsCountLabel !== true && filteredData.length !== 0\" class=\"pt-3 px-4\">\n <span class=\"font-semibold text-neutral-darker\">{{\n props.itemsCountLabel ? props.itemsCountLabel(filteredData.length) : `${filteredData.length} risultati per la tua ricerca`\n }}</span>\n </div>\n\n <ul v-if=\"filteredData.length > 0\" class=\"m-0 flex flex-col flex-grow overflow-y-auto h-full\">\n <ElListItem\n v-for=\"item in filteredData\"\n v-bind=\"item\"\n :key=\"item.id\"\n :color=\"props.color\"\n :model-value=\"props.selection?.enabled ? selectedItems.includes(getItemIndex(item)) : undefined\"\n @update:model-value=\"v => (v ? selectRow(getItemIndex(item)) : deselectRow(getItemIndex(item)))\"\n @click=\"\n () => {\n $emit('item:click', item);\n if (!props.selection?.enabled && !props.preventDefaultItemClick) {\n showItemDetails(item);\n }\n }\n \"\n />\n <slot name=\"after-list\" />\n </ul>\n\n <div v-else-if=\"!props.loading && filteredData.length === 0\" class=\"flex flex-grow flex-col justify-start items-center pt-8 px-8 gap-3\">\n <ElIcon\n name=\"MagnifyingGlassIcon\"\n class=\"h-8 w-8\"\n :class=\"props.color === 'primary' ? 'text-primary-active' : 'text-secondary-active'\"\n />\n <div class=\"flex flex-col gap-1 text-center\">\n <span class=\"text-lg font-semibold text-neutral-darker\">Nessun risultato</span>\n <p class=\"text-neutral-lighter text-sm\">Non abbiamo trovato risultati per questa ricerca. Prova con altre parole chiave.</p>\n </div>\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"border-t border-t-neutral-surface flex flex-row justify-between py-5 px-4\">\n <ElButton size=\"l\" variant=\"tertiary\" label=\"Annulla\" @click=\"$emit('selection:exit')\" />\n <ElButton\n v-if=\"props.selection?.bulkActionButton\"\n :variant=\"props.color\"\n :label=\"props.selection.bulkActionButton.label(selectedItems.length)\"\n :disabled=\"selectedItems.length === 0\"\n size=\"l\"\n @click=\"\n $emit(\n 'bulk:click',\n selectedItems.map(index => props.data[index]),\n )\n \"\n />\n </div>\n </div>\n\n <ElModal\n size=\"xs\"\n :is-open=\"selectedItemToShow !== null\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Dettaglio\"\n :color=\"props.color\"\n :primary-action=\"detailsPrimaryAction\"\n :secondary-action=\"detailsSecondaryAction\"\n :tertiary-action=\"detailsTertiaryAction\"\n @closed=\"closeItemDetails\"\n >\n <ul v-if=\"selectedItemToShow\" class=\"m-0 flex flex-col gap-5\">\n <li v-for=\"(item, i) in selectedItemToShow.details\" :key=\"i\" class=\"flex flex-col gap-1\">\n <span class=\"text-neutral-lighter\">{{ item.label }}</span>\n <span v-if=\"item.value.type === 'default'\">{{ item.value.text }}</span>\n <div v-else-if=\"item.value.type === 'tag'\">\n <ElTag :text=\"item.value.text\" :color=\"item.value.color\" />\n </div>\n <div v-else-if=\"item.value.type === 'avatar'\">\n <ElAvatar :label=\"item.value.label\" :picture=\"item.value.picture\" size=\"sm\" />\n </div>\n </li>\n </ul>\n </ElModal>\n\n <ElModal\n v-model:is-open=\"filterModalOpen\"\n size=\"xs\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Filtri\"\n :color=\"props.color\"\n :primary-action=\"{\n label: 'Applica filtri',\n onClick: applyFilters,\n }\"\n :secondary-action=\"props.filters.resetButton ? { label: 'Reset', onClick: resetFilters } : undefined\"\n :tertiary-action=\"{\n label: 'Chiudi',\n onClick: () => {\n filterModalOpen = false;\n },\n }\"\n >\n <div class=\"flex flex-col gap-6\">\n <ElInputSelect\n v-for=\"(filter, key) in enabledSelectFilters\"\n :key=\"key\"\n v-model=\"multiValueFiltersModalValues[key as keyof typeof multiValueFiltersModalValues]\"\n :options=\"multiValueAvailabeOptions[key as keyof typeof multiValueAvailabeOptions]\"\n :label=\"filter.label\"\n />\n <ElInputDate\n v-if=\"props.filters.dateRange?.enabled\"\n v-model=\"filterDateFrom\"\n :label=\"props.filters.dateRange.label\"\n :placeholder=\"props.filters.dateRange.placeholder\"\n hidden-error-message\n />\n </div>\n </ElModal>\n</template>\n"],"names":["props","__props","search","ref","selectedItems","selectedItemToShow","filterModalOpen","filterDateFrom","managedSearchDebounceTimeout","watch","newValue","oldValue","emitFiltersUpdated","filtersAreApplied","computed","multiValueFiltersValues","filter","getSelectedRows","index","matchesSearch","value","searchText","_a","part","_b","_d","_c","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","multiValueFiltersModalValues","makeArrUnique","arr","isDefined","multiValueAvailabeOptions","item","tag","filteredData","data","searchParams","a","b","result","numA","numB","enabledSelectFilters","_","showFiltersButton","hasFiltersApplied","selectRows","rowsIds","indexes","id","getItemIndex","selectRow","rowIndex","emit","deselectRow","idx","i","unselectAllRows","getDataRows","openFiltersModal","showItemDetails","closeItemDetails","detailsPrimaryAction","detailsSecondaryAction","detailsTertiaryAction","applyFilters","resetFilters","__emit","__expose"],"mappings":"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"}
1
+ {"version":3,"file":"ElMobileTable.vue.cjs2.js","sources":["../../src/table/ElMobileTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ElListItem, { ElListItemProps } from '@/ElListItem.vue';\nimport ElInputText from '@/forms/ElInputText.vue';\nimport ElIconButton from '@/ElIconButton.vue';\nimport ElButton, { ElButtonProps } from '@/ElButton.vue';\nimport { computed, ref, watch } from 'vue';\nimport ElTag, { ElTagColor } from '@/ElTag.vue';\nimport ElModal from '@/ElModal.vue';\nimport ElInputSelect from '@/forms/ElInputSelect.vue';\nimport ElInputDate from '@/forms/ElInputDate.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport CustomTransition from '@/_CustomTransition.vue';\nimport ElSpinner from '@/ElSpinner.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport { OptionType } from '@/types';\n\nexport type SelectOptions = OptionType[];\n\nexport type MobileTableFiltersStatus = {\n freeSearch?: string;\n fromDate?: number;\n multiSelect: {\n mainText?: string;\n secondaryRow?: string;\n tertiaryRow?: string;\n tags?: string;\n time?: string;\n amount?: string;\n avatar?: string;\n };\n};\n\nexport type MobileTableFilter = {\n freeSearch?: {\n placeholder?: string;\n filterOn: ('mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar')[];\n initialValue?: string;\n };\n multiValue?: {\n mainText?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n secondaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tertiaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n amount?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tags?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n time?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n avatar?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n };\n dateRange?: {\n enabled: boolean;\n label: string;\n initialValue?: number;\n placeholder?: string;\n };\n resetButton?: boolean;\n // if true filters won't be applied by the table (used for server side table)\n managed?: boolean;\n};\n\nexport type MobileTableRow = Omit<ElListItemProps, 'color'> & {\n id: string;\n rowNotSelectable?: boolean;\n relatedObject?: any;\n clickAction?: (payload: PointerEvent) => void;\n actions?: {\n primary: InstanceType<typeof ElButton>['$props'];\n secondary?: InstanceType<typeof ElButton>['$props'];\n };\n sortableAndFilterableValue?: string;\n details: {\n label: string;\n value:\n | { type?: 'default'; text: string }\n | { type: 'tag'; text: string; color?: ElTagColor }\n | { type: 'avatar'; label?: string; picture?: string };\n }[];\n};\n\nexport interface ElMobileTableProps {\n color: 'primary' | 'secondary';\n filters: MobileTableFilter;\n loading?: boolean;\n preventDefaultItemClick?: boolean;\n selection?: {\n enabled: boolean;\n selectionMode?: 'single' | 'multiple'; // defaults to multiple\n destructiveAction?: {\n enabled: boolean;\n button: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label?: (count: number) => string };\n };\n bulkActionButton: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label: (count: number) => string };\n selectedLabel?: (selectionCount: number) => string;\n cancelText?: (selectionCount: number) => string;\n };\n sortBy?: {\n on: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar';\n order: 'asc' | 'desc';\n };\n itemsCountLabel?: (count: number) => string;\n noItemsCountLabel?: boolean;\n data: MobileTableRow[];\n}\n\nconst props = defineProps<ElMobileTableProps>();\n\nconst search = ref<string>('');\nconst selectedItems = ref<number[]>([]);\nconst selectedItemToShow = ref<MobileTableRow | null>(null);\nconst filterModalOpen = ref(false);\nconst filterDateFrom = ref<number>(0);\nconst managedSearchDebounceTimeout = ref<NodeJS.Timeout | undefined>(undefined);\n\nwatch(search, (newValue, oldValue) => {\n if (managedSearchDebounceTimeout.value) {\n clearTimeout(managedSearchDebounceTimeout.value);\n }\n managedSearchDebounceTimeout.value = setTimeout(() => {\n if (oldValue !== newValue) {\n emitFiltersUpdated();\n }\n }, 500);\n});\n\nconst filtersAreApplied = computed(() => {\n return (\n search.value.trim().length > 0 ||\n Object.values(multiValueFiltersValues.value).some(filter => filter && filter.trim().length > 0) ||\n filterDateFrom.value !== 0\n );\n});\n\nconst getSelectedRows = () => selectedItems.value.map(index => props.data[index]);\n\nconst matchesSearch = (value: string): boolean => {\n const searchText = search.value?.trim();\n if (!searchText) return true;\n return value.split(' ').some(part => part.toLowerCase().includes(searchText.toLowerCase()));\n};\n\nconst multiValueFiltersValues = ref<MobileTableFiltersStatus['multiSelect']>({\n avatar: props.filters.multiValue?.avatar?.initialValue ?? '',\n mainText: props.filters.multiValue?.mainText?.initialValue ?? '',\n secondaryRow: props.filters.multiValue?.secondaryRow?.initialValue ?? '',\n tertiaryRow: props.filters.multiValue?.tertiaryRow?.initialValue ?? '',\n amount: props.filters.multiValue?.amount?.initialValue ?? '',\n tags: props.filters.multiValue?.tags?.initialValue ?? '',\n time: props.filters.multiValue?.time?.initialValue ?? '',\n});\n\nconst multiValueFiltersModalValues = ref<MobileTableFiltersStatus['multiSelect']>({\n ...multiValueFiltersValues.value,\n});\n\nconst makeArrUnique = (arr: string[]): string[] => Array.from(new Set(arr));\nconst isDefined = <T,>(value: T | undefined): value is T => value !== undefined;\n\nconst multiValueAvailabeOptions = computed<{\n mainText: SelectOptions;\n secondaryRow: SelectOptions;\n tertiaryRow: SelectOptions;\n amount: SelectOptions;\n tags: SelectOptions;\n time: SelectOptions;\n avatar: SelectOptions;\n}>(() => {\n return {\n mainText: props.filters.multiValue?.mainText\n ? props.filters.multiValue.mainText.selectOptions ??\n makeArrUnique(props.data.map(item => item.mainText.label)).map(value => ({ value, label: value }))\n : [],\n secondaryRow: props.filters.multiValue?.secondaryRow\n ? props.filters.multiValue.secondaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.secondaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tertiaryRow: props.filters.multiValue?.tertiaryRow\n ? props.filters.multiValue.tertiaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.tertiaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n amount: props.filters.multiValue?.amount\n ? props.filters.multiValue.amount.selectOptions ??\n makeArrUnique(props.data.map(item => item.amount).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tags: props.filters.multiValue?.tags\n ? props.filters.multiValue.tags.selectOptions ??\n makeArrUnique(props.data.flatMap(item => (item.tags ?? []).map(tag => tag.text).filter(isDefined))).map(value => ({\n value,\n label: value,\n }))\n : [],\n time: props.filters.multiValue?.time\n ? props.filters.multiValue.time.selectOptions ??\n makeArrUnique(props.data.map(item => item.time).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n avatar: props.filters.multiValue?.avatar\n ? props.filters.multiValue.avatar.selectOptions ??\n makeArrUnique(props.data.map(item => item.avatar?.label).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n };\n});\n\nconst filteredData = computed(() => {\n let data = props.data.slice();\n if (props.filters.managed) return data;\n if (props.filters.freeSearch && search.value.trim().length > 0) {\n const searchParams = props.filters.freeSearch;\n data = data.filter(item =>\n searchParams.filterOn.some(filter => {\n switch (filter) {\n case 'avatar':\n return item.avatar && item.avatar.label && matchesSearch(item.avatar.label);\n case 'time':\n return item.time && matchesSearch(item.time);\n case 'mainText':\n return item.mainText && matchesSearch(item.mainText.label);\n case 'secondaryRow':\n return item.secondaryRow && matchesSearch(item.secondaryRow);\n case 'tertiaryRow':\n return item.tertiaryRow && matchesSearch(item.tertiaryRow);\n case 'amount':\n return item.amount && matchesSearch(item.amount);\n case 'tags':\n return item.tags && item.tags.some(tag => matchesSearch(tag.text));\n }\n }),\n );\n }\n\n if (props.filters.multiValue) {\n if (props.filters.multiValue.mainText) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.mainText ||\n multiValueFiltersValues.value.mainText.length === 0 ||\n multiValueFiltersValues.value.mainText.includes(item.sortableAndFilterableValue ?? item.mainText.label),\n );\n }\n if (props.filters.multiValue.secondaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.secondaryRow ||\n multiValueFiltersValues.value.secondaryRow.length === 0 ||\n multiValueFiltersValues.value.secondaryRow.includes(item.sortableAndFilterableValue ?? item.secondaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.tertiaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tertiaryRow ||\n multiValueFiltersValues.value.tertiaryRow.length === 0 ||\n multiValueFiltersValues.value.tertiaryRow.includes(item.sortableAndFilterableValue ?? item.tertiaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.amount) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.amount ||\n multiValueFiltersValues.value.amount.length === 0 ||\n multiValueFiltersValues.value.amount.includes(item.sortableAndFilterableValue ?? item.amount ?? ''),\n );\n }\n if (props.filters.multiValue.tags) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tags ||\n multiValueFiltersValues.value.tags.length === 0 ||\n item.tags?.some(tag => multiValueFiltersValues.value.tags!.includes(tag.text)),\n );\n }\n if (props.filters.multiValue.avatar) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.avatar ||\n multiValueFiltersValues.value.avatar.length === 0 ||\n multiValueFiltersValues.value.avatar.includes(item.sortableAndFilterableValue ?? item.avatar?.label ?? ''),\n );\n }\n }\n\n if (props.filters.dateRange?.enabled) {\n data = data.filter(item => {\n if (!filterDateFrom.value) return true;\n return item.time && new Date(item.time).getTime() >= filterDateFrom.value;\n });\n }\n\n if (props.sortBy) {\n data = data.sort((a, b) => {\n let result = 0;\n if (a.sortableAndFilterableValue && b.sortableAndFilterableValue) {\n result = a.sortableAndFilterableValue.localeCompare(b.sortableAndFilterableValue);\n } else {\n switch (props.sortBy!.on) {\n case 'mainText':\n result = a.mainText.label.localeCompare(b.mainText.label);\n break;\n case 'avatar':\n result = (a.avatar?.label ?? '').localeCompare(b.avatar?.label ?? '');\n break;\n case 'time':\n case 'secondaryRow':\n case 'tertiaryRow':\n result = (a[props.sortBy!.on] ?? '').localeCompare(b[props.sortBy!.on] ?? '');\n break;\n case 'amount':\n const numA = parseFloat(a.amount ?? '0');\n const numB = parseFloat(b.amount ?? '0');\n result = numA - numB;\n break;\n case 'tags':\n result = (a.tags?.map(tag => tag.text).join('') ?? '').localeCompare(b.tags?.map(tag => tag.text).join('') ?? '');\n break;\n }\n }\n if (props.sortBy?.order === 'desc') {\n result *= -1;\n }\n return result;\n });\n }\n\n return data;\n});\n\nconst enabledSelectFilters = computed(() => {\n return Object.fromEntries(Object.entries(props.filters.multiValue ?? {}).filter(([_, filter]) => filter.enabled));\n});\n\nconst showFiltersButton = computed(() => {\n return props.filters.dateRange?.enabled || Object.values(props.filters.multiValue ?? {}).some(filter => filter.enabled);\n});\n\nconst hasFiltersApplied = computed(() => {\n return Object.values(multiValueFiltersValues.value).some(filter => filter.length > 0) || filterDateFrom.value !== 0;\n});\n\nconst selectRows = (rowsIds: string[]) => {\n const indexes = rowsIds.map(id => getItemIndex({ id: id }));\n if (props.selection?.selectionMode === 'single' && indexes.length > 0) {\n selectedItems.value = [indexes.at(0)!];\n }\n selectedItems.value.push(...indexes);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n};\n\nconst selectRow = (rowIndex: number) => {\n if (props.selection?.selectionMode === 'single') {\n selectedItems.value = [rowIndex];\n } else {\n selectedItems.value.push(rowIndex);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n }\n emit('rows-selected', getSelectedRows());\n};\n\nconst deselectRow = (rowIndex: number) => {\n selectedItems.value = selectedItems.value.filter(index => index !== rowIndex);\n};\n\nconst getItemIndex = (item: { id: string }) => {\n const idx = props.data.findIndex(i => i.id === item.id);\n if (idx === -1) throw new Error(`Item with id ${item.id} not found`);\n return idx;\n};\n\nconst unselectAllRows = () => {\n selectedItems.value = [];\n};\n\nconst getDataRows = () => props.data;\n\nconst openFiltersModal = () => {\n filterModalOpen.value = true;\n};\n\nconst showItemDetails = (item: MobileTableRow) => {\n selectedItemToShow.value = item;\n};\n\nconst closeItemDetails = () => {\n selectedItemToShow.value = null;\n};\n\nconst detailsPrimaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'>>(() => {\n if (selectedItemToShow.value?.actions) {\n return selectedItemToShow.value.actions.primary;\n } else {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n }\n});\nconst detailsSecondaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return selectedItemToShow.value.actions.secondary;\n } else if (selectedItemToShow.value?.actions?.primary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\nconst detailsTertiaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\n\nconst applyFilters = () => {\n filterModalOpen.value = false;\n multiValueFiltersValues.value = { ...multiValueFiltersModalValues.value };\n emitFiltersUpdated();\n};\n\nconst resetFilters = () => {\n multiValueFiltersValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n filterDateFrom.value = 0;\n multiValueFiltersModalValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n emitFiltersUpdated();\n};\n\nconst emitFiltersUpdated = () => {\n if (props.filters.managed) {\n emit('filters-updated', {\n freeSearch: props.filters.freeSearch ? search.value : undefined,\n fromDate: props.filters.dateRange ? filterDateFrom.value : undefined,\n multiSelect: multiValueFiltersValues.value,\n });\n }\n};\n\nconst emit = defineEmits<{\n (event: 'destructive:click', selectedItems: MobileTableRow[]): void;\n (event: 'bulk:click', selectedItems: MobileTableRow[]): void;\n (event: 'item:click', item: MobileTableRow): void;\n (event: 'selection:exit'): void;\n (event: 'rows-selected', selectedItems: MobileTableRow[]): void;\n (event: 'filters-updated', filters: MobileTableFiltersStatus): void;\n}>();\n\ndefineExpose({\n filteredData,\n selectRows,\n unselectAllRows,\n getDataRows,\n getSelectedRows,\n closeItemDetails,\n});\n</script>\n\n<template>\n <div class=\"bg-neutral-surface flex flex-col px-4 pt-2 h-full min-w-80 overflow-auto\">\n <div v-if=\"!props.selection?.enabled\" class=\"flex flex-row gap-4 pb-2\">\n <div class=\"flex-grow\">\n <ElInputText\n v-if=\"props.filters.freeSearch\"\n v-model=\"search\"\n :placeholder=\"props.filters.freeSearch.placeholder ?? 'Cerca'\"\n :leading-icon=\"{ name: 'MagnifyingGlassIcon' }\"\n />\n </div>\n <ElIconButton\n v-if=\"showFiltersButton\"\n :badge=\"hasFiltersApplied\"\n :badge-color=\"props.color\"\n :icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n :class=\"\n props.color === 'primary'\n ? 'text-primary hover:text-primary-hover hover:bg-primary-light-hover active:bg-primary-light-active'\n : 'text-secondary hover:text-secondary-hover hover:bg-secondary-light-hover active:bg-secondary-light-active'\n \"\n @click=\"openFiltersModal\"\n />\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"py-3 px-4 border-b border-b-neutral-surface grid grid-cols-3\">\n <div class=\"flex flex-row justify-start items-center\">\n <ElButton\n error\n variant=\"tertiary\"\n type=\"button\"\n :label=\"`Elimina (${selectedItems.length})`\"\n @click=\"$emit('destructive:click', getSelectedRows())\"\n />\n </div>\n <div class=\"flex flex-row justify-center items-center\">\n <span class=\"text-neutral-darker font-normal text-sm\">\n <template v-if=\"props.selection.selectedLabel\">\n {{ props.selection.selectedLabel(selectedItems.length) }}\n </template>\n <template v-else-if=\"props.selection.selectionMode !== 'single'\">{{ selectedItems.length }} Selezionati</template>\n </span>\n </div>\n </div>\n <slot />\n\n <CustomTransition name=\"fade\">\n <div class=\"relative\">\n <ElSpinner\n v-if=\"props.loading\"\n label=\"Caricamento dati...\"\n class=\"p-4 absolute bg-neutral-surface w-full\"\n :extra-loading-msg-after-seconds=\"3\"\n />\n </div>\n </CustomTransition>\n\n <div v-if=\"filtersAreApplied && noItemsCountLabel !== true && filteredData.length !== 0\" class=\"pt-3 px-4\">\n <span class=\"font-semibold text-neutral-darker\">{{\n props.itemsCountLabel ? props.itemsCountLabel(filteredData.length) : `${filteredData.length} risultati per la tua ricerca`\n }}</span>\n </div>\n\n <ul v-if=\"filteredData.length > 0\" class=\"m-0 flex flex-col flex-grow overflow-y-auto h-full\">\n <ElListItem\n v-for=\"item in filteredData\"\n v-bind=\"item\"\n :key=\"item.id\"\n :color=\"props.color\"\n :model-value=\"props.selection?.enabled ? selectedItems.includes(getItemIndex(item)) : undefined\"\n @update:model-value=\"v => (v ? selectRow(getItemIndex(item)) : deselectRow(getItemIndex(item)))\"\n @click=\"\n () => {\n $emit('item:click', item);\n if (!props.selection?.enabled && !props.preventDefaultItemClick) {\n showItemDetails(item);\n }\n }\n \"\n />\n <slot name=\"after-list\" />\n </ul>\n\n <div v-else-if=\"!props.loading && filteredData.length === 0\" class=\"flex flex-grow flex-col justify-start items-center pt-8 px-8 gap-3\">\n <ElIcon\n name=\"MagnifyingGlassIcon\"\n class=\"h-8 w-8\"\n :class=\"props.color === 'primary' ? 'text-primary-active' : 'text-secondary-active'\"\n />\n <div class=\"flex flex-col gap-1 text-center\">\n <span class=\"text-lg font-semibold text-neutral-darker\">Nessun risultato</span>\n <p class=\"text-neutral-lighter text-sm\">Non abbiamo trovato risultati per questa ricerca. Prova con altre parole chiave.</p>\n </div>\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"border-t border-t-neutral-surface flex flex-row justify-between py-5 px-4\">\n <ElButton size=\"l\" variant=\"tertiary\" label=\"Annulla\" @click=\"$emit('selection:exit')\" />\n <ElButton\n v-if=\"props.selection?.bulkActionButton\"\n :variant=\"props.color\"\n :label=\"props.selection.bulkActionButton.label(selectedItems.length)\"\n :disabled=\"selectedItems.length === 0\"\n size=\"l\"\n @click=\"\n $emit(\n 'bulk:click',\n selectedItems.map(index => props.data[index]),\n )\n \"\n />\n </div>\n </div>\n\n <ElModal\n size=\"xs\"\n :is-open=\"selectedItemToShow !== null\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Dettaglio\"\n :color=\"props.color\"\n :primary-action=\"detailsPrimaryAction\"\n :secondary-action=\"detailsSecondaryAction\"\n :tertiary-action=\"detailsTertiaryAction\"\n @closed=\"closeItemDetails\"\n >\n <ul v-if=\"selectedItemToShow\" class=\"m-0 flex flex-col gap-5\">\n <li v-for=\"(item, i) in selectedItemToShow.details\" :key=\"i\" class=\"flex flex-col gap-1\">\n <span class=\"text-neutral-lighter\">{{ item.label }}</span>\n <span v-if=\"item.value.type === 'default'\">{{ item.value.text }}</span>\n <div v-else-if=\"item.value.type === 'tag'\">\n <ElTag :text=\"item.value.text\" :color=\"item.value.color\" />\n </div>\n <div v-else-if=\"item.value.type === 'avatar'\">\n <ElAvatar :label=\"item.value.label\" :picture=\"item.value.picture\" size=\"sm\" />\n </div>\n </li>\n </ul>\n </ElModal>\n\n <ElModal\n v-model:is-open=\"filterModalOpen\"\n size=\"xs\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Filtri\"\n :color=\"props.color\"\n :primary-action=\"{\n label: 'Applica filtri',\n onClick: applyFilters,\n }\"\n :secondary-action=\"props.filters.resetButton ? { label: 'Reset', onClick: resetFilters } : undefined\"\n :tertiary-action=\"{\n label: 'Chiudi',\n onClick: () => {\n filterModalOpen = false;\n },\n }\"\n >\n <div class=\"flex flex-col gap-6\">\n <ElInputSelect\n v-for=\"(filter, key) in enabledSelectFilters\"\n :key=\"key\"\n v-model=\"multiValueFiltersModalValues[key as keyof typeof multiValueFiltersModalValues]\"\n :options=\"multiValueAvailabeOptions[key as keyof typeof multiValueAvailabeOptions]\"\n :label=\"filter.label\"\n />\n <ElInputDate\n v-if=\"props.filters.dateRange?.enabled\"\n v-model=\"filterDateFrom\"\n :label=\"props.filters.dateRange.label\"\n :placeholder=\"props.filters.dateRange.placeholder\"\n hidden-error-message\n />\n </div>\n </ElModal>\n</template>\n"],"names":["props","__props","search","ref","selectedItems","selectedItemToShow","filterModalOpen","filterDateFrom","managedSearchDebounceTimeout","watch","newValue","oldValue","emitFiltersUpdated","filtersAreApplied","computed","multiValueFiltersValues","filter","getSelectedRows","index","matchesSearch","value","searchText","_a","part","_b","_d","_c","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","multiValueFiltersModalValues","makeArrUnique","arr","isDefined","multiValueAvailabeOptions","item","tag","filteredData","data","searchParams","a","b","result","numA","numB","enabledSelectFilters","_","showFiltersButton","hasFiltersApplied","selectRows","rowsIds","indexes","id","getItemIndex","selectRow","rowIndex","emit","deselectRow","idx","i","unselectAllRows","getDataRows","openFiltersModal","showItemDetails","closeItemDetails","detailsPrimaryAction","detailsSecondaryAction","detailsTertiaryAction","applyFilters","resetFilters","__emit","__expose"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElMobileTable.vue.esm2.js","sources":["../../../src/table/ElMobileTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ElListItem, { ElListItemProps } from '@/ElListItem.vue';\nimport ElInputText from '@/forms/ElInputText.vue';\nimport ElIconButton from '@/ElIconButton.vue';\nimport ElButton, { ElButtonProps } from '@/ElButton.vue';\nimport { computed, ref, watch } from 'vue';\nimport ElTag, { ElTagColor } from '@/ElTag.vue';\nimport ElModal from '@/ElModal.vue';\nimport ElInputSelect from '@/forms/ElInputSelect.vue';\nimport ElInputDate from '@/forms/ElInputDate.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport CustomTransition from '@/_CustomTransition.vue';\nimport ElSpinner from '@/ElSpinner.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport { OptionType } from '@/types';\n\nexport type SelectOptions = OptionType[];\n\nexport type MobileTableFiltersStatus = {\n freeSearch?: string;\n fromDate?: number;\n multiSelect: {\n mainText?: string;\n secondaryRow?: string;\n tertiaryRow?: string;\n tags?: string;\n time?: string;\n amount?: string;\n avatar?: string;\n };\n};\n\nexport type MobileTableFilter = {\n freeSearch?: {\n placeholder?: string;\n filterOn: ('mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar')[];\n initialValue?: string;\n };\n multiValue?: {\n mainText?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n secondaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tertiaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n amount?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tags?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n time?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n avatar?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n };\n dateRange?: {\n enabled: boolean;\n label: string;\n initialValue?: number;\n placeholder?: string;\n };\n resetButton?: boolean;\n // if true filters won't be applied by the table (used for server side table)\n managed?: boolean;\n};\n\nexport type MobileTableRow = Omit<ElListItemProps, 'color'> & {\n id: string;\n rowNotSelectable?: boolean;\n relatedObject?: any;\n clickAction?: (payload: PointerEvent) => void;\n actions?: {\n primary: InstanceType<typeof ElButton>['$props'];\n secondary?: InstanceType<typeof ElButton>['$props'];\n };\n sortableAndFilterableValue?: string;\n details: {\n label: string;\n value:\n | { type?: 'default'; text: string }\n | { type: 'tag'; text: string; color?: ElTagColor }\n | { type: 'avatar'; label?: string; picture?: string };\n }[];\n};\n\nexport interface ElMobileTableProps {\n color: 'primary' | 'secondary';\n filters: MobileTableFilter;\n loading?: boolean;\n preventDefaultItemClick?: boolean;\n selection?: {\n enabled: boolean;\n selectionMode?: 'single' | 'multiple'; // defaults to multiple\n destructiveAction?: {\n enabled: boolean;\n button: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label?: (count: number) => string };\n };\n bulkActionButton: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label: (count: number) => string };\n selectedLabel?: (selectionCount: number) => string;\n cancelText?: (selectionCount: number) => string;\n };\n sortBy?: {\n on: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar';\n order: 'asc' | 'desc';\n };\n itemsCountLabel?: (count: number) => string;\n noItemsCountLabel?: boolean;\n data: MobileTableRow[];\n}\n\nconst props = defineProps<ElMobileTableProps>();\n\nconst search = ref<string>('');\nconst selectedItems = ref<number[]>([]);\nconst selectedItemToShow = ref<MobileTableRow | null>(null);\nconst filterModalOpen = ref(false);\nconst filterDateFrom = ref<number>(0);\nconst managedSearchDebounceTimeout = ref<NodeJS.Timeout | undefined>(undefined);\n\nwatch(search, (newValue, oldValue) => {\n if (managedSearchDebounceTimeout.value) {\n clearTimeout(managedSearchDebounceTimeout.value);\n }\n managedSearchDebounceTimeout.value = setTimeout(() => {\n if (oldValue !== newValue) {\n emitFiltersUpdated();\n }\n }, 500);\n});\n\nconst filtersAreApplied = computed(() => {\n return (\n search.value.trim().length > 0 ||\n Object.values(multiValueFiltersValues.value).some(filter => filter && filter.trim().length > 0) ||\n filterDateFrom.value !== 0\n );\n});\n\nconst getSelectedRows = () => selectedItems.value.map(index => props.data[index]);\n\nconst matchesSearch = (value: string): boolean => {\n const searchText = search.value?.trim();\n if (!searchText) return true;\n return value.split(' ').some(part => part.toLowerCase().includes(searchText.toLowerCase()));\n};\n\nconst multiValueFiltersValues = ref<MobileTableFiltersStatus['multiSelect']>({\n avatar: props.filters.multiValue?.avatar?.initialValue ?? '',\n mainText: props.filters.multiValue?.mainText?.initialValue ?? '',\n secondaryRow: props.filters.multiValue?.secondaryRow?.initialValue ?? '',\n tertiaryRow: props.filters.multiValue?.tertiaryRow?.initialValue ?? '',\n amount: props.filters.multiValue?.amount?.initialValue ?? '',\n tags: props.filters.multiValue?.tags?.initialValue ?? '',\n time: props.filters.multiValue?.time?.initialValue ?? '',\n});\n\nconst multiValueFiltersModalValues = ref<MobileTableFiltersStatus['multiSelect']>({\n ...multiValueFiltersValues.value,\n});\n\nconst makeArrUnique = (arr: string[]): string[] => Array.from(new Set(arr));\nconst isDefined = <T,>(value: T | undefined): value is T => value !== undefined;\n\nconst multiValueAvailabeOptions = computed<{\n mainText: SelectOptions;\n secondaryRow: SelectOptions;\n tertiaryRow: SelectOptions;\n amount: SelectOptions;\n tags: SelectOptions;\n time: SelectOptions;\n avatar: SelectOptions;\n}>(() => {\n return {\n mainText: props.filters.multiValue?.mainText\n ? props.filters.multiValue.mainText.selectOptions ??\n makeArrUnique(props.data.map(item => item.mainText.label)).map(value => ({ value, label: value }))\n : [],\n secondaryRow: props.filters.multiValue?.secondaryRow\n ? props.filters.multiValue.secondaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.secondaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tertiaryRow: props.filters.multiValue?.tertiaryRow\n ? props.filters.multiValue.tertiaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.tertiaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n amount: props.filters.multiValue?.amount\n ? props.filters.multiValue.amount.selectOptions ??\n makeArrUnique(props.data.map(item => item.amount).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tags: props.filters.multiValue?.tags\n ? props.filters.multiValue.tags.selectOptions ??\n makeArrUnique(props.data.flatMap(item => (item.tags ?? []).map(tag => tag.text).filter(isDefined))).map(value => ({\n value,\n label: value,\n }))\n : [],\n time: props.filters.multiValue?.time\n ? props.filters.multiValue.time.selectOptions ??\n makeArrUnique(props.data.map(item => item.time).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n avatar: props.filters.multiValue?.avatar\n ? props.filters.multiValue.avatar.selectOptions ??\n makeArrUnique(props.data.map(item => item.avatar?.label).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n };\n});\n\nconst filteredData = computed(() => {\n let data = props.data.slice();\n if (props.filters.managed) return data;\n if (props.filters.freeSearch && search.value.trim().length > 0) {\n const searchParams = props.filters.freeSearch;\n data = data.filter(item =>\n searchParams.filterOn.some(filter => {\n switch (filter) {\n case 'avatar':\n return item.avatar && item.avatar.label && matchesSearch(item.avatar.label);\n case 'time':\n return item.time && matchesSearch(item.time);\n case 'mainText':\n return item.mainText && matchesSearch(item.mainText.label);\n case 'secondaryRow':\n return item.secondaryRow && matchesSearch(item.secondaryRow);\n case 'tertiaryRow':\n return item.tertiaryRow && matchesSearch(item.tertiaryRow);\n case 'amount':\n return item.amount && matchesSearch(item.amount);\n case 'tags':\n return item.tags && item.tags.some(tag => matchesSearch(tag.text));\n }\n }),\n );\n }\n\n if (props.filters.multiValue) {\n if (props.filters.multiValue.mainText) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.mainText ||\n multiValueFiltersValues.value.mainText.length === 0 ||\n multiValueFiltersValues.value.mainText.includes(item.sortableAndFilterableValue ?? item.mainText.label),\n );\n }\n if (props.filters.multiValue.secondaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.secondaryRow ||\n multiValueFiltersValues.value.secondaryRow.length === 0 ||\n multiValueFiltersValues.value.secondaryRow.includes(item.sortableAndFilterableValue ?? item.secondaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.tertiaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tertiaryRow ||\n multiValueFiltersValues.value.tertiaryRow.length === 0 ||\n multiValueFiltersValues.value.tertiaryRow.includes(item.sortableAndFilterableValue ?? item.tertiaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.amount) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.amount ||\n multiValueFiltersValues.value.amount.length === 0 ||\n multiValueFiltersValues.value.amount.includes(item.sortableAndFilterableValue ?? item.amount ?? ''),\n );\n }\n if (props.filters.multiValue.tags) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tags ||\n multiValueFiltersValues.value.tags.length === 0 ||\n item.tags?.some(tag => multiValueFiltersValues.value.tags!.includes(tag.text)),\n );\n }\n if (props.filters.multiValue.avatar) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.avatar ||\n multiValueFiltersValues.value.avatar.length === 0 ||\n multiValueFiltersValues.value.avatar.includes(item.sortableAndFilterableValue ?? item.avatar?.label ?? ''),\n );\n }\n }\n\n if (props.filters.dateRange?.enabled) {\n data = data.filter(item => {\n if (!filterDateFrom.value) return true;\n return item.time && new Date(item.time).getTime() >= filterDateFrom.value;\n });\n }\n\n if (props.sortBy) {\n data = data.sort((a, b) => {\n let result = 0;\n if (a.sortableAndFilterableValue && b.sortableAndFilterableValue) {\n result = a.sortableAndFilterableValue.localeCompare(b.sortableAndFilterableValue);\n } else {\n switch (props.sortBy!.on) {\n case 'mainText':\n result = a.mainText.label.localeCompare(b.mainText.label);\n break;\n case 'avatar':\n result = (a.avatar?.label ?? '').localeCompare(b.avatar?.label ?? '');\n break;\n case 'time':\n case 'secondaryRow':\n case 'tertiaryRow':\n result = (a[props.sortBy!.on] ?? '').localeCompare(b[props.sortBy!.on] ?? '');\n break;\n case 'amount':\n const numA = parseFloat(a.amount ?? '0');\n const numB = parseFloat(b.amount ?? '0');\n result = numA - numB;\n break;\n case 'tags':\n result = (a.tags?.map(tag => tag.text).join('') ?? '').localeCompare(b.tags?.map(tag => tag.text).join('') ?? '');\n break;\n }\n }\n if (props.sortBy?.order === 'desc') {\n result *= -1;\n }\n return result;\n });\n }\n\n return data;\n});\n\nconst enabledSelectFilters = computed(() => {\n return Object.fromEntries(Object.entries(props.filters.multiValue ?? {}).filter(([_, filter]) => filter.enabled));\n});\n\nconst showFiltersButton = computed(() => {\n return props.filters.dateRange?.enabled || Object.values(props.filters.multiValue ?? {}).some(filter => filter.enabled);\n});\n\nconst hasFiltersApplied = computed(() => {\n return Object.values(multiValueFiltersValues.value).some(filter => filter.length > 0) || filterDateFrom.value !== 0;\n});\n\nconst selectRows = (rowsIds: string[]) => {\n const indexes = rowsIds.map(id => getItemIndex({ id: id }));\n if (props.selection?.selectionMode === 'single' && indexes.length > 0) {\n selectedItems.value = [indexes.at(0)!];\n }\n selectedItems.value.push(...indexes);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n};\n\nconst selectRow = (rowIndex: number) => {\n if (props.selection?.selectionMode === 'single') {\n selectedItems.value = [rowIndex];\n } else {\n selectedItems.value.push(rowIndex);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n }\n emit('rows-selected', getSelectedRows());\n};\n\nconst deselectRow = (rowIndex: number) => {\n selectedItems.value = selectedItems.value.filter(index => index !== rowIndex);\n};\n\nconst getItemIndex = (item: { id: string }) => {\n const idx = props.data.findIndex(i => i.id === item.id);\n if (idx === -1) throw new Error(`Item with id ${item.id} not found`);\n return idx;\n};\n\nconst unselectAllRows = () => {\n selectedItems.value = [];\n};\n\nconst getDataRows = () => props.data;\n\nconst openFiltersModal = () => {\n filterModalOpen.value = true;\n};\n\nconst showItemDetails = (item: MobileTableRow) => {\n selectedItemToShow.value = item;\n};\n\nconst closeItemDetails = () => {\n selectedItemToShow.value = null;\n};\n\nconst detailsPrimaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'>>(() => {\n if (selectedItemToShow.value?.actions) {\n return selectedItemToShow.value.actions.primary;\n } else {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n }\n});\nconst detailsSecondaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return selectedItemToShow.value.actions.secondary;\n } else if (selectedItemToShow.value?.actions?.primary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\nconst detailsTertiaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\n\nconst applyFilters = () => {\n filterModalOpen.value = false;\n multiValueFiltersValues.value = { ...multiValueFiltersModalValues.value };\n emitFiltersUpdated();\n};\n\nconst resetFilters = () => {\n multiValueFiltersValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n filterDateFrom.value = 0;\n multiValueFiltersModalValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n emitFiltersUpdated();\n};\n\nconst emitFiltersUpdated = () => {\n if (props.filters.managed) {\n emit('filters-updated', {\n freeSearch: props.filters.freeSearch ? search.value : undefined,\n fromDate: props.filters.dateRange ? filterDateFrom.value : undefined,\n multiSelect: multiValueFiltersValues.value,\n });\n }\n};\n\nconst emit = defineEmits<{\n (event: 'destructive:click', selectedItems: MobileTableRow[]): void;\n (event: 'bulk:click', selectedItems: MobileTableRow[]): void;\n (event: 'item:click', item: MobileTableRow): void;\n (event: 'selection:exit'): void;\n (event: 'rows-selected', selectedItems: MobileTableRow[]): void;\n (event: 'filters-updated', filters: MobileTableFiltersStatus): void;\n}>();\n\ndefineExpose({\n filteredData,\n selectRows,\n unselectAllRows,\n getDataRows,\n getSelectedRows,\n closeItemDetails,\n});\n</script>\n\n<template>\n <div class=\"bg-neutral-surface flex flex-col px-4 pt-2 h-full min-w-80 overflow-auto\">\n <div v-if=\"!props.selection?.enabled\" class=\"flex flex-row gap-4 pb-2\">\n <div class=\"flex-grow\">\n <ElInputText\n v-if=\"props.filters.freeSearch\"\n v-model=\"search\"\n :placeholder=\"props.filters.freeSearch.placeholder ?? 'Cerca'\"\n :leading-icon=\"{ name: 'MagnifyingGlassIcon' }\"\n />\n </div>\n <ElIconButton\n v-if=\"showFiltersButton\"\n :badge=\"hasFiltersApplied\"\n :badge-color=\"props.color\"\n :icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n :class=\"\n props.color === 'primary'\n ? 'text-primary hover:text-primary-hover hover:bg-primary-light-hover active:bg-primary-light-active'\n : 'text-secondary hover:text-secondary-hover hover:bg-secondary-light-hover active:bg-secondary-light-active'\n \"\n @click=\"openFiltersModal\"\n />\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"py-3 px-4 border-b border-b-neutral-surface grid grid-cols-3\">\n <div class=\"flex flex-row justify-start items-center\">\n <ElButton\n error\n variant=\"tertiary\"\n type=\"button\"\n :label=\"`Elimina (${selectedItems.length})`\"\n @click=\"$emit('destructive:click', getSelectedRows())\"\n />\n </div>\n <div class=\"flex flex-row justify-center items-center\">\n <span class=\"text-neutral-darker font-normal text-sm\">\n <template v-if=\"props.selection.selectedLabel\">\n {{ props.selection.selectedLabel(selectedItems.length) }}\n </template>\n <template v-else-if=\"props.selection.selectionMode !== 'single'\">{{ selectedItems.length }} Selezionati</template>\n </span>\n </div>\n </div>\n <slot />\n\n <CustomTransition name=\"fade\">\n <div class=\"relative\">\n <ElSpinner\n v-if=\"props.loading\"\n label=\"Caricamento dati...\"\n class=\"p-4 absolute bg-neutral-surface w-full\"\n :extra-loading-msg-after-seconds=\"3\"\n />\n </div>\n </CustomTransition>\n\n <div v-if=\"filtersAreApplied && noItemsCountLabel !== true && filteredData.length !== 0\" class=\"pt-3 px-4\">\n <span class=\"font-semibold text-neutral-darker\">{{\n props.itemsCountLabel ? props.itemsCountLabel(filteredData.length) : `${filteredData.length} risultati per la tua ricerca`\n }}</span>\n </div>\n\n <ul v-if=\"filteredData.length > 0\" class=\"m-0 flex flex-col flex-grow overflow-y-auto h-full\">\n <ElListItem\n v-for=\"item in filteredData\"\n v-bind=\"item\"\n :key=\"item.id\"\n :color=\"props.color\"\n :model-value=\"props.selection?.enabled ? selectedItems.includes(getItemIndex(item)) : undefined\"\n @update:model-value=\"v => (v ? selectRow(getItemIndex(item)) : deselectRow(getItemIndex(item)))\"\n @click=\"\n () => {\n $emit('item:click', item);\n if (!props.selection?.enabled && !props.preventDefaultItemClick) {\n showItemDetails(item);\n }\n }\n \"\n />\n <slot name=\"after-list\" />\n </ul>\n\n <div v-else-if=\"!props.loading && filteredData.length === 0\" class=\"flex flex-grow flex-col justify-start items-center pt-8 px-8 gap-3\">\n <ElIcon\n name=\"MagnifyingGlassIcon\"\n class=\"h-8 w-8\"\n :class=\"props.color === 'primary' ? 'text-primary-active' : 'text-secondary-active'\"\n />\n <div class=\"flex flex-col gap-1 text-center\">\n <span class=\"text-lg font-semibold text-neutral-darker\">Nessun risultato</span>\n <p class=\"text-neutral-lighter text-sm\">Non abbiamo trovato risultati per questa ricerca. Prova con altre parole chiave.</p>\n </div>\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"border-t border-t-neutral-surface flex flex-row justify-between py-5 px-4\">\n <ElButton size=\"l\" variant=\"tertiary\" label=\"Annulla\" @click=\"$emit('selection:exit')\" />\n <ElButton\n v-if=\"props.selection?.bulkActionButton\"\n :variant=\"props.color\"\n :label=\"props.selection.bulkActionButton.label(selectedItems.length)\"\n :disabled=\"selectedItems.length === 0\"\n size=\"l\"\n @click=\"\n $emit(\n 'bulk:click',\n selectedItems.map(index => props.data[index]),\n )\n \"\n />\n </div>\n </div>\n\n <ElModal\n size=\"xs\"\n :is-open=\"selectedItemToShow !== null\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Dettaglio\"\n :color=\"props.color\"\n :primary-action=\"detailsPrimaryAction\"\n :secondary-action=\"detailsSecondaryAction\"\n :tertiary-action=\"detailsTertiaryAction\"\n @closed=\"closeItemDetails\"\n >\n <ul v-if=\"selectedItemToShow\" class=\"m-0 flex flex-col gap-5\">\n <li v-for=\"(item, i) in selectedItemToShow.details\" :key=\"i\" class=\"flex flex-col gap-1\">\n <span class=\"text-neutral-lighter\">{{ item.label }}</span>\n <span v-if=\"item.value.type === 'default'\">{{ item.value.text }}</span>\n <div v-else-if=\"item.value.type === 'tag'\">\n <ElTag :text=\"item.value.text\" :color=\"item.value.color\" />\n </div>\n <div v-else-if=\"item.value.type === 'avatar'\">\n <ElAvatar :label=\"item.value.label\" :picture=\"item.value.picture\" size=\"sm\" />\n </div>\n </li>\n </ul>\n </ElModal>\n\n <ElModal\n v-model:is-open=\"filterModalOpen\"\n size=\"xs\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Filtri\"\n :color=\"props.color\"\n :primary-action=\"{\n label: 'Applica filtri',\n onClick: applyFilters,\n }\"\n :secondary-action=\"props.filters.resetButton ? { label: 'Reset', onClick: resetFilters } : undefined\"\n :tertiary-action=\"{\n label: 'Chiudi',\n onClick: () => {\n filterModalOpen = false;\n },\n }\"\n >\n <div class=\"flex flex-col gap-6\">\n <ElInputSelect\n v-for=\"(filter, key) in enabledSelectFilters\"\n :key=\"key\"\n v-model=\"multiValueFiltersModalValues[key as keyof typeof multiValueFiltersModalValues]\"\n :options=\"multiValueAvailabeOptions[key as keyof typeof multiValueAvailabeOptions]\"\n :label=\"filter.label\"\n />\n <ElInputDate\n v-if=\"props.filters.dateRange?.enabled\"\n v-model=\"filterDateFrom\"\n :label=\"props.filters.dateRange.label\"\n :placeholder=\"props.filters.dateRange.placeholder\"\n hidden-error-message\n />\n </div>\n </ElModal>\n</template>\n"],"names":["props","__props","search","ref","selectedItems","selectedItemToShow","filterModalOpen","filterDateFrom","managedSearchDebounceTimeout","watch","newValue","oldValue","emitFiltersUpdated","filtersAreApplied","computed","multiValueFiltersValues","filter","getSelectedRows","index","matchesSearch","value","searchText","_a","part","_b","_d","_c","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","multiValueFiltersModalValues","makeArrUnique","arr","isDefined","multiValueAvailabeOptions","item","tag","filteredData","data","searchParams","b","result","numA","numB","enabledSelectFilters","_","showFiltersButton","hasFiltersApplied","selectRows","rowsIds","indexes","id","getItemIndex","selectRow","rowIndex","emit","deselectRow","idx","i","unselectAllRows","getDataRows","openFiltersModal","showItemDetails","closeItemDetails","detailsPrimaryAction","detailsSecondaryAction","detailsTertiaryAction","applyFilters","resetFilters","__emit","__expose"],"mappings":"+1EAyIA,MAAMA,EAAQC,GAERC,EAASC,EAAY,EAAE,EACvBC,EAAgBD,EAAc,CAAA,CAAE,EAChCE,EAAqBF,EAA2B,IAAI,EACpDG,EAAkBH,EAAI,EAAK,EAC3BI,EAAiBJ,EAAY,CAAC,EAC9BK,EAA+BL,EAAgC,MAAS,EAExEM,GAAAP,EAAQ,CAACQ,EAAUC,IAAa,CAChCH,EAA6B,OAC/B,aAAaA,EAA6B,KAAK,EAEpBA,EAAA,MAAQ,WAAW,IAAM,CAChDG,IAAaD,GACIE,KAEpB,GAAG,CAAA,CACP,EAEK,MAAAC,GAAoBC,EAAS,IAE/BZ,EAAO,MAAM,OAAO,OAAS,GAC7B,OAAO,OAAOa,EAAwB,KAAK,EAAE,KAAKC,GAAUA,GAAUA,EAAO,OAAO,OAAS,CAAC,GAC9FT,EAAe,QAAU,CAE5B,EAEKU,EAAkB,IAAMb,EAAc,MAAM,IAAac,GAAAlB,EAAM,KAAKkB,CAAK,CAAC,EAE1EC,EAAiBC,GAA2B,OAC1C,MAAAC,GAAaC,EAAApB,EAAO,QAAP,YAAAoB,EAAc,OACjC,OAAKD,EACED,EAAM,MAAM,GAAG,EAAE,KAAKG,GAAQA,EAAK,YAAc,EAAA,SAASF,EAAW,YAAA,CAAa,CAAC,EADlE,EACkE,EAGtFN,EAA0BZ,EAA6C,CAC3E,SAAQqB,GAAAF,EAAAtB,EAAM,QAAQ,aAAd,YAAAsB,EAA0B,SAA1B,YAAAE,EAAkC,eAAgB,GAC1D,WAAUC,GAAAC,EAAA1B,EAAM,QAAQ,aAAd,YAAA0B,EAA0B,WAA1B,YAAAD,EAAoC,eAAgB,GAC9D,eAAcE,GAAAC,EAAA5B,EAAM,QAAQ,aAAd,YAAA4B,EAA0B,eAA1B,YAAAD,EAAwC,eAAgB,GACtE,cAAaE,GAAAC,EAAA9B,EAAM,QAAQ,aAAd,YAAA8B,EAA0B,cAA1B,YAAAD,EAAuC,eAAgB,GACpE,SAAQE,GAAAC,EAAAhC,EAAM,QAAQ,aAAd,YAAAgC,EAA0B,SAA1B,YAAAD,EAAkC,eAAgB,GAC1D,OAAME,GAAAC,EAAAlC,EAAM,QAAQ,aAAd,YAAAkC,EAA0B,OAA1B,YAAAD,EAAgC,eAAgB,GACtD,OAAME,IAAAC,GAAApC,EAAM,QAAQ,aAAd,YAAAoC,GAA0B,OAA1B,YAAAD,GAAgC,eAAgB,EAAA,CACvD,EAEKE,EAA+BlC,EAA6C,CAChF,GAAGY,EAAwB,KAAA,CAC5B,EAEKuB,EAAiBC,GAA4B,MAAM,KAAK,IAAI,IAAIA,CAAG,CAAC,EACpEC,EAAiBpB,GAAqCA,IAAU,OAEhEqB,GAA4B3B,EAQ/B,IAAM,mBACA,MAAA,CACL,UAAUQ,EAAAtB,EAAM,QAAQ,aAAd,MAAAsB,EAA0B,SAChCtB,EAAM,QAAQ,WAAW,SAAS,eAClCsC,EAActC,EAAM,KAAK,IAAY0C,GAAAA,EAAK,SAAS,KAAK,CAAC,EAAE,IAAItB,IAAU,CAAE,MAAAA,EAAO,MAAOA,CAAQ,EAAA,EACjG,CAAC,EACL,cAAcI,EAAAxB,EAAM,QAAQ,aAAd,MAAAwB,EAA0B,aACpCxB,EAAM,QAAQ,WAAW,aAAa,eACtCsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,YAAY,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EACjH,CAAC,EACL,aAAaM,EAAA1B,EAAM,QAAQ,aAAd,MAAA0B,EAA0B,YACnC1B,EAAM,QAAQ,WAAW,YAAY,eACrCsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,WAAW,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EAChH,CAAC,EACL,QAAQK,EAAAzB,EAAM,QAAQ,aAAd,MAAAyB,EAA0B,OAC9BzB,EAAM,QAAQ,WAAW,OAAO,eAChCsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,MAAM,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EAC3G,CAAC,EACL,MAAMQ,EAAA5B,EAAM,QAAQ,aAAd,MAAA4B,EAA0B,KAC5B5B,EAAM,QAAQ,WAAW,KAAK,eAC9BsC,EAActC,EAAM,KAAK,QAAQ0C,IAASA,EAAK,MAAQ,CAAA,GAAI,IAAIC,GAAOA,EAAI,IAAI,EAAE,OAAOH,CAAS,CAAC,CAAC,EAAE,IAAcpB,IAAA,CAChH,MAAAA,EACA,MAAOA,CACT,EAAE,EACF,CAAC,EACL,MAAMO,EAAA3B,EAAM,QAAQ,aAAd,MAAA2B,EAA0B,KAC5B3B,EAAM,QAAQ,WAAW,KAAK,eAC9BsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,IAAI,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EACzG,CAAC,EACL,QAAQU,EAAA9B,EAAM,QAAQ,aAAd,MAAA8B,EAA0B,OAC9B9B,EAAM,QAAQ,WAAW,OAAO,eAChCsC,EAActC,EAAM,KAAK,IAAI0C,GAAA,OAAQ,OAAApB,EAAAoB,EAAK,SAAL,YAAApB,EAAa,MAAK,EAAE,OAAOkB,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EAClH,CAAC,CAAA,CACP,CACD,EAEKwB,EAAe9B,EAAS,IAAM,OAC9B,IAAA+B,EAAO7C,EAAM,KAAK,MAAM,EAC5B,GAAIA,EAAM,QAAQ,QAAgB,OAAA6C,EAC9B,GAAA7C,EAAM,QAAQ,YAAcE,EAAO,MAAM,KAAK,EAAE,OAAS,EAAG,CACxD,MAAA4C,EAAe9C,EAAM,QAAQ,WACnC6C,EAAOA,EAAK,OACVH,GAAAI,EAAa,SAAS,KAAe9B,GAAA,CACnC,OAAQA,EAAQ,CACd,IAAK,SACI,OAAA0B,EAAK,QAAUA,EAAK,OAAO,OAASvB,EAAcuB,EAAK,OAAO,KAAK,EAC5E,IAAK,OACH,OAAOA,EAAK,MAAQvB,EAAcuB,EAAK,IAAI,EAC7C,IAAK,WACH,OAAOA,EAAK,UAAYvB,EAAcuB,EAAK,SAAS,KAAK,EAC3D,IAAK,eACH,OAAOA,EAAK,cAAgBvB,EAAcuB,EAAK,YAAY,EAC7D,IAAK,cACH,OAAOA,EAAK,aAAevB,EAAcuB,EAAK,WAAW,EAC3D,IAAK,SACH,OAAOA,EAAK,QAAUvB,EAAcuB,EAAK,MAAM,EACjD,IAAK,OACI,OAAAA,EAAK,MAAQA,EAAK,KAAK,KAAYC,GAAAxB,EAAcwB,EAAI,IAAI,CAAC,CACrE,CAAA,CACD,CAAA,CAEL,CAEI,OAAA3C,EAAM,QAAQ,aACZA,EAAM,QAAQ,WAAW,WAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,UAC/BA,EAAwB,MAAM,SAAS,SAAW,GAClDA,EAAwB,MAAM,SAAS,SAAS2B,EAAK,4BAA8BA,EAAK,SAAS,KAAK,CAAA,GAGxG1C,EAAM,QAAQ,WAAW,eAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,cAC/BA,EAAwB,MAAM,aAAa,SAAW,GACtDA,EAAwB,MAAM,aAAa,SAAS2B,EAAK,4BAA8BA,EAAK,cAAgB,EAAE,CAAA,GAGhH1C,EAAM,QAAQ,WAAW,cAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,aAC/BA,EAAwB,MAAM,YAAY,SAAW,GACrDA,EAAwB,MAAM,YAAY,SAAS2B,EAAK,4BAA8BA,EAAK,aAAe,EAAE,CAAA,GAG9G1C,EAAM,QAAQ,WAAW,SAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,QAC/BA,EAAwB,MAAM,OAAO,SAAW,GAChDA,EAAwB,MAAM,OAAO,SAAS2B,EAAK,4BAA8BA,EAAK,QAAU,EAAE,CAAA,GAGpG1C,EAAM,QAAQ,WAAW,OAC3B6C,EAAOA,EAAK,OACVH,GAAA,OACE,OAAC3B,EAAwB,MAAM,MAC/BA,EAAwB,MAAM,KAAK,SAAW,KAC9CO,EAAAoB,EAAK,OAAL,YAAApB,EAAW,QAAYP,EAAwB,MAAM,KAAM,SAAS4B,EAAI,IAAI,IAAC,GAG/E3C,EAAM,QAAQ,WAAW,SAC3B6C,EAAOA,EAAK,iBAER,OAAC9B,EAAwB,MAAM,QAC/BA,EAAwB,MAAM,OAAO,SAAW,GAChDA,EAAwB,MAAM,OAAO,SAAS2B,EAAK,8BAA8BpB,EAAAoB,EAAK,SAAL,YAAApB,EAAa,QAAS,EAAE,EAAA,KAK7GA,EAAAtB,EAAM,QAAQ,YAAd,MAAAsB,EAAyB,UACpBuB,EAAAA,EAAK,OAAeH,GACpBnC,EAAe,MACbmC,EAAK,MAAQ,IAAI,KAAKA,EAAK,IAAI,EAAE,QAAQ,GAAKnC,EAAe,MADlC,EAEnC,GAGCP,EAAM,SACR6C,EAAOA,EAAK,KAAK,CAAC,EAAGE,IAAM,eACzB,IAAIC,EAAS,EACT,GAAA,EAAE,4BAA8BD,EAAE,2BACpCC,EAAS,EAAE,2BAA2B,cAAcD,EAAE,0BAA0B,MAExE,QAAA/C,EAAM,OAAQ,GAAI,CACxB,IAAK,WACHgD,EAAS,EAAE,SAAS,MAAM,cAAcD,EAAE,SAAS,KAAK,EACxD,MACF,IAAK,SACOC,KAAA1B,EAAA,EAAE,SAAF,YAAAA,EAAU,QAAS,IAAI,gBAAcE,EAAAuB,EAAE,SAAF,YAAAvB,EAAU,QAAS,EAAE,EACpE,MACF,IAAK,OACL,IAAK,eACL,IAAK,cACHwB,GAAU,EAAEhD,EAAM,OAAQ,EAAE,GAAK,IAAI,cAAc+C,EAAE/C,EAAM,OAAQ,EAAE,GAAK,EAAE,EAC5E,MACF,IAAK,SACH,MAAMiD,GAAO,WAAW,EAAE,QAAU,GAAG,EACjCC,GAAO,WAAWH,EAAE,QAAU,GAAG,EACvCC,EAASC,GAAOC,GAChB,MACF,IAAK,OACOF,KAAAtB,EAAA,EAAE,OAAF,YAAAA,EAAQ,IAAIiB,GAAOA,EAAI,MAAM,KAAK,MAAO,IAAI,gBAAclB,EAAAsB,EAAE,OAAF,YAAAtB,EAAQ,IAAWkB,GAAAA,EAAI,MAAM,KAAK,MAAO,EAAE,EAChH,KACJ,CAEE,QAAAf,EAAA5B,EAAM,SAAN,YAAA4B,EAAc,SAAU,SAChBoB,GAAA,IAELA,CAAA,CACR,GAGIH,CAAA,CACR,EAEKM,GAAuBrC,EAAS,IAC7B,OAAO,YAAY,OAAO,QAAQd,EAAM,QAAQ,YAAc,CAAA,CAAE,EAAE,OAAO,CAAC,CAACoD,EAAGpC,CAAM,IAAMA,EAAO,OAAO,CAAC,CACjH,EAEKqC,GAAoBvC,EAAS,IAAM,OACvC,QAAOQ,EAAAtB,EAAM,QAAQ,YAAd,YAAAsB,EAAyB,UAAW,OAAO,OAAOtB,EAAM,QAAQ,YAAc,CAAE,CAAA,EAAE,KAAKgB,GAAUA,EAAO,OAAO,CAAA,CACvH,EAEKsC,GAAoBxC,EAAS,IAC1B,OAAO,OAAOC,EAAwB,KAAK,EAAE,KAAeC,GAAAA,EAAO,OAAS,CAAC,GAAKT,EAAe,QAAU,CACnH,EAEKgD,GAAcC,GAAsB,OAClC,MAAAC,EAAUD,EAAQ,IAAIE,GAAMC,EAAa,CAAE,GAAAD,CAAQ,CAAA,CAAC,IACtDpC,EAAAtB,EAAM,YAAN,YAAAsB,EAAiB,iBAAkB,UAAYmC,EAAQ,OAAS,IAClErD,EAAc,MAAQ,CAACqD,EAAQ,GAAG,CAAC,CAAE,GAEzBrD,EAAA,MAAM,KAAK,GAAGqD,CAAO,EACnCrD,EAAc,MAAQ,MAAM,KAAK,IAAI,IAAIA,EAAc,KAAK,CAAC,CAAA,EAGzDwD,GAAaC,GAAqB,SAClCvC,EAAAtB,EAAM,YAAN,YAAAsB,EAAiB,iBAAkB,SACvBlB,EAAA,MAAQ,CAACyD,CAAQ,GAEjBzD,EAAA,MAAM,KAAKyD,CAAQ,EACjCzD,EAAc,MAAQ,MAAM,KAAK,IAAI,IAAIA,EAAc,KAAK,CAAC,GAE1D0D,EAAA,gBAAiB7C,GAAiB,CAAA,EAGnC8C,GAAeF,GAAqB,CACxCzD,EAAc,MAAQA,EAAc,MAAM,OAAOc,GAASA,IAAU2C,CAAQ,CAAA,EAGxEF,EAAgBjB,GAAyB,CACvC,MAAAsB,EAAMhE,EAAM,KAAK,aAAeiE,EAAE,KAAOvB,EAAK,EAAE,EACtD,GAAIsB,IAAQ,GAAI,MAAM,IAAI,MAAM,gBAAgBtB,EAAK,EAAE,YAAY,EAC5D,OAAAsB,CAAA,EAGHE,GAAkB,IAAM,CAC5B9D,EAAc,MAAQ,EAAC,EAGnB+D,GAAc,IAAMnE,EAAM,KAE1BoE,GAAmB,IAAM,CAC7B9D,EAAgB,MAAQ,EAAA,EAGpB+D,GAAmB3B,GAAyB,CAChDrC,EAAmB,MAAQqC,CAAA,EAGvB4B,EAAmB,IAAM,CAC7BjE,EAAmB,MAAQ,IAAA,EAGvBkE,GAAuBzD,EAAsF,IAAM,OACnH,OAAAQ,EAAAjB,EAAmB,QAAnB,MAAAiB,EAA0B,QACrBjB,EAAmB,MAAM,QAAQ,QAEjC,CACL,MAAO,SACP,QAASiE,CAAA,CAEb,CACD,EACKE,GAAyB1D,EAAkG,IAAM,aACjI,OAAAU,GAAAF,EAAAjB,EAAmB,QAAnB,YAAAiB,EAA0B,UAA1B,MAAAE,EAAmC,UAC9BnB,EAAmB,MAAM,QAAQ,WAC/BoB,GAAAC,EAAArB,EAAmB,QAAnB,YAAAqB,EAA0B,UAA1B,MAAAD,EAAmC,QACrC,CACL,MAAO,SACP,QAAS6C,CAAA,EAGJ,MACT,CACD,EACKG,GAAwB3D,EAAkG,IAAM,SAChI,IAAAU,GAAAF,EAAAjB,EAAmB,QAAnB,YAAAiB,EAA0B,UAA1B,MAAAE,EAAmC,UAC9B,MAAA,CACL,MAAO,SACP,QAAS8C,CAAA,CAIb,CACD,EAEKI,GAAe,IAAM,CACzBpE,EAAgB,MAAQ,GACxBS,EAAwB,MAAQ,CAAE,GAAGsB,EAA6B,KAAM,EACrDzB,GAAA,EAGf+D,GAAe,IAAM,CACzB5D,EAAwB,MAAQ,CAC9B,OAAQ,GACR,KAAM,GACN,SAAU,GACV,aAAc,GACd,YAAa,GACb,OAAQ,GACR,KAAM,EAAA,EAERR,EAAe,MAAQ,EACvB8B,EAA6B,MAAQ,CACnC,OAAQ,GACR,KAAM,GACN,SAAU,GACV,aAAc,GACd,YAAa,GACb,OAAQ,GACR,KAAM,EAAA,EAEWzB,GAAA,EAGfA,EAAqB,IAAM,CAC3BZ,EAAM,QAAQ,SAChB8D,EAAK,kBAAmB,CACtB,WAAY9D,EAAM,QAAQ,WAAaE,EAAO,MAAQ,OACtD,SAAUF,EAAM,QAAQ,UAAYO,EAAe,MAAQ,OAC3D,YAAaQ,EAAwB,KAAA,CACtC,CACH,EAGI+C,EAAOc,GASA,OAAAC,GAAA,CACX,aAAAjC,EACA,WAAAW,GACA,gBAAAW,GACA,YAAAC,GACA,gBAAAlD,EACA,iBAAAqD,CAAA,CACD"}
1
+ {"version":3,"file":"ElMobileTable.vue.esm2.js","sources":["../../src/table/ElMobileTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ElListItem, { ElListItemProps } from '@/ElListItem.vue';\nimport ElInputText from '@/forms/ElInputText.vue';\nimport ElIconButton from '@/ElIconButton.vue';\nimport ElButton, { ElButtonProps } from '@/ElButton.vue';\nimport { computed, ref, watch } from 'vue';\nimport ElTag, { ElTagColor } from '@/ElTag.vue';\nimport ElModal from '@/ElModal.vue';\nimport ElInputSelect from '@/forms/ElInputSelect.vue';\nimport ElInputDate from '@/forms/ElInputDate.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport CustomTransition from '@/_CustomTransition.vue';\nimport ElSpinner from '@/ElSpinner.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport { OptionType } from '@/types';\n\nexport type SelectOptions = OptionType[];\n\nexport type MobileTableFiltersStatus = {\n freeSearch?: string;\n fromDate?: number;\n multiSelect: {\n mainText?: string;\n secondaryRow?: string;\n tertiaryRow?: string;\n tags?: string;\n time?: string;\n amount?: string;\n avatar?: string;\n };\n};\n\nexport type MobileTableFilter = {\n freeSearch?: {\n placeholder?: string;\n filterOn: ('mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar')[];\n initialValue?: string;\n };\n multiValue?: {\n mainText?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n secondaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tertiaryRow?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n amount?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n tags?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n time?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n avatar?: {\n enabled: boolean;\n label: string;\n selectOptions?: SelectOptions;\n initialValue?: string;\n };\n };\n dateRange?: {\n enabled: boolean;\n label: string;\n initialValue?: number;\n placeholder?: string;\n };\n resetButton?: boolean;\n // if true filters won't be applied by the table (used for server side table)\n managed?: boolean;\n};\n\nexport type MobileTableRow = Omit<ElListItemProps, 'color'> & {\n id: string;\n rowNotSelectable?: boolean;\n relatedObject?: any;\n clickAction?: (payload: PointerEvent) => void;\n actions?: {\n primary: InstanceType<typeof ElButton>['$props'];\n secondary?: InstanceType<typeof ElButton>['$props'];\n };\n sortableAndFilterableValue?: string;\n details: {\n label: string;\n value:\n | { type?: 'default'; text: string }\n | { type: 'tag'; text: string; color?: ElTagColor }\n | { type: 'avatar'; label?: string; picture?: string };\n }[];\n};\n\nexport interface ElMobileTableProps {\n color: 'primary' | 'secondary';\n filters: MobileTableFilter;\n loading?: boolean;\n preventDefaultItemClick?: boolean;\n selection?: {\n enabled: boolean;\n selectionMode?: 'single' | 'multiple'; // defaults to multiple\n destructiveAction?: {\n enabled: boolean;\n button: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label?: (count: number) => string };\n };\n bulkActionButton: Omit<ElButtonProps, 'variant' | 'type' | 'label' | 'error' | 'onClick'> & { label: (count: number) => string };\n selectedLabel?: (selectionCount: number) => string;\n cancelText?: (selectionCount: number) => string;\n };\n sortBy?: {\n on: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'tags' | 'time' | 'avatar';\n order: 'asc' | 'desc';\n };\n itemsCountLabel?: (count: number) => string;\n noItemsCountLabel?: boolean;\n data: MobileTableRow[];\n}\n\nconst props = defineProps<ElMobileTableProps>();\n\nconst search = ref<string>('');\nconst selectedItems = ref<number[]>([]);\nconst selectedItemToShow = ref<MobileTableRow | null>(null);\nconst filterModalOpen = ref(false);\nconst filterDateFrom = ref<number>(0);\nconst managedSearchDebounceTimeout = ref<NodeJS.Timeout | undefined>(undefined);\n\nwatch(search, (newValue, oldValue) => {\n if (managedSearchDebounceTimeout.value) {\n clearTimeout(managedSearchDebounceTimeout.value);\n }\n managedSearchDebounceTimeout.value = setTimeout(() => {\n if (oldValue !== newValue) {\n emitFiltersUpdated();\n }\n }, 500);\n});\n\nconst filtersAreApplied = computed(() => {\n return (\n search.value.trim().length > 0 ||\n Object.values(multiValueFiltersValues.value).some(filter => filter && filter.trim().length > 0) ||\n filterDateFrom.value !== 0\n );\n});\n\nconst getSelectedRows = () => selectedItems.value.map(index => props.data[index]);\n\nconst matchesSearch = (value: string): boolean => {\n const searchText = search.value?.trim();\n if (!searchText) return true;\n return value.split(' ').some(part => part.toLowerCase().includes(searchText.toLowerCase()));\n};\n\nconst multiValueFiltersValues = ref<MobileTableFiltersStatus['multiSelect']>({\n avatar: props.filters.multiValue?.avatar?.initialValue ?? '',\n mainText: props.filters.multiValue?.mainText?.initialValue ?? '',\n secondaryRow: props.filters.multiValue?.secondaryRow?.initialValue ?? '',\n tertiaryRow: props.filters.multiValue?.tertiaryRow?.initialValue ?? '',\n amount: props.filters.multiValue?.amount?.initialValue ?? '',\n tags: props.filters.multiValue?.tags?.initialValue ?? '',\n time: props.filters.multiValue?.time?.initialValue ?? '',\n});\n\nconst multiValueFiltersModalValues = ref<MobileTableFiltersStatus['multiSelect']>({\n ...multiValueFiltersValues.value,\n});\n\nconst makeArrUnique = (arr: string[]): string[] => Array.from(new Set(arr));\nconst isDefined = <T,>(value: T | undefined): value is T => value !== undefined;\n\nconst multiValueAvailabeOptions = computed<{\n mainText: SelectOptions;\n secondaryRow: SelectOptions;\n tertiaryRow: SelectOptions;\n amount: SelectOptions;\n tags: SelectOptions;\n time: SelectOptions;\n avatar: SelectOptions;\n}>(() => {\n return {\n mainText: props.filters.multiValue?.mainText\n ? props.filters.multiValue.mainText.selectOptions ??\n makeArrUnique(props.data.map(item => item.mainText.label)).map(value => ({ value, label: value }))\n : [],\n secondaryRow: props.filters.multiValue?.secondaryRow\n ? props.filters.multiValue.secondaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.secondaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tertiaryRow: props.filters.multiValue?.tertiaryRow\n ? props.filters.multiValue.tertiaryRow.selectOptions ??\n makeArrUnique(props.data.map(item => item.tertiaryRow).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n amount: props.filters.multiValue?.amount\n ? props.filters.multiValue.amount.selectOptions ??\n makeArrUnique(props.data.map(item => item.amount).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n tags: props.filters.multiValue?.tags\n ? props.filters.multiValue.tags.selectOptions ??\n makeArrUnique(props.data.flatMap(item => (item.tags ?? []).map(tag => tag.text).filter(isDefined))).map(value => ({\n value,\n label: value,\n }))\n : [],\n time: props.filters.multiValue?.time\n ? props.filters.multiValue.time.selectOptions ??\n makeArrUnique(props.data.map(item => item.time).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n avatar: props.filters.multiValue?.avatar\n ? props.filters.multiValue.avatar.selectOptions ??\n makeArrUnique(props.data.map(item => item.avatar?.label).filter(isDefined)).map(value => ({ value, label: value }))\n : [],\n };\n});\n\nconst filteredData = computed(() => {\n let data = props.data.slice();\n if (props.filters.managed) return data;\n if (props.filters.freeSearch && search.value.trim().length > 0) {\n const searchParams = props.filters.freeSearch;\n data = data.filter(item =>\n searchParams.filterOn.some(filter => {\n switch (filter) {\n case 'avatar':\n return item.avatar && item.avatar.label && matchesSearch(item.avatar.label);\n case 'time':\n return item.time && matchesSearch(item.time);\n case 'mainText':\n return item.mainText && matchesSearch(item.mainText.label);\n case 'secondaryRow':\n return item.secondaryRow && matchesSearch(item.secondaryRow);\n case 'tertiaryRow':\n return item.tertiaryRow && matchesSearch(item.tertiaryRow);\n case 'amount':\n return item.amount && matchesSearch(item.amount);\n case 'tags':\n return item.tags && item.tags.some(tag => matchesSearch(tag.text));\n }\n }),\n );\n }\n\n if (props.filters.multiValue) {\n if (props.filters.multiValue.mainText) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.mainText ||\n multiValueFiltersValues.value.mainText.length === 0 ||\n multiValueFiltersValues.value.mainText.includes(item.sortableAndFilterableValue ?? item.mainText.label),\n );\n }\n if (props.filters.multiValue.secondaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.secondaryRow ||\n multiValueFiltersValues.value.secondaryRow.length === 0 ||\n multiValueFiltersValues.value.secondaryRow.includes(item.sortableAndFilterableValue ?? item.secondaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.tertiaryRow) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tertiaryRow ||\n multiValueFiltersValues.value.tertiaryRow.length === 0 ||\n multiValueFiltersValues.value.tertiaryRow.includes(item.sortableAndFilterableValue ?? item.tertiaryRow ?? ''),\n );\n }\n if (props.filters.multiValue.amount) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.amount ||\n multiValueFiltersValues.value.amount.length === 0 ||\n multiValueFiltersValues.value.amount.includes(item.sortableAndFilterableValue ?? item.amount ?? ''),\n );\n }\n if (props.filters.multiValue.tags) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.tags ||\n multiValueFiltersValues.value.tags.length === 0 ||\n item.tags?.some(tag => multiValueFiltersValues.value.tags!.includes(tag.text)),\n );\n }\n if (props.filters.multiValue.avatar) {\n data = data.filter(\n item =>\n !multiValueFiltersValues.value.avatar ||\n multiValueFiltersValues.value.avatar.length === 0 ||\n multiValueFiltersValues.value.avatar.includes(item.sortableAndFilterableValue ?? item.avatar?.label ?? ''),\n );\n }\n }\n\n if (props.filters.dateRange?.enabled) {\n data = data.filter(item => {\n if (!filterDateFrom.value) return true;\n return item.time && new Date(item.time).getTime() >= filterDateFrom.value;\n });\n }\n\n if (props.sortBy) {\n data = data.sort((a, b) => {\n let result = 0;\n if (a.sortableAndFilterableValue && b.sortableAndFilterableValue) {\n result = a.sortableAndFilterableValue.localeCompare(b.sortableAndFilterableValue);\n } else {\n switch (props.sortBy!.on) {\n case 'mainText':\n result = a.mainText.label.localeCompare(b.mainText.label);\n break;\n case 'avatar':\n result = (a.avatar?.label ?? '').localeCompare(b.avatar?.label ?? '');\n break;\n case 'time':\n case 'secondaryRow':\n case 'tertiaryRow':\n result = (a[props.sortBy!.on] ?? '').localeCompare(b[props.sortBy!.on] ?? '');\n break;\n case 'amount':\n const numA = parseFloat(a.amount ?? '0');\n const numB = parseFloat(b.amount ?? '0');\n result = numA - numB;\n break;\n case 'tags':\n result = (a.tags?.map(tag => tag.text).join('') ?? '').localeCompare(b.tags?.map(tag => tag.text).join('') ?? '');\n break;\n }\n }\n if (props.sortBy?.order === 'desc') {\n result *= -1;\n }\n return result;\n });\n }\n\n return data;\n});\n\nconst enabledSelectFilters = computed(() => {\n return Object.fromEntries(Object.entries(props.filters.multiValue ?? {}).filter(([_, filter]) => filter.enabled));\n});\n\nconst showFiltersButton = computed(() => {\n return props.filters.dateRange?.enabled || Object.values(props.filters.multiValue ?? {}).some(filter => filter.enabled);\n});\n\nconst hasFiltersApplied = computed(() => {\n return Object.values(multiValueFiltersValues.value).some(filter => filter.length > 0) || filterDateFrom.value !== 0;\n});\n\nconst selectRows = (rowsIds: string[]) => {\n const indexes = rowsIds.map(id => getItemIndex({ id: id }));\n if (props.selection?.selectionMode === 'single' && indexes.length > 0) {\n selectedItems.value = [indexes.at(0)!];\n }\n selectedItems.value.push(...indexes);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n};\n\nconst selectRow = (rowIndex: number) => {\n if (props.selection?.selectionMode === 'single') {\n selectedItems.value = [rowIndex];\n } else {\n selectedItems.value.push(rowIndex);\n selectedItems.value = Array.from(new Set(selectedItems.value));\n }\n emit('rows-selected', getSelectedRows());\n};\n\nconst deselectRow = (rowIndex: number) => {\n selectedItems.value = selectedItems.value.filter(index => index !== rowIndex);\n};\n\nconst getItemIndex = (item: { id: string }) => {\n const idx = props.data.findIndex(i => i.id === item.id);\n if (idx === -1) throw new Error(`Item with id ${item.id} not found`);\n return idx;\n};\n\nconst unselectAllRows = () => {\n selectedItems.value = [];\n};\n\nconst getDataRows = () => props.data;\n\nconst openFiltersModal = () => {\n filterModalOpen.value = true;\n};\n\nconst showItemDetails = (item: MobileTableRow) => {\n selectedItemToShow.value = item;\n};\n\nconst closeItemDetails = () => {\n selectedItemToShow.value = null;\n};\n\nconst detailsPrimaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'>>(() => {\n if (selectedItemToShow.value?.actions) {\n return selectedItemToShow.value.actions.primary;\n } else {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n }\n});\nconst detailsSecondaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return selectedItemToShow.value.actions.secondary;\n } else if (selectedItemToShow.value?.actions?.primary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\nconst detailsTertiaryAction = computed<Omit<InstanceType<typeof ElButton>['$props'], 'error' | 'size' | 'variant'> | undefined>(() => {\n if (selectedItemToShow.value?.actions?.secondary) {\n return {\n label: 'Chiudi',\n onClick: closeItemDetails,\n };\n } else {\n return undefined;\n }\n});\n\nconst applyFilters = () => {\n filterModalOpen.value = false;\n multiValueFiltersValues.value = { ...multiValueFiltersModalValues.value };\n emitFiltersUpdated();\n};\n\nconst resetFilters = () => {\n multiValueFiltersValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n filterDateFrom.value = 0;\n multiValueFiltersModalValues.value = {\n avatar: '',\n time: '',\n mainText: '',\n secondaryRow: '',\n tertiaryRow: '',\n amount: '',\n tags: '',\n };\n emitFiltersUpdated();\n};\n\nconst emitFiltersUpdated = () => {\n if (props.filters.managed) {\n emit('filters-updated', {\n freeSearch: props.filters.freeSearch ? search.value : undefined,\n fromDate: props.filters.dateRange ? filterDateFrom.value : undefined,\n multiSelect: multiValueFiltersValues.value,\n });\n }\n};\n\nconst emit = defineEmits<{\n (event: 'destructive:click', selectedItems: MobileTableRow[]): void;\n (event: 'bulk:click', selectedItems: MobileTableRow[]): void;\n (event: 'item:click', item: MobileTableRow): void;\n (event: 'selection:exit'): void;\n (event: 'rows-selected', selectedItems: MobileTableRow[]): void;\n (event: 'filters-updated', filters: MobileTableFiltersStatus): void;\n}>();\n\ndefineExpose({\n filteredData,\n selectRows,\n unselectAllRows,\n getDataRows,\n getSelectedRows,\n closeItemDetails,\n});\n</script>\n\n<template>\n <div class=\"bg-neutral-surface flex flex-col px-4 pt-2 h-full min-w-80 overflow-auto\">\n <div v-if=\"!props.selection?.enabled\" class=\"flex flex-row gap-4 pb-2\">\n <div class=\"flex-grow\">\n <ElInputText\n v-if=\"props.filters.freeSearch\"\n v-model=\"search\"\n :placeholder=\"props.filters.freeSearch.placeholder ?? 'Cerca'\"\n :leading-icon=\"{ name: 'MagnifyingGlassIcon' }\"\n />\n </div>\n <ElIconButton\n v-if=\"showFiltersButton\"\n :badge=\"hasFiltersApplied\"\n :badge-color=\"props.color\"\n :icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n :class=\"\n props.color === 'primary'\n ? 'text-primary hover:text-primary-hover hover:bg-primary-light-hover active:bg-primary-light-active'\n : 'text-secondary hover:text-secondary-hover hover:bg-secondary-light-hover active:bg-secondary-light-active'\n \"\n @click=\"openFiltersModal\"\n />\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"py-3 px-4 border-b border-b-neutral-surface grid grid-cols-3\">\n <div class=\"flex flex-row justify-start items-center\">\n <ElButton\n error\n variant=\"tertiary\"\n type=\"button\"\n :label=\"`Elimina (${selectedItems.length})`\"\n @click=\"$emit('destructive:click', getSelectedRows())\"\n />\n </div>\n <div class=\"flex flex-row justify-center items-center\">\n <span class=\"text-neutral-darker font-normal text-sm\">\n <template v-if=\"props.selection.selectedLabel\">\n {{ props.selection.selectedLabel(selectedItems.length) }}\n </template>\n <template v-else-if=\"props.selection.selectionMode !== 'single'\">{{ selectedItems.length }} Selezionati</template>\n </span>\n </div>\n </div>\n <slot />\n\n <CustomTransition name=\"fade\">\n <div class=\"relative\">\n <ElSpinner\n v-if=\"props.loading\"\n label=\"Caricamento dati...\"\n class=\"p-4 absolute bg-neutral-surface w-full\"\n :extra-loading-msg-after-seconds=\"3\"\n />\n </div>\n </CustomTransition>\n\n <div v-if=\"filtersAreApplied && noItemsCountLabel !== true && filteredData.length !== 0\" class=\"pt-3 px-4\">\n <span class=\"font-semibold text-neutral-darker\">{{\n props.itemsCountLabel ? props.itemsCountLabel(filteredData.length) : `${filteredData.length} risultati per la tua ricerca`\n }}</span>\n </div>\n\n <ul v-if=\"filteredData.length > 0\" class=\"m-0 flex flex-col flex-grow overflow-y-auto h-full\">\n <ElListItem\n v-for=\"item in filteredData\"\n v-bind=\"item\"\n :key=\"item.id\"\n :color=\"props.color\"\n :model-value=\"props.selection?.enabled ? selectedItems.includes(getItemIndex(item)) : undefined\"\n @update:model-value=\"v => (v ? selectRow(getItemIndex(item)) : deselectRow(getItemIndex(item)))\"\n @click=\"\n () => {\n $emit('item:click', item);\n if (!props.selection?.enabled && !props.preventDefaultItemClick) {\n showItemDetails(item);\n }\n }\n \"\n />\n <slot name=\"after-list\" />\n </ul>\n\n <div v-else-if=\"!props.loading && filteredData.length === 0\" class=\"flex flex-grow flex-col justify-start items-center pt-8 px-8 gap-3\">\n <ElIcon\n name=\"MagnifyingGlassIcon\"\n class=\"h-8 w-8\"\n :class=\"props.color === 'primary' ? 'text-primary-active' : 'text-secondary-active'\"\n />\n <div class=\"flex flex-col gap-1 text-center\">\n <span class=\"text-lg font-semibold text-neutral-darker\">Nessun risultato</span>\n <p class=\"text-neutral-lighter text-sm\">Non abbiamo trovato risultati per questa ricerca. Prova con altre parole chiave.</p>\n </div>\n </div>\n\n <div v-if=\"props.selection?.enabled\" class=\"border-t border-t-neutral-surface flex flex-row justify-between py-5 px-4\">\n <ElButton size=\"l\" variant=\"tertiary\" label=\"Annulla\" @click=\"$emit('selection:exit')\" />\n <ElButton\n v-if=\"props.selection?.bulkActionButton\"\n :variant=\"props.color\"\n :label=\"props.selection.bulkActionButton.label(selectedItems.length)\"\n :disabled=\"selectedItems.length === 0\"\n size=\"l\"\n @click=\"\n $emit(\n 'bulk:click',\n selectedItems.map(index => props.data[index]),\n )\n \"\n />\n </div>\n </div>\n\n <ElModal\n size=\"xs\"\n :is-open=\"selectedItemToShow !== null\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Dettaglio\"\n :color=\"props.color\"\n :primary-action=\"detailsPrimaryAction\"\n :secondary-action=\"detailsSecondaryAction\"\n :tertiary-action=\"detailsTertiaryAction\"\n @closed=\"closeItemDetails\"\n >\n <ul v-if=\"selectedItemToShow\" class=\"m-0 flex flex-col gap-5\">\n <li v-for=\"(item, i) in selectedItemToShow.details\" :key=\"i\" class=\"flex flex-col gap-1\">\n <span class=\"text-neutral-lighter\">{{ item.label }}</span>\n <span v-if=\"item.value.type === 'default'\">{{ item.value.text }}</span>\n <div v-else-if=\"item.value.type === 'tag'\">\n <ElTag :text=\"item.value.text\" :color=\"item.value.color\" />\n </div>\n <div v-else-if=\"item.value.type === 'avatar'\">\n <ElAvatar :label=\"item.value.label\" :picture=\"item.value.picture\" size=\"sm\" />\n </div>\n </li>\n </ul>\n </ElModal>\n\n <ElModal\n v-model:is-open=\"filterModalOpen\"\n size=\"xs\"\n :header-icon=\"{ name: 'AdjustmentsVerticalIcon' }\"\n title=\"Filtri\"\n :color=\"props.color\"\n :primary-action=\"{\n label: 'Applica filtri',\n onClick: applyFilters,\n }\"\n :secondary-action=\"props.filters.resetButton ? { label: 'Reset', onClick: resetFilters } : undefined\"\n :tertiary-action=\"{\n label: 'Chiudi',\n onClick: () => {\n filterModalOpen = false;\n },\n }\"\n >\n <div class=\"flex flex-col gap-6\">\n <ElInputSelect\n v-for=\"(filter, key) in enabledSelectFilters\"\n :key=\"key\"\n v-model=\"multiValueFiltersModalValues[key as keyof typeof multiValueFiltersModalValues]\"\n :options=\"multiValueAvailabeOptions[key as keyof typeof multiValueAvailabeOptions]\"\n :label=\"filter.label\"\n />\n <ElInputDate\n v-if=\"props.filters.dateRange?.enabled\"\n v-model=\"filterDateFrom\"\n :label=\"props.filters.dateRange.label\"\n :placeholder=\"props.filters.dateRange.placeholder\"\n hidden-error-message\n />\n </div>\n </ElModal>\n</template>\n"],"names":["props","__props","search","ref","selectedItems","selectedItemToShow","filterModalOpen","filterDateFrom","managedSearchDebounceTimeout","watch","newValue","oldValue","emitFiltersUpdated","filtersAreApplied","computed","multiValueFiltersValues","filter","getSelectedRows","index","matchesSearch","value","searchText","_a","part","_b","_d","_c","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","multiValueFiltersModalValues","makeArrUnique","arr","isDefined","multiValueAvailabeOptions","item","tag","filteredData","data","searchParams","b","result","numA","numB","enabledSelectFilters","_","showFiltersButton","hasFiltersApplied","selectRows","rowsIds","indexes","id","getItemIndex","selectRow","rowIndex","emit","deselectRow","idx","i","unselectAllRows","getDataRows","openFiltersModal","showItemDetails","closeItemDetails","detailsPrimaryAction","detailsSecondaryAction","detailsTertiaryAction","applyFilters","resetFilters","__emit","__expose"],"mappings":"+1EAyIA,MAAMA,EAAQC,GAERC,EAASC,EAAY,EAAE,EACvBC,EAAgBD,EAAc,CAAA,CAAE,EAChCE,EAAqBF,EAA2B,IAAI,EACpDG,EAAkBH,EAAI,EAAK,EAC3BI,EAAiBJ,EAAY,CAAC,EAC9BK,EAA+BL,EAAgC,MAAS,EAExEM,GAAAP,EAAQ,CAACQ,EAAUC,IAAa,CAChCH,EAA6B,OAC/B,aAAaA,EAA6B,KAAK,EAEpBA,EAAA,MAAQ,WAAW,IAAM,CAChDG,IAAaD,GACIE,KAEpB,GAAG,CAAA,CACP,EAEK,MAAAC,GAAoBC,EAAS,IAE/BZ,EAAO,MAAM,OAAO,OAAS,GAC7B,OAAO,OAAOa,EAAwB,KAAK,EAAE,KAAKC,GAAUA,GAAUA,EAAO,OAAO,OAAS,CAAC,GAC9FT,EAAe,QAAU,CAE5B,EAEKU,EAAkB,IAAMb,EAAc,MAAM,IAAac,GAAAlB,EAAM,KAAKkB,CAAK,CAAC,EAE1EC,EAAiBC,GAA2B,OAC1C,MAAAC,GAAaC,EAAApB,EAAO,QAAP,YAAAoB,EAAc,OACjC,OAAKD,EACED,EAAM,MAAM,GAAG,EAAE,KAAKG,GAAQA,EAAK,YAAc,EAAA,SAASF,EAAW,YAAA,CAAa,CAAC,EADlE,EACkE,EAGtFN,EAA0BZ,EAA6C,CAC3E,SAAQqB,GAAAF,EAAAtB,EAAM,QAAQ,aAAd,YAAAsB,EAA0B,SAA1B,YAAAE,EAAkC,eAAgB,GAC1D,WAAUC,GAAAC,EAAA1B,EAAM,QAAQ,aAAd,YAAA0B,EAA0B,WAA1B,YAAAD,EAAoC,eAAgB,GAC9D,eAAcE,GAAAC,EAAA5B,EAAM,QAAQ,aAAd,YAAA4B,EAA0B,eAA1B,YAAAD,EAAwC,eAAgB,GACtE,cAAaE,GAAAC,EAAA9B,EAAM,QAAQ,aAAd,YAAA8B,EAA0B,cAA1B,YAAAD,EAAuC,eAAgB,GACpE,SAAQE,GAAAC,EAAAhC,EAAM,QAAQ,aAAd,YAAAgC,EAA0B,SAA1B,YAAAD,EAAkC,eAAgB,GAC1D,OAAME,GAAAC,EAAAlC,EAAM,QAAQ,aAAd,YAAAkC,EAA0B,OAA1B,YAAAD,EAAgC,eAAgB,GACtD,OAAME,IAAAC,GAAApC,EAAM,QAAQ,aAAd,YAAAoC,GAA0B,OAA1B,YAAAD,GAAgC,eAAgB,EAAA,CACvD,EAEKE,EAA+BlC,EAA6C,CAChF,GAAGY,EAAwB,KAAA,CAC5B,EAEKuB,EAAiBC,GAA4B,MAAM,KAAK,IAAI,IAAIA,CAAG,CAAC,EACpEC,EAAiBpB,GAAqCA,IAAU,OAEhEqB,GAA4B3B,EAQ/B,IAAM,mBACA,MAAA,CACL,UAAUQ,EAAAtB,EAAM,QAAQ,aAAd,MAAAsB,EAA0B,SAChCtB,EAAM,QAAQ,WAAW,SAAS,eAClCsC,EAActC,EAAM,KAAK,IAAY0C,GAAAA,EAAK,SAAS,KAAK,CAAC,EAAE,IAAItB,IAAU,CAAE,MAAAA,EAAO,MAAOA,CAAQ,EAAA,EACjG,CAAC,EACL,cAAcI,EAAAxB,EAAM,QAAQ,aAAd,MAAAwB,EAA0B,aACpCxB,EAAM,QAAQ,WAAW,aAAa,eACtCsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,YAAY,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EACjH,CAAC,EACL,aAAaM,EAAA1B,EAAM,QAAQ,aAAd,MAAA0B,EAA0B,YACnC1B,EAAM,QAAQ,WAAW,YAAY,eACrCsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,WAAW,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EAChH,CAAC,EACL,QAAQK,EAAAzB,EAAM,QAAQ,aAAd,MAAAyB,EAA0B,OAC9BzB,EAAM,QAAQ,WAAW,OAAO,eAChCsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,MAAM,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EAC3G,CAAC,EACL,MAAMQ,EAAA5B,EAAM,QAAQ,aAAd,MAAA4B,EAA0B,KAC5B5B,EAAM,QAAQ,WAAW,KAAK,eAC9BsC,EAActC,EAAM,KAAK,QAAQ0C,IAASA,EAAK,MAAQ,CAAA,GAAI,IAAIC,GAAOA,EAAI,IAAI,EAAE,OAAOH,CAAS,CAAC,CAAC,EAAE,IAAcpB,IAAA,CAChH,MAAAA,EACA,MAAOA,CACT,EAAE,EACF,CAAC,EACL,MAAMO,EAAA3B,EAAM,QAAQ,aAAd,MAAA2B,EAA0B,KAC5B3B,EAAM,QAAQ,WAAW,KAAK,eAC9BsC,EAActC,EAAM,KAAK,IAAI0C,GAAQA,EAAK,IAAI,EAAE,OAAOF,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EACzG,CAAC,EACL,QAAQU,EAAA9B,EAAM,QAAQ,aAAd,MAAA8B,EAA0B,OAC9B9B,EAAM,QAAQ,WAAW,OAAO,eAChCsC,EAActC,EAAM,KAAK,IAAI0C,GAAA,OAAQ,OAAApB,EAAAoB,EAAK,SAAL,YAAApB,EAAa,MAAK,EAAE,OAAOkB,CAAS,CAAC,EAAE,IAAcpB,IAAA,CAAE,MAAAA,EAAO,MAAOA,CAAM,EAAE,EAClH,CAAC,CAAA,CACP,CACD,EAEKwB,EAAe9B,EAAS,IAAM,OAC9B,IAAA+B,EAAO7C,EAAM,KAAK,MAAM,EAC5B,GAAIA,EAAM,QAAQ,QAAgB,OAAA6C,EAC9B,GAAA7C,EAAM,QAAQ,YAAcE,EAAO,MAAM,KAAK,EAAE,OAAS,EAAG,CACxD,MAAA4C,EAAe9C,EAAM,QAAQ,WACnC6C,EAAOA,EAAK,OACVH,GAAAI,EAAa,SAAS,KAAe9B,GAAA,CACnC,OAAQA,EAAQ,CACd,IAAK,SACI,OAAA0B,EAAK,QAAUA,EAAK,OAAO,OAASvB,EAAcuB,EAAK,OAAO,KAAK,EAC5E,IAAK,OACH,OAAOA,EAAK,MAAQvB,EAAcuB,EAAK,IAAI,EAC7C,IAAK,WACH,OAAOA,EAAK,UAAYvB,EAAcuB,EAAK,SAAS,KAAK,EAC3D,IAAK,eACH,OAAOA,EAAK,cAAgBvB,EAAcuB,EAAK,YAAY,EAC7D,IAAK,cACH,OAAOA,EAAK,aAAevB,EAAcuB,EAAK,WAAW,EAC3D,IAAK,SACH,OAAOA,EAAK,QAAUvB,EAAcuB,EAAK,MAAM,EACjD,IAAK,OACI,OAAAA,EAAK,MAAQA,EAAK,KAAK,KAAYC,GAAAxB,EAAcwB,EAAI,IAAI,CAAC,CACrE,CAAA,CACD,CAAA,CAEL,CAEI,OAAA3C,EAAM,QAAQ,aACZA,EAAM,QAAQ,WAAW,WAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,UAC/BA,EAAwB,MAAM,SAAS,SAAW,GAClDA,EAAwB,MAAM,SAAS,SAAS2B,EAAK,4BAA8BA,EAAK,SAAS,KAAK,CAAA,GAGxG1C,EAAM,QAAQ,WAAW,eAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,cAC/BA,EAAwB,MAAM,aAAa,SAAW,GACtDA,EAAwB,MAAM,aAAa,SAAS2B,EAAK,4BAA8BA,EAAK,cAAgB,EAAE,CAAA,GAGhH1C,EAAM,QAAQ,WAAW,cAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,aAC/BA,EAAwB,MAAM,YAAY,SAAW,GACrDA,EAAwB,MAAM,YAAY,SAAS2B,EAAK,4BAA8BA,EAAK,aAAe,EAAE,CAAA,GAG9G1C,EAAM,QAAQ,WAAW,SAC3B6C,EAAOA,EAAK,UAER,CAAC9B,EAAwB,MAAM,QAC/BA,EAAwB,MAAM,OAAO,SAAW,GAChDA,EAAwB,MAAM,OAAO,SAAS2B,EAAK,4BAA8BA,EAAK,QAAU,EAAE,CAAA,GAGpG1C,EAAM,QAAQ,WAAW,OAC3B6C,EAAOA,EAAK,OACVH,GAAA,OACE,OAAC3B,EAAwB,MAAM,MAC/BA,EAAwB,MAAM,KAAK,SAAW,KAC9CO,EAAAoB,EAAK,OAAL,YAAApB,EAAW,QAAYP,EAAwB,MAAM,KAAM,SAAS4B,EAAI,IAAI,IAAC,GAG/E3C,EAAM,QAAQ,WAAW,SAC3B6C,EAAOA,EAAK,iBAER,OAAC9B,EAAwB,MAAM,QAC/BA,EAAwB,MAAM,OAAO,SAAW,GAChDA,EAAwB,MAAM,OAAO,SAAS2B,EAAK,8BAA8BpB,EAAAoB,EAAK,SAAL,YAAApB,EAAa,QAAS,EAAE,EAAA,KAK7GA,EAAAtB,EAAM,QAAQ,YAAd,MAAAsB,EAAyB,UACpBuB,EAAAA,EAAK,OAAeH,GACpBnC,EAAe,MACbmC,EAAK,MAAQ,IAAI,KAAKA,EAAK,IAAI,EAAE,QAAQ,GAAKnC,EAAe,MADlC,EAEnC,GAGCP,EAAM,SACR6C,EAAOA,EAAK,KAAK,CAAC,EAAGE,IAAM,eACzB,IAAIC,EAAS,EACT,GAAA,EAAE,4BAA8BD,EAAE,2BACpCC,EAAS,EAAE,2BAA2B,cAAcD,EAAE,0BAA0B,MAExE,QAAA/C,EAAM,OAAQ,GAAI,CACxB,IAAK,WACHgD,EAAS,EAAE,SAAS,MAAM,cAAcD,EAAE,SAAS,KAAK,EACxD,MACF,IAAK,SACOC,KAAA1B,EAAA,EAAE,SAAF,YAAAA,EAAU,QAAS,IAAI,gBAAcE,EAAAuB,EAAE,SAAF,YAAAvB,EAAU,QAAS,EAAE,EACpE,MACF,IAAK,OACL,IAAK,eACL,IAAK,cACHwB,GAAU,EAAEhD,EAAM,OAAQ,EAAE,GAAK,IAAI,cAAc+C,EAAE/C,EAAM,OAAQ,EAAE,GAAK,EAAE,EAC5E,MACF,IAAK,SACH,MAAMiD,GAAO,WAAW,EAAE,QAAU,GAAG,EACjCC,GAAO,WAAWH,EAAE,QAAU,GAAG,EACvCC,EAASC,GAAOC,GAChB,MACF,IAAK,OACOF,KAAAtB,EAAA,EAAE,OAAF,YAAAA,EAAQ,IAAIiB,GAAOA,EAAI,MAAM,KAAK,MAAO,IAAI,gBAAclB,EAAAsB,EAAE,OAAF,YAAAtB,EAAQ,IAAWkB,GAAAA,EAAI,MAAM,KAAK,MAAO,EAAE,EAChH,KACJ,CAEE,QAAAf,EAAA5B,EAAM,SAAN,YAAA4B,EAAc,SAAU,SAChBoB,GAAA,IAELA,CAAA,CACR,GAGIH,CAAA,CACR,EAEKM,GAAuBrC,EAAS,IAC7B,OAAO,YAAY,OAAO,QAAQd,EAAM,QAAQ,YAAc,CAAA,CAAE,EAAE,OAAO,CAAC,CAACoD,EAAGpC,CAAM,IAAMA,EAAO,OAAO,CAAC,CACjH,EAEKqC,GAAoBvC,EAAS,IAAM,OACvC,QAAOQ,EAAAtB,EAAM,QAAQ,YAAd,YAAAsB,EAAyB,UAAW,OAAO,OAAOtB,EAAM,QAAQ,YAAc,CAAE,CAAA,EAAE,KAAKgB,GAAUA,EAAO,OAAO,CAAA,CACvH,EAEKsC,GAAoBxC,EAAS,IAC1B,OAAO,OAAOC,EAAwB,KAAK,EAAE,KAAeC,GAAAA,EAAO,OAAS,CAAC,GAAKT,EAAe,QAAU,CACnH,EAEKgD,GAAcC,GAAsB,OAClC,MAAAC,EAAUD,EAAQ,IAAIE,GAAMC,EAAa,CAAE,GAAAD,CAAQ,CAAA,CAAC,IACtDpC,EAAAtB,EAAM,YAAN,YAAAsB,EAAiB,iBAAkB,UAAYmC,EAAQ,OAAS,IAClErD,EAAc,MAAQ,CAACqD,EAAQ,GAAG,CAAC,CAAE,GAEzBrD,EAAA,MAAM,KAAK,GAAGqD,CAAO,EACnCrD,EAAc,MAAQ,MAAM,KAAK,IAAI,IAAIA,EAAc,KAAK,CAAC,CAAA,EAGzDwD,GAAaC,GAAqB,SAClCvC,EAAAtB,EAAM,YAAN,YAAAsB,EAAiB,iBAAkB,SACvBlB,EAAA,MAAQ,CAACyD,CAAQ,GAEjBzD,EAAA,MAAM,KAAKyD,CAAQ,EACjCzD,EAAc,MAAQ,MAAM,KAAK,IAAI,IAAIA,EAAc,KAAK,CAAC,GAE1D0D,EAAA,gBAAiB7C,GAAiB,CAAA,EAGnC8C,GAAeF,GAAqB,CACxCzD,EAAc,MAAQA,EAAc,MAAM,OAAOc,GAASA,IAAU2C,CAAQ,CAAA,EAGxEF,EAAgBjB,GAAyB,CACvC,MAAAsB,EAAMhE,EAAM,KAAK,aAAeiE,EAAE,KAAOvB,EAAK,EAAE,EACtD,GAAIsB,IAAQ,GAAI,MAAM,IAAI,MAAM,gBAAgBtB,EAAK,EAAE,YAAY,EAC5D,OAAAsB,CAAA,EAGHE,GAAkB,IAAM,CAC5B9D,EAAc,MAAQ,EAAC,EAGnB+D,GAAc,IAAMnE,EAAM,KAE1BoE,GAAmB,IAAM,CAC7B9D,EAAgB,MAAQ,EAAA,EAGpB+D,GAAmB3B,GAAyB,CAChDrC,EAAmB,MAAQqC,CAAA,EAGvB4B,EAAmB,IAAM,CAC7BjE,EAAmB,MAAQ,IAAA,EAGvBkE,GAAuBzD,EAAsF,IAAM,OACnH,OAAAQ,EAAAjB,EAAmB,QAAnB,MAAAiB,EAA0B,QACrBjB,EAAmB,MAAM,QAAQ,QAEjC,CACL,MAAO,SACP,QAASiE,CAAA,CAEb,CACD,EACKE,GAAyB1D,EAAkG,IAAM,aACjI,OAAAU,GAAAF,EAAAjB,EAAmB,QAAnB,YAAAiB,EAA0B,UAA1B,MAAAE,EAAmC,UAC9BnB,EAAmB,MAAM,QAAQ,WAC/BoB,GAAAC,EAAArB,EAAmB,QAAnB,YAAAqB,EAA0B,UAA1B,MAAAD,EAAmC,QACrC,CACL,MAAO,SACP,QAAS6C,CAAA,EAGJ,MACT,CACD,EACKG,GAAwB3D,EAAkG,IAAM,SAChI,IAAAU,GAAAF,EAAAjB,EAAmB,QAAnB,YAAAiB,EAA0B,UAA1B,MAAAE,EAAmC,UAC9B,MAAA,CACL,MAAO,SACP,QAAS8C,CAAA,CAIb,CACD,EAEKI,GAAe,IAAM,CACzBpE,EAAgB,MAAQ,GACxBS,EAAwB,MAAQ,CAAE,GAAGsB,EAA6B,KAAM,EACrDzB,GAAA,EAGf+D,GAAe,IAAM,CACzB5D,EAAwB,MAAQ,CAC9B,OAAQ,GACR,KAAM,GACN,SAAU,GACV,aAAc,GACd,YAAa,GACb,OAAQ,GACR,KAAM,EAAA,EAERR,EAAe,MAAQ,EACvB8B,EAA6B,MAAQ,CACnC,OAAQ,GACR,KAAM,GACN,SAAU,GACV,aAAc,GACd,YAAa,GACb,OAAQ,GACR,KAAM,EAAA,EAEWzB,GAAA,EAGfA,EAAqB,IAAM,CAC3BZ,EAAM,QAAQ,SAChB8D,EAAK,kBAAmB,CACtB,WAAY9D,EAAM,QAAQ,WAAaE,EAAO,MAAQ,OACtD,SAAUF,EAAM,QAAQ,UAAYO,EAAe,MAAQ,OAC3D,YAAaQ,EAAwB,KAAA,CACtC,CACH,EAGI+C,EAAOc,GASA,OAAAC,GAAA,CACX,aAAAjC,EACA,WAAAW,GACA,gBAAAW,GACA,YAAAC,GACA,gBAAAlD,EACA,iBAAAqD,CAAA,CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElResponsiveTable.vue.cjs2.js","sources":["../../../src/table/ElResponsiveTable.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { DataRow } from '@/table/commonTypes';\nimport { computed, ref, onMounted, onUnmounted } from 'vue';\nimport ElTableMobile, { ElMobileTableProps, MobileTableFilter, MobileTableRow } from '@/table/ElMobileTable.vue';\nimport ElTable from './ElTable.vue';\nimport { ElTextCellColor, ElTextCellStyle } from '@/ElTextCell.vue';\nimport { ElIconProps } from '@/ElIcon.vue';\nimport ElButton from '@/ElButton.vue';\nimport { ActionCell, DefaultCell, TagCell } from './ElTableCell.vue';\nimport {\n ElTagColor,\n TableColumnFilterDateRange,\n TableColumnFilterFreeSearch,\n TableColumnFilterMultiValue,\n TableColumnFilterResetButton,\n} from '..';\n\nexport type ResponsiveDataCell = ResponsiveDefaultDataCell | ResponsiveTagDataCell | ResponsiveActionDataCell;\n\nexport type ResponsiveDefaultDataCell = Omit<DefaultCell, 'mainIcon' | 'subIcon' | 'longText' | 'truncateSubText'> & {\n desktopBehaviour?: Pick<DefaultCell, 'mainIcon' | 'subIcon' | 'longText' | 'truncateSubText'>;\n mobileBehaviour?: {\n tertiaryText?: string;\n amountText?: string;\n timeText?: string;\n };\n};\n\nexport type ResponsiveTagDataCell = Omit<TagCell, 'subText' | 'truncateSubText' | 'tag'> & {\n type: 'tag';\n // @deprecated use desktopBehaviour.tag.text instead\n text?: string;\n // @deprecated use desktopBehaviour.tag.color instead\n color?: ElTagColor;\n desktopBehaviour?: Pick<TagCell, 'subText' | 'truncateSubText' | 'tag'>;\n};\n\nexport type ResponsiveActionDataCell = ActionCell & {\n type: 'action';\n mobileBehaviour?: {\n // index of the button to use as primary action\n primary: InstanceType<typeof ElButton>['$props'];\n // index of the button to use as secondary action\n secondary?: InstanceType<typeof ElButton>['$props'];\n };\n};\n\nexport type ResponsiveDataRow<T = any> = {\n id: string;\n rowNotSelectable?: boolean;\n relatedObject?: T;\n cells: ResponsiveDataCell[];\n mobileBehaviour?: {\n trailingIcon?: ElIconProps;\n };\n};\n\n// If filter of type 'MULTI_VALUE' is used and mobileBehaviour.position is a list\n// Then the first will be used for the first mapping unless specified otherwise\n// In filter.mobileBehaviour.position\nexport type ResponsiveTableColumn = {\n title: string;\n filter?: ResponiveTableColumnFilter;\n desktopBehaviour?: {\n alignRight?: boolean;\n noSort?: boolean;\n };\n mobileBehaviour?: {\n position:\n | 'mainText'\n | 'secondaryRow'\n | 'tertiaryRow'\n | 'amount'\n | 'time'\n | 'tags'\n | 'avatar'\n | (\n | {\n take: keyof Pick<ResponsiveDefaultDataCell, 'mainText' | 'subText'>;\n to: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'time';\n withLabel: string;\n }\n | {\n withLabel: string;\n to: 'avatar';\n }\n )[];\n };\n};\n\nexport type ResponiveTableColumnFilter =\n | TableColumnFilterFreeSearch\n | TableColumnFilterDateRange\n | (TableColumnFilterMultiValue & {\n mobileBehaviour?: {\n /**\n * Used only if filter type === 'MULTI_VALUE' and column.mobileBehaviour.position is an array\n */\n position?: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'time' | 'tags' | 'avatar';\n };\n })\n | TableColumnFilterResetButton;\n\nexport interface ElResponsiveTableProps {\n columns: ResponsiveTableColumn[];\n data: ResponsiveDataRow[];\n tableId?: number | string; // needed to understand when the table changes cols and data\n noFilters?: boolean;\n rowsSelectionMode?: 'single' | 'multiple';\n rowsSelectionDisabled?: boolean;\n color: 'primary' | 'secondary';\n loading?: boolean;\n sortBy?: {\n column?: number;\n order?: 'asc' | 'desc';\n };\n desktopBehaviour?: {\n noFooter?: boolean;\n initialRows?: number;\n };\n mobileBehaviour?: Pick<ElMobileTableProps, 'preventDefaultItemClick'> & {\n selection?: Pick<\n NonNullable<ElMobileTableProps['selection']>,\n 'destructiveAction' | 'bulkActionButton' | 'selectedLabel' | 'cancelText'\n >;\n };\n}\n</script>\n\n<script lang=\"ts\" setup>\nconst mediaQuery = window.matchMedia('(max-width: 768px)');\nconst isMobile = ref(mediaQuery.matches);\nconst props = defineProps<ElResponsiveTableProps>();\n\nconst onMatchMediaChange = (event: MediaQueryListEvent) => {\n isMobile.value = event.matches;\n};\nonMounted(() => {\n mediaQuery.addEventListener('change', onMatchMediaChange);\n});\nonUnmounted(() => {\n mediaQuery.removeEventListener('change', onMatchMediaChange);\n});\n\nconst emit = defineEmits<{\n (event: 'rows-selected', rows: ResponsiveDataRow[]): void;\n (event: 'mobile:bulk:click', rows: ResponsiveDataRow[]): void;\n (event: 'mobile:destructive:click', rows: ResponsiveDataRow[]): void;\n (event: 'mobile:selection:exit'): void;\n (event: 'mobile:item:click', row: ResponsiveDataRow): void;\n}>();\nconst desktopTable = ref<InstanceType<typeof ElTable> | null>(null);\nconst mobileTable = ref<InstanceType<typeof ElTableMobile> | null>(null);\n\nconst rowsById = computed(() =>\n props.data.reduce(\n (acc, row) => {\n acc[row.id] = row;\n return acc;\n },\n {} as Record<string, ResponsiveDataRow>,\n ),\n);\n\nconst filteredData = computed(() => {\n return isMobile.value ? mobileTable.value?.filteredData : desktopTable.value?.filteredData;\n});\n\nconst selectRows = async (rowsIds: string[]) => {\n if (isMobile.value) {\n mobileTable.value?.selectRows(rowsIds);\n } else {\n desktopTable.value?.selectRows(rowsIds);\n }\n};\n\nconst unselectAllRows = () => {\n if (isMobile.value) {\n mobileTable.value?.unselectAllRows();\n } else {\n desktopTable.value?.unselectAllRows();\n }\n};\n\nconst responsiveRowToDesktopRow = (item: ResponsiveDataRow): DataRow => {\n return {\n id: item.id,\n rowNotSelectable: item.rowNotSelectable,\n relatedObject: item.relatedObject,\n cells: item.cells.map(cell => {\n if (!cell.type) return { type: 'default', ...cell };\n\n switch (cell.type) {\n case 'default':\n return {\n type: 'default',\n mainIcon: cell.desktopBehaviour?.mainIcon,\n mainText: cell.mainText,\n mainTextStyle: cell.mainTextStyle,\n mainTextColor: cell.mainTextColor,\n subIcon: cell.desktopBehaviour?.subIcon,\n subText: cell.subText,\n avatar: cell.avatar,\n clickAction: cell.clickAction,\n longText: cell.desktopBehaviour?.longText,\n truncateSubText: cell.desktopBehaviour?.truncateSubText,\n } satisfies DefaultCell;\n case 'tag':\n return {\n type: 'tag',\n tag: { text: cell.text ?? '', color: cell.color, ...cell.desktopBehaviour?.tag },\n subText: cell.desktopBehaviour?.subText,\n truncateSubText: cell.desktopBehaviour?.truncateSubText,\n } satisfies TagCell;\n case 'action':\n return {\n type: 'action',\n buttons: cell.buttons,\n iconButtons: cell.iconButtons,\n dropdown: cell.dropdown,\n } satisfies ActionCell;\n }\n }),\n } satisfies DataRow;\n};\n\nconst getDataRows = () => {\n if (!isMobile.value) return desktopTable.value?.getDataRows().map(row => rowsById.value[row.id]) || [];\n return mobileTable.value?.getDataRows().map(row => rowsById.value[row.id]) || [];\n};\n\nconst getSelectedRows = () => {\n if (!isMobile.value) return desktopTable.value?.getSelectedRows().map(row => rowsById.value[row.id]) || [];\n return mobileTable.value?.getSelectedRows().map(row => rowsById.value[row.id]) || [];\n};\n\nconst closeMobileTableItemDetails = () => {\n mobileTable.value?.closeItemDetails();\n};\n\ndefineExpose({\n filteredData,\n selectRows,\n unselectAllRows,\n getDataRows,\n getSelectedRows,\n closeMobileTableItemDetails,\n});\n\nconst mobileItems = computed<MobileTableRow[]>(() => {\n return props.data.map(item => {\n let mainText: string | undefined;\n let mainTextStyle: ElTextCellStyle | undefined;\n let mainTextColor: ElTextCellColor | undefined;\n let secondaryText: string | undefined;\n let tertiaryText: string | undefined;\n let amountText: string | undefined;\n let avatarLabel: string | undefined;\n let avatarPicture: string | undefined;\n let timeText: string | undefined;\n const tags: MobileTableRow['tags'] = [];\n let primaryAction: InstanceType<typeof ElButton>['$props'] | undefined;\n let secondaryAction: InstanceType<typeof ElButton>['$props'] | undefined;\n const details: MobileTableRow['details'] = [];\n\n for (const [cellIndex, cell] of item.cells.entries()) {\n const column = props.columns[cellIndex];\n if (!column) throw new Error('Missing column for cell at index ' + cellIndex);\n\n if (cell.type === 'default') {\n if (Array.isArray(column.mobileBehaviour?.position)) {\n for (const mapping of column.mobileBehaviour.position) {\n if (mapping.to === 'avatar') {\n details.push({\n label: mapping.withLabel,\n value: { type: 'avatar', ...cell.avatar },\n });\n } else {\n details.push({\n label: mapping.withLabel,\n value: { type: 'default', text: cell[mapping.take] ?? '' },\n });\n }\n }\n } else {\n if (cell.avatar) {\n details.push({\n label: column.title,\n value: { type: 'avatar', ...cell.avatar },\n });\n } else {\n details.push({\n label: column.title,\n value: { type: 'default', text: cell.mainText },\n });\n }\n }\n } else if (cell.type === 'tag') {\n details.push({\n label: column.title,\n value: {\n type: 'tag',\n text: cell.desktopBehaviour?.tag.text ?? cell.text ?? '',\n color: cell.desktopBehaviour?.tag.color ?? cell.color,\n },\n });\n }\n\n const mobileColumn = column.mobileBehaviour;\n if (!mobileColumn && cell.type !== 'action') continue;\n if (cell.type === 'default') {\n if (Array.isArray(mobileColumn!.position)) {\n for (const mapping of mobileColumn!.position) {\n switch (mapping.to) {\n case 'time':\n timeText = cell[mapping.take];\n break;\n case 'mainText':\n mainText = cell[mapping.take];\n mainTextStyle = cell.mainTextStyle;\n mainTextColor = cell.mainTextColor;\n break;\n case 'secondaryRow':\n secondaryText = cell[mapping.take];\n break;\n case 'tertiaryRow':\n tertiaryText = cell[mapping.take];\n break;\n case 'amount':\n amountText = cell[mapping.take];\n break;\n case 'avatar':\n avatarLabel = cell.avatar?.label;\n avatarPicture = cell.avatar?.picture;\n break;\n }\n }\n } else {\n switch (mobileColumn!.position) {\n case 'mainText':\n mainText = cell.mainText;\n mainTextStyle = cell.mainTextStyle;\n mainTextColor = cell.mainTextColor;\n break;\n case 'secondaryRow':\n secondaryText = cell.subText ?? cell.mainText;\n break;\n case 'avatar':\n avatarLabel = cell.avatar?.label;\n avatarPicture = cell.avatar?.picture;\n break;\n case 'amount':\n amountText = cell.mobileBehaviour?.amountText ?? cell.mainText;\n break;\n case 'tertiaryRow':\n tertiaryText = cell.mobileBehaviour?.tertiaryText ?? cell.mainText;\n break;\n case 'tags':\n console.warn('Skipping tags mobile position on cell type default, for tags to be used in mobile table, use cell type tag');\n break;\n case 'time':\n timeText = cell.mobileBehaviour?.timeText ?? cell.mainText;\n break;\n }\n continue;\n }\n }\n\n if (cell.type === 'tag' && mobileColumn!.position === 'tags') {\n const text = cell.desktopBehaviour?.tag.text ?? cell.text ?? '';\n tags.push({\n key: text,\n text: text,\n color: cell.desktopBehaviour?.tag.color ?? cell.color,\n });\n continue;\n }\n\n if (cell.type == 'action') {\n if (cell.mobileBehaviour?.primary) {\n primaryAction = cell.mobileBehaviour.primary;\n }\n if (cell.mobileBehaviour?.secondary) {\n secondaryAction = cell.mobileBehaviour.secondary;\n }\n }\n }\n\n let actions: MobileTableRow['actions'];\n if (primaryAction) {\n actions = {\n primary: primaryAction,\n secondary: secondaryAction,\n };\n }\n\n if (!mainText) throw new Error('Missing mainText for mobile item');\n\n return {\n id: item.id,\n rowNotSelectable: item.rowNotSelectable,\n relatedObject: item.relatedObject,\n time: timeText,\n mainText: {\n label: mainText,\n style: mainTextStyle,\n color: mainTextColor,\n },\n secondaryRow: secondaryText,\n tertiaryRow: tertiaryText,\n tags,\n amount: amountText,\n avatar: avatarLabel || avatarPicture ? ({ label: avatarLabel, picture: avatarPicture } as MobileTableRow['avatar']) : undefined,\n trailingIcon: item.mobileBehaviour?.trailingIcon,\n actions,\n details,\n } satisfies MobileTableRow;\n });\n});\n\nconst desktopItems = computed<DataRow[]>(() => {\n return props.data.map(responsiveRowToDesktopRow);\n});\n\nconst mobileFilters = computed<MobileTableFilter>(() => {\n const mobileFilter: MobileTableFilter = {};\n if (props.noFilters) return mobileFilter;\n props.columns\n .filter((column): column is ResponsiveTableColumn & Required<Pick<ResponsiveTableColumn, 'filter'>> => !!column.filter)\n .forEach(column => {\n switch (column.filter.type) {\n case 'FREE_SEARCH':\n if (!column.mobileBehaviour?.position) return;\n if (!mobileFilter.freeSearch) mobileFilter.freeSearch = { filterOn: [] };\n if (column.filter.initialValue) {\n mobileFilter.freeSearch.initialValue = column.filter.initialValue;\n mobileFilter.freeSearch.placeholder = column.filter.placeholder;\n }\n mobileFilter.freeSearch?.filterOn.push(\n ...(Array.isArray(column.mobileBehaviour.position)\n ? column.mobileBehaviour.position.map(position => position.to)\n : [column.mobileBehaviour.position]),\n );\n break;\n case 'DATE_RANGE':\n if (!mobileFilter.dateRange)\n mobileFilter.dateRange = {\n label: column.title,\n enabled: true,\n initialValue: column.filter.initialValue,\n placeholder: column.filter.placeholder,\n };\n break;\n case 'MULTI_VALUE':\n if (!column.mobileBehaviour?.position) return;\n if (!mobileFilter.multiValue) mobileFilter.multiValue = {};\n let position;\n if (Array.isArray(column.mobileBehaviour.position)) {\n position = column.filter.mobileBehaviour?.position ?? column.mobileBehaviour.position.at(0)?.to;\n } else {\n position = column.mobileBehaviour.position;\n }\n if (!position) return;\n mobileFilter.multiValue[position] = {\n enabled: true,\n initialValue: column.filter.initialValue,\n selectOptions: column.filter.selectOptions,\n label: column.title,\n };\n break;\n case 'RESET_FILTERS_BUTTON':\n mobileFilter.resetButton = true;\n break;\n }\n });\n return mobileFilter;\n});\n\nconst mobileSelection = computed<ElMobileTableProps['selection']>(() => {\n if (props.mobileBehaviour?.selection === undefined) return undefined;\n return {\n enabled: props.rowsSelectionMode !== undefined && props.rowsSelectionDisabled !== true,\n selectionMode: props.rowsSelectionMode || 'multiple',\n destructiveAction: props.mobileBehaviour?.selection.destructiveAction,\n bulkActionButton: props.mobileBehaviour?.selection.bulkActionButton,\n selectedLabel: props.mobileBehaviour?.selection.selectedLabel,\n cancelText: props.mobileBehaviour?.selection.cancelText,\n } satisfies ElMobileTableProps['selection'];\n});\n\nconst desktopRowsToResponsiveRows = (desktopRows: DataRow[]): ResponsiveDataRow[] => {\n const indexes = desktopRows.map(row => row.id).map(id => props.data.findIndex(row => row.id === id));\n return indexes.map(index => props.data[index]);\n};\n\nconst mobileRowsToResponsiveRows = (mobileRows: MobileTableRow[]): ResponsiveDataRow[] => {\n const indexes = mobileRows.map(row => row.id).map(id => props.data.findIndex(row => row.id === id));\n return indexes.map(index => props.data[index]);\n};\n\nconst mobileRowToResponsiveRow = (mobileRow: MobileTableRow): ResponsiveDataRow => {\n const index = props.data.findIndex(row => row.id === mobileRow.id);\n return props.data[index];\n};\n\nconst mobileSortBy = computed<ElMobileTableProps['sortBy'] | undefined>(() => {\n if (!props.sortBy || !props.sortBy.column) return undefined;\n const column = props.columns[props.sortBy.column];\n if (!column.mobileBehaviour?.position || Array.isArray(column.mobileBehaviour.position)) return undefined;\n\n return {\n on: column.mobileBehaviour?.position,\n order: props.sortBy.order ?? 'desc',\n } satisfies ElMobileTableProps['sortBy'];\n});\n</script>\n\n<template>\n <ElTable\n v-if=\"!isMobile\"\n ref=\"desktopTable\"\n :data=\"desktopItems\"\n :columns=\"props.columns\"\n :table-id=\"props.tableId\"\n :sort-by-col=\"props.sortBy?.column\"\n :sort-by-col-asc=\"props.sortBy?.order === 'asc'\"\n :no-filters=\"props.noFilters\"\n :no-footer=\"props.desktopBehaviour?.noFooter\"\n :rows-selection-mode=\"props.rowsSelectionMode\"\n :rows-selection-disabled=\"props.rowsSelectionDisabled\"\n :initial-rows=\"props.desktopBehaviour?.initialRows\"\n :loading=\"props?.loading\"\n @rows-selected=\"data => $emit('rows-selected', desktopRowsToResponsiveRows(data))\"\n />\n <ElTableMobile\n v-else\n ref=\"mobileTable\"\n :data=\"mobileItems\"\n :sort-by=\"mobileSortBy\"\n :color=\"props.color\"\n :filters=\"mobileFilters\"\n :selection=\"mobileSelection\"\n :loading=\"props?.loading\"\n :prevent-default-item-click=\"props.mobileBehaviour?.preventDefaultItemClick\"\n @rows-selected=\"data => $emit('rows-selected', mobileRowsToResponsiveRows(data))\"\n @selection:exit=\"() => $emit('mobile:selection:exit')\"\n @bulk:click=\"data => $emit('mobile:bulk:click', mobileRowsToResponsiveRows(data))\"\n @destructive:click=\"data => $emit('mobile:destructive:click', mobileRowsToResponsiveRows(data))\"\n @item:click=\"row => $emit('mobile:item:click', mobileRowToResponsiveRow(row))\"\n >\n <slot name=\"mobile\" />\n </ElTableMobile>\n</template>\n"],"names":["mediaQuery","isMobile","ref","props","__props","onMatchMediaChange","event","onMounted","onUnmounted","desktopTable","mobileTable","rowsById","computed","acc","row","filteredData","_a","_b","selectRows","rowsIds","unselectAllRows","responsiveRowToDesktopRow","item","cell","_c","_d","_e","_f","_g","__expose","mobileItems","mainText","mainTextStyle","mainTextColor","secondaryText","tertiaryText","amountText","avatarLabel","avatarPicture","timeText","tags","primaryAction","secondaryAction","details","cellIndex","column","mapping","mobileColumn","_h","_i","_j","text","_k","_l","_m","_n","actions","_o","desktopItems","mobileFilters","mobileFilter","position","mobileSelection","desktopRowsToResponsiveRows","desktopRows","id","index","mobileRowsToResponsiveRows","mobileRows","mobileRowToResponsiveRow","mobileRow","mobileSortBy"],"mappings":"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"}
1
+ {"version":3,"file":"ElResponsiveTable.vue.cjs2.js","sources":["../../src/table/ElResponsiveTable.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { DataRow } from '@/table/commonTypes';\nimport { computed, ref, onMounted, onUnmounted } from 'vue';\nimport ElTableMobile, { ElMobileTableProps, MobileTableFilter, MobileTableRow } from '@/table/ElMobileTable.vue';\nimport ElTable from './ElTable.vue';\nimport { ElTextCellColor, ElTextCellStyle } from '@/ElTextCell.vue';\nimport { ElIconProps } from '@/ElIcon.vue';\nimport ElButton from '@/ElButton.vue';\nimport { ActionCell, DefaultCell, TagCell } from './ElTableCell.vue';\nimport {\n ElTagColor,\n TableColumnFilterDateRange,\n TableColumnFilterFreeSearch,\n TableColumnFilterMultiValue,\n TableColumnFilterResetButton,\n} from '..';\n\nexport type ResponsiveDataCell = ResponsiveDefaultDataCell | ResponsiveTagDataCell | ResponsiveActionDataCell;\n\nexport type ResponsiveDefaultDataCell = Omit<DefaultCell, 'mainIcon' | 'subIcon' | 'longText' | 'truncateSubText'> & {\n desktopBehaviour?: Pick<DefaultCell, 'mainIcon' | 'subIcon' | 'longText' | 'truncateSubText'>;\n mobileBehaviour?: {\n tertiaryText?: string;\n amountText?: string;\n timeText?: string;\n };\n};\n\nexport type ResponsiveTagDataCell = Omit<TagCell, 'subText' | 'truncateSubText' | 'tag'> & {\n type: 'tag';\n // @deprecated use desktopBehaviour.tag.text instead\n text?: string;\n // @deprecated use desktopBehaviour.tag.color instead\n color?: ElTagColor;\n desktopBehaviour?: Pick<TagCell, 'subText' | 'truncateSubText' | 'tag'>;\n};\n\nexport type ResponsiveActionDataCell = ActionCell & {\n type: 'action';\n mobileBehaviour?: {\n // index of the button to use as primary action\n primary: InstanceType<typeof ElButton>['$props'];\n // index of the button to use as secondary action\n secondary?: InstanceType<typeof ElButton>['$props'];\n };\n};\n\nexport type ResponsiveDataRow<T = any> = {\n id: string;\n rowNotSelectable?: boolean;\n relatedObject?: T;\n cells: ResponsiveDataCell[];\n mobileBehaviour?: {\n trailingIcon?: ElIconProps;\n };\n};\n\n// If filter of type 'MULTI_VALUE' is used and mobileBehaviour.position is a list\n// Then the first will be used for the first mapping unless specified otherwise\n// In filter.mobileBehaviour.position\nexport type ResponsiveTableColumn = {\n title: string;\n filter?: ResponiveTableColumnFilter;\n desktopBehaviour?: {\n alignRight?: boolean;\n noSort?: boolean;\n };\n mobileBehaviour?: {\n position:\n | 'mainText'\n | 'secondaryRow'\n | 'tertiaryRow'\n | 'amount'\n | 'time'\n | 'tags'\n | 'avatar'\n | (\n | {\n take: keyof Pick<ResponsiveDefaultDataCell, 'mainText' | 'subText'>;\n to: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'time';\n withLabel: string;\n }\n | {\n withLabel: string;\n to: 'avatar';\n }\n )[];\n };\n};\n\nexport type ResponiveTableColumnFilter =\n | TableColumnFilterFreeSearch\n | TableColumnFilterDateRange\n | (TableColumnFilterMultiValue & {\n mobileBehaviour?: {\n /**\n * Used only if filter type === 'MULTI_VALUE' and column.mobileBehaviour.position is an array\n */\n position?: 'mainText' | 'secondaryRow' | 'tertiaryRow' | 'amount' | 'time' | 'tags' | 'avatar';\n };\n })\n | TableColumnFilterResetButton;\n\nexport interface ElResponsiveTableProps {\n columns: ResponsiveTableColumn[];\n data: ResponsiveDataRow[];\n tableId?: number | string; // needed to understand when the table changes cols and data\n noFilters?: boolean;\n rowsSelectionMode?: 'single' | 'multiple';\n rowsSelectionDisabled?: boolean;\n color: 'primary' | 'secondary';\n loading?: boolean;\n sortBy?: {\n column?: number;\n order?: 'asc' | 'desc';\n };\n desktopBehaviour?: {\n noFooter?: boolean;\n initialRows?: number;\n };\n mobileBehaviour?: Pick<ElMobileTableProps, 'preventDefaultItemClick'> & {\n selection?: Pick<\n NonNullable<ElMobileTableProps['selection']>,\n 'destructiveAction' | 'bulkActionButton' | 'selectedLabel' | 'cancelText'\n >;\n };\n}\n</script>\n\n<script lang=\"ts\" setup>\nconst mediaQuery = window.matchMedia('(max-width: 768px)');\nconst isMobile = ref(mediaQuery.matches);\nconst props = defineProps<ElResponsiveTableProps>();\n\nconst onMatchMediaChange = (event: MediaQueryListEvent) => {\n isMobile.value = event.matches;\n};\nonMounted(() => {\n mediaQuery.addEventListener('change', onMatchMediaChange);\n});\nonUnmounted(() => {\n mediaQuery.removeEventListener('change', onMatchMediaChange);\n});\n\nconst emit = defineEmits<{\n (event: 'rows-selected', rows: ResponsiveDataRow[]): void;\n (event: 'mobile:bulk:click', rows: ResponsiveDataRow[]): void;\n (event: 'mobile:destructive:click', rows: ResponsiveDataRow[]): void;\n (event: 'mobile:selection:exit'): void;\n (event: 'mobile:item:click', row: ResponsiveDataRow): void;\n}>();\nconst desktopTable = ref<InstanceType<typeof ElTable> | null>(null);\nconst mobileTable = ref<InstanceType<typeof ElTableMobile> | null>(null);\n\nconst rowsById = computed(() =>\n props.data.reduce(\n (acc, row) => {\n acc[row.id] = row;\n return acc;\n },\n {} as Record<string, ResponsiveDataRow>,\n ),\n);\n\nconst filteredData = computed(() => {\n return isMobile.value ? mobileTable.value?.filteredData : desktopTable.value?.filteredData;\n});\n\nconst selectRows = async (rowsIds: string[]) => {\n if (isMobile.value) {\n mobileTable.value?.selectRows(rowsIds);\n } else {\n desktopTable.value?.selectRows(rowsIds);\n }\n};\n\nconst unselectAllRows = () => {\n if (isMobile.value) {\n mobileTable.value?.unselectAllRows();\n } else {\n desktopTable.value?.unselectAllRows();\n }\n};\n\nconst responsiveRowToDesktopRow = (item: ResponsiveDataRow): DataRow => {\n return {\n id: item.id,\n rowNotSelectable: item.rowNotSelectable,\n relatedObject: item.relatedObject,\n cells: item.cells.map(cell => {\n if (!cell.type) return { type: 'default', ...cell };\n\n switch (cell.type) {\n case 'default':\n return {\n type: 'default',\n mainIcon: cell.desktopBehaviour?.mainIcon,\n mainText: cell.mainText,\n mainTextStyle: cell.mainTextStyle,\n mainTextColor: cell.mainTextColor,\n subIcon: cell.desktopBehaviour?.subIcon,\n subText: cell.subText,\n avatar: cell.avatar,\n clickAction: cell.clickAction,\n longText: cell.desktopBehaviour?.longText,\n truncateSubText: cell.desktopBehaviour?.truncateSubText,\n } satisfies DefaultCell;\n case 'tag':\n return {\n type: 'tag',\n tag: { text: cell.text ?? '', color: cell.color, ...cell.desktopBehaviour?.tag },\n subText: cell.desktopBehaviour?.subText,\n truncateSubText: cell.desktopBehaviour?.truncateSubText,\n } satisfies TagCell;\n case 'action':\n return {\n type: 'action',\n buttons: cell.buttons,\n iconButtons: cell.iconButtons,\n dropdown: cell.dropdown,\n } satisfies ActionCell;\n }\n }),\n } satisfies DataRow;\n};\n\nconst getDataRows = () => {\n if (!isMobile.value) return desktopTable.value?.getDataRows().map(row => rowsById.value[row.id]) || [];\n return mobileTable.value?.getDataRows().map(row => rowsById.value[row.id]) || [];\n};\n\nconst getSelectedRows = () => {\n if (!isMobile.value) return desktopTable.value?.getSelectedRows().map(row => rowsById.value[row.id]) || [];\n return mobileTable.value?.getSelectedRows().map(row => rowsById.value[row.id]) || [];\n};\n\nconst closeMobileTableItemDetails = () => {\n mobileTable.value?.closeItemDetails();\n};\n\ndefineExpose({\n filteredData,\n selectRows,\n unselectAllRows,\n getDataRows,\n getSelectedRows,\n closeMobileTableItemDetails,\n});\n\nconst mobileItems = computed<MobileTableRow[]>(() => {\n return props.data.map(item => {\n let mainText: string | undefined;\n let mainTextStyle: ElTextCellStyle | undefined;\n let mainTextColor: ElTextCellColor | undefined;\n let secondaryText: string | undefined;\n let tertiaryText: string | undefined;\n let amountText: string | undefined;\n let avatarLabel: string | undefined;\n let avatarPicture: string | undefined;\n let timeText: string | undefined;\n const tags: MobileTableRow['tags'] = [];\n let primaryAction: InstanceType<typeof ElButton>['$props'] | undefined;\n let secondaryAction: InstanceType<typeof ElButton>['$props'] | undefined;\n const details: MobileTableRow['details'] = [];\n\n for (const [cellIndex, cell] of item.cells.entries()) {\n const column = props.columns[cellIndex];\n if (!column) throw new Error('Missing column for cell at index ' + cellIndex);\n\n if (cell.type === 'default') {\n if (Array.isArray(column.mobileBehaviour?.position)) {\n for (const mapping of column.mobileBehaviour.position) {\n if (mapping.to === 'avatar') {\n details.push({\n label: mapping.withLabel,\n value: { type: 'avatar', ...cell.avatar },\n });\n } else {\n details.push({\n label: mapping.withLabel,\n value: { type: 'default', text: cell[mapping.take] ?? '' },\n });\n }\n }\n } else {\n if (cell.avatar) {\n details.push({\n label: column.title,\n value: { type: 'avatar', ...cell.avatar },\n });\n } else {\n details.push({\n label: column.title,\n value: { type: 'default', text: cell.mainText },\n });\n }\n }\n } else if (cell.type === 'tag') {\n details.push({\n label: column.title,\n value: {\n type: 'tag',\n text: cell.desktopBehaviour?.tag.text ?? cell.text ?? '',\n color: cell.desktopBehaviour?.tag.color ?? cell.color,\n },\n });\n }\n\n const mobileColumn = column.mobileBehaviour;\n if (!mobileColumn && cell.type !== 'action') continue;\n if (cell.type === 'default') {\n if (Array.isArray(mobileColumn!.position)) {\n for (const mapping of mobileColumn!.position) {\n switch (mapping.to) {\n case 'time':\n timeText = cell[mapping.take];\n break;\n case 'mainText':\n mainText = cell[mapping.take];\n mainTextStyle = cell.mainTextStyle;\n mainTextColor = cell.mainTextColor;\n break;\n case 'secondaryRow':\n secondaryText = cell[mapping.take];\n break;\n case 'tertiaryRow':\n tertiaryText = cell[mapping.take];\n break;\n case 'amount':\n amountText = cell[mapping.take];\n break;\n case 'avatar':\n avatarLabel = cell.avatar?.label;\n avatarPicture = cell.avatar?.picture;\n break;\n }\n }\n } else {\n switch (mobileColumn!.position) {\n case 'mainText':\n mainText = cell.mainText;\n mainTextStyle = cell.mainTextStyle;\n mainTextColor = cell.mainTextColor;\n break;\n case 'secondaryRow':\n secondaryText = cell.subText ?? cell.mainText;\n break;\n case 'avatar':\n avatarLabel = cell.avatar?.label;\n avatarPicture = cell.avatar?.picture;\n break;\n case 'amount':\n amountText = cell.mobileBehaviour?.amountText ?? cell.mainText;\n break;\n case 'tertiaryRow':\n tertiaryText = cell.mobileBehaviour?.tertiaryText ?? cell.mainText;\n break;\n case 'tags':\n console.warn('Skipping tags mobile position on cell type default, for tags to be used in mobile table, use cell type tag');\n break;\n case 'time':\n timeText = cell.mobileBehaviour?.timeText ?? cell.mainText;\n break;\n }\n continue;\n }\n }\n\n if (cell.type === 'tag' && mobileColumn!.position === 'tags') {\n const text = cell.desktopBehaviour?.tag.text ?? cell.text ?? '';\n tags.push({\n key: text,\n text: text,\n color: cell.desktopBehaviour?.tag.color ?? cell.color,\n });\n continue;\n }\n\n if (cell.type == 'action') {\n if (cell.mobileBehaviour?.primary) {\n primaryAction = cell.mobileBehaviour.primary;\n }\n if (cell.mobileBehaviour?.secondary) {\n secondaryAction = cell.mobileBehaviour.secondary;\n }\n }\n }\n\n let actions: MobileTableRow['actions'];\n if (primaryAction) {\n actions = {\n primary: primaryAction,\n secondary: secondaryAction,\n };\n }\n\n if (!mainText) throw new Error('Missing mainText for mobile item');\n\n return {\n id: item.id,\n rowNotSelectable: item.rowNotSelectable,\n relatedObject: item.relatedObject,\n time: timeText,\n mainText: {\n label: mainText,\n style: mainTextStyle,\n color: mainTextColor,\n },\n secondaryRow: secondaryText,\n tertiaryRow: tertiaryText,\n tags,\n amount: amountText,\n avatar: avatarLabel || avatarPicture ? ({ label: avatarLabel, picture: avatarPicture } as MobileTableRow['avatar']) : undefined,\n trailingIcon: item.mobileBehaviour?.trailingIcon,\n actions,\n details,\n } satisfies MobileTableRow;\n });\n});\n\nconst desktopItems = computed<DataRow[]>(() => {\n return props.data.map(responsiveRowToDesktopRow);\n});\n\nconst mobileFilters = computed<MobileTableFilter>(() => {\n const mobileFilter: MobileTableFilter = {};\n if (props.noFilters) return mobileFilter;\n props.columns\n .filter((column): column is ResponsiveTableColumn & Required<Pick<ResponsiveTableColumn, 'filter'>> => !!column.filter)\n .forEach(column => {\n switch (column.filter.type) {\n case 'FREE_SEARCH':\n if (!column.mobileBehaviour?.position) return;\n if (!mobileFilter.freeSearch) mobileFilter.freeSearch = { filterOn: [] };\n if (column.filter.initialValue) {\n mobileFilter.freeSearch.initialValue = column.filter.initialValue;\n mobileFilter.freeSearch.placeholder = column.filter.placeholder;\n }\n mobileFilter.freeSearch?.filterOn.push(\n ...(Array.isArray(column.mobileBehaviour.position)\n ? column.mobileBehaviour.position.map(position => position.to)\n : [column.mobileBehaviour.position]),\n );\n break;\n case 'DATE_RANGE':\n if (!mobileFilter.dateRange)\n mobileFilter.dateRange = {\n label: column.title,\n enabled: true,\n initialValue: column.filter.initialValue,\n placeholder: column.filter.placeholder,\n };\n break;\n case 'MULTI_VALUE':\n if (!column.mobileBehaviour?.position) return;\n if (!mobileFilter.multiValue) mobileFilter.multiValue = {};\n let position;\n if (Array.isArray(column.mobileBehaviour.position)) {\n position = column.filter.mobileBehaviour?.position ?? column.mobileBehaviour.position.at(0)?.to;\n } else {\n position = column.mobileBehaviour.position;\n }\n if (!position) return;\n mobileFilter.multiValue[position] = {\n enabled: true,\n initialValue: column.filter.initialValue,\n selectOptions: column.filter.selectOptions,\n label: column.title,\n };\n break;\n case 'RESET_FILTERS_BUTTON':\n mobileFilter.resetButton = true;\n break;\n }\n });\n return mobileFilter;\n});\n\nconst mobileSelection = computed<ElMobileTableProps['selection']>(() => {\n if (props.mobileBehaviour?.selection === undefined) return undefined;\n return {\n enabled: props.rowsSelectionMode !== undefined && props.rowsSelectionDisabled !== true,\n selectionMode: props.rowsSelectionMode || 'multiple',\n destructiveAction: props.mobileBehaviour?.selection.destructiveAction,\n bulkActionButton: props.mobileBehaviour?.selection.bulkActionButton,\n selectedLabel: props.mobileBehaviour?.selection.selectedLabel,\n cancelText: props.mobileBehaviour?.selection.cancelText,\n } satisfies ElMobileTableProps['selection'];\n});\n\nconst desktopRowsToResponsiveRows = (desktopRows: DataRow[]): ResponsiveDataRow[] => {\n const indexes = desktopRows.map(row => row.id).map(id => props.data.findIndex(row => row.id === id));\n return indexes.map(index => props.data[index]);\n};\n\nconst mobileRowsToResponsiveRows = (mobileRows: MobileTableRow[]): ResponsiveDataRow[] => {\n const indexes = mobileRows.map(row => row.id).map(id => props.data.findIndex(row => row.id === id));\n return indexes.map(index => props.data[index]);\n};\n\nconst mobileRowToResponsiveRow = (mobileRow: MobileTableRow): ResponsiveDataRow => {\n const index = props.data.findIndex(row => row.id === mobileRow.id);\n return props.data[index];\n};\n\nconst mobileSortBy = computed<ElMobileTableProps['sortBy'] | undefined>(() => {\n if (!props.sortBy || !props.sortBy.column) return undefined;\n const column = props.columns[props.sortBy.column];\n if (!column.mobileBehaviour?.position || Array.isArray(column.mobileBehaviour.position)) return undefined;\n\n return {\n on: column.mobileBehaviour?.position,\n order: props.sortBy.order ?? 'desc',\n } satisfies ElMobileTableProps['sortBy'];\n});\n</script>\n\n<template>\n <ElTable\n v-if=\"!isMobile\"\n ref=\"desktopTable\"\n :data=\"desktopItems\"\n :columns=\"props.columns\"\n :table-id=\"props.tableId\"\n :sort-by-col=\"props.sortBy?.column\"\n :sort-by-col-asc=\"props.sortBy?.order === 'asc'\"\n :no-filters=\"props.noFilters\"\n :no-footer=\"props.desktopBehaviour?.noFooter\"\n :rows-selection-mode=\"props.rowsSelectionMode\"\n :rows-selection-disabled=\"props.rowsSelectionDisabled\"\n :initial-rows=\"props.desktopBehaviour?.initialRows\"\n :loading=\"props?.loading\"\n @rows-selected=\"data => $emit('rows-selected', desktopRowsToResponsiveRows(data))\"\n />\n <ElTableMobile\n v-else\n ref=\"mobileTable\"\n :data=\"mobileItems\"\n :sort-by=\"mobileSortBy\"\n :color=\"props.color\"\n :filters=\"mobileFilters\"\n :selection=\"mobileSelection\"\n :loading=\"props?.loading\"\n :prevent-default-item-click=\"props.mobileBehaviour?.preventDefaultItemClick\"\n @rows-selected=\"data => $emit('rows-selected', mobileRowsToResponsiveRows(data))\"\n @selection:exit=\"() => $emit('mobile:selection:exit')\"\n @bulk:click=\"data => $emit('mobile:bulk:click', mobileRowsToResponsiveRows(data))\"\n @destructive:click=\"data => $emit('mobile:destructive:click', mobileRowsToResponsiveRows(data))\"\n @item:click=\"row => $emit('mobile:item:click', mobileRowToResponsiveRow(row))\"\n >\n <slot name=\"mobile\" />\n </ElTableMobile>\n</template>\n"],"names":["mediaQuery","isMobile","ref","props","__props","onMatchMediaChange","event","onMounted","onUnmounted","desktopTable","mobileTable","rowsById","computed","acc","row","filteredData","_a","_b","selectRows","rowsIds","unselectAllRows","responsiveRowToDesktopRow","item","cell","_c","_d","_e","_f","_g","__expose","mobileItems","mainText","mainTextStyle","mainTextColor","secondaryText","tertiaryText","amountText","avatarLabel","avatarPicture","timeText","tags","primaryAction","secondaryAction","details","cellIndex","column","mapping","mobileColumn","_h","_i","_j","text","_k","_l","_m","_n","actions","_o","desktopItems","mobileFilters","mobileFilter","position","mobileSelection","desktopRowsToResponsiveRows","desktopRows","id","index","mobileRowsToResponsiveRows","mobileRows","mobileRowToResponsiveRow","mobileRow","mobileSortBy"],"mappings":"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"}