admins-components 9.0.11 → 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.
- package/dist/admins-components.js +1 -1
- package/dist/admins-components100.js.map +1 -0
- package/dist/admins-components101.js.map +1 -0
- package/dist/admins-components102.js.map +1 -0
- package/dist/admins-components103.js.map +1 -0
- package/dist/admins-components104.js.map +1 -0
- package/dist/admins-components105.js.map +1 -0
- package/dist/admins-components106.js.map +1 -0
- package/dist/admins-components107.js.map +1 -0
- package/dist/admins-components108.js.map +1 -0
- package/dist/admins-components109.js.map +1 -0
- package/dist/admins-components11.js.map +1 -0
- package/dist/admins-components110.js.map +1 -0
- package/dist/admins-components111.js.map +1 -0
- package/dist/admins-components112.js.map +1 -0
- package/dist/admins-components113.js.map +1 -0
- package/dist/admins-components114.js.map +1 -0
- package/dist/admins-components115.js.map +1 -0
- package/dist/admins-components116.js.map +1 -0
- package/dist/admins-components117.js.map +1 -0
- package/dist/admins-components118.js.map +1 -0
- package/dist/admins-components119.js.map +1 -0
- package/dist/admins-components12.js.map +1 -0
- package/dist/admins-components120.js.map +1 -0
- package/dist/admins-components121.js.map +1 -0
- package/dist/admins-components122.js.map +1 -0
- package/dist/admins-components123.js.map +1 -0
- package/dist/admins-components124.js.map +1 -0
- package/dist/admins-components125.js.map +1 -0
- package/dist/admins-components126.js.map +1 -0
- package/dist/admins-components127.js.map +1 -0
- package/dist/admins-components128.js.map +1 -0
- package/dist/admins-components129.js.map +1 -0
- package/dist/admins-components13.js.map +1 -0
- package/dist/admins-components130.js.map +1 -0
- package/dist/admins-components131.js.map +1 -0
- package/dist/admins-components132.js.map +1 -0
- package/dist/admins-components133.js.map +1 -0
- package/dist/admins-components134.js.map +1 -0
- package/dist/admins-components135.js.map +1 -0
- package/dist/admins-components136.js.map +1 -0
- package/dist/admins-components137.js.map +1 -0
- package/dist/admins-components138.js.map +1 -0
- package/dist/admins-components139.js.map +1 -0
- package/dist/admins-components14.js.map +1 -0
- package/dist/admins-components140.js.map +1 -0
- package/dist/admins-components141.js.map +1 -0
- package/dist/admins-components142.js.map +1 -0
- package/dist/admins-components143.js.map +1 -0
- package/dist/admins-components144.js.map +1 -0
- package/dist/admins-components145.js.map +1 -0
- package/dist/admins-components146.js.map +1 -0
- package/dist/admins-components147.js.map +1 -0
- package/dist/admins-components148.js.map +1 -0
- package/dist/admins-components149.js.map +1 -0
- package/dist/admins-components15.js.map +1 -0
- package/dist/admins-components150.js.map +1 -0
- package/dist/admins-components151.js.map +1 -0
- package/dist/admins-components153.js.map +1 -0
- package/dist/admins-components154.js.map +1 -0
- package/dist/admins-components155.js.map +1 -0
- package/dist/admins-components157.js.map +1 -0
- package/dist/admins-components158.js.map +1 -0
- package/dist/admins-components159.js.map +1 -0
- package/dist/admins-components16.js.map +1 -0
- package/dist/admins-components160.js.map +1 -0
- package/dist/admins-components161.js.map +1 -0
- package/dist/admins-components162.js.map +1 -0
- package/dist/admins-components163.js.map +1 -0
- package/dist/admins-components164.js.map +1 -0
- package/dist/admins-components165.js.map +1 -0
- package/dist/admins-components166.js.map +1 -0
- package/dist/admins-components167.js.map +1 -0
- package/dist/admins-components169.js.map +1 -0
- package/dist/admins-components17.js.map +1 -0
- package/dist/admins-components18.js.map +1 -0
- package/dist/admins-components19.js.map +1 -0
- package/dist/admins-components20.js.map +1 -0
- package/dist/admins-components22.js.map +1 -0
- package/dist/admins-components23.js.map +1 -0
- package/dist/admins-components24.js.map +1 -0
- package/dist/admins-components25.js.map +1 -0
- package/dist/admins-components27.js.map +1 -0
- package/dist/admins-components28.js +16 -32
- package/dist/admins-components28.js.map +1 -0
- package/dist/admins-components3.js.map +1 -0
- package/dist/admins-components30.js.map +1 -0
- package/dist/admins-components31.js.map +1 -0
- package/dist/admins-components33.js.map +1 -0
- package/dist/admins-components34.js.map +1 -0
- package/dist/admins-components35.js.map +1 -0
- package/dist/admins-components36.js.map +1 -0
- package/dist/admins-components38.js.map +1 -0
- package/dist/admins-components39.js.map +1 -0
- package/dist/admins-components4.js.map +1 -0
- package/dist/admins-components41.js.map +1 -0
- package/dist/admins-components42.js.map +1 -0
- package/dist/admins-components43.js.map +1 -0
- package/dist/admins-components44.js.map +1 -0
- package/dist/admins-components45.js.map +1 -0
- package/dist/admins-components46.js.map +1 -0
- package/dist/admins-components48.js.map +1 -0
- package/dist/admins-components49.js.map +1 -0
- package/dist/admins-components5.js.map +1 -0
- package/dist/admins-components50.js.map +1 -0
- package/dist/admins-components52.js.map +1 -0
- package/dist/admins-components53.js.map +1 -0
- package/dist/admins-components54.js.map +1 -0
- package/dist/admins-components55.js.map +1 -0
- package/dist/admins-components56.js.map +1 -0
- package/dist/admins-components57.js.map +1 -0
- package/dist/admins-components58.js.map +1 -0
- package/dist/admins-components59.js.map +1 -0
- package/dist/admins-components6.js.map +1 -0
- package/dist/admins-components61.js.map +1 -0
- package/dist/admins-components62.js.map +1 -0
- package/dist/admins-components64.js.map +1 -0
- package/dist/admins-components65.js.map +1 -0
- package/dist/admins-components66.js.map +1 -0
- package/dist/admins-components68.js.map +1 -0
- package/dist/admins-components69.js.map +1 -0
- package/dist/admins-components7.js.map +1 -0
- package/dist/admins-components71.js.map +1 -0
- package/dist/admins-components72.js.map +1 -0
- package/dist/admins-components73.js.map +1 -0
- package/dist/admins-components75.js.map +1 -0
- package/dist/admins-components76.js.map +1 -0
- package/dist/admins-components77.js +2 -4
- package/dist/admins-components77.js.map +1 -0
- package/dist/admins-components78.js.map +1 -0
- package/dist/admins-components8.js.map +1 -0
- package/dist/admins-components80.js.map +1 -0
- package/dist/admins-components81.js.map +1 -0
- package/dist/admins-components83.js.map +1 -0
- package/dist/admins-components84.js.map +1 -0
- package/dist/admins-components86.js.map +1 -0
- package/dist/admins-components87.js +0 -1
- package/dist/admins-components87.js.map +1 -0
- package/dist/admins-components89.js.map +1 -0
- package/dist/admins-components90.js.map +1 -0
- package/dist/admins-components91.js.map +1 -0
- package/dist/admins-components92.js.map +1 -0
- package/dist/admins-components93.js.map +1 -0
- package/dist/admins-components94.js.map +1 -0
- package/dist/admins-components95.js.map +1 -0
- package/dist/admins-components96.js.map +1 -0
- package/dist/admins-components97.js.map +1 -0
- package/dist/admins-components98.js.map +1 -0
- package/dist/admins-components99.js.map +1 -0
- package/dist/base.css +1 -1
- package/dist/base.css.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-paginator.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-table.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/header.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/loader.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/package.json +2 -2
|
@@ -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":";;AAgBA,IAAa,IAAsC;CACjD;EAAE,KAAK;EAAW,OAAO;CAAS;CAClC;EAAE,KAAK;EAAW,OAAO;CAAK;CAC9B;EAAE,KAAK;EAAY,OAAO;CAAW;CACrC;EAAE,KAAK;EAAY,OAAO;CAAQ;CAClC;EAAE,KAAK;EAAa,OAAO;CAAa;CACxC;EAAE,KAAK;EAAa,OAAO;CAAU;AACvC;AAEA,SAAgB,EACd,GACA,oBAAY,IAAI,KAAK,GACK;CAC1B,IAAI,MAAQ,WACV,OAAO;EAAE,MAAM,EAAW,CAAG;EAAG,IAAI,EAAS,CAAG;CAAE;CAEpD,IAAI,MAAQ,WAAW;EACrB,IAAM,IAAY,IAAI,KAAK,CAAG;EAE9B,OADA,EAAU,QAAQ,EAAU,QAAQ,IAAI,CAAC,GAClC;GAAE,MAAM,EAAW,CAAS;GAAG,IAAI,EAAS,CAAS;EAAE;CAChE;CACA,IAAI,MAAQ,YAAY;EACtB,IAAM,IAAO,EAAY,CAAG;EAC5B,OAAO;GACL;GACA,IAAI,EAAS,IAAI,KAAK,EAAK,YAAY,GAAG,EAAK,SAAS,GAAG,EAAK,QAAQ,IAAI,CAAC,CAAC;EAChF;CACF;CACA,IAAI,MAAQ,YAAY;EACtB,IAAM,IAAgB,EAAY,CAAG,GAC/B,IAAO,IAAI,KAAK,CAAa;EACnC,EAAK,QAAQ,EAAK,QAAQ,IAAI,CAAC;EAC/B,IAAM,IAAK,EAAS,IAAI,KAAK,CAAa,CAAC;EAE3C,OADA,EAAG,QAAQ,EAAG,QAAQ,IAAI,CAAC,GACpB;GAAE;GAAM;EAAG;CACpB;CAOA,OANI,MAAQ,cACH;EACL,MAAM,EAAW,IAAI,KAAK,EAAI,YAAY,GAAG,EAAI,SAAS,GAAG,CAAC,CAAC;EAC/D,IAAI,EAAS,IAAI,KAAK,EAAI,YAAY,GAAG,EAAI,SAAS,IAAI,GAAG,CAAC,CAAC;CACjE,IAEK;EACL,MAAM,EAAW,IAAI,KAAK,EAAI,YAAY,GAAG,EAAI,SAAS,IAAI,GAAG,CAAC,CAAC;EACnE,IAAI,EAAS,IAAI,KAAK,EAAI,YAAY,GAAG,EAAI,SAAS,GAAG,CAAC,CAAC;CAC7D;AACF;AAEA,SAAgB,EACd,GACA,GACsC;CACtC,IAAM,EAAE,SAAM,UAAO,EAAuB,GAAK,EAAQ,GAAG,GACtD,IAAU,EAAQ,WAAW,IAAK,EAAW,CAAE;CAErD,OAAO;EACL,MAAM;GAAE,OAAO;GAAM,KAAK,EAAiB,GAAM,EAAQ,QAAQ;EAAE;EACnE,IAAI;GAAE,OAAO;GAAS,KAAK,EAAiB,GAAS,EAAQ,QAAQ;EAAE;CACzE;AACF;AAEA,SAAgB,EACd,GACA,GACA,GAC2B;CAC3B,IAAM,IAAM,EAAQ,uBAAO,IAAI,KAAK;CACpC,KAAK,IAAM,KAAS,GAAkB;EACpC,IAAM,EAAE,SAAM,UAAO,EAAuB,EAAM,KAAK,CAAG;EAI1D,IAHc,EAAQ,WAClB,EAAU,QAAQ,MAAM,EAAK,QAAQ,KAAK,EAAQ,QAAQ,MAAM,EAAG,QAAQ,IAC3E,EAAkB,GAAW,CAAI,KAAK,EAAkB,GAAS,CAAE,GAC5D,OAAO,EAAM;CAC1B;CACA,OAAO;AACT;AAEA,SAAgB,EACd,GACA,GACS;CACT,IAAM,EAAE,SAAM,UAAO,EAAuB,GAAK,EAAO,GAAG,GACrD,EAAE,YAAS,YAAS,gBAAa,GAEjC,IAAU,IAAW,IAAO,EAAW,CAAI,GAC3C,IAAQ,IAAW,IAAK,EAAW,CAAE,GACrC,IAAS,IAAW,IAAW,IAAU,EAAW,CAAO,IAAK,MAChE,IAAS,IAAW,IAAW,IAAU,EAAW,CAAO,IAAK;CAItE,OADA,EADI,KAAU,EAAQ,QAAQ,IAAI,EAAO,QAAQ,KAC7C,KAAU,EAAM,QAAQ,IAAI,EAAO,QAAQ;AAEjD;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACS;CACT,IAAM,EAAE,YAAS,YAAS,gBAAa,GACjC,IAAU,IAAI,KAAK,EAAK,QAAQ,IAAI,CAAK,GACzC,IAAQ,IAAI,KAAK,EAAG,QAAQ,IAAI,CAAK,GAErC,IAAa,IAAW,IAAU,EAAW,CAAO,GACpD,IAAW,IAAW,IAAQ,EAAW,CAAK,GAC9C,IAAS,IAAW,IAAW,IAAU,EAAW,CAAO,IAAK,MAChE,IAAS,IAAW,IAAW,IAAU,EAAW,CAAO,IAAK;CAItE,OADA,EADI,KAAU,EAAW,QAAQ,IAAI,EAAO,QAAQ,KAChD,KAAU,EAAS,QAAQ,IAAI,EAAO,QAAQ;AAEpD"}
|
|
@@ -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":""}
|
|
@@ -1,61 +1,45 @@
|
|
|
1
1
|
import e from "./admins-components6.js";
|
|
2
|
-
import { Fragment as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, defineComponent as s, mergeDefaults as c,
|
|
2
|
+
import { Fragment as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, defineComponent as s, mergeDefaults as c, mergeProps as l, normalizeClass as u, openBlock as d, renderList as f, toDisplayString as p } from "vue";
|
|
3
3
|
//#region src/components/HeaderComponent.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
-
var
|
|
4
|
+
var m = { class: "ac-component" }, h = { class: "hc-header" }, g = { class: "hc-left" }, _ = { class: "hc-title-group" }, v = { class: "hc-title" }, y = {
|
|
5
5
|
key: 0,
|
|
6
6
|
class: "hc-toolbars"
|
|
7
|
-
},
|
|
7
|
+
}, b = {
|
|
8
8
|
icon: void 0,
|
|
9
9
|
showBackButton: !1,
|
|
10
10
|
toolbars: () => []
|
|
11
|
-
},
|
|
11
|
+
}, x = /* @__PURE__ */ s({
|
|
12
12
|
__name: "HeaderComponent",
|
|
13
13
|
props: /* @__PURE__ */ c({
|
|
14
14
|
title: {},
|
|
15
15
|
icon: {},
|
|
16
16
|
showBackButton: { type: Boolean },
|
|
17
17
|
toolbars: {}
|
|
18
|
-
}, { ...
|
|
18
|
+
}, { ...b }),
|
|
19
19
|
emits: ["back"],
|
|
20
20
|
setup(s, { emit: c }) {
|
|
21
|
-
let
|
|
21
|
+
let b = s, x = c, S = n(() => {
|
|
22
22
|
let e = {
|
|
23
23
|
left: 0,
|
|
24
24
|
center: 1,
|
|
25
25
|
right: 2
|
|
26
26
|
};
|
|
27
|
-
return [...
|
|
27
|
+
return [...b.toolbars].sort((t, n) => e[t.align] - e[n.align]);
|
|
28
28
|
});
|
|
29
|
-
return (n, c) => (
|
|
29
|
+
return (n, c) => (d(), a("div", m, [o("header", h, [o("div", g, [s.showBackButton ? (d(), r(e, {
|
|
30
30
|
key: 0,
|
|
31
31
|
class: "hc-back-btn",
|
|
32
32
|
icon: "fa-solid fa-chevron-left",
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
"aria-label": "Vissza",
|
|
34
|
+
onClick: c[0] ||= (e) => x("back")
|
|
35
|
+
})) : i("", !0), o("div", _, [s.icon ? (d(), a("i", {
|
|
35
36
|
key: 0,
|
|
36
|
-
class:
|
|
37
|
-
}, null, 2)) : i("", !0), o("h1",
|
|
37
|
+
class: u([s.icon, "hc-title-icon"])
|
|
38
|
+
}, null, 2)) : i("", !0), o("h1", v, p(s.title), 1)])]), S.value.length ? (d(), a("div", y, [(d(!0), a(t, null, f(S.value, (n, i) => (d(), a("div", {
|
|
38
39
|
key: i,
|
|
39
|
-
class:
|
|
40
|
-
}, [(
|
|
41
|
-
key: n,
|
|
42
|
-
label: t.label,
|
|
43
|
-
icon: t.icon,
|
|
44
|
-
"icon-position": t.iconPosition,
|
|
45
|
-
type: t.type,
|
|
46
|
-
size: t.size,
|
|
47
|
-
outline: t.outline,
|
|
48
|
-
onClick: (e) => t.callback?.()
|
|
49
|
-
}, null, 8, [
|
|
50
|
-
"label",
|
|
51
|
-
"icon",
|
|
52
|
-
"icon-position",
|
|
53
|
-
"type",
|
|
54
|
-
"size",
|
|
55
|
-
"outline",
|
|
56
|
-
"onClick"
|
|
57
|
-
]))), 128))], 2))), 128))])) : i("", !0)])]));
|
|
40
|
+
class: u(["hc-buttons", `hc-buttons--${n.align}`])
|
|
41
|
+
}, [(d(!0), a(t, null, f(n.buttons, (t, n) => (d(), r(e, l({ key: n }, { ref_for: !0 }, t), null, 16))), 128))], 2))), 128))])) : i("", !0)])]));
|
|
58
42
|
}
|
|
59
43
|
});
|
|
60
44
|
//#endregion
|
|
61
|
-
export {
|
|
45
|
+
export { x as default, b as headerComponentDefaults };
|
|
@@ -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":""}
|