admins-components 9.0.22 → 9.0.24

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 (56) hide show
  1. package/dist/admins-components15.js +17 -23
  2. package/dist/admins-components15.js.map +1 -1
  3. package/dist/admins-components153.js.map +1 -1
  4. package/dist/admins-components157.js +3 -3
  5. package/dist/admins-components157.js.map +1 -1
  6. package/dist/admins-components158.js.map +1 -1
  7. package/dist/admins-components16.js.map +1 -1
  8. package/dist/admins-components160.js.map +1 -1
  9. package/dist/admins-components162.js.map +1 -1
  10. package/dist/admins-components163.js.map +1 -1
  11. package/dist/admins-components164.js.map +1 -1
  12. package/dist/admins-components166.js.map +1 -1
  13. package/dist/admins-components169.js +2 -2
  14. package/dist/admins-components169.js.map +1 -1
  15. package/dist/admins-components20.js +87 -87
  16. package/dist/admins-components20.js.map +1 -1
  17. package/dist/admins-components22.js.map +1 -1
  18. package/dist/admins-components69.js +1 -0
  19. package/dist/admins-components69.js.map +1 -1
  20. package/dist/admins-components71.js.map +1 -1
  21. package/dist/admins-components78.js +93 -89
  22. package/dist/admins-components78.js.map +1 -1
  23. package/dist/admins-components80.js.map +1 -1
  24. package/dist/admins-components87.js +26 -35
  25. package/dist/admins-components87.js.map +1 -1
  26. package/dist/admins-components89.js.map +1 -1
  27. package/dist/src/components/DropdownSelect.vue.d.ts +0 -1
  28. package/dist/src/composables/useDropdownAnchor.d.ts +11 -0
  29. package/dist/src/composables/useSelection.d.ts +6 -0
  30. package/dist/src/directives/tooltip.d.ts +2 -0
  31. package/dist/src/models/SearchPosts.d.ts +46 -0
  32. package/dist/src/services/articleEditorService.d.ts +42 -0
  33. package/dist/src/services/articleEditorService_short_try.d.ts +43 -0
  34. package/dist/src/services/backendService.d.ts +25 -0
  35. package/dist/src/services/createNativeFetch.d.ts +39 -0
  36. package/dist/src/services/currentUserInfo.d.ts +19 -0
  37. package/dist/src/services/models.d.ts +139 -0
  38. package/dist/src/services/services.d.ts +38 -0
  39. package/dist/src/services/toast.d.ts +22 -0
  40. package/dist/src/types/data-list.d.ts +83 -0
  41. package/dist/src/types/datepickers.d.ts +28 -0
  42. package/dist/src/types/types.d.ts +19 -0
  43. package/dist/src/vueformelements/ArticleOfferElement.vue.d.ts +3 -0
  44. package/dist/src/vueformelements/ArticlePickerElement.vue.d.ts +3 -0
  45. package/dist/src/vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_43c54caa_lang.css +1 -0
  46. package/dist/src/vueformelements/DateTimePickerElement.vue.d.ts +3 -0
  47. package/dist/src/vueformelements/ExternalArticleOfferElement.vue.d.ts +3 -0
  48. package/dist/src/vueformelements/GalleryImageSelectorElement.vue.d.ts +3 -0
  49. package/dist/src/vueformelements/ImagePickerDetailsElement.vue.d.ts +3 -0
  50. package/dist/src/vueformelements/ImagePickerElement.vue.d.ts +3 -0
  51. package/dist/src/vueformelements/InternalArticleOfferElement.vue.d.ts +3 -0
  52. package/dist/src/vueformelements/PartnerPickerElement.vue.d.ts +3 -0
  53. package/dist/src/vueformelements/PartnerPickerElement.vue_vue_type_style_index_0_scoped_09bea4ae_lang.css +1 -0
  54. package/package.json +1 -1
  55. package/dist/src/vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_035d2808_lang.css +0 -1
  56. package/dist/src/vueformelements/PartnerPickerElement.vue_vue_type_style_index_0_scoped_64cb4d6e_lang.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\n// const hasTextFilter = computed(() =>\n// props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n// )\n\n// const exactMatchFilterItem: FilterItem = {\n// type: 'checkbox',\n// key: 'exactMatch',\n// label: 'Pontos egyezés',\n// fullWidth: true,\n// config: {\n// labelAlignmentFix: true,\n// },\n// displayClass: 'highlight-chip',\n// }\n\n// function ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n// if (!hasTextFilter.value) return items\n// if (items.some((i) => i.key === 'exactMatch')) return items\n\n// return [exactMatchFilterItem, ...items]\n// }\n\n// const resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(props.filters) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"filters && filters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"filters\"\n :history-enabled=\"historyEnabled\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components89.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components89.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\n// const hasTextFilter = computed(() =>\n// props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n// )\n\n// const exactMatchFilterItem: FilterItem = {\n// type: 'checkbox',\n// key: 'exactMatch',\n// label: 'Pontos egyezés',\n// fullWidth: true,\n// config: {\n// labelAlignmentFix: true,\n// },\n// displayClass: 'highlight-chip',\n// }\n\n// function ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n// if (!hasTextFilter.value) return items\n// if (items.some((i) => i.key === 'exactMatch')) return items\n\n// return [exactMatchFilterItem, ...items]\n// }\n\n// const resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(props.filters) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"filters && filters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"filters\"\n :history-enabled=\"historyEnabled\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
