@jjlmoya/utils-developer 1.30.0 → 1.31.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 (140) hide show
  1. package/package.json +70 -70
  2. package/src/category/seo.astro +1 -1
  3. package/src/components/PreviewNavSidebar.astro +1 -1
  4. package/src/components/PreviewToolbar.astro +1 -1
  5. package/src/data.ts +1 -1
  6. package/src/env.d.ts +1 -1
  7. package/src/layouts/PreviewLayout.astro +1 -1
  8. package/src/pages/[locale]/[slug].astro +162 -162
  9. package/src/pages/index.astro +1 -1
  10. package/src/tests/entry_contract.test.ts +8 -2
  11. package/src/tests/faq_count.test.ts +1 -1
  12. package/src/tests/i18n_coverage.test.ts +2 -6
  13. package/src/tests/inverted_punctuation.test.ts +113 -113
  14. package/src/tests/mocks/astro_mock.js +1 -1
  15. package/src/tests/no_h1_in_components.test.ts +1 -1
  16. package/src/tests/promote_this_website_i18n.test.ts +33 -0
  17. package/src/tests/slug_language_code_format.test.ts +25 -25
  18. package/src/tests/slug_uniqueness.test.ts +86 -86
  19. package/src/tests/tool_validation.test.ts +15 -15
  20. package/src/tool/aspectRatio/i18n/de.ts +164 -164
  21. package/src/tool/aspectRatio/i18n/ja.ts +1 -1
  22. package/src/tool/aspectRatio/i18n/ko.ts +1 -1
  23. package/src/tool/aspectRatio/i18n/pl.ts +164 -164
  24. package/src/tool/aspectRatio/i18n/ru.ts +164 -164
  25. package/src/tool/aspectRatio/i18n/zh.ts +165 -165
  26. package/src/tool/aspectRatio/seo.astro +15 -15
  27. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +143 -143
  28. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +1 -1
  29. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +1 -1
  30. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +143 -143
  31. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +144 -144
  32. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +143 -143
  33. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +144 -144
  34. package/src/tool/calculadoraTiempoDatos/seo.astro +15 -15
  35. package/src/tool/colorConverter/i18n/de.ts +120 -120
  36. package/src/tool/colorConverter/i18n/ja.ts +1 -1
  37. package/src/tool/colorConverter/i18n/ko.ts +1 -1
  38. package/src/tool/colorConverter/i18n/ru.ts +120 -120
  39. package/src/tool/colorConverter/i18n/zh.ts +1 -1
  40. package/src/tool/colorConverter/seo.astro +15 -15
  41. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +1 -1
  42. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +1 -1
  43. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +124 -124
  44. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +124 -124
  45. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +125 -125
  46. package/src/tool/conversorExcelCsvHtml/seo.astro +15 -15
  47. package/src/tool/cronGenerator/i18n/ja.ts +1 -1
  48. package/src/tool/cronGenerator/i18n/ko.ts +1 -1
  49. package/src/tool/cronGenerator/i18n/zh.ts +183 -183
  50. package/src/tool/cronGenerator/seo.astro +15 -15
  51. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +1 -1
  52. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +1 -1
  53. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +1 -1
  54. package/src/tool/cssSpecificityCalculator/seo.astro +15 -15
  55. package/src/tool/cssToInlineConverter/i18n/ja.ts +1 -1
  56. package/src/tool/cssToInlineConverter/i18n/ko.ts +1 -1
  57. package/src/tool/cssToInlineConverter/i18n/zh.ts +1 -1
  58. package/src/tool/cssToInlineConverter/seo.astro +15 -15
  59. package/src/tool/duplicateCssRemover/i18n/ja.ts +1 -1
  60. package/src/tool/duplicateCssRemover/i18n/ko.ts +1 -1
  61. package/src/tool/duplicateCssRemover/i18n/zh.ts +1 -1
  62. package/src/tool/duplicateCssRemover/seo.astro +15 -15
  63. package/src/tool/generadorSecurityTxt/i18n/ja.ts +1 -1
  64. package/src/tool/generadorSecurityTxt/i18n/ko.ts +1 -1
  65. package/src/tool/generadorSecurityTxt/i18n/zh.ts +1 -1
  66. package/src/tool/generadorSecurityTxt/seo.astro +15 -15
  67. package/src/tool/hashGenerator/i18n/ja.ts +1 -1
  68. package/src/tool/hashGenerator/i18n/ko.ts +1 -1
  69. package/src/tool/hashGenerator/seo.astro +15 -15
  70. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +1 -1
  71. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +1 -1
  72. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +1 -1
  73. package/src/tool/inspectorCertificadosSsl/seo.astro +15 -15
  74. package/src/tool/jsonFormatter/seo.astro +15 -15
  75. package/src/tool/jwtDecoder/i18n/es.ts +248 -248
  76. package/src/tool/jwtDecoder/i18n/fr.ts +248 -248
  77. package/src/tool/jwtDecoder/i18n/tr.ts +248 -248
  78. package/src/tool/keycode/seo.astro +15 -15
  79. package/src/tool/llmCostCalculator/i18n/fr.ts +149 -149
  80. package/src/tool/llmCostCalculator/i18n/ja.ts +1 -1
  81. package/src/tool/llmCostCalculator/i18n/ko.ts +1 -1
  82. package/src/tool/llmCostCalculator/seo.astro +15 -15
  83. package/src/tool/mobileMockupGenerator/i18n/ja.ts +1 -1
  84. package/src/tool/mobileMockupGenerator/i18n/ko.ts +1 -1
  85. package/src/tool/mobileMockupGenerator/i18n/zh.ts +1 -1
  86. package/src/tool/mobileMockupGenerator/seo.astro +15 -15
  87. package/src/tool/musicalTypography/i18n/ja.ts +1 -1
  88. package/src/tool/musicalTypography/i18n/ko.ts +1 -1
  89. package/src/tool/musicalTypography/i18n/zh.ts +1 -1
  90. package/src/tool/musicalTypography/seo.astro +15 -15
  91. package/src/tool/placeholderGenerator/i18n/ja.ts +1 -1
  92. package/src/tool/placeholderGenerator/i18n/ko.ts +1 -1
  93. package/src/tool/placeholderGenerator/i18n/zh.ts +1 -1
  94. package/src/tool/placeholderGenerator/seo.astro +15 -15
  95. package/src/tool/promoteThisWebsite/entry.ts +13 -0
  96. package/src/tool/promoteThisWebsite/i18n/de.ts +95 -0
  97. package/src/tool/promoteThisWebsite/i18n/fr.ts +95 -0
  98. package/src/tool/promoteThisWebsite/i18n/id.ts +95 -0
  99. package/src/tool/promoteThisWebsite/i18n/it.ts +95 -0
  100. package/src/tool/promoteThisWebsite/i18n/ja.ts +95 -0
  101. package/src/tool/promoteThisWebsite/i18n/ko.ts +95 -0
  102. package/src/tool/promoteThisWebsite/i18n/nl.ts +95 -0
  103. package/src/tool/promoteThisWebsite/i18n/pl.ts +95 -0
  104. package/src/tool/promoteThisWebsite/i18n/pt.ts +95 -0
  105. package/src/tool/promoteThisWebsite/i18n/ru.ts +95 -0
  106. package/src/tool/promoteThisWebsite/i18n/sv.ts +95 -0
  107. package/src/tool/promoteThisWebsite/i18n/tr.ts +95 -0
  108. package/src/tool/promoteThisWebsite/i18n/zh.ts +95 -0
  109. package/src/tool/promptLibrary/i18n/ja.ts +1 -1
  110. package/src/tool/promptLibrary/i18n/ko.ts +1 -1
  111. package/src/tool/promptLibrary/i18n/zh.ts +1 -1
  112. package/src/tool/promptLibrary/seo.astro +15 -15
  113. package/src/tool/readabilityCalculator/i18n/ja.ts +1 -1
  114. package/src/tool/readabilityCalculator/i18n/ko.ts +1 -1
  115. package/src/tool/readabilityCalculator/i18n/zh.ts +1 -1
  116. package/src/tool/readabilityCalculator/seo.astro +15 -15
  117. package/src/tool/serpPixelSimulator/entry.ts +30 -30
  118. package/src/tool/serpPixelSimulator/i18n/en.ts +211 -211
  119. package/src/tool/serpPixelSimulator/i18n/fr.ts +214 -214
  120. package/src/tool/serpPixelSimulator/i18n/ru.ts +214 -214
  121. package/src/tool/serpPixelSimulator/logic.ts +18 -18
  122. package/src/tool/serpPixelSimulator/serp-pixel-simulator.css +195 -195
  123. package/src/tool/svgSanitizer/i18n/ja.ts +1 -1
  124. package/src/tool/svgSanitizer/i18n/ko.ts +1 -1
  125. package/src/tool/svgSanitizer/seo.astro +15 -15
  126. package/src/tool/svgToCss/i18n/ja.ts +1 -1
  127. package/src/tool/svgToCss/i18n/ko.ts +1 -1
  128. package/src/tool/svgToCss/seo.astro +15 -15
  129. package/src/tool/urlCleaner/i18n/ja.ts +1 -1
  130. package/src/tool/urlCleaner/i18n/ko.ts +1 -1
  131. package/src/tool/urlCleaner/i18n/zh.ts +1 -1
  132. package/src/tool/urlCleaner/seo.astro +15 -15
  133. package/src/tool/urlEncoderDecoder/i18n/es.ts +146 -146
  134. package/src/tool/urlEncoderDecoder/i18n/ko.ts +1 -1
  135. package/src/tool/urlEncoderDecoder/seo.astro +15 -15
  136. package/src/tool/utmGenerator/i18n/ja.ts +1 -1
  137. package/src/tool/utmGenerator/i18n/ko.ts +1 -1
  138. package/src/tool/utmGenerator/i18n/zh.ts +1 -1
  139. package/src/tool/utmGenerator/seo.astro +15 -15
  140. package/src/types.ts +1 -1
