@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.
Files changed (128) hide show
  1. package/dist/_chunks/PkLazyImg-CyeqD59M.js +34 -0
  2. package/dist/_chunks/{PkLazyImg-_389yCnQ.js.map → PkLazyImg-CyeqD59M.js.map} +1 -1
  3. package/dist/_chunks/{PkStreamingMarkdown-YJDdYD0E.js → PkStreamingMarkdown-DIkusrTI.js} +28 -28
  4. package/dist/_chunks/{PkStreamingMarkdown-YJDdYD0E.js.map → PkStreamingMarkdown-DIkusrTI.js.map} +1 -1
  5. package/dist/_chunks/PkToolRequestGeolocation-Cgus94KF.js +69 -0
  6. package/dist/_chunks/{PkToolRequestGeolocation-T16QI-Uv.js.map → PkToolRequestGeolocation-Cgus94KF.js.map} +1 -1
  7. package/dist/_chunks/{PkToolRequestOAuthConnection-C8e5np2q.js → PkToolRequestOAuthConnection-DsUpUh97.js} +21 -21
  8. package/dist/_chunks/{PkToolRequestOAuthConnection-C8e5np2q.js.map → PkToolRequestOAuthConnection-DsUpUh97.js.map} +1 -1
  9. package/dist/_chunks/PkToolShowArtifact-griVx9w3.js +93 -0
  10. package/dist/_chunks/{PkToolShowArtifact-D15GjBm6.js.map → PkToolShowArtifact-griVx9w3.js.map} +1 -1
  11. package/dist/_chunks/{PkToolShowCalendarEvent-D_GjXl2_.js → PkToolShowCalendarEvent-DyiNmqqo.js} +43 -43
  12. package/dist/_chunks/{PkToolShowCalendarEvent-D_GjXl2_.js.map → PkToolShowCalendarEvent-DyiNmqqo.js.map} +1 -1
  13. package/dist/_chunks/PkToolShowComparison-RA72YL7R.js +66 -0
  14. package/dist/_chunks/{PkToolShowComparison-Bp2rP2Hx.js.map → PkToolShowComparison-RA72YL7R.js.map} +1 -1
  15. package/dist/_chunks/{PkToolShowContactForm-NVzIu2t0.js → PkToolShowContactForm-BzDhv2yd.js} +41 -41
  16. package/dist/_chunks/{PkToolShowContactForm-NVzIu2t0.js.map → PkToolShowContactForm-BzDhv2yd.js.map} +1 -1
  17. package/dist/_chunks/{PkToolShowDiagram-BnZrDPVC.js → PkToolShowDiagram-DhXe8IPm.js} +79 -79
  18. package/dist/_chunks/{PkToolShowDiagram-BnZrDPVC.js.map → PkToolShowDiagram-DhXe8IPm.js.map} +1 -1
  19. package/dist/_chunks/{PkToolShowEmail-DCSj4328.js → PkToolShowEmail-CBmfy_I9.js} +34 -34
  20. package/dist/_chunks/{PkToolShowEmail-DCSj4328.js.map → PkToolShowEmail-CBmfy_I9.js.map} +1 -1
  21. package/dist/_chunks/PkToolShowForm-CzIfm5de.js +365 -0
  22. package/dist/_chunks/{PkToolShowForm-ztQFyFd9.js.map → PkToolShowForm-CzIfm5de.js.map} +1 -1
  23. package/dist/_chunks/PkToolShowImageGallery-CSIiRuSC.js +74 -0
  24. package/dist/_chunks/{PkToolShowImageGallery-DiOR0vYa.js.map → PkToolShowImageGallery-CSIiRuSC.js.map} +1 -1
  25. package/dist/_chunks/{PkToolShowLocation-CQmgakEo.js → PkToolShowLocation-BHoUqpx4.js} +4079 -4079
  26. package/dist/_chunks/{PkToolShowLocation-CQmgakEo.js.map → PkToolShowLocation-BHoUqpx4.js.map} +1 -1
  27. package/dist/_chunks/PkToolShowMessage-CpDmPfCG.js +77 -0
  28. package/dist/_chunks/{PkToolShowMessage-BysjJ1oS.js.map → PkToolShowMessage-CpDmPfCG.js.map} +1 -1
  29. package/dist/_chunks/{PkToolShowProductList-D-JXSRmA.js → PkToolShowProductList-B8uuIvGo.js} +28 -28
  30. package/dist/_chunks/{PkToolShowProductList-D-JXSRmA.js.map → PkToolShowProductList-B8uuIvGo.js.map} +1 -1
  31. package/dist/_chunks/{PkToolShowQrCode-BcIwuGqm.js → PkToolShowQrCode-CD2lo3O0.js} +23 -23
  32. package/dist/_chunks/{PkToolShowQrCode-BcIwuGqm.js.map → PkToolShowQrCode-CD2lo3O0.js.map} +1 -1
  33. package/dist/_chunks/{PkToolShowSources-U7etupUP.js → PkToolShowSources-JxaTAEpc.js} +98 -98
  34. package/dist/_chunks/{PkToolShowSources-U7etupUP.js.map → PkToolShowSources-JxaTAEpc.js.map} +1 -1
  35. package/dist/_chunks/{PkToolShowSuggestedReply-Dqe4gtEY.js → PkToolShowSuggestedReply-BTxqEwEm.js} +18 -18
  36. package/dist/_chunks/{PkToolShowSuggestedReply-Dqe4gtEY.js.map → PkToolShowSuggestedReply-BTxqEwEm.js.map} +1 -1
  37. package/dist/_chunks/{PkToolShowVideo-DYMhfXKH.js → PkToolShowVideo-CVksKdPD.js} +17 -17
  38. package/dist/_chunks/{PkToolShowVideo-DYMhfXKH.js.map → PkToolShowVideo-CVksKdPD.js.map} +1 -1
  39. package/dist/_chunks/{PkToolShowWeather-D_pJe5DI.js → PkToolShowWeather-IDwTDozU.js} +68 -68
  40. package/dist/_chunks/{PkToolShowWeather-D_pJe5DI.js.map → PkToolShowWeather-IDwTDozU.js.map} +1 -1
  41. package/dist/_chunks/PkToolShowWebPages-D9Yst_2O.js +78 -0
  42. package/dist/_chunks/{PkToolShowWebPages-CPNgXzrS.js.map → PkToolShowWebPages-D9Yst_2O.js.map} +1 -1
  43. package/dist/_chunks/{PkUrl-C3gMPCjz.js → PkUrl-B3FTSURr.js} +19 -19
  44. package/dist/_chunks/{PkUrl-C3gMPCjz.js.map → PkUrl-B3FTSURr.js.map} +1 -1
  45. package/dist/_chunks/{VvCheckbox.es-CEfwI84M.js → VvCheckbox.es-C_dlDzrr.js} +78 -78
  46. package/dist/_chunks/{VvCheckbox.es-CEfwI84M.js.map → VvCheckbox.es-C_dlDzrr.js.map} +1 -1
  47. package/dist/_chunks/{VvCheckboxGroup.es-B-eWqe8G.js → VvCheckboxGroup.es-hY0kWpC2.js} +197 -197
  48. package/dist/_chunks/{VvCheckboxGroup.es-B-eWqe8G.js.map → VvCheckboxGroup.es-hY0kWpC2.js.map} +1 -1
  49. package/dist/_chunks/VvCombobox.es-DxhDF7ab.js +2044 -0
  50. package/dist/_chunks/{VvCombobox.es-CfRJtWOd.js.map → VvCombobox.es-DxhDF7ab.js.map} +1 -1
  51. package/dist/_chunks/{VvInputText.es-B0HHD6Th.js → VvInputText.es-CdpU8kvP.js} +460 -460
  52. package/dist/_chunks/{VvInputText.es-B0HHD6Th.js.map → VvInputText.es-CdpU8kvP.js.map} +1 -1
  53. package/dist/_chunks/{VvRadio.es-B3u8JJFF.js → VvRadio.es-BruZ5FHR.js} +144 -144
  54. package/dist/_chunks/{VvRadio.es-B3u8JJFF.js.map → VvRadio.es-BruZ5FHR.js.map} +1 -1
  55. package/dist/_chunks/{VvRadioGroup.es--AMV1wAw.js → VvRadioGroup.es-DSv6UdEy.js} +148 -148
  56. package/dist/_chunks/{VvRadioGroup.es--AMV1wAw.js.map → VvRadioGroup.es-DSv6UdEy.js.map} +1 -1
  57. package/dist/_chunks/{VvSelect.es-BfrDID0e.js → VvSelect.es-C244CAei.js} +155 -155
  58. package/dist/_chunks/{VvSelect.es-BfrDID0e.js.map → VvSelect.es-C244CAei.js.map} +1 -1
  59. package/dist/_chunks/VvTextarea.es-DbaPIcWl.js +1166 -0
  60. package/dist/_chunks/{VvTextarea.es-CAzFW944.js.map → VvTextarea.es-DbaPIcWl.js.map} +1 -1
  61. package/dist/_chunks/{dist-BvSGMyWS.js → dist-BgJVX4FG.js} +12 -12
  62. package/dist/_chunks/{dist-BvSGMyWS.js.map → dist-BgJVX4FG.js.map} +1 -1
  63. package/dist/_chunks/{dist-TFHdNK0W.js → dist-C5Y-NI3i.js} +230 -230
  64. package/dist/_chunks/{dist-TFHdNK0W.js.map → dist-C5Y-NI3i.js.map} +1 -1
  65. package/dist/_chunks/{esm-CUYQMpeA.js → esm-BTbGj6W3.js} +25 -25
  66. package/dist/_chunks/{esm-CUYQMpeA.js.map → esm-BTbGj6W3.js.map} +1 -1
  67. package/dist/_chunks/{floating-ui.vue-Br_zOLJv.js → floating-ui.vue-CoA4oagI.js} +16 -16
  68. package/dist/_chunks/{floating-ui.vue-Br_zOLJv.js.map → floating-ui.vue-CoA4oagI.js.map} +1 -1
  69. package/dist/_chunks/{iconify-BGSTR7vH.js → iconify-6ObncgfH.js} +36 -36
  70. package/dist/_chunks/{iconify-BGSTR7vH.js.map → iconify-6ObncgfH.js.map} +1 -1
  71. package/dist/_chunks/{index.es-B9rhQl9Z.js → index.es-BbyodRh9.js} +258 -258
  72. package/dist/_chunks/{index.es-B9rhQl9Z.js.map → index.es-BbyodRh9.js.map} +1 -1
  73. package/dist/_chunks/index.es-gbmOq0Nu.js +3124 -0
  74. package/dist/_chunks/index.es-gbmOq0Nu.js.map +1 -0
  75. package/dist/_chunks/{rolldown-runtime-CEFd7nDs.js → rolldown-runtime-CoeuCKPe.js} +4 -11
  76. package/dist/_chunks/{src-BjFv9Ag8.js → src-CIEdKLKO.js} +2 -2
  77. package/dist/_chunks/{src-BjFv9Ag8.js.map → src-CIEdKLKO.js.map} +1 -1
  78. package/dist/_chunks/useImageFallback-BAsLRsyg.js +19 -0
  79. package/dist/_chunks/{useImageFallback-8kfLDjXm.js.map → useImageFallback-BAsLRsyg.js.map} +1 -1
  80. package/dist/_chunks/{useLightbox-Bq6k-Wlt.js → useLightbox-Epg2fN87.js} +7 -7
  81. package/dist/_chunks/{useLightbox-Bq6k-Wlt.js.map → useLightbox-Epg2fN87.js.map} +1 -1
  82. package/dist/_chunks/useShortUrlResolver--HRa6Od3.js +72 -0
  83. package/dist/_chunks/{useShortUrlResolver-BTJM8XRw.js.map → useShortUrlResolver--HRa6Od3.js.map} +1 -1
  84. package/dist/_chunks/{vue-i18n-BJ7nxwO3.js → vue-i18n-t25g63Be.js} +81 -81
  85. package/dist/_chunks/{vue-i18n-BJ7nxwO3.js.map → vue-i18n-t25g63Be.js.map} +1 -1
  86. package/dist/_chunks/vue.runtime.esm-bundler-B3bThTaf.js +3747 -0
  87. package/dist/_chunks/vue.runtime.esm-bundler-B3bThTaf.js.map +1 -0
  88. package/dist/ai-elements.es.js +1861 -1861
  89. package/dist/ai-elements.es.js.map +1 -1
  90. package/dist-vue/PkChatbot.js +1 -1
  91. package/dist-vue/PkChatbotAuth.js +1 -1
  92. package/dist-vue/PkChatbotFeedbackForm.js +1 -1
  93. package/dist-vue/PkChatbotMessages.js +1 -1
  94. package/dist-vue/PkChatbotViewChat.js +1 -1
  95. package/dist-vue/_chunks/{PkChatbot-DZ6TaZHh.js → PkChatbot-Ch8FlZjC.js} +2 -2
  96. package/dist-vue/_chunks/{PkChatbot-DZ6TaZHh.js.map → PkChatbot-Ch8FlZjC.js.map} +1 -1
  97. package/dist-vue/_chunks/{PkChatbotAuth-CqwTN8ih.js → PkChatbotAuth-DvnmIukc.js} +2 -2
  98. package/dist-vue/_chunks/{PkChatbotAuth-CqwTN8ih.js.map → PkChatbotAuth-DvnmIukc.js.map} +1 -1
  99. package/dist-vue/_chunks/{PkChatbotFeedbackForm-nEevDHmI.js → PkChatbotFeedbackForm-D0RNa7bE.js} +2 -2
  100. package/dist-vue/_chunks/{PkChatbotFeedbackForm-nEevDHmI.js.map → PkChatbotFeedbackForm-D0RNa7bE.js.map} +1 -1
  101. package/dist-vue/_chunks/{PkChatbotMessages-BgsyN-mB.js → PkChatbotMessages-DGO0WIqx.js} +4 -4
  102. package/dist-vue/_chunks/{PkChatbotMessages-BgsyN-mB.js.map → PkChatbotMessages-DGO0WIqx.js.map} +1 -1
  103. package/dist-vue/_chunks/{PkChatbotViewChat-0g30_sQH.js → PkChatbotViewChat-Dkz8dq8N.js} +3 -3
  104. package/dist-vue/_chunks/{PkChatbotViewChat-0g30_sQH.js.map → PkChatbotViewChat-Dkz8dq8N.js.map} +1 -1
  105. package/dist-vue/_chunks/{PkToolShowContactForm-CMK4zR2J.js → PkToolShowContactForm-CkkWxSSz.js} +2 -2
  106. package/dist-vue/_chunks/{PkToolShowContactForm-CMK4zR2J.js.map → PkToolShowContactForm-CkkWxSSz.js.map} +1 -1
  107. package/dist-vue/_chunks/{PkToolShowDiagram-DoklcF3f.js → PkToolShowDiagram-D0NBG-Gy.js} +2 -2
  108. package/dist-vue/_chunks/{PkToolShowDiagram-DoklcF3f.js.map → PkToolShowDiagram-D0NBG-Gy.js.map} +1 -1
  109. package/dist-vue/_chunks/{index.es-BT6Jr2yi.js → index.es-BKxzs6Sh.js} +2 -2
  110. package/dist-vue/_chunks/{index.es-BT6Jr2yi.js.map → index.es-BKxzs6Sh.js.map} +1 -1
  111. package/dist-vue/index.js +10 -10
  112. package/package.json +2 -2
  113. package/dist/_chunks/PkLazyImg-_389yCnQ.js +0 -34
  114. package/dist/_chunks/PkToolRequestGeolocation-T16QI-Uv.js +0 -69
  115. package/dist/_chunks/PkToolShowArtifact-D15GjBm6.js +0 -93
  116. package/dist/_chunks/PkToolShowComparison-Bp2rP2Hx.js +0 -66
  117. package/dist/_chunks/PkToolShowForm-ztQFyFd9.js +0 -365
  118. package/dist/_chunks/PkToolShowImageGallery-DiOR0vYa.js +0 -74
  119. package/dist/_chunks/PkToolShowMessage-BysjJ1oS.js +0 -77
  120. package/dist/_chunks/PkToolShowWebPages-CPNgXzrS.js +0 -78
  121. package/dist/_chunks/VvCombobox.es-CfRJtWOd.js +0 -2044
  122. package/dist/_chunks/VvTextarea.es-CAzFW944.js +0 -1166
  123. package/dist/_chunks/index.es-DvV0VhDa.js +0 -9832
  124. package/dist/_chunks/index.es-DvV0VhDa.js.map +0 -1
  125. package/dist/_chunks/useImageFallback-8kfLDjXm.js +0 -19
  126. package/dist/_chunks/useShortUrlResolver-BTJM8XRw.js +0 -72
  127. package/dist/_chunks/vue.runtime.esm-bundler-DF2of3lp.js +0 -5007
  128. 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
