nuxt-og-image 6.5.3 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +2 -0
  2. package/dist/chunks/tw4.cjs +7 -7
  3. package/dist/chunks/tw4.mjs +7 -7
  4. package/dist/chunks/uno.cjs +6 -6
  5. package/dist/chunks/uno.mjs +6 -6
  6. package/dist/cli.cjs +12 -5
  7. package/dist/cli.mjs +10 -3
  8. package/dist/devtools/components/og-image/AddComponentDialog.vue +85 -0
  9. package/dist/devtools/components/og-image/BlueskyCardRenderer.vue +134 -0
  10. package/dist/devtools/components/og-image/CreateOgImageDialog.vue +56 -0
  11. package/dist/devtools/components/og-image/DiscordCardRenderer.vue +125 -0
  12. package/dist/devtools/components/og-image/FacebookCardRenderer.vue +128 -0
  13. package/dist/devtools/components/og-image/IFrameLoader.vue +93 -0
  14. package/dist/devtools/components/og-image/ImageLoader.vue +197 -0
  15. package/dist/devtools/components/og-image/LinkedInCardRenderer.vue +100 -0
  16. package/dist/devtools/components/og-image/RendererSelectModal.vue +356 -0
  17. package/dist/devtools/components/og-image/SlackCardRenderer.vue +140 -0
  18. package/dist/devtools/components/og-image/TemplateComponentPreview.vue +186 -0
  19. package/dist/devtools/components/og-image/TwitterCardRenderer.vue +170 -0
  20. package/dist/devtools/components/og-image/WhatsAppRenderer.vue +294 -0
  21. package/dist/devtools/lib/og-image/keys.ts +8 -0
  22. package/dist/devtools/lib/og-image/og-image.ts +536 -0
  23. package/dist/devtools/lib/og-image/renderer-select.ts +3 -0
  24. package/dist/devtools/lib/og-image/rpc-types.ts +2 -0
  25. package/dist/devtools/lib/og-image/rpc.ts +73 -0
  26. package/dist/devtools/lib/og-image/runtime-types.ts +10 -0
  27. package/dist/devtools/lib/og-image/shared/urlEncoding.ts +502 -0
  28. package/dist/devtools/lib/og-image/shared.ts +30 -0
  29. package/dist/devtools/lib/og-image/templates.ts +9 -0
  30. package/dist/devtools/lib/og-image/types.ts +38 -0
  31. package/dist/devtools/lib/og-image/util/logic.ts +21 -0
  32. package/dist/devtools/nuxt.config.ts +6 -0
  33. package/dist/devtools/pages/og-image/debug.vue +32 -0
  34. package/dist/devtools/pages/og-image/docs.vue +3 -0
  35. package/dist/devtools/pages/og-image/index.vue +1682 -0
  36. package/dist/devtools/pages/og-image/templates.vue +150 -0
  37. package/dist/devtools/pages/og-image.vue +184 -0
  38. package/dist/module.cjs +5 -5
  39. package/dist/module.d.cts +5 -3
  40. package/dist/module.d.mts +5 -3
  41. package/dist/module.d.ts +5 -3
  42. package/dist/module.json +1 -1
  43. package/dist/module.mjs +5 -5
  44. package/dist/runtime/server/og-image/bindings/font-assets/cloudflare.d.ts +1 -1
  45. package/dist/runtime/server/og-image/bindings/font-assets/cloudflare.js +6 -1
  46. package/dist/runtime/server/og-image/bindings/font-assets/dev-prerender.js +13 -6
  47. package/dist/runtime/server/og-image/bindings/font-assets/external-url.d.ts +36 -0
  48. package/dist/runtime/server/og-image/bindings/font-assets/external-url.js +47 -0
  49. package/dist/runtime/server/og-image/bindings/font-assets/node.d.ts +1 -1
  50. package/dist/runtime/server/og-image/bindings/font-assets/node.js +14 -7
  51. package/dist/runtime/server/og-image/bindings/takumi/node-dev.js +7 -1
  52. package/dist/runtime/server/og-image/core/plugins/imageSrc.js +2 -2
  53. package/dist/runtime/server/og-image/fonts.d.ts +4 -0
  54. package/dist/runtime/server/og-image/fonts.js +21 -5
  55. package/dist/runtime/server/og-image/satori/instances.d.ts +1 -2
  56. package/dist/runtime/server/og-image/takumi/renderer.js +61 -19
  57. package/dist/runtime/server/util/ssrf.d.ts +10 -0
  58. package/dist/runtime/server/util/ssrf.js +9 -1
  59. package/dist/runtime/types.d.ts +13 -0
  60. package/dist/shared/{nuxt-og-image.DdbTs-xp.mjs → nuxt-og-image.CPSxZhVO.mjs} +122 -496
  61. package/dist/shared/nuxt-og-image.DM30kcDz.mjs +660 -0
  62. package/dist/shared/nuxt-og-image.RI9DgjgV.cjs +689 -0
  63. package/dist/shared/{nuxt-og-image.CfTPCtaS.cjs → nuxt-og-image.yDJBWXBt.cjs} +181 -555
  64. package/package.json +48 -45
  65. package/dist/devtools/200.html +0 -1
  66. package/dist/devtools/404.html +0 -1
  67. package/dist/devtools/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
  68. package/dist/devtools/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
  69. package/dist/devtools/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
  70. package/dist/devtools/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
  71. package/dist/devtools/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
  72. package/dist/devtools/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
  73. package/dist/devtools/_nuxt/BZ_CG9ll.js +0 -30
  74. package/dist/devtools/_nuxt/BdMalyEU.js +0 -4
  75. package/dist/devtools/_nuxt/BhkGaWEe.js +0 -3
  76. package/dist/devtools/_nuxt/Bm4Q-nTW.js +0 -3
  77. package/dist/devtools/_nuxt/BsRKQH5X.js +0 -1
  78. package/dist/devtools/_nuxt/C5797Ieg.js +0 -1
  79. package/dist/devtools/_nuxt/CBcJg2GG.js +0 -2
  80. package/dist/devtools/_nuxt/CDaXKRRu.js +0 -1
  81. package/dist/devtools/_nuxt/CM-t-6ZT.js +0 -1
  82. package/dist/devtools/_nuxt/CP0tQR2M.js +0 -1
  83. package/dist/devtools/_nuxt/CXAM78_A.js +0 -1
  84. package/dist/devtools/_nuxt/CYDI7SLa.js +0 -1
  85. package/dist/devtools/_nuxt/CkbDfutK.js +0 -152
  86. package/dist/devtools/_nuxt/Co8Tk_C2.js +0 -1
  87. package/dist/devtools/_nuxt/CqjbkMN9.js +0 -3
  88. package/dist/devtools/_nuxt/D49I50CU.js +0 -1
  89. package/dist/devtools/_nuxt/DevtoolsSection.DkT2bJJh.css +0 -1
  90. package/dist/devtools/_nuxt/DevtoolsSnippet.zV_SDojn.css +0 -1
  91. package/dist/devtools/_nuxt/HWyD49jH.js +0 -1
  92. package/dist/devtools/_nuxt/IFrameLoader.k_861Nnq.css +0 -1
  93. package/dist/devtools/_nuxt/PONEy9N-.js +0 -1
  94. package/dist/devtools/_nuxt/builds/latest.json +0 -1
  95. package/dist/devtools/_nuxt/builds/meta/0f3dbc15-8308-4956-81b9-5507cac7018c.json +0 -1
  96. package/dist/devtools/_nuxt/entry.D7u2asd2.css +0 -2
  97. package/dist/devtools/_nuxt/fira-code.Bc8wnsZt.woff2 +0 -0
  98. package/dist/devtools/_nuxt/hubot-sans.DLGyhQVu.woff2 +0 -0
  99. package/dist/devtools/_nuxt/pO9PmtPW.js +0 -6
  100. package/dist/devtools/_nuxt/pages.0Jk10xlb.css +0 -1
  101. package/dist/devtools/_nuxt/renderer-select.CN5IWe60.css +0 -1
  102. package/dist/devtools/_nuxt/templates.BByln3BG.css +0 -1
  103. package/dist/devtools/debug/index.html +0 -1
  104. package/dist/devtools/docs/index.html +0 -1
  105. package/dist/devtools/index.html +0 -1
  106. package/dist/devtools/templates/index.html +0 -1
  107. package/dist/shared/nuxt-og-image.CJa2KCie.mjs +0 -189
  108. package/dist/shared/nuxt-og-image.CMYbz66P.cjs +0 -193
