@8wave/ai-elements 0.103.0-beta.3 → 0.103.0-beta.4
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/PkLazyImg-CyeqD59M.js +34 -0
- package/dist/_chunks/{PkLazyImg-_389yCnQ.js.map → PkLazyImg-CyeqD59M.js.map} +1 -1
- package/dist/_chunks/{PkStreamingMarkdown-YJDdYD0E.js → PkStreamingMarkdown-DIkusrTI.js} +28 -28
- package/dist/_chunks/{PkStreamingMarkdown-YJDdYD0E.js.map → PkStreamingMarkdown-DIkusrTI.js.map} +1 -1
- package/dist/_chunks/PkToolRequestGeolocation-Cgus94KF.js +69 -0
- package/dist/_chunks/{PkToolRequestGeolocation-T16QI-Uv.js.map → PkToolRequestGeolocation-Cgus94KF.js.map} +1 -1
- package/dist/_chunks/{PkToolRequestOAuthConnection-C8e5np2q.js → PkToolRequestOAuthConnection-DsUpUh97.js} +21 -21
- package/dist/_chunks/{PkToolRequestOAuthConnection-C8e5np2q.js.map → PkToolRequestOAuthConnection-DsUpUh97.js.map} +1 -1
- package/dist/_chunks/PkToolShowArtifact-griVx9w3.js +93 -0
- package/dist/_chunks/{PkToolShowArtifact-D15GjBm6.js.map → PkToolShowArtifact-griVx9w3.js.map} +1 -1
- package/dist/_chunks/{PkToolShowCalendarEvent-D_GjXl2_.js → PkToolShowCalendarEvent-DyiNmqqo.js} +43 -43
- package/dist/_chunks/{PkToolShowCalendarEvent-D_GjXl2_.js.map → PkToolShowCalendarEvent-DyiNmqqo.js.map} +1 -1
- package/dist/_chunks/PkToolShowComparison-RA72YL7R.js +66 -0
- package/dist/_chunks/{PkToolShowComparison-Bp2rP2Hx.js.map → PkToolShowComparison-RA72YL7R.js.map} +1 -1
- package/dist/_chunks/{PkToolShowContactForm-NVzIu2t0.js → PkToolShowContactForm-BzDhv2yd.js} +41 -41
- package/dist/_chunks/{PkToolShowContactForm-NVzIu2t0.js.map → PkToolShowContactForm-BzDhv2yd.js.map} +1 -1
- package/dist/_chunks/{PkToolShowDiagram-BnZrDPVC.js → PkToolShowDiagram-DhXe8IPm.js} +79 -79
- package/dist/_chunks/{PkToolShowDiagram-BnZrDPVC.js.map → PkToolShowDiagram-DhXe8IPm.js.map} +1 -1
- package/dist/_chunks/{PkToolShowEmail-DCSj4328.js → PkToolShowEmail-CBmfy_I9.js} +34 -34
- package/dist/_chunks/{PkToolShowEmail-DCSj4328.js.map → PkToolShowEmail-CBmfy_I9.js.map} +1 -1
- package/dist/_chunks/PkToolShowForm-CzIfm5de.js +365 -0
- package/dist/_chunks/{PkToolShowForm-ztQFyFd9.js.map → PkToolShowForm-CzIfm5de.js.map} +1 -1
- package/dist/_chunks/PkToolShowImageGallery-CSIiRuSC.js +74 -0
- package/dist/_chunks/{PkToolShowImageGallery-DiOR0vYa.js.map → PkToolShowImageGallery-CSIiRuSC.js.map} +1 -1
- package/dist/_chunks/{PkToolShowLocation-CQmgakEo.js → PkToolShowLocation-BHoUqpx4.js} +4079 -4079
- package/dist/_chunks/{PkToolShowLocation-CQmgakEo.js.map → PkToolShowLocation-BHoUqpx4.js.map} +1 -1
- package/dist/_chunks/PkToolShowMessage-CpDmPfCG.js +77 -0
- package/dist/_chunks/{PkToolShowMessage-BysjJ1oS.js.map → PkToolShowMessage-CpDmPfCG.js.map} +1 -1
- package/dist/_chunks/{PkToolShowProductList-D-JXSRmA.js → PkToolShowProductList-B8uuIvGo.js} +28 -28
- package/dist/_chunks/{PkToolShowProductList-D-JXSRmA.js.map → PkToolShowProductList-B8uuIvGo.js.map} +1 -1
- package/dist/_chunks/{PkToolShowQrCode-BcIwuGqm.js → PkToolShowQrCode-CD2lo3O0.js} +23 -23
- package/dist/_chunks/{PkToolShowQrCode-BcIwuGqm.js.map → PkToolShowQrCode-CD2lo3O0.js.map} +1 -1
- package/dist/_chunks/{PkToolShowSources-U7etupUP.js → PkToolShowSources-JxaTAEpc.js} +98 -98
- package/dist/_chunks/{PkToolShowSources-U7etupUP.js.map → PkToolShowSources-JxaTAEpc.js.map} +1 -1
- package/dist/_chunks/{PkToolShowSuggestedReply-Dqe4gtEY.js → PkToolShowSuggestedReply-BTxqEwEm.js} +18 -18
- package/dist/_chunks/{PkToolShowSuggestedReply-Dqe4gtEY.js.map → PkToolShowSuggestedReply-BTxqEwEm.js.map} +1 -1
- package/dist/_chunks/{PkToolShowVideo-DYMhfXKH.js → PkToolShowVideo-CVksKdPD.js} +17 -17
- package/dist/_chunks/{PkToolShowVideo-DYMhfXKH.js.map → PkToolShowVideo-CVksKdPD.js.map} +1 -1
- package/dist/_chunks/{PkToolShowWeather-D_pJe5DI.js → PkToolShowWeather-IDwTDozU.js} +68 -68
- package/dist/_chunks/{PkToolShowWeather-D_pJe5DI.js.map → PkToolShowWeather-IDwTDozU.js.map} +1 -1
- package/dist/_chunks/PkToolShowWebPages-D9Yst_2O.js +78 -0
- package/dist/_chunks/{PkToolShowWebPages-CPNgXzrS.js.map → PkToolShowWebPages-D9Yst_2O.js.map} +1 -1
- package/dist/_chunks/{PkUrl-C3gMPCjz.js → PkUrl-B3FTSURr.js} +19 -19
- package/dist/_chunks/{PkUrl-C3gMPCjz.js.map → PkUrl-B3FTSURr.js.map} +1 -1
- package/dist/_chunks/{VvCheckbox.es-CEfwI84M.js → VvCheckbox.es-C_dlDzrr.js} +78 -78
- package/dist/_chunks/{VvCheckbox.es-CEfwI84M.js.map → VvCheckbox.es-C_dlDzrr.js.map} +1 -1
- package/dist/_chunks/{VvCheckboxGroup.es-B-eWqe8G.js → VvCheckboxGroup.es-hY0kWpC2.js} +197 -197
- package/dist/_chunks/{VvCheckboxGroup.es-B-eWqe8G.js.map → VvCheckboxGroup.es-hY0kWpC2.js.map} +1 -1
- package/dist/_chunks/VvCombobox.es-DxhDF7ab.js +2044 -0
- package/dist/_chunks/{VvCombobox.es-CfRJtWOd.js.map → VvCombobox.es-DxhDF7ab.js.map} +1 -1
- package/dist/_chunks/{VvInputText.es-B0HHD6Th.js → VvInputText.es-CdpU8kvP.js} +460 -460
- package/dist/_chunks/{VvInputText.es-B0HHD6Th.js.map → VvInputText.es-CdpU8kvP.js.map} +1 -1
- package/dist/_chunks/{VvRadio.es-B3u8JJFF.js → VvRadio.es-BruZ5FHR.js} +144 -144
- package/dist/_chunks/{VvRadio.es-B3u8JJFF.js.map → VvRadio.es-BruZ5FHR.js.map} +1 -1
- package/dist/_chunks/{VvRadioGroup.es--AMV1wAw.js → VvRadioGroup.es-DSv6UdEy.js} +148 -148
- package/dist/_chunks/{VvRadioGroup.es--AMV1wAw.js.map → VvRadioGroup.es-DSv6UdEy.js.map} +1 -1
- package/dist/_chunks/{VvSelect.es-BfrDID0e.js → VvSelect.es-C244CAei.js} +155 -155
- package/dist/_chunks/{VvSelect.es-BfrDID0e.js.map → VvSelect.es-C244CAei.js.map} +1 -1
- package/dist/_chunks/VvTextarea.es-DbaPIcWl.js +1166 -0
- package/dist/_chunks/{VvTextarea.es-CAzFW944.js.map → VvTextarea.es-DbaPIcWl.js.map} +1 -1
- package/dist/_chunks/{dist-BvSGMyWS.js → dist-BgJVX4FG.js} +12 -12
- package/dist/_chunks/{dist-BvSGMyWS.js.map → dist-BgJVX4FG.js.map} +1 -1
- package/dist/_chunks/{dist-TFHdNK0W.js → dist-C5Y-NI3i.js} +230 -230
- package/dist/_chunks/{dist-TFHdNK0W.js.map → dist-C5Y-NI3i.js.map} +1 -1
- package/dist/_chunks/{esm-CUYQMpeA.js → esm-BTbGj6W3.js} +25 -25
- package/dist/_chunks/{esm-CUYQMpeA.js.map → esm-BTbGj6W3.js.map} +1 -1
- package/dist/_chunks/{floating-ui.vue-Br_zOLJv.js → floating-ui.vue-CoA4oagI.js} +16 -16
- package/dist/_chunks/{floating-ui.vue-Br_zOLJv.js.map → floating-ui.vue-CoA4oagI.js.map} +1 -1
- package/dist/_chunks/{iconify-BGSTR7vH.js → iconify-6ObncgfH.js} +36 -36
- package/dist/_chunks/{iconify-BGSTR7vH.js.map → iconify-6ObncgfH.js.map} +1 -1
- package/dist/_chunks/{index.es-B9rhQl9Z.js → index.es-BbyodRh9.js} +258 -258
- package/dist/_chunks/{index.es-B9rhQl9Z.js.map → index.es-BbyodRh9.js.map} +1 -1
- package/dist/_chunks/index.es-gbmOq0Nu.js +3124 -0
- package/dist/_chunks/index.es-gbmOq0Nu.js.map +1 -0
- package/dist/_chunks/{rolldown-runtime-CEFd7nDs.js → rolldown-runtime-CoeuCKPe.js} +4 -11
- package/dist/_chunks/{src-BjFv9Ag8.js → src-CIEdKLKO.js} +2 -2
- package/dist/_chunks/{src-BjFv9Ag8.js.map → src-CIEdKLKO.js.map} +1 -1
- package/dist/_chunks/useImageFallback-BAsLRsyg.js +19 -0
- package/dist/_chunks/{useImageFallback-8kfLDjXm.js.map → useImageFallback-BAsLRsyg.js.map} +1 -1
- package/dist/_chunks/{useLightbox-Bq6k-Wlt.js → useLightbox-Epg2fN87.js} +7 -7
- package/dist/_chunks/{useLightbox-Bq6k-Wlt.js.map → useLightbox-Epg2fN87.js.map} +1 -1
- package/dist/_chunks/useShortUrlResolver--HRa6Od3.js +72 -0
- package/dist/_chunks/{useShortUrlResolver-BTJM8XRw.js.map → useShortUrlResolver--HRa6Od3.js.map} +1 -1
- package/dist/_chunks/{vue-i18n-BJ7nxwO3.js → vue-i18n-t25g63Be.js} +81 -81
- package/dist/_chunks/{vue-i18n-BJ7nxwO3.js.map → vue-i18n-t25g63Be.js.map} +1 -1
- package/dist/_chunks/vue.runtime.esm-bundler-B3bThTaf.js +3747 -0
- package/dist/_chunks/vue.runtime.esm-bundler-B3bThTaf.js.map +1 -0
- package/dist/ai-elements.es.js +1861 -1861
- package/dist/ai-elements.es.js.map +1 -1
- package/dist-vue/PkChatbot.js +1 -1
- package/dist-vue/PkChatbotAuth.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/_chunks/{PkChatbot-DZ6TaZHh.js → PkChatbot-Ch8FlZjC.js} +2 -2
- package/dist-vue/_chunks/{PkChatbot-DZ6TaZHh.js.map → PkChatbot-Ch8FlZjC.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotAuth-CqwTN8ih.js → PkChatbotAuth-DvnmIukc.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotAuth-CqwTN8ih.js.map → PkChatbotAuth-DvnmIukc.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotFeedbackForm-nEevDHmI.js → PkChatbotFeedbackForm-D0RNa7bE.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotFeedbackForm-nEevDHmI.js.map → PkChatbotFeedbackForm-D0RNa7bE.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotMessages-BgsyN-mB.js → PkChatbotMessages-DGO0WIqx.js} +4 -4
- package/dist-vue/_chunks/{PkChatbotMessages-BgsyN-mB.js.map → PkChatbotMessages-DGO0WIqx.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewChat-0g30_sQH.js → PkChatbotViewChat-Dkz8dq8N.js} +3 -3
- package/dist-vue/_chunks/{PkChatbotViewChat-0g30_sQH.js.map → PkChatbotViewChat-Dkz8dq8N.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowContactForm-CMK4zR2J.js → PkToolShowContactForm-CkkWxSSz.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowContactForm-CMK4zR2J.js.map → PkToolShowContactForm-CkkWxSSz.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowDiagram-DoklcF3f.js → PkToolShowDiagram-D0NBG-Gy.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowDiagram-DoklcF3f.js.map → PkToolShowDiagram-D0NBG-Gy.js.map} +1 -1
- package/dist-vue/_chunks/{index.es-BT6Jr2yi.js → index.es-BKxzs6Sh.js} +2 -2
- package/dist-vue/_chunks/{index.es-BT6Jr2yi.js.map → index.es-BKxzs6Sh.js.map} +1 -1
- package/dist-vue/index.js +10 -10
- package/package.json +2 -2
- package/dist/_chunks/PkLazyImg-_389yCnQ.js +0 -34
- package/dist/_chunks/PkToolRequestGeolocation-T16QI-Uv.js +0 -69
- package/dist/_chunks/PkToolShowArtifact-D15GjBm6.js +0 -93
- package/dist/_chunks/PkToolShowComparison-Bp2rP2Hx.js +0 -66
- package/dist/_chunks/PkToolShowForm-ztQFyFd9.js +0 -365
- package/dist/_chunks/PkToolShowImageGallery-DiOR0vYa.js +0 -74
- package/dist/_chunks/PkToolShowMessage-BysjJ1oS.js +0 -77
- package/dist/_chunks/PkToolShowWebPages-CPNgXzrS.js +0 -78
- package/dist/_chunks/VvCombobox.es-CfRJtWOd.js +0 -2044
- package/dist/_chunks/VvTextarea.es-CAzFW944.js +0 -1166
- package/dist/_chunks/index.es-DvV0VhDa.js +0 -9832
- package/dist/_chunks/index.es-DvV0VhDa.js.map +0 -1
- package/dist/_chunks/useImageFallback-8kfLDjXm.js +0 -19
- package/dist/_chunks/useShortUrlResolver-BTJM8XRw.js +0 -72
- package/dist/_chunks/vue.runtime.esm-bundler-DF2of3lp.js +0 -5007
- package/dist/_chunks/vue.runtime.esm-bundler-DF2of3lp.js.map +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { $ as e, C as t, Ct as n, L as r, O as i, T as a, Tt as o, b as s, bt as c, h as l, it as u, m as d, v as f, x as p, xt as m } from "./vue.runtime.esm-bundler-B3bThTaf.js";
|
|
2
|
+
import { i as h } from "./dist-C5Y-NI3i.js";
|
|
3
|
+
import { a as g, i as _, o as v, p as y, t as b } from "./index.es-gbmOq0Nu.js";
|
|
4
|
+
import { n as x } from "./useShortUrlResolver--HRa6Od3.js";
|
|
5
|
+
i(), m(), u();
|
|
6
|
+
var S = { class: "border border-surface-3 rounded-xl w-full overflow-hidden bg-surface" }, C = { class: "px-sm py-6 bg-surface-1 min-h-40 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8" }, w = { class: "font-bold" }, T = { class: "p-sm" }, E = { class: "text-12 text-word-4 mb-4" }, D = { class: "text-word-2 whitespace-pre-wrap break-words" }, O = /* @__PURE__ */ t({
|
|
7
|
+
__name: "PkToolShowMessage",
|
|
8
|
+
props: { part: { type: null } },
|
|
9
|
+
setup(t) {
|
|
10
|
+
let i = t, { copy: u, copied: m } = h(), O = d(() => i.part), { resolveText: k } = x(), A = k(() => O.value.input?.body), j = () => {
|
|
11
|
+
if (!O.value.input) return;
|
|
12
|
+
let e = `https://wa.me/?text=${encodeURIComponent(A.value)}`;
|
|
13
|
+
window.open(e, "_blank");
|
|
14
|
+
}, M = () => {
|
|
15
|
+
if (!O.value.input) return;
|
|
16
|
+
let e = `https://t.me/share/url?text=${encodeURIComponent(A.value)}`;
|
|
17
|
+
window.open(e, "_blank");
|
|
18
|
+
}, N = () => {
|
|
19
|
+
if (!O.value.input) return;
|
|
20
|
+
let e = `sms:?body=${encodeURIComponent(A.value)}`;
|
|
21
|
+
window.open(e);
|
|
22
|
+
};
|
|
23
|
+
return (t, i) => {
|
|
24
|
+
let d = y, h = v, x = b, O = g, k = _;
|
|
25
|
+
return r(), f("div", S, [l("div", C, [
|
|
26
|
+
p(d, {
|
|
27
|
+
name: "ri:chat-1-line",
|
|
28
|
+
class: "text-16"
|
|
29
|
+
}),
|
|
30
|
+
l("strong", w, o(t.$t("label.message")), 1),
|
|
31
|
+
p(k, {
|
|
32
|
+
modifiers: "compact",
|
|
33
|
+
class: "ml-auto shrink-0"
|
|
34
|
+
}, {
|
|
35
|
+
default: e(() => [p(h, {
|
|
36
|
+
modifiers: "action-quiet-small",
|
|
37
|
+
icon: c(m) ? "ri:check-line" : "ri:file-copy-line",
|
|
38
|
+
label: c(m) ? t.$t("action.copied") : t.$t("action.copy"),
|
|
39
|
+
onClick: i[0] ||= (e) => c(u)(c(A))
|
|
40
|
+
}, null, 8, ["icon", "label"]), p(O, n(a({
|
|
41
|
+
placement: "bottom-end",
|
|
42
|
+
modifiers: "menu",
|
|
43
|
+
flip: !0,
|
|
44
|
+
offset: 3,
|
|
45
|
+
strategy: "fixed"
|
|
46
|
+
})), {
|
|
47
|
+
items: e(() => [
|
|
48
|
+
p(x, { onClick: j }, {
|
|
49
|
+
default: e(() => [p(d, { name: "ri:whatsapp-line" }), s(" " + o(t.$t("action.openInWhatsApp")), 1)]),
|
|
50
|
+
_: 1
|
|
51
|
+
}),
|
|
52
|
+
p(x, { onClick: M }, {
|
|
53
|
+
default: e(() => [p(d, { name: "ri:telegram-line" }), s(" " + o(t.$t("action.openInTelegram")), 1)]),
|
|
54
|
+
_: 1
|
|
55
|
+
}),
|
|
56
|
+
p(x, { onClick: N }, {
|
|
57
|
+
default: e(() => [p(d, { name: "ri:message-2-line" }), s(" " + o(t.$t("action.openInSms")), 1)]),
|
|
58
|
+
_: 1
|
|
59
|
+
})
|
|
60
|
+
]),
|
|
61
|
+
default: e(() => [p(h, {
|
|
62
|
+
icon: "ri:send-plane-line",
|
|
63
|
+
modifiers: "action-quiet-small",
|
|
64
|
+
label: t.$t("action.send")
|
|
65
|
+
}, null, 8, ["label"])]),
|
|
66
|
+
_: 1
|
|
67
|
+
}, 16)]),
|
|
68
|
+
_: 1
|
|
69
|
+
})
|
|
70
|
+
]), l("div", T, [l("div", E, o(t.$t("label.body")), 1), l("pre", D, o(c(A)), 1)])]);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
//#endregion
|
|
75
|
+
export { O as default };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=PkToolShowMessage-CpDmPfCG.js.map
|
package/dist/_chunks/{PkToolShowMessage-BysjJ1oS.js.map → PkToolShowMessage-CpDmPfCG.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkToolShowMessage-
|
|
1
|
+
{"version":3,"file":"PkToolShowMessage-CpDmPfCG.js","names":["$t"],"sources":["../../../../packages/components/src/chat/PkToolShowMessage.vue","../../../../packages/components/src/chat/PkToolShowMessage.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed } from 'vue'\n import { useClipboard } from '@vueuse/core'\n import { useShortUrlResolver } from 'composables'\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { copy, copied } = useClipboard()\n\n const toolPart = computed(() => {\n const part = props.part as {\n input?: {\n body: string\n }\n }\n return part\n })\n\n // Messages leave the app (WhatsApp/Telegram/SMS/clipboard), so expand short\n // urls to their real target rather than keeping the fragile `/api/r/` link.\n const { resolveText } = useShortUrlResolver()\n const body = resolveText(() => toolPart.value.input?.body)\n\n const openInWhatsApp = () => {\n if (!toolPart.value.input) {\n return\n }\n const url = `https://wa.me/?text=${encodeURIComponent(body.value)}`\n window.open(url, '_blank')\n }\n\n const openInTelegram = () => {\n if (!toolPart.value.input) {\n return\n }\n const url = `https://t.me/share/url?text=${encodeURIComponent(body.value)}`\n window.open(url, '_blank')\n }\n\n const openInSms = () => {\n if (!toolPart.value.input) {\n return\n }\n const url = `sms:?body=${encodeURIComponent(body.value)}`\n window.open(url)\n }\n</script>\n\n<template>\n <div\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden bg-surface\">\n <div\n class=\"px-sm py-6 bg-surface-1 min-h-40 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8\">\n <VvIcon name=\"ri:chat-1-line\" class=\"text-16\" />\n <strong class=\"font-bold\">\n {{ $t('label.message') }}\n </strong>\n <VvButtonGroup modifiers=\"compact\" class=\"ml-auto shrink-0\">\n <VvButton\n modifiers=\"action-quiet-small\"\n :icon=\"copied ? 'ri:check-line' : 'ri:file-copy-line'\"\n :label=\"copied ? $t('action.copied') : $t('action.copy')\"\n @click=\"copy(body)\" />\n <VvDropdown\n v-bind=\"{\n placement: 'bottom-end',\n modifiers: 'menu',\n flip: true,\n offset: 3,\n strategy: 'fixed',\n }\">\n <VvButton\n icon=\"ri:send-plane-line\"\n modifiers=\"action-quiet-small\"\n :label=\"$t('action.send')\" />\n <template #items>\n <VvDropdownAction @click=\"openInWhatsApp\">\n <VvIcon name=\"ri:whatsapp-line\" />\n {{ $t('action.openInWhatsApp') }}\n </VvDropdownAction>\n <VvDropdownAction @click=\"openInTelegram\">\n <VvIcon name=\"ri:telegram-line\" />\n {{ $t('action.openInTelegram') }}\n </VvDropdownAction>\n <VvDropdownAction @click=\"openInSms\">\n <VvIcon name=\"ri:message-2-line\" />\n {{ $t('action.openInSms') }}\n </VvDropdownAction>\n </template>\n </VvDropdown>\n </VvButtonGroup>\n </div>\n <div class=\"p-sm\">\n <div class=\"text-12 text-word-4 mb-4\">\n {{ $t('label.body') }}\n </div>\n <pre class=\"text-word-2 whitespace-pre-wrap break-words\">{{\n body\n }}</pre>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n import { useClipboard } from '@vueuse/core'\n import { useShortUrlResolver } from 'composables'\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { copy, copied } = useClipboard()\n\n const toolPart = computed(() => {\n const part = props.part as {\n input?: {\n body: string\n }\n }\n return part\n })\n\n // Messages leave the app (WhatsApp/Telegram/SMS/clipboard), so expand short\n // urls to their real target rather than keeping the fragile `/api/r/` link.\n const { resolveText } = useShortUrlResolver()\n const body = resolveText(() => toolPart.value.input?.body)\n\n const openInWhatsApp = () => {\n if (!toolPart.value.input) {\n return\n }\n const url = `https://wa.me/?text=${encodeURIComponent(body.value)}`\n window.open(url, '_blank')\n }\n\n const openInTelegram = () => {\n if (!toolPart.value.input) {\n return\n }\n const url = `https://t.me/share/url?text=${encodeURIComponent(body.value)}`\n window.open(url, '_blank')\n }\n\n const openInSms = () => {\n if (!toolPart.value.input) {\n return\n }\n const url = `sms:?body=${encodeURIComponent(body.value)}`\n window.open(url)\n }\n</script>\n\n<template>\n <div\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden bg-surface\">\n <div\n class=\"px-sm py-6 bg-surface-1 min-h-40 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8\">\n <VvIcon name=\"ri:chat-1-line\" class=\"text-16\" />\n <strong class=\"font-bold\">\n {{ $t('label.message') }}\n </strong>\n <VvButtonGroup modifiers=\"compact\" class=\"ml-auto shrink-0\">\n <VvButton\n modifiers=\"action-quiet-small\"\n :icon=\"copied ? 'ri:check-line' : 'ri:file-copy-line'\"\n :label=\"copied ? $t('action.copied') : $t('action.copy')\"\n @click=\"copy(body)\" />\n <VvDropdown\n v-bind=\"{\n placement: 'bottom-end',\n modifiers: 'menu',\n flip: true,\n offset: 3,\n strategy: 'fixed',\n }\">\n <VvButton\n icon=\"ri:send-plane-line\"\n modifiers=\"action-quiet-small\"\n :label=\"$t('action.send')\" />\n <template #items>\n <VvDropdownAction @click=\"openInWhatsApp\">\n <VvIcon name=\"ri:whatsapp-line\" />\n {{ $t('action.openInWhatsApp') }}\n </VvDropdownAction>\n <VvDropdownAction @click=\"openInTelegram\">\n <VvIcon name=\"ri:telegram-line\" />\n {{ $t('action.openInTelegram') }}\n </VvDropdownAction>\n <VvDropdownAction @click=\"openInSms\">\n <VvIcon name=\"ri:message-2-line\" />\n {{ $t('action.openInSms') }}\n </VvDropdownAction>\n </template>\n </VvDropdown>\n </VvButtonGroup>\n </div>\n <div class=\"p-sm\">\n <div class=\"text-12 text-word-4 mb-4\">\n {{ $t('label.body') }}\n </div>\n <pre class=\"text-word-2 whitespace-pre-wrap break-words\">{{\n body\n }}</pre>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;EAKI,IAAM,IAAQ,GAIR,EAAE,SAAM,cAAW,EAAa,GAEhC,IAAW,QACA,EAAM,IAMtB,GAIK,EAAE,mBAAgB,EAAoB,GACtC,IAAO,QAAkB,EAAS,MAAM,OAAO,IAAI,GAEnD,UAAuB;GACzB,IAAI,CAAC,EAAS,MAAM,OAChB;GAEJ,IAAM,IAAM,uBAAuB,mBAAmB,EAAK,KAAK;GAChE,OAAO,KAAK,GAAK,QAAQ;EAC7B,GAEM,UAAuB;GACzB,IAAI,CAAC,EAAS,MAAM,OAChB;GAEJ,IAAM,IAAM,+BAA+B,mBAAmB,EAAK,KAAK;GACxE,OAAO,KAAK,GAAK,QAAQ;EAC7B,GAEM,UAAkB;GACpB,IAAI,CAAC,EAAS,MAAM,OAChB;GAEJ,IAAM,IAAM,aAAa,mBAAmB,EAAK,KAAK;GACtD,OAAO,KAAK,CAAG;EACnB;;;GAIA,OAAA,EAAA,GAAA,EAmDM,OAnDN,GAmDM,CAjDF,EAwCM,OAxCN,GAwCM;IAtCF,EAAgD,GAAA;KAAxC,MAAK;KAAiB,OAAM;;IACpC,EAES,UAFT,GAES,EADFA,EAAAA,GAAE,eAAA,CAAA,GAAA,CAAA;IAET,EAiCgB,GAAA;KAjCD,WAAU;KAAU,OAAM;;KACrC,SAAA,QAI0B,CAJ1B,EAI0B,GAAA;MAHtB,WAAU;MACT,MAAM,EAAA,CAAA,IAAM,kBAAA;MACZ,OAAO,EAAA,CAAA,IAASA,EAAAA,GAAE,eAAA,IAAoBA,EAAAA,GAAE,aAAA;MACxC,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,CAAA,CAAI,CAAC,EAAA,CAAA,CAAI;KACrB,GAAA,MAAA,GAAA,CAAA,QAAA,OAAA,CAAA,GAAA,EA0Ba,GAAA,EAAA,EAzBD;;;;;;KAMP,CAAA,CAAA,GAAA;MAKU,OAAK,QAIO;OAHnB,EAGmB,GAAA,EAHA,SAAO,EAAc,GAAA;QACpC,SAAA,QAAkC,CAAlC,EAAkC,GAAA,EAA1B,MAAK,mBAAkB,CAAA,GAAG,EAAA,MAClC,EAAGA,EAAAA,GAAE,uBAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;OAET,EAGmB,GAAA,EAHA,SAAO,EAAc,GAAA;QACpC,SAAA,QAAkC,CAAlC,EAAkC,GAAA,EAA1B,MAAK,mBAAkB,CAAA,GAAG,EAAA,MAClC,EAAGA,EAAAA,GAAE,uBAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;OAET,EAGmB,GAAA,EAHA,SAAO,EAAS,GAAA;QAC/B,SAAA,QAAmC,CAAnC,EAAmC,GAAA,EAA3B,MAAK,oBAAmB,CAAA,GAAG,EAAA,MACnC,EAAGA,EAAAA,GAAE,kBAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;;;MAfb,SAAA,QAGiC,CAHjC,EAGiC,GAAA;OAF7B,MAAK;OACL,WAAU;OACT,OAAOA,EAAAA,GAAE,aAAA;;;;;;GAkB1B,CAAA,GAAA,EAOM,OAPN,GAOM,CANF,EAEM,OAFN,GAEM,EADCA,EAAAA,GAAE,YAAA,CAAA,GAAA,CAAA,GAET,EAEQ,OAFR,GAEQ,EADJ,EAAA,CAAA,CAAI,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
|
package/dist/_chunks/{PkToolShowProductList-D-JXSRmA.js → PkToolShowProductList-B8uuIvGo.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as _ } from "./PkLazyImg-
|
|
4
|
-
import { t as v } from "./PkUrl-
|
|
5
|
-
|
|
1
|
+
import { $ as e, C as t, H as n, L as r, O as i, St as a, Tt as o, _ as s, d as c, g as l, h as u, m as d, v as f, x as p, xt as m, z as h } from "./vue.runtime.esm-bundler-B3bThTaf.js";
|
|
2
|
+
import { p as g } from "./index.es-gbmOq0Nu.js";
|
|
3
|
+
import { t as _ } from "./PkLazyImg-CyeqD59M.js";
|
|
4
|
+
import { t as v } from "./PkUrl-B3FTSURr.js";
|
|
5
|
+
i(), m();
|
|
6
6
|
var y = {
|
|
7
7
|
key: 0,
|
|
8
8
|
class: "flex flex-col gap-xs w-full"
|
|
@@ -15,54 +15,54 @@ var y = {
|
|
|
15
15
|
}, T = {
|
|
16
16
|
key: 1,
|
|
17
17
|
class: "text-12 text-word-3 line-clamp-2"
|
|
18
|
-
}, E = /* @__PURE__ */
|
|
18
|
+
}, E = /* @__PURE__ */ t({
|
|
19
19
|
__name: "PkToolShowProductList",
|
|
20
20
|
props: { part: { type: null } },
|
|
21
|
-
setup(
|
|
22
|
-
let
|
|
21
|
+
setup(t) {
|
|
22
|
+
let i = t, m = d(() => i.part), E = (e) => {
|
|
23
23
|
if (!e) return "";
|
|
24
24
|
let t = e.toLowerCase();
|
|
25
25
|
return t.includes("in stock") || t.includes("available") || t.includes("disponibile") ? "text-success" : t.includes("out of stock") || t.includes("unavailable") || t.includes("non disponibile") ? "text-danger" : t.includes("limited") || t.includes("low stock") || t.includes("limitato") ? "text-warning" : "text-word-3";
|
|
26
26
|
};
|
|
27
|
-
return (
|
|
27
|
+
return (t, i) => {
|
|
28
28
|
let d = g;
|
|
29
|
-
return m.value?.input?.products?.length ? (
|
|
30
|
-
key:
|
|
29
|
+
return m.value?.input?.products?.length ? (r(), f("ul", y, [(r(!0), f(c, null, h(m.value.input.products, (t, i) => (r(), f("li", {
|
|
30
|
+
key: i,
|
|
31
31
|
class: "border border-surface-3 bg-surface rounded-xl overflow-hidden hover:border-surface-4 transition-colors"
|
|
32
|
-
}, [(
|
|
33
|
-
href:
|
|
34
|
-
target:
|
|
35
|
-
rel:
|
|
32
|
+
}, [(r(), l(n(t.url ? "a" : "div"), {
|
|
33
|
+
href: t.url,
|
|
34
|
+
target: t.url ? "_blank" : void 0,
|
|
35
|
+
rel: t.url ? "noopener noreferrer" : void 0,
|
|
36
36
|
class: "flex gap-8 p-8 hover:bg-surface-1 transition-colors"
|
|
37
37
|
}, {
|
|
38
|
-
default:
|
|
38
|
+
default: e(() => [t.image ? (r(), l(_, {
|
|
39
39
|
key: 0,
|
|
40
|
-
src:
|
|
41
|
-
alt:
|
|
40
|
+
src: t.image,
|
|
41
|
+
alt: t.name,
|
|
42
42
|
"fallback-icon": "ri:image-off-line",
|
|
43
43
|
class: "w-48 h-48 object-contain rounded shrink-0 border border-surface-3 bg-surface"
|
|
44
|
-
}, null, 8, ["src", "alt"])) :
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
}, null, 8, ["src", "alt"])) : s("", !0), u("div", b, [
|
|
45
|
+
u("strong", x, o(t.name), 1),
|
|
46
|
+
t.url ? (r(), f("span", S, [p(d, {
|
|
47
47
|
name: "ri:link",
|
|
48
48
|
class: "shrink-0 text-12"
|
|
49
|
-
}),
|
|
50
|
-
|
|
49
|
+
}), p(v, { url: t.url }, null, 8, ["url"])])) : s("", !0),
|
|
50
|
+
u("div", C, [t.price ? (r(), f("span", w, o(t.price), 1)) : s("", !0), t.availability ? (r(), f("span", {
|
|
51
51
|
key: 1,
|
|
52
|
-
class:
|
|
53
|
-
},
|
|
54
|
-
|
|
52
|
+
class: a(["text-10 font-medium", E(t.availability)])
|
|
53
|
+
}, o(t.availability), 3)) : s("", !0)]),
|
|
54
|
+
t.description ? (r(), f("p", T, o(t.description), 1)) : s("", !0)
|
|
55
55
|
])]),
|
|
56
56
|
_: 2
|
|
57
57
|
}, 1032, [
|
|
58
58
|
"href",
|
|
59
59
|
"target",
|
|
60
60
|
"rel"
|
|
61
|
-
]))]))), 128))])) :
|
|
61
|
+
]))]))), 128))])) : s("", !0);
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
//#endregion
|
|
66
66
|
export { E as default };
|
|
67
67
|
|
|
68
|
-
//# sourceMappingURL=PkToolShowProductList-
|
|
68
|
+
//# sourceMappingURL=PkToolShowProductList-B8uuIvGo.js.map
|
package/dist/_chunks/{PkToolShowProductList-D-JXSRmA.js.map → PkToolShowProductList-B8uuIvGo.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkToolShowProductList-D-JXSRmA.js","names":[],"sources":["../../../../packages/components/src/chat/PkToolShowProductList.vue","../../../../packages/components/src/chat/PkToolShowProductList.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed } from 'vue'\n import PkLazyImg from '../PkLazyImg.vue'\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 products: Array<{\n name: string\n url?: string\n image?: string\n price?: string\n availability?: string\n description?: string\n }>\n }\n }\n return part\n })\n\n const getAvailabilityColor = (availability?: string) => {\n if (!availability) {\n return ''\n }\n const lower = availability.toLowerCase()\n if (\n lower.includes('in stock') ||\n lower.includes('available') ||\n lower.includes('disponibile')\n ) {\n return 'text-success'\n }\n if (\n lower.includes('out of stock') ||\n lower.includes('unavailable') ||\n lower.includes('non disponibile')\n ) {\n return 'text-danger'\n }\n if (\n lower.includes('limited') ||\n lower.includes('low stock') ||\n lower.includes('limitato')\n ) {\n return 'text-warning'\n }\n return 'text-word-3'\n }\n</script>\n\n<template>\n <ul\n v-if=\"toolPart?.input?.products?.length\"\n class=\"flex flex-col gap-xs w-full\">\n <li\n v-for=\"(product, index) in toolPart.input.products\"\n :key=\"index\"\n class=\"border border-surface-3 bg-surface rounded-xl overflow-hidden hover:border-surface-4 transition-colors\">\n <component\n :is=\"product.url ? 'a' : 'div'\"\n :href=\"product.url\"\n :target=\"product.url ? '_blank' : undefined\"\n :rel=\"product.url ? 'noopener noreferrer' : undefined\"\n class=\"flex gap-8 p-8 hover:bg-surface-1 transition-colors\">\n <!-- Merchant images rot over time: a dead one degrades to an icon\n so the row keeps its thumbnail slot -->\n <PkLazyImg\n v-if=\"product.image\"\n :src=\"product.image\"\n :alt=\"product.name\"\n fallback-icon=\"ri:image-off-line\"\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 {{ product.name }}\n </strong>\n <span\n v-if=\"product.url\"\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=\"product.url\" />\n </span>\n <div class=\"flex items-center gap-sm flex-wrap text-12\">\n <span\n v-if=\"product.price\"\n class=\"font-semibold text-word-1\">\n {{ product.price }}\n </span>\n <span\n v-if=\"product.availability\"\n class=\"text-10 font-medium\"\n :class=\"getAvailabilityColor(product.availability)\">\n {{ product.availability }}\n </span>\n </div>\n <p\n v-if=\"product.description\"\n class=\"text-12 text-word-3 line-clamp-2\">\n {{ product.description }}\n </p>\n </div>\n </component>\n </li>\n </ul>\n</template>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n import PkLazyImg from '../PkLazyImg.vue'\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 products: Array<{\n name: string\n url?: string\n image?: string\n price?: string\n availability?: string\n description?: string\n }>\n }\n }\n return part\n })\n\n const getAvailabilityColor = (availability?: string) => {\n if (!availability) {\n return ''\n }\n const lower = availability.toLowerCase()\n if (\n lower.includes('in stock') ||\n lower.includes('available') ||\n lower.includes('disponibile')\n ) {\n return 'text-success'\n }\n if (\n lower.includes('out of stock') ||\n lower.includes('unavailable') ||\n lower.includes('non disponibile')\n ) {\n return 'text-danger'\n }\n if (\n lower.includes('limited') ||\n lower.includes('low stock') ||\n lower.includes('limitato')\n ) {\n return 'text-warning'\n }\n return 'text-word-3'\n }\n</script>\n\n<template>\n <ul\n v-if=\"toolPart?.input?.products?.length\"\n class=\"flex flex-col gap-xs w-full\">\n <li\n v-for=\"(product, index) in toolPart.input.products\"\n :key=\"index\"\n class=\"border border-surface-3 bg-surface rounded-xl overflow-hidden hover:border-surface-4 transition-colors\">\n <component\n :is=\"product.url ? 'a' : 'div'\"\n :href=\"product.url\"\n :target=\"product.url ? '_blank' : undefined\"\n :rel=\"product.url ? 'noopener noreferrer' : undefined\"\n class=\"flex gap-8 p-8 hover:bg-surface-1 transition-colors\">\n <!-- Merchant images rot over time: a dead one degrades to an icon\n so the row keeps its thumbnail slot -->\n <PkLazyImg\n v-if=\"product.image\"\n :src=\"product.image\"\n :alt=\"product.name\"\n fallback-icon=\"ri:image-off-line\"\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 {{ product.name }}\n </strong>\n <span\n v-if=\"product.url\"\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=\"product.url\" />\n </span>\n <div class=\"flex items-center gap-sm flex-wrap text-12\">\n <span\n v-if=\"product.price\"\n class=\"font-semibold text-word-1\">\n {{ product.price }}\n </span>\n <span\n v-if=\"product.availability\"\n class=\"text-10 font-medium\"\n :class=\"getAvailabilityColor(product.availability)\">\n {{ product.availability }}\n </span>\n </div>\n <p\n v-if=\"product.description\"\n class=\"text-12 text-word-3 line-clamp-2\">\n {{ product.description }}\n </p>\n </div>\n </component>\n </li>\n </ul>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAKI,IAAM,IAAQ,GAIR,IAAW,QACA,EAAM,IAatB,GAEK,KAAwB,MAA0B;GACpD,IAAI,CAAC,GACD,OAAO;GAEX,IAAM,IAAQ,EAAa,YAAY;GAsBvC,OApBI,EAAM,SAAS,UAAU,KACzB,EAAM,SAAS,WAAW,KAC1B,EAAM,SAAS,aAAa,IAErB,iBAGP,EAAM,SAAS,cAAc,KAC7B,EAAM,SAAS,aAAa,KAC5B,EAAM,SAAS,iBAAiB,IAEzB,gBAGP,EAAM,SAAS,SAAS,KACxB,EAAM,SAAS,WAAW,KAC1B,EAAM,SAAS,UAAU,IAElB,iBAEJ;EACX;;;GAKU,OAAA,EAAA,OAAU,OAAO,UAAU,UADrC,EAAA,GAAA,EAoDK,MApDL,GAoDK,EAjDD,EAAA,EAAA,GAAA,EAgDK,GAAA,MAAA,EA/C0B,EAAA,MAAS,MAAM,WAAlC,GAAS,OADrB,EAAA,GAAA,EAgDK,MAAA;IA9CA,KAAK;IACN,OAAM;GACN,GAAA,EAAA,EAAA,GAAA,EA2CY,EA1CH,EAAQ,MAAG,MAAA,KAAA,GAAA;IACf,MAAM,EAAQ;IACd,QAAQ,EAAQ,MAAG,WAAc,KAAA;IACjC,KAAK,EAAQ,MAAG,wBAA2B,KAAA;IAC5C,OAAM;;IAGN,SAAA,QAK2F,CAJjF,EAAQ,SADlB,EAAA,GAAA,EAK2F,GAAA;;KAHtF,KAAK,EAAQ;KACb,KAAK,EAAQ;KACd,iBAAc;KACd,OAAM;IACV,GAAA,MAAA,GAAA,CAAA,OAAA,KAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAAA,EA4BM,OA5BN,GA4BM;KA3BF,EAES,UAFT,GAES,EADF,EAAQ,IAAI,GAAA,CAAA;KAGT,EAAQ,OADlB,EAAA,GAAA,EAKO,QALP,GAKO,CAFH,EAAkD,GAAA;MAA1C,MAAK;MAAU,OAAM;KAC7B,CAAA,GAAA,EAA4B,GAAA,EAApB,KAAK,EAAQ,IAAA,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;KAEzB,EAYM,OAZN,GAYM,CAVQ,EAAQ,SADlB,EAAA,GAAA,EAIO,QAJP,GAIO,EADA,EAAQ,KAAK,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAGV,EAAQ,gBADlB,EAAA,GAAA,EAKO,QAAA;;MAHH,OAAK,EAAA,CAAC,uBACE,EAAqB,EAAQ,YAAY,CAAA,CAAA;KAC9C,GAAA,EAAA,EAAQ,YAAY,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA;KAIrB,EAAQ,eADlB,EAAA,GAAA,EAII,KAJJ,GAII,EADG,EAAQ,WAAW,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA"}
|
|
1
|
+
{"version":3,"file":"PkToolShowProductList-B8uuIvGo.js","names":[],"sources":["../../../../packages/components/src/chat/PkToolShowProductList.vue","../../../../packages/components/src/chat/PkToolShowProductList.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed } from 'vue'\n import PkLazyImg from '../PkLazyImg.vue'\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 products: Array<{\n name: string\n url?: string\n image?: string\n price?: string\n availability?: string\n description?: string\n }>\n }\n }\n return part\n })\n\n const getAvailabilityColor = (availability?: string) => {\n if (!availability) {\n return ''\n }\n const lower = availability.toLowerCase()\n if (\n lower.includes('in stock') ||\n lower.includes('available') ||\n lower.includes('disponibile')\n ) {\n return 'text-success'\n }\n if (\n lower.includes('out of stock') ||\n lower.includes('unavailable') ||\n lower.includes('non disponibile')\n ) {\n return 'text-danger'\n }\n if (\n lower.includes('limited') ||\n lower.includes('low stock') ||\n lower.includes('limitato')\n ) {\n return 'text-warning'\n }\n return 'text-word-3'\n }\n</script>\n\n<template>\n <ul\n v-if=\"toolPart?.input?.products?.length\"\n class=\"flex flex-col gap-xs w-full\">\n <li\n v-for=\"(product, index) in toolPart.input.products\"\n :key=\"index\"\n class=\"border border-surface-3 bg-surface rounded-xl overflow-hidden hover:border-surface-4 transition-colors\">\n <component\n :is=\"product.url ? 'a' : 'div'\"\n :href=\"product.url\"\n :target=\"product.url ? '_blank' : undefined\"\n :rel=\"product.url ? 'noopener noreferrer' : undefined\"\n class=\"flex gap-8 p-8 hover:bg-surface-1 transition-colors\">\n <!-- Merchant images rot over time: a dead one degrades to an icon\n so the row keeps its thumbnail slot -->\n <PkLazyImg\n v-if=\"product.image\"\n :src=\"product.image\"\n :alt=\"product.name\"\n fallback-icon=\"ri:image-off-line\"\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 {{ product.name }}\n </strong>\n <span\n v-if=\"product.url\"\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=\"product.url\" />\n </span>\n <div class=\"flex items-center gap-sm flex-wrap text-12\">\n <span\n v-if=\"product.price\"\n class=\"font-semibold text-word-1\">\n {{ product.price }}\n </span>\n <span\n v-if=\"product.availability\"\n class=\"text-10 font-medium\"\n :class=\"getAvailabilityColor(product.availability)\">\n {{ product.availability }}\n </span>\n </div>\n <p\n v-if=\"product.description\"\n class=\"text-12 text-word-3 line-clamp-2\">\n {{ product.description }}\n </p>\n </div>\n </component>\n </li>\n </ul>\n</template>\n","<script setup lang=\"ts\">\n import { computed } from 'vue'\n import PkLazyImg from '../PkLazyImg.vue'\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 products: Array<{\n name: string\n url?: string\n image?: string\n price?: string\n availability?: string\n description?: string\n }>\n }\n }\n return part\n })\n\n const getAvailabilityColor = (availability?: string) => {\n if (!availability) {\n return ''\n }\n const lower = availability.toLowerCase()\n if (\n lower.includes('in stock') ||\n lower.includes('available') ||\n lower.includes('disponibile')\n ) {\n return 'text-success'\n }\n if (\n lower.includes('out of stock') ||\n lower.includes('unavailable') ||\n lower.includes('non disponibile')\n ) {\n return 'text-danger'\n }\n if (\n lower.includes('limited') ||\n lower.includes('low stock') ||\n lower.includes('limitato')\n ) {\n return 'text-warning'\n }\n return 'text-word-3'\n }\n</script>\n\n<template>\n <ul\n v-if=\"toolPart?.input?.products?.length\"\n class=\"flex flex-col gap-xs w-full\">\n <li\n v-for=\"(product, index) in toolPart.input.products\"\n :key=\"index\"\n class=\"border border-surface-3 bg-surface rounded-xl overflow-hidden hover:border-surface-4 transition-colors\">\n <component\n :is=\"product.url ? 'a' : 'div'\"\n :href=\"product.url\"\n :target=\"product.url ? '_blank' : undefined\"\n :rel=\"product.url ? 'noopener noreferrer' : undefined\"\n class=\"flex gap-8 p-8 hover:bg-surface-1 transition-colors\">\n <!-- Merchant images rot over time: a dead one degrades to an icon\n so the row keeps its thumbnail slot -->\n <PkLazyImg\n v-if=\"product.image\"\n :src=\"product.image\"\n :alt=\"product.name\"\n fallback-icon=\"ri:image-off-line\"\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 {{ product.name }}\n </strong>\n <span\n v-if=\"product.url\"\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=\"product.url\" />\n </span>\n <div class=\"flex items-center gap-sm flex-wrap text-12\">\n <span\n v-if=\"product.price\"\n class=\"font-semibold text-word-1\">\n {{ product.price }}\n </span>\n <span\n v-if=\"product.availability\"\n class=\"text-10 font-medium\"\n :class=\"getAvailabilityColor(product.availability)\">\n {{ product.availability }}\n </span>\n </div>\n <p\n v-if=\"product.description\"\n class=\"text-12 text-word-3 line-clamp-2\">\n {{ product.description }}\n </p>\n </div>\n </component>\n </li>\n </ul>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAKI,IAAM,IAAQ,GAIR,IAAW,QACA,EAAM,IAatB,GAEK,KAAwB,MAA0B;GACpD,IAAI,CAAC,GACD,OAAO;GAEX,IAAM,IAAQ,EAAa,YAAY;GAsBvC,OApBI,EAAM,SAAS,UAAU,KACzB,EAAM,SAAS,WAAW,KAC1B,EAAM,SAAS,aAAa,IAErB,iBAGP,EAAM,SAAS,cAAc,KAC7B,EAAM,SAAS,aAAa,KAC5B,EAAM,SAAS,iBAAiB,IAEzB,gBAGP,EAAM,SAAS,SAAS,KACxB,EAAM,SAAS,WAAW,KAC1B,EAAM,SAAS,UAAU,IAElB,iBAEJ;EACX;;;GAKU,OAAA,EAAA,OAAU,OAAO,UAAU,UADrC,EAAA,GAAA,EAoDK,MApDL,GAoDK,EAjDD,EAAA,EAAA,GAAA,EAgDK,GAAA,MAAA,EA/C0B,EAAA,MAAS,MAAM,WAAlC,GAAS,OADrB,EAAA,GAAA,EAgDK,MAAA;IA9CA,KAAK;IACN,OAAM;GACN,GAAA,EAAA,EAAA,GAAA,EA2CY,EA1CH,EAAQ,MAAG,MAAA,KAAA,GAAA;IACf,MAAM,EAAQ;IACd,QAAQ,EAAQ,MAAG,WAAc,KAAA;IACjC,KAAK,EAAQ,MAAG,wBAA2B,KAAA;IAC5C,OAAM;;IAGN,SAAA,QAK2F,CAJjF,EAAQ,SADlB,EAAA,GAAA,EAK2F,GAAA;;KAHtF,KAAK,EAAQ;KACb,KAAK,EAAQ;KACd,iBAAc;KACd,OAAM;IACV,GAAA,MAAA,GAAA,CAAA,OAAA,KAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAAA,EA4BM,OA5BN,GA4BM;KA3BF,EAES,UAFT,GAES,EADF,EAAQ,IAAI,GAAA,CAAA;KAGT,EAAQ,OADlB,EAAA,GAAA,EAKO,QALP,GAKO,CAFH,EAAkD,GAAA;MAA1C,MAAK;MAAU,OAAM;KAC7B,CAAA,GAAA,EAA4B,GAAA,EAApB,KAAK,EAAQ,IAAA,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;KAEzB,EAYM,OAZN,GAYM,CAVQ,EAAQ,SADlB,EAAA,GAAA,EAIO,QAJP,GAIO,EADA,EAAQ,KAAK,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAGV,EAAQ,gBADlB,EAAA,GAAA,EAKO,QAAA;;MAHH,OAAK,EAAA,CAAC,uBACE,EAAqB,EAAQ,YAAY,CAAA,CAAA;KAC9C,GAAA,EAAA,EAAQ,YAAY,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA;KAIrB,EAAQ,eADlB,EAAA,GAAA,EAII,KAJJ,GAII,EADG,EAAQ,WAAW,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as h } from "./dist-
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { $ as e, C as t, F as n, L as r, O as i, Tt as a, _ as o, bt as s, h as c, it as l, m as u, pt as d, v as f, x as p, xt as m } from "./vue.runtime.esm-bundler-B3bThTaf.js";
|
|
2
|
+
import { i as h } from "./dist-C5Y-NI3i.js";
|
|
3
|
+
import { i as g, o as _, p as v } from "./index.es-gbmOq0Nu.js";
|
|
4
|
+
i(), m(), l();
|
|
5
5
|
var y = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "border border-surface-3 rounded-xl w-full overflow-hidden bg-surface"
|
|
8
8
|
}, b = { class: "px-sm py-6 bg-surface-1 min-h-40 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8" }, x = { class: "font-bold" }, S = { class: "p-sm flex flex-col items-center" }, C = ["innerHTML"], w = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "text-12 text-word-3 text-center"
|
|
11
|
-
}, T = /* @__PURE__ */
|
|
11
|
+
}, T = /* @__PURE__ */ t({
|
|
12
12
|
__name: "PkToolShowQrCode",
|
|
13
13
|
props: { part: { type: null } },
|
|
14
|
-
setup(
|
|
15
|
-
let
|
|
16
|
-
|
|
14
|
+
setup(t) {
|
|
15
|
+
let i = t, { copy: l, copied: m } = h(), T = u(() => i.part), E = d(""), D = d();
|
|
16
|
+
n(async () => {
|
|
17
17
|
let e = T.value.input?.content;
|
|
18
18
|
if (!e) return;
|
|
19
19
|
let { default: t } = await import("https://cdn.jsdelivr.net/npm/qrcode@1/+esm");
|
|
@@ -31,41 +31,41 @@ var y = {
|
|
|
31
31
|
e.href = i.toDataURL("image/png"), e.download = "qrcode.png", e.click();
|
|
32
32
|
}, o.src = r;
|
|
33
33
|
};
|
|
34
|
-
return (
|
|
35
|
-
let
|
|
36
|
-
return T.value?.input ? (
|
|
37
|
-
|
|
34
|
+
return (t, n) => {
|
|
35
|
+
let i = v, u = _, d = g;
|
|
36
|
+
return T.value?.input ? (r(), f("div", y, [c("div", b, [
|
|
37
|
+
p(i, {
|
|
38
38
|
name: "ri:qr-code-line",
|
|
39
39
|
class: "text-16"
|
|
40
40
|
}),
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
c("strong", x, a(t.$t("label.qrCode")), 1),
|
|
42
|
+
p(d, {
|
|
43
43
|
modifiers: "compact",
|
|
44
44
|
class: "ml-auto shrink-0"
|
|
45
45
|
}, {
|
|
46
|
-
default:
|
|
46
|
+
default: e(() => [p(u, {
|
|
47
47
|
modifiers: "action-quiet-small",
|
|
48
|
-
icon:
|
|
49
|
-
label:
|
|
50
|
-
onClick:
|
|
51
|
-
}, null, 8, ["icon", "label"]),
|
|
48
|
+
icon: s(m) ? "ri:check-line" : "ri:file-copy-line",
|
|
49
|
+
label: s(m) ? t.$t("action.copied") : t.$t("action.copy"),
|
|
50
|
+
onClick: n[0] ||= (e) => s(l)(T.value?.input?.content ?? "")
|
|
51
|
+
}, null, 8, ["icon", "label"]), p(u, {
|
|
52
52
|
modifiers: "action-quiet-small",
|
|
53
53
|
icon: "ri:download-line",
|
|
54
|
-
label:
|
|
54
|
+
label: t.$t("action.download"),
|
|
55
55
|
onClick: O
|
|
56
56
|
}, null, 8, ["label"])]),
|
|
57
57
|
_: 1
|
|
58
58
|
})
|
|
59
|
-
]),
|
|
59
|
+
]), c("div", S, [c("div", {
|
|
60
60
|
ref_key: "qrContainerRef",
|
|
61
61
|
ref: D,
|
|
62
62
|
class: "w-144 h-144",
|
|
63
63
|
innerHTML: E.value
|
|
64
|
-
}, null, 8, C), T.value.input.label ? (
|
|
64
|
+
}, null, 8, C), T.value.input.label ? (r(), f("p", w, a(T.value.input.label), 1)) : o("", !0)])])) : o("", !0);
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
//#endregion
|
|
69
69
|
export { T as default };
|
|
70
70
|
|
|
71
|
-
//# sourceMappingURL=PkToolShowQrCode-
|
|
71
|
+
//# sourceMappingURL=PkToolShowQrCode-CD2lo3O0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkToolShowQrCode-
|
|
1
|
+
{"version":3,"file":"PkToolShowQrCode-CD2lo3O0.js","names":["$t"],"sources":["../../../../packages/components/src/chat/PkToolShowQrCode.vue","../../../../packages/components/src/chat/PkToolShowQrCode.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref, onMounted } from 'vue'\n import { useClipboard } from '@vueuse/core'\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { copy, copied } = useClipboard()\n\n const toolPart = computed(() => {\n const part = props.part as {\n input?: {\n content: string\n label?: string\n }\n }\n return part\n })\n\n const svgContent = ref('')\n const qrContainerRef = ref<HTMLElement>()\n\n onMounted(async () => {\n const content = toolPart.value.input?.content\n if (!content) {\n return\n }\n const { default: QRCode } = await import('qrcode')\n svgContent.value = await QRCode.toString(content, { type: 'svg' })\n })\n\n const downloadQr = async () => {\n const svgEl = qrContainerRef.value?.querySelector('svg')\n if (!svgEl) {\n return\n }\n const svgData = new XMLSerializer().serializeToString(svgEl)\n const svgBlob = new Blob([svgData], {\n type: 'image/svg+xml;charset=utf-8',\n })\n const svgUrl = URL.createObjectURL(svgBlob)\n\n const canvas = document.createElement('canvas')\n canvas.width = 512\n canvas.height = 512\n const ctx = canvas.getContext('2d')\n const img = new Image()\n img.onload = () => {\n ctx?.drawImage(img, 0, 0, 512, 512)\n URL.revokeObjectURL(svgUrl)\n const a = document.createElement('a')\n a.href = canvas.toDataURL('image/png')\n a.download = 'qrcode.png'\n a.click()\n }\n img.src = svgUrl\n }\n</script>\n\n<template>\n <div\n v-if=\"toolPart?.input\"\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden bg-surface\">\n <div\n class=\"px-sm py-6 bg-surface-1 min-h-40 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8\">\n <VvIcon name=\"ri:qr-code-line\" class=\"text-16\" />\n <strong class=\"font-bold\">{{ $t('label.qrCode') }}</strong>\n <VvButtonGroup modifiers=\"compact\" class=\"ml-auto shrink-0\">\n <VvButton\n modifiers=\"action-quiet-small\"\n :icon=\"copied ? 'ri:check-line' : 'ri:file-copy-line'\"\n :label=\"copied ? $t('action.copied') : $t('action.copy')\"\n @click=\"copy(toolPart?.input?.content ?? '')\" />\n <VvButton\n modifiers=\"action-quiet-small\"\n icon=\"ri:download-line\"\n :label=\"$t('action.download')\"\n @click=\"downloadQr\" />\n </VvButtonGroup>\n </div>\n <div class=\"p-sm flex flex-col items-center\">\n <div ref=\"qrContainerRef\" class=\"w-144 h-144\" v-html=\"svgContent\" />\n <p\n v-if=\"toolPart.input.label\"\n class=\"text-12 text-word-3 text-center\">\n {{ toolPart.input.label }}\n </p>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { computed, ref, onMounted } from 'vue'\n import { useClipboard } from '@vueuse/core'\n\n const props = defineProps<{\n part: unknown\n }>()\n\n const { copy, copied } = useClipboard()\n\n const toolPart = computed(() => {\n const part = props.part as {\n input?: {\n content: string\n label?: string\n }\n }\n return part\n })\n\n const svgContent = ref('')\n const qrContainerRef = ref<HTMLElement>()\n\n onMounted(async () => {\n const content = toolPart.value.input?.content\n if (!content) {\n return\n }\n const { default: QRCode } = await import('qrcode')\n svgContent.value = await QRCode.toString(content, { type: 'svg' })\n })\n\n const downloadQr = async () => {\n const svgEl = qrContainerRef.value?.querySelector('svg')\n if (!svgEl) {\n return\n }\n const svgData = new XMLSerializer().serializeToString(svgEl)\n const svgBlob = new Blob([svgData], {\n type: 'image/svg+xml;charset=utf-8',\n })\n const svgUrl = URL.createObjectURL(svgBlob)\n\n const canvas = document.createElement('canvas')\n canvas.width = 512\n canvas.height = 512\n const ctx = canvas.getContext('2d')\n const img = new Image()\n img.onload = () => {\n ctx?.drawImage(img, 0, 0, 512, 512)\n URL.revokeObjectURL(svgUrl)\n const a = document.createElement('a')\n a.href = canvas.toDataURL('image/png')\n a.download = 'qrcode.png'\n a.click()\n }\n img.src = svgUrl\n }\n</script>\n\n<template>\n <div\n v-if=\"toolPart?.input\"\n class=\"border border-surface-3 rounded-xl w-full overflow-hidden bg-surface\">\n <div\n class=\"px-sm py-6 bg-surface-1 min-h-40 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8\">\n <VvIcon name=\"ri:qr-code-line\" class=\"text-16\" />\n <strong class=\"font-bold\">{{ $t('label.qrCode') }}</strong>\n <VvButtonGroup modifiers=\"compact\" class=\"ml-auto shrink-0\">\n <VvButton\n modifiers=\"action-quiet-small\"\n :icon=\"copied ? 'ri:check-line' : 'ri:file-copy-line'\"\n :label=\"copied ? $t('action.copied') : $t('action.copy')\"\n @click=\"copy(toolPart?.input?.content ?? '')\" />\n <VvButton\n modifiers=\"action-quiet-small\"\n icon=\"ri:download-line\"\n :label=\"$t('action.download')\"\n @click=\"downloadQr\" />\n </VvButtonGroup>\n </div>\n <div class=\"p-sm flex flex-col items-center\">\n <div ref=\"qrContainerRef\" class=\"w-144 h-144\" v-html=\"svgContent\" />\n <p\n v-if=\"toolPart.input.label\"\n class=\"text-12 text-word-3 text-center\">\n {{ toolPart.input.label }}\n </p>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAII,IAAM,IAAQ,GAIR,EAAE,SAAM,cAAW,EAAa,GAEhC,IAAW,QACA,EAAM,IAOtB,GAEK,IAAa,EAAI,EAAE,GACnB,IAAiB,EAAiB;EAExC,EAAU,YAAY;GAClB,IAAM,IAAU,EAAS,MAAM,OAAO;GACtC,IAAI,CAAC,GACD;GAEJ,IAAM,EAAE,SAAS,MAAW,MAAM,OAAO;GACzC,EAAW,QAAQ,MAAM,EAAO,SAAS,GAAS,EAAE,MAAM,MAAM,CAAC;EACrE,CAAC;EAED,IAAM,IAAa,YAAY;GAC3B,IAAM,IAAQ,EAAe,OAAO,cAAc,KAAK;GACvD,IAAI,CAAC,GACD;GAEJ,IAAM,IAAU,IAAI,cAAc,CAAC,CAAC,kBAAkB,CAAK,GACrD,IAAU,IAAI,KAAK,CAAC,CAAO,GAAG,EAChC,MAAM,8BACV,CAAC,GACK,IAAS,IAAI,gBAAgB,CAAO,GAEpC,IAAS,SAAS,cAAc,QAAQ;GAE9C,AADA,EAAO,QAAQ,KACf,EAAO,SAAS;GAChB,IAAM,IAAM,EAAO,WAAW,IAAI,GAC5B,IAAM,IAAI,MAAM;GAStB,AARA,EAAI,eAAe;IAEf,AADA,GAAK,UAAU,GAAK,GAAG,GAAG,KAAK,GAAG,GAClC,IAAI,gBAAgB,CAAM;IAC1B,IAAM,IAAI,SAAS,cAAc,GAAG;IAGpC,AAFA,EAAE,OAAO,EAAO,UAAU,WAAW,GACrC,EAAE,WAAW,cACb,EAAE,MAAM;GACZ,GACA,EAAI,MAAM;EACd;;;GAKU,OAAA,EAAA,OAAU,SADpB,EAAA,GAAA,EA4BM,OA5BN,GA4BM,CAzBF,EAgBM,OAhBN,GAgBM;IAdF,EAAiD,GAAA;KAAzC,MAAK;KAAkB,OAAM;;IACrC,EAA2D,UAA3D,GAA2D,EAA9BA,EAAAA,GAAE,cAAA,CAAA,GAAA,CAAA;IAC/B,EAWgB,GAAA;KAXD,WAAU;KAAU,OAAM;;KACrC,SAAA,QAIoD,CAJpD,EAIoD,GAAA;MAHhD,WAAU;MACT,MAAM,EAAA,CAAA,IAAM,kBAAA;MACZ,OAAO,EAAA,CAAA,IAASA,EAAAA,GAAE,eAAA,IAAoBA,EAAAA,GAAE,aAAA;MACxC,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,CAAA,CAAI,CAAC,EAAA,OAAU,OAAO,WAAO,EAAA;KACzC,GAAA,MAAA,GAAA,CAAA,QAAA,OAAA,CAAA,GAAA,EAI0B,GAAA;MAHtB,WAAU;MACV,MAAK;MACJ,OAAOA,EAAAA,GAAE,iBAAA;MACT,SAAO;;;;GAGpB,CAAA,GAAA,EAOM,OAPN,GAOM,CANF,EAAoE,OAAA;IAA3D,SAAA;IAAJ,KAAI;IAAiB,OAAM;IAAc,WAAQ,EAAA;GAE5C,GAAA,MAAA,GAAA,CAAA,GAAA,EAAA,MAAS,MAAM,SADzB,EAAA,GAAA,EAII,KAJJ,GAII,EADG,EAAA,MAAS,MAAM,KAAK,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA"}
|