@@ -1,23 +1,23 @@
1
- .sps-root {
2
- --sps-ink: #1f2937;
3
- --sps-muted: #64748b;
4
- --sps-line: #d9e2ec;
1
+ .sps-root {
2
+ --sps-ink: #1f2937;
3
+ --sps-muted: #64748b;
4
+ --sps-line: #d9e2ec;
5
5
  --sps-panel: #fff;
6
- --sps-soft: #f6f8fb;
6
+ --sps-soft: #f6f8fb;
7
7
  --sps-ok: #16875d;
8
8
  --sps-warn: #d93025;
9
9
 
10
10
  color: var(--sps-ink);
11
11
  }
12
-
13
- .theme-dark .sps-root {
14
- --sps-ink: #e5edf7;
15
- --sps-muted: #a8b5c6;
16
- --sps-line: #2c3a4e;
17
- --sps-panel: #111827;
18
- --sps-soft: #0b1120;
19
- }
20
-
12
+
13
+ .theme-dark .sps-root {
14
+ --sps-ink: #e5edf7;
15
+ --sps-muted: #a8b5c6;
16
+ --sps-line: #2c3a4e;
17
+ --sps-panel: #111827;
18
+ --sps-soft: #0b1120;
19
+ }
20
+
21
21
  .sps-shell {
22
22
  display: grid;
23
23
  grid-template-columns: minmax(280px, 0.95fr) minmax(320px, 1.05fr);
@@ -36,26 +36,26 @@
36
36
  .sps-preview-wrap {
37
37
  min-width: 0;
38
38
  }
39
-
40
- .sps-field {
41
- display: grid;
42
- gap: 8px;
43
- margin-bottom: 18px;
44
- }
45
-
46
- .sps-label,
47
- .sps-device-label,
48
- .sps-meter-top {
49
- font-size: 0.86rem;
50
- font-weight: 700;
51
- color: #334155;
52
- }
53
-
39
+
40
+ .sps-field {
41
+ display: grid;
42
+ gap: 8px;
43
+ margin-bottom: 18px;
44
+ }
45
+
46
+ .sps-label,
47
+ .sps-device-label,
48
+ .sps-meter-top {
49
+ font-size: 0.86rem;
50
+ font-weight: 700;
51
+ color: #334155;
52
+ }
53
+
54
54
  .sps-input,
55
55
  .sps-textarea {
56
- width: 100%;
57
- box-sizing: border-box;
58
- border: 1px solid #cbd5e1;
56
+ width: 100%;
57
+ box-sizing: border-box;
58
+ border: 1px solid #cbd5e1;
59
59
  border-radius: 6px;
60
60
  padding: 10px 12px;
61
61
  font-size: 15px;
@@ -116,8 +116,8 @@
116
116
  .theme-dark .sps-input,
117
117
  .theme-dark .sps-textarea,
118
118
  .theme-dark .sps-segment button {
119
- border-color: #334155;
120
- background: #0f172a;
119
+ border-color: #334155;
120
+ background: #0f172a;
121
121
  color: #e5edf7;
122
122
  }
123
123
 
@@ -125,114 +125,114 @@
125
125
  border-color: #334155;
126
126
  background: #2563eb;
127
127
  }
128
-
129
- .theme-dark .sps-label,
130
- .theme-dark .sps-device-label,
131
- .theme-dark .sps-meter-top,
132
- .theme-dark .sps-preview-title {
133
- color: #d6e1f0;
134
- }
135
-
136
- .sps-textarea {
137
- min-height: 108px;
138
- resize: vertical;
139
- }
140
-
141
- .sps-device {
142
- display: flex;
143
- align-items: center;
144
- justify-content: space-between;
145
- gap: 12px;
146
- margin-bottom: 18px;
147
- }
148
-
149
- .sps-segment {
150
- display: inline-grid;
151
- grid-template-columns: 1fr 1fr;
152
- border: 1px solid #cbd5e1;
153
- border-radius: 7px;
154
- overflow: hidden;
155
- }
156
-
157
- .sps-segment button {
158
- border: 0;
159
- border-right: 1px solid #cbd5e1;
160
- background: #fff;
161
- color: #334155;
162
- padding: 8px 12px;
163
- font-weight: 700;
164
- cursor: pointer;
165
- }
166
-
167
- .sps-segment button:last-child {
168
- border-right: 0;
169
- }
170
-
171
- .sps-segment button[aria-pressed='true'] {
172
- background: #e8f0fe;
173
- color: #174ea6;
174
- }
175
-
176
- .theme-dark .sps-segment button[aria-pressed='true'] {
177
- background: #1e3a5f;
178
- color: #bfdbfe;
179
- }
180
-
181
- .sps-meter {
182
- display: grid;
183
- gap: 7px;
184
- margin-top: 14px;
185
- }
186
-
187
- .sps-meter-top {
188
- display: flex;
189
- justify-content: space-between;
190
- gap: 12px;
191
- }
192
-
193
- .sps-track {
194
- height: 10px;
195
- border-radius: 999px;
196
- background: #e5eaf1;
197
- overflow: hidden;
198
- }
199
-
200
- .sps-fill {
201
- display: block;
202
- width: 0%;
203
- height: 100%;
204
- border-radius: inherit;
205
- background: var(--sps-ok);
206
- transition: width 120ms ease, background-color 120ms ease;
207
- }
208
-
209
- .sps-meter.sps-over .sps-fill {
210
- background: var(--sps-warn);
211
- }
212
-
213
- .sps-meter-status {
214
- font-size: 0.82rem;
215
- color: var(--sps-muted);
216
- }
217
-
218
- .sps-meter.sps-over .sps-meter-status {
219
- color: var(--sps-warn);
220
- font-weight: 700;
221
- }
222
-
128
+
129
+ .theme-dark .sps-label,
130
+ .theme-dark .sps-device-label,
131
+ .theme-dark .sps-meter-top,
132
+ .theme-dark .sps-preview-title {
133
+ color: #d6e1f0;
134
+ }
135
+
136
+ .sps-textarea {
137
+ min-height: 108px;
138
+ resize: vertical;
139
+ }
140
+
141
+ .sps-device {
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: space-between;
145
+ gap: 12px;
146
+ margin-bottom: 18px;
147
+ }
148
+
149
+ .sps-segment {
150
+ display: inline-grid;
151
+ grid-template-columns: 1fr 1fr;
152
+ border: 1px solid #cbd5e1;
153
+ border-radius: 7px;
154
+ overflow: hidden;
155
+ }
156
+
157
+ .sps-segment button {
158
+ border: 0;
159
+ border-right: 1px solid #cbd5e1;
160
+ background: #fff;
161
+ color: #334155;
162
+ padding: 8px 12px;
163
+ font-weight: 700;
164
+ cursor: pointer;
165
+ }
166
+
167
+ .sps-segment button:last-child {
168
+ border-right: 0;
169
+ }
170
+
171
+ .sps-segment button[aria-pressed='true'] {
172
+ background: #e8f0fe;
173
+ color: #174ea6;
174
+ }
175
+
176
+ .theme-dark .sps-segment button[aria-pressed='true'] {
177
+ background: #1e3a5f;
178
+ color: #bfdbfe;
179
+ }
180
+
181
+ .sps-meter {
182
+ display: grid;
183
+ gap: 7px;
184
+ margin-top: 14px;
185
+ }
186
+
187
+ .sps-meter-top {
188
+ display: flex;
189
+ justify-content: space-between;
190
+ gap: 12px;
191
+ }
192
+
193
+ .sps-track {
194
+ height: 10px;
195
+ border-radius: 999px;
196
+ background: #e5eaf1;
197
+ overflow: hidden;
198
+ }
199
+
200
+ .sps-fill {
201
+ display: block;
202
+ width: 0%;
203
+ height: 100%;
204
+ border-radius: inherit;
205
+ background: var(--sps-ok);
206
+ transition: width 120ms ease, background-color 120ms ease;
207
+ }
208
+
209
+ .sps-meter.sps-over .sps-fill {
210
+ background: var(--sps-warn);
211
+ }
212
+
213
+ .sps-meter-status {
214
+ font-size: 0.82rem;
215
+ color: var(--sps-muted);
216
+ }
217
+
218
+ .sps-meter.sps-over .sps-meter-status {
219
+ color: var(--sps-warn);
220
+ font-weight: 700;
221
+ }
222
+
223
223
  .sps-preview-wrap {
224
224
  border-left: 1px solid var(--sps-line);
225
225
  background: var(--sps-soft);
226
226
  border-radius: 8px;
227
227
  padding: 24px;
228
228
  }
229
-
230
- .sps-preview-title {
231
- margin: 0 0 14px;
232
- color: #334155;
233
- font-size: 0.92rem;
234
- }
235
-
229
+
230
+ .sps-preview-title {
231
+ margin: 0 0 14px;
232
+ color: #334155;
233
+ font-size: 0.92rem;
234
+ }
235
+
236
236
  .sps-serp {
237
237
  width: min(100%, 652px);
238
238
  border-radius: 8px;
@@ -241,33 +241,33 @@
241
241
  font-family: Arial, Helvetica, sans-serif;
242
242
  box-shadow: 0 1px 2px rgb(60, 64, 67, 0.14), 0 1px 3px 1px rgb(60, 64, 67, 0.08);
243
243
  }
244
-
245
- .theme-dark .sps-serp {
246
- background: #f8fafc;
247
- }
248
-
249
- .sps-serp.sps-mobile {
250
- max-width: 390px;
251
- }
252
-
253
- .sps-url-line {
254
- display: flex;
255
- align-items: center;
256
- gap: 10px;
257
- min-width: 0;
258
- margin-bottom: 6px;
259
- }
260
-
244
+
245
+ .theme-dark .sps-serp {
246
+ background: #f8fafc;
247
+ }
248
+
249
+ .sps-serp.sps-mobile {
250
+ max-width: 390px;
251
+ }
252
+
253
+ .sps-url-line {
254
+ display: flex;
255
+ align-items: center;
256
+ gap: 10px;
257
+ min-width: 0;
258
+ margin-bottom: 6px;
259
+ }
260
+
261
261
  .sps-favicon {
262
262
  display: grid;
263
263
  place-items: center;
264
- width: 28px;
265
- height: 28px;
266
- flex: 0 0 auto;
267
- border-radius: 50%;
268
- background: #edf2f7;
269
- color: #5f6368;
270
- font-size: 14px;
264
+ width: 28px;
265
+ height: 28px;
266
+ flex: 0 0 auto;
267
+ border-radius: 50%;
268
+ background: #edf2f7;
269
+ color: #5f6368;
270
+ font-size: 14px;
271
271
  font-weight: 700;
272
272
  }
273
273
 
@@ -283,41 +283,41 @@
283
283
  .sps-hidden {
284
284
  display: none;
285
285
  }
286
-
287
- .sps-url-text {
288
- min-width: 0;
289
- color: #202124;
290
- font-size: 14px;
291
- line-height: 1.3;
292
- overflow: hidden;
293
- text-overflow: ellipsis;
294
- white-space: nowrap;
295
- }
296
-
297
- .sps-serp-title {
298
- margin: 0 0 4px;
299
- color: #1a0dab;
300
- font-size: 20px;
301
- line-height: 1.3;
302
- font-weight: 400;
303
- }
304
-
305
- .sps-description {
306
- margin: 0;
307
- color: #4d5156;
308
- font-size: 14px;
309
- line-height: 1.58;
310
- }
311
-
312
- .sps-measure {
313
- position: fixed;
314
- inset: auto auto -9999px -9999px;
315
- visibility: hidden;
316
- white-space: nowrap;
317
- pointer-events: none;
318
- }
319
-
320
- @media (max-width: 780px) {
286
+
287
+ .sps-url-text {
288
+ min-width: 0;
289
+ color: #202124;
290
+ font-size: 14px;
291
+ line-height: 1.3;
292
+ overflow: hidden;
293
+ text-overflow: ellipsis;
294
+ white-space: nowrap;
295
+ }
296
+
297
+ .sps-serp-title {
298
+ margin: 0 0 4px;
299
+ color: #1a0dab;
300
+ font-size: 20px;
301
+ line-height: 1.3;
302
+ font-weight: 400;
303
+ }
304
+
305
+ .sps-description {
306
+ margin: 0;
307
+ color: #4d5156;
308
+ font-size: 14px;
309
+ line-height: 1.58;
310
+ }
311
+
312
+ .sps-measure {
313
+ position: fixed;
314
+ inset: auto auto -9999px -9999px;
315
+ visibility: hidden;
316
+ white-space: nowrap;
317
+ pointer-events: none;
318
+ }
319
+
320
+ @media (max-width: 780px) {
321
321
  .sps-shell {
322
322
  grid-template-columns: 1fr;
323
323
  }
@@ -120,4 +120,4 @@ export const content: ToolLocaleContent<SvgSanitizerUI> = {
120
120
  },
121
121
  ],
122
122
  };
123
-
123
+
@@ -120,4 +120,4 @@ export const content: ToolLocaleContent<SvgSanitizerUI> = {
120
120
  },
121
121
  ],
122
122
  };
