@8wave/ai-elements 0.75.0 → 0.77.0
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/_chunks/{PkStreamingMarkdown-rIdQh5_D.js → PkStreamingMarkdown-COZApJzT.js} +3 -3
- package/dist/_chunks/{PkStreamingMarkdown-rIdQh5_D.js.map → PkStreamingMarkdown-COZApJzT.js.map} +1 -1
- package/dist/_chunks/{PkToolShowArtifact-CeLgwZBA.js → PkToolShowArtifact-BZQixk9z.js} +5 -5
- package/dist/_chunks/{PkToolShowArtifact-CeLgwZBA.js.map → PkToolShowArtifact-BZQixk9z.js.map} +1 -1
- package/dist/_chunks/{PkToolShowCalendarEvent-cQpAAE3a.js → PkToolShowCalendarEvent-BEqn5iEb.js} +6 -6
- package/dist/_chunks/{PkToolShowCalendarEvent-cQpAAE3a.js.map → PkToolShowCalendarEvent-BEqn5iEb.js.map} +1 -1
- package/dist/_chunks/{PkToolShowComparison-Cu-zT8-Z.js → PkToolShowComparison-p34r0Hhd.js} +4 -4
- package/dist/_chunks/{PkToolShowComparison-Cu-zT8-Z.js.map → PkToolShowComparison-p34r0Hhd.js.map} +1 -1
- package/dist/_chunks/{PkToolShowContactForm-CqoSVvjG.js → PkToolShowContactForm-thS7c8iL.js} +18 -18
- package/dist/_chunks/{PkToolShowContactForm-CqoSVvjG.js.map → PkToolShowContactForm-thS7c8iL.js.map} +1 -1
- package/dist/_chunks/{PkToolShowEmail-oLGym0R9.js → PkToolShowEmail-Be8FvWjw.js} +4 -4
- package/dist/_chunks/{PkToolShowEmail-oLGym0R9.js.map → PkToolShowEmail-Be8FvWjw.js.map} +1 -1
- package/dist/_chunks/{PkToolShowImageGallery-CDXSL1Mg.js → PkToolShowImageGallery-DmJztS-Z.js} +5 -5
- package/dist/_chunks/{PkToolShowImageGallery-CDXSL1Mg.js.map → PkToolShowImageGallery-DmJztS-Z.js.map} +1 -1
- package/dist/_chunks/{PkToolShowLocation-BtRUdoEw.js → PkToolShowLocation-DOoLCHzS.js} +6 -6
- package/dist/_chunks/{PkToolShowLocation-BtRUdoEw.js.map → PkToolShowLocation-DOoLCHzS.js.map} +1 -1
- package/dist/_chunks/{PkToolShowMessage-tJQGRhce.js → PkToolShowMessage-DgeULbdQ.js} +4 -4
- package/dist/_chunks/{PkToolShowMessage-tJQGRhce.js.map → PkToolShowMessage-DgeULbdQ.js.map} +1 -1
- package/dist/_chunks/{PkToolShowMultipleChoice-CtVvdyDg.js → PkToolShowMultipleChoice-CpGyn_bZ.js} +3 -3
- package/dist/_chunks/{PkToolShowMultipleChoice-CtVvdyDg.js.map → PkToolShowMultipleChoice-CpGyn_bZ.js.map} +1 -1
- package/dist/_chunks/{PkToolShowProductList-D_k6CDdb.js → PkToolShowProductList-DEo7XogW.js} +4 -4
- package/dist/_chunks/{PkToolShowProductList-D_k6CDdb.js.map → PkToolShowProductList-DEo7XogW.js.map} +1 -1
- package/dist/_chunks/{PkToolShowQrCode-S1j_T8wQ.js → PkToolShowQrCode-UE4uSyvJ.js} +4 -4
- package/dist/_chunks/{PkToolShowQrCode-S1j_T8wQ.js.map → PkToolShowQrCode-UE4uSyvJ.js.map} +1 -1
- package/dist/_chunks/{PkToolShowSources-CroItMtG.js → PkToolShowSources-BMXftK6O.js} +7 -7
- package/dist/_chunks/PkToolShowSources-BMXftK6O.js.map +1 -0
- package/dist/_chunks/{PkToolShowSuggestedReply-BRa5Lpti.js → PkToolShowSuggestedReply-CPAnHI0c.js} +3 -3
- package/dist/_chunks/{PkToolShowSuggestedReply-BRa5Lpti.js.map → PkToolShowSuggestedReply-CPAnHI0c.js.map} +1 -1
- package/dist/_chunks/{PkToolShowWeather-CUpCJ8Nj.js → PkToolShowWeather-DcSUbzx0.js} +4 -4
- package/dist/_chunks/{PkToolShowWeather-CUpCJ8Nj.js.map → PkToolShowWeather-DcSUbzx0.js.map} +1 -1
- package/dist/_chunks/{PkToolShowWebPages-f-dHyxfD.js → PkToolShowWebPages-aH_GarEV.js} +5 -5
- package/dist/_chunks/{PkToolShowWebPages-f-dHyxfD.js.map → PkToolShowWebPages-aH_GarEV.js.map} +1 -1
- package/dist/_chunks/{PkUrl-CI17WkYu.js → PkUrl-BHD0_pal.js} +2 -2
- package/dist/_chunks/{PkUrl-CI17WkYu.js.map → PkUrl-BHD0_pal.js.map} +1 -1
- package/dist/_chunks/{VvCheckbox.es-BF8Mdg0O.js → VvCheckbox.es-ohF87NOe.js} +3 -3
- package/dist/_chunks/{VvCheckbox.es-BF8Mdg0O.js.map → VvCheckbox.es-ohF87NOe.js.map} +1 -1
- package/dist/_chunks/{VvCheckboxGroup.es-BJc8MmJ3.js → VvCheckboxGroup.es-DZCbyLN0.js} +4 -4
- package/dist/_chunks/{VvCheckboxGroup.es-BJc8MmJ3.js.map → VvCheckboxGroup.es-DZCbyLN0.js.map} +1 -1
- package/dist/_chunks/{VvCombobox.es-ILRHqAye.js → VvCombobox.es-YLPD7MpO.js} +6 -6
- package/dist/_chunks/{VvCombobox.es-ILRHqAye.js.map → VvCombobox.es-YLPD7MpO.js.map} +1 -1
- package/dist/_chunks/{VvInputText.es-CDnMeO26.js → VvInputText.es-DAnAXfBO.js} +7 -7
- package/dist/_chunks/{VvInputText.es-CDnMeO26.js.map → VvInputText.es-DAnAXfBO.js.map} +1 -1
- package/dist/_chunks/{VvRadio.es-C2p5vvAx.js → VvRadio.es-Do9oyNtV.js} +3 -3
- package/dist/_chunks/{VvRadio.es-C2p5vvAx.js.map → VvRadio.es-Do9oyNtV.js.map} +1 -1
- package/dist/_chunks/{VvRadioGroup.es-6GlWuDjY.js → VvRadioGroup.es-BHcqcJFC.js} +4 -4
- package/dist/_chunks/{VvRadioGroup.es-6GlWuDjY.js.map → VvRadioGroup.es-BHcqcJFC.js.map} +1 -1
- package/dist/_chunks/{VvSelect.es-i4lO9onq.js → VvSelect.es-CP_y02fy.js} +5 -5
- package/dist/_chunks/{VvSelect.es-i4lO9onq.js.map → VvSelect.es-CP_y02fy.js.map} +1 -1
- package/dist/_chunks/{VvTextarea.es-CGpiCS4S.js → VvTextarea.es-DetA_2DM.js} +6 -6
- package/dist/_chunks/{VvTextarea.es-CGpiCS4S.js.map → VvTextarea.es-DetA_2DM.js.map} +1 -1
- package/dist/_chunks/{dist-BTnzL-m0.js → dist-yqV26MWM.js} +4 -4
- package/dist/_chunks/{dist-BTnzL-m0.js.map → dist-yqV26MWM.js.map} +1 -1
- package/dist/_chunks/{esm-0nyRYwmP.js → esm-DLxNpT06.js} +7 -7
- package/dist/_chunks/{esm-0nyRYwmP.js.map → esm-DLxNpT06.js.map} +1 -1
- package/dist/_chunks/{floating-ui.vue-B5ZV-j8C.js → floating-ui.vue-tVPpNXUc.js} +3 -3
- package/dist/_chunks/{floating-ui.vue-B5ZV-j8C.js.map → floating-ui.vue-tVPpNXUc.js.map} +1 -1
- package/dist/_chunks/{iconify-C1EOwL90.js → iconify-y0w2FIJH.js} +3 -3
- package/dist/_chunks/{iconify-C1EOwL90.js.map → iconify-y0w2FIJH.js.map} +1 -1
- package/dist/_chunks/{index.es-CUjDCkXD.js → index.es-7fUi-rc0.js} +7 -7
- package/dist/_chunks/{index.es-CUjDCkXD.js.map → index.es-7fUi-rc0.js.map} +1 -1
- package/dist/_chunks/{src-C_wl-KYN.js → src-BfoQF6Z3.js} +2 -2
- package/dist/_chunks/{src-C_wl-KYN.js.map → src-BfoQF6Z3.js.map} +1 -1
- package/dist/_chunks/{useLightbox-CH1KeVqr.js → useLightbox-DL_oVBep.js} +3 -3
- package/dist/_chunks/{useLightbox-CH1KeVqr.js.map → useLightbox-DL_oVBep.js.map} +1 -1
- package/dist/_chunks/{vue-i18n-KvYvoek4.js → vue-i18n-DAH6nDTN.js} +3 -3
- package/dist/_chunks/{vue-i18n-KvYvoek4.js.map → vue-i18n-DAH6nDTN.js.map} +1 -1
- package/dist/_chunks/{vue.runtime.esm-bundler-BmggS4HU.js → vue.runtime.esm-bundler-Dq29dQrz.js} +16 -10
- package/dist/_chunks/vue.runtime.esm-bundler-Dq29dQrz.js.map +1 -0
- package/dist/ai-elements.es.js +65 -53
- package/dist/ai-elements.es.js.map +1 -1
- package/dist-vue/PkChatbot.js +1 -1
- package/dist-vue/PkChatbotFeedbackForm.js +1 -1
- package/dist-vue/PkChatbotMessages.js +1 -1
- package/dist-vue/PkChatbotViewChat.js +1 -1
- package/dist-vue/PkChatbotViewConversations.js +1 -1
- package/dist-vue/PkChatbotViewProfile.js +1 -1
- package/dist-vue/_chunks/{Media-CXQSoKqt.js → Media-kK7BnZGr.js} +2 -2
- package/dist-vue/_chunks/Media-kK7BnZGr.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbot-DAzGc7al.js → PkChatbot-B9RSkQmJ.js} +6 -6
- package/dist-vue/_chunks/{PkChatbot-DAzGc7al.js.map → PkChatbot-B9RSkQmJ.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotFeedbackForm-DvUzirPP.js → PkChatbotFeedbackForm-lj9CHdhn.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotFeedbackForm-DvUzirPP.js.map → PkChatbotFeedbackForm-lj9CHdhn.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotMessages-dsjB0-26.js → PkChatbotMessages-DOeUT6YL.js} +4 -4
- package/dist-vue/_chunks/{PkChatbotMessages-dsjB0-26.js.map → PkChatbotMessages-DOeUT6YL.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewChat-CjoezIyz.js → PkChatbotViewChat-C2FuDayB.js} +5 -5
- package/dist-vue/_chunks/{PkChatbotViewChat-CjoezIyz.js.map → PkChatbotViewChat-C2FuDayB.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewConversations-DSQu6vY1.js → PkChatbotViewConversations-2xc0o-fO.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotViewConversations-DSQu6vY1.js.map → PkChatbotViewConversations-2xc0o-fO.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewProfile-BJJiaG9H.js → PkChatbotViewProfile-CoT1JnMk.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotViewProfile-BJJiaG9H.js.map → PkChatbotViewProfile-CoT1JnMk.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowContactForm-r_GgO-ZX.js → PkToolShowContactForm-5H4jfq1F.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowContactForm-r_GgO-ZX.js.map → PkToolShowContactForm-5H4jfq1F.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowSources-DK2DCvU3.js → PkToolShowSources-Dv0uuvqS.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowSources-DK2DCvU3.js.map → PkToolShowSources-Dv0uuvqS.js.map} +1 -1
- package/dist-vue/_chunks/{createChatbotApiClient-f86KwRcq.js → createChatbotApiClient-CvDRMmDa.js} +2 -2
- package/dist-vue/_chunks/{createChatbotApiClient-f86KwRcq.js.map → createChatbotApiClient-CvDRMmDa.js.map} +1 -1
- package/dist-vue/_chunks/{index.es-_14zrNZB.js → index.es-Dk_HaA08.js} +2 -2
- package/dist-vue/_chunks/{index.es-_14zrNZB.js.map → index.es-Dk_HaA08.js.map} +1 -1
- package/dist-vue/_chunks/{useChatbotStore-CJlkoNn7.js → useChatbotStore-DMDbzuub.js} +5 -5
- package/dist-vue/_chunks/{useChatbotStore-CJlkoNn7.js.map → useChatbotStore-DMDbzuub.js.map} +1 -1
- package/dist-vue/api.js +1 -1
- package/dist-vue/composables.js +2 -2
- package/dist-vue/index.js +18 -18
- package/dist-vue/index.js.map +1 -1
- package/dist-vue/packages/models/src/schema/AgentEndpoint.d.ts +1 -1
- package/dist-vue/packages/models/src/schema/constants.d.ts +3 -1
- package/package.json +2 -2
- package/dist/_chunks/PkToolShowSources-CroItMtG.js.map +0 -1
- package/dist/_chunks/vue.runtime.esm-bundler-BmggS4HU.js.map +0 -1
- package/dist-vue/_chunks/Media-CXQSoKqt.js.map +0 -1
package/dist/_chunks/{PkToolShowWeather-CUpCJ8Nj.js.map → PkToolShowWeather-DcSUbzx0.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkToolShowWeather-CUpCJ8Nj.js","names":[],"sources":["../../../../packages/components/src/chat/PkToolShowWeather.vue","../../../../packages/components/src/chat/PkToolShowWeather.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n interface WeatherCurrent {\n temperature: number\n feelsLike: number\n humidity: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n windDirection: number\n uvIndex: number\n }\n\n interface WeatherHourly {\n time: string\n temperature: number\n precipitationProbability: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n }\n\n interface WeatherDaily {\n date: string\n maxTemp: number\n minTemp: number\n weatherCode: number\n precipitationSum: number\n precipitationProbabilityMax: number\n uvIndexMax: number\n sunrise: string\n sunset: string\n }\n\n interface AirQuality {\n aqi: number\n pm10: number\n pm25: number\n no2: number\n ozone: number\n }\n\n interface WeatherData {\n locationName: string\n latitude: number\n longitude: number\n timezone: string\n current: WeatherCurrent | null\n hourly: WeatherHourly[]\n daily: WeatherDaily[]\n airQuality: AirQuality | null\n }\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { t: $t, d: $d, n: $n } = useI18n({ useScope: 'global' })\n\n const toolPart = computed(() => {\n return props.part as { input?: WeatherData }\n })\n\n const data = computed(() => toolPart.value.input)\n\n const selectedDayIndex = ref(0)\n\n const dailyOpen = ref(!data.value?.current)\n\n watch(selectedDayIndex, (index) => {\n if (index > 0) {\n dailyOpen.value = true\n }\n })\n\n const selectedDay = computed(\n () => data.value?.daily?.[selectedDayIndex.value],\n )\n\n /** Hourly entries filtered to the selected day's date */\n const filteredHourly = computed(() => {\n if (!data.value?.hourly?.length || !selectedDay.value) {\n return data.value?.hourly ?? []\n }\n const dayDate = selectedDay.value.date\n return data.value.hourly.filter((h) => h.time.startsWith(dayDate))\n })\n\n /**\n * Parses a date/time string in various formats the LLM might produce.\n * Tries ISO, space-separated, time-only, and common human-readable formats.\n */\n function safeDate(value: string): Date {\n // 1. Try native parsing (works for ISO 8601 and many standard formats)\n const direct = new Date(value)\n if (!Number.isNaN(direct.getTime())) {\n return direct\n }\n\n // 2. Replace space separator → T (\"2024-04-15 14:00\" → \"2024-04-15T14:00\")\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}/.test(value)) {\n const withT = new Date(value.replace(' ', 'T'))\n if (!Number.isNaN(withT.getTime())) {\n return withT\n }\n }\n\n // 3. Time-only (\"14:00\" or \"14:00:00\") → today at that hour\n const timeOnly = value.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/)\n if (timeOnly) {\n const today = new Date()\n today.setHours(\n Number(timeOnly[1]),\n Number(timeOnly[2]),\n Number(timeOnly[3] ?? 0),\n 0,\n )\n return today\n }\n\n // 4. Date-only (\"2024-04-15\") → noon to avoid timezone edge\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n const noon = new Date(value + 'T12:00:00')\n if (!Number.isNaN(noon.getTime())) {\n return noon\n }\n }\n\n // Last resort: return an obviously invalid sentinel so callers can handle it\n return new Date(NaN)\n }\n\n /** Maps WMO weather code to an Iconify wi: icon name */\n function wmoToIcon(code: number): string {\n if (code === 0) {\n return 'wi:day-sunny'\n }\n if (code === 1) {\n return 'wi:day-sunny-overcast'\n }\n if (code === 2) {\n return 'wi:day-cloudy'\n }\n if (code === 3) {\n return 'wi:cloudy'\n }\n if (code === 45 || code === 48) {\n return 'wi:fog'\n }\n if (code >= 51 && code <= 55) {\n return 'wi:sprinkle'\n }\n if (code === 56 || code === 57) {\n return 'wi:sleet'\n }\n if (code >= 61 && code <= 65) {\n return 'wi:rain'\n }\n if (code === 66 || code === 67) {\n return 'wi:rain-mix'\n }\n if (code >= 71 && code <= 77) {\n return 'wi:snow'\n }\n if (code >= 80 && code <= 82) {\n return 'wi:showers'\n }\n if (code === 85 || code === 86) {\n return 'wi:snow-wind'\n }\n if (code === 95) {\n return 'wi:thunderstorm'\n }\n if (code === 96 || code === 99) {\n return 'wi:storm-showers'\n }\n return 'wi:na'\n }\n\n /**\n * Returns a formatted day label for daily forecast.\n * When daily has 1-2 entries, use the date string directly.\n * Otherwise, use index-based computation from today.\n */\n function formatDay(isoDate: string, index: number, total: number): string {\n const parsed = safeDate(isoDate + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n const today = new Date()\n today.setHours(12, 0, 0, 0)\n const diffDays = Math.round(\n (parsed.getTime() - today.getTime()) / 86_400_000,\n )\n if (diffDays === 0) {\n return $t('weather.today')\n }\n return $d(parsed, 'weekday-day')\n }\n if (index === 0 && total <= 7) {\n return $t('weather.today')\n }\n const fallback = new Date()\n fallback.setDate(fallback.getDate() + index)\n return $d(fallback, 'weekday-day')\n }\n\n const headerDate = computed(() => {\n if (selectedDay.value) {\n const parsed = safeDate(selectedDay.value.date + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n return formatDay(\n selectedDay.value.date,\n selectedDayIndex.value,\n data.value.daily.length,\n )\n }\n }\n return formatDay(safeDate(new Date().toISOString().slice(0, 10)), 0, 1)\n })\n\n /** Returns AQI label and CSS class for European AQI */\n function aqiInfo(aqi: number): { label: string; class: string } {\n if (aqi <= 20) {\n return {\n label: $t('weather.aqiGood'),\n class: 'text-green-600 bg-green-50',\n }\n }\n if (aqi <= 40) {\n return {\n label: $t('weather.aqiFair'),\n class: 'text-lime-600 bg-lime-50',\n }\n }\n if (aqi <= 60) {\n return {\n label: $t('weather.aqiModerate'),\n class: 'text-yellow-600 bg-yellow-50',\n }\n }\n if (aqi <= 80) {\n return {\n label: $t('weather.aqiPoor'),\n class: 'text-orange-600 bg-orange-50',\n }\n }\n if (aqi <= 100) {\n return {\n label: $t('weather.aqiVeryPoor'),\n class: 'text-red-600 bg-red-50',\n }\n }\n return {\n label: $t('weather.aqiHazardous'),\n class: 'text-purple-700 bg-purple-50',\n }\n }\n\n /** Formats wind direction degrees to compass label */\n function windDirectionLabel(deg: number): string {\n const dirs = ['N', 'NE', 'E', 'SE', 'S', 'SO', 'O', 'NO']\n return dirs[Math.round(deg / 45) % 8]\n }\n</script>\n\n<template>\n <div\n v-if=\"data\"\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden\">\n <!-- Header -->\n <div\n class=\"px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40\">\n <VvIcon name=\"ri:temp-cold-line\" class=\"text-16\" />\n <strong class=\"font-bold truncate\">\n {{ data.locationName }}\n </strong>\n <span class=\"ml-auto shrink-0 capitalize\">\n {{ headerDate }}\n </span>\n </div>\n\n <!-- Current conditions (only when real-time current is available AND first day is selected) -->\n <div\n v-if=\"data.current && selectedDayIndex === 0\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(data.current.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <span class=\"text-48 font-light leading-none text-word-1\">\n {{ $n(data.current.temperature, 'integer') }}°\n </span>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div class=\"flex items-center gap-6\">\n {{ $t('weather.feelsLike') }}\n {{ $n(data.current.feelsLike, 'integer') }}°\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:water-percent-line\" class=\"text-14\" />\n {{ data.current.humidity }}%\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14\" />\n {{ $n(data.current.windSpeed, 'integer') }} km/h\n {{ windDirectionLabel(data.current.windDirection) }}\n </div>\n <div\n v-if=\"data.current.uvIndex > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(data.current.uvIndex, 'integer') }}\n </div>\n </div>\n </div>\n\n <!-- Day summary (when no real-time current, or a non-today day is selected) -->\n <div\n v-else-if=\"selectedDay\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(selectedDay.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <div class=\"flex flex-col leading-none\">\n <span class=\"text-48 font-light text-word-1\">\n {{ $n(selectedDay.maxTemp, 'integer') }}°\n </span>\n <span class=\"text-20 text-word-3\">\n {{ $n(selectedDay.minTemp, 'integer') }}°\n </span>\n </div>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div\n v-if=\"selectedDay.precipitationProbabilityMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:drop-line\" class=\"text-14\" />\n {{ selectedDay.precipitationProbabilityMax }}% ({{\n selectedDay.precipitationSum\n }}\n mm)\n </div>\n <div\n v-if=\"selectedDay.uvIndexMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(selectedDay.uvIndexMax, 'integer') }}\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-foggy-line\" class=\"text-14\" />\n {{ $d(safeDate(selectedDay.sunrise), 'time') }}\n –\n {{ $d(safeDate(selectedDay.sunset), 'time') }}\n </div>\n </div>\n </div>\n\n <!-- Hourly forecast (filtered to selected day) -->\n <transition>\n <div\n v-if=\"filteredHourly.length > 0\"\n class=\"border-t border-surface-3\">\n <div\n class=\"flex overflow-x-auto gap-2 px-sm py-8 light-scrollbar\">\n <div\n v-for=\"hour in filteredHourly\"\n :key=\"hour.time\"\n class=\"flex flex-col items-center gap-4 min-w-48 px-4 py-6 rounded-lg text-11 text-word-3 shrink-0\">\n <span class=\"text-word-3\">{{\n Number.isNaN(safeDate(hour.time).getTime())\n ? hour.time\n : $d(safeDate(hour.time), 'time')\n }}</span>\n <VvIcon\n :name=\"wmoToIcon(hour.weatherCode)\"\n class=\"text-20 text-word-2\" />\n <span class=\"font-medium text-word-1\">\n {{ $n(hour.temperature, 'integer') }}°\n </span>\n <span\n v-if=\"hour.precipitationProbability > 0\"\n class=\"text-word-5 text-smaller\">\n {{ hour.precipitationProbability }}%\n </span>\n </div>\n </div>\n </div>\n </transition>\n\n <!-- Daily forecast (clickable, inside accordion) -->\n <transition>\n <VvAccordion\n v-if=\"data.daily.length > 1\"\n v-model=\"dailyOpen\"\n modifiers=\"details no-padding\"\n :title=\"$t('weather.dailyForecast')\"\n class=\"border-t border-surface-3\">\n <button\n v-for=\"(day, index) in data.daily\"\n :key=\"day.date\"\n type=\"button\"\n class=\"flex items-center gap-sm px-sm py-8 text-12 w-full text-left transition-colors cursor-pointer border-t border-surface-3\"\n :class=\"\n index === selectedDayIndex\n ? 'bg-surface-2'\n : 'hover:bg-surface-1'\n \"\n @click=\"selectedDayIndex = index\">\n <span class=\"w-48 shrink-0 text-word-3 capitalize\">\n {{ formatDay(day.date, index, data.daily.length) }}\n </span>\n <VvIcon\n :name=\"wmoToIcon(day.weatherCode)\"\n class=\"text-18 text-word-2 shrink-0\" />\n <span\n v-if=\"day.precipitationProbabilityMax > 0\"\n class=\"text-word-5 text-11 w-32 shrink-0\">\n {{ day.precipitationProbabilityMax }}%\n </span>\n <span v-else class=\"w-32 shrink-0\" />\n <div class=\"ml-auto flex items-center gap-8 text-word-3\">\n <span class=\"text-word-1 font-semibold\">\n {{ $n(day.maxTemp, 'integer') }}°\n </span>\n <span>{{ $n(day.minTemp, 'integer') }}°</span>\n </div>\n </button>\n </VvAccordion>\n </transition>\n\n <!-- Air quality -->\n <div\n v-if=\"data.airQuality\"\n class=\"border-t border-surface-3 px-sm py-8 flex items-center gap-8 text-12\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14 text-word-3\" />\n <span class=\"text-word-3\">{{ $t('weather.airQuality') }}</span>\n <span\n :class=\"[\n 'ml-auto px-8 py-2 text-11 font-semibold',\n aqiInfo(data.airQuality.aqi).class,\n ]\">\n {{ aqiInfo(data.airQuality.aqi).label }}\n ({{ data.airQuality.aqi }})\n </span>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n interface WeatherCurrent {\n temperature: number\n feelsLike: number\n humidity: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n windDirection: number\n uvIndex: number\n }\n\n interface WeatherHourly {\n time: string\n temperature: number\n precipitationProbability: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n }\n\n interface WeatherDaily {\n date: string\n maxTemp: number\n minTemp: number\n weatherCode: number\n precipitationSum: number\n precipitationProbabilityMax: number\n uvIndexMax: number\n sunrise: string\n sunset: string\n }\n\n interface AirQuality {\n aqi: number\n pm10: number\n pm25: number\n no2: number\n ozone: number\n }\n\n interface WeatherData {\n locationName: string\n latitude: number\n longitude: number\n timezone: string\n current: WeatherCurrent | null\n hourly: WeatherHourly[]\n daily: WeatherDaily[]\n airQuality: AirQuality | null\n }\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { t: $t, d: $d, n: $n } = useI18n({ useScope: 'global' })\n\n const toolPart = computed(() => {\n return props.part as { input?: WeatherData }\n })\n\n const data = computed(() => toolPart.value.input)\n\n const selectedDayIndex = ref(0)\n\n const dailyOpen = ref(!data.value?.current)\n\n watch(selectedDayIndex, (index) => {\n if (index > 0) {\n dailyOpen.value = true\n }\n })\n\n const selectedDay = computed(\n () => data.value?.daily?.[selectedDayIndex.value],\n )\n\n /** Hourly entries filtered to the selected day's date */\n const filteredHourly = computed(() => {\n if (!data.value?.hourly?.length || !selectedDay.value) {\n return data.value?.hourly ?? []\n }\n const dayDate = selectedDay.value.date\n return data.value.hourly.filter((h) => h.time.startsWith(dayDate))\n })\n\n /**\n * Parses a date/time string in various formats the LLM might produce.\n * Tries ISO, space-separated, time-only, and common human-readable formats.\n */\n function safeDate(value: string): Date {\n // 1. Try native parsing (works for ISO 8601 and many standard formats)\n const direct = new Date(value)\n if (!Number.isNaN(direct.getTime())) {\n return direct\n }\n\n // 2. Replace space separator → T (\"2024-04-15 14:00\" → \"2024-04-15T14:00\")\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}/.test(value)) {\n const withT = new Date(value.replace(' ', 'T'))\n if (!Number.isNaN(withT.getTime())) {\n return withT\n }\n }\n\n // 3. Time-only (\"14:00\" or \"14:00:00\") → today at that hour\n const timeOnly = value.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/)\n if (timeOnly) {\n const today = new Date()\n today.setHours(\n Number(timeOnly[1]),\n Number(timeOnly[2]),\n Number(timeOnly[3] ?? 0),\n 0,\n )\n return today\n }\n\n // 4. Date-only (\"2024-04-15\") → noon to avoid timezone edge\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n const noon = new Date(value + 'T12:00:00')\n if (!Number.isNaN(noon.getTime())) {\n return noon\n }\n }\n\n // Last resort: return an obviously invalid sentinel so callers can handle it\n return new Date(NaN)\n }\n\n /** Maps WMO weather code to an Iconify wi: icon name */\n function wmoToIcon(code: number): string {\n if (code === 0) {\n return 'wi:day-sunny'\n }\n if (code === 1) {\n return 'wi:day-sunny-overcast'\n }\n if (code === 2) {\n return 'wi:day-cloudy'\n }\n if (code === 3) {\n return 'wi:cloudy'\n }\n if (code === 45 || code === 48) {\n return 'wi:fog'\n }\n if (code >= 51 && code <= 55) {\n return 'wi:sprinkle'\n }\n if (code === 56 || code === 57) {\n return 'wi:sleet'\n }\n if (code >= 61 && code <= 65) {\n return 'wi:rain'\n }\n if (code === 66 || code === 67) {\n return 'wi:rain-mix'\n }\n if (code >= 71 && code <= 77) {\n return 'wi:snow'\n }\n if (code >= 80 && code <= 82) {\n return 'wi:showers'\n }\n if (code === 85 || code === 86) {\n return 'wi:snow-wind'\n }\n if (code === 95) {\n return 'wi:thunderstorm'\n }\n if (code === 96 || code === 99) {\n return 'wi:storm-showers'\n }\n return 'wi:na'\n }\n\n /**\n * Returns a formatted day label for daily forecast.\n * When daily has 1-2 entries, use the date string directly.\n * Otherwise, use index-based computation from today.\n */\n function formatDay(isoDate: string, index: number, total: number): string {\n const parsed = safeDate(isoDate + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n const today = new Date()\n today.setHours(12, 0, 0, 0)\n const diffDays = Math.round(\n (parsed.getTime() - today.getTime()) / 86_400_000,\n )\n if (diffDays === 0) {\n return $t('weather.today')\n }\n return $d(parsed, 'weekday-day')\n }\n if (index === 0 && total <= 7) {\n return $t('weather.today')\n }\n const fallback = new Date()\n fallback.setDate(fallback.getDate() + index)\n return $d(fallback, 'weekday-day')\n }\n\n const headerDate = computed(() => {\n if (selectedDay.value) {\n const parsed = safeDate(selectedDay.value.date + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n return formatDay(\n selectedDay.value.date,\n selectedDayIndex.value,\n data.value.daily.length,\n )\n }\n }\n return formatDay(safeDate(new Date().toISOString().slice(0, 10)), 0, 1)\n })\n\n /** Returns AQI label and CSS class for European AQI */\n function aqiInfo(aqi: number): { label: string; class: string } {\n if (aqi <= 20) {\n return {\n label: $t('weather.aqiGood'),\n class: 'text-green-600 bg-green-50',\n }\n }\n if (aqi <= 40) {\n return {\n label: $t('weather.aqiFair'),\n class: 'text-lime-600 bg-lime-50',\n }\n }\n if (aqi <= 60) {\n return {\n label: $t('weather.aqiModerate'),\n class: 'text-yellow-600 bg-yellow-50',\n }\n }\n if (aqi <= 80) {\n return {\n label: $t('weather.aqiPoor'),\n class: 'text-orange-600 bg-orange-50',\n }\n }\n if (aqi <= 100) {\n return {\n label: $t('weather.aqiVeryPoor'),\n class: 'text-red-600 bg-red-50',\n }\n }\n return {\n label: $t('weather.aqiHazardous'),\n class: 'text-purple-700 bg-purple-50',\n }\n }\n\n /** Formats wind direction degrees to compass label */\n function windDirectionLabel(deg: number): string {\n const dirs = ['N', 'NE', 'E', 'SE', 'S', 'SO', 'O', 'NO']\n return dirs[Math.round(deg / 45) % 8]\n }\n</script>\n\n<template>\n <div\n v-if=\"data\"\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden\">\n <!-- Header -->\n <div\n class=\"px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40\">\n <VvIcon name=\"ri:temp-cold-line\" class=\"text-16\" />\n <strong class=\"font-bold truncate\">\n {{ data.locationName }}\n </strong>\n <span class=\"ml-auto shrink-0 capitalize\">\n {{ headerDate }}\n </span>\n </div>\n\n <!-- Current conditions (only when real-time current is available AND first day is selected) -->\n <div\n v-if=\"data.current && selectedDayIndex === 0\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(data.current.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <span class=\"text-48 font-light leading-none text-word-1\">\n {{ $n(data.current.temperature, 'integer') }}°\n </span>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div class=\"flex items-center gap-6\">\n {{ $t('weather.feelsLike') }}\n {{ $n(data.current.feelsLike, 'integer') }}°\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:water-percent-line\" class=\"text-14\" />\n {{ data.current.humidity }}%\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14\" />\n {{ $n(data.current.windSpeed, 'integer') }} km/h\n {{ windDirectionLabel(data.current.windDirection) }}\n </div>\n <div\n v-if=\"data.current.uvIndex > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(data.current.uvIndex, 'integer') }}\n </div>\n </div>\n </div>\n\n <!-- Day summary (when no real-time current, or a non-today day is selected) -->\n <div\n v-else-if=\"selectedDay\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(selectedDay.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <div class=\"flex flex-col leading-none\">\n <span class=\"text-48 font-light text-word-1\">\n {{ $n(selectedDay.maxTemp, 'integer') }}°\n </span>\n <span class=\"text-20 text-word-3\">\n {{ $n(selectedDay.minTemp, 'integer') }}°\n </span>\n </div>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div\n v-if=\"selectedDay.precipitationProbabilityMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:drop-line\" class=\"text-14\" />\n {{ selectedDay.precipitationProbabilityMax }}% ({{\n selectedDay.precipitationSum\n }}\n mm)\n </div>\n <div\n v-if=\"selectedDay.uvIndexMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(selectedDay.uvIndexMax, 'integer') }}\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-foggy-line\" class=\"text-14\" />\n {{ $d(safeDate(selectedDay.sunrise), 'time') }}\n –\n {{ $d(safeDate(selectedDay.sunset), 'time') }}\n </div>\n </div>\n </div>\n\n <!-- Hourly forecast (filtered to selected day) -->\n <transition>\n <div\n v-if=\"filteredHourly.length > 0\"\n class=\"border-t border-surface-3\">\n <div\n class=\"flex overflow-x-auto gap-2 px-sm py-8 light-scrollbar\">\n <div\n v-for=\"hour in filteredHourly\"\n :key=\"hour.time\"\n class=\"flex flex-col items-center gap-4 min-w-48 px-4 py-6 rounded-lg text-11 text-word-3 shrink-0\">\n <span class=\"text-word-3\">{{\n Number.isNaN(safeDate(hour.time).getTime())\n ? hour.time\n : $d(safeDate(hour.time), 'time')\n }}</span>\n <VvIcon\n :name=\"wmoToIcon(hour.weatherCode)\"\n class=\"text-20 text-word-2\" />\n <span class=\"font-medium text-word-1\">\n {{ $n(hour.temperature, 'integer') }}°\n </span>\n <span\n v-if=\"hour.precipitationProbability > 0\"\n class=\"text-word-5 text-smaller\">\n {{ hour.precipitationProbability }}%\n </span>\n </div>\n </div>\n </div>\n </transition>\n\n <!-- Daily forecast (clickable, inside accordion) -->\n <transition>\n <VvAccordion\n v-if=\"data.daily.length > 1\"\n v-model=\"dailyOpen\"\n modifiers=\"details no-padding\"\n :title=\"$t('weather.dailyForecast')\"\n class=\"border-t border-surface-3\">\n <button\n v-for=\"(day, index) in data.daily\"\n :key=\"day.date\"\n type=\"button\"\n class=\"flex items-center gap-sm px-sm py-8 text-12 w-full text-left transition-colors cursor-pointer border-t border-surface-3\"\n :class=\"\n index === selectedDayIndex\n ? 'bg-surface-2'\n : 'hover:bg-surface-1'\n \"\n @click=\"selectedDayIndex = index\">\n <span class=\"w-48 shrink-0 text-word-3 capitalize\">\n {{ formatDay(day.date, index, data.daily.length) }}\n </span>\n <VvIcon\n :name=\"wmoToIcon(day.weatherCode)\"\n class=\"text-18 text-word-2 shrink-0\" />\n <span\n v-if=\"day.precipitationProbabilityMax > 0\"\n class=\"text-word-5 text-11 w-32 shrink-0\">\n {{ day.precipitationProbabilityMax }}%\n </span>\n <span v-else class=\"w-32 shrink-0\" />\n <div class=\"ml-auto flex items-center gap-8 text-word-3\">\n <span class=\"text-word-1 font-semibold\">\n {{ $n(day.maxTemp, 'integer') }}°\n </span>\n <span>{{ $n(day.minTemp, 'integer') }}°</span>\n </div>\n </button>\n </VvAccordion>\n </transition>\n\n <!-- Air quality -->\n <div\n v-if=\"data.airQuality\"\n class=\"border-t border-surface-3 px-sm py-8 flex items-center gap-8 text-12\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14 text-word-3\" />\n <span class=\"text-word-3\">{{ $t('weather.airQuality') }}</span>\n <span\n :class=\"[\n 'ml-auto px-8 py-2 text-11 font-semibold',\n aqiInfo(data.airQuality.aqi).class,\n ]\">\n {{ aqiInfo(data.airQuality.aqi).label }}\n ({{ data.airQuality.aqi }})\n </span>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PkToolShowWeather-DcSUbzx0.js","names":[],"sources":["../../../../packages/components/src/chat/PkToolShowWeather.vue","../../../../packages/components/src/chat/PkToolShowWeather.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n interface WeatherCurrent {\n temperature: number\n feelsLike: number\n humidity: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n windDirection: number\n uvIndex: number\n }\n\n interface WeatherHourly {\n time: string\n temperature: number\n precipitationProbability: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n }\n\n interface WeatherDaily {\n date: string\n maxTemp: number\n minTemp: number\n weatherCode: number\n precipitationSum: number\n precipitationProbabilityMax: number\n uvIndexMax: number\n sunrise: string\n sunset: string\n }\n\n interface AirQuality {\n aqi: number\n pm10: number\n pm25: number\n no2: number\n ozone: number\n }\n\n interface WeatherData {\n locationName: string\n latitude: number\n longitude: number\n timezone: string\n current: WeatherCurrent | null\n hourly: WeatherHourly[]\n daily: WeatherDaily[]\n airQuality: AirQuality | null\n }\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { t: $t, d: $d, n: $n } = useI18n({ useScope: 'global' })\n\n const toolPart = computed(() => {\n return props.part as { input?: WeatherData }\n })\n\n const data = computed(() => toolPart.value.input)\n\n const selectedDayIndex = ref(0)\n\n const dailyOpen = ref(!data.value?.current)\n\n watch(selectedDayIndex, (index) => {\n if (index > 0) {\n dailyOpen.value = true\n }\n })\n\n const selectedDay = computed(\n () => data.value?.daily?.[selectedDayIndex.value],\n )\n\n /** Hourly entries filtered to the selected day's date */\n const filteredHourly = computed(() => {\n if (!data.value?.hourly?.length || !selectedDay.value) {\n return data.value?.hourly ?? []\n }\n const dayDate = selectedDay.value.date\n return data.value.hourly.filter((h) => h.time.startsWith(dayDate))\n })\n\n /**\n * Parses a date/time string in various formats the LLM might produce.\n * Tries ISO, space-separated, time-only, and common human-readable formats.\n */\n function safeDate(value: string): Date {\n // 1. Try native parsing (works for ISO 8601 and many standard formats)\n const direct = new Date(value)\n if (!Number.isNaN(direct.getTime())) {\n return direct\n }\n\n // 2. Replace space separator → T (\"2024-04-15 14:00\" → \"2024-04-15T14:00\")\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}/.test(value)) {\n const withT = new Date(value.replace(' ', 'T'))\n if (!Number.isNaN(withT.getTime())) {\n return withT\n }\n }\n\n // 3. Time-only (\"14:00\" or \"14:00:00\") → today at that hour\n const timeOnly = value.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/)\n if (timeOnly) {\n const today = new Date()\n today.setHours(\n Number(timeOnly[1]),\n Number(timeOnly[2]),\n Number(timeOnly[3] ?? 0),\n 0,\n )\n return today\n }\n\n // 4. Date-only (\"2024-04-15\") → noon to avoid timezone edge\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n const noon = new Date(value + 'T12:00:00')\n if (!Number.isNaN(noon.getTime())) {\n return noon\n }\n }\n\n // Last resort: return an obviously invalid sentinel so callers can handle it\n return new Date(NaN)\n }\n\n /** Maps WMO weather code to an Iconify wi: icon name */\n function wmoToIcon(code: number): string {\n if (code === 0) {\n return 'wi:day-sunny'\n }\n if (code === 1) {\n return 'wi:day-sunny-overcast'\n }\n if (code === 2) {\n return 'wi:day-cloudy'\n }\n if (code === 3) {\n return 'wi:cloudy'\n }\n if (code === 45 || code === 48) {\n return 'wi:fog'\n }\n if (code >= 51 && code <= 55) {\n return 'wi:sprinkle'\n }\n if (code === 56 || code === 57) {\n return 'wi:sleet'\n }\n if (code >= 61 && code <= 65) {\n return 'wi:rain'\n }\n if (code === 66 || code === 67) {\n return 'wi:rain-mix'\n }\n if (code >= 71 && code <= 77) {\n return 'wi:snow'\n }\n if (code >= 80 && code <= 82) {\n return 'wi:showers'\n }\n if (code === 85 || code === 86) {\n return 'wi:snow-wind'\n }\n if (code === 95) {\n return 'wi:thunderstorm'\n }\n if (code === 96 || code === 99) {\n return 'wi:storm-showers'\n }\n return 'wi:na'\n }\n\n /**\n * Returns a formatted day label for daily forecast.\n * When daily has 1-2 entries, use the date string directly.\n * Otherwise, use index-based computation from today.\n */\n function formatDay(isoDate: string, index: number, total: number): string {\n const parsed = safeDate(isoDate + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n const today = new Date()\n today.setHours(12, 0, 0, 0)\n const diffDays = Math.round(\n (parsed.getTime() - today.getTime()) / 86_400_000,\n )\n if (diffDays === 0) {\n return $t('weather.today')\n }\n return $d(parsed, 'weekday-day')\n }\n if (index === 0 && total <= 7) {\n return $t('weather.today')\n }\n const fallback = new Date()\n fallback.setDate(fallback.getDate() + index)\n return $d(fallback, 'weekday-day')\n }\n\n const headerDate = computed(() => {\n if (selectedDay.value) {\n const parsed = safeDate(selectedDay.value.date + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n return formatDay(\n selectedDay.value.date,\n selectedDayIndex.value,\n data.value.daily.length,\n )\n }\n }\n return formatDay(safeDate(new Date().toISOString().slice(0, 10)), 0, 1)\n })\n\n /** Returns AQI label and CSS class for European AQI */\n function aqiInfo(aqi: number): { label: string; class: string } {\n if (aqi <= 20) {\n return {\n label: $t('weather.aqiGood'),\n class: 'text-green-600 bg-green-50',\n }\n }\n if (aqi <= 40) {\n return {\n label: $t('weather.aqiFair'),\n class: 'text-lime-600 bg-lime-50',\n }\n }\n if (aqi <= 60) {\n return {\n label: $t('weather.aqiModerate'),\n class: 'text-yellow-600 bg-yellow-50',\n }\n }\n if (aqi <= 80) {\n return {\n label: $t('weather.aqiPoor'),\n class: 'text-orange-600 bg-orange-50',\n }\n }\n if (aqi <= 100) {\n return {\n label: $t('weather.aqiVeryPoor'),\n class: 'text-red-600 bg-red-50',\n }\n }\n return {\n label: $t('weather.aqiHazardous'),\n class: 'text-purple-700 bg-purple-50',\n }\n }\n\n /** Formats wind direction degrees to compass label */\n function windDirectionLabel(deg: number): string {\n const dirs = ['N', 'NE', 'E', 'SE', 'S', 'SO', 'O', 'NO']\n return dirs[Math.round(deg / 45) % 8]\n }\n</script>\n\n<template>\n <div\n v-if=\"data\"\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden\">\n <!-- Header -->\n <div\n class=\"px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40\">\n <VvIcon name=\"ri:temp-cold-line\" class=\"text-16\" />\n <strong class=\"font-bold truncate\">\n {{ data.locationName }}\n </strong>\n <span class=\"ml-auto shrink-0 capitalize\">\n {{ headerDate }}\n </span>\n </div>\n\n <!-- Current conditions (only when real-time current is available AND first day is selected) -->\n <div\n v-if=\"data.current && selectedDayIndex === 0\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(data.current.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <span class=\"text-48 font-light leading-none text-word-1\">\n {{ $n(data.current.temperature, 'integer') }}°\n </span>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div class=\"flex items-center gap-6\">\n {{ $t('weather.feelsLike') }}\n {{ $n(data.current.feelsLike, 'integer') }}°\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:water-percent-line\" class=\"text-14\" />\n {{ data.current.humidity }}%\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14\" />\n {{ $n(data.current.windSpeed, 'integer') }} km/h\n {{ windDirectionLabel(data.current.windDirection) }}\n </div>\n <div\n v-if=\"data.current.uvIndex > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(data.current.uvIndex, 'integer') }}\n </div>\n </div>\n </div>\n\n <!-- Day summary (when no real-time current, or a non-today day is selected) -->\n <div\n v-else-if=\"selectedDay\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(selectedDay.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <div class=\"flex flex-col leading-none\">\n <span class=\"text-48 font-light text-word-1\">\n {{ $n(selectedDay.maxTemp, 'integer') }}°\n </span>\n <span class=\"text-20 text-word-3\">\n {{ $n(selectedDay.minTemp, 'integer') }}°\n </span>\n </div>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div\n v-if=\"selectedDay.precipitationProbabilityMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:drop-line\" class=\"text-14\" />\n {{ selectedDay.precipitationProbabilityMax }}% ({{\n selectedDay.precipitationSum\n }}\n mm)\n </div>\n <div\n v-if=\"selectedDay.uvIndexMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(selectedDay.uvIndexMax, 'integer') }}\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-foggy-line\" class=\"text-14\" />\n {{ $d(safeDate(selectedDay.sunrise), 'time') }}\n –\n {{ $d(safeDate(selectedDay.sunset), 'time') }}\n </div>\n </div>\n </div>\n\n <!-- Hourly forecast (filtered to selected day) -->\n <transition>\n <div\n v-if=\"filteredHourly.length > 0\"\n class=\"border-t border-surface-3\">\n <div\n class=\"flex overflow-x-auto gap-2 px-sm py-8 light-scrollbar\">\n <div\n v-for=\"hour in filteredHourly\"\n :key=\"hour.time\"\n class=\"flex flex-col items-center gap-4 min-w-48 px-4 py-6 rounded-lg text-11 text-word-3 shrink-0\">\n <span class=\"text-word-3\">{{\n Number.isNaN(safeDate(hour.time).getTime())\n ? hour.time\n : $d(safeDate(hour.time), 'time')\n }}</span>\n <VvIcon\n :name=\"wmoToIcon(hour.weatherCode)\"\n class=\"text-20 text-word-2\" />\n <span class=\"font-medium text-word-1\">\n {{ $n(hour.temperature, 'integer') }}°\n </span>\n <span\n v-if=\"hour.precipitationProbability > 0\"\n class=\"text-word-5 text-smaller\">\n {{ hour.precipitationProbability }}%\n </span>\n </div>\n </div>\n </div>\n </transition>\n\n <!-- Daily forecast (clickable, inside accordion) -->\n <transition>\n <VvAccordion\n v-if=\"data.daily.length > 1\"\n v-model=\"dailyOpen\"\n modifiers=\"details no-padding\"\n :title=\"$t('weather.dailyForecast')\"\n class=\"border-t border-surface-3\">\n <button\n v-for=\"(day, index) in data.daily\"\n :key=\"day.date\"\n type=\"button\"\n class=\"flex items-center gap-sm px-sm py-8 text-12 w-full text-left transition-colors cursor-pointer border-t border-surface-3\"\n :class=\"\n index === selectedDayIndex\n ? 'bg-surface-2'\n : 'hover:bg-surface-1'\n \"\n @click=\"selectedDayIndex = index\">\n <span class=\"w-48 shrink-0 text-word-3 capitalize\">\n {{ formatDay(day.date, index, data.daily.length) }}\n </span>\n <VvIcon\n :name=\"wmoToIcon(day.weatherCode)\"\n class=\"text-18 text-word-2 shrink-0\" />\n <span\n v-if=\"day.precipitationProbabilityMax > 0\"\n class=\"text-word-5 text-11 w-32 shrink-0\">\n {{ day.precipitationProbabilityMax }}%\n </span>\n <span v-else class=\"w-32 shrink-0\" />\n <div class=\"ml-auto flex items-center gap-8 text-word-3\">\n <span class=\"text-word-1 font-semibold\">\n {{ $n(day.maxTemp, 'integer') }}°\n </span>\n <span>{{ $n(day.minTemp, 'integer') }}°</span>\n </div>\n </button>\n </VvAccordion>\n </transition>\n\n <!-- Air quality -->\n <div\n v-if=\"data.airQuality\"\n class=\"border-t border-surface-3 px-sm py-8 flex items-center gap-8 text-12\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14 text-word-3\" />\n <span class=\"text-word-3\">{{ $t('weather.airQuality') }}</span>\n <span\n :class=\"[\n 'ml-auto px-8 py-2 text-11 font-semibold',\n aqiInfo(data.airQuality.aqi).class,\n ]\">\n {{ aqiInfo(data.airQuality.aqi).label }}\n ({{ data.airQuality.aqi }})\n </span>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n interface WeatherCurrent {\n temperature: number\n feelsLike: number\n humidity: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n windDirection: number\n uvIndex: number\n }\n\n interface WeatherHourly {\n time: string\n temperature: number\n precipitationProbability: number\n precipitation: number\n weatherCode: number\n windSpeed: number\n }\n\n interface WeatherDaily {\n date: string\n maxTemp: number\n minTemp: number\n weatherCode: number\n precipitationSum: number\n precipitationProbabilityMax: number\n uvIndexMax: number\n sunrise: string\n sunset: string\n }\n\n interface AirQuality {\n aqi: number\n pm10: number\n pm25: number\n no2: number\n ozone: number\n }\n\n interface WeatherData {\n locationName: string\n latitude: number\n longitude: number\n timezone: string\n current: WeatherCurrent | null\n hourly: WeatherHourly[]\n daily: WeatherDaily[]\n airQuality: AirQuality | null\n }\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { t: $t, d: $d, n: $n } = useI18n({ useScope: 'global' })\n\n const toolPart = computed(() => {\n return props.part as { input?: WeatherData }\n })\n\n const data = computed(() => toolPart.value.input)\n\n const selectedDayIndex = ref(0)\n\n const dailyOpen = ref(!data.value?.current)\n\n watch(selectedDayIndex, (index) => {\n if (index > 0) {\n dailyOpen.value = true\n }\n })\n\n const selectedDay = computed(\n () => data.value?.daily?.[selectedDayIndex.value],\n )\n\n /** Hourly entries filtered to the selected day's date */\n const filteredHourly = computed(() => {\n if (!data.value?.hourly?.length || !selectedDay.value) {\n return data.value?.hourly ?? []\n }\n const dayDate = selectedDay.value.date\n return data.value.hourly.filter((h) => h.time.startsWith(dayDate))\n })\n\n /**\n * Parses a date/time string in various formats the LLM might produce.\n * Tries ISO, space-separated, time-only, and common human-readable formats.\n */\n function safeDate(value: string): Date {\n // 1. Try native parsing (works for ISO 8601 and many standard formats)\n const direct = new Date(value)\n if (!Number.isNaN(direct.getTime())) {\n return direct\n }\n\n // 2. Replace space separator → T (\"2024-04-15 14:00\" → \"2024-04-15T14:00\")\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}/.test(value)) {\n const withT = new Date(value.replace(' ', 'T'))\n if (!Number.isNaN(withT.getTime())) {\n return withT\n }\n }\n\n // 3. Time-only (\"14:00\" or \"14:00:00\") → today at that hour\n const timeOnly = value.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/)\n if (timeOnly) {\n const today = new Date()\n today.setHours(\n Number(timeOnly[1]),\n Number(timeOnly[2]),\n Number(timeOnly[3] ?? 0),\n 0,\n )\n return today\n }\n\n // 4. Date-only (\"2024-04-15\") → noon to avoid timezone edge\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n const noon = new Date(value + 'T12:00:00')\n if (!Number.isNaN(noon.getTime())) {\n return noon\n }\n }\n\n // Last resort: return an obviously invalid sentinel so callers can handle it\n return new Date(NaN)\n }\n\n /** Maps WMO weather code to an Iconify wi: icon name */\n function wmoToIcon(code: number): string {\n if (code === 0) {\n return 'wi:day-sunny'\n }\n if (code === 1) {\n return 'wi:day-sunny-overcast'\n }\n if (code === 2) {\n return 'wi:day-cloudy'\n }\n if (code === 3) {\n return 'wi:cloudy'\n }\n if (code === 45 || code === 48) {\n return 'wi:fog'\n }\n if (code >= 51 && code <= 55) {\n return 'wi:sprinkle'\n }\n if (code === 56 || code === 57) {\n return 'wi:sleet'\n }\n if (code >= 61 && code <= 65) {\n return 'wi:rain'\n }\n if (code === 66 || code === 67) {\n return 'wi:rain-mix'\n }\n if (code >= 71 && code <= 77) {\n return 'wi:snow'\n }\n if (code >= 80 && code <= 82) {\n return 'wi:showers'\n }\n if (code === 85 || code === 86) {\n return 'wi:snow-wind'\n }\n if (code === 95) {\n return 'wi:thunderstorm'\n }\n if (code === 96 || code === 99) {\n return 'wi:storm-showers'\n }\n return 'wi:na'\n }\n\n /**\n * Returns a formatted day label for daily forecast.\n * When daily has 1-2 entries, use the date string directly.\n * Otherwise, use index-based computation from today.\n */\n function formatDay(isoDate: string, index: number, total: number): string {\n const parsed = safeDate(isoDate + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n const today = new Date()\n today.setHours(12, 0, 0, 0)\n const diffDays = Math.round(\n (parsed.getTime() - today.getTime()) / 86_400_000,\n )\n if (diffDays === 0) {\n return $t('weather.today')\n }\n return $d(parsed, 'weekday-day')\n }\n if (index === 0 && total <= 7) {\n return $t('weather.today')\n }\n const fallback = new Date()\n fallback.setDate(fallback.getDate() + index)\n return $d(fallback, 'weekday-day')\n }\n\n const headerDate = computed(() => {\n if (selectedDay.value) {\n const parsed = safeDate(selectedDay.value.date + 'T12:00:00')\n if (!Number.isNaN(parsed.getTime())) {\n return formatDay(\n selectedDay.value.date,\n selectedDayIndex.value,\n data.value.daily.length,\n )\n }\n }\n return formatDay(safeDate(new Date().toISOString().slice(0, 10)), 0, 1)\n })\n\n /** Returns AQI label and CSS class for European AQI */\n function aqiInfo(aqi: number): { label: string; class: string } {\n if (aqi <= 20) {\n return {\n label: $t('weather.aqiGood'),\n class: 'text-green-600 bg-green-50',\n }\n }\n if (aqi <= 40) {\n return {\n label: $t('weather.aqiFair'),\n class: 'text-lime-600 bg-lime-50',\n }\n }\n if (aqi <= 60) {\n return {\n label: $t('weather.aqiModerate'),\n class: 'text-yellow-600 bg-yellow-50',\n }\n }\n if (aqi <= 80) {\n return {\n label: $t('weather.aqiPoor'),\n class: 'text-orange-600 bg-orange-50',\n }\n }\n if (aqi <= 100) {\n return {\n label: $t('weather.aqiVeryPoor'),\n class: 'text-red-600 bg-red-50',\n }\n }\n return {\n label: $t('weather.aqiHazardous'),\n class: 'text-purple-700 bg-purple-50',\n }\n }\n\n /** Formats wind direction degrees to compass label */\n function windDirectionLabel(deg: number): string {\n const dirs = ['N', 'NE', 'E', 'SE', 'S', 'SO', 'O', 'NO']\n return dirs[Math.round(deg / 45) % 8]\n }\n</script>\n\n<template>\n <div\n v-if=\"data\"\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden\">\n <!-- Header -->\n <div\n class=\"px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40\">\n <VvIcon name=\"ri:temp-cold-line\" class=\"text-16\" />\n <strong class=\"font-bold truncate\">\n {{ data.locationName }}\n </strong>\n <span class=\"ml-auto shrink-0 capitalize\">\n {{ headerDate }}\n </span>\n </div>\n\n <!-- Current conditions (only when real-time current is available AND first day is selected) -->\n <div\n v-if=\"data.current && selectedDayIndex === 0\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(data.current.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <span class=\"text-48 font-light leading-none text-word-1\">\n {{ $n(data.current.temperature, 'integer') }}°\n </span>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div class=\"flex items-center gap-6\">\n {{ $t('weather.feelsLike') }}\n {{ $n(data.current.feelsLike, 'integer') }}°\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:water-percent-line\" class=\"text-14\" />\n {{ data.current.humidity }}%\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14\" />\n {{ $n(data.current.windSpeed, 'integer') }} km/h\n {{ windDirectionLabel(data.current.windDirection) }}\n </div>\n <div\n v-if=\"data.current.uvIndex > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(data.current.uvIndex, 'integer') }}\n </div>\n </div>\n </div>\n\n <!-- Day summary (when no real-time current, or a non-today day is selected) -->\n <div\n v-else-if=\"selectedDay\"\n class=\"px-sm py-md flex items-center gap-md flex-wrap\">\n <div class=\"flex items-center gap-8\">\n <VvIcon\n :name=\"wmoToIcon(selectedDay.weatherCode)\"\n class=\"text-48 text-word-2 shrink-0\" />\n <div class=\"flex flex-col leading-none\">\n <span class=\"text-48 font-light text-word-1\">\n {{ $n(selectedDay.maxTemp, 'integer') }}°\n </span>\n <span class=\"text-20 text-word-3\">\n {{ $n(selectedDay.minTemp, 'integer') }}°\n </span>\n </div>\n </div>\n <div class=\"flex flex-col gap-4 text-12 text-word-3\">\n <div\n v-if=\"selectedDay.precipitationProbabilityMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:drop-line\" class=\"text-14\" />\n {{ selectedDay.precipitationProbabilityMax }}% ({{\n selectedDay.precipitationSum\n }}\n mm)\n </div>\n <div\n v-if=\"selectedDay.uvIndexMax > 0\"\n class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-line\" class=\"text-14\" />\n UV {{ $n(selectedDay.uvIndexMax, 'integer') }}\n </div>\n <div class=\"flex items-center gap-6\">\n <VvIcon name=\"ri:sun-foggy-line\" class=\"text-14\" />\n {{ $d(safeDate(selectedDay.sunrise), 'time') }}\n –\n {{ $d(safeDate(selectedDay.sunset), 'time') }}\n </div>\n </div>\n </div>\n\n <!-- Hourly forecast (filtered to selected day) -->\n <transition>\n <div\n v-if=\"filteredHourly.length > 0\"\n class=\"border-t border-surface-3\">\n <div\n class=\"flex overflow-x-auto gap-2 px-sm py-8 light-scrollbar\">\n <div\n v-for=\"hour in filteredHourly\"\n :key=\"hour.time\"\n class=\"flex flex-col items-center gap-4 min-w-48 px-4 py-6 rounded-lg text-11 text-word-3 shrink-0\">\n <span class=\"text-word-3\">{{\n Number.isNaN(safeDate(hour.time).getTime())\n ? hour.time\n : $d(safeDate(hour.time), 'time')\n }}</span>\n <VvIcon\n :name=\"wmoToIcon(hour.weatherCode)\"\n class=\"text-20 text-word-2\" />\n <span class=\"font-medium text-word-1\">\n {{ $n(hour.temperature, 'integer') }}°\n </span>\n <span\n v-if=\"hour.precipitationProbability > 0\"\n class=\"text-word-5 text-smaller\">\n {{ hour.precipitationProbability }}%\n </span>\n </div>\n </div>\n </div>\n </transition>\n\n <!-- Daily forecast (clickable, inside accordion) -->\n <transition>\n <VvAccordion\n v-if=\"data.daily.length > 1\"\n v-model=\"dailyOpen\"\n modifiers=\"details no-padding\"\n :title=\"$t('weather.dailyForecast')\"\n class=\"border-t border-surface-3\">\n <button\n v-for=\"(day, index) in data.daily\"\n :key=\"day.date\"\n type=\"button\"\n class=\"flex items-center gap-sm px-sm py-8 text-12 w-full text-left transition-colors cursor-pointer border-t border-surface-3\"\n :class=\"\n index === selectedDayIndex\n ? 'bg-surface-2'\n : 'hover:bg-surface-1'\n \"\n @click=\"selectedDayIndex = index\">\n <span class=\"w-48 shrink-0 text-word-3 capitalize\">\n {{ formatDay(day.date, index, data.daily.length) }}\n </span>\n <VvIcon\n :name=\"wmoToIcon(day.weatherCode)\"\n class=\"text-18 text-word-2 shrink-0\" />\n <span\n v-if=\"day.precipitationProbabilityMax > 0\"\n class=\"text-word-5 text-11 w-32 shrink-0\">\n {{ day.precipitationProbabilityMax }}%\n </span>\n <span v-else class=\"w-32 shrink-0\" />\n <div class=\"ml-auto flex items-center gap-8 text-word-3\">\n <span class=\"text-word-1 font-semibold\">\n {{ $n(day.maxTemp, 'integer') }}°\n </span>\n <span>{{ $n(day.minTemp, 'integer') }}°</span>\n </div>\n </button>\n </VvAccordion>\n </transition>\n\n <!-- Air quality -->\n <div\n v-if=\"data.airQuality\"\n class=\"border-t border-surface-3 px-sm py-8 flex items-center gap-8 text-12\">\n <VvIcon name=\"ri:windy-line\" class=\"text-14 text-word-3\" />\n <span class=\"text-word-3\">{{ $t('weather.airQuality') }}</span>\n <span\n :class=\"[\n 'ml-auto px-8 py-2 text-11 font-semibold',\n aqiInfo(data.airQuality.aqi).class,\n ]\">\n {{ aqiInfo(data.airQuality.aqi).label }}\n ({{ data.airQuality.aqi }})\n </span>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { C as e, E as t, Gt as n, V as r, _ as i, b as a, ft as o, h as s, v as c, w as l, x as u, yt as d, z as f } from "./vue.runtime.esm-bundler-
|
|
2
|
-
import { o as p } from "./index.es-
|
|
3
|
-
import { n as m } from "./src-
|
|
4
|
-
import { t as h } from "./PkUrl-
|
|
1
|
+
import { C as e, E as t, Gt as n, V as r, _ as i, b as a, ft as o, h as s, v as c, w as l, x as u, yt as d, z as f } from "./vue.runtime.esm-bundler-Dq29dQrz.js";
|
|
2
|
+
import { o as p } from "./index.es-7fUi-rc0.js";
|
|
3
|
+
import { n as m } from "./src-BfoQF6Z3.js";
|
|
4
|
+
import { t as h } from "./PkUrl-BHD0_pal.js";
|
|
5
5
|
//#region ../../packages/components/src/chat/PkToolShowWebPages.vue?vue&type=script&setup=true&lang.ts
|
|
6
6
|
var g = {
|
|
7
7
|
key: 0,
|
|
@@ -58,4 +58,4 @@ var g = {
|
|
|
58
58
|
//#endregion
|
|
59
59
|
export { w as default };
|
|
60
60
|
|
|
61
|
-
//# sourceMappingURL=PkToolShowWebPages-
|
|
61
|
+
//# sourceMappingURL=PkToolShowWebPages-aH_GarEV.js.map
|
package/dist/_chunks/{PkToolShowWebPages-f-dHyxfD.js.map → PkToolShowWebPages-aH_GarEV.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkToolShowWebPages-
|
|
1
|
+
{"version":3,"file":"PkToolShowWebPages-aH_GarEV.js","names":["$t"],"sources":["../../../../packages/components/src/chat/PkToolShowWebPages.vue","../../../../packages/components/src/chat/PkToolShowWebPages.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref } from 'vue'\n import { isSameSite } from 'utils'\n import PkUrl from '../PkUrl.vue'\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const toolPart = computed(() => {\n const part = props.part as {\n input?: {\n pages: Array<{\n title: string\n url: string\n image?: string\n description?: string\n }>\n }\n }\n return part\n })\n\n const showMore = ref(false)\n const pages = computed(() => {\n if (showMore.value) {\n return toolPart.value.input?.pages || []\n }\n return (toolPart.value.input?.pages || []).slice(0, 2)\n })\n const hasMore = computed(\n () => (toolPart.value.input?.pages || []).length > 2,\n )\n</script>\n\n<template>\n <ul v-if=\"pages?.length\" class=\"flex flex-col gap-xs w-full\">\n <li\n v-for=\"(page, index) in pages\"\n :key=\"index\"\n class=\"border border-surface-3 rounded-lg overflow-hidden hover:border-surface-4 transition-colors shrink-0\">\n <a\n :href=\"page.url\"\n :title=\"$t('action.open')\"\n :target=\"isSameSite(page.url) ? undefined : '_blank'\"\n :rel=\"isSameSite(page.url) ? undefined : 'noopener noreferrer'\"\n class=\"flex gap-8 p-8 hover:bg-surface-1 transition-colors\">\n <img\n v-if=\"page.image\"\n :src=\"page.image\"\n :alt=\"page.title\"\n class=\"w-48 h-48 object-contain rounded shrink-0 border border-surface-3 bg-surface\" />\n <div class=\"flex flex-col gap-4 min-w-0 flex-1\">\n <strong class=\"font-bold text-12 text-word-1 truncate\">\n {{ page.title }}\n </strong>\n <span\n class=\"text-10 text-word-4 truncate flex items-center gap-4\">\n <VvIcon name=\"ri:link\" class=\"shrink-0 text-12\" />\n <PkUrl :url=\"page.url\" />\n </span>\n <p\n v-if=\"page.description\"\n class=\"text-12 text-word-3 line-clamp-2\">\n {{ page.description }}\n </p>\n </div>\n </a>\n </li>\n <li v-if=\"hasMore\" class=\"text-center\">\n <button\n class=\"text-12 text-word-3 cursor-pointer hover:underline flex items-center gap-4 mx-auto\"\n @click=\"showMore = !showMore\">\n <VvIcon\n :name=\"\n showMore ? 'ri:arrow-up-s-line' : 'ri:arrow-down-s-line'\n \"\n class=\"text-16\" />\n {{\n showMore\n ? $t('action.showLess')\n : $t('action.showMore', {\n count: (toolPart?.input?.pages?.length || 0) - 2,\n })\n }}\n </button>\n </li>\n </ul>\n</template>\n","<script setup lang=\"ts\">\n import { computed, ref } from 'vue'\n import { isSameSite } from 'utils'\n import PkUrl from '../PkUrl.vue'\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const toolPart = computed(() => {\n const part = props.part as {\n input?: {\n pages: Array<{\n title: string\n url: string\n image?: string\n description?: string\n }>\n }\n }\n return part\n })\n\n const showMore = ref(false)\n const pages = computed(() => {\n if (showMore.value) {\n return toolPart.value.input?.pages || []\n }\n return (toolPart.value.input?.pages || []).slice(0, 2)\n })\n const hasMore = computed(\n () => (toolPart.value.input?.pages || []).length > 2,\n )\n</script>\n\n<template>\n <ul v-if=\"pages?.length\" class=\"flex flex-col gap-xs w-full\">\n <li\n v-for=\"(page, index) in pages\"\n :key=\"index\"\n class=\"border border-surface-3 rounded-lg overflow-hidden hover:border-surface-4 transition-colors shrink-0\">\n <a\n :href=\"page.url\"\n :title=\"$t('action.open')\"\n :target=\"isSameSite(page.url) ? undefined : '_blank'\"\n :rel=\"isSameSite(page.url) ? undefined : 'noopener noreferrer'\"\n class=\"flex gap-8 p-8 hover:bg-surface-1 transition-colors\">\n <img\n v-if=\"page.image\"\n :src=\"page.image\"\n :alt=\"page.title\"\n class=\"w-48 h-48 object-contain rounded shrink-0 border border-surface-3 bg-surface\" />\n <div class=\"flex flex-col gap-4 min-w-0 flex-1\">\n <strong class=\"font-bold text-12 text-word-1 truncate\">\n {{ page.title }}\n </strong>\n <span\n class=\"text-10 text-word-4 truncate flex items-center gap-4\">\n <VvIcon name=\"ri:link\" class=\"shrink-0 text-12\" />\n <PkUrl :url=\"page.url\" />\n </span>\n <p\n v-if=\"page.description\"\n class=\"text-12 text-word-3 line-clamp-2\">\n {{ page.description }}\n </p>\n </div>\n </a>\n </li>\n <li v-if=\"hasMore\" class=\"text-center\">\n <button\n class=\"text-12 text-word-3 cursor-pointer hover:underline flex items-center gap-4 mx-auto\"\n @click=\"showMore = !showMore\">\n <VvIcon\n :name=\"\n showMore ? 'ri:arrow-up-s-line' : 'ri:arrow-down-s-line'\n \"\n class=\"text-16\" />\n {{\n showMore\n ? $t('action.showLess')\n : $t('action.showMore', {\n count: (toolPart?.input?.pages?.length || 0) - 2,\n })\n }}\n </button>\n </li>\n </ul>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAKI,IAAM,IAAQ,GAIR,IAAW,QACA,EAAM,KAWtB,EAEK,IAAW,EAAI,GAAK,EACpB,IAAQ,QACN,EAAS,QACF,EAAS,MAAM,OAAO,SAAS,EAAC,IAEnC,EAAS,MAAM,OAAO,SAAS,EAAE,EAAE,MAAM,GAAG,EAAC,CACxD,EACK,IAAU,SACL,EAAS,MAAM,OAAO,SAAS,EAAE,EAAE,SAAS,EACvD;;;UAIU,EAAA,OAAO,UAAA,GAAA,EAAjB,EAmDK,MAnDL,GAmDK,EAAA,EAAA,GAAA,EAlDD,EA+BK,GAAA,MAAA,EA9BuB,EAAA,QAAhB,GAAM,YADlB,EA+BK,MAAA;IA7BA,KAAK;IACN,OAAM;OACN,EA0BI,KAAA;IAzBC,MAAM,EAAK;IACX,OAAOA,EAAAA,GAAE,cAAA;IACT,QAAQ,EAAA,EAAU,CAAC,EAAK,IAAG,GAAI,KAAA,IAAS;IACxC,KAAK,EAAA,EAAU,CAAC,EAAK,IAAG,GAAI,KAAA,IAAS;IACtC,OAAM;OAEI,EAAK,SAAA,GAAA,EADf,EAI2F,OAAA;;IAFtF,KAAK,EAAK;IACV,KAAK,EAAK;IACX,OAAM;gCACV,EAcM,OAdN,GAcM;IAbF,EAES,UAFT,GAES,EADF,EAAK,MAAK,EAAA,EAAA;IAEjB,EAIO,QAJP,GAIO,CAFH,EAAkD,GAAA;KAA1C,MAAK;KAAU,OAAM;QAC7B,EAAyB,GAAA,EAAjB,KAAK,EAAK,KAAA,EAAA,MAAA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAGZ,EAAK,eAAA,GAAA,EADf,EAII,KAJJ,GAII,EADG,EAAK,YAAW,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA;0BAKzB,EAAA,SAAA,GAAA,EAAV,EAiBK,MAjBL,GAiBK,CAhBD,EAeS,UAAA;IAdL,OAAM;IACL,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAQ,CAAI,EAAA;OACpB,EAIsB,GAAA;IAHjB,MAA+B,EAAA,QAAQ,uBAAA;IAGxC,OAAM;4BAAY,MACtB,EACI,EAAA,QAAmCA,EAAAA,GAAE,kBAAA,GAA8CA,EAAAA,GAAE,mBAAA,EAAA,QAA4D,EAAA,OAAU,OAAO,OAAO,UAAM,KAAA,GAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,IAAA,GAAA,CAAA,CAAA,IAAA,EAAA,IAAA,GAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as e, Bt as t, E as n, Gt as r, V as i, W as a, _ as o, h as s, v as c, x as l, y as u, z as d } from "./vue.runtime.esm-bundler-
|
|
1
|
+
import { $ as e, Bt as t, E as n, Gt as r, V as i, W as a, _ as o, h as s, v as c, x as l, y as u, z as d } from "./vue.runtime.esm-bundler-Dq29dQrz.js";
|
|
2
2
|
import { t as f } from "./_plugin-vue_export-helper-BI3pHb34.js";
|
|
3
3
|
//#region ../../packages/components/src/PkUrl.vue?vue&type=script&setup=true&lang.ts
|
|
4
4
|
var p = { class: "pk-url__segment" }, m = /* @__PURE__ */ f(/* @__PURE__ */ n({
|
|
@@ -88,4 +88,4 @@ var p = { class: "pk-url__segment" }, m = /* @__PURE__ */ f(/* @__PURE__ */ n({
|
|
|
88
88
|
//#endregion
|
|
89
89
|
export { m as t };
|
|
90
90
|
|
|
91
|
-
//# sourceMappingURL=PkUrl-
|
|
91
|
+
//# sourceMappingURL=PkUrl-BHD0_pal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkUrl-CI17WkYu.js","names":[],"sources":["../../../../packages/components/src/PkUrl.vue","../../../../packages/components/src/PkUrl.vue","../../../../packages/components/src/PkUrl.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed } from 'vue'\n\n interface Props {\n url: string\n maxLength?: number\n domainClass?: string\n target?: '_blank' | '_self' | '_parent' | '_top'\n rel?: string\n muted?: boolean\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxLength: 60,\n domainClass: undefined,\n target: '_blank',\n rel: 'noopener noreferrer',\n muted: false,\n })\n\n const parsedUrl = computed(() => {\n try {\n const urlObj = new URL(props.url)\n let hostname = urlObj.hostname\n\n // Remove www. prefix\n if (hostname.startsWith('www.')) hostname = hostname.substring(4)\n\n // Get pathname and remove trailing slash\n let pathname = urlObj.pathname\n if (pathname === '/') pathname = ''\n\n // Split pathname into segments\n const segments = pathname\n .split('/')\n .filter((segment) => segment.length > 0)\n\n return {\n domain: hostname,\n segments,\n fullPath: hostname + pathname,\n }\n } catch {\n // If URL parsing fails, return the original URL\n return {\n domain: props.url,\n segments: [],\n fullPath: props.url,\n }\n }\n })\n\n const truncatedUrl = computed(() => {\n if (parsedUrl.value.fullPath.length <= props.maxLength)\n return parsedUrl.value\n\n // If too long, truncate segments from the beginning\n const domain = parsedUrl.value.domain\n const allSegments = parsedUrl.value.segments\n\n // Always show at least the last segment\n if (allSegments.length === 0) {\n return {\n domain,\n segments: [],\n fullPath: domain,\n }\n }\n\n const segments: string[] = []\n\n // Calculate from the end\n let currentLength = domain.length\n\n // Try to fit segments from the end\n for (let i = allSegments.length - 1; i >= 0; i--) {\n const segment = allSegments[i]\n\n // Always include at least the last segment\n if (segments.length === 0) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else if (currentLength + segment.length + 1 <= props.maxLength) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else {\n segments.unshift('...')\n break\n }\n }\n\n return {\n domain,\n segments,\n fullPath: domain + '/' + segments.join('/'),\n }\n })\n</script>\n\n<template>\n <Component\n :is=\"muted ? 'span' : 'a'\"\n class=\"pk-url\"\n :href=\"muted ? undefined : props.url\"\n :target=\"muted ? undefined : props.target\"\n :rel=\"muted ? undefined : props.rel\">\n <span :class=\"['pk-url__domain', domainClass]\">{{\n truncatedUrl.domain\n }}</span>\n <template\n v-for=\"(segment, index) in truncatedUrl.segments\"\n :key=\"index\">\n <span class=\"pk-url__separator\">›</span>\n <span class=\"pk-url__segment\">{{ segment }}</span>\n </template>\n </Component>\n</template>\n\n<style lang=\"scss\">\n .pk-url {\n display: inline-flex;\n align-items: center;\n gap: 0.5ch;\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n\n interface Props {\n url: string\n maxLength?: number\n domainClass?: string\n target?: '_blank' | '_self' | '_parent' | '_top'\n rel?: string\n muted?: boolean\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxLength: 60,\n domainClass: undefined,\n target: '_blank',\n rel: 'noopener noreferrer',\n muted: false,\n })\n\n const parsedUrl = computed(() => {\n try {\n const urlObj = new URL(props.url)\n let hostname = urlObj.hostname\n\n // Remove www. prefix\n if (hostname.startsWith('www.')) hostname = hostname.substring(4)\n\n // Get pathname and remove trailing slash\n let pathname = urlObj.pathname\n if (pathname === '/') pathname = ''\n\n // Split pathname into segments\n const segments = pathname\n .split('/')\n .filter((segment) => segment.length > 0)\n\n return {\n domain: hostname,\n segments,\n fullPath: hostname + pathname,\n }\n } catch {\n // If URL parsing fails, return the original URL\n return {\n domain: props.url,\n segments: [],\n fullPath: props.url,\n }\n }\n })\n\n const truncatedUrl = computed(() => {\n if (parsedUrl.value.fullPath.length <= props.maxLength)\n return parsedUrl.value\n\n // If too long, truncate segments from the beginning\n const domain = parsedUrl.value.domain\n const allSegments = parsedUrl.value.segments\n\n // Always show at least the last segment\n if (allSegments.length === 0) {\n return {\n domain,\n segments: [],\n fullPath: domain,\n }\n }\n\n const segments: string[] = []\n\n // Calculate from the end\n let currentLength = domain.length\n\n // Try to fit segments from the end\n for (let i = allSegments.length - 1; i >= 0; i--) {\n const segment = allSegments[i]\n\n // Always include at least the last segment\n if (segments.length === 0) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else if (currentLength + segment.length + 1 <= props.maxLength) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else {\n segments.unshift('...')\n break\n }\n }\n\n return {\n domain,\n segments,\n fullPath: domain + '/' + segments.join('/'),\n }\n })\n</script>\n\n<template>\n <Component\n :is=\"muted ? 'span' : 'a'\"\n class=\"pk-url\"\n :href=\"muted ? undefined : props.url\"\n :target=\"muted ? undefined : props.target\"\n :rel=\"muted ? undefined : props.rel\">\n <span :class=\"['pk-url__domain', domainClass]\">{{\n truncatedUrl.domain\n }}</span>\n <template\n v-for=\"(segment, index) in truncatedUrl.segments\"\n :key=\"index\">\n <span class=\"pk-url__separator\">›</span>\n <span class=\"pk-url__segment\">{{ segment }}</span>\n </template>\n </Component>\n</template>\n\n<style lang=\"scss\">\n .pk-url {\n display: inline-flex;\n align-items: center;\n gap: 0.5ch;\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n\n interface Props {\n url: string\n maxLength?: number\n domainClass?: string\n target?: '_blank' | '_self' | '_parent' | '_top'\n rel?: string\n muted?: boolean\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxLength: 60,\n domainClass: undefined,\n target: '_blank',\n rel: 'noopener noreferrer',\n muted: false,\n })\n\n const parsedUrl = computed(() => {\n try {\n const urlObj = new URL(props.url)\n let hostname = urlObj.hostname\n\n // Remove www. prefix\n if (hostname.startsWith('www.')) hostname = hostname.substring(4)\n\n // Get pathname and remove trailing slash\n let pathname = urlObj.pathname\n if (pathname === '/') pathname = ''\n\n // Split pathname into segments\n const segments = pathname\n .split('/')\n .filter((segment) => segment.length > 0)\n\n return {\n domain: hostname,\n segments,\n fullPath: hostname + pathname,\n }\n } catch {\n // If URL parsing fails, return the original URL\n return {\n domain: props.url,\n segments: [],\n fullPath: props.url,\n }\n }\n })\n\n const truncatedUrl = computed(() => {\n if (parsedUrl.value.fullPath.length <= props.maxLength)\n return parsedUrl.value\n\n // If too long, truncate segments from the beginning\n const domain = parsedUrl.value.domain\n const allSegments = parsedUrl.value.segments\n\n // Always show at least the last segment\n if (allSegments.length === 0) {\n return {\n domain,\n segments: [],\n fullPath: domain,\n }\n }\n\n const segments: string[] = []\n\n // Calculate from the end\n let currentLength = domain.length\n\n // Try to fit segments from the end\n for (let i = allSegments.length - 1; i >= 0; i--) {\n const segment = allSegments[i]\n\n // Always include at least the last segment\n if (segments.length === 0) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else if (currentLength + segment.length + 1 <= props.maxLength) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else {\n segments.unshift('...')\n break\n }\n }\n\n return {\n domain,\n segments,\n fullPath: domain + '/' + segments.join('/'),\n }\n })\n</script>\n\n<template>\n <Component\n :is=\"muted ? 'span' : 'a'\"\n class=\"pk-url\"\n :href=\"muted ? undefined : props.url\"\n :target=\"muted ? undefined : props.target\"\n :rel=\"muted ? undefined : props.rel\">\n <span :class=\"['pk-url__domain', domainClass]\">{{\n truncatedUrl.domain\n }}</span>\n <template\n v-for=\"(segment, index) in truncatedUrl.segments\"\n :key=\"index\">\n <span class=\"pk-url__separator\">›</span>\n <span class=\"pk-url__segment\">{{ segment }}</span>\n </template>\n </Component>\n</template>\n\n<style lang=\"scss\">\n .pk-url {\n display: inline-flex;\n align-items: center;\n gap: 0.5ch;\n }\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYI,IAAM,IAAQ,GAQR,IAAY,QAAe;AAC7B,OAAI;IACA,IAAM,IAAS,IAAI,IAAI,EAAM,IAAG,EAC5B,IAAW,EAAO;AAGtB,IAAI,EAAS,WAAW,OAAO,KAAE,IAAW,EAAS,UAAU,EAAC;IAGhE,IAAI,IAAW,EAAO;AACtB,IAAI,MAAa,QAAK,IAAW;IAGjC,IAAM,IAAW,EACZ,MAAM,IAAG,CACT,QAAQ,MAAY,EAAQ,SAAS,EAAC;AAE3C,WAAO;KACH,QAAQ;KACR;KACA,UAAU,IAAW;KACzB;WACI;AAEJ,WAAO;KACH,QAAQ,EAAM;KACd,UAAU,EAAE;KACZ,UAAU,EAAM;KACpB;;IAEP,EAEK,IAAe,QAAe;AAChC,OAAI,EAAU,MAAM,SAAS,UAAU,EAAM,UACzC,QAAO,EAAU;GAGrB,IAAM,IAAS,EAAU,MAAM,QACzB,IAAc,EAAU,MAAM;AAGpC,OAAI,EAAY,WAAW,EACvB,QAAO;IACH;IACA,UAAU,EAAE;IACZ,UAAU;IACd;GAGJ,IAAM,IAAqB,EAAC,EAGxB,IAAgB,EAAO;AAG3B,QAAK,IAAI,IAAI,EAAY,SAAS,GAAG,KAAK,GAAG,KAAK;IAC9C,IAAM,IAAU,EAAY;AAG5B,QAAI,EAAS,WAAW,EAEpB,CADA,KAAiB,EAAQ,SAAS,GAClC,EAAS,QAAQ,EAAO;aACjB,IAAgB,EAAQ,SAAS,KAAK,EAAM,UAEnD,CADA,KAAiB,EAAQ,SAAS,GAClC,EAAS,QAAQ,EAAO;SACrB;AACH,OAAS,QAAQ,MAAK;AACtB;;;AAIR,UAAO;IACH;IACA;IACA,UAAU,IAAS,MAAM,EAAS,KAAK,IAAA;IAC3C;IACH;yBAID,EAeY,EAdH,EAAA,QAAK,SAAA,IAAA,EAAA;GACV,OAAM;GACL,MAAM,EAAA,QAAQ,KAAA,IAAY,EAAM;GAChC,QAAQ,EAAA,QAAQ,KAAA,IAAY,EAAM;GAClC,KAAK,EAAA,QAAQ,KAAA,IAAY,EAAM;;oBAGvB,CAFT,EAES,QAAA,EAFF,OAAK,EAAA,CAAA,kBAAqB,EAAA,YAAW,CAAA,EAAA,EAAA,EACxC,EAAA,MAAa,OAAM,EAAA,EAAA,GAAA,EAAA,GAAA,EAEvB,EAKW,GAAA,MAAA,EAJoB,EAAA,MAAa,WAAhC,GAAS,wBACX,GAAK,EAAA,CAAA,AAAA,EAAA,OACX,EAAwC,QAAA,EAAlC,OAAM,qBAAmB,EAAC,KAAC,GAAA,EACjC,EAAkD,QAAlD,GAAkD,EAAjB,EAAO,EAAA,EAAA,CAAA,EAAA,GAAA"}
|
|
1
|
+
{"version":3,"file":"PkUrl-BHD0_pal.js","names":[],"sources":["../../../../packages/components/src/PkUrl.vue","../../../../packages/components/src/PkUrl.vue","../../../../packages/components/src/PkUrl.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed } from 'vue'\n\n interface Props {\n url: string\n maxLength?: number\n domainClass?: string\n target?: '_blank' | '_self' | '_parent' | '_top'\n rel?: string\n muted?: boolean\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxLength: 60,\n domainClass: undefined,\n target: '_blank',\n rel: 'noopener noreferrer',\n muted: false,\n })\n\n const parsedUrl = computed(() => {\n try {\n const urlObj = new URL(props.url)\n let hostname = urlObj.hostname\n\n // Remove www. prefix\n if (hostname.startsWith('www.')) hostname = hostname.substring(4)\n\n // Get pathname and remove trailing slash\n let pathname = urlObj.pathname\n if (pathname === '/') pathname = ''\n\n // Split pathname into segments\n const segments = pathname\n .split('/')\n .filter((segment) => segment.length > 0)\n\n return {\n domain: hostname,\n segments,\n fullPath: hostname + pathname,\n }\n } catch {\n // If URL parsing fails, return the original URL\n return {\n domain: props.url,\n segments: [],\n fullPath: props.url,\n }\n }\n })\n\n const truncatedUrl = computed(() => {\n if (parsedUrl.value.fullPath.length <= props.maxLength)\n return parsedUrl.value\n\n // If too long, truncate segments from the beginning\n const domain = parsedUrl.value.domain\n const allSegments = parsedUrl.value.segments\n\n // Always show at least the last segment\n if (allSegments.length === 0) {\n return {\n domain,\n segments: [],\n fullPath: domain,\n }\n }\n\n const segments: string[] = []\n\n // Calculate from the end\n let currentLength = domain.length\n\n // Try to fit segments from the end\n for (let i = allSegments.length - 1; i >= 0; i--) {\n const segment = allSegments[i]\n\n // Always include at least the last segment\n if (segments.length === 0) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else if (currentLength + segment.length + 1 <= props.maxLength) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else {\n segments.unshift('...')\n break\n }\n }\n\n return {\n domain,\n segments,\n fullPath: domain + '/' + segments.join('/'),\n }\n })\n</script>\n\n<template>\n <Component\n :is=\"muted ? 'span' : 'a'\"\n class=\"pk-url\"\n :href=\"muted ? undefined : props.url\"\n :target=\"muted ? undefined : props.target\"\n :rel=\"muted ? undefined : props.rel\">\n <span :class=\"['pk-url__domain', domainClass]\">{{\n truncatedUrl.domain\n }}</span>\n <template\n v-for=\"(segment, index) in truncatedUrl.segments\"\n :key=\"index\">\n <span class=\"pk-url__separator\">›</span>\n <span class=\"pk-url__segment\">{{ segment }}</span>\n </template>\n </Component>\n</template>\n\n<style lang=\"scss\">\n .pk-url {\n display: inline-flex;\n align-items: center;\n gap: 0.5ch;\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n\n interface Props {\n url: string\n maxLength?: number\n domainClass?: string\n target?: '_blank' | '_self' | '_parent' | '_top'\n rel?: string\n muted?: boolean\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxLength: 60,\n domainClass: undefined,\n target: '_blank',\n rel: 'noopener noreferrer',\n muted: false,\n })\n\n const parsedUrl = computed(() => {\n try {\n const urlObj = new URL(props.url)\n let hostname = urlObj.hostname\n\n // Remove www. prefix\n if (hostname.startsWith('www.')) hostname = hostname.substring(4)\n\n // Get pathname and remove trailing slash\n let pathname = urlObj.pathname\n if (pathname === '/') pathname = ''\n\n // Split pathname into segments\n const segments = pathname\n .split('/')\n .filter((segment) => segment.length > 0)\n\n return {\n domain: hostname,\n segments,\n fullPath: hostname + pathname,\n }\n } catch {\n // If URL parsing fails, return the original URL\n return {\n domain: props.url,\n segments: [],\n fullPath: props.url,\n }\n }\n })\n\n const truncatedUrl = computed(() => {\n if (parsedUrl.value.fullPath.length <= props.maxLength)\n return parsedUrl.value\n\n // If too long, truncate segments from the beginning\n const domain = parsedUrl.value.domain\n const allSegments = parsedUrl.value.segments\n\n // Always show at least the last segment\n if (allSegments.length === 0) {\n return {\n domain,\n segments: [],\n fullPath: domain,\n }\n }\n\n const segments: string[] = []\n\n // Calculate from the end\n let currentLength = domain.length\n\n // Try to fit segments from the end\n for (let i = allSegments.length - 1; i >= 0; i--) {\n const segment = allSegments[i]\n\n // Always include at least the last segment\n if (segments.length === 0) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else if (currentLength + segment.length + 1 <= props.maxLength) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else {\n segments.unshift('...')\n break\n }\n }\n\n return {\n domain,\n segments,\n fullPath: domain + '/' + segments.join('/'),\n }\n })\n</script>\n\n<template>\n <Component\n :is=\"muted ? 'span' : 'a'\"\n class=\"pk-url\"\n :href=\"muted ? undefined : props.url\"\n :target=\"muted ? undefined : props.target\"\n :rel=\"muted ? undefined : props.rel\">\n <span :class=\"['pk-url__domain', domainClass]\">{{\n truncatedUrl.domain\n }}</span>\n <template\n v-for=\"(segment, index) in truncatedUrl.segments\"\n :key=\"index\">\n <span class=\"pk-url__separator\">›</span>\n <span class=\"pk-url__segment\">{{ segment }}</span>\n </template>\n </Component>\n</template>\n\n<style lang=\"scss\">\n .pk-url {\n display: inline-flex;\n align-items: center;\n gap: 0.5ch;\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n\n interface Props {\n url: string\n maxLength?: number\n domainClass?: string\n target?: '_blank' | '_self' | '_parent' | '_top'\n rel?: string\n muted?: boolean\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxLength: 60,\n domainClass: undefined,\n target: '_blank',\n rel: 'noopener noreferrer',\n muted: false,\n })\n\n const parsedUrl = computed(() => {\n try {\n const urlObj = new URL(props.url)\n let hostname = urlObj.hostname\n\n // Remove www. prefix\n if (hostname.startsWith('www.')) hostname = hostname.substring(4)\n\n // Get pathname and remove trailing slash\n let pathname = urlObj.pathname\n if (pathname === '/') pathname = ''\n\n // Split pathname into segments\n const segments = pathname\n .split('/')\n .filter((segment) => segment.length > 0)\n\n return {\n domain: hostname,\n segments,\n fullPath: hostname + pathname,\n }\n } catch {\n // If URL parsing fails, return the original URL\n return {\n domain: props.url,\n segments: [],\n fullPath: props.url,\n }\n }\n })\n\n const truncatedUrl = computed(() => {\n if (parsedUrl.value.fullPath.length <= props.maxLength)\n return parsedUrl.value\n\n // If too long, truncate segments from the beginning\n const domain = parsedUrl.value.domain\n const allSegments = parsedUrl.value.segments\n\n // Always show at least the last segment\n if (allSegments.length === 0) {\n return {\n domain,\n segments: [],\n fullPath: domain,\n }\n }\n\n const segments: string[] = []\n\n // Calculate from the end\n let currentLength = domain.length\n\n // Try to fit segments from the end\n for (let i = allSegments.length - 1; i >= 0; i--) {\n const segment = allSegments[i]\n\n // Always include at least the last segment\n if (segments.length === 0) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else if (currentLength + segment.length + 1 <= props.maxLength) {\n currentLength += segment.length + 1\n segments.unshift(segment)\n } else {\n segments.unshift('...')\n break\n }\n }\n\n return {\n domain,\n segments,\n fullPath: domain + '/' + segments.join('/'),\n }\n })\n</script>\n\n<template>\n <Component\n :is=\"muted ? 'span' : 'a'\"\n class=\"pk-url\"\n :href=\"muted ? undefined : props.url\"\n :target=\"muted ? undefined : props.target\"\n :rel=\"muted ? undefined : props.rel\">\n <span :class=\"['pk-url__domain', domainClass]\">{{\n truncatedUrl.domain\n }}</span>\n <template\n v-for=\"(segment, index) in truncatedUrl.segments\"\n :key=\"index\">\n <span class=\"pk-url__separator\">›</span>\n <span class=\"pk-url__segment\">{{ segment }}</span>\n </template>\n </Component>\n</template>\n\n<style lang=\"scss\">\n .pk-url {\n display: inline-flex;\n align-items: center;\n gap: 0.5ch;\n }\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYI,IAAM,IAAQ,GAQR,IAAY,QAAe;AAC7B,OAAI;IACA,IAAM,IAAS,IAAI,IAAI,EAAM,IAAG,EAC5B,IAAW,EAAO;AAGtB,IAAI,EAAS,WAAW,OAAO,KAAE,IAAW,EAAS,UAAU,EAAC;IAGhE,IAAI,IAAW,EAAO;AACtB,IAAI,MAAa,QAAK,IAAW;IAGjC,IAAM,IAAW,EACZ,MAAM,IAAG,CACT,QAAQ,MAAY,EAAQ,SAAS,EAAC;AAE3C,WAAO;KACH,QAAQ;KACR;KACA,UAAU,IAAW;KACzB;WACI;AAEJ,WAAO;KACH,QAAQ,EAAM;KACd,UAAU,EAAE;KACZ,UAAU,EAAM;KACpB;;IAEP,EAEK,IAAe,QAAe;AAChC,OAAI,EAAU,MAAM,SAAS,UAAU,EAAM,UACzC,QAAO,EAAU;GAGrB,IAAM,IAAS,EAAU,MAAM,QACzB,IAAc,EAAU,MAAM;AAGpC,OAAI,EAAY,WAAW,EACvB,QAAO;IACH;IACA,UAAU,EAAE;IACZ,UAAU;IACd;GAGJ,IAAM,IAAqB,EAAC,EAGxB,IAAgB,EAAO;AAG3B,QAAK,IAAI,IAAI,EAAY,SAAS,GAAG,KAAK,GAAG,KAAK;IAC9C,IAAM,IAAU,EAAY;AAG5B,QAAI,EAAS,WAAW,EAEpB,CADA,KAAiB,EAAQ,SAAS,GAClC,EAAS,QAAQ,EAAO;aACjB,IAAgB,EAAQ,SAAS,KAAK,EAAM,UAEnD,CADA,KAAiB,EAAQ,SAAS,GAClC,EAAS,QAAQ,EAAO;SACrB;AACH,OAAS,QAAQ,MAAK;AACtB;;;AAIR,UAAO;IACH;IACA;IACA,UAAU,IAAS,MAAM,EAAS,KAAK,IAAA;IAC3C;IACH;yBAID,EAeY,EAdH,EAAA,QAAK,SAAA,IAAA,EAAA;GACV,OAAM;GACL,MAAM,EAAA,QAAQ,KAAA,IAAY,EAAM;GAChC,QAAQ,EAAA,QAAQ,KAAA,IAAY,EAAM;GAClC,KAAK,EAAA,QAAQ,KAAA,IAAY,EAAM;;oBAGvB,CAFT,EAES,QAAA,EAFF,OAAK,EAAA,CAAA,kBAAqB,EAAA,YAAW,CAAA,EAAA,EAAA,EACxC,EAAA,MAAa,OAAM,EAAA,EAAA,GAAA,EAAA,GAAA,EAEvB,EAKW,GAAA,MAAA,EAJoB,EAAA,MAAa,WAAhC,GAAS,wBACX,GAAK,EAAA,CAAA,AAAA,EAAA,OACX,EAAwC,QAAA,EAAlC,OAAM,qBAAmB,EAAC,KAAC,GAAA,EACjC,EAAkD,QAAlD,GAAkD,EAAjB,EAAO,EAAA,EAAA,CAAA,EAAA,GAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $ as e, Bt as t, C as n, E as r, Gt as i, H as a, L as o, O as s, Q as c, S as l, Vt as u, Y as d, Z as f, _ as p, _t as m, c as ee, et as te, ft as ne, gt as h, j as g, k as _, q as v, st as y, v as re, w as ie, x as ae, yt as b, z as oe } from "./vue.runtime.esm-bundler-
|
|
2
|
-
//#region ../../node_modules/.pnpm/@volverjs+ui-vue@0.0.13-beta.8_@volverjs+style@0.1.24-beta.3_@vueuse+core@14.3.0_vue@3.
|
|
1
|
+
import { $ as e, Bt as t, C as n, E as r, Gt as i, H as a, L as o, O as s, Q as c, S as l, Vt as u, Y as d, Z as f, _ as p, _t as m, c as ee, et as te, ft as ne, gt as h, j as g, k as _, q as v, st as y, v as re, w as ie, x as ae, yt as b, z as oe } from "./vue.runtime.esm-bundler-Dq29dQrz.js";
|
|
2
|
+
//#region ../../node_modules/.pnpm/@volverjs+ui-vue@0.0.13-beta.8_@volverjs+style@0.1.24-beta.3_@vueuse+core@14.3.0_vue@3._b0d461e87ded044697d58df431d5928d/node_modules/@volverjs/ui-vue/dist/components/VvCheckbox/VvCheckbox.es.js
|
|
3
3
|
var x = /* @__PURE__ */ (function(e) {
|
|
4
4
|
return e.local = "local", e.session = "session", e;
|
|
5
5
|
})({}), S = /* @__PURE__ */ (function(e) {
|
|
@@ -511,4 +511,4 @@ var xe = ["for"], Se = [
|
|
|
511
511
|
//#endregion
|
|
512
512
|
export { Ce as default };
|
|
513
513
|
|
|
514
|
-
//# sourceMappingURL=VvCheckbox.es-
|
|
514
|
+
//# sourceMappingURL=VvCheckbox.es-ohF87NOe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VvCheckbox.es-BF8Mdg0O.js","names":["Q","n","Ne","Z","X","z","I","Ie","v","Pe","Se","Ce","he","me","fe","ge","_e","ce","Le","m","be","Oe","ye","pe","L","P","N"],"sources":["../../../../node_modules/.pnpm/@volverjs+ui-vue@0.0.13-beta.8_@volverjs+style@0.1.24-beta.3_@vueuse+core@14.3.0_vue@3._522f151ee0a8eb4c0a241a4ec2e81adb/node_modules/@volverjs/ui-vue/dist/components/VvCheckbox/VvCheckbox.es.js"],"sourcesContent":["import { computed as n, createElementBlock as fe, createElementVNode as ce, createSlots as pe, createTextVNode as be, createVNode as ye, defineComponent as z, guardReactiveProps as N, h as I, inject as Q, isRef as X, normalizeClass as ge, normalizeProps as P, onMounted as he, openBlock as me, ref as Se, renderSlot as m, toDisplayString as Oe, toRef as Ne, toRefs as Z, unref as v, useId as Ie, useSlots as Pe, vModelCheckbox as Le, watch as Ce, watchEffect as Be, withCtx as L, withDirectives as _e } from \"vue\";\nvar H = /* @__PURE__ */ (function(e) {\n return e.local = \"local\", e.session = \"session\", e;\n})({}), Ae = /* @__PURE__ */ (function(e) {\n return e.absolute = \"absolute\", e.fixed = \"fixed\", e;\n})({}), Y = /* @__PURE__ */ (function(e) {\n return e.left = \"left\", e.right = \"right\", e.top = \"top\", e.bottom = \"bottom\", e;\n})({}), Ee = /* @__PURE__ */ (function(e) {\n return e.topStart = \"top-start\", e.topEnd = \"top-end\", e.bottomStart = \"bottom-start\", e.bottomEnd = \"bottom-end\", e.leftStart = \"left-start\", e.leftEnd = \"left-end\", e.rightStart = \"right-start\", e.rightEnd = \"right-end\", e;\n})({}), F = /* @__PURE__ */ (function(e) {\n return e.before = \"before\", e.after = \"after\", e;\n})({}), U = /* @__PURE__ */ (function(e) {\n return e.button = \"button\", e.submit = \"submit\", e.reset = \"reset\", e;\n})({}), Ve = /* @__PURE__ */ (function(e) {\n return e.nuxtLink = \"nuxt-link\", e.routerLink = \"router-link\", e.a = \"a\", e.button = \"button\", e;\n})({}), je = /* @__PURE__ */ Symbol.for(\"volver\");\nvar ke = /* @__PURE__ */ Symbol.for(\"checkGroup\");\nvar Re = {\n showPassword: \"eye-on\",\n hidePassword: \"eye-off\",\n showDatePicker: \"calendar\",\n showTimePicker: \"time\",\n showColorPicker: \"color\",\n clear: \"close\",\n add: \"add\",\n remove: \"trash\",\n edit: \"edit\",\n download: \"download\"\n}, we = /* @__PURE__ */ (function(e) {\n return e.simple = \"simple\", e.normal = \"normal\", e.detailed = \"detailed\", e;\n})({}), dt = { prefix: we.normal }, De = {\n to: { type: [String, Object] },\n href: String,\n target: String,\n rel: {\n type: String,\n default: \"noopener noreferrer\"\n }\n}, k = {\n valid: {\n type: Boolean,\n default: !1\n },\n validLabel: {\n type: [String, Array],\n default: void 0\n }\n}, R = {\n invalid: {\n type: Boolean,\n default: !1\n },\n invalidLabel: {\n type: [String, Array],\n default: void 0\n }\n}, w = {\n loading: {\n type: Boolean,\n default: !1\n },\n loadingLabel: {\n type: String,\n default: \"Loading...\"\n }\n}, C = { disabled: {\n type: Boolean,\n default: !1\n} }, ee = { required: {\n type: Boolean,\n default: !1\n} }, $e = { active: {\n type: Boolean,\n default: !1\n} }, xe = { current: {\n type: Boolean,\n default: !1\n} }, vt = {\n showClearAction: {\n type: Boolean,\n default: !1\n },\n iconClear: {\n type: [String, Object],\n default: Re.clear\n },\n labelClear: {\n type: String,\n default: \"Clear\"\n }\n}, Ge = { pressed: {\n type: Boolean,\n default: !1\n} }, B = { label: {\n type: [String, Number],\n default: void 0\n} }, D = { readonly: {\n type: Boolean,\n default: !1\n} }, _ = { modifiers: {\n type: [String, Array],\n default: void 0\n} }, $ = { hintLabel: {\n type: String,\n default: \"\"\n} }, Te = {\n options: {\n type: Array,\n default: () => []\n },\n labelKey: {\n type: [String, Function],\n default: \"label\"\n },\n valueKey: {\n type: [String, Function],\n default: \"value\"\n },\n disabledKey: {\n type: [String, Function],\n default: \"disabled\"\n }\n}, Ke = { count: {\n type: [Boolean, String],\n default: !1,\n validator: (e) => [\n !0,\n !1,\n \"limit\",\n \"countdown\"\n ].includes(e)\n} }, Je = { debounce: {\n type: [Number, String],\n default: void 0\n} }, He = {\n icon: {\n type: [String, Object],\n default: void 0\n },\n iconPosition: {\n type: String,\n default: F.before,\n validation: (e) => Object.values(F).includes(e)\n }\n}, te = { tabindex: {\n type: [String, Number],\n default: 0\n} }, Ye = { floating: {\n type: Boolean,\n default: !1\n} }, Fe = { id: [String, Number] }, ft = {\n placement: {\n type: String,\n default: Y.bottom,\n validator: (e) => Object.values(Y).includes(e) || Object.values(Ee).includes(e)\n },\n strategy: {\n type: String,\n default: void 0,\n validator: (e) => Object.values(Ae).includes(e)\n },\n transitionName: {\n type: String,\n default: void 0\n },\n offset: {\n type: [\n Number,\n String,\n Object\n ],\n default: 0\n },\n shift: {\n type: [Boolean, Object],\n default: !1\n },\n flip: {\n type: [Boolean, Object],\n default: !0\n },\n size: {\n type: [Boolean, Object],\n default: () => ({ padding: 10 })\n },\n autoPlacement: {\n type: [Boolean, Object],\n default: !1\n },\n arrow: {\n type: Boolean,\n default: !1\n },\n keepOpen: {\n type: Boolean,\n default: !1\n },\n autofocusFirst: {\n type: Boolean,\n default: !0\n },\n triggerWidth: {\n type: Boolean,\n default: !1\n }\n}, ae = {\n ...Fe,\n name: {\n type: String,\n required: !0\n }\n}, Ue = { autofocus: {\n type: Boolean,\n default: !1\n} }, qe = { autocomplete: {\n type: String,\n default: \"off\"\n} }, ct = {\n ...ae,\n ...Ue,\n ...qe,\n ...te,\n ...C,\n ...D,\n ...k,\n ...R,\n ...$,\n ...w,\n ..._,\n ...Ke,\n ...Je,\n ...He,\n ...Ye,\n ...B,\n minlength: {\n type: [String, Number],\n default: void 0\n },\n maxlength: {\n type: [String, Number],\n default: void 0\n },\n placeholder: {\n type: String,\n default: void 0\n },\n ...ee\n}, Me = {\n ...ae,\n ...te,\n ...k,\n ...R,\n ...$,\n ...C,\n ...D,\n ..._,\n ...B,\n ...w,\n value: {\n type: [\n String,\n Number,\n Boolean\n ],\n default: void 0\n },\n modelValue: {\n type: [\n Object,\n Number,\n Boolean,\n String\n ],\n default: void 0\n }\n}, pt = {\n ...k,\n ...R,\n ...Te,\n ...$,\n ...C,\n ...D,\n ..._,\n ...B,\n ...w,\n ...ee,\n modelValue: {\n type: [\n String,\n Array,\n Boolean,\n Number,\n Symbol\n ],\n default: void 0\n },\n name: {\n type: String,\n required: !0\n },\n vertical: {\n type: Boolean,\n default: !1\n }\n}, bt = {\n ...C,\n ...B,\n ...Ge,\n ...$e,\n ...xe,\n ...De,\n type: {\n type: String,\n default: U.button,\n validator: (e) => Object.values(U).includes(e)\n },\n ariaLabel: {\n type: String,\n default: void 0\n },\n defaultTag: {\n type: String,\n default: Ve.button\n }\n}, yt = {\n storageType: {\n type: String,\n default: H.local,\n validator: (e) => Object.values(H).includes(e)\n },\n storageKey: String\n};\nfunction We(e) {\n const a = Q(e, void 0), t = n(() => a !== void 0);\n function i(r, o, u) {\n const s = a?.[r];\n if (s) return n({\n get() {\n return s.value;\n },\n set(l) {\n s.value = l;\n }\n });\n const d = Ne(o, r);\n return n({\n get() {\n return d.value;\n },\n set(l) {\n u && u(`update:${r}`, l);\n }\n });\n }\n return {\n group: a,\n isInGroup: t,\n getGroupOrLocalRef: i\n };\n}\nvar q = {\n ...Me,\n ..._,\n indeterminate: Boolean,\n uncheckedValue: [\n String,\n Number,\n Boolean\n ],\n switch: Boolean\n}, ze = [\n \"click\",\n \"update:modelValue\",\n \"change\",\n \"blur\"\n];\nfunction Qe(e, a) {\n const { group: t, isInGroup: i, getGroupOrLocalRef: r } = We(ke), { id: o, switch: u, indeterminate: s } = Z(e);\n return {\n id: o,\n propsSwitch: u,\n indeterminate: s,\n group: t,\n isInGroup: i,\n modelValue: r(\"modelValue\", e, a),\n valid: r(\"valid\", e),\n invalid: r(\"invalid\", e),\n readonly: n(() => !!(e.readonly || t?.readonly.value)),\n disabled: n(() => !!(e.disabled || t?.disabled.value))\n };\n}\nfunction re(e, a, t) {\n return t ? M(e, t) === M(a, t) : j(e, a);\n}\nfunction j(e, a) {\n if (e === a) return !0;\n if (e && a && typeof e == \"object\" && typeof a == \"object\") {\n const t = Array.isArray(e), i = Array.isArray(a);\n let r, o, u;\n if (t && i) {\n if (o = e.length, o !== a.length) return !1;\n for (r = o; r-- !== 0; ) if (!j(e[r], a[r])) return !1;\n return !0;\n }\n if (t !== i) return !1;\n const s = e instanceof Date, d = a instanceof Date;\n if (s !== d) return !1;\n if (s && d) return e.getTime() === a.getTime();\n const l = e instanceof RegExp, b = a instanceof RegExp;\n if (l !== b) return !1;\n if (l && b) return e.toString() === a.toString();\n const f = Object.keys(e);\n if (o = f.length, o !== Object.keys(a).length) return !1;\n for (r = o; r-- !== 0; ) if (!Object.hasOwn(a, f[r])) return !1;\n for (r = o; r-- !== 0; )\n if (u = f[r], !j(e[u], a[u])) return !1;\n return !0;\n }\n return Number.isNaN(e) && Number.isNaN(a);\n}\nfunction M(e, a) {\n if (e && Object.keys(e).length && a) if (a.includes(\".\")) {\n const t = a.split(\".\");\n let i = e;\n for (let r = 0, o = t.length; r < o; ++r) {\n if (e == null) return null;\n i = i[t[r]];\n }\n return i;\n } else\n return e[a];\n else return null;\n}\nfunction Xe(e, a) {\n if (e != null && a && a.length) {\n for (const t of a) if (re(e, t)) return !0;\n }\n return !1;\n}\nfunction Ze(e) {\n return typeof e == \"string\";\n}\nfunction W(e) {\n return Array.isArray(e) ? e.filter((a) => Ze(a)).join(\" \") : e;\n}\nfunction et(e, a) {\n const t = n(() => X(e) ? e.value : e), i = n(() => W(t.value.invalidLabel)), r = n(() => W(t.value.validLabel)), o = n(() => t.value.loadingLabel), u = n(() => t.value.hintLabel), s = n(() => !!(t.value.loading && (a.loading || o.value))), d = n(() => !s.value && !!(t.value.invalid && (a.invalid || i.value))), l = n(() => !s.value && !d.value && !!(t.value.valid && (a.valid || r.value))), b = n(() => !s.value && !d.value && !l.value && !!(a.hint || u.value)), f = n(() => d.value || l.value || s.value || b.value);\n return {\n hasInvalidLabelOrSlot: d,\n hasHintLabelOrSlot: b,\n hasValidLabelOrSlot: l,\n hasLoadingLabelOrSlot: s,\n hintSlotScope: n(() => ({\n modelValue: t.value.modelValue,\n valid: t.value.valid,\n invalid: t.value.invalid,\n loading: t.value.loading\n })),\n HintSlot: z({\n name: \"HintSlot\",\n props: { tag: {\n type: String,\n default: \"small\"\n } },\n setup() {\n return {\n isVisible: f,\n invalidLabel: i,\n validLabel: r,\n loadingLabel: o,\n hintLabel: u,\n hasInvalidLabelOrSlot: d,\n hasValidLabelOrSlot: l,\n hasLoadingLabelOrSlot: s,\n hasHintLabelOrSlot: b\n };\n },\n render() {\n if (this.isVisible) {\n let c;\n return this.hasInvalidLabelOrSlot && (c = \"alert\"), this.hasValidLabelOrSlot && (c = \"status\"), this.hasLoadingLabelOrSlot ? I(this.tag, { role: c }, this.$slots.loading?.() ?? this.loadingLabel) : this.hasInvalidLabelOrSlot ? I(this.tag, { role: c }, this.$slots.invalid?.() ?? this.$slots.invalid ?? this.invalidLabel) : this.hasValidLabelOrSlot ? I(this.tag, { role: c }, this.$slots.valid?.() ?? this.validLabel) : I(this.tag, { role: c }, this.$slots.hint?.() ?? this.$slots.hint ?? this.hintLabel);\n }\n return null;\n }\n })\n };\n}\nfunction tt() {\n return Q(je, void 0);\n}\nfunction at(e, a, t) {\n const i = tt(), r = n(() => {\n if (!(!i || !i.defaults.value?.[e]))\n return i.defaults.value[e];\n });\n return n(() => {\n if (r.value === void 0) return t;\n const o = r.value, u = a, s = t;\n return Object.keys(u).reduce((d, l) => {\n const b = s[l];\n if (d[l] = b, l in o) {\n if (Array.isArray(u[l])) {\n const f = u[l];\n f.length && f[0] === b && (d[l] = o[l]);\n }\n if (typeof u[l] == \"function\") {\n const f = u[l];\n f() === b && (d[l] = o[l]);\n }\n if (typeof u[l] == \"object\") {\n let f = u[l].default;\n typeof f == \"function\" && (f = f()), typeof f == \"object\" ? JSON.stringify(f) === JSON.stringify(b) && (d[l] = o[l]) : f === b && (d[l] = o[l]);\n }\n }\n return d;\n }, {});\n });\n}\nfunction rt(e) {\n return n(() => String(e?.value || Ie()));\n}\nfunction lt(e, a, t) {\n return n(() => {\n const i = { [e]: !0 }, r = typeof a?.value == \"string\" ? a.value.split(\" \") : a?.value;\n return r && Array.isArray(r) && r.forEach((o) => {\n o && (i[`${e}--${o}`] = !0);\n }), t && Object.keys(t.value).forEach((o) => {\n i[`${e}--${o}`] = v(t.value[o]);\n }), i;\n });\n}\nvar ot = [\"for\"], nt = [\n \"id\",\n \"name\",\n \"disabled\",\n \"value\",\n \"tabindex\",\n \"aria-invalid\",\n \"aria-describedby\",\n \"aria-errormessage\"\n], it = { name: \"VvCheckbox\" }, ut = /* @__PURE__ */ z({\n ...it,\n props: q,\n emits: ze,\n setup(e, { emit: a }) {\n const t = e, i = a, r = Pe(), o = at(\"VvCheckbox\", q, t), { id: u, disabled: s, readonly: d, valid: l, invalid: b, propsSwitch: f, modelValue: c, indeterminate: x, isInGroup: G } = Qe(t, i), A = rt(u), E = n(() => `${A.value}-hint`), le = n(() => T.value ? -1 : t.tabindex), S = Se(), g = n(() => t.uncheckedValue !== void 0 && !G.value), T = n(() => s.value || d.value), oe = n(() => {\n if (b.value === !0) return !0;\n if (l.value === !0) return !1;\n }), K = n(() => g.value ? c.value === t.value : Array.isArray(c.value) ? Xe(t.value, c.value) : re(t.value, c.value)), J = n(() => !!(x.value || !K.value && g.value && t.uncheckedValue !== c.value)), ne = n(() => {\n if (!g.value)\n return [\n \"string\",\n \"number\",\n \"boolean\"\n ].includes(typeof t.value) ? t.value : !0;\n }), V = n({\n get() {\n return K.value;\n },\n set(p) {\n if (g.value) c.value = p ? t.value : t.uncheckedValue;\n else if (Array.isArray(c.value) || G.value) {\n const y = c.value ?? [], h = new Set(Array.isArray(y) ? y : [y]);\n p ? h.add(t.value) : h.delete(t.value), c.value = [...h];\n } else c.value = p ? t.value : void 0;\n i(\"change\", p);\n }\n }), { modifiers: ie } = Z(t), ue = lt(\"vv-checkbox\", ie, n(() => ({\n switch: f.value,\n valid: l.value,\n invalid: b.value,\n disabled: s.value,\n readonly: d.value,\n indeterminate: x.value\n })));\n Be(() => {\n g.value && Array.isArray(c.value) && console.warn(\"[VvCheckbox] The model value is an array but the component is in binary mode.\");\n }), Ce(() => J.value, (p) => {\n p ? S.value.indeterminate = !0 : S.value.indeterminate = !1;\n }), he(() => {\n J.value && (S.value.indeterminate = !0);\n });\n const { HintSlot: se, hasHintLabelOrSlot: de, hasInvalidLabelOrSlot: ve, hintSlotScope: O } = et(o, r);\n return (p, y) => (me(), fe(\"label\", {\n class: ge(v(ue)),\n for: v(A)\n }, [\n _e(ce(\"input\", {\n id: v(A),\n ref_key: \"input\",\n ref: S,\n \"onUpdate:modelValue\": y[0] || (y[0] = (h) => X(V) ? V.value = h : null),\n type: \"checkbox\",\n class: \"vv-checkbox__input\",\n name: p.name,\n disabled: v(T),\n value: v(ne),\n tabindex: v(le),\n \"aria-invalid\": v(oe),\n \"aria-describedby\": v(de) ? v(E) : void 0,\n \"aria-errormessage\": v(ve) ? v(E) : void 0\n }, null, 8, nt), [[Le, v(V)]]),\n m(p.$slots, \"default\", { value: v(c) }, () => [be(Oe(p.label), 1)]),\n ye(v(se), {\n id: v(E),\n class: \"vv-checkbox__hint\"\n }, pe({ _: 2 }, [\n p.$slots.hint ? {\n name: \"hint\",\n fn: L(() => [m(p.$slots, \"hint\", P(N(v(O))))]),\n key: \"0\"\n } : void 0,\n p.$slots.loading ? {\n name: \"loading\",\n fn: L(() => [m(p.$slots, \"loading\", P(N(v(O))))]),\n key: \"1\"\n } : void 0,\n p.$slots.valid ? {\n name: \"valid\",\n fn: L(() => [m(p.$slots, \"valid\", P(N(v(O))))]),\n key: \"2\"\n } : void 0,\n p.$slots.invalid ? {\n name: \"invalid\",\n fn: L(() => [m(p.$slots, \"invalid\", P(N(v(O))))]),\n key: \"3\"\n } : void 0\n ]), 1032, [\"id\"])\n ], 10, ot));\n }\n}), gt = ut;\nexport {\n gt as default\n};\n"],"x_google_ignoreList":[0],"mappings":";;AACA,IAAI,IAAoB,iBAAC,SAAS,GAAG;AACnC,QAAO,EAAE,QAAQ,SAAS,EAAE,UAAU,WAAW;GAChD,EAAE,CAAC,EAEE,IAAoB,iBAAC,SAAS,GAAG;AACvC,QAAO,EAAE,OAAO,QAAQ,EAAE,QAAQ,SAAS,EAAE,MAAM,OAAO,EAAE,SAAS,UAAU;GAC9E,EAAE,CAAC,EAEE,IAAoB,iBAAC,SAAS,GAAG;AACvC,QAAO,EAAE,SAAS,UAAU,EAAE,QAAQ,SAAS;GAC9C,EAAE,CAAC,EAAE,IAAoB,iBAAC,SAAS,GAAG;AACvC,QAAO,EAAE,SAAS,UAAU,EAAE,SAAS,UAAU,EAAE,QAAQ,SAAS;GACnE,EAAE,CAAC,EAAE,IAAqB,iBAAC,SAAS,GAAG;AACxC,QAAO,EAAE,WAAW,aAAa,EAAE,aAAa,eAAe,EAAE,IAAI,KAAK,EAAE,SAAS,UAAU;GAC9F,EAAE,CAAC,EAAE,IAAqB,uBAAO,IAAI,SAAS,EAC7C,IAAqB,uBAAO,IAAI,aAAa,EAC7C,IAAK;CACP,cAAc;CACd,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CACjB,OAAO;CACP,KAAK;CACL,QAAQ;CACR,MAAM;CACN,UAAU;CACX;CAEsB,iBAFE,SAAS,GAAG;AACnC,QAAO,EAAE,SAAS,UAAU,EAAE,SAAS,UAAU,EAAE,WAAW,YAAY;GACzE,EAAE,CAAoB,EAAC;AAb1B,IAaoC,IAAK;CACvC,IAAI,EAAE,MAAM,CAAC,QAAQ,OAAO,EAAE;CAC9B,MAAM;CACN,QAAQ;CACR,KAAK;EACH,MAAM;EACN,SAAS;EACV;CACF,EAAE,IAAI;CACL,OAAO;EACL,MAAM;EACN,SAAS,CAAC;EACX;CACD,YAAY;EACV,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS,KAAK;EACf;CACF,EAAE,IAAI;CACL,SAAS;EACP,MAAM;EACN,SAAS,CAAC;EACX;CACD,cAAc;EACZ,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS,KAAK;EACf;CACF,EAAE,IAAI;CACL,SAAS;EACP,MAAM;EACN,SAAS,CAAC;EACX;CACD,cAAc;EACZ,MAAM;EACN,SAAS;EACV;CACF,EAAE,IAAI,EAAE,UAAU;CACjB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAK,EAAE,UAAU;CACpB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAK,EAAE,QAAQ;CAClB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAK,EAAE,SAAS;CACnB,MAAM;CACN,SAAS,CAAC;CACX,EAAE;AAOU,EAAG;AAnEhB,IAyEG,IAAK,EAAE,SAAS;CACjB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAI,EAAE,OAAO;CAChB,MAAM,CAAC,QAAQ,OAAO;CACtB,SAAS,KAAK;CACf,EAAE,EAAE,IAAI,EAAE,UAAU;CACnB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAI,EAAE,WAAW;CACpB,MAAM,CAAC,QAAQ,MAAM;CACrB,SAAS,KAAK;CACf,EAAE,EAAE,IAAI,EAAE,WAAW;CACpB,MAAM;CACN,SAAS;CACV,EAAE,EAAE,IAAK;CACR,SAAS;EACP,MAAM;EACN,eAAe,EAAE;EAClB;CACD,UAAU;EACR,MAAM,CAAC,QAAQ,SAAS;EACxB,SAAS;EACV;CACD,UAAU;EACR,MAAM,CAAC,QAAQ,SAAS;EACxB,SAAS;EACV;CACD,aAAa;EACX,MAAM,CAAC,QAAQ,SAAS;EACxB,SAAS;EACV;CACF,EAAE,IAAK,EAAE,OAAO;CACf,MAAM,CAAC,SAAS,OAAO;CACvB,SAAS,CAAC;CACV,YAAY,MAAM;EAChB,CAAC;EACD,CAAC;EACD;EACA;EACD,CAAC,SAAS,EAAE;CACd,EAAE,EAAE,IAAK,EAAE,UAAU;CACpB,MAAM,CAAC,QAAQ,OAAO;CACtB,SAAS,KAAK;CACf,EAAE,EAAE,IAAK;CACR,MAAM;EACJ,MAAM,CAAC,QAAQ,OAAO;EACtB,SAAS,KAAK;EACf;CACD,cAAc;EACZ,MAAM;EACN,SAAS,EAAE;EACX,aAAa,MAAM,OAAO,OAAO,EAAE,CAAC,SAAS,EAAE;EAChD;CACF,EAAE,IAAK,EAAE,UAAU;CAClB,MAAM,CAAC,QAAQ,OAAO;CACtB,SAAS;CACV,EAAE,EAAE,IAAK,EAAE,UAAU;CACpB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,OAAO,EAAE;AAGrB,EAAE;AAxIf,IA4LG,IAAK;CACN,GAAG;CACH,MAAM;EACJ,MAAM;EACN,UAAU,CAAC;EACZ;CACF,EAAE,KAAK,EAAE,WAAW;CACnB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,KAAK,EAAE,cAAc;CACxB,MAAM;CACN,SAAS;CACV,EAAE;CAiBD;CAhBA,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAIF,GApBO,EA6BR,GAAG,GACJ;AAtOD,IAsOG,KAAK;CACN,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,OAAO;EACL,MAAM;GACJ;GACA;GACA;GACD;EACD,SAAS,KAAK;EACf;CACD,YAAY;EACV,MAAM;GACJ;GACA;GACA;GACA;GACD;EACD,SAAS,KAAK;EACf;CACF;CAWC;CAVA,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAUF,GAgBD;CANA,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAKF,EAFU,EAAE,QASF,EAAG,QAKH,EAAE;AAKf,SAAS,GAAG,GAAG;CACb,IAAM,IAAIA,EAAE,GAAG,KAAK,EAAE,EAAE,IAAIC,QAAQ,MAAM,KAAK,EAAE;CACjD,SAAS,EAAE,GAAG,GAAG,GAAG;EAClB,IAAM,IAAI,IAAI;AACd,MAAI,EAAG,QAAOA,EAAE;GACd,MAAM;AACJ,WAAO,EAAE;;GAEX,IAAI,GAAG;AACL,MAAE,QAAQ;;GAEb,CAAC;EACF,IAAM,IAAIC,EAAG,GAAG,EAAE;AAClB,SAAOD,EAAE;GACP,MAAM;AACJ,WAAO,EAAE;;GAEX,IAAI,GAAG;AACL,SAAK,EAAE,UAAU,KAAK,EAAE;;GAE3B,CAAC;;AAEJ,QAAO;EACL,OAAO;EACP,WAAW;EACX,oBAAoB;EACrB;;AAEH,IAAI,IAAI;CACN,GAAG;CACH,GAAG;CACH,eAAe;CACf,gBAAgB;EACd;EACA;EACA;EACD;CACD,QAAQ;CACT,EAAE,KAAK;CACN;CACA;CACA;CACA;CACD;AACD,SAAS,GAAG,GAAG,GAAG;CAChB,IAAM,EAAE,OAAO,GAAG,WAAW,GAAG,oBAAoB,MAAM,GAAG,EAAG,EAAE,EAAE,IAAI,GAAG,QAAQ,GAAG,eAAe,MAAME,EAAE,EAAE;AAC/G,QAAO;EACL,IAAI;EACJ,aAAa;EACb,eAAe;EACf,OAAO;EACP,WAAW;EACX,YAAY,EAAE,cAAc,GAAG,EAAE;EACjC,OAAO,EAAE,SAAS,EAAE;EACpB,SAAS,EAAE,WAAW,EAAE;EACxB,UAAUF,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,OAAO;EACtD,UAAUA,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,OAAO;EACvD;;AAEH,SAAS,EAAG,GAAG,GAAG,GAAG;AACnB,QAAO,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;AAE1C,SAAS,EAAE,GAAG,GAAG;AACf,KAAI,MAAM,EAAG,QAAO,CAAC;AACrB,KAAI,KAAK,KAAK,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU;EAC1D,IAAM,IAAI,MAAM,QAAQ,EAAE,EAAE,IAAI,MAAM,QAAQ,EAAE,EAC5C,GAAG,GAAG;AACV,MAAI,KAAK,GAAG;AACV,OAAI,IAAI,EAAE,QAAQ,MAAM,EAAE,OAAQ,QAAO,CAAC;AAC1C,QAAK,IAAI,GAAG,QAAQ,GAAK,KAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO,CAAC;AACrD,UAAO,CAAC;;AAEV,MAAI,MAAM,EAAG,QAAO,CAAC;EACrB,IAAM,IAAI,aAAa,MAAM,IAAI,aAAa;AAC9C,MAAI,MAAM,EAAG,QAAO,CAAC;AACrB,MAAI,KAAK,EAAG,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;EAC9C,IAAM,IAAI,aAAa,QAAQ,IAAI,aAAa;AAChD,MAAI,MAAM,EAAG,QAAO,CAAC;AACrB,MAAI,KAAK,EAAG,QAAO,EAAE,UAAU,KAAK,EAAE,UAAU;EAChD,IAAM,IAAI,OAAO,KAAK,EAAE;AACxB,MAAI,IAAI,EAAE,QAAQ,MAAM,OAAO,KAAK,EAAE,CAAC,OAAQ,QAAO,CAAC;AACvD,OAAK,IAAI,GAAG,QAAQ,GAAK,KAAI,CAAC,OAAO,OAAO,GAAG,EAAE,GAAG,CAAE,QAAO,CAAC;AAC9D,OAAK,IAAI,GAAG,QAAQ,GAClB,KAAI,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO,CAAC;AACxC,SAAO,CAAC;;AAEV,QAAO,OAAO,MAAM,EAAE,IAAI,OAAO,MAAM,EAAE;;AAE3C,SAAS,EAAE,GAAG,GAAG;AACf,KAAI,KAAK,OAAO,KAAK,EAAE,CAAC,UAAU,EAAG,KAAI,EAAE,SAAS,IAAI,EAAE;EACxD,IAAM,IAAI,EAAE,MAAM,IAAI,EAClB,IAAI;AACR,OAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAI,GAAG,EAAE,GAAG;AACxC,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,EAAE,EAAE;;AAEV,SAAO;OAEP,QAAO,EAAE;KACN,QAAO;;AAEd,SAAS,GAAG,GAAG,GAAG;AAChB,KAAI,KAAK,QAAQ,KAAK,EAAE;OACjB,IAAM,KAAK,EAAG,KAAI,EAAG,GAAG,EAAE,CAAE,QAAO,CAAC;;AAE3C,QAAO,CAAC;;AAEV,SAAS,GAAG,GAAG;AACb,QAAO,OAAO,KAAK;;AAErB,SAAS,EAAE,GAAG;AACZ,QAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG;;AAE/D,SAAS,GAAG,GAAG,GAAG;CAChB,IAAM,IAAIA,QAAQG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAIH,QAAQ,EAAE,EAAE,MAAM,aAAa,CAAC,EAAE,IAAIA,QAAQ,EAAE,EAAE,MAAM,WAAW,CAAC,EAAE,IAAIA,QAAQ,EAAE,MAAM,aAAa,EAAE,IAAIA,QAAQ,EAAE,MAAM,UAAU,EAAE,IAAIA,QAAQ,CAAC,EAAE,EAAE,MAAM,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAIA,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAIA,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAIA,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAIA,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM;AACrgB,QAAO;EACL,uBAAuB;EACvB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,eAAeA,SAAS;GACtB,YAAY,EAAE,MAAM;GACpB,OAAO,EAAE,MAAM;GACf,SAAS,EAAE,MAAM;GACjB,SAAS,EAAE,MAAM;GAClB,EAAE;EACH,UAAUI,EAAE;GACV,MAAM;GACN,OAAO,EAAE,KAAK;IACZ,MAAM;IACN,SAAS;IACV,EAAE;GACH,QAAQ;AACN,WAAO;KACL,WAAW;KACX,cAAc;KACd,YAAY;KACZ,cAAc;KACd,WAAW;KACX,uBAAuB;KACvB,qBAAqB;KACrB,uBAAuB;KACvB,oBAAoB;KACrB;;GAEH,SAAS;AACP,QAAI,KAAK,WAAW;KAClB,IAAI;AACJ,YAAO,KAAK,0BAA0B,IAAI,UAAU,KAAK,wBAAwB,IAAI,WAAW,KAAK,wBAAwBC,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,WAAW,IAAI,KAAK,aAAa,GAAG,KAAK,wBAAwBA,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,WAAW,IAAI,KAAK,OAAO,WAAW,KAAK,aAAa,GAAG,KAAK,sBAAsBA,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,SAAS,IAAI,KAAK,WAAW,GAAGA,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,QAAQ,IAAI,KAAK,OAAO,QAAQ,KAAK,UAAU;;AAEzf,WAAO;;GAEV,CAAC;EACH;;AAEH,SAAS,KAAK;AACZ,QAAON,EAAE,GAAI,KAAK,EAAE;;AAEtB,SAAS,GAAG,GAAG,GAAG,GAAG;CACnB,IAAM,IAAI,IAAI,EAAE,IAAIC,QAAQ;AAC1B,MAAI,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,IAC9B,QAAO,EAAE,SAAS,MAAM;GAC1B;AACF,QAAOA,QAAQ;AACb,MAAI,EAAE,UAAU,KAAK,EAAG,QAAO;EAC/B,IAAM,IAAI,EAAE,OAAO,IAAI,GAAG,IAAI;AAC9B,SAAO,OAAO,KAAK,EAAE,CAAC,QAAQ,GAAG,MAAM;GACrC,IAAM,IAAI,EAAE;AACZ,OAAI,EAAE,KAAK,GAAG,KAAK,GAAG;AACpB,QAAI,MAAM,QAAQ,EAAE,GAAG,EAAE;KACvB,IAAM,IAAI,EAAE;AACZ,OAAE,UAAU,EAAE,OAAO,MAAM,EAAE,KAAK,EAAE;;AAEtC,QAAI,OAAO,EAAE,MAAM,YAAY;KAC7B,IAAM,IAAI,EAAE;AACZ,QAAG,KAAK,MAAM,EAAE,KAAK,EAAE;;AAEzB,QAAI,OAAO,EAAE,MAAM,UAAU;KAC3B,IAAI,IAAI,EAAE,GAAG;AACb,YAAO,KAAK,eAAe,IAAI,GAAG,GAAG,OAAO,KAAK,WAAW,KAAK,UAAU,EAAE,KAAK,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE;;;AAGhJ,UAAO;KACN,EAAE,CAAC;GACN;;AAEJ,SAAS,GAAG,GAAG;AACb,QAAOA,QAAQ,OAAO,GAAG,SAASM,GAAI,CAAC,CAAC;;AAE1C,SAAS,GAAG,GAAG,GAAG,GAAG;AACnB,QAAON,QAAQ;EACb,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,GAAG,SAAS,WAAW,EAAE,MAAM,MAAM,IAAI,GAAG,GAAG;AACjF,SAAO,KAAK,MAAM,QAAQ,EAAE,IAAI,EAAE,SAAS,MAAM;AAC/C,SAAM,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC;IACzB,EAAE,KAAK,OAAO,KAAK,EAAE,MAAM,CAAC,SAAS,MAAM;AAC3C,KAAE,GAAG,EAAE,IAAI,OAAOO,EAAE,EAAE,MAAM,GAAG;IAC/B,EAAE;GACJ;;AAEJ,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EA0FG,KA1FiDH,kBAAE;CAA7C,MAAM;CAEd,OAAO;CACP,OAAO;CACP,MAAM,GAAG,EAAE,MAAM,KAAK;EACpB,IAAM,IAAI,GAAG,IAAI,GAAG,IAAII,GAAI,EAAE,IAAI,GAAG,cAAc,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,eAAe,GAAG,WAAW,MAAM,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,IAAIR,QAAQ,GAAG,EAAE,MAAM,OAAO,EAAE,IAAKA,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS,EAAE,IAAIS,IAAI,EAAE,IAAIT,QAAQ,EAAE,mBAAmB,KAAK,KAAK,CAAC,EAAE,MAAM,EAAE,IAAIA,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAKA,QAAQ;AAC/X,OAAI,EAAE,UAAU,CAAC,EAAG,QAAO,CAAC;AAC5B,OAAI,EAAE,UAAU,CAAC,EAAG,QAAO,CAAC;IAC5B,EAAE,IAAIA,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,EAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAIA,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAKA,QAAQ;AACnN,OAAI,CAAC,EAAE,MACL,QAAO;IACL;IACA;IACA;IACD,CAAC,SAAS,OAAO,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC;IAC1C,EAAE,IAAIA,EAAE;GACR,MAAM;AACJ,WAAO,EAAE;;GAEX,IAAI,GAAG;AACL,QAAI,EAAE,MAAO,GAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE;aAC9B,MAAM,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO;KAC1C,IAAM,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAChE,SAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE;UACnD,GAAE,QAAQ,IAAI,EAAE,QAAQ,KAAK;AACpC,MAAE,UAAU,EAAE;;GAEjB,CAAC,EAAE,EAAE,WAAW,MAAOE,EAAE,EAAE,EAAE,IAAK,GAAG,eAAe,GAAIF,SAAS;GAChE,QAAQ,EAAE;GACV,OAAO,EAAE;GACT,SAAS,EAAE;GACX,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,eAAe,EAAE;GAClB,EAAE,CAAC;AACJ,UAAS;AACP,KAAE,SAAS,MAAM,QAAQ,EAAE,MAAM,IAAI,QAAQ,KAAK,gFAAgF;IAClI,EAAEU,QAAS,EAAE,QAAQ,MAAM;AAC3B,OAAI,EAAE,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,gBAAgB,CAAC;IAC1D,EAAEC,QAAS;AACX,KAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;IACrC;EACF,IAAM,EAAE,UAAU,GAAI,oBAAoB,GAAI,uBAAuB,GAAI,eAAe,MAAM,GAAG,GAAG,EAAE;AACtG,UAAQ,GAAG,OAAOC,IAAI,EAAEC,GAAG,SAAS;GAClC,OAAOC,EAAGP,EAAE,EAAG,CAAC;GAChB,KAAKA,EAAE,EAAE;GACV,EAAE;GACDQ,GAAGC,GAAG,SAAS;IACb,IAAIT,EAAE,EAAE;IACR,SAAS;IACT,KAAK;IACL,uBAAuB,AAAS,EAAE,QAAM,MAAMJ,EAAE,EAAE,GAAG,EAAE,QAAQ,IAAI;IACnE,MAAM;IACN,OAAO;IACP,MAAM,EAAE;IACR,UAAUI,EAAE,EAAE;IACd,OAAOA,EAAE,EAAG;IACZ,UAAUA,EAAE,EAAG;IACf,gBAAgBA,EAAE,EAAG;IACrB,oBAAoBA,EAAE,EAAG,GAAGA,EAAE,EAAE,GAAG,KAAK;IACxC,qBAAqBA,EAAE,EAAG,GAAGA,EAAE,EAAE,GAAG,KAAK;IAC1C,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,CAACU,IAAIV,EAAE,EAAE,CAAC,CAAC,CAAC;GAC9BW,EAAE,EAAE,QAAQ,WAAW,EAAE,OAAOX,EAAE,EAAE,EAAE,QAAQ,CAACY,EAAGC,EAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;GACnEC,GAAGd,EAAE,EAAG,EAAE;IACR,IAAIA,EAAE,EAAE;IACR,OAAO;IACR,EAAEe,EAAG,EAAE,GAAG,GAAG,EAAE;IACd,EAAE,OAAO,OAAO;KACd,MAAM;KACN,IAAIC,QAAQ,CAACL,EAAE,EAAE,QAAQ,QAAQM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C,KAAK;KACN,GAAG,KAAK;IACT,EAAE,OAAO,UAAU;KACjB,MAAM;KACN,IAAIgB,QAAQ,CAACL,EAAE,EAAE,QAAQ,WAAWM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD,KAAK;KACN,GAAG,KAAK;IACT,EAAE,OAAO,QAAQ;KACf,MAAM;KACN,IAAIgB,QAAQ,CAACL,EAAE,EAAE,QAAQ,SAASM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C,KAAK;KACN,GAAG,KAAK;IACT,EAAE,OAAO,UAAU;KACjB,MAAM;KACN,IAAIgB,QAAQ,CAACL,EAAE,EAAE,QAAQ,WAAWM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD,KAAK;KACN,GAAG,KAAK;IACV,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;GAClB,EAAE,IAAI,GAAG;;CAEb,CAAU"}
|
|
1
|
+
{"version":3,"file":"VvCheckbox.es-ohF87NOe.js","names":["Q","n","Ne","Z","X","z","I","Ie","v","Pe","Se","Ce","he","me","fe","ge","_e","ce","Le","m","be","Oe","ye","pe","L","P","N"],"sources":["../../../../node_modules/.pnpm/@volverjs+ui-vue@0.0.13-beta.8_@volverjs+style@0.1.24-beta.3_@vueuse+core@14.3.0_vue@3._b0d461e87ded044697d58df431d5928d/node_modules/@volverjs/ui-vue/dist/components/VvCheckbox/VvCheckbox.es.js"],"sourcesContent":["import { computed as n, createElementBlock as fe, createElementVNode as ce, createSlots as pe, createTextVNode as be, createVNode as ye, defineComponent as z, guardReactiveProps as N, h as I, inject as Q, isRef as X, normalizeClass as ge, normalizeProps as P, onMounted as he, openBlock as me, ref as Se, renderSlot as m, toDisplayString as Oe, toRef as Ne, toRefs as Z, unref as v, useId as Ie, useSlots as Pe, vModelCheckbox as Le, watch as Ce, watchEffect as Be, withCtx as L, withDirectives as _e } from \"vue\";\nvar H = /* @__PURE__ */ (function(e) {\n return e.local = \"local\", e.session = \"session\", e;\n})({}), Ae = /* @__PURE__ */ (function(e) {\n return e.absolute = \"absolute\", e.fixed = \"fixed\", e;\n})({}), Y = /* @__PURE__ */ (function(e) {\n return e.left = \"left\", e.right = \"right\", e.top = \"top\", e.bottom = \"bottom\", e;\n})({}), Ee = /* @__PURE__ */ (function(e) {\n return e.topStart = \"top-start\", e.topEnd = \"top-end\", e.bottomStart = \"bottom-start\", e.bottomEnd = \"bottom-end\", e.leftStart = \"left-start\", e.leftEnd = \"left-end\", e.rightStart = \"right-start\", e.rightEnd = \"right-end\", e;\n})({}), F = /* @__PURE__ */ (function(e) {\n return e.before = \"before\", e.after = \"after\", e;\n})({}), U = /* @__PURE__ */ (function(e) {\n return e.button = \"button\", e.submit = \"submit\", e.reset = \"reset\", e;\n})({}), Ve = /* @__PURE__ */ (function(e) {\n return e.nuxtLink = \"nuxt-link\", e.routerLink = \"router-link\", e.a = \"a\", e.button = \"button\", e;\n})({}), je = /* @__PURE__ */ Symbol.for(\"volver\");\nvar ke = /* @__PURE__ */ Symbol.for(\"checkGroup\");\nvar Re = {\n showPassword: \"eye-on\",\n hidePassword: \"eye-off\",\n showDatePicker: \"calendar\",\n showTimePicker: \"time\",\n showColorPicker: \"color\",\n clear: \"close\",\n add: \"add\",\n remove: \"trash\",\n edit: \"edit\",\n download: \"download\"\n}, we = /* @__PURE__ */ (function(e) {\n return e.simple = \"simple\", e.normal = \"normal\", e.detailed = \"detailed\", e;\n})({}), dt = { prefix: we.normal }, De = {\n to: { type: [String, Object] },\n href: String,\n target: String,\n rel: {\n type: String,\n default: \"noopener noreferrer\"\n }\n}, k = {\n valid: {\n type: Boolean,\n default: !1\n },\n validLabel: {\n type: [String, Array],\n default: void 0\n }\n}, R = {\n invalid: {\n type: Boolean,\n default: !1\n },\n invalidLabel: {\n type: [String, Array],\n default: void 0\n }\n}, w = {\n loading: {\n type: Boolean,\n default: !1\n },\n loadingLabel: {\n type: String,\n default: \"Loading...\"\n }\n}, C = { disabled: {\n type: Boolean,\n default: !1\n} }, ee = { required: {\n type: Boolean,\n default: !1\n} }, $e = { active: {\n type: Boolean,\n default: !1\n} }, xe = { current: {\n type: Boolean,\n default: !1\n} }, vt = {\n showClearAction: {\n type: Boolean,\n default: !1\n },\n iconClear: {\n type: [String, Object],\n default: Re.clear\n },\n labelClear: {\n type: String,\n default: \"Clear\"\n }\n}, Ge = { pressed: {\n type: Boolean,\n default: !1\n} }, B = { label: {\n type: [String, Number],\n default: void 0\n} }, D = { readonly: {\n type: Boolean,\n default: !1\n} }, _ = { modifiers: {\n type: [String, Array],\n default: void 0\n} }, $ = { hintLabel: {\n type: String,\n default: \"\"\n} }, Te = {\n options: {\n type: Array,\n default: () => []\n },\n labelKey: {\n type: [String, Function],\n default: \"label\"\n },\n valueKey: {\n type: [String, Function],\n default: \"value\"\n },\n disabledKey: {\n type: [String, Function],\n default: \"disabled\"\n }\n}, Ke = { count: {\n type: [Boolean, String],\n default: !1,\n validator: (e) => [\n !0,\n !1,\n \"limit\",\n \"countdown\"\n ].includes(e)\n} }, Je = { debounce: {\n type: [Number, String],\n default: void 0\n} }, He = {\n icon: {\n type: [String, Object],\n default: void 0\n },\n iconPosition: {\n type: String,\n default: F.before,\n validation: (e) => Object.values(F).includes(e)\n }\n}, te = { tabindex: {\n type: [String, Number],\n default: 0\n} }, Ye = { floating: {\n type: Boolean,\n default: !1\n} }, Fe = { id: [String, Number] }, ft = {\n placement: {\n type: String,\n default: Y.bottom,\n validator: (e) => Object.values(Y).includes(e) || Object.values(Ee).includes(e)\n },\n strategy: {\n type: String,\n default: void 0,\n validator: (e) => Object.values(Ae).includes(e)\n },\n transitionName: {\n type: String,\n default: void 0\n },\n offset: {\n type: [\n Number,\n String,\n Object\n ],\n default: 0\n },\n shift: {\n type: [Boolean, Object],\n default: !1\n },\n flip: {\n type: [Boolean, Object],\n default: !0\n },\n size: {\n type: [Boolean, Object],\n default: () => ({ padding: 10 })\n },\n autoPlacement: {\n type: [Boolean, Object],\n default: !1\n },\n arrow: {\n type: Boolean,\n default: !1\n },\n keepOpen: {\n type: Boolean,\n default: !1\n },\n autofocusFirst: {\n type: Boolean,\n default: !0\n },\n triggerWidth: {\n type: Boolean,\n default: !1\n }\n}, ae = {\n ...Fe,\n name: {\n type: String,\n required: !0\n }\n}, Ue = { autofocus: {\n type: Boolean,\n default: !1\n} }, qe = { autocomplete: {\n type: String,\n default: \"off\"\n} }, ct = {\n ...ae,\n ...Ue,\n ...qe,\n ...te,\n ...C,\n ...D,\n ...k,\n ...R,\n ...$,\n ...w,\n ..._,\n ...Ke,\n ...Je,\n ...He,\n ...Ye,\n ...B,\n minlength: {\n type: [String, Number],\n default: void 0\n },\n maxlength: {\n type: [String, Number],\n default: void 0\n },\n placeholder: {\n type: String,\n default: void 0\n },\n ...ee\n}, Me = {\n ...ae,\n ...te,\n ...k,\n ...R,\n ...$,\n ...C,\n ...D,\n ..._,\n ...B,\n ...w,\n value: {\n type: [\n String,\n Number,\n Boolean\n ],\n default: void 0\n },\n modelValue: {\n type: [\n Object,\n Number,\n Boolean,\n String\n ],\n default: void 0\n }\n}, pt = {\n ...k,\n ...R,\n ...Te,\n ...$,\n ...C,\n ...D,\n ..._,\n ...B,\n ...w,\n ...ee,\n modelValue: {\n type: [\n String,\n Array,\n Boolean,\n Number,\n Symbol\n ],\n default: void 0\n },\n name: {\n type: String,\n required: !0\n },\n vertical: {\n type: Boolean,\n default: !1\n }\n}, bt = {\n ...C,\n ...B,\n ...Ge,\n ...$e,\n ...xe,\n ...De,\n type: {\n type: String,\n default: U.button,\n validator: (e) => Object.values(U).includes(e)\n },\n ariaLabel: {\n type: String,\n default: void 0\n },\n defaultTag: {\n type: String,\n default: Ve.button\n }\n}, yt = {\n storageType: {\n type: String,\n default: H.local,\n validator: (e) => Object.values(H).includes(e)\n },\n storageKey: String\n};\nfunction We(e) {\n const a = Q(e, void 0), t = n(() => a !== void 0);\n function i(r, o, u) {\n const s = a?.[r];\n if (s) return n({\n get() {\n return s.value;\n },\n set(l) {\n s.value = l;\n }\n });\n const d = Ne(o, r);\n return n({\n get() {\n return d.value;\n },\n set(l) {\n u && u(`update:${r}`, l);\n }\n });\n }\n return {\n group: a,\n isInGroup: t,\n getGroupOrLocalRef: i\n };\n}\nvar q = {\n ...Me,\n ..._,\n indeterminate: Boolean,\n uncheckedValue: [\n String,\n Number,\n Boolean\n ],\n switch: Boolean\n}, ze = [\n \"click\",\n \"update:modelValue\",\n \"change\",\n \"blur\"\n];\nfunction Qe(e, a) {\n const { group: t, isInGroup: i, getGroupOrLocalRef: r } = We(ke), { id: o, switch: u, indeterminate: s } = Z(e);\n return {\n id: o,\n propsSwitch: u,\n indeterminate: s,\n group: t,\n isInGroup: i,\n modelValue: r(\"modelValue\", e, a),\n valid: r(\"valid\", e),\n invalid: r(\"invalid\", e),\n readonly: n(() => !!(e.readonly || t?.readonly.value)),\n disabled: n(() => !!(e.disabled || t?.disabled.value))\n };\n}\nfunction re(e, a, t) {\n return t ? M(e, t) === M(a, t) : j(e, a);\n}\nfunction j(e, a) {\n if (e === a) return !0;\n if (e && a && typeof e == \"object\" && typeof a == \"object\") {\n const t = Array.isArray(e), i = Array.isArray(a);\n let r, o, u;\n if (t && i) {\n if (o = e.length, o !== a.length) return !1;\n for (r = o; r-- !== 0; ) if (!j(e[r], a[r])) return !1;\n return !0;\n }\n if (t !== i) return !1;\n const s = e instanceof Date, d = a instanceof Date;\n if (s !== d) return !1;\n if (s && d) return e.getTime() === a.getTime();\n const l = e instanceof RegExp, b = a instanceof RegExp;\n if (l !== b) return !1;\n if (l && b) return e.toString() === a.toString();\n const f = Object.keys(e);\n if (o = f.length, o !== Object.keys(a).length) return !1;\n for (r = o; r-- !== 0; ) if (!Object.hasOwn(a, f[r])) return !1;\n for (r = o; r-- !== 0; )\n if (u = f[r], !j(e[u], a[u])) return !1;\n return !0;\n }\n return Number.isNaN(e) && Number.isNaN(a);\n}\nfunction M(e, a) {\n if (e && Object.keys(e).length && a) if (a.includes(\".\")) {\n const t = a.split(\".\");\n let i = e;\n for (let r = 0, o = t.length; r < o; ++r) {\n if (e == null) return null;\n i = i[t[r]];\n }\n return i;\n } else\n return e[a];\n else return null;\n}\nfunction Xe(e, a) {\n if (e != null && a && a.length) {\n for (const t of a) if (re(e, t)) return !0;\n }\n return !1;\n}\nfunction Ze(e) {\n return typeof e == \"string\";\n}\nfunction W(e) {\n return Array.isArray(e) ? e.filter((a) => Ze(a)).join(\" \") : e;\n}\nfunction et(e, a) {\n const t = n(() => X(e) ? e.value : e), i = n(() => W(t.value.invalidLabel)), r = n(() => W(t.value.validLabel)), o = n(() => t.value.loadingLabel), u = n(() => t.value.hintLabel), s = n(() => !!(t.value.loading && (a.loading || o.value))), d = n(() => !s.value && !!(t.value.invalid && (a.invalid || i.value))), l = n(() => !s.value && !d.value && !!(t.value.valid && (a.valid || r.value))), b = n(() => !s.value && !d.value && !l.value && !!(a.hint || u.value)), f = n(() => d.value || l.value || s.value || b.value);\n return {\n hasInvalidLabelOrSlot: d,\n hasHintLabelOrSlot: b,\n hasValidLabelOrSlot: l,\n hasLoadingLabelOrSlot: s,\n hintSlotScope: n(() => ({\n modelValue: t.value.modelValue,\n valid: t.value.valid,\n invalid: t.value.invalid,\n loading: t.value.loading\n })),\n HintSlot: z({\n name: \"HintSlot\",\n props: { tag: {\n type: String,\n default: \"small\"\n } },\n setup() {\n return {\n isVisible: f,\n invalidLabel: i,\n validLabel: r,\n loadingLabel: o,\n hintLabel: u,\n hasInvalidLabelOrSlot: d,\n hasValidLabelOrSlot: l,\n hasLoadingLabelOrSlot: s,\n hasHintLabelOrSlot: b\n };\n },\n render() {\n if (this.isVisible) {\n let c;\n return this.hasInvalidLabelOrSlot && (c = \"alert\"), this.hasValidLabelOrSlot && (c = \"status\"), this.hasLoadingLabelOrSlot ? I(this.tag, { role: c }, this.$slots.loading?.() ?? this.loadingLabel) : this.hasInvalidLabelOrSlot ? I(this.tag, { role: c }, this.$slots.invalid?.() ?? this.$slots.invalid ?? this.invalidLabel) : this.hasValidLabelOrSlot ? I(this.tag, { role: c }, this.$slots.valid?.() ?? this.validLabel) : I(this.tag, { role: c }, this.$slots.hint?.() ?? this.$slots.hint ?? this.hintLabel);\n }\n return null;\n }\n })\n };\n}\nfunction tt() {\n return Q(je, void 0);\n}\nfunction at(e, a, t) {\n const i = tt(), r = n(() => {\n if (!(!i || !i.defaults.value?.[e]))\n return i.defaults.value[e];\n });\n return n(() => {\n if (r.value === void 0) return t;\n const o = r.value, u = a, s = t;\n return Object.keys(u).reduce((d, l) => {\n const b = s[l];\n if (d[l] = b, l in o) {\n if (Array.isArray(u[l])) {\n const f = u[l];\n f.length && f[0] === b && (d[l] = o[l]);\n }\n if (typeof u[l] == \"function\") {\n const f = u[l];\n f() === b && (d[l] = o[l]);\n }\n if (typeof u[l] == \"object\") {\n let f = u[l].default;\n typeof f == \"function\" && (f = f()), typeof f == \"object\" ? JSON.stringify(f) === JSON.stringify(b) && (d[l] = o[l]) : f === b && (d[l] = o[l]);\n }\n }\n return d;\n }, {});\n });\n}\nfunction rt(e) {\n return n(() => String(e?.value || Ie()));\n}\nfunction lt(e, a, t) {\n return n(() => {\n const i = { [e]: !0 }, r = typeof a?.value == \"string\" ? a.value.split(\" \") : a?.value;\n return r && Array.isArray(r) && r.forEach((o) => {\n o && (i[`${e}--${o}`] = !0);\n }), t && Object.keys(t.value).forEach((o) => {\n i[`${e}--${o}`] = v(t.value[o]);\n }), i;\n });\n}\nvar ot = [\"for\"], nt = [\n \"id\",\n \"name\",\n \"disabled\",\n \"value\",\n \"tabindex\",\n \"aria-invalid\",\n \"aria-describedby\",\n \"aria-errormessage\"\n], it = { name: \"VvCheckbox\" }, ut = /* @__PURE__ */ z({\n ...it,\n props: q,\n emits: ze,\n setup(e, { emit: a }) {\n const t = e, i = a, r = Pe(), o = at(\"VvCheckbox\", q, t), { id: u, disabled: s, readonly: d, valid: l, invalid: b, propsSwitch: f, modelValue: c, indeterminate: x, isInGroup: G } = Qe(t, i), A = rt(u), E = n(() => `${A.value}-hint`), le = n(() => T.value ? -1 : t.tabindex), S = Se(), g = n(() => t.uncheckedValue !== void 0 && !G.value), T = n(() => s.value || d.value), oe = n(() => {\n if (b.value === !0) return !0;\n if (l.value === !0) return !1;\n }), K = n(() => g.value ? c.value === t.value : Array.isArray(c.value) ? Xe(t.value, c.value) : re(t.value, c.value)), J = n(() => !!(x.value || !K.value && g.value && t.uncheckedValue !== c.value)), ne = n(() => {\n if (!g.value)\n return [\n \"string\",\n \"number\",\n \"boolean\"\n ].includes(typeof t.value) ? t.value : !0;\n }), V = n({\n get() {\n return K.value;\n },\n set(p) {\n if (g.value) c.value = p ? t.value : t.uncheckedValue;\n else if (Array.isArray(c.value) || G.value) {\n const y = c.value ?? [], h = new Set(Array.isArray(y) ? y : [y]);\n p ? h.add(t.value) : h.delete(t.value), c.value = [...h];\n } else c.value = p ? t.value : void 0;\n i(\"change\", p);\n }\n }), { modifiers: ie } = Z(t), ue = lt(\"vv-checkbox\", ie, n(() => ({\n switch: f.value,\n valid: l.value,\n invalid: b.value,\n disabled: s.value,\n readonly: d.value,\n indeterminate: x.value\n })));\n Be(() => {\n g.value && Array.isArray(c.value) && console.warn(\"[VvCheckbox] The model value is an array but the component is in binary mode.\");\n }), Ce(() => J.value, (p) => {\n p ? S.value.indeterminate = !0 : S.value.indeterminate = !1;\n }), he(() => {\n J.value && (S.value.indeterminate = !0);\n });\n const { HintSlot: se, hasHintLabelOrSlot: de, hasInvalidLabelOrSlot: ve, hintSlotScope: O } = et(o, r);\n return (p, y) => (me(), fe(\"label\", {\n class: ge(v(ue)),\n for: v(A)\n }, [\n _e(ce(\"input\", {\n id: v(A),\n ref_key: \"input\",\n ref: S,\n \"onUpdate:modelValue\": y[0] || (y[0] = (h) => X(V) ? V.value = h : null),\n type: \"checkbox\",\n class: \"vv-checkbox__input\",\n name: p.name,\n disabled: v(T),\n value: v(ne),\n tabindex: v(le),\n \"aria-invalid\": v(oe),\n \"aria-describedby\": v(de) ? v(E) : void 0,\n \"aria-errormessage\": v(ve) ? v(E) : void 0\n }, null, 8, nt), [[Le, v(V)]]),\n m(p.$slots, \"default\", { value: v(c) }, () => [be(Oe(p.label), 1)]),\n ye(v(se), {\n id: v(E),\n class: \"vv-checkbox__hint\"\n }, pe({ _: 2 }, [\n p.$slots.hint ? {\n name: \"hint\",\n fn: L(() => [m(p.$slots, \"hint\", P(N(v(O))))]),\n key: \"0\"\n } : void 0,\n p.$slots.loading ? {\n name: \"loading\",\n fn: L(() => [m(p.$slots, \"loading\", P(N(v(O))))]),\n key: \"1\"\n } : void 0,\n p.$slots.valid ? {\n name: \"valid\",\n fn: L(() => [m(p.$slots, \"valid\", P(N(v(O))))]),\n key: \"2\"\n } : void 0,\n p.$slots.invalid ? {\n name: \"invalid\",\n fn: L(() => [m(p.$slots, \"invalid\", P(N(v(O))))]),\n key: \"3\"\n } : void 0\n ]), 1032, [\"id\"])\n ], 10, ot));\n }\n}), gt = ut;\nexport {\n gt as default\n};\n"],"x_google_ignoreList":[0],"mappings":";;AACA,IAAI,IAAoB,iBAAC,SAAS,GAAG;AACnC,QAAO,EAAE,QAAQ,SAAS,EAAE,UAAU,WAAW;GAChD,EAAE,CAAC,EAEE,IAAoB,iBAAC,SAAS,GAAG;AACvC,QAAO,EAAE,OAAO,QAAQ,EAAE,QAAQ,SAAS,EAAE,MAAM,OAAO,EAAE,SAAS,UAAU;GAC9E,EAAE,CAAC,EAEE,IAAoB,iBAAC,SAAS,GAAG;AACvC,QAAO,EAAE,SAAS,UAAU,EAAE,QAAQ,SAAS;GAC9C,EAAE,CAAC,EAAE,IAAoB,iBAAC,SAAS,GAAG;AACvC,QAAO,EAAE,SAAS,UAAU,EAAE,SAAS,UAAU,EAAE,QAAQ,SAAS;GACnE,EAAE,CAAC,EAAE,IAAqB,iBAAC,SAAS,GAAG;AACxC,QAAO,EAAE,WAAW,aAAa,EAAE,aAAa,eAAe,EAAE,IAAI,KAAK,EAAE,SAAS,UAAU;GAC9F,EAAE,CAAC,EAAE,IAAqB,uBAAO,IAAI,SAAS,EAC7C,IAAqB,uBAAO,IAAI,aAAa,EAC7C,IAAK;CACP,cAAc;CACd,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CACjB,OAAO;CACP,KAAK;CACL,QAAQ;CACR,MAAM;CACN,UAAU;CACX;CAEsB,iBAFE,SAAS,GAAG;AACnC,QAAO,EAAE,SAAS,UAAU,EAAE,SAAS,UAAU,EAAE,WAAW,YAAY;GACzE,EAAE,CAAoB,EAAC;AAb1B,IAaoC,IAAK;CACvC,IAAI,EAAE,MAAM,CAAC,QAAQ,OAAO,EAAE;CAC9B,MAAM;CACN,QAAQ;CACR,KAAK;EACH,MAAM;EACN,SAAS;EACV;CACF,EAAE,IAAI;CACL,OAAO;EACL,MAAM;EACN,SAAS,CAAC;EACX;CACD,YAAY;EACV,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS,KAAK;EACf;CACF,EAAE,IAAI;CACL,SAAS;EACP,MAAM;EACN,SAAS,CAAC;EACX;CACD,cAAc;EACZ,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS,KAAK;EACf;CACF,EAAE,IAAI;CACL,SAAS;EACP,MAAM;EACN,SAAS,CAAC;EACX;CACD,cAAc;EACZ,MAAM;EACN,SAAS;EACV;CACF,EAAE,IAAI,EAAE,UAAU;CACjB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAK,EAAE,UAAU;CACpB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAK,EAAE,QAAQ;CAClB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAK,EAAE,SAAS;CACnB,MAAM;CACN,SAAS,CAAC;CACX,EAAE;AAOU,EAAG;AAnEhB,IAyEG,IAAK,EAAE,SAAS;CACjB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAI,EAAE,OAAO;CAChB,MAAM,CAAC,QAAQ,OAAO;CACtB,SAAS,KAAK;CACf,EAAE,EAAE,IAAI,EAAE,UAAU;CACnB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,IAAI,EAAE,WAAW;CACpB,MAAM,CAAC,QAAQ,MAAM;CACrB,SAAS,KAAK;CACf,EAAE,EAAE,IAAI,EAAE,WAAW;CACpB,MAAM;CACN,SAAS;CACV,EAAE,EAAE,IAAK;CACR,SAAS;EACP,MAAM;EACN,eAAe,EAAE;EAClB;CACD,UAAU;EACR,MAAM,CAAC,QAAQ,SAAS;EACxB,SAAS;EACV;CACD,UAAU;EACR,MAAM,CAAC,QAAQ,SAAS;EACxB,SAAS;EACV;CACD,aAAa;EACX,MAAM,CAAC,QAAQ,SAAS;EACxB,SAAS;EACV;CACF,EAAE,IAAK,EAAE,OAAO;CACf,MAAM,CAAC,SAAS,OAAO;CACvB,SAAS,CAAC;CACV,YAAY,MAAM;EAChB,CAAC;EACD,CAAC;EACD;EACA;EACD,CAAC,SAAS,EAAE;CACd,EAAE,EAAE,IAAK,EAAE,UAAU;CACpB,MAAM,CAAC,QAAQ,OAAO;CACtB,SAAS,KAAK;CACf,EAAE,EAAE,IAAK;CACR,MAAM;EACJ,MAAM,CAAC,QAAQ,OAAO;EACtB,SAAS,KAAK;EACf;CACD,cAAc;EACZ,MAAM;EACN,SAAS,EAAE;EACX,aAAa,MAAM,OAAO,OAAO,EAAE,CAAC,SAAS,EAAE;EAChD;CACF,EAAE,IAAK,EAAE,UAAU;CAClB,MAAM,CAAC,QAAQ,OAAO;CACtB,SAAS;CACV,EAAE,EAAE,IAAK,EAAE,UAAU;CACpB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,OAAO,EAAE;AAGrB,EAAE;AAxIf,IA4LG,IAAK;CACN,GAAG;CACH,MAAM;EACJ,MAAM;EACN,UAAU,CAAC;EACZ;CACF,EAAE,KAAK,EAAE,WAAW;CACnB,MAAM;CACN,SAAS,CAAC;CACX,EAAE,EAAE,KAAK,EAAE,cAAc;CACxB,MAAM;CACN,SAAS;CACV,EAAE;CAiBD;CAhBA,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAIF,GApBO,EA6BR,GAAG,GACJ;AAtOD,IAsOG,KAAK;CACN,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,OAAO;EACL,MAAM;GACJ;GACA;GACA;GACD;EACD,SAAS,KAAK;EACf;CACD,YAAY;EACV,MAAM;GACJ;GACA;GACA;GACA;GACD;EACD,SAAS,KAAK;EACf;CACF;CAWC;CAVA,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAUF,GAgBD;CANA,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAKF,EAFU,EAAE,QASF,EAAG,QAKH,EAAE;AAKf,SAAS,GAAG,GAAG;CACb,IAAM,IAAIA,EAAE,GAAG,KAAK,EAAE,EAAE,IAAIC,QAAQ,MAAM,KAAK,EAAE;CACjD,SAAS,EAAE,GAAG,GAAG,GAAG;EAClB,IAAM,IAAI,IAAI;AACd,MAAI,EAAG,QAAOA,EAAE;GACd,MAAM;AACJ,WAAO,EAAE;;GAEX,IAAI,GAAG;AACL,MAAE,QAAQ;;GAEb,CAAC;EACF,IAAM,IAAIC,EAAG,GAAG,EAAE;AAClB,SAAOD,EAAE;GACP,MAAM;AACJ,WAAO,EAAE;;GAEX,IAAI,GAAG;AACL,SAAK,EAAE,UAAU,KAAK,EAAE;;GAE3B,CAAC;;AAEJ,QAAO;EACL,OAAO;EACP,WAAW;EACX,oBAAoB;EACrB;;AAEH,IAAI,IAAI;CACN,GAAG;CACH,GAAG;CACH,eAAe;CACf,gBAAgB;EACd;EACA;EACA;EACD;CACD,QAAQ;CACT,EAAE,KAAK;CACN;CACA;CACA;CACA;CACD;AACD,SAAS,GAAG,GAAG,GAAG;CAChB,IAAM,EAAE,OAAO,GAAG,WAAW,GAAG,oBAAoB,MAAM,GAAG,EAAG,EAAE,EAAE,IAAI,GAAG,QAAQ,GAAG,eAAe,MAAME,EAAE,EAAE;AAC/G,QAAO;EACL,IAAI;EACJ,aAAa;EACb,eAAe;EACf,OAAO;EACP,WAAW;EACX,YAAY,EAAE,cAAc,GAAG,EAAE;EACjC,OAAO,EAAE,SAAS,EAAE;EACpB,SAAS,EAAE,WAAW,EAAE;EACxB,UAAUF,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,OAAO;EACtD,UAAUA,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,OAAO;EACvD;;AAEH,SAAS,EAAG,GAAG,GAAG,GAAG;AACnB,QAAO,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;AAE1C,SAAS,EAAE,GAAG,GAAG;AACf,KAAI,MAAM,EAAG,QAAO,CAAC;AACrB,KAAI,KAAK,KAAK,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU;EAC1D,IAAM,IAAI,MAAM,QAAQ,EAAE,EAAE,IAAI,MAAM,QAAQ,EAAE,EAC5C,GAAG,GAAG;AACV,MAAI,KAAK,GAAG;AACV,OAAI,IAAI,EAAE,QAAQ,MAAM,EAAE,OAAQ,QAAO,CAAC;AAC1C,QAAK,IAAI,GAAG,QAAQ,GAAK,KAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO,CAAC;AACrD,UAAO,CAAC;;AAEV,MAAI,MAAM,EAAG,QAAO,CAAC;EACrB,IAAM,IAAI,aAAa,MAAM,IAAI,aAAa;AAC9C,MAAI,MAAM,EAAG,QAAO,CAAC;AACrB,MAAI,KAAK,EAAG,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;EAC9C,IAAM,IAAI,aAAa,QAAQ,IAAI,aAAa;AAChD,MAAI,MAAM,EAAG,QAAO,CAAC;AACrB,MAAI,KAAK,EAAG,QAAO,EAAE,UAAU,KAAK,EAAE,UAAU;EAChD,IAAM,IAAI,OAAO,KAAK,EAAE;AACxB,MAAI,IAAI,EAAE,QAAQ,MAAM,OAAO,KAAK,EAAE,CAAC,OAAQ,QAAO,CAAC;AACvD,OAAK,IAAI,GAAG,QAAQ,GAAK,KAAI,CAAC,OAAO,OAAO,GAAG,EAAE,GAAG,CAAE,QAAO,CAAC;AAC9D,OAAK,IAAI,GAAG,QAAQ,GAClB,KAAI,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO,CAAC;AACxC,SAAO,CAAC;;AAEV,QAAO,OAAO,MAAM,EAAE,IAAI,OAAO,MAAM,EAAE;;AAE3C,SAAS,EAAE,GAAG,GAAG;AACf,KAAI,KAAK,OAAO,KAAK,EAAE,CAAC,UAAU,EAAG,KAAI,EAAE,SAAS,IAAI,EAAE;EACxD,IAAM,IAAI,EAAE,MAAM,IAAI,EAClB,IAAI;AACR,OAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAI,GAAG,EAAE,GAAG;AACxC,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,EAAE,EAAE;;AAEV,SAAO;OAEP,QAAO,EAAE;KACN,QAAO;;AAEd,SAAS,GAAG,GAAG,GAAG;AAChB,KAAI,KAAK,QAAQ,KAAK,EAAE;OACjB,IAAM,KAAK,EAAG,KAAI,EAAG,GAAG,EAAE,CAAE,QAAO,CAAC;;AAE3C,QAAO,CAAC;;AAEV,SAAS,GAAG,GAAG;AACb,QAAO,OAAO,KAAK;;AAErB,SAAS,EAAE,GAAG;AACZ,QAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG;;AAE/D,SAAS,GAAG,GAAG,GAAG;CAChB,IAAM,IAAIA,QAAQG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAIH,QAAQ,EAAE,EAAE,MAAM,aAAa,CAAC,EAAE,IAAIA,QAAQ,EAAE,EAAE,MAAM,WAAW,CAAC,EAAE,IAAIA,QAAQ,EAAE,MAAM,aAAa,EAAE,IAAIA,QAAQ,EAAE,MAAM,UAAU,EAAE,IAAIA,QAAQ,CAAC,EAAE,EAAE,MAAM,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAIA,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAIA,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAIA,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAIA,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM;AACrgB,QAAO;EACL,uBAAuB;EACvB,oBAAoB;EACpB,qBAAqB;EACrB,uBAAuB;EACvB,eAAeA,SAAS;GACtB,YAAY,EAAE,MAAM;GACpB,OAAO,EAAE,MAAM;GACf,SAAS,EAAE,MAAM;GACjB,SAAS,EAAE,MAAM;GAClB,EAAE;EACH,UAAUI,EAAE;GACV,MAAM;GACN,OAAO,EAAE,KAAK;IACZ,MAAM;IACN,SAAS;IACV,EAAE;GACH,QAAQ;AACN,WAAO;KACL,WAAW;KACX,cAAc;KACd,YAAY;KACZ,cAAc;KACd,WAAW;KACX,uBAAuB;KACvB,qBAAqB;KACrB,uBAAuB;KACvB,oBAAoB;KACrB;;GAEH,SAAS;AACP,QAAI,KAAK,WAAW;KAClB,IAAI;AACJ,YAAO,KAAK,0BAA0B,IAAI,UAAU,KAAK,wBAAwB,IAAI,WAAW,KAAK,wBAAwBC,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,WAAW,IAAI,KAAK,aAAa,GAAG,KAAK,wBAAwBA,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,WAAW,IAAI,KAAK,OAAO,WAAW,KAAK,aAAa,GAAG,KAAK,sBAAsBA,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,SAAS,IAAI,KAAK,WAAW,GAAGA,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,OAAO,QAAQ,IAAI,KAAK,OAAO,QAAQ,KAAK,UAAU;;AAEzf,WAAO;;GAEV,CAAC;EACH;;AAEH,SAAS,KAAK;AACZ,QAAON,EAAE,GAAI,KAAK,EAAE;;AAEtB,SAAS,GAAG,GAAG,GAAG,GAAG;CACnB,IAAM,IAAI,IAAI,EAAE,IAAIC,QAAQ;AAC1B,MAAI,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,IAC9B,QAAO,EAAE,SAAS,MAAM;GAC1B;AACF,QAAOA,QAAQ;AACb,MAAI,EAAE,UAAU,KAAK,EAAG,QAAO;EAC/B,IAAM,IAAI,EAAE,OAAO,IAAI,GAAG,IAAI;AAC9B,SAAO,OAAO,KAAK,EAAE,CAAC,QAAQ,GAAG,MAAM;GACrC,IAAM,IAAI,EAAE;AACZ,OAAI,EAAE,KAAK,GAAG,KAAK,GAAG;AACpB,QAAI,MAAM,QAAQ,EAAE,GAAG,EAAE;KACvB,IAAM,IAAI,EAAE;AACZ,OAAE,UAAU,EAAE,OAAO,MAAM,EAAE,KAAK,EAAE;;AAEtC,QAAI,OAAO,EAAE,MAAM,YAAY;KAC7B,IAAM,IAAI,EAAE;AACZ,QAAG,KAAK,MAAM,EAAE,KAAK,EAAE;;AAEzB,QAAI,OAAO,EAAE,MAAM,UAAU;KAC3B,IAAI,IAAI,EAAE,GAAG;AACb,YAAO,KAAK,eAAe,IAAI,GAAG,GAAG,OAAO,KAAK,WAAW,KAAK,UAAU,EAAE,KAAK,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE;;;AAGhJ,UAAO;KACN,EAAE,CAAC;GACN;;AAEJ,SAAS,GAAG,GAAG;AACb,QAAOA,QAAQ,OAAO,GAAG,SAASM,GAAI,CAAC,CAAC;;AAE1C,SAAS,GAAG,GAAG,GAAG,GAAG;AACnB,QAAON,QAAQ;EACb,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,GAAG,SAAS,WAAW,EAAE,MAAM,MAAM,IAAI,GAAG,GAAG;AACjF,SAAO,KAAK,MAAM,QAAQ,EAAE,IAAI,EAAE,SAAS,MAAM;AAC/C,SAAM,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC;IACzB,EAAE,KAAK,OAAO,KAAK,EAAE,MAAM,CAAC,SAAS,MAAM;AAC3C,KAAE,GAAG,EAAE,IAAI,OAAOO,EAAE,EAAE,MAAM,GAAG;IAC/B,EAAE;GACJ;;AAEJ,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EA0FG,KA1FiDH,kBAAE;CAA7C,MAAM;CAEd,OAAO;CACP,OAAO;CACP,MAAM,GAAG,EAAE,MAAM,KAAK;EACpB,IAAM,IAAI,GAAG,IAAI,GAAG,IAAII,GAAI,EAAE,IAAI,GAAG,cAAc,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,eAAe,GAAG,WAAW,MAAM,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,IAAIR,QAAQ,GAAG,EAAE,MAAM,OAAO,EAAE,IAAKA,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS,EAAE,IAAIS,IAAI,EAAE,IAAIT,QAAQ,EAAE,mBAAmB,KAAK,KAAK,CAAC,EAAE,MAAM,EAAE,IAAIA,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAKA,QAAQ;AAC/X,OAAI,EAAE,UAAU,CAAC,EAAG,QAAO,CAAC;AAC5B,OAAI,EAAE,UAAU,CAAC,EAAG,QAAO,CAAC;IAC5B,EAAE,IAAIA,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,EAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAIA,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAKA,QAAQ;AACnN,OAAI,CAAC,EAAE,MACL,QAAO;IACL;IACA;IACA;IACD,CAAC,SAAS,OAAO,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC;IAC1C,EAAE,IAAIA,EAAE;GACR,MAAM;AACJ,WAAO,EAAE;;GAEX,IAAI,GAAG;AACL,QAAI,EAAE,MAAO,GAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE;aAC9B,MAAM,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO;KAC1C,IAAM,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI,IAAI,MAAM,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAChE,SAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE;UACnD,GAAE,QAAQ,IAAI,EAAE,QAAQ,KAAK;AACpC,MAAE,UAAU,EAAE;;GAEjB,CAAC,EAAE,EAAE,WAAW,MAAOE,EAAE,EAAE,EAAE,IAAK,GAAG,eAAe,GAAIF,SAAS;GAChE,QAAQ,EAAE;GACV,OAAO,EAAE;GACT,SAAS,EAAE;GACX,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,eAAe,EAAE;GAClB,EAAE,CAAC;AACJ,UAAS;AACP,KAAE,SAAS,MAAM,QAAQ,EAAE,MAAM,IAAI,QAAQ,KAAK,gFAAgF;IAClI,EAAEU,QAAS,EAAE,QAAQ,MAAM;AAC3B,OAAI,EAAE,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,gBAAgB,CAAC;IAC1D,EAAEC,QAAS;AACX,KAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;IACrC;EACF,IAAM,EAAE,UAAU,GAAI,oBAAoB,GAAI,uBAAuB,GAAI,eAAe,MAAM,GAAG,GAAG,EAAE;AACtG,UAAQ,GAAG,OAAOC,IAAI,EAAEC,GAAG,SAAS;GAClC,OAAOC,EAAGP,EAAE,EAAG,CAAC;GAChB,KAAKA,EAAE,EAAE;GACV,EAAE;GACDQ,GAAGC,GAAG,SAAS;IACb,IAAIT,EAAE,EAAE;IACR,SAAS;IACT,KAAK;IACL,uBAAuB,AAAS,EAAE,QAAM,MAAMJ,EAAE,EAAE,GAAG,EAAE,QAAQ,IAAI;IACnE,MAAM;IACN,OAAO;IACP,MAAM,EAAE;IACR,UAAUI,EAAE,EAAE;IACd,OAAOA,EAAE,EAAG;IACZ,UAAUA,EAAE,EAAG;IACf,gBAAgBA,EAAE,EAAG;IACrB,oBAAoBA,EAAE,EAAG,GAAGA,EAAE,EAAE,GAAG,KAAK;IACxC,qBAAqBA,EAAE,EAAG,GAAGA,EAAE,EAAE,GAAG,KAAK;IAC1C,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,CAACU,IAAIV,EAAE,EAAE,CAAC,CAAC,CAAC;GAC9BW,EAAE,EAAE,QAAQ,WAAW,EAAE,OAAOX,EAAE,EAAE,EAAE,QAAQ,CAACY,EAAGC,EAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;GACnEC,GAAGd,EAAE,EAAG,EAAE;IACR,IAAIA,EAAE,EAAE;IACR,OAAO;IACR,EAAEe,EAAG,EAAE,GAAG,GAAG,EAAE;IACd,EAAE,OAAO,OAAO;KACd,MAAM;KACN,IAAIC,QAAQ,CAACL,EAAE,EAAE,QAAQ,QAAQM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C,KAAK;KACN,GAAG,KAAK;IACT,EAAE,OAAO,UAAU;KACjB,MAAM;KACN,IAAIgB,QAAQ,CAACL,EAAE,EAAE,QAAQ,WAAWM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD,KAAK;KACN,GAAG,KAAK;IACT,EAAE,OAAO,QAAQ;KACf,MAAM;KACN,IAAIgB,QAAQ,CAACL,EAAE,EAAE,QAAQ,SAASM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C,KAAK;KACN,GAAG,KAAK;IACT,EAAE,OAAO,UAAU;KACjB,MAAM;KACN,IAAIgB,QAAQ,CAACL,EAAE,EAAE,QAAQ,WAAWM,EAAEC,EAAElB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD,KAAK;KACN,GAAG,KAAK;IACV,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;GAClB,EAAE,IAAI,GAAG;;CAEb,CAAU"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { $ as e, B as t, Bt as n, C as r, E as i, Gt as a, H as o, L as s, O as c, P as l, Q as u, S as d, V as f, Vt as p, Y as ee, Z as te, _ as m, _t as h, b as g, c as ne, et as _, ft as v, gt as y, h as re, j as b, k as x, q as S, st as C, v as w, w as T, x as E, y as D, yt as O, z as k } from "./vue.runtime.esm-bundler-
|
|
1
|
+
import { $ as e, B as t, Bt as n, C as r, E as i, Gt as a, H as o, L as s, O as c, P as l, Q as u, S as d, V as f, Vt as p, Y as ee, Z as te, _ as m, _t as h, b as g, c as ne, et as _, ft as v, gt as y, h as re, j as b, k as x, q as S, st as C, v as w, w as T, x as E, y as D, yt as O, z as k } from "./vue.runtime.esm-bundler-Dq29dQrz.js";
|
|
2
2
|
import { t as A } from "./dot-prop-ByInxMX6.js";
|
|
3
|
-
import { f as j } from "./dist-
|
|
4
|
-
//#region ../../node_modules/.pnpm/@volverjs+ui-vue@0.0.13-beta.8_@volverjs+style@0.1.24-beta.3_@vueuse+core@14.3.0_vue@3.
|
|
3
|
+
import { f as j } from "./dist-yqV26MWM.js";
|
|
4
|
+
//#region ../../node_modules/.pnpm/@volverjs+ui-vue@0.0.13-beta.8_@volverjs+style@0.1.24-beta.3_@vueuse+core@14.3.0_vue@3._b0d461e87ded044697d58df431d5928d/node_modules/@volverjs/ui-vue/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js
|
|
5
5
|
var M = {
|
|
6
6
|
showPassword: "eye-on",
|
|
7
7
|
hidePassword: "eye-off",
|
|
@@ -608,4 +608,4 @@ var Le = ["textContent"], Re = { class: "vv-checkbox-group__wrapper" }, ze = /*
|
|
|
608
608
|
//#endregion
|
|
609
609
|
export { ze as default };
|
|
610
610
|
|
|
611
|
-
//# sourceMappingURL=VvCheckboxGroup.es-
|
|
611
|
+
//# sourceMappingURL=VvCheckboxGroup.es-DZCbyLN0.js.map
|