@@ -1 +1 @@
1
- {"version":3,"file":"PkToolShowMessage-BysjJ1oS.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"}
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"}
@@ -1,8 +1,8 @@
1
- import { B as e, Ht as t, R as n, S as r, U as i, _ as a, et as o, f as s, g as c, h as l, k as u, kt as d, qt as f, v as p, w as m, y as h } from "./vue.runtime.esm-bundler-DF2of3lp.js";
2
- import { u as g } from "./index.es-DvV0VhDa.js";
3
- import { t as _ } from "./PkLazyImg-_389yCnQ.js";
4
- import { t as v } from "./PkUrl-C3gMPCjz.js";
5
- u(), d();
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__ */ m({
18
+ }, E = /* @__PURE__ */ t({
19
19
  __name: "PkToolShowProductList",
20
20
  props: { part: { type: null } },
21
- setup(u) {
22
- let d = u, m = l(() => d.part), E = (e) => {
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 (l, u) => {
27
+ return (t, i) => {
28
28
  let d = g;
29
- return m.value?.input?.products?.length ? (n(), h("ul", y, [(n(!0), h(s, null, e(m.value.input.products, (e, s) => (n(), h("li", {
30
- key: s,
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
- }, [(n(), a(i(e.url ? "a" : "div"), {
33
- href: e.url,
34
- target: e.url ? "_blank" : void 0,
35
- rel: e.url ? "noopener noreferrer" : void 0,
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: o(() => [e.image ? (n(), a(_, {
38
+ default: e(() => [t.image ? (r(), l(_, {
39
39
  key: 0,
40
- src: e.image,
41
- alt: e.name,
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"])) : p("", !0), c("div", b, [
45
- c("strong", x, f(e.name), 1),
46
- e.url ? (n(), h("span", S, [r(d, {
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
- }), r(v, { url: e.url }, null, 8, ["url"])])) : p("", !0),
50
- c("div", C, [e.price ? (n(), h("span", w, f(e.price), 1)) : p("", !0), e.availability ? (n(), h("span", {
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: t(["text-10 font-medium", E(e.availability)])
53
- }, f(e.availability), 3)) : p("", !0)]),
54
- e.description ? (n(), h("p", T, f(e.description), 1)) : p("", !0)
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))])) : p("", !0);
61
+ ]))]))), 128))])) : s("", !0);
62
62
  };
63
63
  }
64
64
  });
65
65
  //#endregion
66
66
  export { E as default };
67
67
 
68
- //# sourceMappingURL=PkToolShowProductList-D-JXSRmA.js.map
68
+ //# sourceMappingURL=PkToolShowProductList-B8uuIvGo.js.map
@@ -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 { I as e, R as t, S as n, at as r, et as i, g as a, h as o, k as s, kt as c, mt as l, qt as u, v as d, w as f, xt as p, y as m } from "./vue.runtime.esm-bundler-DF2of3lp.js";
2
- import { i as h } from "./dist-TFHdNK0W.js";
3
- import { s as g, t as _, u as v } from "./index.es-DvV0VhDa.js";
4
- s(), c(), r();
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__ */ f({
11
+ }, T = /* @__PURE__ */ t({
12
12
  __name: "PkToolShowQrCode",
13
13
  props: { part: { type: null } },
14
- setup(r) {
15
- let s = r, { copy: c, copied: f } = h(), T = o(() => s.part), E = l(""), D = l();
16
- e(async () => {
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 (e, r) => {
35
- let o = v, s = g, l = _;
36
- return T.value?.input ? (t(), m("div", y, [a("div", b, [
37
- n(o, {
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
- a("strong", x, u(e.$t("label.qrCode")), 1),
42
- n(l, {
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: i(() => [n(s, {
46
+ default: e(() => [p(u, {
47
47
  modifiers: "action-quiet-small",
48
- icon: p(f) ? "ri:check-line" : "ri:file-copy-line",
49
- label: p(f) ? e.$t("action.copied") : e.$t("action.copy"),
50
- onClick: r[0] ||= (e) => p(c)(T.value?.input?.content ?? "")
51
- }, null, 8, ["icon", "label"]), n(s, {
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: e.$t("action.download"),
54
+ label: t.$t("action.download"),
55
55
  onClick: O
56
56
  }, null, 8, ["label"])]),
57
57
  _: 1
58
58
  })
59
- ]), a("div", S, [a("div", {
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 ? (t(), m("p", w, u(T.value.input.label), 1)) : d("", !0)])])) : d("", !0);
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-BcIwuGqm.js.map
71
+ //# sourceMappingURL=PkToolShowQrCode-CD2lo3O0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PkToolShowQrCode-BcIwuGqm.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"}
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"}