@@ -30,5 +30,4 @@ declare const __VLS_export: import('vue').DefineComponent<DropdownSelectProps, {
30
30
  "onUpdate:modelValue"?: ((value: string | string[] | null) => any) | undefined;
31
31
  }>, {
32
32
  modelValue: string | string[] | null;
33
- config: DropdownSelectConfig;
34
33
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
@@ -0,0 +1,11 @@
1
+ import { Ref } from 'vue';
2
+ export interface UseDropdownAnchorOptions {
3
+ extraStyle?: (rect: DOMRect) => Record<string, string>;
4
+ isOutsideClick?: (e: MouseEvent, wrapperEl: HTMLElement | null, dropdownEl: HTMLElement | null) => boolean;
5
+ }
6
+ export interface UseDropdownAnchorReturn {
7
+ isOpen: Ref<boolean>;
8
+ dropdownStyle: Ref<Record<string, string>>;
9
+ positionDropdown: () => void;
10
+ }
11
+ export declare function useDropdownAnchor(wrapperRef: Ref<HTMLElement | null>, dropdownRef: Ref<HTMLElement | null>, options?: UseDropdownAnchorOptions): UseDropdownAnchorReturn;
@@ -0,0 +1,6 @@
1
+ export declare function useSelection(getItems: () => Record<string, unknown>[], getAttr: () => string | undefined, emit: (selected: unknown[]) => void): {
2
+ selectedKeys: import('vue').Ref<Set<unknown> & Omit<Set<unknown>, keyof Set<any>>, Set<unknown> | (Set<unknown> & Omit<Set<unknown>, keyof Set<any>>)>;
3
+ allSelected: import('vue').ComputedRef<boolean>;
4
+ toggle: (item: Record<string, unknown>) => void;
5
+ toggleAll: () => void;
6
+ };
@@ -0,0 +1,2 @@
1
+ import { Directive } from 'vue';
2
+ export declare const vTooltip: Directive;
@@ -0,0 +1,46 @@
1
+ export interface SearchPostsPayload {
2
+ title?: string;
3
+ exactMatch?: boolean;
4
+ createdFrom?: string;
5
+ createdTo?: string;
6
+ modifiedFrom?: string;
7
+ modifiedTo?: string;
8
+ order?: string;
9
+ status?: string;
10
+ createdBy?: string;
11
+ modifiedBy?: string;
12
+ author?: string;
13
+ column?: string;
14
+ rank?: number;
15
+ tag?: string;
16
+ pageIndex: 0;
17
+ pageSize: 0;
18
+ releasedFrom?: string;
19
+ releasedTo?: string;
20
+ publishDateFrom?: string;
21
+ publishDateTo?: string;
22
+ }
23
+ export interface SearchPostsResponse {
24
+ posts: Post[];
25
+ }
26
+ export interface Post {
27
+ id: string;
28
+ legacyId: string;
29
+ wpId: number;
30
+ title: string;
31
+ lead: string;
32
+ rank: number;
33
+ modifiedBy: string;
34
+ createdAt: string;
35
+ modifiedAt: string;
36
+ publishDateGmt: string;
37
+ creator: string;
38
+ status: string;
39
+ isPaid: true;
40
+ siteId: string;
41
+ authors: string[];
42
+ columns: string[];
43
+ tags: string[];
44
+ editingByUser: string;
45
+ featuredImage: string;
46
+ }
@@ -0,0 +1,42 @@
1
+ import { SearchPostsPayload, SearchPostsResponse } from '../models/SearchPosts';
2
+ import { HttpRequest } from './services';
3
+ import { ArticleSeriesDetails, AuthorDetails, ColumnDetails, DigitalSupplementDetails, IdsPayload, PartnerDetails, PresenceWidgetConfig, RelationsCountResponse, SearchArticleSeriesResult, SearchAuthorsPayload, SearchAuthorsResult, SearchColumnsPayload, SearchColumnsResult, SearchDigitalSupplementsPayload, SearchDigitalSupplementsResult, SearchEntityPayload, SearchImagesWidgetConfig, SearchPartnersResult, SearchPostWidgetConfig, SearchTagsPayload, SearchTagsResult, Site, TagDetails, UserInfoModel, WidgetDetailsResponse } from './models';
4
+ export declare function useArticleEditorService(url: string): ArticleEditorService;
5
+ export declare class ArticleEditorService {
6
+ articleEditorBackendUrl: string;
7
+ baseUrl: string;
8
+ searchPosts: HttpRequest<SearchPostsPayload, undefined, undefined, SearchPostsResponse>;
9
+ whoAmI: HttpRequest<void, undefined, undefined, UserInfoModel>;
10
+ getPostsConfig: HttpRequest<undefined, {
11
+ name: string;
12
+ }, undefined, WidgetDetailsResponse<SearchPostWidgetConfig>>;
13
+ getImagesConfig: HttpRequest<undefined, {
14
+ name: string;
15
+ }, undefined, WidgetDetailsResponse<SearchImagesWidgetConfig>>;
16
+ getPresenceConfig: HttpRequest<undefined, {
17
+ name: string;
18
+ }, undefined, WidgetDetailsResponse<PresenceWidgetConfig>>;
19
+ sites: HttpRequest<undefined, undefined, undefined, Site[]>;
20
+ authorsSearch: HttpRequest<SearchAuthorsPayload, undefined, undefined, SearchAuthorsResult>;
21
+ authorsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, AuthorDetails[]>;
22
+ articleSeriesSearch: HttpRequest<SearchEntityPayload, undefined, undefined, SearchArticleSeriesResult>;
23
+ articleSeriesDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, ArticleSeriesDetails[]>;
24
+ columnsSearch: HttpRequest<SearchColumnsPayload, undefined, undefined, SearchColumnsResult>;
25
+ columnsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, ColumnDetails[]>;
26
+ digitalSupplementsSearch: HttpRequest<SearchDigitalSupplementsPayload, undefined, undefined, SearchDigitalSupplementsResult>;
27
+ digitalSupplementsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, DigitalSupplementDetails[]>;
28
+ partnersSearch: HttpRequest<SearchEntityPayload, undefined, undefined, SearchPartnersResult>;
29
+ partnersDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, PartnerDetails[]>;
30
+ tagsSearch: HttpRequest<SearchTagsPayload, undefined, undefined, SearchTagsResult>;
31
+ tagsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, TagDetails[]>;
32
+ getRelationsCount: HttpRequest<undefined, {
33
+ id: string;
34
+ }, {
35
+ entityType: string;
36
+ }, RelationsCountResponse>;
37
+ private errorMap;
38
+ private postRequest;
39
+ private searchRequest;
40
+ private detailsByIdsRequest;
41
+ constructor(articleEditorBackendUrl: string);
42
+ }
@@ -0,0 +1,43 @@
1
+ import { SearchPostsPayload, SearchPostsResponse } from '../models/SearchPosts';
2
+ import { ArticleSeriesDetails, AuthorDetails, ColumnDetails, DigitalSupplementDetails, IdsPayload, PartnerDetails, PresenceWidgetConfig, RelationsCountResponse, SearchArticleSeriesResult, SearchAuthorsPayload, SearchAuthorsResult, SearchColumnsPayload, SearchColumnsResult, SearchDigitalSupplementsPayload, SearchDigitalSupplementsResult, SearchEntityPayload, SearchImagesWidgetConfig, SearchPartnersResult, SearchPostWidgetConfig, SearchTagsPayload, SearchTagsResult, Site, TagDetails, UserInfoModel, WidgetDetailsResponse } from './models';
3
+ type PathParams = {
4
+ name: string;
5
+ };
6
+ type RelationParams = {
7
+ id: string;
8
+ };
9
+ type RelationQuery = {
10
+ entityType: string;
11
+ };
12
+ export declare function useArticleEditorService(url: string): ArticleEditorService;
13
+ export declare class ArticleEditorService {
14
+ baseUrl: string;
15
+ constructor(baseUrl: string);
16
+ private errorMap;
17
+ private request;
18
+ private post;
19
+ private get;
20
+ private search;
21
+ private details;
22
+ private widget;
23
+ searchPosts: import('./services').HttpRequest<SearchPostsPayload, undefined, undefined, SearchPostsResponse>;
24
+ whoAmI: import('./services').HttpRequest<undefined, undefined, undefined, UserInfoModel>;
25
+ getPostsConfig: import('./services').HttpRequest<undefined, PathParams, undefined, WidgetDetailsResponse<SearchPostWidgetConfig>>;
26
+ getImagesConfig: import('./services').HttpRequest<undefined, PathParams, undefined, WidgetDetailsResponse<SearchImagesWidgetConfig>>;
27
+ getPresenceConfig: import('./services').HttpRequest<undefined, PathParams, undefined, WidgetDetailsResponse<PresenceWidgetConfig>>;
28
+ sites: import('./services').HttpRequest<undefined, undefined, undefined, Site[]>;
29
+ authorsSearch: import('./services').HttpRequest<SearchAuthorsPayload, undefined, undefined, SearchAuthorsResult>;
30
+ authorsDetailsByIds: import('./services').HttpRequest<IdsPayload, undefined, undefined, AuthorDetails[]>;
31
+ articleSeriesSearch: import('./services').HttpRequest<SearchEntityPayload, undefined, undefined, SearchArticleSeriesResult>;
32
+ articleSeriesDetailsByIds: import('./services').HttpRequest<IdsPayload, undefined, undefined, ArticleSeriesDetails[]>;
33
+ columnsSearch: import('./services').HttpRequest<SearchColumnsPayload, undefined, undefined, SearchColumnsResult>;
34
+ columnsDetailsByIds: import('./services').HttpRequest<IdsPayload, undefined, undefined, ColumnDetails[]>;
35
+ digitalSupplementsSearch: import('./services').HttpRequest<SearchDigitalSupplementsPayload, undefined, undefined, SearchDigitalSupplementsResult>;
36
+ digitalSupplementsDetailsByIds: import('./services').HttpRequest<IdsPayload, undefined, undefined, DigitalSupplementDetails[]>;
37
+ partnersSearch: import('./services').HttpRequest<SearchEntityPayload, undefined, undefined, SearchPartnersResult>;
38
+ partnersDetailsByIds: import('./services').HttpRequest<IdsPayload, undefined, undefined, PartnerDetails[]>;
39
+ tagsSearch: import('./services').HttpRequest<SearchTagsPayload, undefined, undefined, SearchTagsResult>;
40
+ tagsDetailsByIds: import('./services').HttpRequest<IdsPayload, undefined, undefined, TagDetails[]>;
41
+ getRelationsCount: import('./services').HttpRequest<undefined, RelationParams, RelationQuery, RelationsCountResponse>;
42
+ }
43
+ export {};
@@ -0,0 +1,25 @@
1
+ import { HttpRequest, Methods } from './services';
2
+ export type EndpointConfig<Payload = unknown, RouteParams = unknown, QueryParams = unknown, Result = unknown> = {
3
+ url: string;
4
+ method?: Methods;
5
+ entityName?: string;
6
+ operationName?: string;
7
+ payloadType?: Payload;
8
+ routeParamsType?: RouteParams;
9
+ queryParamsType?: QueryParams;
10
+ resultType?: Result;
11
+ };
12
+ export type EndpointsMap = Record<string, EndpointConfig<any, any, any, any>>;
13
+ export type EndpointRequests<E extends EndpointsMap> = {
14
+ [Name in keyof E]: E[Name] extends EndpointConfig<infer P, infer RP, infer QP, infer R> ? HttpRequest<P, RP, QP, R> : never;
15
+ };
16
+ export type BackendServiceConfig<E extends EndpointsMap = EndpointsMap> = {
17
+ backendUrl: string;
18
+ endpoints: E;
19
+ };
20
+ export declare function useBackendService<E extends EndpointsMap>(config: BackendServiceConfig<E>): BackendService<E>;
21
+ export declare class BackendService<E extends EndpointsMap = EndpointsMap> {
22
+ readonly backendUrl: string;
23
+ readonly endpoints: EndpointRequests<E>;
24
+ constructor({ backendUrl, endpoints }: BackendServiceConfig<E>);
25
+ }
@@ -0,0 +1,39 @@
1
+ import { Ref } from 'vue';
2
+ export type NativeUseFetchReturn<T = unknown> = {
3
+ data: Ref<T | null>;
4
+ error: Ref<any>;
5
+ response: Ref<Response | null>;
6
+ statusCode: Ref<number | null>;
7
+ isFetching: Ref<boolean>;
8
+ canAbort: Ref<boolean>;
9
+ get: () => NativeUseFetchReturn<T>;
10
+ post: (payload?: unknown) => NativeUseFetchReturn<T>;
11
+ put: (payload?: unknown) => NativeUseFetchReturn<T>;
12
+ patch: (payload?: unknown) => NativeUseFetchReturn<T>;
13
+ delete: (payload?: unknown) => NativeUseFetchReturn<T>;
14
+ json: <R = T>() => NativeUseFetchReturn<R>;
15
+ text: () => NativeUseFetchReturn<string>;
16
+ execute: () => Promise<NativeUseFetchReturn<T>>;
17
+ abort: () => void;
18
+ };
19
+ export type CreateFetchOptions = {
20
+ baseUrl: string;
21
+ fetchOptions?: RequestInit;
22
+ options?: {
23
+ immediate?: boolean;
24
+ beforeFetch?: (ctx: {
25
+ url: string;
26
+ options: RequestInit;
27
+ }) => any;
28
+ afterFetch?: (ctx: {
29
+ data: unknown;
30
+ response: Response;
31
+ }) => any;
32
+ onFetchError?: (ctx: {
33
+ error: any;
34
+ response: Response | null;
35
+ data: unknown;
36
+ }) => any;
37
+ };
38
+ };
39
+ export declare function createNativeFetch(config: CreateFetchOptions): <T = unknown>(url: string) => NativeUseFetchReturn<T>;
@@ -0,0 +1,19 @@
1
+ import { Ref, ComputedRef } from 'vue';
2
+ import { UserInfoModel, Site } from './models';
3
+ export type UserState = 'loading' | 'authenticated' | 'error';
4
+ export interface CurrentUserStore {
5
+ user: Ref<UserInfoModel | null>;
6
+ state: Ref<UserState>;
7
+ error: Ref<string | null>;
8
+ isLoading: ComputedRef<boolean>;
9
+ isAuthenticated: ComputedRef<boolean>;
10
+ displayName: ComputedRef<string>;
11
+ email: ComputedRef<string>;
12
+ roles: ComputedRef<readonly string[]>;
13
+ initialize(backendUrl: string, enableLogging?: boolean): Promise<void>;
14
+ clear(): void;
15
+ hasPermission(siteId: string, entityName: string | 'all', accessLevel: 'reader' | 'admin'): boolean;
16
+ getMixableSitesForResource(entityName: string | 'all', currentSiteId: string | undefined): Site[];
17
+ getMixableSiteIdsForResource(entityName: string | 'all', currentSiteId: string | undefined): string[];
18
+ }
19
+ export declare function useCurrentUser(): CurrentUserStore;
@@ -0,0 +1,139 @@
1
+ import { NameIdPair, ValueLabelPair } from '../types/types';
2
+ export interface SearchEntityPayloadBase {
3
+ siteIds?: string[];
4
+ pageSize: number;
5
+ pageIndex: number;
6
+ }
7
+ export interface SearchEntityPayload extends SearchEntityPayloadBase {
8
+ name?: string;
9
+ }
10
+ export interface ArticleSeriesDetails {
11
+ id: string;
12
+ name: string;
13
+ siteId?: string;
14
+ isActive?: boolean;
15
+ webId?: string;
16
+ logoImageUrl?: string;
17
+ htmlDescription?: string;
18
+ url?: string;
19
+ }
20
+ export interface SearchAuthorsPayload extends SearchEntityPayloadBase {
21
+ authorName?: string;
22
+ archived?: boolean;
23
+ id?: string;
24
+ }
25
+ export interface AuthorDetails {
26
+ id: string;
27
+ fullName: string;
28
+ avatarUrl?: string;
29
+ imageUrl?: string;
30
+ thumbnailImageUrl?: string;
31
+ pageUrl?: string;
32
+ imageId?: string;
33
+ introduction?: string;
34
+ }
35
+ export interface SearchColumnsPayload extends SearchEntityPayload {
36
+ isArchived?: boolean;
37
+ }
38
+ export interface ColumnDetails {
39
+ id: string;
40
+ webId: string;
41
+ columnUrl: string;
42
+ name: string;
43
+ }
44
+ export interface SearchDigitalSupplementsPayload extends SearchEntityPayloadBase {
45
+ title?: string;
46
+ }
47
+ export interface DigitalSupplementDetails {
48
+ siteId?: string;
49
+ id: string;
50
+ title: string;
51
+ lead?: string;
52
+ url?: string;
53
+ releaseDate?: string;
54
+ coverImageUrl?: string;
55
+ pdfLink?: string;
56
+ links?: {
57
+ icon?: string;
58
+ url: string;
59
+ title: string;
60
+ }[];
61
+ }
62
+ export interface PartnerDetails {
63
+ id: string;
64
+ logoUrlThumb: string;
65
+ name: string;
66
+ }
67
+ export interface SearchTagsPayload extends SearchEntityPayloadBase {
68
+ display?: string;
69
+ followable?: boolean;
70
+ }
71
+ export interface TagDetails {
72
+ id: string;
73
+ siteId?: string;
74
+ webId?: string;
75
+ url?: string;
76
+ name: string;
77
+ followable?: boolean;
78
+ }
79
+ export interface UserInfoModel {
80
+ displayName: string;
81
+ roles: string[];
82
+ email: string;
83
+ id: string;
84
+ }
85
+ export interface RelationsCountResponse {
86
+ count: number;
87
+ }
88
+ export type SearchResult<K extends string> = {
89
+ total: number;
90
+ } & Record<K, NameIdPair[]>;
91
+ export type SearchAuthorsResult = SearchResult<'authors'>;
92
+ export type IdsPayload = {
93
+ ids: string[];
94
+ };
95
+ export type SearchDigitalSupplementsResult = SearchResult<'digitalSupplements'>;
96
+ export type SearchArticleSeriesResult = SearchResult<'articleSeries'>;
97
+ export type SearchColumnsResult = SearchResult<'columns'>;
98
+ export type SearchTagsResult = SearchResult<'tags'>;
99
+ export type SearchPartnersResult = SearchResult<'partners'>;
100
+ export type WidgetDetailsResponse<T> = {
101
+ name: string;
102
+ environments: T[];
103
+ };
104
+ export interface PresenceWidgetConfig {
105
+ name: string;
106
+ apiUrl: string;
107
+ }
108
+ export interface SearchPostWidgetConfig {
109
+ name: string;
110
+ apiUrl: string;
111
+ wpUrl: string;
112
+ widgetUrl: string;
113
+ }
114
+ export interface SearchImagesWidgetConfig {
115
+ name: string;
116
+ apiUrl: string;
117
+ imageBaseUrl: string;
118
+ widgetUrl: string;
119
+ viewId: string;
120
+ }
121
+ export interface Site {
122
+ name: string;
123
+ id: string;
124
+ defaultAuthor: string;
125
+ ranks: ValueLabelPair[];
126
+ others: ValueLabelPair[];
127
+ entities: Entity[];
128
+ postTypes: PostType[];
129
+ }
130
+ export interface PostType {
131
+ id: string;
132
+ name: string;
133
+ controls: string[];
134
+ properties: string[];
135
+ }
136
+ export interface Entity {
137
+ type: string;
138
+ allowedSiteIds: string[];
139
+ }
@@ -0,0 +1,38 @@
1
+ import { createNativeFetch, NativeUseFetchReturn } from './createNativeFetch';
2
+ import { Ref } from 'vue';
3
+ export declare class FetchError {
4
+ title?: string;
5
+ message?: string;
6
+ errorCode?: number;
7
+ constructor(title?: string, message?: string, errorCode?: number);
8
+ }
9
+ export interface HttpRequest<TPayload, TRouteParams, TQueryParams, TResponse> {
10
+ data: Ref<TResponse>;
11
+ execute: () => any;
12
+ isFetching: Ref<boolean>;
13
+ fetch: NativeUseFetchReturn;
14
+ successCallback?: (response: TResponse) => void;
15
+ errorCallback?: (error: FetchError) => void;
16
+ finallyCallback?: () => void;
17
+ queryParams: Ref<TQueryParams>;
18
+ routeParams: Ref<TRouteParams>;
19
+ payload: Ref<TPayload>;
20
+ }
21
+ export declare enum Methods {
22
+ GET = 0,
23
+ GET_TEXT = 1,
24
+ POST = 2,
25
+ POST_TEXT = 3,
26
+ PUT = 4,
27
+ PUT_TEXT = 5,
28
+ PATCH = 6,
29
+ DELETE = 7
30
+ }
31
+ export declare class FetchDetails {
32
+ relativeUrl: string;
33
+ method: Methods;
34
+ fetchMethod: ReturnType<typeof createNativeFetch>;
35
+ constructor(baseUrl: string, relativeUrl: string, method: Methods, errorMessages: Map<number, string>, contentType?: string | null, defaultRequestHeaders?: Record<string, string>);
36
+ }
37
+ export declare function initRequest<TPayload, TRouteParams, TQueryParams, TResponse>(fetchDetails: FetchDetails, payload: TPayload, routeParams: TRouteParams, queryParams: TQueryParams): HttpRequest<TPayload, TRouteParams, TQueryParams, TResponse>;
38
+ export declare function serializeQueryParams(queryParams: Record<string, unknown> | null | undefined): string;
@@ -0,0 +1,22 @@
1
+ import { ToastInput, ToastPosition, ToastType } from '../components/ToastNotification.vue';
2
+ export interface ToastExposed {
3
+ addToast: (input: ToastInput) => number;
4
+ dismiss: (id: number) => void;
5
+ }
6
+ export declare function __setToastInstance(value: ToastExposed | null): void;
7
+ export interface ToastShortcutOptions {
8
+ displayDuration?: number;
9
+ position?: ToastPosition;
10
+ title?: string;
11
+ id?: number;
12
+ }
13
+ interface ToastApi {
14
+ show: (input: ToastInput) => number | null;
15
+ success: (title: string, message: string, options?: ToastShortcutOptions) => number | null;
16
+ error: (title: string, message: string, options?: ToastShortcutOptions) => number | null;
17
+ warning: (title: string, message: string, options?: ToastShortcutOptions) => number | null;
18
+ info: (title: string, message: string, options?: ToastShortcutOptions) => number | null;
19
+ dismiss: (id: number) => void;
20
+ }
21
+ export declare const toast: ToastApi;
22
+ export type { ToastInput, ToastPosition, ToastType };
@@ -0,0 +1,83 @@
1
+ import { Ref } from 'vue';
2
+ import { DropdownOption } from '../components/DropdownSelect.vue';
3
+ import { PickedDate, PickedUtcRange } from './types';
4
+ import { ButtonType } from '../components/Button.vue';
5
+ export type FilterValue = string | PickedDate | PickedUtcRange | string[] | null | undefined;
6
+ export interface FilterConfig {
7
+ type: 'text' | 'date' | 'date-range' | 'select' | 'multi-select';
8
+ key: string;
9
+ placeholder?: string;
10
+ options?: DropdownOption[];
11
+ }
12
+ export type LayoutMode = 'table' | 'cards' | 'screen';
13
+ export interface DataTableSettings {
14
+ striped: boolean;
15
+ compact: boolean;
16
+ }
17
+ export interface DataCardsSettings {
18
+ compact: boolean;
19
+ }
20
+ export interface DataListSettings extends DataTableSettings, DataCardsSettings {
21
+ layout: LayoutMode;
22
+ columns: Record<string, boolean>;
23
+ cardHeaderColumns: Record<string, boolean>;
24
+ columnOrder: string[];
25
+ cardHeaderOrder: string[];
26
+ }
27
+ export interface PageSettings {
28
+ page: number;
29
+ pageSize: number;
30
+ }
31
+ export interface PaginatorSettings extends PageSettings {
32
+ total: number;
33
+ }
34
+ export interface DataListConfig {
35
+ selectableAttr?: string | undefined;
36
+ columns: Column[];
37
+ sortEnabled: boolean;
38
+ actions?: Array<Action | ActionGroup> | undefined;
39
+ actionHeader?: string | undefined;
40
+ }
41
+ export type ColumnType = 'normal' | 'uuid' | 'date' | 'datetime';
42
+ export interface Column {
43
+ visible?: boolean | undefined;
44
+ primary?: boolean | undefined;
45
+ label: string;
46
+ property: string;
47
+ sort?: undefined | Sort;
48
+ converter?: undefined | ((v: any, item: any) => any);
49
+ type?: ColumnType;
50
+ class?: string | undefined;
51
+ headerClass?: string | undefined;
52
+ loading?: (() => boolean) | undefined;
53
+ }
54
+ export type SortDirection = 'asc' | 'desc' | null;
55
+ export interface Sort {
56
+ label: string;
57
+ active: Ref<boolean> | undefined;
58
+ direction?: Ref<SortDirection> | undefined;
59
+ callback: (property: string, direction: SortDirection) => any;
60
+ }
61
+ export interface Action {
62
+ icon: string;
63
+ label?: string;
64
+ ariaLabel?: string;
65
+ cardLabel?: string;
66
+ type?: ButtonType;
67
+ config?: Record<string, any> | undefined;
68
+ disabled?: (item: any) => boolean;
69
+ callback: (item: any) => any;
70
+ }
71
+ export interface ActionGroup {
72
+ isGroup: true;
73
+ icon?: string;
74
+ label?: string;
75
+ ariaLabel?: string;
76
+ cardLabel?: string;
77
+ config?: Record<string, any> | undefined;
78
+ items: Action[];
79
+ disabled?: (item: any) => boolean;
80
+ }
81
+ export declare const dataTableSettingsDefaults: DataTableSettings;
82
+ export declare const dataCardsSettingsDefaults: DataCardsSettings;
83
+ export declare const dataListSettingsDefaults: Partial<DataListSettings>;