admins-components 9.0.12 → 9.0.13

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 (147) hide show
  1. package/dist/admins-components100.js.map +1 -0
  2. package/dist/admins-components101.js.map +1 -0
  3. package/dist/admins-components102.js.map +1 -0
  4. package/dist/admins-components103.js.map +1 -0
  5. package/dist/admins-components104.js.map +1 -0
  6. package/dist/admins-components105.js.map +1 -0
  7. package/dist/admins-components106.js.map +1 -0
  8. package/dist/admins-components107.js.map +1 -0
  9. package/dist/admins-components108.js.map +1 -0
  10. package/dist/admins-components109.js.map +1 -0
  11. package/dist/admins-components11.js.map +1 -0
  12. package/dist/admins-components110.js.map +1 -0
  13. package/dist/admins-components111.js.map +1 -0
  14. package/dist/admins-components112.js.map +1 -0
  15. package/dist/admins-components113.js.map +1 -0
  16. package/dist/admins-components114.js.map +1 -0
  17. package/dist/admins-components115.js.map +1 -0
  18. package/dist/admins-components116.js.map +1 -0
  19. package/dist/admins-components117.js.map +1 -0
  20. package/dist/admins-components118.js.map +1 -0
  21. package/dist/admins-components119.js.map +1 -0
  22. package/dist/admins-components12.js.map +1 -0
  23. package/dist/admins-components120.js.map +1 -0
  24. package/dist/admins-components121.js.map +1 -0
  25. package/dist/admins-components122.js.map +1 -0
  26. package/dist/admins-components123.js.map +1 -0
  27. package/dist/admins-components124.js.map +1 -0
  28. package/dist/admins-components125.js.map +1 -0
  29. package/dist/admins-components126.js.map +1 -0
  30. package/dist/admins-components127.js.map +1 -0
  31. package/dist/admins-components128.js.map +1 -0
  32. package/dist/admins-components129.js.map +1 -0
  33. package/dist/admins-components13.js.map +1 -0
  34. package/dist/admins-components130.js.map +1 -0
  35. package/dist/admins-components131.js.map +1 -0
  36. package/dist/admins-components132.js.map +1 -0
  37. package/dist/admins-components133.js.map +1 -0
  38. package/dist/admins-components134.js.map +1 -0
  39. package/dist/admins-components135.js.map +1 -0
  40. package/dist/admins-components136.js.map +1 -0
  41. package/dist/admins-components137.js.map +1 -0
  42. package/dist/admins-components138.js.map +1 -0
  43. package/dist/admins-components139.js.map +1 -0
  44. package/dist/admins-components14.js.map +1 -0
  45. package/dist/admins-components140.js.map +1 -0
  46. package/dist/admins-components141.js.map +1 -0
  47. package/dist/admins-components142.js.map +1 -0
  48. package/dist/admins-components143.js.map +1 -0
  49. package/dist/admins-components144.js.map +1 -0
  50. package/dist/admins-components145.js.map +1 -0
  51. package/dist/admins-components146.js.map +1 -0
  52. package/dist/admins-components147.js.map +1 -0
  53. package/dist/admins-components148.js.map +1 -0
  54. package/dist/admins-components149.js.map +1 -0
  55. package/dist/admins-components15.js.map +1 -0
  56. package/dist/admins-components150.js.map +1 -0
  57. package/dist/admins-components151.js.map +1 -0
  58. package/dist/admins-components153.js.map +1 -0
  59. package/dist/admins-components154.js.map +1 -0
  60. package/dist/admins-components155.js.map +1 -0
  61. package/dist/admins-components157.js.map +1 -0
  62. package/dist/admins-components158.js.map +1 -0
  63. package/dist/admins-components159.js.map +1 -0
  64. package/dist/admins-components16.js.map +1 -0
  65. package/dist/admins-components160.js.map +1 -0
  66. package/dist/admins-components161.js.map +1 -0
  67. package/dist/admins-components162.js.map +1 -0
  68. package/dist/admins-components163.js.map +1 -0
  69. package/dist/admins-components164.js.map +1 -0
  70. package/dist/admins-components165.js.map +1 -0
  71. package/dist/admins-components166.js.map +1 -0
  72. package/dist/admins-components167.js.map +1 -0
  73. package/dist/admins-components169.js.map +1 -0
  74. package/dist/admins-components17.js.map +1 -0
  75. package/dist/admins-components18.js.map +1 -0
  76. package/dist/admins-components19.js.map +1 -0
  77. package/dist/admins-components20.js.map +1 -0
  78. package/dist/admins-components22.js.map +1 -0
  79. package/dist/admins-components23.js.map +1 -0
  80. package/dist/admins-components24.js.map +1 -0
  81. package/dist/admins-components25.js.map +1 -0
  82. package/dist/admins-components27.js.map +1 -0
  83. package/dist/admins-components28.js.map +1 -0
  84. package/dist/admins-components3.js.map +1 -0
  85. package/dist/admins-components30.js.map +1 -0
  86. package/dist/admins-components31.js.map +1 -0
  87. package/dist/admins-components33.js.map +1 -0
  88. package/dist/admins-components34.js.map +1 -0
  89. package/dist/admins-components35.js.map +1 -0
  90. package/dist/admins-components36.js.map +1 -0
  91. package/dist/admins-components38.js.map +1 -0
  92. package/dist/admins-components39.js.map +1 -0
  93. package/dist/admins-components4.js.map +1 -0
  94. package/dist/admins-components41.js.map +1 -0
  95. package/dist/admins-components42.js.map +1 -0
  96. package/dist/admins-components43.js.map +1 -0
  97. package/dist/admins-components44.js.map +1 -0
  98. package/dist/admins-components45.js.map +1 -0
  99. package/dist/admins-components46.js.map +1 -0
  100. package/dist/admins-components48.js.map +1 -0
  101. package/dist/admins-components49.js.map +1 -0
  102. package/dist/admins-components5.js.map +1 -0
  103. package/dist/admins-components50.js.map +1 -0
  104. package/dist/admins-components52.js.map +1 -0
  105. package/dist/admins-components53.js.map +1 -0
  106. package/dist/admins-components54.js.map +1 -0
  107. package/dist/admins-components55.js.map +1 -0
  108. package/dist/admins-components56.js.map +1 -0
  109. package/dist/admins-components57.js.map +1 -0
  110. package/dist/admins-components58.js.map +1 -0
  111. package/dist/admins-components59.js.map +1 -0
  112. package/dist/admins-components6.js.map +1 -0
  113. package/dist/admins-components61.js.map +1 -0
  114. package/dist/admins-components62.js.map +1 -0
  115. package/dist/admins-components64.js.map +1 -0
  116. package/dist/admins-components65.js.map +1 -0
  117. package/dist/admins-components66.js.map +1 -0
  118. package/dist/admins-components68.js.map +1 -0
  119. package/dist/admins-components69.js.map +1 -0
  120. package/dist/admins-components7.js.map +1 -0
  121. package/dist/admins-components71.js.map +1 -0
  122. package/dist/admins-components72.js.map +1 -0
  123. package/dist/admins-components73.js.map +1 -0
  124. package/dist/admins-components75.js.map +1 -0
  125. package/dist/admins-components76.js.map +1 -0
  126. package/dist/admins-components77.js.map +1 -0
  127. package/dist/admins-components78.js.map +1 -0
  128. package/dist/admins-components8.js.map +1 -0
  129. package/dist/admins-components80.js.map +1 -0
  130. package/dist/admins-components81.js.map +1 -0
  131. package/dist/admins-components83.js.map +1 -0
  132. package/dist/admins-components84.js.map +1 -0
  133. package/dist/admins-components86.js.map +1 -0
  134. package/dist/admins-components87.js.map +1 -0
  135. package/dist/admins-components89.js.map +1 -0
  136. package/dist/admins-components90.js.map +1 -0
  137. package/dist/admins-components91.js.map +1 -0
  138. package/dist/admins-components92.js.map +1 -0
  139. package/dist/admins-components93.js.map +1 -0
  140. package/dist/admins-components94.js.map +1 -0
  141. package/dist/admins-components95.js.map +1 -0
  142. package/dist/admins-components96.js.map +1 -0
  143. package/dist/admins-components97.js.map +1 -0
  144. package/dist/admins-components98.js.map +1 -0
  145. package/dist/admins-components99.js.map +1 -0
  146. package/dist/src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  147. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components151.js","names":[],"sources":["../src/vueformelements/config/ArticleOfferElementConfig.ts"],"sourcesContent":["export interface ArticleOfferElementConfig {\n articleEditorUrl: string\n environment: string\n searchImageWidgetUrl: string\n imageBaseUrl: string\n imageViewId: string\n onFetchMetaTags?: (url: string) => any\n gotMetagTags?: (url: string, imageUrl: string | null, title: string, lead: string | null) => any\n}\n\nexport let aoeConfig: ArticleOfferElementConfig = (window as any).config?.articleOfferElement || {}\n\nexport function configureArticleOfferElement(offerConfig: ArticleOfferElementConfig) {\n aoeConfig = {\n ...aoeConfig,\n ...offerConfig,\n }\n\n return aoeConfig\n}\n"],"mappings":";AAUA,IAAW,IAAwC,OAAe,QAAQ,uBAAuB,CAAC;AAElG,SAAgB,EAA6B,GAAwC;CAMnF,OALA,IAAY;EACV,GAAG;EACH,GAAG;CACL,GAEO;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components153.js","names":[],"sources":["../src/vueformelements/ArticleOfferElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, onMounted, onUnmounted, nextTick } from 'vue'\nimport { aoeConfig } from '@/vueformelements/config/ArticleOfferElementConfig'\nimport Button from '@/components/Button.vue'\n\nexport default defineElement({\n components: { Button },\n name: 'ArticleOfferElement',\n\n setup(props, context) {\n const articleEditorUrl = aoeConfig.articleEditorUrl\n const environment = aoeConfig.environment\n const searchImageWidgetUrl = aoeConfig.searchImageWidgetUrl\n const imageBaseUrl = aoeConfig.imageBaseUrl\n const imageViewId = aoeConfig.imageViewId\n const onFetchMetaTags = aoeConfig.onFetchMetaTags\n\n const imageCausationId = ref(new Date().getTime().toString() + 'image')\n\n const EMPTYGUID = '00000000-0000-0000-0000-000000000000'\n\n const { value } = context.element\n\n const gotMetagTags = (url, imageUrl, title, lead) => {\n if (url === value.value['url']) {\n value.value.image = imageUrl\n value.value.title = title\n value.value.lead = lead\n }\n }\n\n aoeConfig.gotMetagTags = gotMetagTags\n const fetchMetaTags = () => {\n if (!value.value['url']) return\n aoeConfig.onFetchMetaTags(value.value['url'])\n }\n\n const selectImage = (event) => {\n // we need this guy, otherwise the form will be saved\n event.preventDefault()\n nextTick(() => {\n document.getElementById(imageCausationId.value).showModal()\n })\n }\n\n const resetImage = (event) => {\n event.preventDefault()\n value.value.imageId = EMPTYGUID\n value.value.image = ''\n }\n\n const addScript = (url) => {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n\n const ImageSelectedHandler = (e) => {\n if (e.detail.causationid == imageCausationId.value) {\n document.getElementById(imageCausationId.value).close()\n const image = e.detail.image\n value.value.image = image.url\n }\n }\n\n onUnmounted(() => {\n window.removeEventListener('image-selected', ImageSelectedHandler, false)\n })\n\n onMounted(() => {\n window.addEventListener('image-selected', ImageSelectedHandler)\n })\n\n addScript(searchImageWidgetUrl)\n\n return {\n articleEditorUrl,\n environment,\n imageViewId,\n imageBaseUrl,\n imageCausationId: imageCausationId,\n searchImageWidgetUrl,\n selectImage,\n resetImage,\n addScript,\n value,\n fetchMetaTags,\n onFetchMetaTags,\n gotMetagTags,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <label for=\"articleUrl\" class=\"c-label\">Cikk url</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleUrl\"\n class=\"c-input\"\n placeholder=\"Cikk url\"\n :value=\"value.url\"\n @input=\"\n (event) => {\n value.url = event.target.value\n }\n \"\n @blur=\"fetchMetaTags\"\n />\n </div>\n </div>\n <div>\n <label for=\"articleTitle\" class=\"c-label\">Címe</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Címe\"\n :value=\"value.title\"\n @input=\"value.title = $event.target.value\"\n ></textarea>\n </div>\n </div>\n <div>\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Lead\"\n :value=\"value.lead\"\n @input=\"value.lead = $event.target.value\"\n ></textarea>\n </div>\n </div>\n <div>\n <label class=\"c-label\" style=\"display: block\">Kép</label>\n <img\n alt=\"\"\n :src=\"value.image\"\n @input=\"value.image = $event.target.value\"\n style=\"height: 200px\"\n />\n </div>\n <div v-if=\"value.imageId === '00000000-0000-0000-0000-000000000000'\">\n Nincs kép kiválasztva!\n </div>\n <div class=\"flex-center mt-2 w-100\" role=\"group\" aria-label=\"Képválasztó gombok\">\n <Button\n type=\"dark\"\n label=\"Kép Választás\"\n @click=\"\n (event) => {\n selectImage(event)\n }\n \"\n />\n <Button\n type=\"danger\"\n label=\"Eltávolítás\"\n @click=\"\n (event) => {\n resetImage(event)\n }\n \"\n />\n </div>\n <dialog :id=\"imageCausationId\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :environment=\"environment\"\n :aeurl=\"articleEditorUrl\"\n selectonly=\"true\"\n ></hvg-search-image>\n </dialog>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components154.js","names":[],"sources":["../src/vueformelements/config/ArticlePickerElementConfig.ts"],"sourcesContent":["export interface ArticlePickerElementConfig {\n searchArticleApiUrl: string\n searchArticleWidgetUrl: string\n showIds?: boolean\n}\n\nexport let apeConfig: ArticlePickerElementConfig = (window as any).config?.articlePicker || {}\n\nexport function configureArticlePickerElement(apec: ArticlePickerElementConfig) {\n apeConfig = {\n ...apeConfig,\n ...apec,\n }\n return apeConfig\n}\n"],"mappings":";AAMA,IAAW,IAAyC,OAAe,QAAQ,iBAAiB,CAAC;AAE7F,SAAgB,EAA8B,GAAkC;CAK9E,OAJA,IAAY;EACV,GAAG;EACH,GAAG;CACL,GACO;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components155.js","names":[],"sources":["../src/vueformelements/config/ImagePickerElementConfig.ts"],"sourcesContent":["export interface ImagePickerElementConfig {\n environment: string\n articleEditorUrl: string\n searchImageWidgetUrl: string\n imageBaseUrl: string\n imageViewId: string\n}\n\nexport let ipeConfig: ImagePickerElementConfig = (window as any).config?.imagePicker || {}\n\nexport function configureImagePickerElement(ipec: ImagePickerElementConfig) {\n ipeConfig = {\n ...ipeConfig,\n ...ipec,\n }\n\n return ipeConfig\n}\n"],"mappings":";AAQA,IAAW,IAAuC,OAAe,QAAQ,eAAe,CAAC;AAEzF,SAAgB,EAA4B,GAAgC;CAM1E,OALA,IAAY;EACV,GAAG;EACH,GAAG;CACL,GAEO;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components157.js","names":[],"sources":["../src/vueformelements/ArticlePickerElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, onUnmounted, onMounted, nextTick } from 'vue'\nimport { apeConfig } from '@/vueformelements/config/ArticlePickerElementConfig'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\nimport Button from '@/components/Button.vue'\n\nexport default defineElement({\n components: { Button },\n name: 'ArticlePickerElement',\n\n setup(props, context) {\n const environment = ipeConfig.environment\n const searchImageWidgetUrl = ipeConfig.searchImageWidgetUrl\n const imageBaseUrl = ipeConfig.imageBaseUrl\n const imageViewId = ipeConfig.imageViewId\n\n const searchArticleApiUrl = apeConfig.searchArticleApiUrl\n const searchArticleWidgetUrl = apeConfig.searchArticleWidgetUrl\n const showIds = apeConfig.showIds\n\n const imageCausationId = ref(new Date().getTime().toString() + 'image')\n const articleCausationId = ref(new Date().getTime().toString() + 'article')\n\n const EMPTYGUID = '00000000-0000-0000-0000-000000000000'\n\n const { value } = context.element\n\n const selectImage = (event) => {\n // we need this guy, otherwise the form will be saved\n event.preventDefault()\n\n nextTick(() => {\n document.getElementById(imageCausationId.value).showModal()\n })\n }\n\n const selectArticle = (event) => {\n nextTick(() => {\n document.getElementById(articleCausationId.value).showModal()\n })\n }\n\n const resetImage = (event) => {\n event.preventDefault()\n value.value.imageId = EMPTYGUID\n }\n\n const addScript = (url) => {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n\n const getImageUrl = () => {\n return `${imageBaseUrl}/${imageViewId}/${value.value.imageId}.img`\n }\n\n addScript(searchImageWidgetUrl)\n addScript(searchArticleWidgetUrl)\n\n const ImageSelectedHandler = (e) => {\n if (e.detail.causationid == imageCausationId.value) {\n document.getElementById(imageCausationId.value).close()\n value.value.imageId = e.detail.image.id\n }\n }\n\n onUnmounted(() => {\n window.removeEventListener('image-selected', ImageSelectedHandler, false)\n })\n\n onMounted(() => {\n window.addEventListener('image-selected', ImageSelectedHandler)\n\n window.addEventListener('search_posts_selected', (e) => {\n if (e.detail.id == articleCausationId.value) {\n if (e.detail.result && e.detail.posts.length > 0) {\n value.value.id = e.detail.posts[0].id\n value.value.siteId = e.detail.posts[0].siteId\n value.value.title = e.detail.posts[0].title\n value.value.lead = e.detail.posts[0].lead\n const imageId = e.detail.posts[0].featuredImage\n value.value.imageId = imageId || EMPTYGUID\n }\n\n document.getElementById(articleCausationId.value).close()\n }\n })\n })\n\n return {\n imageViewId,\n imageBaseUrl,\n imageCausationId: imageCausationId,\n articleCausationId: articleCausationId,\n searchImageWidgetUrl,\n environment,\n searchArticleApiUrl,\n selectImage,\n selectArticle,\n resetImage,\n addScript,\n value,\n getImageUrl,\n showIds,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <div class=\"article-picker-container\">\n <div class=\"article-picker-section\">\n <Button type=\"normal\" label=\"Cikk Választás\" @click=\"selectArticle\" />\n </div>\n\n <template v-if=\"showIds\">\n <div class=\"article-picker-ids\">\n <div class=\"article-picker-id-field\">\n <label for=\"articleId\" class=\"c-label\">Cikk azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleId\"\n class=\"c-input\"\n placeholder=\"Cikk azonosító\"\n disabled\n :value=\"value.id\"\n />\n </div>\n </div>\n <div class=\"article-picker-id-field\">\n <label for=\"articleSiteId\" class=\"c-label\">Site azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleSiteId\"\n class=\"c-input\"\n placeholder=\"Site azonosító\"\n disabled\n :value=\"value.siteId\"\n />\n </div>\n </div>\n </div>\n </template>\n\n <div class=\"article-picker-section\">\n <label for=\"articleTitle\" class=\"c-label\">Címe</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Címe\"\n :value=\"value.title\"\n @input=\"value.title = $event.target.value\"\n ></textarea>\n </div>\n </div>\n\n <div class=\"article-picker-section\">\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Lead\"\n :value=\"value.lead\"\n @input=\"value.lead = $event.target.value\"\n ></textarea>\n </div>\n </div>\n\n <div class=\"article-picker-section\">\n <label class=\"c-label\">Kép</label>\n <img\n alt=\"\"\n :src=\"getImageUrl()\"\n @input=\"value.image = $event.target.value\"\n class=\"article-picker-image\"\n />\n </div>\n\n <div\n v-if=\"value.imageId === '00000000-0000-0000-0000-000000000000'\"\n class=\"article-picker-no-image\"\n >\n Nincs kép kiválasztva!\n </div>\n\n <div class=\"article-picker-buttons\">\n <Button type=\"normal\" label=\"Kép Választás\" @click=\"selectImage\" />\n <Button type=\"error\" label=\"Eltávolítás\" @click=\"resetImage\" />\n </div>\n </div>\n\n <dialog :id=\"imageCausationId\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :aeurl=\"searchArticleApiUrl\"\n :environment=\"environment\"\n selectonly=\"true\"\n ></hvg-search-image>\n </dialog>\n <dialog :id=\"articleCausationId\">\n <search-posts-widget\n :id=\"articleCausationId\"\n selector=\"true\"\n :apiurl=\"searchArticleApiUrl\"\n wpurl=\"\"\n searchurl=\"\"\n style=\"height: 100%\"\n ></search-posts-widget>\n </dialog>\n </div>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n\n<style scoped>\n.article-picker-container {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.article-picker-section {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.article-picker-ids {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n\n.article-picker-id-field {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.article-picker-image {\n height: 200px;\n max-width: 100%;\n border-radius: var(--ac-field-border-radius);\n object-fit: cover;\n}\n\n.article-picker-no-image {\n padding: var(--ac-input-padding);\n color: var(--neutral-500);\n font-size: var(--ac-field-font-size);\n}\n\n.article-picker-buttons {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components158.js","names":[],"sources":["../src/vueformelements/DateTimePickerElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, watch } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\n\nexport default defineElement({\n name: 'DateTimePickerElement',\n components: {\n DatePicker,\n },\n setup(props, context) {\n const { value } = context.element\n value.value = new Date()\n\n const placeholder = context.attrs.placeholder\n const initial = ref(null)\n const display = ref(false)\n\n const setValue = (v) => {\n if (v && v.utc) {\n value.value = v.utc\n }\n }\n\n watch(\n value,\n () => {\n initial.value = {\n local: value.value ? new Date(value.value) : null,\n utc: value.value,\n }\n display.value = true\n },\n { deep: true, immediate: true }\n )\n\n return {\n display,\n placeholder,\n initial,\n value,\n setValue,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <DatePicker\n v-if=\"display\"\n :model-value=\"initial\"\n :config=\"{ showTime: true, placeholder: placeholder }\"\n @update:model-value=\"setValue($event)\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;AAKA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EACV,YAAA,EACF;CACA,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ;EAC1B,EAAM,wBAAQ,IAAI,KAAK;EAEvB,IAAM,IAAc,EAAQ,MAAM,aAC5B,IAAU,EAAI,IAAI,GAClB,IAAU,EAAI,EAAK;EAoBzB,OAZA,EACE,SACM;GAKJ,AAJA,EAAQ,QAAQ;IACd,OAAO,EAAM,QAAQ,IAAI,KAAK,EAAM,KAAK,IAAI;IAC7C,KAAK,EAAM;GACb,GACA,EAAQ,QAAQ;EAClB,GACA;GAAE,MAAM;GAAM,WAAW;EAAK,CAChC,GAEO;GACL;GACA;GACA;GACA;GACA,WAvBgB,MAAM;IACtB,AAAI,KAAK,EAAE,QACT,EAAM,QAAQ,EAAE;GAEpB;EAoBA;CACF;AACF,CAAC;;;aAIC,EAgBgB,GAAA,MAAA,EAAA;EAfH,SAAO,QAMd,CAJM,EAAA,WAAA,EAAA,GADR,EAKE,GAAA;;GAHC,eAAa,EAAA;GACb,QAAM;IAAA,UAAA;IAAA,aAAiC,EAAA;GAAW;GAClD,uBAAkB,AAAA,EAAA,QAAA,MAAE,EAAA,SAAS,CAAM;;;OAIF,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components159.js","names":[],"sources":["../src/vueformelements/config/ExternalArticleOfferElementConfig.ts"],"sourcesContent":["import type { Article } from '@/components/custom/ExternalArticleOffer.vue'\n\nexport interface ExternalArticleOfferElementConfig {\n formats: { label: string; value: string }[]\n onArticleUrlChanged: (url: string, callback: (article: Article) => void) => void\n}\n\nexport let eaoeConfig: ExternalArticleOfferElementConfig =\n (window as any).config?.externalArticleOfferElement || {}\n\nexport function configureExternalArticleOfferElement(conf: ExternalArticleOfferElementConfig) {\n eaoeConfig = {\n ...eaoeConfig,\n ...conf,\n }\n\n return eaoeConfig\n}\n"],"mappings":";AAOA,IAAW,IACR,OAAe,QAAQ,+BAA+B,CAAC;AAE1D,SAAgB,EAAqC,GAAyC;CAM5F,OALA,IAAa;EACX,GAAG;EACH,GAAG;CACL,GAEO;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components16.js","names":[],"sources":["../src/components/Checkbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useId } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean\n label?: string\n disabled?: boolean\n labelAlignmentFix?: boolean\n }>(),\n {\n modelValue: undefined,\n label: undefined,\n disabled: false,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean | undefined]\n}>()\n\nconst inputId = `c-checkbox-${useId()}`\n\nfunction toggle() {\n if (props.disabled) return\n\n emit('update:modelValue', !props.modelValue || undefined)\n}\n</script>\n\n<template>\n <div class=\"c-checkbox-wrapper\">\n <span\n class=\"c-checkbox\"\n :class=\"{\n 'c-checkbox--checked': !!modelValue,\n 'c-checkbox--disabled': disabled,\n }\"\n :id=\"inputId\"\n role=\"checkbox\"\n :aria-checked=\"!!modelValue\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n @keydown.space.prevent=\"toggle\"\n ></span>\n\n <label\n v-if=\"label\"\n class=\"c-label pointer\"\n :class=\"{ 'align-center-text-fix': labelAlignmentFix }\"\n @click=\"toggle\"\n :for=\"inputId\"\n >\n {{ label }}\n </label>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components160.js","names":[],"sources":["../src/vueformelements/ExternalArticleOfferElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\nimport { eaoeConfig } from '@/vueformelements/config/ExternalArticleOfferElementConfig'\nimport ExternalArticleOffer from '@/components/custom/ExternalArticleOffer.vue'\n\nexport default defineElement({\n name: 'ExternalArticleOfferElement',\n components: { ExternalArticleOffer },\n\n setup(props, context) {\n const { value } = context.element\n\n return {\n ipeConfig,\n eaoeConfig,\n value,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <ExternalArticleOffer\n v-model=\"value\"\n :article-editor-url=\"ipeConfig.articleEditorUrl\"\n :environment=\"ipeConfig.environment\"\n :search-image-widget-url=\"ipeConfig.searchImageWidgetUrl\"\n :image-base-url=\"ipeConfig.imageBaseUrl\"\n :image-view-id=\"ipeConfig.imageViewId\"\n :formats=\"eaoeConfig.formats\"\n :on-article-url-changed=\"eaoeConfig.onArticleUrlChanged\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EAAE,sBAAA,EAAqB;CAEnC,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ;EAE1B,OAAO;GACL;GACA;GACA;EACF;CACF;AACF,CAAC;;;aAIC,EAoBgB,GAAA,MAAA,EAAA;EAnBH,SAAO,QAUd,CATF,EASE,GAAA;eARS,EAAA;0CAAA,EAAA,QAAK;GACb,sBAAoB,EAAA,UAAU;GAC9B,aAAa,EAAA,UAAU;GACvB,2BAAyB,EAAA,UAAU;GACnC,kBAAgB,EAAA,UAAU;GAC1B,iBAAe,EAAA,UAAU;GACzB,SAAS,EAAA,WAAW;GACpB,0BAAwB,EAAA,WAAW;;;;;;;;;;;;OAIF,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components161.js","names":[],"sources":["../src/vueformelements/config/GalleryImageSelectorElementConfig.ts"],"sourcesContent":["export interface GalleryImageSelectorElementConfig {\n galleryApiUrl: string\n onFetchGallery: (id: string, callback: (data: any) => any) => any\n}\n\nexport let gisConfig: GalleryImageSelectorElementConfig =\n (window as any).config?.galleryImageSelector || {}\n\nexport const configureGalleryImageSelectorElement = (gisc: GalleryImageSelectorElementConfig) => {\n gisConfig = {\n ...gisConfig,\n ...gisc,\n }\n\n return gisConfig\n}\n"],"mappings":";AAKA,IAAW,IACR,OAAe,QAAQ,wBAAwB,CAAC,GAEtC,KAAwC,OACnD,IAAY;CACV,GAAG;CACH,GAAG;AACL,GAEO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components162.js","names":[],"sources":["../src/vueformelements/GalleryImageSelectorElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, watch } from 'vue'\nimport { gisConfig } from '@/vueformelements/config/GalleryImageSelectorElementConfig'\n\nexport default defineElement({\n name: 'GalleryImageSelectorElement',\n setup(props, context) {\n const { value } = context.element\n\n const items = ref([])\n\n const onGalleryIdChanged = (event) => {\n value.value.activeImageIndex = 0\n value.value.galleryId = event.target.value\n\n gisConfig.onFetchGallery(event.target.value, (data) => {\n items.value = data.items || []\n updateImageUrl()\n })\n }\n\n watch(\n () => value.value,\n (newVal, oldVal) => {\n if (!newVal || newVal?.galleryId === oldVal?.galleryId) {\n return\n }\n\n gisConfig.onFetchGallery(newVal?.galleryId, (data) => {\n items.value = data.items || []\n updateImageUrl()\n })\n },\n { immediate: true, deep: true },\n )\n\n const onActiveIndexChanged = (event) => {\n value.value.activeImageIndex = event.target.value\n updateImageUrl()\n }\n\n const imageUrl = ref()\n const updateImageUrl = () => {\n if (items.value && value.value.activeImageIndex >= 0) {\n const url = items.value[value.value.activeImageIndex]?.url\n imageUrl.value = url\n return\n }\n imageUrl.value = null\n }\n\n return {\n onGalleryIdChanged,\n onActiveIndexChanged,\n imageUrl,\n value,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <div v-if=\"imageUrl\">\n <img class=\"gallery__preview\" alt=\"\" :src=\"imageUrl\" />\n </div>\n <div v-if=\"!imageUrl\">\n <p class=\"gallery__preview-empty\">Nincs kép kiválasztva!</p>\n </div>\n <div>\n <label for=\"galleryId\" class=\"c-label\">Galéria azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"galleryId\"\n placeholder=\"Galéria azonosító\"\n class=\"c-input\"\n :value=\"value.galleryId\"\n @input=\"(event) => onGalleryIdChanged(event)\"\n />\n </div>\n </div>\n <div>\n <label for=\"activeImageIndex\" class=\"c-label\">Aktív kép index</label>\n <div class=\"c-input-row\">\n <input\n type=\"number\"\n id=\"activeImageIndex\"\n placeholder=\"Aktív kép index\"\n class=\"c-input\"\n :value=\"value.activeImageIndex\"\n @input=\"(event) => onActiveIndexChanged(event)\"\n />\n </div>\n </div>\n </div>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;AAKA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ,SAEpB,IAAQ,EAAI,CAAC,CAAC,GAEd,KAAsB,MAAU;GAIpC,AAHA,EAAM,MAAM,mBAAmB,GAC/B,EAAM,MAAM,YAAY,EAAM,OAAO,OAErC,EAAU,eAAe,EAAM,OAAO,QAAQ,MAAS;IAErD,AADA,EAAM,QAAQ,EAAK,SAAS,CAAC,GAC7B,EAAe;GACjB,CAAC;EACH;EAEA,QACQ,EAAM,QACX,GAAQ,MAAW;GACd,CAAC,KAAU,GAAQ,cAAc,GAAQ,aAI7C,EAAU,eAAe,GAAQ,YAAY,MAAS;IAEpD,AADA,EAAM,QAAQ,EAAK,SAAS,CAAC,GAC7B,EAAe;GACjB,CAAC;EACH,GACA;GAAE,WAAW;GAAM,MAAM;EAAK,CAChC;EAEA,IAAM,KAAwB,MAAU;GAEtC,AADA,EAAM,MAAM,mBAAmB,EAAM,OAAO,OAC5C,EAAe;EACjB,GAEM,IAAW,EAAI,GACf,UAAuB;GAC3B,IAAI,EAAM,SAAS,EAAM,MAAM,oBAAoB,GAAG;IAEpD,EAAS,QADG,EAAM,MAAM,EAAM,MAAM,mBAAmB;IAEvD;GACF;GACA,EAAS,QAAQ;EACnB;EAEA,OAAO;GACL;GACA;GACA;GACA;EACF;CACF;AACF,CAAC,SAMU,OAAM,eAAc,sDAShB,OAAM,cAAa,wBAanB,OAAM,cAAa;;;aAxBhC,EA4CgB,GAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CA3CE,EAAA,QAAA;QAAQ;cAkChB,CAjCN,EAiCM,OAjCN,GAiCM;GAhCO,EAAA,YAAA,EAAA,GAAX,EAEM,OAAA,GAAA,CADJ,EAAuD,OAAA;IAAlD,OAAM;IAAmB,KAAI;IAAI,KAAK,EAAA;;GAEjC,EAAA,WAC8C,EAAA,IAAA,EAAA,KAD9C,EAAA,GAAZ,EAEM,OAAA,GAAA,CAAA,GAAA,AAAA,EAAA,OAAA,CADJ,EAA4D,KAAA,EAAzD,OAAM,yBAAwB,GAAC,0BAAsB,EAAA,CAAA,CAAA,CAAA;GAE1D,EAYM,OAAA,MAAA,CAAA,AAAA,EAAA,OAXJ,EAAgE,SAAA;IAAzD,KAAI;IAAY,OAAM;MAAU,qBAAiB,EAAA,GACxD,EASM,OATN,GASM,CARJ,EAOE,SAAA;IANA,MAAK;IACL,IAAG;IACH,aAAY;IACZ,OAAM;IACL,OAAO,EAAA,MAAM;IACb,SAAK,AAAA,EAAA,QAAG,MAAU,EAAA,mBAAmB,CAAK;;GAIjD,EAYM,OAAA,MAAA,CAAA,AAAA,EAAA,OAXJ,EAAqE,SAAA;IAA9D,KAAI;IAAmB,OAAM;MAAU,mBAAe,EAAA,GAC7D,EASM,OATN,GASM,CARJ,EAOE,SAAA;IANA,MAAK;IACL,IAAG;IACH,aAAY;IACZ,OAAM;IACL,OAAO,EAAA,MAAM;IACb,SAAK,AAAA,EAAA,QAAG,MAAU,EAAA,qBAAqB,CAAK;;;;eAOjB,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components163.js","names":[],"sources":["../src/vueformelements/ImagePickerElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport ImagePicker from '@/components/custom/ImagePicker.vue'\nimport { ref, watch } from 'vue'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\n\nexport default defineElement({\n name: 'ImagePickerElement',\n components: { ImagePicker },\n\n setup(props, ctx) {\n const { value } = ctx.element // value is ref. its a string (image id) or undefined\n\n const model = ref({\n id: value.value,\n source: '',\n title: '',\n isAdult: false,\n url: '',\n })\n\n watch(\n () => value,\n (newVal) => {\n model.value.id = newVal.value\n },\n { immediate: true, deep: true },\n )\n\n return { ipeConfig, value, model }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <ImagePicker\n v-model=\"model\"\n @update:modelValue=\"(img) => (value = img?.id)\"\n :editable=\"false\"\n :details=\"false\"\n :environment=\"ipeConfig.environment\"\n :articleEditorUrl=\"ipeConfig.articleEditorUrl\"\n :searchImageWidgetUrl=\"ipeConfig.searchImageWidgetUrl\"\n :imageBaseUrl=\"ipeConfig.imageBaseUrl\"\n :imageViewId=\"ipeConfig.imageViewId\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EAAE,aAAA,EAAY;CAE1B,MAAM,GAAO,GAAK;EAChB,IAAM,EAAE,aAAU,EAAI,SAEhB,IAAQ,EAAI;GAChB,IAAI,EAAM;GACV,QAAQ;GACR,OAAO;GACP,SAAS;GACT,KAAK;EACP,CAAC;EAUD,OARA,QACQ,IACL,MAAW;GACV,EAAM,MAAM,KAAK,EAAO;EAC1B,GACA;GAAE,WAAW;GAAM,MAAM;EAAK,CAChC,GAEO;GAAE;GAAW;GAAO;EAAM;CACnC;AACF,CAAC;;;aAIC,EAqBgB,GAAA,MAAA,EAAA;EApBH,SAAO,QAWd,CAVF,EAUE,GAAA;eATS,EAAA;2CAAA,EAAA,QAAK,GAAA,AAAA,EAAA,QACO,MAAS,EAAA,QAAQ,GAAK,EAAA;GAC1C,UAAU;GACV,SAAS;GACT,aAAa,EAAA,UAAU;GACvB,kBAAkB,EAAA,UAAU;GAC5B,sBAAsB,EAAA,UAAU;GAChC,cAAc,EAAA,UAAU;GACxB,aAAa,EAAA,UAAU;;;;;;;;;;OAIU,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components164.js","names":[],"sources":["../src/vueformelements/ImagePickerDetailsElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { watch } from 'vue'\nimport ImagePicker from '@/components/custom/ImagePicker.vue'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\n\nexport default defineElement({\n name: 'ImagePickerDetailsElement',\n components: { ImagePicker },\n\n setup(props, context) {\n const { value } = context.element\n const direction = context.attrs.direction ? context.attrs.direction : 'vertical'\n\n watch(\n () => value,\n () => {\n if (!value.value) {\n value.value = {\n id: '00000000-0000-0000-0000-000000000000',\n source: '',\n title: '',\n isAdult: false,\n }\n }\n },\n { deep: true, immediate: true },\n )\n\n return {\n ipeConfig,\n value,\n direction,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <ImagePicker\n v-model=\"value\"\n :editable=\"true\"\n :details=\"true\"\n :direction=\"direction\"\n :environment=\"ipeConfig.environment\"\n :articleEditorUrl=\"ipeConfig.articleEditorUrl\"\n :searchImageWidgetUrl=\"ipeConfig.searchImageWidgetUrl\"\n :imageBaseUrl=\"ipeConfig.imageBaseUrl\"\n :imageViewId=\"ipeConfig.imageViewId\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EAAE,aAAA,EAAY;CAE1B,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ,SACpB,IAAY,EAAQ,MAAM,YAAY,EAAQ,MAAM,YAAY;EAiBtE,OAfA,QACQ,SACA;GACJ,AACE,EAAM,UAAQ;IACZ,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,SAAS;GACX;EAEJ,GACA;GAAE,MAAM;GAAM,WAAW;EAAK,CAChC,GAEO;GACL;GACA;GACA;EACF;CACF;AACF,CAAC;;;aAIC,EAqBgB,GAAA,MAAA,EAAA;EApBH,SAAO,QAWd,CAVF,EAUE,GAAA;eATS,EAAA;0CAAA,EAAA,QAAK;GACb,UAAU;GACV,SAAS;GACT,WAAW,EAAA;GACX,aAAa,EAAA,UAAU;GACvB,kBAAkB,EAAA,UAAU;GAC5B,sBAAsB,EAAA,UAAU;GAChC,cAAc,EAAA,UAAU;GACxB,aAAa,EAAA,UAAU;;;;;;;;;;;OAIU,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components165.js","names":[],"sources":["../src/vueformelements/config/InternalArticleOfferElementConfig.ts"],"sourcesContent":["export interface InternalArticleOfferElementConfig {\n searchArticleApiUrl: string\n searchArticleWidgetUrl: string\n showIds?: boolean\n formats: { label: string; value: string }[]\n}\n\nexport let iaoeConfig: InternalArticleOfferElementConfig = (window as any).config?.internalArticleOfferElement || {}\n\nexport function configureInternalArticleOfferElement(conf: InternalArticleOfferElementConfig) {\n iaoeConfig = {\n ...iaoeConfig,\n ...conf,\n }\n\n return iaoeConfig\n}\n"],"mappings":";AAOA,IAAW,IAAiD,OAAe,QAAQ,+BAA+B,CAAC;AAEnH,SAAgB,EAAqC,GAAyC;CAM5F,OALA,IAAa;EACX,GAAG;EACH,GAAG;CACL,GAEO;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components166.js","names":[],"sources":["../src/vueformelements/InternalArticleOfferElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\nimport { iaoeConfig } from '@/vueformelements/config/InternalArticleOfferElementConfig'\nimport InternalArticleOffer from '@/components/custom/InternalArticleOffer.vue'\n\nexport default defineElement({\n name: 'InternalArticleOfferElement',\n components: { InternalArticleOffer },\n\n setup(props, context) {\n const { value } = context.element\n\n return {\n ipeConfig,\n iaoeConfig,\n value,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <InternalArticleOffer\n v-model=\"value\"\n :show-ids=\"iaoeConfig.showIds\"\n :search-article-api-url=\"iaoeConfig.searchArticleApiUrl\"\n :search-article-widget-url=\"iaoeConfig.searchArticleWidgetUrl\"\n :search-image-widget-url=\"ipeConfig.searchImageWidgetUrl\"\n :image-base-url=\"ipeConfig.imageBaseUrl\"\n :environment=\"ipeConfig.environment\"\n :image-view-id=\"ipeConfig.imageViewId\"\n :formats=\"iaoeConfig.formats\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EAAE,sBAAA,EAAqB;CAEnC,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ;EAE1B,OAAO;GACL;GACA;GACA;EACF;CACF;AACF,CAAC;;;aAIC,EAqBgB,GAAA,MAAA,EAAA;EApBH,SAAO,QAWd,CAVF,EAUE,GAAA;eATS,EAAA;0CAAA,EAAA,QAAK;GACb,YAAU,EAAA,WAAW;GACrB,0BAAwB,EAAA,WAAW;GACnC,6BAA2B,EAAA,WAAW;GACtC,2BAAyB,EAAA,UAAU;GACnC,kBAAgB,EAAA,UAAU;GAC1B,aAAa,EAAA,UAAU;GACvB,iBAAe,EAAA,UAAU;GACzB,SAAS,EAAA,WAAW;;;;;;;;;;;;;OAIa,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components167.js","names":[],"sources":["../src/vueformelements/config/PartnerPickerElementConfig.ts"],"sourcesContent":["export interface PartnerPickerElementConfig {\n onFetchData: (id: string, callback: (id: string, url: string, name: string) => any) => any\n}\n\nexport let ppeconfig: PartnerPickerElementConfig = (window as any).config?.partnerPicker || {}\n\nexport function configurePartnerPickerElement(conf: PartnerPickerElementConfig) {\n ppeconfig = {\n ...ppeconfig,\n ...conf,\n }\n\n return ppeconfig\n}\n"],"mappings":";AAIA,IAAW,IAAyC,OAAe,QAAQ,iBAAiB,CAAC;AAE7F,SAAgB,EAA8B,GAAkC;CAM9E,OALA,IAAY;EACV,GAAG;EACH,GAAG;CACL,GAEO;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components169.js","names":[],"sources":["../src/vueformelements/PartnerPickerElement.vue"],"sourcesContent":["<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, watch } from 'vue'\nimport { ppeconfig } from '@/vueformelements/config/PartnerPickerElementConfig'\n\nexport default defineElement({\n name: 'PartnerPickerElement',\n setup(props, context) {\n const { value } = context.element\n\n const logoUrl = ref('')\n const pname = ref('')\n\n watch(\n value,\n (v) => {\n if (v) {\n fetchData(v)\n }\n },\n { deep: true },\n )\n\n const onFetchData = ppeconfig.onFetchData\n\n const fetchData = (id) => {\n if (id) ppeconfig.onFetchData(id, gotData)\n }\n\n const gotData = (id, lu, nm) => {\n logoUrl.value = lu\n pname.value = nm\n\n if (value.value != id) value.value = id\n }\n\n return {\n logoUrl,\n pname,\n value,\n fetchData,\n onFetchData,\n gotData,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <div class=\"flex flex-column gap-2 ac-component\">\n <div class=\"flex gap-2 w-100\">\n <img alt=\"\" :src=\"logoUrl\" class=\"partner-logo\" />\n <div class=\"w-100\">\n <div class=\"c-input-row\">\n <input type=\"text\" class=\"c-input\" :value=\"pname\" disabled placeholder=\"Neve\" />\n </div>\n </div>\n </div>\n <div class=\"w-100\">\n <div class=\"c-input-row\">\n <input\n id=\"partner-id\"\n type=\"text\"\n class=\"c-input\"\n :value=\"value\"\n @change=\"(e) => fetchData(e.target.value)\"\n placeholder=\"Azonoító\"\n />\n </div>\n </div>\n </div>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n\n<style scoped>\n.partner-logo {\n max-width: 25px;\n height: auto;\n flex-shrink: 0;\n}\n</style>\n"],"mappings":";;;;;;AAKA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ,SAEpB,IAAU,EAAI,EAAE,GAChB,IAAQ,EAAI,EAAE;EAEpB,EACE,IACC,MAAM;GACL,AAAI,KACF,EAAU,CAAC;EAEf,GACA,EAAE,MAAM,GAAK,CACf;EAEA,IAAM,IAAc,EAAU,aAExB,KAAa,MAAO;GACxB,AAAI,KAAI,EAAU,YAAY,GAAI,CAAO;EAC3C,GAEM,KAAW,GAAI,GAAI,MAAO;GAI9B,AAHA,EAAQ,QAAQ,GAChB,EAAM,QAAQ,GAEV,EAAM,SAAS,MAAI,EAAM,QAAQ;EACvC;EAEA,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;EACF;CACF;AACF,CAAC,SAMU,OAAM,sCAAqC,SACzC,OAAM,mBAAkB,sBAEtB,OAAM,QAAO,SACX,OAAM,cAAa,wBAKvB,OAAM,QAAO,SACX,OAAM,cAAa;;;aAZhC,EAgCgB,GAAA,MAAA,EAAA;EA/BH,SAAO,QAsBV,CArBN,EAqBM,OArBN,GAqBM,CApBJ,EAOM,OAPN,GAOM,CANJ,EAAkD,OAAA;GAA7C,KAAI;GAAI,KAAK,EAAA;GAAS,OAAM;kBACjC,EAIM,OAJN,GAIM,CAHJ,EAEM,OAFN,GAEM,CADJ,EAAgF,SAAA;GAAzE,MAAK;GAAO,OAAM;GAAW,OAAO,EAAA;GAAO,UAAA;GAAS,aAAY;wBAI7E,EAWM,OAXN,GAWM,CAVJ,EASM,OATN,GASM,CARJ,EAOE,SAAA;GANA,IAAG;GACH,MAAK;GACL,OAAM;GACL,OAAO,EAAA;GACP,UAAM,AAAA,EAAA,QAAG,MAAM,EAAA,UAAU,EAAE,OAAO,KAAK;GACxC,aAAY;;;OAOgB,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,GAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components17.js","names":[],"sources":["../src/utils/predefinedDateRange.ts"],"sourcesContent":["import { localToUTCString, startOfDay, endOfDay, startOfWeek, isSameCalendarDay } from '@/utils/date'\nimport type { PickedDate } from '@/types/types'\n\nexport type PredefinedRangeKey =\n | 'lastDay'\n | 'thisDay'\n | 'lastWeek'\n | 'thisWeek'\n | 'lastMonth'\n | 'thisMonth'\n\nexport interface PredefinedRange {\n key: PredefinedRangeKey\n label: string\n}\n\nexport const predefinedRanges: PredefinedRange[] = [\n { key: 'lastDay', label: 'Tegnap' },\n { key: 'thisDay', label: 'Ma' },\n { key: 'lastWeek', label: 'Múlt hét' },\n { key: 'thisWeek', label: 'E hét' },\n { key: 'lastMonth', label: 'Múlt hónap' },\n { key: 'thisMonth', label: 'E hónap' },\n]\n\nexport function computePredefinedRange(\n key: PredefinedRangeKey,\n now: Date = new Date(),\n): { from: Date; to: Date } {\n if (key === 'thisDay') {\n return { from: startOfDay(now), to: endOfDay(now) }\n }\n if (key === 'lastDay') {\n const yesterday = new Date(now)\n yesterday.setDate(yesterday.getDate() - 1)\n return { from: startOfDay(yesterday), to: endOfDay(yesterday) }\n }\n if (key === 'thisWeek') {\n const from = startOfWeek(now)\n return {\n from,\n to: endOfDay(new Date(from.getFullYear(), from.getMonth(), from.getDate() + 6)),\n }\n }\n if (key === 'lastWeek') {\n const thisWeekStart = startOfWeek(now)\n const from = new Date(thisWeekStart)\n from.setDate(from.getDate() - 7)\n const to = endOfDay(new Date(thisWeekStart))\n to.setDate(to.getDate() - 1)\n return { from, to }\n }\n if (key === 'thisMonth') {\n return {\n from: startOfDay(new Date(now.getFullYear(), now.getMonth(), 1)),\n to: endOfDay(new Date(now.getFullYear(), now.getMonth() + 1, 0)),\n }\n }\n return {\n from: startOfDay(new Date(now.getFullYear(), now.getMonth() - 1, 1)),\n to: endOfDay(new Date(now.getFullYear(), now.getMonth(), 0)),\n }\n}\n\nexport function applyPredefinedRange(\n key: PredefinedRangeKey,\n options: { showTime: boolean; now?: Date },\n): { from: PickedDate; to: PickedDate } {\n const { from, to } = computePredefinedRange(key, options.now)\n const toLocal = options.showTime ? to : startOfDay(to)\n\n return {\n from: { local: from, utc: localToUTCString(from, options.showTime) },\n to: { local: toLocal, utc: localToUTCString(toLocal, options.showTime) },\n }\n}\n\nexport function matchPredefinedRange(\n fromLocal: Date,\n toLocal: Date,\n options: { showTime: boolean; now?: Date },\n): PredefinedRangeKey | null {\n const now = options.now ?? new Date()\n for (const range of predefinedRanges) {\n const { from, to } = computePredefinedRange(range.key, now)\n const match = options.showTime\n ? fromLocal.getTime() === from.getTime() && toLocal.getTime() === to.getTime()\n : isSameCalendarDay(fromLocal, from) && isSameCalendarDay(toLocal, to)\n if (match) return range.key\n }\n return null\n}\n\nexport function isPredefinedRangeInBounds(\n key: PredefinedRangeKey,\n bounds: { minDate?: Date | null; maxDate?: Date | null; showTime: boolean; now?: Date },\n): boolean {\n const { from, to } = computePredefinedRange(key, bounds.now)\n const { minDate, maxDate, showTime } = bounds\n\n const fromRef = showTime ? from : startOfDay(from)\n const toRef = showTime ? to : startOfDay(to)\n const minRef = minDate ? (showTime ? minDate : startOfDay(minDate)) : null\n const maxRef = maxDate ? (showTime ? maxDate : startOfDay(maxDate)) : null\n\n if (minRef && fromRef.getTime() < minRef.getTime()) return false\n if (maxRef && toRef.getTime() > maxRef.getTime()) return false\n return true\n}\n\nexport function canStepInBounds(\n from: Date,\n to: Date,\n delta: number,\n bounds: { minDate?: Date | null; maxDate?: Date | null; showTime: boolean },\n): boolean {\n const { minDate, maxDate, showTime } = bounds\n const newFrom = new Date(from.getTime() + delta)\n const newTo = new Date(to.getTime() + delta)\n\n const newFromRef = showTime ? newFrom : startOfDay(newFrom)\n const newToRef = showTime ? newTo : startOfDay(newTo)\n const minRef = minDate ? (showTime ? minDate : startOfDay(minDate)) : null\n const maxRef = maxDate ? (showTime ? maxDate : startOfDay(maxDate)) : null\n\n if (minRef && newFromRef.getTime() < minRef.getTime()) return false\n if (maxRef && newToRef.getTime() > maxRef.getTime()) return false\n return true\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components18.js","names":[],"sources":["../src/components/DateRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedUtcRange } from '@/types/types'\nimport type { DateRangePickerConfig } from '@/types/datepickers'\nimport { dateRangePickerConfigDefaults } from '@/types/datepickers'\n\nexport type { PickedUtcRange, DateRangePickerConfig }\nexport { dateRangePickerConfigDefaults }\n\nexport interface DateRangePickerProps {\n modelValue?: PickedUtcRange | null\n config?: DateRangePickerConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useId } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport Button from '@/components/Button.vue'\nimport { localToUTCString, formatDate, endOfDay, laterOf, earlierOf } from '@/utils/date'\nimport {\n predefinedRanges,\n applyPredefinedRange,\n matchPredefinedRange,\n isPredefinedRangeInBounds,\n canStepInBounds,\n type PredefinedRangeKey,\n} from '@/utils/predefinedDateRange'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nimport type { PickedDate } from '@/types/types'\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n modelValue: null,\n config: () => ({ ...dateRangePickerConfigDefaults }),\n})\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedUtcRange | null] }>()\n\nconst tempId = `drp-input-${useId()}`\n\nconst innerConfig = computed(() => ({ ...dateRangePickerConfigDefaults, ...props.config }))\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n isOutsideClick: (e, wrapperEl, dropdownEl) => {\n const target = e.target as Node\n return (\n !(wrapperEl?.contains(target) ?? false) &&\n !(dropdownEl?.contains(target) ?? false) &&\n !(target instanceof Element && target.closest('.c-dropdown'))\n )\n },\n})\n\nfunction toPicked(utc: string | null): PickedDate | null {\n return utc ? { local: new Date(utc), utc } : null\n}\n\nfunction makePicked(date: Date): PickedDate {\n return { local: date, utc: localToUTCString(date, innerConfig.value.showTime) }\n}\n\nfunction endOfDayPicked(picked: PickedDate): PickedDate {\n return picked.local ? makePicked(endOfDay(picked.local)) : picked\n}\n\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nfunction formatUtc(utc: string | null | undefined): string {\n return utc ? formatDate(new Date(utc), format.value) : '...'\n}\n\nconst bufferFrom = ref<PickedDate | null>(toPicked(props.modelValue?.fromUtc ?? null))\nconst bufferTo = ref<PickedDate | null>(toPicked(props.modelValue?.toUtc ?? null))\nconst displayFrom = ref<string | null>(props.modelValue?.fromUtc ?? null)\nconst displayTo = ref<string | null>(props.modelValue?.toUtc ?? null)\n\nconst hasValue = computed(() => displayFrom.value != null || displayTo.value != null)\nconst minTo = computed(() => bufferFrom.value?.local ?? null)\nconst maxFrom = computed(() => bufferTo.value?.local ?? null)\n\nconst fromMinDate = computed(() => innerConfig.value.minDate ?? null)\nconst fromMaxDate = computed(() =>\n earlierOf(innerConfig.value.maxDate ?? null, maxFrom.value ?? null),\n)\n\nconst toMinDate = computed(() => laterOf(innerConfig.value.minDate ?? null, minTo.value ?? null))\nconst toMaxDate = computed(() => innerConfig.value.maxDate ?? null)\n\nwatch(\n () => props.modelValue,\n (val) => {\n const from = val?.fromUtc ?? null\n const to = val?.toUtc ?? null\n bufferFrom.value = toPicked(from)\n bufferTo.value = toPicked(to)\n displayFrom.value = from\n displayTo.value = to\n },\n)\n\nwatch(isOpen, (open) => {\n if (!open) return\n if (innerConfig.value.lazy) {\n bufferFrom.value = toPicked(displayFrom.value)\n bufferTo.value = toPicked(displayTo.value)\n }\n //nextTick(positionDropdown)\n})\n\nfunction updateFrom(val: PickedDate | null) {\n bufferFrom.value = val\n if (val && !bufferTo.value)\n bufferTo.value = innerConfig.value.showTime ? endOfDayPicked(val) : val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction updateTo(val: PickedDate | null) {\n bufferTo.value = val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction emitCurrent() {\n const fromUtc = bufferFrom.value?.utc ?? null\n const toUtc = bufferTo.value?.utc ?? null\n displayFrom.value = fromUtc\n displayTo.value = toUtc\n emit('update:modelValue', fromUtc || toUtc ? { fromUtc, toUtc } : null)\n}\n\nfunction confirm() {\n if (innerConfig.value.lazy) emitCurrent()\n isOpen.value = false\n}\n\nfunction clear() {\n bufferFrom.value = null\n bufferTo.value = null\n displayFrom.value = null\n displayTo.value = null\n emit('update:modelValue', null)\n}\n\nfunction clearBuffer() {\n bufferFrom.value = null\n bufferTo.value = null\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n}\n\ndefineExpose({ focusAndOpen })\n\nfunction computeStepOffset(): number | null {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n return innerConfig.value.showTime\n ? to.getTime() - from.getTime()\n : (Math.round((to.getTime() - from.getTime()) / dayMs) + 1) * dayMs\n}\n\nconst canStepBack = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, -offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nconst canStepForward = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nfunction rangeStep(delta: number) {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return\n\n const offset = computeStepOffset()\n if (offset == null) return\n\n const allowed = canStepInBounds(from, to, offset * delta, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n if (!allowed) return\n\n bufferFrom.value = makePicked(new Date(from.getTime() + offset * delta))\n bufferTo.value = makePicked(new Date(to.getTime() + offset * delta))\n\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nconst activePredefinedRange = computed<PredefinedRangeKey | null>(() => {\n const fromLocal = bufferFrom.value?.local\n const toLocal = bufferTo.value?.local\n if (!fromLocal || !toLocal) return null\n return matchPredefinedRange(fromLocal, toLocal, { showTime: innerConfig.value.showTime ?? false })\n})\n\nconst predefinedRangeDisabled = computed<Record<PredefinedRangeKey, boolean>>(() => {\n const bounds = {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n }\n const out = {} as Record<PredefinedRangeKey, boolean>\n for (const range of predefinedRanges) {\n out[range.key] = !isPredefinedRangeInBounds(range.key, bounds)\n }\n return out\n})\n\nfunction pickPredefinedRange(key: PredefinedRangeKey) {\n const { from, to } = applyPredefinedRange(key, { showTime: innerConfig.value.showTime ?? false })\n bufferFrom.value = from\n bufferTo.value = to\n emitCurrent()\n\n if (innerConfig.value.lazy) {\n isOpen.value = false\n }\n}\n</script>\n\n<template>\n <div\n ref=\"wrapperRef\"\n class=\"drp-wrapper ac-component\"\n :class=\"{ 'drp-wrapper--compact': innerConfig.compact }\"\n >\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n 'c-input-row--focus': isOpen,\n }\"\n @click=\"isOpen = !isOpen\"\n >\n <div class=\"drp-input\">\n <template v-if=\"hasValue\">\n <span class=\"c-truncate drp-input__single\"\n >{{ formatUtc(displayFrom) }} – {{ formatUtc(displayTo) }}</span\n >\n <span class=\"drp-input__multi\">\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayFrom) }}</span>\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayTo) }}</span>\n </span>\n </template>\n <span v-else class=\"c-placeholder drp-input__placeholder\"\n >{{ innerConfig.placeholderFrom }} – {{ innerConfig.placeholderTo }}</span\n >\n </div>\n <button\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n @click.stop=\"clear\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n v-if=\"innerConfig.showIcon\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click.stop=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n\n <Teleport to=\"body\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown drp-dropdown ac-component\"\n :style=\"dropdownStyle\"\n >\n <div class=\"drp-pickers\">\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-from`\">{{\n innerConfig.placeholderFrom\n }}</label>\n <DatePicker\n :id=\"`${tempId}-from`\"\n :model-value=\"bufferFrom\"\n :config=\"{\n ...innerConfig,\n minDate: fromMinDate,\n maxDate: fromMaxDate,\n placeholder: innerConfig.placeholderFrom,\n }\"\n @update:model-value=\"updateFrom\"\n />\n </div>\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-to`\">{{ innerConfig.placeholderTo }}</label>\n <DatePicker\n :id=\"`${tempId}-to`\"\n :model-value=\"bufferTo\"\n :config=\"{\n ...innerConfig,\n minDate: toMinDate,\n maxDate: toMaxDate,\n placeholder: innerConfig.placeholderTo,\n }\"\n @update:model-value=\"updateTo\"\n />\n </div>\n </div>\n <div v-if=\"innerConfig.showPresets\" class=\"drp-toolbar\">\n <span\n class=\"flex\"\n v-tooltip=\"\n !canStepBack\n ? 'Nem léphető tovább a minimum dátum miatt'\n : 'Intervallum mozgatása visszafelé'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-left\"\n class=\"drp-toolbar__stepper left\"\n :disabled=\"!canStepBack\"\n @click=\"rangeStep(-1)\"\n />\n </span>\n <div class=\"predefined-ranges\">\n <a\n v-for=\"range in predefinedRanges\"\n :key=\"range.key\"\n class=\"predefined-range\"\n :class=\"{\n 'predefined-range--active': activePredefinedRange === range.key,\n 'predefined-range--disabled': predefinedRangeDisabled[range.key],\n }\"\n :aria-disabled=\"predefinedRangeDisabled[range.key]\"\n @click=\"predefinedRangeDisabled[range.key] ? null : pickPredefinedRange(range.key)\"\n >\n {{ range.label }}\n </a>\n </div>\n <span\n class=\"flex\"\n v-tooltip=\"\n !canStepForward\n ? 'Nem léphető tovább a maximum dátum miatt'\n : 'Intervallum mozgatása előre'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-right\"\n :disabled=\"!canStepForward\"\n @click=\"rangeStep(1)\"\n class=\"drp-toolbar__stepper right\"\n />\n </span>\n </div>\n <div\n v-if=\"innerConfig.showClearButton || innerConfig.showOkButton || innerConfig.lazy\"\n class=\"c-footer\"\n >\n <Button\n v-if=\"innerConfig.showClearButton\"\n label=\"Törlés\"\n outline\n @click=\"innerConfig.lazy ? clearBuffer() : clear()\"\n />\n <Button\n v-if=\"innerConfig.showOkButton || innerConfig.lazy\"\n label=\"OK\"\n type=\"success\"\n @click=\"confirm\"\n />\n </div>\n </div>\n </Teleport>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components19.js","names":[],"sources":["../src/components/DateRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedUtcRange } from '@/types/types'\nimport type { DateRangePickerConfig } from '@/types/datepickers'\nimport { dateRangePickerConfigDefaults } from '@/types/datepickers'\n\nexport type { PickedUtcRange, DateRangePickerConfig }\nexport { dateRangePickerConfigDefaults }\n\nexport interface DateRangePickerProps {\n modelValue?: PickedUtcRange | null\n config?: DateRangePickerConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useId } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport Button from '@/components/Button.vue'\nimport { localToUTCString, formatDate, endOfDay, laterOf, earlierOf } from '@/utils/date'\nimport {\n predefinedRanges,\n applyPredefinedRange,\n matchPredefinedRange,\n isPredefinedRangeInBounds,\n canStepInBounds,\n type PredefinedRangeKey,\n} from '@/utils/predefinedDateRange'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nimport type { PickedDate } from '@/types/types'\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n modelValue: null,\n config: () => ({ ...dateRangePickerConfigDefaults }),\n})\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedUtcRange | null] }>()\n\nconst tempId = `drp-input-${useId()}`\n\nconst innerConfig = computed(() => ({ ...dateRangePickerConfigDefaults, ...props.config }))\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n isOutsideClick: (e, wrapperEl, dropdownEl) => {\n const target = e.target as Node\n return (\n !(wrapperEl?.contains(target) ?? false) &&\n !(dropdownEl?.contains(target) ?? false) &&\n !(target instanceof Element && target.closest('.c-dropdown'))\n )\n },\n})\n\nfunction toPicked(utc: string | null): PickedDate | null {\n return utc ? { local: new Date(utc), utc } : null\n}\n\nfunction makePicked(date: Date): PickedDate {\n return { local: date, utc: localToUTCString(date, innerConfig.value.showTime) }\n}\n\nfunction endOfDayPicked(picked: PickedDate): PickedDate {\n return picked.local ? makePicked(endOfDay(picked.local)) : picked\n}\n\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nfunction formatUtc(utc: string | null | undefined): string {\n return utc ? formatDate(new Date(utc), format.value) : '...'\n}\n\nconst bufferFrom = ref<PickedDate | null>(toPicked(props.modelValue?.fromUtc ?? null))\nconst bufferTo = ref<PickedDate | null>(toPicked(props.modelValue?.toUtc ?? null))\nconst displayFrom = ref<string | null>(props.modelValue?.fromUtc ?? null)\nconst displayTo = ref<string | null>(props.modelValue?.toUtc ?? null)\n\nconst hasValue = computed(() => displayFrom.value != null || displayTo.value != null)\nconst minTo = computed(() => bufferFrom.value?.local ?? null)\nconst maxFrom = computed(() => bufferTo.value?.local ?? null)\n\nconst fromMinDate = computed(() => innerConfig.value.minDate ?? null)\nconst fromMaxDate = computed(() =>\n earlierOf(innerConfig.value.maxDate ?? null, maxFrom.value ?? null),\n)\n\nconst toMinDate = computed(() => laterOf(innerConfig.value.minDate ?? null, minTo.value ?? null))\nconst toMaxDate = computed(() => innerConfig.value.maxDate ?? null)\n\nwatch(\n () => props.modelValue,\n (val) => {\n const from = val?.fromUtc ?? null\n const to = val?.toUtc ?? null\n bufferFrom.value = toPicked(from)\n bufferTo.value = toPicked(to)\n displayFrom.value = from\n displayTo.value = to\n },\n)\n\nwatch(isOpen, (open) => {\n if (!open) return\n if (innerConfig.value.lazy) {\n bufferFrom.value = toPicked(displayFrom.value)\n bufferTo.value = toPicked(displayTo.value)\n }\n //nextTick(positionDropdown)\n})\n\nfunction updateFrom(val: PickedDate | null) {\n bufferFrom.value = val\n if (val && !bufferTo.value)\n bufferTo.value = innerConfig.value.showTime ? endOfDayPicked(val) : val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction updateTo(val: PickedDate | null) {\n bufferTo.value = val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction emitCurrent() {\n const fromUtc = bufferFrom.value?.utc ?? null\n const toUtc = bufferTo.value?.utc ?? null\n displayFrom.value = fromUtc\n displayTo.value = toUtc\n emit('update:modelValue', fromUtc || toUtc ? { fromUtc, toUtc } : null)\n}\n\nfunction confirm() {\n if (innerConfig.value.lazy) emitCurrent()\n isOpen.value = false\n}\n\nfunction clear() {\n bufferFrom.value = null\n bufferTo.value = null\n displayFrom.value = null\n displayTo.value = null\n emit('update:modelValue', null)\n}\n\nfunction clearBuffer() {\n bufferFrom.value = null\n bufferTo.value = null\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n}\n\ndefineExpose({ focusAndOpen })\n\nfunction computeStepOffset(): number | null {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n return innerConfig.value.showTime\n ? to.getTime() - from.getTime()\n : (Math.round((to.getTime() - from.getTime()) / dayMs) + 1) * dayMs\n}\n\nconst canStepBack = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, -offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nconst canStepForward = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nfunction rangeStep(delta: number) {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return\n\n const offset = computeStepOffset()\n if (offset == null) return\n\n const allowed = canStepInBounds(from, to, offset * delta, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n if (!allowed) return\n\n bufferFrom.value = makePicked(new Date(from.getTime() + offset * delta))\n bufferTo.value = makePicked(new Date(to.getTime() + offset * delta))\n\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nconst activePredefinedRange = computed<PredefinedRangeKey | null>(() => {\n const fromLocal = bufferFrom.value?.local\n const toLocal = bufferTo.value?.local\n if (!fromLocal || !toLocal) return null\n return matchPredefinedRange(fromLocal, toLocal, { showTime: innerConfig.value.showTime ?? false })\n})\n\nconst predefinedRangeDisabled = computed<Record<PredefinedRangeKey, boolean>>(() => {\n const bounds = {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n }\n const out = {} as Record<PredefinedRangeKey, boolean>\n for (const range of predefinedRanges) {\n out[range.key] = !isPredefinedRangeInBounds(range.key, bounds)\n }\n return out\n})\n\nfunction pickPredefinedRange(key: PredefinedRangeKey) {\n const { from, to } = applyPredefinedRange(key, { showTime: innerConfig.value.showTime ?? false })\n bufferFrom.value = from\n bufferTo.value = to\n emitCurrent()\n\n if (innerConfig.value.lazy) {\n isOpen.value = false\n }\n}\n</script>\n\n<template>\n <div\n ref=\"wrapperRef\"\n class=\"drp-wrapper ac-component\"\n :class=\"{ 'drp-wrapper--compact': innerConfig.compact }\"\n >\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n 'c-input-row--focus': isOpen,\n }\"\n @click=\"isOpen = !isOpen\"\n >\n <div class=\"drp-input\">\n <template v-if=\"hasValue\">\n <span class=\"c-truncate drp-input__single\"\n >{{ formatUtc(displayFrom) }} – {{ formatUtc(displayTo) }}</span\n >\n <span class=\"drp-input__multi\">\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayFrom) }}</span>\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayTo) }}</span>\n </span>\n </template>\n <span v-else class=\"c-placeholder drp-input__placeholder\"\n >{{ innerConfig.placeholderFrom }} – {{ innerConfig.placeholderTo }}</span\n >\n </div>\n <button\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n @click.stop=\"clear\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n v-if=\"innerConfig.showIcon\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click.stop=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n\n <Teleport to=\"body\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown drp-dropdown ac-component\"\n :style=\"dropdownStyle\"\n >\n <div class=\"drp-pickers\">\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-from`\">{{\n innerConfig.placeholderFrom\n }}</label>\n <DatePicker\n :id=\"`${tempId}-from`\"\n :model-value=\"bufferFrom\"\n :config=\"{\n ...innerConfig,\n minDate: fromMinDate,\n maxDate: fromMaxDate,\n placeholder: innerConfig.placeholderFrom,\n }\"\n @update:model-value=\"updateFrom\"\n />\n </div>\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-to`\">{{ innerConfig.placeholderTo }}</label>\n <DatePicker\n :id=\"`${tempId}-to`\"\n :model-value=\"bufferTo\"\n :config=\"{\n ...innerConfig,\n minDate: toMinDate,\n maxDate: toMaxDate,\n placeholder: innerConfig.placeholderTo,\n }\"\n @update:model-value=\"updateTo\"\n />\n </div>\n </div>\n <div v-if=\"innerConfig.showPresets\" class=\"drp-toolbar\">\n <span\n class=\"flex\"\n v-tooltip=\"\n !canStepBack\n ? 'Nem léphető tovább a minimum dátum miatt'\n : 'Intervallum mozgatása visszafelé'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-left\"\n class=\"drp-toolbar__stepper left\"\n :disabled=\"!canStepBack\"\n @click=\"rangeStep(-1)\"\n />\n </span>\n <div class=\"predefined-ranges\">\n <a\n v-for=\"range in predefinedRanges\"\n :key=\"range.key\"\n class=\"predefined-range\"\n :class=\"{\n 'predefined-range--active': activePredefinedRange === range.key,\n 'predefined-range--disabled': predefinedRangeDisabled[range.key],\n }\"\n :aria-disabled=\"predefinedRangeDisabled[range.key]\"\n @click=\"predefinedRangeDisabled[range.key] ? null : pickPredefinedRange(range.key)\"\n >\n {{ range.label }}\n </a>\n </div>\n <span\n class=\"flex\"\n v-tooltip=\"\n !canStepForward\n ? 'Nem léphető tovább a maximum dátum miatt'\n : 'Intervallum mozgatása előre'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-right\"\n :disabled=\"!canStepForward\"\n @click=\"rangeStep(1)\"\n class=\"drp-toolbar__stepper right\"\n />\n </span>\n </div>\n <div\n v-if=\"innerConfig.showClearButton || innerConfig.showOkButton || innerConfig.lazy\"\n class=\"c-footer\"\n >\n <Button\n v-if=\"innerConfig.showClearButton\"\n label=\"Törlés\"\n outline\n @click=\"innerConfig.lazy ? clearBuffer() : clear()\"\n />\n <Button\n v-if=\"innerConfig.showOkButton || innerConfig.lazy\"\n label=\"OK\"\n type=\"success\"\n @click=\"confirm\"\n />\n </div>\n </div>\n </Teleport>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components20.js","names":[],"sources":["../src/components/DropdownSelect.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DropdownSelectConfig {\n placeholder?: string\n filterable?: boolean\n clearable?: boolean\n textEllipsis?: boolean\n multiple?: boolean\n lazy?: boolean\n size?: ControlSize\n}\n\nexport const dropdownSelectConfigDefaults: DropdownSelectConfig = {\n placeholder: 'Select...',\n filterable: true,\n clearable: true,\n textEllipsis: true,\n multiple: false,\n lazy: false,\n size: 'normal' as ControlSize,\n}\n\nexport interface DropdownOption {\n icon?: string\n value?: string\n label: string\n callback?: () => void\n}\n\nexport interface DropdownSelectProps {\n modelValue?: string | string[] | null\n options: DropdownOption[]\n config?: DropdownSelectConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, onMounted, onBeforeUnmount, useId } from 'vue'\nimport Button from '@/components/Button.vue'\nimport type { ControlSize } from '@/types/types'\n\nconst props = withDefaults(defineProps<DropdownSelectProps>(), {\n modelValue: null,\n config: () => ({ ...dropdownSelectConfigDefaults }),\n})\n\nconst cfg = computed(() => ({ ...dropdownSelectConfigDefaults, ...props.config }))\n\nconst emit = defineEmits<{ 'update:modelValue': [value: string | string[] | null] }>()\n\nconst filterInputId = `ds-input-filter-${useId()}`\n\nconst isOpen = ref(false)\nconst filterText = ref('')\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst filterInputRef = ref<HTMLInputElement | null>(null)\nconst buffer = ref<string[]>([])\nconst selection = ref<string[]>(toArray(props.modelValue))\n\nfunction toArray(val: string | string[] | null | undefined): string[] {\n if (val == null) return []\n return Array.isArray(val) ? [...val] : [val]\n}\n\nwatch(\n () => props.modelValue,\n (v) => {\n selection.value = toArray(v)\n },\n)\n\nwatch(isOpen, (open) => {\n if (open) {\n filterText.value = ''\n if (cfg.value.filterable) nextTick(() => filterInputRef.value?.focus())\n if (cfg.value.lazy) buffer.value = [...selection.value]\n }\n})\n\n// Display\nconst selectedLabel = computed(() => {\n if (selection.value.length === 0) return null\n if (!cfg.value.multiple)\n return props.options.find((o) => o.value === selection.value[0])?.label ?? null\n if (selection.value.length > 2) return `${selection.value.length} kiválasztva`\n return selection.value.map((v) => props.options.find((o) => o.value === v)?.label ?? v).join(', ')\n})\n\nconst filteredOptions = computed(() => {\n const q = filterText.value.toLowerCase()\n return q ? props.options.filter((o) => o.label.toLowerCase().includes(q)) : props.options\n})\n\nconst selectableOptions = computed(() => {\n return filteredOptions.value.filter((o) => o.value)\n})\n\nconst allOptionsSelected = computed(() => {\n if (selectableOptions.value.length === 0) return false\n const currentList = cfg.value.lazy && isOpen.value ? buffer.value : selection.value\n return selectableOptions.value.every((o) => o.value && currentList.includes(o.value))\n})\n\nfunction isSelected(value: string): boolean {\n return (cfg.value.lazy && isOpen.value ? buffer : selection).value.includes(value)\n}\n\nfunction toggleAllOptions() {\n const currentList = cfg.value.lazy && isOpen.value ? buffer : selection\n const selectableValues = selectableOptions.value.map((o) => o.value as string)\n\n if (allOptionsSelected.value) {\n currentList.value = currentList.value.filter((v) => !selectableValues.includes(v))\n } else {\n const toAdd = selectableValues.filter((v) => !currentList.value.includes(v))\n currentList.value = [...currentList.value, ...toAdd]\n }\n\n if (!cfg.value.lazy) {\n emit('update:modelValue', selection.value.length > 0 ? [...selection.value] : null)\n }\n}\n\n// Actions\nfunction toggleList(list: string[], value: string): string[] {\n const idx = list.indexOf(value)\n return idx >= 0 ? list.filter((_, i) => i !== idx) : [...list, value]\n}\n\nfunction selectOption(opt: DropdownOption) {\n if (opt.callback) {\n opt.callback()\n isOpen.value = false\n return\n }\n\n const value = opt.value\n if (!value) return\n\n if (cfg.value.multiple) {\n if (cfg.value.lazy) {\n buffer.value = toggleList(buffer.value, value)\n } else {\n selection.value = toggleList(selection.value, value)\n emit('update:modelValue', selection.value.length > 0 ? [...selection.value] : null)\n }\n } else {\n selection.value = [value]\n emit('update:modelValue', value)\n isOpen.value = false\n }\n}\n\nfunction confirm() {\n if (cfg.value.lazy) {\n selection.value = [...buffer.value]\n emit('update:modelValue', buffer.value.length > 0 ? [...buffer.value] : null)\n }\n isOpen.value = false\n}\n\nfunction clear() {\n if (cfg.value.lazy) {\n buffer.value = []\n } else {\n selection.value = []\n emit('update:modelValue', null)\n }\n}\n\nfunction onOptionKeydown(e: KeyboardEvent, opt: DropdownOption) {\n if (e.key === ' ') {\n e.preventDefault()\n selectOption(opt)\n } else if (e.key === 'Enter') {\n e.preventDefault()\n confirm()\n }\n}\n\nfunction onClickOutside(e: MouseEvent) {\n if (wrapperRef.value && !wrapperRef.value.contains(e.target as Node)) isOpen.value = false\n}\n\nonMounted(() => document.addEventListener('mousedown', onClickOutside))\nonBeforeUnmount(() => document.removeEventListener('mousedown', onClickOutside))\n\nfunction toggleOpen() {\n isOpen.value = !isOpen.value\n if (isOpen.value) filterText.value = ''\n}\n\nfunction clearInput() {\n selection.value = []\n emit('update:modelValue', null)\n isOpen.value = false\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n if (cfg.value.filterable) nextTick(() => filterInputRef.value?.focus())\n}\n\ndefineExpose({ focusAndOpen })\n</script>\n\n<template>\n <div ref=\"wrapperRef\" class=\"c-wrapper ds-wrapper ac-component\">\n <div\n class=\"c-input-row pointer\"\n :class=\"{\n 'c-input-row--sm': cfg.size === 'small',\n 'c-input-row--lg': cfg.size === 'large',\n }\"\n @click=\"toggleOpen()\"\n >\n <span v-if=\"selectedLabel\" class=\"c-truncate ds-value\">{{ selectedLabel }}</span>\n <span v-else class=\"c-placeholder\">{{ cfg.placeholder }}</span>\n <button\n v-if=\"cfg.clearable && selection.length > 0\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear ds-clear-btn\"\n @click.stop=\"clearInput()\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <span\n class=\"c-icon-btn c-icon-btn--chevron mr-2\"\n :class=\"{ 'c-icon-btn--chevron-open': isOpen }\"\n >\n <i class=\"fa-solid fa-fw fa-chevron-down\"></i>\n </span>\n </div>\n\n <div v-if=\"isOpen\" class=\"c-dropdown ds-dropdown ac-component\"\n :class=\"{ 'ds-dropdown--multiple': cfg.multiple }\">\n <div v-if=\"cfg.filterable\" class=\"ds-filter\">\n <span\n v-if=\"cfg.multiple\"\n class=\"c-checkbox ds-select-all-checkbox\"\n :class=\"{ 'c-checkbox--checked': allOptionsSelected }\"\n @click.stop=\"toggleAllOptions()\"\n :title=\"allOptionsSelected ? 'Összes kijelölés törlése' : 'Összes kijelölése'\"\n ></span>\n <input\n ref=\"filterInputRef\"\n type=\"text\"\n :id=\"filterInputId\"\n class=\"c-focus ds-filter-input\"\n v-model=\"filterText\"\n placeholder=\"Filter...\"\n @click.stop\n />\n <button\n v-if=\"filterText\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear ds-filter-clear\"\n @click.stop=\"filterText = ''\"\n aria-label=\"Szűrők törlése\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <ul class=\"ds-options c-scroll\">\n <li\n v-for=\"(opt, idx) in filteredOptions\"\n :key=\"opt.value ?? `cb-${idx}`\"\n class=\"d-option ds-option\"\n :class=\"{ 'ds-option--selected': opt.value && isSelected(opt.value) }\"\n tabindex=\"0\"\n @click=\"selectOption(opt)\"\n @keydown=\"onOptionKeydown($event, opt)\"\n >\n <span\n v-if=\"cfg.multiple && opt.value\"\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': isSelected(opt.value) }\"\n ></span>\n <i v-if=\"opt.icon\" class=\"fa-fw\" :class=\"opt.icon\"></i>\n <span class=\"d-option__label\" :class=\"{ 'c-truncate': cfg.textEllipsis }\">{{\n opt.label\n }}</span>\n </li>\n <li v-if=\"filteredOptions.length === 0\" class=\"ds-option ds-option--empty\">\n Nincs találat\n </li>\n </ul>\n\n <div v-if=\"cfg.multiple || (cfg.clearable && selection.length > 0)\" class=\"c-footer\">\n <Button v-if=\"cfg.clearable\" label=\"Törlés\" outline @click=\"clear\" />\n <Button v-if=\"cfg.multiple\" label=\"OK\" type=\"success\" @click=\"confirm\" />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/dropdown-select.scss\"></style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components22.js","names":[],"sources":["../src/components/DropdownSelect.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DropdownSelectConfig {\n placeholder?: string\n filterable?: boolean\n clearable?: boolean\n textEllipsis?: boolean\n multiple?: boolean\n lazy?: boolean\n size?: ControlSize\n}\n\nexport const dropdownSelectConfigDefaults: DropdownSelectConfig = {\n placeholder: 'Select...',\n filterable: true,\n clearable: true,\n textEllipsis: true,\n multiple: false,\n lazy: false,\n size: 'normal' as ControlSize,\n}\n\nexport interface DropdownOption {\n icon?: string\n value?: string\n label: string\n callback?: () => void\n}\n\nexport interface DropdownSelectProps {\n modelValue?: string | string[] | null\n options: DropdownOption[]\n config?: DropdownSelectConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, onMounted, onBeforeUnmount, useId } from 'vue'\nimport Button from '@/components/Button.vue'\nimport type { ControlSize } from '@/types/types'\n\nconst props = withDefaults(defineProps<DropdownSelectProps>(), {\n modelValue: null,\n config: () => ({ ...dropdownSelectConfigDefaults }),\n})\n\nconst cfg = computed(() => ({ ...dropdownSelectConfigDefaults, ...props.config }))\n\nconst emit = defineEmits<{ 'update:modelValue': [value: string | string[] | null] }>()\n\nconst filterInputId = `ds-input-filter-${useId()}`\n\nconst isOpen = ref(false)\nconst filterText = ref('')\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst filterInputRef = ref<HTMLInputElement | null>(null)\nconst buffer = ref<string[]>([])\nconst selection = ref<string[]>(toArray(props.modelValue))\n\nfunction toArray(val: string | string[] | null | undefined): string[] {\n if (val == null) return []\n return Array.isArray(val) ? [...val] : [val]\n}\n\nwatch(\n () => props.modelValue,\n (v) => {\n selection.value = toArray(v)\n },\n)\n\nwatch(isOpen, (open) => {\n if (open) {\n filterText.value = ''\n if (cfg.value.filterable) nextTick(() => filterInputRef.value?.focus())\n if (cfg.value.lazy) buffer.value = [...selection.value]\n }\n})\n\n// Display\nconst selectedLabel = computed(() => {\n if (selection.value.length === 0) return null\n if (!cfg.value.multiple)\n return props.options.find((o) => o.value === selection.value[0])?.label ?? null\n if (selection.value.length > 2) return `${selection.value.length} kiválasztva`\n return selection.value.map((v) => props.options.find((o) => o.value === v)?.label ?? v).join(', ')\n})\n\nconst filteredOptions = computed(() => {\n const q = filterText.value.toLowerCase()\n return q ? props.options.filter((o) => o.label.toLowerCase().includes(q)) : props.options\n})\n\nconst selectableOptions = computed(() => {\n return filteredOptions.value.filter((o) => o.value)\n})\n\nconst allOptionsSelected = computed(() => {\n if (selectableOptions.value.length === 0) return false\n const currentList = cfg.value.lazy && isOpen.value ? buffer.value : selection.value\n return selectableOptions.value.every((o) => o.value && currentList.includes(o.value))\n})\n\nfunction isSelected(value: string): boolean {\n return (cfg.value.lazy && isOpen.value ? buffer : selection).value.includes(value)\n}\n\nfunction toggleAllOptions() {\n const currentList = cfg.value.lazy && isOpen.value ? buffer : selection\n const selectableValues = selectableOptions.value.map((o) => o.value as string)\n\n if (allOptionsSelected.value) {\n currentList.value = currentList.value.filter((v) => !selectableValues.includes(v))\n } else {\n const toAdd = selectableValues.filter((v) => !currentList.value.includes(v))\n currentList.value = [...currentList.value, ...toAdd]\n }\n\n if (!cfg.value.lazy) {\n emit('update:modelValue', selection.value.length > 0 ? [...selection.value] : null)\n }\n}\n\n// Actions\nfunction toggleList(list: string[], value: string): string[] {\n const idx = list.indexOf(value)\n return idx >= 0 ? list.filter((_, i) => i !== idx) : [...list, value]\n}\n\nfunction selectOption(opt: DropdownOption) {\n if (opt.callback) {\n opt.callback()\n isOpen.value = false\n return\n }\n\n const value = opt.value\n if (!value) return\n\n if (cfg.value.multiple) {\n if (cfg.value.lazy) {\n buffer.value = toggleList(buffer.value, value)\n } else {\n selection.value = toggleList(selection.value, value)\n emit('update:modelValue', selection.value.length > 0 ? [...selection.value] : null)\n }\n } else {\n selection.value = [value]\n emit('update:modelValue', value)\n isOpen.value = false\n }\n}\n\nfunction confirm() {\n if (cfg.value.lazy) {\n selection.value = [...buffer.value]\n emit('update:modelValue', buffer.value.length > 0 ? [...buffer.value] : null)\n }\n isOpen.value = false\n}\n\nfunction clear() {\n if (cfg.value.lazy) {\n buffer.value = []\n } else {\n selection.value = []\n emit('update:modelValue', null)\n }\n}\n\nfunction onOptionKeydown(e: KeyboardEvent, opt: DropdownOption) {\n if (e.key === ' ') {\n e.preventDefault()\n selectOption(opt)\n } else if (e.key === 'Enter') {\n e.preventDefault()\n confirm()\n }\n}\n\nfunction onClickOutside(e: MouseEvent) {\n if (wrapperRef.value && !wrapperRef.value.contains(e.target as Node)) isOpen.value = false\n}\n\nonMounted(() => document.addEventListener('mousedown', onClickOutside))\nonBeforeUnmount(() => document.removeEventListener('mousedown', onClickOutside))\n\nfunction toggleOpen() {\n isOpen.value = !isOpen.value\n if (isOpen.value) filterText.value = ''\n}\n\nfunction clearInput() {\n selection.value = []\n emit('update:modelValue', null)\n isOpen.value = false\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n if (cfg.value.filterable) nextTick(() => filterInputRef.value?.focus())\n}\n\ndefineExpose({ focusAndOpen })\n</script>\n\n<template>\n <div ref=\"wrapperRef\" class=\"c-wrapper ds-wrapper ac-component\">\n <div\n class=\"c-input-row pointer\"\n :class=\"{\n 'c-input-row--sm': cfg.size === 'small',\n 'c-input-row--lg': cfg.size === 'large',\n }\"\n @click=\"toggleOpen()\"\n >\n <span v-if=\"selectedLabel\" class=\"c-truncate ds-value\">{{ selectedLabel }}</span>\n <span v-else class=\"c-placeholder\">{{ cfg.placeholder }}</span>\n <button\n v-if=\"cfg.clearable && selection.length > 0\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear ds-clear-btn\"\n @click.stop=\"clearInput()\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <span\n class=\"c-icon-btn c-icon-btn--chevron mr-2\"\n :class=\"{ 'c-icon-btn--chevron-open': isOpen }\"\n >\n <i class=\"fa-solid fa-fw fa-chevron-down\"></i>\n </span>\n </div>\n\n <div v-if=\"isOpen\" class=\"c-dropdown ds-dropdown ac-component\"\n :class=\"{ 'ds-dropdown--multiple': cfg.multiple }\">\n <div v-if=\"cfg.filterable\" class=\"ds-filter\">\n <span\n v-if=\"cfg.multiple\"\n class=\"c-checkbox ds-select-all-checkbox\"\n :class=\"{ 'c-checkbox--checked': allOptionsSelected }\"\n @click.stop=\"toggleAllOptions()\"\n :title=\"allOptionsSelected ? 'Összes kijelölés törlése' : 'Összes kijelölése'\"\n ></span>\n <input\n ref=\"filterInputRef\"\n type=\"text\"\n :id=\"filterInputId\"\n class=\"c-focus ds-filter-input\"\n v-model=\"filterText\"\n placeholder=\"Filter...\"\n @click.stop\n />\n <button\n v-if=\"filterText\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear ds-filter-clear\"\n @click.stop=\"filterText = ''\"\n aria-label=\"Szűrők törlése\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <ul class=\"ds-options c-scroll\">\n <li\n v-for=\"(opt, idx) in filteredOptions\"\n :key=\"opt.value ?? `cb-${idx}`\"\n class=\"d-option ds-option\"\n :class=\"{ 'ds-option--selected': opt.value && isSelected(opt.value) }\"\n tabindex=\"0\"\n @click=\"selectOption(opt)\"\n @keydown=\"onOptionKeydown($event, opt)\"\n >\n <span\n v-if=\"cfg.multiple && opt.value\"\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': isSelected(opt.value) }\"\n ></span>\n <i v-if=\"opt.icon\" class=\"fa-fw\" :class=\"opt.icon\"></i>\n <span class=\"d-option__label\" :class=\"{ 'c-truncate': cfg.textEllipsis }\">{{\n opt.label\n }}</span>\n </li>\n <li v-if=\"filteredOptions.length === 0\" class=\"ds-option ds-option--empty\">\n Nincs találat\n </li>\n </ul>\n\n <div v-if=\"cfg.multiple || (cfg.clearable && selection.length > 0)\" class=\"c-footer\">\n <Button v-if=\"cfg.clearable\" label=\"Törlés\" outline @click=\"clear\" />\n <Button v-if=\"cfg.multiple\" label=\"OK\" type=\"success\" @click=\"confirm\" />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/dropdown-select.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components23.js","names":[],"sources":["../src/components/DropdownMenu.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DropdownMenuItem {\n icon?: string\n label: string\n type?: ButtonType\n size?: ControlSize\n ariaLabel?: string\n callback: () => void\n}\n\nexport interface DropdownMenuProps {\n size?: ControlSize\n icon?: string\n label?: string\n ariaLabel?: string\n textEllipsis?: boolean\n type?: ButtonType\n items: DropdownMenuItem[]\n labelAlignmentFix?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport type { ControlSize } from '@/types/types'\nimport type { ButtonType } from '@/components/Button.vue'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\nimport { sizeToClass } from '@/utils/dom'\n\nconst props = withDefaults(defineProps<DropdownMenuProps>(), {\n size: 'normal',\n type: 'normal',\n textEllipsis: true,\n icon: undefined,\n label: undefined,\n labelAlignmentFix: false,\n})\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n extraStyle: (rect) => ({\n minWidth: `${rect.width}px`,\n maxWidth: `${rect.width * 2}px`,\n }),\n})\n\nfunction toggleOpen() {\n isOpen.value = !isOpen.value\n}\n\nfunction selectItem(item: DropdownMenuItem) {\n item.callback?.()\n isOpen.value = false\n}\n</script>\n\n<template>\n <div ref=\"wrapperRef\" class=\"ds-wrapper ac-component d-inline-block\">\n <button\n type=\"button\"\n class=\"c-btn dm-trigger\"\n :class=\"[\n size === 'small' && 'c-btn-sm',\n size === 'large' && 'c-btn-lg',\n type !== 'normal' && `c-btn-${type}`,\n ]\"\n :aria-label=\"ariaLabel ?? label\"\n @click=\"toggleOpen()\"\n >\n <i v-if=\"icon\" class=\"fa-fw\" :class=\"icon\"></i>\n <span v-if=\"label\" :class=\"{ 'align-center-text-fix ': props.labelAlignmentFix }\">{{\n label\n }}</span>\n\n <span class=\"c-icon-btn c-icon-btn--chevron\" :class=\"{ 'c-icon-btn--chevron-open': isOpen }\">\n <i class=\"fa-solid fa-fw fa-chevron-down\"></i>\n </span>\n </button>\n\n <Teleport to=\"body\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown ds-wrapper ac-component\"\n :style=\"dropdownStyle\"\n >\n <ul class=\"ds-options c-scroll\">\n <li\n v-for=\"(item, idx) in items\"\n :key=\"`cb-${idx}`\"\n class=\"d-option dm-option c-field-size c-type-color\"\n :class=\"{\n [`c-field-size--${sizeToClass(item.size)}`]: item.size,\n [`c-type-color--${item.type}`]: item.type,\n }\"\n tabindex=\"0\"\n @click=\"selectItem(item)\"\n :aria-label=\"item.ariaLabel ?? item.label\"\n >\n <i v-if=\"item.icon\" class=\"fa-fw\" :class=\"item.icon\"></i>\n <span class=\"d-option__label\" :class=\"{ 'c-truncate': props.textEllipsis }\">{{\n item.label\n }}</span>\n </li>\n </ul>\n </div>\n </Teleport>\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/dropdown-select.scss\"></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EA6BA,IAAM,IAAQ,GASR,IAAa,EAAwB,IAAI,GACzC,IAAc,EAAwB,IAAI,GAC1C,EAAE,WAAQ,qBAAkB,EAAkB,GAAY,GAAa,EAC3E,aAAa,OAAU;GACrB,UAAU,GAAG,EAAK,MAAM;GACxB,UAAU,GAAG,EAAK,QAAQ,EAAE;EAC9B,GACF,CAAC;EAED,SAAS,IAAa;GACpB,EAAO,QAAQ,CAAC,EAAO;EACzB;EAEA,SAAS,EAAW,GAAwB;GAE1C,AADA,EAAK,WAAW,GAChB,EAAO,QAAQ;EACjB;yBAIE,EAkDM,OAAA;YAlDG;GAAJ,KAAI;GAAa,OAAM;MAC1B,EAmBS,UAAA;GAlBP,MAAK;GACL,OAAK,EAAA,CAAC,oBAAkB;IACN,EAAA,SAAI,WAAA;IAAoC,EAAA,SAAI,WAAA;IAAoC,EAAA,SAAI,YAAA,SAA0B,EAAA;;GAK/H,cAAY,EAAA,aAAa,EAAA;GACzB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAU;;GAET,EAAA,QAAA,EAAA,GAAT,EAA+C,KAAA;;IAAhC,OAAK,EAAA,CAAC,SAAgB,EAAA,IAAI,CAAA;;GAC7B,EAAA,SAAA,EAAA,GAAZ,EAES,QAAA;;IAFW,OAAK,EAAA,EAAA,0BAA8B,EAAM,kBAAiB,CAAA;QAC5E,EAAA,KAAK,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA;GAGP,EAEO,QAAA,EAFD,OAAK,EAAA,CAAC,kCAAgC,EAAA,4BAAuC,EAAA,CAAA,EAAM,CAAA,CAAA,EAAA,GAAA,CAAA,GAAA,AAAA,EAAA,OAAA,CACvF,EAA8C,KAAA,EAA3C,OAAM,iCAAgC,GAAA,MAAA,EAAA,CAAA,CAAA,GAAA,CAAA;mBAI7C,EA2BW,GAAA,EA3BD,IAAG,OAAM,GAAA,CAET,EAAA,CAAA,KAAA,EAAA,GADR,EAyBM,OAAA;;YAvBA;GAAJ,KAAI;GACJ,OAAM;GACL,OAAK,EAAE,EAAA,CAAA,CAAa;MAErB,EAkBK,MAlBL,GAkBK,EAAA,EAAA,EAAA,GAjBH,EAgBK,GAAA,MAAA,EAfmB,EAAA,QAAd,GAAM,YADhB,EAgBK,MAAA;GAdF,KAAG,MAAQ;GACZ,OAAK,EAAA,CAAC,gDAA8C;sBACV,EAAA,CAAA,EAAY,EAAK,IAAI,MAAM,EAAK;sBAAsC,EAAK,SAAS,EAAK;;GAInI,UAAS;GACR,UAAK,MAAE,EAAW,CAAI;GACtB,cAAY,EAAK,aAAa,EAAK;MAE3B,EAAK,QAAA,EAAA,GAAd,EAAyD,KAAA;;GAArC,OAAK,EAAA,CAAC,SAAgB,EAAK,IAAI,CAAA;4BACnD,EAES,QAAA,EAFH,OAAK,EAAA,CAAC,mBAAiB,EAAA,cAAyB,EAAM,aAAY,CAAA,CAAA,EAAA,GAAA,EACtE,EAAK,KAAK,GAAA,CAAA,CAAA,GAAA,IAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components24.js","names":[],"sources":["../src/components/DropdownMenu.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DropdownMenuItem {\n icon?: string\n label: string\n type?: ButtonType\n size?: ControlSize\n ariaLabel?: string\n callback: () => void\n}\n\nexport interface DropdownMenuProps {\n size?: ControlSize\n icon?: string\n label?: string\n ariaLabel?: string\n textEllipsis?: boolean\n type?: ButtonType\n items: DropdownMenuItem[]\n labelAlignmentFix?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport type { ControlSize } from '@/types/types'\nimport type { ButtonType } from '@/components/Button.vue'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\nimport { sizeToClass } from '@/utils/dom'\n\nconst props = withDefaults(defineProps<DropdownMenuProps>(), {\n size: 'normal',\n type: 'normal',\n textEllipsis: true,\n icon: undefined,\n label: undefined,\n labelAlignmentFix: false,\n})\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n extraStyle: (rect) => ({\n minWidth: `${rect.width}px`,\n maxWidth: `${rect.width * 2}px`,\n }),\n})\n\nfunction toggleOpen() {\n isOpen.value = !isOpen.value\n}\n\nfunction selectItem(item: DropdownMenuItem) {\n item.callback?.()\n isOpen.value = false\n}\n</script>\n\n<template>\n <div ref=\"wrapperRef\" class=\"ds-wrapper ac-component d-inline-block\">\n <button\n type=\"button\"\n class=\"c-btn dm-trigger\"\n :class=\"[\n size === 'small' && 'c-btn-sm',\n size === 'large' && 'c-btn-lg',\n type !== 'normal' && `c-btn-${type}`,\n ]\"\n :aria-label=\"ariaLabel ?? label\"\n @click=\"toggleOpen()\"\n >\n <i v-if=\"icon\" class=\"fa-fw\" :class=\"icon\"></i>\n <span v-if=\"label\" :class=\"{ 'align-center-text-fix ': props.labelAlignmentFix }\">{{\n label\n }}</span>\n\n <span class=\"c-icon-btn c-icon-btn--chevron\" :class=\"{ 'c-icon-btn--chevron-open': isOpen }\">\n <i class=\"fa-solid fa-fw fa-chevron-down\"></i>\n </span>\n </button>\n\n <Teleport to=\"body\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown ds-wrapper ac-component\"\n :style=\"dropdownStyle\"\n >\n <ul class=\"ds-options c-scroll\">\n <li\n v-for=\"(item, idx) in items\"\n :key=\"`cb-${idx}`\"\n class=\"d-option dm-option c-field-size c-type-color\"\n :class=\"{\n [`c-field-size--${sizeToClass(item.size)}`]: item.size,\n [`c-type-color--${item.type}`]: item.type,\n }\"\n tabindex=\"0\"\n @click=\"selectItem(item)\"\n :aria-label=\"item.ariaLabel ?? item.label\"\n >\n <i v-if=\"item.icon\" class=\"fa-fw\" :class=\"item.icon\"></i>\n <span class=\"d-option__label\" :class=\"{ 'c-truncate': props.textEllipsis }\">{{\n item.label\n }}</span>\n </li>\n </ul>\n </div>\n </Teleport>\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/dropdown-select.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components25.js","names":[],"sources":["../src/components/Sidebar.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type SidebarPosition = 'top' | 'bottom' | 'left' | 'right'\n\nexport interface SidebarProps {\n open?: boolean\n position?: SidebarPosition\n title?: string\n hasHeader?: boolean\n withBackdrop?: boolean\n}\n\nexport const sidebarDefaults = {\n open: false,\n position: 'left' as SidebarPosition,\n hasHeader: true,\n withBackdrop: true,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { onMounted, onBeforeUnmount } from 'vue'\nimport Button from '@/components/Button.vue'\n\nwithDefaults(defineProps<SidebarProps>(), {\n ...sidebarDefaults,\n})\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nfunction close() {\n emit('close')\n}\n\nfunction onBackdropClick() {\n close()\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') close()\n}\n\nonMounted(() => document.addEventListener('keydown', onKeydown))\nonBeforeUnmount(() => document.removeEventListener('keydown', onKeydown))\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <Transition name=\"sb-fade\">\n <div v-if=\"open && withBackdrop\" class=\"sb-backdrop\" @click.self=\"onBackdropClick\"></div>\n </Transition>\n <Transition :name=\"`sb-slide-${position}`\">\n <div v-if=\"open\" class=\"sb-panel\" :class=\"`sb-panel--${position}`\">\n <div v-if=\"hasHeader\" class=\"sb-header\">\n <span class=\"sb-title\">{{ title ?? '' }}</span>\n <Button class=\"sb-close\" icon=\"fa-solid fa-xmark\" @click=\"close()\" />\n </div>\n <Button\n v-else\n class=\"sb-close sb-close--absolute\"\n icon=\"fa-solid fa-xmark\"\n @click=\"close()\"\n />\n <div class=\"sb-content c-scroll\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/sidebar.scss\"></style>\n"],"mappings":";;;;;;oEAWa,IAAkB;CAC7B,MAAM;CACN,UAAU;CACV,WAAW;CACX,cAAc;AAChB;;;;;;;;;;;EAWA,IAAM,IAAO;EAIb,SAAS,IAAQ;GACf,EAAK,OAAO;EACd;EAEA,SAAS,IAAkB;GACzB,EAAM;EACR;EAEA,SAAS,EAAU,GAAkB;GACnC,AAAI,EAAE,QAAQ,YAAU,EAAM;EAChC;SAEA,QAAgB,SAAS,iBAAiB,WAAW,CAAS,CAAC,GAC/D,QAAsB,SAAS,oBAAoB,WAAW,CAAS,CAAC,mBAItE,EAuBW,GAAA,EAvBD,IAAG,OAAM,GAAA,CACjB,EAqBM,OArBN,GAqBM,CApBJ,EAEa,GAAA,EAFD,MAAK,UAAS,GAAA;oBACiE,CAA9E,EAAA,QAAQ,EAAA,gBAAA,EAAA,GAAnB,EAAyF,OAAA;;IAAxD,OAAM;IAAe,SAAK,EAAO,GAAe,CAAA,MAAA,CAAA;;;MAEnF,EAgBa,GAAA,EAhBA,MAAI,YAAc,EAAA,WAAA,GAAA;oBAevB,CAdK,EAAA,QAAA,EAAA,GAAX,EAcM,OAAA;;IAdW,OAAK,EAAA,CAAC,YAAU,aAAsB,EAAA,UAAQ,CAAA;OAClD,EAAA,aAAA,EAAA,GAAX,EAGM,OAHN,GAGM,CAFJ,EAA+C,QAA/C,GAA+C,EAArB,EAAA,SAAK,EAAA,GAAA,CAAA,GAC/B,EAAqE,GAAA;IAA7D,OAAM;IAAW,MAAK;IAAqB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAK;iBAEjE,EAKE,GAAA;;IAHA,OAAM;IACN,MAAK;IACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAK;QAEf,EAEM,OAFN,GAEM,CADJ,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components27.js","names":[],"sources":["../src/components/Sidebar.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type SidebarPosition = 'top' | 'bottom' | 'left' | 'right'\n\nexport interface SidebarProps {\n open?: boolean\n position?: SidebarPosition\n title?: string\n hasHeader?: boolean\n withBackdrop?: boolean\n}\n\nexport const sidebarDefaults = {\n open: false,\n position: 'left' as SidebarPosition,\n hasHeader: true,\n withBackdrop: true,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { onMounted, onBeforeUnmount } from 'vue'\nimport Button from '@/components/Button.vue'\n\nwithDefaults(defineProps<SidebarProps>(), {\n ...sidebarDefaults,\n})\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nfunction close() {\n emit('close')\n}\n\nfunction onBackdropClick() {\n close()\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') close()\n}\n\nonMounted(() => document.addEventListener('keydown', onKeydown))\nonBeforeUnmount(() => document.removeEventListener('keydown', onKeydown))\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <Transition name=\"sb-fade\">\n <div v-if=\"open && withBackdrop\" class=\"sb-backdrop\" @click.self=\"onBackdropClick\"></div>\n </Transition>\n <Transition :name=\"`sb-slide-${position}`\">\n <div v-if=\"open\" class=\"sb-panel\" :class=\"`sb-panel--${position}`\">\n <div v-if=\"hasHeader\" class=\"sb-header\">\n <span class=\"sb-title\">{{ title ?? '' }}</span>\n <Button class=\"sb-close\" icon=\"fa-solid fa-xmark\" @click=\"close()\" />\n </div>\n <Button\n v-else\n class=\"sb-close sb-close--absolute\"\n icon=\"fa-solid fa-xmark\"\n @click=\"close()\"\n />\n <div class=\"sb-content c-scroll\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/sidebar.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components28.js","names":[],"sources":["../src/components/HeaderComponent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ButtonProps } from '@/components/Button.vue'\nimport type { HorizontalAlignment } from '@/types/types'\n\nexport interface HeaderToolbar {\n align: HorizontalAlignment\n buttons: ButtonProps[]\n}\n\nexport interface HeaderComponentProps {\n title: string\n icon?: string\n showBackButton?: boolean\n toolbars?: HeaderToolbar[]\n}\n\nexport const headerComponentDefaults = {\n icon: undefined,\n showBackButton: false,\n toolbars: () => [],\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport Button from '@/components/Button.vue'\n\nconst props = withDefaults(defineProps<HeaderComponentProps>(), {\n ...headerComponentDefaults,\n})\n\nconst emit = defineEmits<{ back: [] }>()\n\nconst sortedToolbars = computed(() => {\n const order: Record<HorizontalAlignment, number> = { left: 0, center: 1, right: 2 }\n return [...props.toolbars].sort((a, b) => order[a.align] - order[b.align])\n})\n</script>\n\n<template>\n <div class=\"ac-component\">\n <header class=\"hc-header\">\n <div class=\"hc-left\">\n <Button\n v-if=\"showBackButton\"\n class=\"hc-back-btn\"\n icon=\"fa-solid fa-chevron-left\"\n aria-label=\"Vissza\"\n @click=\"emit('back')\"\n />\n\n <div class=\"hc-title-group\">\n <i v-if=\"icon\" :class=\"icon\" class=\"hc-title-icon\"></i>\n <h1 class=\"hc-title\">{{ title }}</h1>\n </div>\n </div>\n <div v-if=\"sortedToolbars.length\" class=\"hc-toolbars\">\n <div\n v-for=\"(toolbar, ti) in sortedToolbars\"\n :key=\"ti\"\n class=\"hc-buttons\"\n :class=\"`hc-buttons--${toolbar.align}`\"\n >\n <Button\n v-for=\"(btn, i) in toolbar.buttons\"\n :key=\"i\"\n v-bind=\"btn\"\n />\n </div>\n </div>\n </header>\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/header.scss\"></style>\n"],"mappings":";;;;;;GAgBa,IAA0B;CACrC,MAAM,KAAA;CACN,gBAAgB;CAChB,gBAAgB,CAAC;AACnB;;;;;;;;;;EAOA,IAAM,IAAQ,GAIR,IAAO,GAEP,IAAiB,QAAe;GACpC,IAAM,IAA6C;IAAE,MAAM;IAAG,QAAQ;IAAG,OAAO;GAAE;GAClF,OAAO,CAAC,GAAG,EAAM,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAM,EAAE,SAAS,EAAM,EAAE,MAAM;EAC3E,CAAC;yBAIC,EA+BM,OA/BN,GA+BM,CA9BJ,EA6BS,UA7BT,GA6BS,CA5BP,EAaM,OAbN,GAaM,CAXI,EAAA,kBAAA,EAAA,GADR,EAME,GAAA;;GAJA,OAAM;GACN,MAAK;GACL,cAAW;GACV,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,MAAA;mBAGd,EAGM,OAHN,GAGM,CAFK,EAAA,QAAA,EAAA,GAAT,EAAuD,KAAA;;GAAvC,OAAK,EAAA,CAAE,EAAA,MAAY,eAAe,CAAA;4BAClD,EAAqC,MAArC,GAAqC,EAAb,EAAA,KAAK,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAGtB,EAAA,MAAe,UAAA,EAAA,GAA1B,EAaM,OAbN,GAaM,EAAA,EAAA,EAAA,GAZJ,EAWM,GAAA,MAAA,EAVoB,EAAA,QAAhB,GAAS,YADnB,EAWM,OAAA;GATH,KAAK;GACN,OAAK,EAAA,CAAC,cAAY,eACK,EAAQ,OAAK,CAAA;cAEpC,EAIE,GAAA,MAAA,EAHmB,EAAQ,UAAnB,GAAK,YADf,EAIE,GAJF,EAIE,EAFC,KAAK,EAAC,GAAA,EAAA,SAAA,GAAA,GACC,CAAG,GAAA,MAAA,EAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components3.js","names":[],"sources":["../src/utils/date.ts"],"sourcesContent":["export function formatDate(date: Date, format: string): string {\n const tokens: Record<string, string> = {\n YYYY: String(date.getFullYear()),\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n DD: String(date.getDate()).padStart(2, '0'),\n HH: String(date.getHours()).padStart(2, '0'),\n mm: String(date.getMinutes()).padStart(2, '0'),\n ss: String(date.getSeconds()).padStart(2, '0'),\n }\n\n return format.replace(/YYYY|MM|DD|HH|mm|ss/g, (match) => tokens[match] ?? match)\n}\n\nexport function parseDate(value: string, format: string): Date | null {\n if (!value) return null\n\n const tokenRegex = /YYYY|MM|DD|HH|mm|ss/g\n let match: RegExpExecArray | null\n const parts: { token: string; start: number; end: number }[] = []\n\n while ((match = tokenRegex.exec(format)) !== null) {\n parts.push({ token: match[0], start: match.index, end: match.index + match[0].length })\n }\n\n let year = 1970\n let month = 0\n let day = 1\n let hour = 0\n let minute = 0\n let second = 0\n\n for (const part of parts) {\n const raw = value.slice(part.start, part.start + part.token.length)\n const n = parseInt(raw, 10)\n if (isNaN(n)) return null\n\n switch (part.token) {\n case 'YYYY':\n year = n\n break\n case 'MM':\n month = n - 1\n break\n case 'DD':\n day = n\n break\n case 'HH':\n hour = n\n break\n case 'mm':\n minute = n\n break\n case 'ss':\n second = n\n break\n }\n }\n\n return new Date(year, month, day, hour, minute, second)\n}\n\nexport function localToUTCString(date: Date, includeTime = false): string {\n if (includeTime) {\n return date.toISOString()\n }\n\n const y = date.getFullYear()\n const m = String(date.getMonth() + 1).padStart(2, '0')\n const d = String(date.getDate()).padStart(2, '0')\n return `${y}-${m}-${d}T00:00:00.000Z`\n}\n\nexport function castToDate(v: any): Date | null {\n if (!v) return null\n if (v instanceof Date) return v\n const d = new Date(v)\n return isNaN(d.getTime()) ? null : d\n}\nexport function startOfDay(date: Date) {\n const d = new Date(date)\n d.setHours(0, 0, 0, 0)\n return d\n}\n\nexport function endOfDay(date: Date) {\n const d = new Date(date)\n d.setHours(23, 59, 0, 0)\n return d\n}\n\nexport function startOfWeek(date: Date) {\n const d = startOfDay(date)\n const day = d.getDay()\n const diff = day === 0 ? -6 : 1 - day // Monday start\n d.setDate(d.getDate() + diff)\n return d\n}\n\nexport function isSameCalendarDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport function laterOf(a: Date | null | undefined, b: Date | null | undefined): Date | null {\n if (a && b) return a.getTime() > b.getTime() ? a : b\n return a ?? b ?? null\n}\n\nexport function earlierOf(a: Date | null | undefined, b: Date | null | undefined): Date | null {\n if (a && b) return a.getTime() < b.getTime() ? a : b\n return a ?? b ?? null\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components30.js","names":[],"sources":["../src/components/HeaderComponent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ButtonProps } from '@/components/Button.vue'\nimport type { HorizontalAlignment } from '@/types/types'\n\nexport interface HeaderToolbar {\n align: HorizontalAlignment\n buttons: ButtonProps[]\n}\n\nexport interface HeaderComponentProps {\n title: string\n icon?: string\n showBackButton?: boolean\n toolbars?: HeaderToolbar[]\n}\n\nexport const headerComponentDefaults = {\n icon: undefined,\n showBackButton: false,\n toolbars: () => [],\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport Button from '@/components/Button.vue'\n\nconst props = withDefaults(defineProps<HeaderComponentProps>(), {\n ...headerComponentDefaults,\n})\n\nconst emit = defineEmits<{ back: [] }>()\n\nconst sortedToolbars = computed(() => {\n const order: Record<HorizontalAlignment, number> = { left: 0, center: 1, right: 2 }\n return [...props.toolbars].sort((a, b) => order[a.align] - order[b.align])\n})\n</script>\n\n<template>\n <div class=\"ac-component\">\n <header class=\"hc-header\">\n <div class=\"hc-left\">\n <Button\n v-if=\"showBackButton\"\n class=\"hc-back-btn\"\n icon=\"fa-solid fa-chevron-left\"\n aria-label=\"Vissza\"\n @click=\"emit('back')\"\n />\n\n <div class=\"hc-title-group\">\n <i v-if=\"icon\" :class=\"icon\" class=\"hc-title-icon\"></i>\n <h1 class=\"hc-title\">{{ title }}</h1>\n </div>\n </div>\n <div v-if=\"sortedToolbars.length\" class=\"hc-toolbars\">\n <div\n v-for=\"(toolbar, ti) in sortedToolbars\"\n :key=\"ti\"\n class=\"hc-buttons\"\n :class=\"`hc-buttons--${toolbar.align}`\"\n >\n <Button\n v-for=\"(btn, i) in toolbar.buttons\"\n :key=\"i\"\n v-bind=\"btn\"\n />\n </div>\n </div>\n </header>\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/header.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components31.js","names":["$slots"],"sources":["../src/components/Modal.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface ModalProps {\n title: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from 'vue'\n\ndefineProps<ModalProps>()\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nfunction onBackdropClick(e: MouseEvent) {\n if (e.target === e.currentTarget) {\n emit('close')\n }\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n emit('close')\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', onKeydown)\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', onKeydown)\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"c-modal-backdrop ac-component\" @mousedown=\"onBackdropClick\">\n <div class=\"c-modal\">\n <div class=\"c-modal-header\">\n <h3 class=\"c-modal-title\">{{ title }}</h3>\n <button type=\"button\" class=\"c-modal-close\" @click=\"emit('close')\">\n <i class=\"ri-close-line\"></i>\n </button>\n </div>\n <div class=\"c-modal-body c-scroll\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"c-modal-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/modal.scss\"></style>\n"],"mappings":";;;;;;;;;;EAWA,IAAM,IAAO;EAIb,SAAS,EAAgB,GAAe;GACtC,AAAI,EAAE,WAAW,EAAE,iBACjB,EAAK,OAAO;EAEhB;EAEA,SAAS,EAAU,GAAkB;GACnC,AAAI,EAAE,QAAQ,YACZ,EAAK,OAAO;EAEhB;SAEA,QAAgB;GACd,SAAS,iBAAiB,WAAW,CAAS;EAChD,CAAC,GAED,QAAkB;GAChB,SAAS,oBAAoB,WAAW,CAAS;EACnD,CAAC,mBAIC,EAiBW,GAAA,EAjBD,IAAG,OAAM,GAAA,CACjB,EAeM,OAAA;GAfD,OAAM;GAAiC,aAAW;MACrD,EAaM,OAbN,GAaM;GAZJ,EAKM,OALN,GAKM,CAJJ,EAA0C,MAA1C,GAA0C,EAAb,EAAA,KAAK,GAAA,CAAA,GAClC,EAES,UAAA;IAFD,MAAK;IAAS,OAAM;IAAiB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,OAAA;oBACtD,EAA6B,KAAA,EAA1B,OAAM,gBAAe,GAAA,MAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;GAG5B,EAEM,OAFN,GAEM,CADJ,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA;GAECA,EAAAA,OAAO,UAAA,EAAA,GAAlB,EAEM,OAFN,GAEM,CADJ,EAAsB,EAAA,QAAA,QAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components33.js","names":[],"sources":["../src/components/Modal.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface ModalProps {\n title: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from 'vue'\n\ndefineProps<ModalProps>()\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nfunction onBackdropClick(e: MouseEvent) {\n if (e.target === e.currentTarget) {\n emit('close')\n }\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n emit('close')\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', onKeydown)\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', onKeydown)\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"c-modal-backdrop ac-component\" @mousedown=\"onBackdropClick\">\n <div class=\"c-modal\">\n <div class=\"c-modal-header\">\n <h3 class=\"c-modal-title\">{{ title }}</h3>\n <button type=\"button\" class=\"c-modal-close\" @click=\"emit('close')\">\n <i class=\"ri-close-line\"></i>\n </button>\n </div>\n <div class=\"c-modal-body c-scroll\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"c-modal-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/modal.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components34.js","names":[],"sources":["../src/components/ConfirmModal.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface ConfirmModalProps {\n title: string\n message: string\n confirmLabel?: string\n cancelLabel?: string\n type?: ButtonType\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Modal from '@/components/Modal.vue'\nimport Button, { type ButtonType } from '@/components/Button.vue'\n\nwithDefaults(defineProps<ConfirmModalProps>(), {\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n type: 'normal',\n})\n\nconst emit = defineEmits<{\n confirm: []\n cancel: []\n}>()\n</script>\n\n<template>\n <Modal :title=\"title\" @close=\"emit('cancel')\">\n <p class=\"c-confirm-modal-message\">{{ message }}</p>\n <template #footer>\n <Button :label=\"cancelLabel\" type=\"normal\" outline @click=\"emit('cancel')\" />\n <Button :label=\"confirmLabel\" :type=\"type\" @click=\"emit('confirm')\" />\n </template>\n </Modal>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAoBA,IAAM,IAAO;yBAOX,EAMQ,GAAA;GANA,OAAO,EAAA;GAAQ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,QAAA;;GAErB,QAAM,QAC8D,CAA7E,EAA6E,GAAA;IAApE,OAAO,EAAA;IAAa,MAAK;IAAS,SAAA;IAAS,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,QAAA;2BAC/D,EAAsE,GAAA;IAA7D,OAAO,EAAA;IAAe,MAAM,EAAA;IAAO,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,SAAA;;oBAHL,CAApD,EAAoD,KAApD,GAAoD,EAAd,EAAA,OAAO,GAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components35.js","names":[],"sources":["../src/components/ConfirmModal.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface ConfirmModalProps {\n title: string\n message: string\n confirmLabel?: string\n cancelLabel?: string\n type?: ButtonType\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Modal from '@/components/Modal.vue'\nimport Button, { type ButtonType } from '@/components/Button.vue'\n\nwithDefaults(defineProps<ConfirmModalProps>(), {\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n type: 'normal',\n})\n\nconst emit = defineEmits<{\n confirm: []\n cancel: []\n}>()\n</script>\n\n<template>\n <Modal :title=\"title\" @close=\"emit('cancel')\">\n <p class=\"c-confirm-modal-message\">{{ message }}</p>\n <template #footer>\n <Button :label=\"cancelLabel\" type=\"normal\" outline @click=\"emit('cancel')\" />\n <Button :label=\"confirmLabel\" :type=\"type\" @click=\"emit('confirm')\" />\n </template>\n </Modal>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components36.js","names":[],"sources":["../src/components/CopyToClipboard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst props = defineProps<{\n value?: unknown\n target?: string | HTMLElement\n useParent?: boolean\n}>()\n\nconst copied = ref(false)\n\nfunction copy(event?: MouseEvent) {\n let text = ''\n\n if (props.target) {\n const element: HTMLElement | null = typeof props.target === 'string'\n ? document.querySelector(props.target)\n : props.target\n\n if (element) {\n text = element.innerText\n }\n }\n else if (props.useParent && event?.target) {\n const parent = (event.target as HTMLElement).parentElement\n if (parent) {\n text = parent.innerText\n }\n }\n else {\n text = props.value == null ? '' : String(props.value)\n }\n\n if (text) {\n navigator.clipboard.writeText(text)\n copied.value = true\n setTimeout(() => { copied.value = false }, 1500)\n }\n}\n</script>\n\n<template>\n <i\n :class=\"copied ? 'fa-solid fa-check c-copy-btn--copied' : 'fa-regular fa-copy'\"\n class=\"c-copy-btn\"\n tabindex=\"0\"\n @click.stop=\"copy\"\n ></i>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/copy-to-clipboard.scss\"></style>\n"],"mappings":";;;;;;;;;;EAGA,IAAM,IAAQ,GAMR,IAAS,EAAI,EAAK;EAExB,SAAS,EAAK,GAAoB;GAChC,IAAI,IAAO;GAEX,IAAI,EAAM,QAAQ;IAChB,IAAM,IAA8B,OAAO,EAAM,UAAW,WACxD,SAAS,cAAc,EAAM,MAAM,IACnC,EAAM;IAEV,AAAI,MACF,IAAO,EAAQ;GAEnB,OACK,IAAI,EAAM,aAAa,GAAO,QAAQ;IACzC,IAAM,IAAU,EAAM,OAAuB;IAC7C,AAAI,MACF,IAAO,EAAO;GAElB,OAEE,IAAO,EAAM,SAAS,OAAO,KAAK,OAAO,EAAM,KAAK;GAGtD,AAAI,MACF,UAAU,UAAU,UAAU,CAAI,GAClC,EAAO,QAAQ,IACf,iBAAiB;IAAE,EAAO,QAAQ;GAAM,GAAG,IAAI;EAEnD;yBAIE,EAKK,KAAA;GAJF,OAAK,EAAA,CAAE,EAAA,QAAM,yCAAA,sBACR,YAAY,CAAA;GAClB,UAAS;GACR,SAAK,EAAO,GAAI,CAAA,MAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components38.js","names":[],"sources":["../src/components/CopyToClipboard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst props = defineProps<{\n value?: unknown\n target?: string | HTMLElement\n useParent?: boolean\n}>()\n\nconst copied = ref(false)\n\nfunction copy(event?: MouseEvent) {\n let text = ''\n\n if (props.target) {\n const element: HTMLElement | null = typeof props.target === 'string'\n ? document.querySelector(props.target)\n : props.target\n\n if (element) {\n text = element.innerText\n }\n }\n else if (props.useParent && event?.target) {\n const parent = (event.target as HTMLElement).parentElement\n if (parent) {\n text = parent.innerText\n }\n }\n else {\n text = props.value == null ? '' : String(props.value)\n }\n\n if (text) {\n navigator.clipboard.writeText(text)\n copied.value = true\n setTimeout(() => { copied.value = false }, 1500)\n }\n}\n</script>\n\n<template>\n <i\n :class=\"copied ? 'fa-solid fa-check c-copy-btn--copied' : 'fa-regular fa-copy'\"\n class=\"c-copy-btn\"\n tabindex=\"0\"\n @click.stop=\"copy\"\n ></i>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/copy-to-clipboard.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components39.js","names":[],"sources":["../src/components/custom/ImagePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface ImagePickerModel {\n id: string\n url: string\n source: string\n title: string\n isAdult: boolean\n}\n\nexport interface ImagePickerProps {\n modelValue?: ImagePickerModel\n details?: boolean\n editable?: boolean\n direction?: 'horizontal' | 'vertical'\n articleEditorUrl: string\n environment: string\n searchImageWidgetUrl: string\n imageBaseUrl: string\n imageViewId: string\n}\n\nconst defaultValue: ImagePickerModel = {\n id: '',\n url: '',\n isAdult: false,\n source: '',\n title: '',\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue'\nimport Modal from '@/components/Modal.vue'\nimport Button from '@/components/Button.vue'\n\nconst props = withDefaults(defineProps<ImagePickerProps>(), {\n modelValue: undefined,\n details: false,\n editable: false,\n direction: 'vertical',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ImagePickerModel): void\n}>()\n\nconst local = ref<ImagePickerModel>(defaultValue)\nconst showImageModal = ref(false)\n\nwatch(\n () => local.value,\n () => {\n emit('update:modelValue', local.value)\n },\n { deep: true },\n)\n\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n local.value = newValue\n }\n },\n { deep: true, immediate: true },\n)\n\n// Generate unique ID\nconst uniqueId = (() => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) return crypto.randomUUID()\n return `ip-${Date.now()}-${Math.random().toString(36).slice(2)}`\n})()\n\nconst imageCausationId = `${uniqueId}-image-picker-causation`\n\n// Load external search image widget script\nonMounted(() => {\n // Check if custom element is already registered\n if (!customElements.get('hvg-search-image')) {\n if (!document.querySelector(`script[src=\"${props.searchImageWidgetUrl}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = props.searchImageWidgetUrl\n script.async = true\n document.head.appendChild(script)\n }\n }\n})\n\n// Computed properties\nconst hasImage = computed(() => {\n return (\n local.value &&\n ((local.value.url && local.value.url.length > 0) ||\n (local.value.id && local.value.id.length > 0))\n )\n})\n\nconst imageUrl = computed(() => {\n if (!hasImage.value) return undefined\n if (local.value.url && local.value.url.length > 0) return local.value.url\n return `${props.imageBaseUrl}/${props.imageViewId}/${local.value.id}.img`\n})\n\nconst isHorizontal = computed(() => props.direction === 'horizontal')\n\n// Event handlers\nconst selectImage = (event: MouseEvent) => {\n event.preventDefault()\n showImageModal.value = true\n}\n\nconst resetImage = (event: MouseEvent) => {\n event.preventDefault()\n local.value = { ...defaultValue }\n}\n\nconst onImageSelected = (e: CustomEvent) => {\n if (e?.detail?.causationid === imageCausationId) {\n showImageModal.value = false\n\n if (e.detail?.image) {\n local.value = {\n id: e.detail.image.id,\n url: '',\n isAdult: e.detail.image.isAdult,\n source: e.detail.image.source,\n title: e.detail.image.title,\n }\n }\n }\n}\n\n// Event listeners\nonMounted(() => {\n window.addEventListener('image-selected', onImageSelected as EventListener)\n})\n\nonUnmounted(() => {\n window.removeEventListener('image-selected', onImageSelected as EventListener)\n})\n</script>\n\n<template>\n <div class=\"c-image-picker ac-component\">\n <div\n class=\"c-image-picker__container\"\n :class=\"{ 'c-image-picker__container--horizontal': isHorizontal }\"\n >\n <div class=\"c-image-picker__preview\">\n <img\n v-if=\"hasImage\"\n :src=\"imageUrl\"\n :alt=\"local.title || 'Selected image'\"\n class=\"c-image-picker__img\"\n />\n <p v-else class=\"c-image-picker__placeholder\">Nincs kiválasztott kép</p>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"c-image-picker__buttons\">\n <Button\n type=\"success\"\n label=\"Kép kiválasztása\"\n class=\"nowrap\"\n @click=\"selectImage\"\n icon=\"fa-solid fa-image\"\n ></Button>\n <Button\n type=\"error\"\n label=\"Eltávolítás\"\n class=\"nowrap\"\n @click=\"resetImage\"\n icon=\"fa-solid fa-trash\"\n ></Button>\n </div>\n\n <!-- Details Section -->\n <div v-if=\"details && local.id\" class=\"c-image-picker__details\">\n <!-- Source Input -->\n <div>\n <label for=\"image-source\" class=\"c-label\">Forrás</label>\n <div class=\"c-input-row\">\n <input\n v-model=\"local.source\"\n id=\"image-source\"\n type=\"text\"\n class=\"c-input\"\n placeholder=\"Kép forrása\"\n :disabled=\"!editable\"\n />\n </div>\n </div>\n\n <!-- Title/Alt Text Input -->\n <div>\n <label for=\"image-title\" class=\"c-label\">Cím / Alt szöveg</label>\n <div class=\"c-input-row\">\n <textarea\n v-model=\"local.title\"\n id=\"image-title\"\n class=\"c-input c-image-picker__textarea\"\n placeholder=\"Cím vagy alt szöveg\"\n :disabled=\"!editable\"\n />\n </div>\n </div>\n\n <!-- Adult Content Checkbox -->\n <div class=\"flex-center gap-1\">\n <input\n id=\"image-adult\"\n v-model=\"local.isAdult\"\n type=\"checkbox\"\n class=\"c-checkbox\"\n :checked=\"local.isAdult\"\n :disabled=\"!editable\"\n />\n <label for=\"image-adult\" class=\"c-label\">Felnőtt tartalom</label>\n </div>\n </div>\n </div>\n\n <!-- Image Search Modal Dialog -->\n <Modal v-if=\"showImageModal\" title=\"Kép keresése\" @close=\"showImageModal = false\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :environment=\"environment\"\n :aeurl=\"articleEditorUrl\"\n selectonly=\"true\"\n />\n </Modal>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/image-picker.scss\"></style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components4.js","names":[],"sources":["../src/utils/dom.ts"],"sourcesContent":["import type { ControlSize } from '@/types/types'\n\nexport function sizeToClass(size: ControlSize | undefined, prefix?: string ): string {\n const className = size === 'small' ? 'sm' : size === 'large' ? 'lg' : ''\n\n if (!className) return ''\n return prefix ? `${prefix}-${className}` : className\n}\n\nexport function typeToClass(type: string | undefined, prefix?: string): string {\n if (!type || type === 'normal') return ''\n return prefix ? `${prefix}-${type}` : type\n}\n"],"mappings":";AAEA,SAAgB,EAAY,GAA+B,GAA0B;CACnF,IAAM,IAAY,MAAS,UAAU,OAAO,MAAS,UAAU,OAAO;CAGtE,OADK,IACE,IAAS,GAAG,EAAO,GAAG,MAAc,IADpB;AAEzB;AAEA,SAAgB,EAAY,GAA0B,GAAyB;CAE7E,OADI,CAAC,KAAQ,MAAS,WAAiB,KAChC,IAAS,GAAG,EAAO,GAAG,MAAS;AACxC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components41.js","names":[],"sources":["../src/components/custom/ImagePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface ImagePickerModel {\n id: string\n url: string\n source: string\n title: string\n isAdult: boolean\n}\n\nexport interface ImagePickerProps {\n modelValue?: ImagePickerModel\n details?: boolean\n editable?: boolean\n direction?: 'horizontal' | 'vertical'\n articleEditorUrl: string\n environment: string\n searchImageWidgetUrl: string\n imageBaseUrl: string\n imageViewId: string\n}\n\nconst defaultValue: ImagePickerModel = {\n id: '',\n url: '',\n isAdult: false,\n source: '',\n title: '',\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue'\nimport Modal from '@/components/Modal.vue'\nimport Button from '@/components/Button.vue'\n\nconst props = withDefaults(defineProps<ImagePickerProps>(), {\n modelValue: undefined,\n details: false,\n editable: false,\n direction: 'vertical',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ImagePickerModel): void\n}>()\n\nconst local = ref<ImagePickerModel>(defaultValue)\nconst showImageModal = ref(false)\n\nwatch(\n () => local.value,\n () => {\n emit('update:modelValue', local.value)\n },\n { deep: true },\n)\n\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n local.value = newValue\n }\n },\n { deep: true, immediate: true },\n)\n\n// Generate unique ID\nconst uniqueId = (() => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) return crypto.randomUUID()\n return `ip-${Date.now()}-${Math.random().toString(36).slice(2)}`\n})()\n\nconst imageCausationId = `${uniqueId}-image-picker-causation`\n\n// Load external search image widget script\nonMounted(() => {\n // Check if custom element is already registered\n if (!customElements.get('hvg-search-image')) {\n if (!document.querySelector(`script[src=\"${props.searchImageWidgetUrl}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = props.searchImageWidgetUrl\n script.async = true\n document.head.appendChild(script)\n }\n }\n})\n\n// Computed properties\nconst hasImage = computed(() => {\n return (\n local.value &&\n ((local.value.url && local.value.url.length > 0) ||\n (local.value.id && local.value.id.length > 0))\n )\n})\n\nconst imageUrl = computed(() => {\n if (!hasImage.value) return undefined\n if (local.value.url && local.value.url.length > 0) return local.value.url\n return `${props.imageBaseUrl}/${props.imageViewId}/${local.value.id}.img`\n})\n\nconst isHorizontal = computed(() => props.direction === 'horizontal')\n\n// Event handlers\nconst selectImage = (event: MouseEvent) => {\n event.preventDefault()\n showImageModal.value = true\n}\n\nconst resetImage = (event: MouseEvent) => {\n event.preventDefault()\n local.value = { ...defaultValue }\n}\n\nconst onImageSelected = (e: CustomEvent) => {\n if (e?.detail?.causationid === imageCausationId) {\n showImageModal.value = false\n\n if (e.detail?.image) {\n local.value = {\n id: e.detail.image.id,\n url: '',\n isAdult: e.detail.image.isAdult,\n source: e.detail.image.source,\n title: e.detail.image.title,\n }\n }\n }\n}\n\n// Event listeners\nonMounted(() => {\n window.addEventListener('image-selected', onImageSelected as EventListener)\n})\n\nonUnmounted(() => {\n window.removeEventListener('image-selected', onImageSelected as EventListener)\n})\n</script>\n\n<template>\n <div class=\"c-image-picker ac-component\">\n <div\n class=\"c-image-picker__container\"\n :class=\"{ 'c-image-picker__container--horizontal': isHorizontal }\"\n >\n <div class=\"c-image-picker__preview\">\n <img\n v-if=\"hasImage\"\n :src=\"imageUrl\"\n :alt=\"local.title || 'Selected image'\"\n class=\"c-image-picker__img\"\n />\n <p v-else class=\"c-image-picker__placeholder\">Nincs kiválasztott kép</p>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"c-image-picker__buttons\">\n <Button\n type=\"success\"\n label=\"Kép kiválasztása\"\n class=\"nowrap\"\n @click=\"selectImage\"\n icon=\"fa-solid fa-image\"\n ></Button>\n <Button\n type=\"error\"\n label=\"Eltávolítás\"\n class=\"nowrap\"\n @click=\"resetImage\"\n icon=\"fa-solid fa-trash\"\n ></Button>\n </div>\n\n <!-- Details Section -->\n <div v-if=\"details && local.id\" class=\"c-image-picker__details\">\n <!-- Source Input -->\n <div>\n <label for=\"image-source\" class=\"c-label\">Forrás</label>\n <div class=\"c-input-row\">\n <input\n v-model=\"local.source\"\n id=\"image-source\"\n type=\"text\"\n class=\"c-input\"\n placeholder=\"Kép forrása\"\n :disabled=\"!editable\"\n />\n </div>\n </div>\n\n <!-- Title/Alt Text Input -->\n <div>\n <label for=\"image-title\" class=\"c-label\">Cím / Alt szöveg</label>\n <div class=\"c-input-row\">\n <textarea\n v-model=\"local.title\"\n id=\"image-title\"\n class=\"c-input c-image-picker__textarea\"\n placeholder=\"Cím vagy alt szöveg\"\n :disabled=\"!editable\"\n />\n </div>\n </div>\n\n <!-- Adult Content Checkbox -->\n <div class=\"flex-center gap-1\">\n <input\n id=\"image-adult\"\n v-model=\"local.isAdult\"\n type=\"checkbox\"\n class=\"c-checkbox\"\n :checked=\"local.isAdult\"\n :disabled=\"!editable\"\n />\n <label for=\"image-adult\" class=\"c-label\">Felnőtt tartalom</label>\n </div>\n </div>\n </div>\n\n <!-- Image Search Modal Dialog -->\n <Modal v-if=\"showImageModal\" title=\"Kép keresése\" @close=\"showImageModal = false\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :environment=\"environment\"\n :aeurl=\"articleEditorUrl\"\n selectonly=\"true\"\n />\n </Modal>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/image-picker.scss\"></style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admins-components42.js","names":[],"sources":["../src/components/custom/ExternalArticleOffer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport ImagePicker from '@/components/custom/ImagePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\n\nexport interface Article {\n url: string\n imageUrl: string\n imageId: string\n title: string\n lead: string\n}\n\nexport interface ExternalArticleOfferModel {\n article: Article\n format: string\n}\n\nconst defaultValue: ExternalArticleOfferModel = {\n article: {\n url: '',\n imageUrl: '',\n imageId: '',\n title: '',\n lead: '',\n },\n format: '',\n}\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ExternalArticleOfferModel): void\n}>()\n\nconst props = defineProps<{\n modelValue?: ExternalArticleOfferModel\n onArticleUrlChanged: (url: string, callback: (article: Article) => void) => void\n articleEditorUrl: string\n environment: string\n searchImageWidgetUrl: string\n imageBaseUrl: string\n imageViewId: string\n formats: { label: string; value: string }[]\n}>()\n\nconst localModel = ref<ExternalArticleOfferModel>(defaultValue)\nconst imageModel = ref({\n id: localModel.value.article.imageId,\n url: '',\n source: '',\n title: '',\n isAdult: false,\n})\n\nwatch(\n () => props.modelValue,\n (newVal) => {\n if (!newVal) {\n localModel.value = defaultValue\n } else {\n localModel.value = newVal\n }\n },\n { deep: true, immediate: true },\n)\n\nwatch(\n () => localModel,\n (newVal) => {\n emit('update:modelValue', localModel.value)\n imageModel.value.id = newVal.value.article.imageId\n imageModel.value.url = newVal.value.article.imageUrl\n },\n { deep: true, immediate: true },\n)\n\nwatch(\n () => imageModel.value.id,\n (id) => {\n localModel.value.article.imageId = id\n },\n { deep: true, immediate: true },\n)\n\nwatch(\n () => imageModel.value.url,\n (url) => {\n localModel.value.article.imageUrl = url\n },\n { deep: true, immediate: true },\n)\n\nconst onUrlChanged = (event: Event) => {\n localModel.value.article.url = (event.target as any)?.value || ''\n if (!localModel.value.article.url) return\n\n props.onArticleUrlChanged(localModel.value.article.url, (article) => {\n localModel.value.article = article\n })\n}\n\nconst addScript = (url: string) => {\n if (!customElements.get('hvg-search-image')) {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n}\n\naddScript(props.searchImageWidgetUrl)\n</script>\n\n<template>\n <div class=\"flex-column gap-2 ac-component\">\n <div>\n <label for=\"articleUrl\" class=\"c-label\">Article URL</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleUrl\"\n class=\"c-input\"\n placeholder=\"Article URL\"\n :value=\"localModel.article.url\"\n @input=\"onUrlChanged\"\n />\n </div>\n </div>\n\n <div>\n <label for=\"articleTitle\" class=\"c-label\">Title</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Article title\"\n :value=\"localModel.article.title\"\n @input=\"localModel.article.title = ($event.target as any)?.value || ''\"\n />\n </div>\n </div>\n\n <div>\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Article lead / description\"\n :value=\"localModel.article.lead\"\n @input=\"localModel.article.lead = ($event.target as any)?.value || ''\"\n />\n </div>\n </div>\n\n <div>\n <ImagePicker\n v-model=\"imageModel\"\n :details=\"false\"\n :editable=\"false\"\n :environment=\"props.environment\"\n :article-editor-url=\"props.articleEditorUrl\"\n :search-image-widget-url=\"props.searchImageWidgetUrl\"\n :image-base-url=\"props.imageBaseUrl\"\n :image-view-id=\"props.imageViewId\"\n />\n </div>\n\n <div>\n <label class=\"c-label\">Format</label>\n <DropdownSelect\n v-model=\"localModel.format\"\n :options=\"props.formats\"\n :config=\"{ placeholder: 'Select format...' }\"\n />\n </div>\n </div>\n</template>\n"],"mappings":"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"}