@@ -0,0 +1,170 @@
1
+ <script setup lang="ts">
2
+ import { computed, onMounted, ref } from 'vue'
3
+
4
+ const props = defineProps<{
5
+ aspectRatio: number
6
+ title?: string
7
+ cardType?: 'summary' | 'summary_large_image'
8
+ }>()
9
+
10
+ const currTime = ref('')
11
+
12
+ onMounted(() => {
13
+ const date = new Date()
14
+ const options: Intl.DateTimeFormatOptions = {
15
+ hour: 'numeric',
16
+ minute: 'numeric',
17
+ hour12: true,
18
+ month: 'short',
19
+ day: '2-digit',
20
+ year: 'numeric',
21
+ }
22
+ const formatter = new Intl.DateTimeFormat('en-US', options)
23
+ const parts = formatter.formatToParts(date)
24
+ currTime.value = `${parts.find(part => part.type === 'hour')?.value}:${
25
+ parts.find(part => part.type === 'minute')?.value} ${
26
+ parts.find(part => part.type === 'dayPeriod')?.value} · ${
27
+ parts.find(part => part.type === 'month')?.value} ${
28
+ parts.find(part => part.type === 'day')?.value}, ${
29
+ parts.find(part => part.type === 'year')?.value}`
30
+ })
31
+
32
+ // Auto-detect if should show summary (square) card based on aspect ratio
33
+ // Use summary card for square-ish images (aspect ratio close to 1)
34
+ const isSmallCard = computed(() => {
35
+ if (props.cardType)
36
+ return props.cardType === 'summary'
37
+ // Auto-detect: aspect ratio < 1.3 is considered square-ish
38
+ return props.aspectRatio < 1.3
39
+ })
40
+ </script>
41
+
42
+ <template>
43
+ <div class="twitter-card">
44
+ <div class="twitter-card-inner">
45
+ <div
46
+ class="card-container"
47
+ :class="isSmallCard ? 'flex' : ''"
48
+ >
49
+ <div
50
+ class="card-image"
51
+ :class="isSmallCard ? 'w-32 h-32 shrink-0' : 'aspect-[2/1] w-full'"
52
+ :style="isSmallCard ? {} : { aspectRatio }"
53
+ >
54
+ <slot />
55
+ <div class="card-image-overlay" />
56
+ </div>
57
+ <div class="card-content" :class="isSmallCard ? 'flex-1 min-w-0' : ''">
58
+ <p class="card-domain">
59
+ <slot name="domain" />
60
+ </p>
61
+ <p class="card-title">
62
+ <slot name="title">
63
+ {{ title }}
64
+ </slot>
65
+ </p>
66
+ </div>
67
+ </div>
68
+ <p class="card-time">
69
+ {{ currTime }}
70
+ </p>
71
+ </div>
72
+ </div>
73
+ </template>
74
+
75
+ <style>
76
+ .twitter-card {
77
+ font-family: 'Hubot Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
78
+ max-height: 100%;
79
+ position: relative;
80
+ display: flex;
81
+ flex-direction: column;
82
+ }
83
+
84
+ .twitter-card-inner {
85
+ width: 100%;
86
+ max-width: 600px;
87
+ margin: 0 auto;
88
+ }
89
+
90
+ .twitter-card .card-container {
91
+ border-radius: 16px;
92
+ overflow: hidden;
93
+ border: 1px solid oklch(92% 0.01 285);
94
+ background: oklch(100% 0 0);
95
+ box-shadow: 0 4px 24px oklch(0% 0 0 / 0.06);
96
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
97
+ }
98
+
99
+ .dark .twitter-card .card-container {
100
+ border-color: oklch(28% 0.04 285);
101
+ background: oklch(18% 0.04 285);
102
+ box-shadow: 0 4px 24px oklch(0% 0 0 / 0.2);
103
+ }
104
+
105
+ .twitter-card .card-container:hover {
106
+ border-color: oklch(85% 0.02 285);
107
+ box-shadow: 0 6px 32px oklch(0% 0 0 / 0.1);
108
+ }
109
+
110
+ .dark .twitter-card .card-container:hover {
111
+ border-color: oklch(35% 0.04 285);
112
+ }
113
+
114
+ .twitter-card .card-image {
115
+ position: relative;
116
+ overflow: hidden;
117
+ background: oklch(96% 0.01 285);
118
+ }
119
+
120
+ .dark .twitter-card .card-image {
121
+ background: oklch(22% 0.04 285);
122
+ }
123
+
124
+ .twitter-card .card-image img,
125
+ .twitter-card .card-image > *:first-child:not(.card-image-overlay) {
126
+ width: 100%;
127
+ height: 100%;
128
+ object-fit: cover;
129
+ }
130
+
131
+ .twitter-card .card-image-overlay {
132
+ position: absolute;
133
+ inset: 0;
134
+ box-shadow: inset 0 0 0 1px oklch(0% 0 0 / 0.05);
135
+ }
136
+
137
+ .dark .twitter-card .card-image-overlay {
138
+ box-shadow: inset 0 0 0 1px oklch(100% 0 0 / 0.05);
139
+ }
140
+
141
+ .twitter-card .card-content {
142
+ padding: 12px 14px;
143
+ }
144
+
145
+ .twitter-card .card-domain {
146
+ font-size: 13px;
147
+ color: oklch(55% 0.04 285);
148
+ margin: 0;
149
+ white-space: nowrap;
150
+ overflow: hidden;
151
+ text-overflow: ellipsis;
152
+ }
153
+
154
+ .twitter-card .card-title {
155
+ font-size: 15px;
156
+ font-weight: 500;
157
+ margin: 2px 0 0;
158
+ line-height: 1.3;
159
+ display: -webkit-box;
160
+ -webkit-line-clamp: 2;
161
+ -webkit-box-orient: vertical;
162
+ overflow: hidden;
163
+ }
164
+
165
+ .twitter-card .card-time {
166
+ margin-top: 12px;
167
+ font-size: 14px;
168
+ color: oklch(55% 0.04 285);
169
+ }
170
+ </style>
@@ -0,0 +1,294 @@
1
+ <script setup lang="ts">
2
+ defineProps<{
3
+ aspectRatio?: number
4
+ squared?: boolean
5
+ }>()
6
+ </script>
7
+
8
+ <template>
9
+ <div class="whatsapp-dual-preview">
10
+ <!-- Inline style - only shown in Squared mode -->
11
+ <div v-if="squared" class="whatsapp-section">
12
+ <p class="whatsapp-label">
13
+ Inline (in message) — 2x
14
+ </p>
15
+ <div class="whatsapp-inline-card whatsapp-inline-card--squared">
16
+ <div class="whatsapp-inline-image">
17
+ <slot v-if="!$slots.inlineImage" />
18
+ <slot v-else name="inlineImage" />
19
+ <div class="whatsapp-image-overlay" />
20
+ </div>
21
+ <div class="whatsapp-inline-content">
22
+ <div class="whatsapp-title-inline">
23
+ <slot name="title" />
24
+ </div>
25
+ <div class="whatsapp-description-inline">
26
+ <slot name="description" />
27
+ </div>
28
+ <div class="whatsapp-url-inline">
29
+ <UIcon name="carbon:link" class="w-2.5 h-2.5" />
30
+ <slot name="siteName" />
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+
36
+ <!-- Full card style - appears when link is standalone -->
37
+ <div v-if="!squared" class="whatsapp-section">
38
+ <p class="whatsapp-label">
39
+ Full card (standalone link)
40
+ </p>
41
+ <div class="whatsapp-full-card">
42
+ <div class="whatsapp-full-image">
43
+ <slot />
44
+ <div class="whatsapp-image-overlay" />
45
+ </div>
46
+ <div class="whatsapp-full-content">
47
+ <div class="whatsapp-title">
48
+ <slot name="title" />
49
+ </div>
50
+ <div class="whatsapp-description">
51
+ <slot name="description" />
52
+ </div>
53
+ <div class="whatsapp-url">
54
+ <UIcon name="carbon:link" class="w-3 h-3" />
55
+ <slot name="url" />
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </template>
62
+
63
+ <style>
64
+ .whatsapp-dual-preview {
65
+ display: flex;
66
+ justify-content: center;
67
+ gap: 24px;
68
+ flex-wrap: wrap;
69
+ font-family: 'Hubot Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
70
+ }
71
+
72
+ .whatsapp-section {
73
+ display: flex;
74
+ flex-direction: column;
75
+ gap: 8px;
76
+ }
77
+
78
+ .whatsapp-label {
79
+ font-size: 12px;
80
+ color: oklch(55% 0.03 285);
81
+ margin: 0;
82
+ }
83
+
84
+ .dark .whatsapp-label {
85
+ color: oklch(60% 0.03 285);
86
+ }
87
+
88
+ /* Inline card - square thumbnail on left */
89
+ .whatsapp-inline-card {
90
+ display: flex;
91
+ max-width: 360px;
92
+ border-radius: 8px;
93
+ overflow: hidden;
94
+ background: #dcf8c6;
95
+ box-shadow: 0 4px 20px oklch(0% 0 0 / 0.1);
96
+ }
97
+
98
+ .dark .whatsapp-inline-card {
99
+ background: #1f2c34;
100
+ box-shadow: 0 4px 20px oklch(0% 0 0 / 0.2);
101
+ }
102
+
103
+ .whatsapp-inline-image {
104
+ width: 80px;
105
+ height: 80px;
106
+ flex-shrink: 0;
107
+ position: relative;
108
+ overflow: hidden;
109
+ background: oklch(85% 0.02 165);
110
+ }
111
+
112
+ .dark .whatsapp-inline-image {
113
+ background: oklch(25% 0.03 165);
114
+ }
115
+
116
+ .whatsapp-inline-image img,
117
+ .whatsapp-inline-image > *:first-child:not(.whatsapp-image-overlay) {
118
+ width: 100%;
119
+ height: 100%;
120
+ object-fit: cover;
121
+ }
122
+
123
+ .whatsapp-inline-content {
124
+ padding: 10px;
125
+ flex: 1;
126
+ min-width: 0;
127
+ }
128
+
129
+ .whatsapp-title-inline {
130
+ font-size: 13px;
131
+ font-weight: 500;
132
+ color: oklch(20% 0.02 285);
133
+ display: -webkit-box;
134
+ -webkit-line-clamp: 1;
135
+ -webkit-box-orient: vertical;
136
+ overflow: hidden;
137
+ }
138
+
139
+ .dark .whatsapp-title-inline {
140
+ color: #e9edef;
141
+ }
142
+
143
+ .whatsapp-description-inline {
144
+ font-size: 11px;
145
+ color: oklch(40% 0.03 285);
146
+ display: -webkit-box;
147
+ -webkit-line-clamp: 2;
148
+ -webkit-box-orient: vertical;
149
+ overflow: hidden;
150
+ margin-top: 3px;
151
+ }
152
+
153
+ .dark .whatsapp-description-inline {
154
+ color: #8696a0;
155
+ }
156
+
157
+ .whatsapp-url-inline {
158
+ font-size: 11px;
159
+ color: oklch(50% 0.03 285);
160
+ display: flex;
161
+ align-items: center;
162
+ gap: 4px;
163
+ margin-top: 3px;
164
+ white-space: nowrap;
165
+ overflow: hidden;
166
+ text-overflow: ellipsis;
167
+ }
168
+
169
+ .dark .whatsapp-url-inline {
170
+ color: #8696a0;
171
+ }
172
+
173
+ /* Full card - 2:1 image on top */
174
+ .whatsapp-full-card {
175
+ width: 360px;
176
+ border-radius: 8px;
177
+ overflow: hidden;
178
+ background: #dcf8c6;
179
+ box-shadow: 0 4px 20px oklch(0% 0 0 / 0.1);
180
+ }
181
+
182
+ .dark .whatsapp-full-card {
183
+ background: #1f2c34;
184
+ box-shadow: 0 4px 20px oklch(0% 0 0 / 0.2);
185
+ }
186
+
187
+ .whatsapp-full-image {
188
+ aspect-ratio: 2 / 1;
189
+ width: 100%;
190
+ position: relative;
191
+ overflow: hidden;
192
+ background: oklch(85% 0.02 165);
193
+ }
194
+
195
+ .dark .whatsapp-full-image {
196
+ background: oklch(25% 0.03 165);
197
+ }
198
+
199
+ .whatsapp-full-image img,
200
+ .whatsapp-full-image > *:first-child:not(.whatsapp-image-overlay) {
201
+ width: 100%;
202
+ height: 100%;
203
+ object-fit: cover;
204
+ }
205
+
206
+ .whatsapp-full-content {
207
+ padding: 14px;
208
+ background: #dcf8c6;
209
+ }
210
+
211
+ .dark .whatsapp-full-content {
212
+ background: #1f2c34;
213
+ }
214
+
215
+ .whatsapp-title {
216
+ font-size: 15px;
217
+ font-weight: 500;
218
+ color: oklch(20% 0.02 285);
219
+ display: -webkit-box;
220
+ -webkit-line-clamp: 2;
221
+ -webkit-box-orient: vertical;
222
+ overflow: hidden;
223
+ }
224
+
225
+ .dark .whatsapp-title {
226
+ color: #e9edef;
227
+ }
228
+
229
+ .whatsapp-description {
230
+ font-size: 13px;
231
+ color: oklch(40% 0.03 285);
232
+ display: -webkit-box;
233
+ -webkit-line-clamp: 3;
234
+ -webkit-box-orient: vertical;
235
+ overflow: hidden;
236
+ margin-top: 4px;
237
+ }
238
+
239
+ .dark .whatsapp-description {
240
+ color: #8696a0;
241
+ }
242
+
243
+ .whatsapp-url {
244
+ font-size: 13px;
245
+ color: oklch(50% 0.03 285);
246
+ display: flex;
247
+ align-items: center;
248
+ gap: 6px;
249
+ margin-top: 8px;
250
+ white-space: nowrap;
251
+ overflow: hidden;
252
+ text-overflow: ellipsis;
253
+ }
254
+
255
+ .dark .whatsapp-url {
256
+ color: #8696a0;
257
+ }
258
+
259
+ /* Shared overlay */
260
+ .whatsapp-image-overlay {
261
+ position: absolute;
262
+ inset: 0;
263
+ box-shadow: inset 0 0 0 1px oklch(0% 0 0 / 0.05);
264
+ pointer-events: none;
265
+ }
266
+
267
+ .dark .whatsapp-image-overlay {
268
+ box-shadow: inset 0 0 0 1px oklch(100% 0 0 / 0.05);
269
+ }
270
+
271
+ /* Squared variant — 2x inline card */
272
+ .whatsapp-inline-card--squared {
273
+ max-width: 560px;
274
+ }
275
+
276
+ .whatsapp-inline-card--squared .whatsapp-inline-image {
277
+ width: 128px;
278
+ height: 128px;
279
+ }
280
+
281
+ .whatsapp-inline-card--squared .whatsapp-title-inline {
282
+ font-size: 14px;
283
+ -webkit-line-clamp: 2;
284
+ }
285
+
286
+ .whatsapp-inline-card--squared .whatsapp-description-inline {
287
+ font-size: 12px;
288
+ -webkit-line-clamp: 3;
289
+ }
290
+
291
+ .whatsapp-inline-card--squared .whatsapp-url-inline {
292
+ font-size: 12px;
293
+ }
294
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { InjectionKey, Ref } from 'vue'
2
+ import type { AsyncDataRequestStatus } from '#app'
3
+ import type { GlobalDebugResponse, PathDebugResponse } from './types'
4
+
5
+ export const GlobalDebugKey: InjectionKey<Ref<GlobalDebugResponse | null>> = Symbol('GlobalDebug')
6
+ export const PathDebugKey: InjectionKey<Ref<PathDebugResponse | null>> = Symbol('PathDebug')
7
+ export const PathDebugStatusKey: InjectionKey<Ref<AsyncDataRequestStatus>> = Symbol('PathDebugStatus')
8
+ export const RefetchPathDebugKey: InjectionKey<() => Promise<void>> = Symbol('RefetchPathDebug')