nuxt-og-image 6.5.2 → 6.6.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 (88) hide show
  1. package/dist/chunks/tw4.cjs +1 -1
  2. package/dist/chunks/tw4.mjs +1 -1
  3. package/dist/chunks/uno.cjs +1 -1
  4. package/dist/chunks/uno.mjs +1 -1
  5. package/dist/devtools/components/og-image/AddComponentDialog.vue +85 -0
  6. package/dist/devtools/components/og-image/BlueskyCardRenderer.vue +134 -0
  7. package/dist/devtools/components/og-image/CreateOgImageDialog.vue +56 -0
  8. package/dist/devtools/components/og-image/DiscordCardRenderer.vue +125 -0
  9. package/dist/devtools/components/og-image/FacebookCardRenderer.vue +128 -0
  10. package/dist/devtools/components/og-image/IFrameLoader.vue +93 -0
  11. package/dist/devtools/components/og-image/ImageLoader.vue +197 -0
  12. package/dist/devtools/components/og-image/LinkedInCardRenderer.vue +100 -0
  13. package/dist/devtools/components/og-image/RendererSelectModal.vue +356 -0
  14. package/dist/devtools/components/og-image/SlackCardRenderer.vue +140 -0
  15. package/dist/devtools/components/og-image/TemplateComponentPreview.vue +186 -0
  16. package/dist/devtools/components/og-image/TwitterCardRenderer.vue +170 -0
  17. package/dist/devtools/components/og-image/WhatsAppRenderer.vue +294 -0
  18. package/dist/devtools/lib/og-image/keys.ts +8 -0
  19. package/dist/devtools/lib/og-image/og-image.ts +536 -0
  20. package/dist/devtools/lib/og-image/renderer-select.ts +3 -0
  21. package/dist/devtools/lib/og-image/rpc-types.ts +2 -0
  22. package/dist/devtools/lib/og-image/rpc.ts +73 -0
  23. package/dist/devtools/lib/og-image/runtime-types.ts +10 -0
  24. package/dist/devtools/lib/og-image/shared/urlEncoding.ts +502 -0
  25. package/dist/devtools/lib/og-image/shared.ts +30 -0
  26. package/dist/devtools/lib/og-image/templates.ts +9 -0
  27. package/dist/devtools/lib/og-image/types.ts +38 -0
  28. package/dist/devtools/lib/og-image/util/logic.ts +21 -0
  29. package/dist/devtools/nuxt.config.ts +6 -0
  30. package/dist/devtools/pages/og-image/debug.vue +32 -0
  31. package/dist/devtools/pages/og-image/docs.vue +3 -0
  32. package/dist/devtools/pages/og-image/index.vue +1682 -0
  33. package/dist/devtools/pages/og-image/templates.vue +150 -0
  34. package/dist/devtools/pages/og-image.vue +184 -0
  35. package/dist/module.cjs +1 -1
  36. package/dist/module.json +1 -1
  37. package/dist/module.mjs +1 -1
  38. package/dist/runtime/server/og-image/core/plugins/imageSrc.js +2 -2
  39. package/dist/runtime/server/og-image/core/style-attr.d.ts +8 -0
  40. package/dist/runtime/server/og-image/core/style-attr.js +34 -0
  41. package/dist/runtime/server/og-image/core/vnodes.d.ts +2 -1
  42. package/dist/runtime/server/og-image/core/vnodes.js +3 -27
  43. package/dist/shared/{nuxt-og-image.CgPzmzQY.cjs → nuxt-og-image.CfTPCtaS.cjs} +38 -24
  44. package/dist/shared/{nuxt-og-image.DGAMxBol.mjs → nuxt-og-image.DdbTs-xp.mjs} +37 -23
  45. package/package.json +17 -18
  46. package/dist/devtools/200.html +0 -1
  47. package/dist/devtools/404.html +0 -1
  48. package/dist/devtools/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
  49. package/dist/devtools/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
  50. package/dist/devtools/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
  51. package/dist/devtools/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
  52. package/dist/devtools/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
  53. package/dist/devtools/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
  54. package/dist/devtools/_nuxt/B9jrmesR.js +0 -1
  55. package/dist/devtools/_nuxt/BA-4cUNc.js +0 -1
  56. package/dist/devtools/_nuxt/BOEXnX7x.js +0 -3
  57. package/dist/devtools/_nuxt/BWKJ0Uxb.js +0 -30
  58. package/dist/devtools/_nuxt/Bdtz4ZK9.js +0 -4
  59. package/dist/devtools/_nuxt/C5797Ieg.js +0 -1
  60. package/dist/devtools/_nuxt/C5jzcy9i.js +0 -1
  61. package/dist/devtools/_nuxt/CCTv7mmB.js +0 -1
  62. package/dist/devtools/_nuxt/CP0tQR2M.js +0 -1
  63. package/dist/devtools/_nuxt/C_JnDlx-.js +0 -1
  64. package/dist/devtools/_nuxt/CdmciVPJ.js +0 -1
  65. package/dist/devtools/_nuxt/CqjbkMN9.js +0 -3
  66. package/dist/devtools/_nuxt/CuJezOxb.js +0 -1
  67. package/dist/devtools/_nuxt/D4EkL0XJ.js +0 -6
  68. package/dist/devtools/_nuxt/DKaW7clv.js +0 -1
  69. package/dist/devtools/_nuxt/DSl3mlLY.js +0 -2
  70. package/dist/devtools/_nuxt/DYta7Mdi.js +0 -3
  71. package/dist/devtools/_nuxt/DevtoolsSection.CcOMr_vO.css +0 -1
  72. package/dist/devtools/_nuxt/DevtoolsSnippet.BhrTdbXn.css +0 -1
  73. package/dist/devtools/_nuxt/E8AZ6HoH.js +0 -1
  74. package/dist/devtools/_nuxt/IFrameLoader.k_861Nnq.css +0 -1
  75. package/dist/devtools/_nuxt/O5eLyffU.js +0 -1
  76. package/dist/devtools/_nuxt/builds/latest.json +0 -1
  77. package/dist/devtools/_nuxt/builds/meta/a36bc212-7179-4aa2-a534-6366229bd7b1.json +0 -1
  78. package/dist/devtools/_nuxt/entry.CcrXpo2y.css +0 -2
  79. package/dist/devtools/_nuxt/fira-code.Bc8wnsZt.woff2 +0 -0
  80. package/dist/devtools/_nuxt/hubot-sans.DLGyhQVu.woff2 +0 -0
  81. package/dist/devtools/_nuxt/pages.Ci_xvfJ8.css +0 -1
  82. package/dist/devtools/_nuxt/renderer-select.COGJ4ZQe.css +0 -1
  83. package/dist/devtools/_nuxt/templates.BByln3BG.css +0 -1
  84. package/dist/devtools/_nuxt/wMBdlVF-.js +0 -152
  85. package/dist/devtools/debug/index.html +0 -1
  86. package/dist/devtools/docs/index.html +0 -1
  87. package/dist/devtools/index.html +0 -1
  88. package/dist/devtools/templates/index.html +0 -1
@@ -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')