123
-
123
+
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { svgSanitizer } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await svgSanitizer.i18n[locale]?.();
12
- if (!content) return null;
13
- ---
14
-
15
- {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { svgSanitizer } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await svgSanitizer.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -156,4 +156,4 @@ export const content: ToolLocaleContent<SvgToCssUI> = {
156
156
  },
157
157
  ],
158
158
  };
159
-
159
+
@@ -156,4 +156,4 @@ export const content: ToolLocaleContent<SvgToCssUI> = {
156
156
  },
157
157
  ],
158
158
  };
159
-
159
+
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { svgToCss } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await svgToCss.i18n[locale]?.();
12
- if (!content) return null;
13
- ---
14
-
15
- {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { svgToCss } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await svgToCss.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -111,4 +111,4 @@ export const content: ToolLocaleContent<UrlCleanerUI> = {
111
111
  },
112
112
  ],
113
113
  };
114
-
114
+
@@ -111,4 +111,4 @@ export const content: ToolLocaleContent<UrlCleanerUI> = {
111
111
  },
112
112
  ],
113
113
  };
114
-
114
+
@@ -38,4 +38,4 @@ export const content: ToolLocaleContent<UrlCleanerUI> = {
38
38
  { type: 'list', items: [ '<strong>UTM (Google Analytics):</strong>utm_source、utm_medium、utm_campaign 用于追踪活动', '<strong>FBCLID:</strong>Facebook 点击识别符,用于绕过 Cookie 限制', '<strong>GCLID / DCLID:</strong>Google 点击 ID,用于将访问与 Google Ads 活动关联', '<strong>MSCLKID:</strong>Microsoft 广告和 Bing 点击识别符', '<strong>HubSpot & Mailchimp:</strong>营销自动化参数,如 _hsenc、mc_cid', '<strong>LinkedIn 和其他:</strong>li_fat_id 和其他社交媒体追踪器' ] },
39
39
  ],
40
40
  };
41
-
41
+
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { urlCleaner } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await urlCleaner.i18n[locale]?.();
12
- if (!content) return null;
13
- ---
14
-
15
- {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { urlCleaner } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await urlCleaner.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}