@brumaombra/ui-vintage 0.6.6 → 0.6.8

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 (112) hide show
  1. package/dist/{AlertDialogTitle.vue_vue_type_script_setup_true_lang-_UW48pv7.js → AlertDialogTitle.vue_vue_type_script_setup_true_lang-DhRDOi2d.js} +1 -1
  2. package/dist/Badge.vue_vue_type_script_setup_true_lang-DH_klSVA.js +33 -0
  3. package/dist/{Busy-DRHkNObd.js → Busy-BOXgYrox.js} +2 -2
  4. package/dist/{CalendarPrevButton.vue_vue_type_script_setup_true_lang-D4jkKsDX.js → CalendarPrevButton.vue_vue_type_script_setup_true_lang-C6OtvF0h.js} +3 -3
  5. package/dist/{Card.vue_vue_type_script_setup_true_lang-DwBhZuSq.js → Card.vue_vue_type_script_setup_true_lang-CZhFtxSD.js} +1 -1
  6. package/dist/{CardContent.vue_vue_type_script_setup_true_lang-dBzO0q1t.js → CardContent.vue_vue_type_script_setup_true_lang-BxI0-dse.js} +1 -1
  7. package/dist/{CardFooter.vue_vue_type_script_setup_true_lang-B5EqgrgN.js → CardFooter.vue_vue_type_script_setup_true_lang-LFjBZHcl.js} +1 -1
  8. package/dist/{CardText.vue_vue_type_script_setup_true_lang-CJ66un34.js → CardText.vue_vue_type_script_setup_true_lang-zUPNe9HY.js} +1 -1
  9. package/dist/{DatePicker.vue_vue_type_script_setup_true_lang-C_bocxOu.js → DatePicker.vue_vue_type_script_setup_true_lang-CzMhKnrj.js} +4 -4
  10. package/dist/{DialogTitle.vue_vue_type_script_setup_true_lang-B79YbKSf.js → DialogTitle.vue_vue_type_script_setup_true_lang-D0Ephm9c.js} +1 -1
  11. package/dist/{EmptyStateCard.vue_vue_type_script_setup_true_lang-B2-mxoaA.js → EmptyStateCard.vue_vue_type_script_setup_true_lang-CH3ODMDF.js} +3 -3
  12. package/dist/{Input.vue_vue_type_script_setup_true_lang-KQETSF2I.js → Input.vue_vue_type_script_setup_true_lang-BGGOqKHs.js} +1 -1
  13. package/dist/{Label.vue_vue_type_script_setup_true_lang-BzHEIagR.js → Label.vue_vue_type_script_setup_true_lang-BzD7wUHQ.js} +1 -1
  14. package/dist/{LandingContent.vue_vue_type_script_setup_true_lang-Wgtl_yeD.js → LandingContent.vue_vue_type_script_setup_true_lang-BySDoKff.js} +1 -1
  15. package/dist/{LandingFooter.vue_vue_type_script_setup_true_lang-Dxc03HyK.js → LandingFooter.vue_vue_type_script_setup_true_lang-D1_ZjIFj.js} +2 -2
  16. package/dist/{LandingNavbar.vue_vue_type_script_setup_true_lang-DDB1dSjS.js → LandingNavbar.vue_vue_type_script_setup_true_lang-Cu_ksJtE.js} +1 -1
  17. package/dist/{LandingShell.vue_vue_type_script_setup_true_lang-B1PnJ78g.js → LandingShell.vue_vue_type_script_setup_true_lang-D6n-hLum.js} +1 -1
  18. package/dist/{LoadMoreButton.vue_vue_type_script_setup_true_lang-DkaLgfxc.js → LoadMoreButton.vue_vue_type_script_setup_true_lang-Be0obsa3.js} +1 -1
  19. package/dist/{LoadingStateCard.vue_vue_type_script_setup_true_lang-BSErG9UN.js → LoadingStateCard.vue_vue_type_script_setup_true_lang-CwCrRir_.js} +3 -3
  20. package/dist/{MessageToast-DBztWhRL.js → MessageToast-CMvpwf2m.js} +1 -1
  21. package/dist/{NativeSelectOption.vue_vue_type_script_setup_true_lang-CNcUI9Yh.js → NativeSelectOption.vue_vue_type_script_setup_true_lang-CcnlTqUN.js} +2 -2
  22. package/dist/{PopoverTrigger.vue_vue_type_script_setup_true_lang-Cf33q_yT.js → PopoverTrigger.vue_vue_type_script_setup_true_lang-Bu5YDhSO.js} +1 -1
  23. package/dist/{Progress.vue_vue_type_script_setup_true_lang-BDJfyW-d.js → Progress.vue_vue_type_script_setup_true_lang-ZKUFAYop.js} +1 -1
  24. package/dist/{Separator.vue_vue_type_script_setup_true_lang-D9BozdWD.js → Separator.vue_vue_type_script_setup_true_lang-BDH2gelV.js} +1 -1
  25. package/dist/{SheetTitle.vue_vue_type_script_setup_true_lang-Ja7-gmXd.js → SheetTitle.vue_vue_type_script_setup_true_lang-DZ-80X9J.js} +1 -1
  26. package/dist/{Skeleton.vue_vue_type_script_setup_true_lang-BSbVyZz7.js → Skeleton.vue_vue_type_script_setup_true_lang-CK-Q0Oxk.js} +1 -1
  27. package/dist/{Slider.vue_vue_type_script_setup_true_lang-CSOSwGGr.js → Slider.vue_vue_type_script_setup_true_lang-Cz1oQX11.js} +1 -1
  28. package/dist/{Switch.vue_vue_type_script_setup_true_lang-C8mqOepU.js → Switch.vue_vue_type_script_setup_true_lang-BzUQzI2p.js} +1 -1
  29. package/dist/TableHeader.vue_vue_type_script_setup_true_lang-BMHYThM4.js +123 -0
  30. package/dist/{TimePicker.vue_vue_type_script_setup_true_lang-CwuwDICo.js → TimePicker.vue_vue_type_script_setup_true_lang-C3Ww9XT5.js} +2 -2
  31. package/dist/{TooltipTrigger.vue_vue_type_script_setup_true_lang-BMdZRPa3.js → TooltipTrigger.vue_vue_type_script_setup_true_lang-CIBac9lA.js} +1 -1
  32. package/dist/alert-dialog.js +3 -3
  33. package/dist/alert.js +2 -2
  34. package/dist/badge.js +2 -31
  35. package/dist/blog.js +938 -0
  36. package/dist/breadcrumb.js +2 -2
  37. package/dist/busy-indicator.js +1 -1
  38. package/dist/busy.js +1 -1
  39. package/dist/button.js +2 -2
  40. package/dist/calendar.js +1 -1
  41. package/dist/card-grid.js +4 -4
  42. package/dist/card.js +7 -7
  43. package/dist/chip.js +2 -2
  44. package/dist/command.js +3 -3
  45. package/dist/components/blog/index.d.ts +13 -0
  46. package/dist/components/content/index.d.ts +3 -0
  47. package/dist/components/info-card/InfoCard.vue.d.ts +2 -2
  48. package/dist/components/landing/landing-footer/LandingFooter.vue.d.ts +1 -1
  49. package/dist/components/single-value-card/SingleValueCard.vue.d.ts +2 -2
  50. package/dist/confirm-dialog.js +2 -2
  51. package/dist/content.js +210 -0
  52. package/dist/dashboard-shell.js +2 -2
  53. package/dist/data-list.js +1 -1
  54. package/dist/date-picker.js +1 -1
  55. package/dist/date-time-picker.js +4 -4
  56. package/dist/dialog.js +2 -2
  57. package/dist/empty-state-card.js +1 -1
  58. package/dist/error-page.js +5 -5
  59. package/dist/field.js +6 -6
  60. package/dist/i18n/de.json.d.ts +24 -0
  61. package/dist/i18n/en.json.d.ts +24 -0
  62. package/dist/i18n/es.json.d.ts +24 -0
  63. package/dist/i18n/fr.json.d.ts +24 -0
  64. package/dist/i18n/it.json.d.ts +24 -0
  65. package/dist/i18n/ja.json.d.ts +24 -0
  66. package/dist/i18n/pt.json.d.ts +24 -0
  67. package/dist/i18n/ru.json.d.ts +24 -0
  68. package/dist/i18n/zh.json.d.ts +24 -0
  69. package/dist/i18n.js +216 -0
  70. package/dist/{index-FpH8cK6B.js → index-DDurQzrB.js} +1 -1
  71. package/dist/index.min-CUZWqaEQ.js +32 -0
  72. package/dist/info-card.js +3 -3
  73. package/dist/input.js +1 -1
  74. package/dist/label.js +1 -1
  75. package/dist/landing-content.js +1 -1
  76. package/dist/landing-footer.js +1 -1
  77. package/dist/landing-navbar.js +1 -1
  78. package/dist/landing-shell.js +1 -1
  79. package/dist/landing.js +4 -4
  80. package/dist/language-selector.js +2 -2
  81. package/dist/lib/i18n.d.ts +432 -0
  82. package/dist/lib/utils.d.ts +1 -0
  83. package/dist/load-more-button.js +1 -1
  84. package/dist/loading-state-card.js +1 -1
  85. package/dist/message-dialog.js +2 -2
  86. package/dist/message-toast.js +1 -1
  87. package/dist/native-select.js +2 -2
  88. package/dist/popover.js +2 -2
  89. package/dist/progress-component.js +1 -1
  90. package/dist/progress.js +1 -1
  91. package/dist/scroll-area.js +1 -1
  92. package/dist/select.js +2 -2
  93. package/dist/separator.js +1 -1
  94. package/dist/sheet.js +2 -2
  95. package/dist/sidebar.js +8 -8
  96. package/dist/single-value-card.js +2 -2
  97. package/dist/skeleton.js +1 -1
  98. package/dist/slider-form-component.js +2 -2
  99. package/dist/slider.js +1 -1
  100. package/dist/style.css +593 -8
  101. package/dist/switch-form-component.js +10 -10
  102. package/dist/switch.js +1 -1
  103. package/dist/table.js +18 -129
  104. package/dist/tabs.js +1 -1
  105. package/dist/textarea.js +1 -1
  106. package/dist/theme-selector.js +2 -2
  107. package/dist/time-picker.js +1 -1
  108. package/dist/tooltip.js +2 -2
  109. package/dist/{utils-Bz4m9VPB.js → utils-DbYZ4xaD.js} +13 -1
  110. package/dist/utils.js +3 -2
  111. package/package.json +9 -1
  112. package/dist/index.min-CZ9FIOXr.js +0 -23
package/dist/blog.js ADDED
@@ -0,0 +1,938 @@
1
+ import { resolveComponent, openBlock, createBlock, unref, withCtx, createVNode, createElementBlock, createCommentVNode, createElementVNode, toDisplayString, createTextVNode, Fragment, renderList, computed, ref, normalizeClass, onMounted, onUnmounted, TransitionGroup, withDirectives, vShow, normalizeStyle } from "vue";
2
+ import { useI18n } from "vue-i18n";
3
+ import { _ as _sfc_main$h } from "./LoadMoreButton.vue_vue_type_script_setup_true_lang-Be0obsa3.js";
4
+ import { N as Nn, a as dn, m as mn, Z as ZB, t as t9, M as MSr, n as nK, o as oyr, i as Nsr, j as Au } from "./index.min-CUZWqaEQ.js";
5
+ import { H as HugeiconsIcon } from "./HugeiconsIcon.vue-By2RXWWz.js";
6
+ import { _ as _sfc_main$f } from "./Badge.vue_vue_type_script_setup_true_lang-DH_klSVA.js";
7
+ import { Button as _sfc_main$g } from "./button.js";
8
+ import { _ as _sfc_main$d } from "./Card.vue_vue_type_script_setup_true_lang-CZhFtxSD.js";
9
+ import { _ as _sfc_main$e } from "./CardContent.vue_vue_type_script_setup_true_lang-BxI0-dse.js";
10
+ import { f as formatDateLongItalyTimezone } from "./utils-DbYZ4xaD.js";
11
+ import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.js";
12
+ const _hoisted_1$a = {
13
+ key: 0,
14
+ class: "relative w-full h-48 overflow-hidden"
15
+ };
16
+ const _hoisted_2$7 = { class: "p-6 flex flex-col flex-grow" };
17
+ const _hoisted_3$6 = {
18
+ key: 0,
19
+ class: "mb-3"
20
+ };
21
+ const _hoisted_4$5 = { class: "text-base font-bold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] mb-2 line-clamp-2" };
22
+ const _hoisted_5$3 = { class: "text-xs md:text-sm text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] leading-relaxed mb-4 line-clamp-3 flex-grow" };
23
+ const _hoisted_6$3 = { class: "mt-auto" };
24
+ const _sfc_main$c = {
25
+ __name: "PostCard",
26
+ props: {
27
+ image: { type: String, default: "" },
28
+ category: { type: String, default: "" },
29
+ title: { type: String, default: "" },
30
+ description: { type: String, default: "" }
31
+ },
32
+ setup(__props) {
33
+ const { t } = useI18n();
34
+ const props = __props;
35
+ return (_ctx, _cache) => {
36
+ const _component_NuxtImg = resolveComponent("NuxtImg");
37
+ return openBlock(), createBlock(unref(_sfc_main$d), { class: "!p-0 overflow-hidden group cursor-pointer transition-transform duration-300 ease-out hover:-translate-y-1 motion-reduce:transition-none motion-reduce:hover:translate-y-0" }, {
38
+ default: withCtx(() => [
39
+ createVNode(unref(_sfc_main$e), { class: "h-full gap-0 !p-0" }, {
40
+ default: withCtx(() => [
41
+ props.image ? (openBlock(), createElementBlock("div", _hoisted_1$a, [
42
+ createVNode(_component_NuxtImg, {
43
+ src: props.image,
44
+ alt: props.title,
45
+ height: "225",
46
+ width: "400",
47
+ format: "avif",
48
+ quality: "35",
49
+ sizes: { 480: "480px", 1280: "400px" },
50
+ loading: "lazy",
51
+ decoding: "async",
52
+ class: "w-full h-full object-cover transition-transform duration-500 group-hover:scale-110"
53
+ }, null, 8, ["src", "alt"])
54
+ ])) : createCommentVNode("", true),
55
+ createElementVNode("div", _hoisted_2$7, [
56
+ props.category ? (openBlock(), createElementBlock("div", _hoisted_3$6, [
57
+ createVNode(unref(_sfc_main$f), {
58
+ color: "gray",
59
+ text: props.category
60
+ }, null, 8, ["text"])
61
+ ])) : createCommentVNode("", true),
62
+ createElementVNode("h2", _hoisted_4$5, toDisplayString(props.title), 1),
63
+ createElementVNode("p", _hoisted_5$3, toDisplayString(props.description), 1),
64
+ createElementVNode("div", _hoisted_6$3, [
65
+ createVNode(unref(_sfc_main$g), {
66
+ variant: "primary",
67
+ class: "w-full sm:w-auto"
68
+ }, {
69
+ default: withCtx(() => [
70
+ createVNode(unref(HugeiconsIcon), {
71
+ icon: unref(Nn),
72
+ class: "size-4"
73
+ }, null, 8, ["icon"]),
74
+ createTextVNode(" " + toDisplayString(unref(t)("uiVintage.blog.readMore")), 1)
75
+ ]),
76
+ _: 1
77
+ })
78
+ ])
79
+ ])
80
+ ]),
81
+ _: 1
82
+ })
83
+ ]),
84
+ _: 1
85
+ });
86
+ };
87
+ }
88
+ };
89
+ const _hoisted_1$9 = { class: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" };
90
+ const _sfc_main$b = {
91
+ __name: "PostsList",
92
+ props: {
93
+ posts: { type: Array, default: () => [] }
94
+ },
95
+ setup(__props) {
96
+ const props = __props;
97
+ return (_ctx, _cache) => {
98
+ const _component_NuxtLinkLocale = resolveComponent("NuxtLinkLocale");
99
+ return openBlock(), createElementBlock("div", _hoisted_1$9, [
100
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.posts, (post, index) => {
101
+ return openBlock(), createBlock(_component_NuxtLinkLocale, {
102
+ key: post.path,
103
+ to: post.path,
104
+ class: "block h-full",
105
+ "data-aos": "fade-up",
106
+ "data-aos-delay": index % 3 * 200
107
+ }, {
108
+ default: withCtx(() => [
109
+ createVNode(_sfc_main$c, {
110
+ class: "h-full",
111
+ image: post.image,
112
+ category: post.categoryText,
113
+ title: post.title,
114
+ description: post.description
115
+ }, null, 8, ["image", "category", "title", "description"])
116
+ ]),
117
+ _: 2
118
+ }, 1032, ["to", "data-aos-delay"]);
119
+ }), 128))
120
+ ]);
121
+ };
122
+ }
123
+ };
124
+ const _sfc_main$a = {
125
+ __name: "AllPostsSection",
126
+ props: {
127
+ posts: { type: Array, default: () => [] },
128
+ currentPage: { type: Number, default: 1 },
129
+ postsPerPage: { type: Number, default: 9 },
130
+ totalPosts: { type: Number, default: 0 },
131
+ hasMorePosts: { type: Boolean, default: false },
132
+ isLoading: { type: Boolean, default: false }
133
+ },
134
+ emits: ["load-more"],
135
+ setup(__props, { emit: __emit }) {
136
+ const { t } = useI18n();
137
+ const props = __props;
138
+ const emits = __emit;
139
+ const handleLoadMorePosts = () => {
140
+ if (!props.isLoading) {
141
+ emits("load-more");
142
+ }
143
+ };
144
+ const visiblePostsCount = computed(() => Math.min(props.posts.length, props.totalPosts));
145
+ return (_ctx, _cache) => {
146
+ return openBlock(), createElementBlock("div", null, [
147
+ createVNode(_sfc_main$b, {
148
+ posts: props.posts
149
+ }, null, 8, ["posts"]),
150
+ props.hasMorePosts ? (openBlock(), createBlock(unref(_sfc_main$h), {
151
+ key: 0,
152
+ busy: props.isLoading,
153
+ text: unref(t)("uiVintage.blog.loadMoreWithNumbers", { current: visiblePostsCount.value, total: props.totalPosts }),
154
+ onLoadMore: handleLoadMorePosts,
155
+ class: "mt-8",
156
+ "data-aos": "fade-up"
157
+ }, null, 8, ["busy", "text"])) : createCommentVNode("", true)
158
+ ]);
159
+ };
160
+ }
161
+ };
162
+ const _hoisted_1$8 = { class: "text-xl md:text-2xl font-bold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] mb-5" };
163
+ const _sfc_main$9 = {
164
+ __name: "BlogSectionTitle",
165
+ props: {
166
+ title: { type: String, required: true }
167
+ },
168
+ setup(__props) {
169
+ const props = __props;
170
+ return (_ctx, _cache) => {
171
+ return openBlock(), createElementBlock("h2", _hoisted_1$8, toDisplayString(props.title), 1);
172
+ };
173
+ }
174
+ };
175
+ const _hoisted_1$7 = {
176
+ key: 0,
177
+ class: "mt-12 lg:mt-16"
178
+ };
179
+ const _hoisted_2$6 = { class: "text-base md:text-lg text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] mb-8" };
180
+ const _hoisted_3$5 = { class: "space-y-4" };
181
+ const _hoisted_4$4 = { class: "flex items-center justify-between p-5 gap-4" };
182
+ const _hoisted_5$2 = { class: "text-sm md:!text-base font-semibold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] text-left" };
183
+ const _hoisted_6$2 = { class: "px-5 pb-5 text-xs md:text-sm text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] leading-relaxed" };
184
+ const _sfc_main$8 = {
185
+ __name: "BlogFAQSection",
186
+ props: {
187
+ faqs: { type: Array, default: () => [] }
188
+ },
189
+ setup(__props) {
190
+ const props = __props;
191
+ const { t } = useI18n();
192
+ const expandedItems = ref({});
193
+ const hasValidFAQs = computed(() => props.faqs && props.faqs.length > 0);
194
+ const toggleItem = (index) => {
195
+ expandedItems.value[index] = !expandedItems.value[index];
196
+ };
197
+ const isExpanded = (index) => {
198
+ return expandedItems.value[index] || false;
199
+ };
200
+ if (hasValidFAQs.value) {
201
+ expandedItems.value[0] = true;
202
+ }
203
+ return (_ctx, _cache) => {
204
+ return hasValidFAQs.value ? (openBlock(), createElementBlock("div", _hoisted_1$7, [
205
+ createVNode(_sfc_main$9, {
206
+ title: unref(t)("uiVintage.blog.faq.title")
207
+ }, null, 8, ["title"]),
208
+ createElementVNode("p", _hoisted_2$6, toDisplayString(unref(t)("uiVintage.blog.faq.description")), 1),
209
+ createElementVNode("div", _hoisted_3$5, [
210
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.faqs, (faq, index) => {
211
+ return openBlock(), createBlock(unref(_sfc_main$d), {
212
+ key: index,
213
+ class: "!p-0 cursor-pointer",
214
+ onClick: ($event) => toggleItem(index)
215
+ }, {
216
+ default: withCtx(() => [
217
+ createVNode(unref(_sfc_main$e), { class: "!p-0 gap-0" }, {
218
+ default: withCtx(() => [
219
+ createElementVNode("div", _hoisted_4$4, [
220
+ createElementVNode("h3", _hoisted_5$2, toDisplayString(faq.question), 1),
221
+ createElementVNode("div", {
222
+ class: normalizeClass(["flex-shrink-0 w-8 h-8 flex items-center justify-center rounded bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] border border-[var(--border-light)] dark:border-[var(--border-dark)] transition-transform duration-300", { "rotate-180": isExpanded(index) }])
223
+ }, [
224
+ createVNode(unref(HugeiconsIcon), {
225
+ icon: unref(dn),
226
+ class: "size-4 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]"
227
+ }, null, 8, ["icon"])
228
+ ], 2)
229
+ ]),
230
+ createElementVNode("div", {
231
+ class: normalizeClass(["overflow-hidden transition-all duration-300 ease-in-out", isExpanded(index) ? "max-h-96 opacity-100" : "max-h-0 opacity-0"])
232
+ }, [
233
+ createElementVNode("p", _hoisted_6$2, toDisplayString(faq.answer), 1)
234
+ ], 2)
235
+ ]),
236
+ _: 2
237
+ }, 1024)
238
+ ]),
239
+ _: 2
240
+ }, 1032, ["onClick"]);
241
+ }), 128))
242
+ ])
243
+ ])) : createCommentVNode("", true);
244
+ };
245
+ }
246
+ };
247
+ const _hoisted_1$6 = { class: "flex flex-col sm:flex-row sm:items-center sm:justify-between" };
248
+ const _hoisted_2$5 = { class: "flex items-center mb-4 sm:mb-0" };
249
+ const _hoisted_3$4 = { class: "flex items-center" };
250
+ const _hoisted_4$3 = { class: "text-sm text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]" };
251
+ const _hoisted_5$1 = { class: "font-bold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)]" };
252
+ const _hoisted_6$1 = { class: "flex flex-col sm:items-end text-xs md:text-sm text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]" };
253
+ const _hoisted_7$1 = {
254
+ key: 0,
255
+ class: "mb-1"
256
+ };
257
+ const _hoisted_8$1 = { class: "font-semibold" };
258
+ const _hoisted_9$1 = ["datetime"];
259
+ const _hoisted_10$1 = {
260
+ key: 1,
261
+ class: "text-xs"
262
+ };
263
+ const _hoisted_11$1 = { class: "font-semibold" };
264
+ const _hoisted_12 = ["datetime"];
265
+ const _sfc_main$7 = {
266
+ __name: "BlogInfoSection",
267
+ props: {
268
+ author: { type: String, required: true },
269
+ authorUrl: { type: String, required: true },
270
+ authorImageUrl: { type: String, required: true },
271
+ datePublished: { type: String, required: true },
272
+ dateModified: { type: String, default: null }
273
+ },
274
+ setup(__props) {
275
+ const props = __props;
276
+ const { t, locale } = useI18n();
277
+ const formattedPublishedDate = computed(() => formatDateLongItalyTimezone(props.datePublished, locale.value));
278
+ const formattedModifiedDate = computed(() => formatDateLongItalyTimezone(props.dateModified, locale.value));
279
+ return (_ctx, _cache) => {
280
+ const _component_NuxtImg = resolveComponent("NuxtImg");
281
+ const _component_NuxtLink = resolveComponent("NuxtLink");
282
+ return openBlock(), createBlock(unref(_sfc_main$d), { "data-aos": "fade-up" }, {
283
+ default: withCtx(() => [
284
+ createVNode(unref(_sfc_main$e), null, {
285
+ default: withCtx(() => [
286
+ createElementVNode("div", _hoisted_1$6, [
287
+ createElementVNode("div", _hoisted_2$5, [
288
+ createElementVNode("div", _hoisted_3$4, [
289
+ createVNode(_component_NuxtLink, {
290
+ to: props.authorUrl,
291
+ target: "_blank",
292
+ rel: "noopener noreferrer",
293
+ class: "rounded me-3 transition-transform duration-300 ease-out hover:scale-105 motion-reduce:transition-none motion-reduce:hover:scale-100"
294
+ }, {
295
+ default: withCtx(() => [
296
+ createVNode(_component_NuxtImg, {
297
+ src: props.authorImageUrl,
298
+ alt: props.author,
299
+ height: "50",
300
+ width: "50",
301
+ format: "avif",
302
+ quality: "40",
303
+ sizes: { 480: "50px", 1280: "50px" },
304
+ loading: "lazy",
305
+ decoding: "async",
306
+ class: "object-cover rounded"
307
+ }, null, 8, ["src", "alt"])
308
+ ]),
309
+ _: 1
310
+ }, 8, ["to"]),
311
+ createElementVNode("div", null, [
312
+ createElementVNode("p", _hoisted_4$3, toDisplayString(unref(t)("uiVintage.blog.author")), 1),
313
+ createElementVNode("p", _hoisted_5$1, [
314
+ createVNode(_component_NuxtLink, {
315
+ to: props.authorUrl,
316
+ target: "_blank",
317
+ rel: "noopener noreferrer",
318
+ class: "hover:text-[var(--text-secondary-light)] dark:hover:text-[var(--text-secondary-dark)] transition-colors"
319
+ }, {
320
+ default: withCtx(() => [
321
+ createTextVNode(toDisplayString(props.author), 1)
322
+ ]),
323
+ _: 1
324
+ }, 8, ["to"])
325
+ ])
326
+ ])
327
+ ])
328
+ ]),
329
+ createElementVNode("div", _hoisted_6$1, [
330
+ props.datePublished ? (openBlock(), createElementBlock("div", _hoisted_7$1, [
331
+ createElementVNode("span", _hoisted_8$1, toDisplayString(unref(t)("uiVintage.blog.publishedDate")) + ":", 1),
332
+ createElementVNode("time", {
333
+ datetime: props.datePublished,
334
+ class: "ml-1"
335
+ }, toDisplayString(formattedPublishedDate.value), 9, _hoisted_9$1)
336
+ ])) : createCommentVNode("", true),
337
+ props.dateModified ? (openBlock(), createElementBlock("div", _hoisted_10$1, [
338
+ createElementVNode("span", _hoisted_11$1, toDisplayString(unref(t)("uiVintage.blog.lastUpdatedDate")) + ":", 1),
339
+ createElementVNode("time", {
340
+ datetime: props.dateModified,
341
+ class: "ml-1"
342
+ }, toDisplayString(formattedModifiedDate.value), 9, _hoisted_12)
343
+ ])) : createCommentVNode("", true)
344
+ ])
345
+ ])
346
+ ]),
347
+ _: 1
348
+ })
349
+ ]),
350
+ _: 1
351
+ });
352
+ };
353
+ }
354
+ };
355
+ const _hoisted_1$5 = { class: "flex flex-col space-y-6 md:!space-y-8" };
356
+ const _hoisted_2$4 = {
357
+ key: 0,
358
+ class: "flex flex-wrap gap-3 mb-6 md:mb-8"
359
+ };
360
+ const _hoisted_3$3 = { class: "text-3xl md:text-6xl font-bold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] leading-tight" };
361
+ const _hoisted_4$2 = { class: "text-sm md:text-xl text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] leading-relaxed" };
362
+ const _sfc_main$6 = {
363
+ __name: "BlogHeaderSection",
364
+ props: {
365
+ badges: {
366
+ type: Array,
367
+ default: () => []
368
+ },
369
+ title: { type: String, required: true },
370
+ description: { type: String, required: true }
371
+ },
372
+ setup(__props) {
373
+ const props = __props;
374
+ return (_ctx, _cache) => {
375
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [
376
+ props.badges.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$4, [
377
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.badges, (badge) => {
378
+ return openBlock(), createBlock(unref(_sfc_main$f), {
379
+ key: `${badge.color}-${badge.text}`,
380
+ color: badge.color,
381
+ text: badge.text
382
+ }, null, 8, ["color", "text"]);
383
+ }), 128))
384
+ ])) : createCommentVNode("", true),
385
+ createElementVNode("h1", _hoisted_3$3, toDisplayString(props.title), 1),
386
+ createElementVNode("p", _hoisted_4$2, toDisplayString(props.description), 1)
387
+ ]);
388
+ };
389
+ }
390
+ };
391
+ const _hoisted_1$4 = {
392
+ key: 0,
393
+ class: "relative w-full h-36 overflow-hidden"
394
+ };
395
+ const _hoisted_2$3 = { class: "p-4 flex items-center justify-between" };
396
+ const _hoisted_3$2 = { class: "text-sm font-bold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] truncate mr-3" };
397
+ const _sfc_main$5 = {
398
+ __name: "CategoryCard",
399
+ props: {
400
+ name: { type: String, required: true },
401
+ image: { type: String, default: "" },
402
+ count: { type: Number, required: true }
403
+ },
404
+ setup(__props) {
405
+ const props = __props;
406
+ return (_ctx, _cache) => {
407
+ const _component_NuxtImg = resolveComponent("NuxtImg");
408
+ return openBlock(), createBlock(unref(_sfc_main$d), { class: "!p-0 overflow-hidden group cursor-pointer transition-transform duration-300 ease-out hover:-translate-y-1 motion-reduce:transition-none motion-reduce:hover:translate-y-0" }, {
409
+ default: withCtx(() => [
410
+ createVNode(unref(_sfc_main$e), { class: "gap-0 !p-0" }, {
411
+ default: withCtx(() => [
412
+ props.image ? (openBlock(), createElementBlock("div", _hoisted_1$4, [
413
+ createVNode(_component_NuxtImg, {
414
+ src: props.image,
415
+ alt: props.name,
416
+ height: "225",
417
+ width: "400",
418
+ format: "avif",
419
+ quality: "35",
420
+ sizes: { 480: "480px", 1280: "400px" },
421
+ loading: "lazy",
422
+ decoding: "async",
423
+ class: "w-full h-full object-cover transition-transform duration-500 group-hover:scale-110"
424
+ }, null, 8, ["src", "alt"])
425
+ ])) : createCommentVNode("", true),
426
+ createElementVNode("div", _hoisted_2$3, [
427
+ createElementVNode("span", _hoisted_3$2, toDisplayString(props.name), 1),
428
+ createVNode(unref(_sfc_main$f), {
429
+ color: "gray",
430
+ text: String(props.count)
431
+ }, null, 8, ["text"])
432
+ ])
433
+ ]),
434
+ _: 1
435
+ })
436
+ ]),
437
+ _: 1
438
+ });
439
+ };
440
+ }
441
+ };
442
+ const _hoisted_1$3 = { class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-5 md:gap-6" };
443
+ const _sfc_main$4 = {
444
+ __name: "CategoriesList",
445
+ props: {
446
+ categories: { type: Array, default: () => [] }
447
+ },
448
+ setup(__props) {
449
+ const props = __props;
450
+ return (_ctx, _cache) => {
451
+ const _component_NuxtLinkLocale = resolveComponent("NuxtLinkLocale");
452
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [
453
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.categories, (category, i) => {
454
+ return openBlock(), createBlock(_component_NuxtLinkLocale, {
455
+ key: category.slug,
456
+ to: `/blog/categories/${category.slug}`,
457
+ class: "block h-full",
458
+ "data-aos": "fade-up",
459
+ "data-aos-delay": i % 4 * 200
460
+ }, {
461
+ default: withCtx(() => [
462
+ createVNode(_sfc_main$5, {
463
+ name: category.name,
464
+ image: category.image,
465
+ count: category.count
466
+ }, null, 8, ["name", "image", "count"])
467
+ ]),
468
+ _: 2
469
+ }, 1032, ["to", "data-aos-delay"]);
470
+ }), 128))
471
+ ]);
472
+ };
473
+ }
474
+ };
475
+ const _sfc_main$3 = {
476
+ __name: "CategoriesSection",
477
+ props: {
478
+ categories: { type: Array, default: () => [] }
479
+ },
480
+ setup(__props) {
481
+ const props = __props;
482
+ return (_ctx, _cache) => {
483
+ return openBlock(), createElementBlock("div", null, [
484
+ createVNode(_sfc_main$4, {
485
+ categories: props.categories
486
+ }, null, 8, ["categories"])
487
+ ]);
488
+ };
489
+ }
490
+ };
491
+ const _hoisted_1$2 = { class: "relative overflow-hidden rounded" };
492
+ const _hoisted_2$2 = ["id", "data-direction"];
493
+ const _hoisted_3$1 = { class: "relative w-full h-56 md:h-80 overflow-hidden" };
494
+ const _hoisted_4$1 = { class: "p-6 md:p-8" };
495
+ const _hoisted_5 = { class: "text-base md:text-3xl font-bold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] mb-3 line-clamp-2 hover:opacity-75 transition-opacity duration-200" };
496
+ const _hoisted_6 = { class: "text-xs md:!text-base text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] mb-6 line-clamp-2 leading-relaxed" };
497
+ const _hoisted_7 = { class: "flex flex-col gap-6 sm:flex-row sm:items-center sm:justify-between" };
498
+ const _hoisted_8 = ["aria-label"];
499
+ const _hoisted_9 = ["onClick", "aria-label", "aria-current", "aria-controls"];
500
+ const _hoisted_10 = ["aria-label"];
501
+ const _hoisted_11 = ["aria-label"];
502
+ const _sfc_main$2 = {
503
+ __name: "HeaderCarousel",
504
+ props: {
505
+ featuredPosts: { type: Array, default: () => [] }
506
+ },
507
+ setup(__props) {
508
+ const { t } = useI18n();
509
+ const props = __props;
510
+ const currentSlide = ref(0);
511
+ const slideCount = computed(() => props.featuredPosts.length || 0);
512
+ const intervalId = ref(null);
513
+ const direction = ref("forward");
514
+ const startAutoPlay = () => {
515
+ intervalId.value = setInterval(nextSlide, 5e3);
516
+ };
517
+ const stopAutoPlay = () => {
518
+ if (intervalId.value) clearInterval(intervalId.value);
519
+ };
520
+ const nextSlide = () => {
521
+ direction.value = "forward";
522
+ currentSlide.value = (currentSlide.value + 1) % slideCount.value;
523
+ };
524
+ const prevSlide = () => {
525
+ direction.value = "backward";
526
+ currentSlide.value = (currentSlide.value - 1 + slideCount.value) % slideCount.value;
527
+ };
528
+ const goToSlide = (index) => {
529
+ if (index > currentSlide.value) {
530
+ direction.value = "forward";
531
+ } else {
532
+ direction.value = "backward";
533
+ }
534
+ currentSlide.value = index;
535
+ };
536
+ onMounted(() => {
537
+ startAutoPlay();
538
+ });
539
+ onUnmounted(() => {
540
+ stopAutoPlay();
541
+ });
542
+ return (_ctx, _cache) => {
543
+ const _component_NuxtImg = resolveComponent("NuxtImg");
544
+ const _component_NuxtLinkLocale = resolveComponent("NuxtLinkLocale");
545
+ return props.featuredPosts.length > 0 ? (openBlock(), createElementBlock("div", {
546
+ key: 0,
547
+ class: "relative",
548
+ onMouseenter: stopAutoPlay,
549
+ onMouseleave: startAutoPlay
550
+ }, [
551
+ createElementVNode("div", _hoisted_1$2, [
552
+ createVNode(TransitionGroup, { name: "slide" }, {
553
+ default: withCtx(() => [
554
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.featuredPosts, (post, index) => {
555
+ return withDirectives((openBlock(), createElementBlock("div", {
556
+ id: `carousel-slide-${index}`,
557
+ key: post.path || post.title || index,
558
+ class: "w-full",
559
+ "data-direction": direction.value
560
+ }, [
561
+ createVNode(unref(_sfc_main$d), { class: "!p-0 overflow-hidden cursor-pointer" }, {
562
+ default: withCtx(() => [
563
+ createVNode(unref(_sfc_main$e), { class: "gap-0 !p-0" }, {
564
+ default: withCtx(() => [
565
+ createVNode(_component_NuxtLinkLocale, {
566
+ to: post.path
567
+ }, {
568
+ default: withCtx(() => [
569
+ createElementVNode("div", _hoisted_3$1, [
570
+ createVNode(_component_NuxtImg, {
571
+ src: post.image,
572
+ alt: post.title,
573
+ width: "560",
574
+ height: "315",
575
+ format: "avif",
576
+ quality: "35",
577
+ sizes: { 480: "480px", 1536: "1086px" },
578
+ loading: index === 0 ? "eager" : "lazy",
579
+ fetchpriority: index === 0 ? "high" : "auto",
580
+ preload: index === 0,
581
+ class: "w-full h-full object-cover transition-transform duration-500 hover:scale-105"
582
+ }, null, 8, ["src", "alt", "loading", "fetchpriority", "preload"])
583
+ ])
584
+ ]),
585
+ _: 2
586
+ }, 1032, ["to"]),
587
+ createElementVNode("div", _hoisted_4$1, [
588
+ post.categoryText ? (openBlock(), createBlock(_component_NuxtLinkLocale, {
589
+ key: 0,
590
+ to: `/blog/categories/${post.categorySlug}`,
591
+ class: "inline-block mb-3"
592
+ }, {
593
+ default: withCtx(() => [
594
+ createVNode(unref(_sfc_main$f), {
595
+ color: "gray",
596
+ text: post.categoryText
597
+ }, null, 8, ["text"])
598
+ ]),
599
+ _: 2
600
+ }, 1032, ["to"])) : createCommentVNode("", true),
601
+ createVNode(_component_NuxtLinkLocale, {
602
+ to: post.path
603
+ }, {
604
+ default: withCtx(() => [
605
+ createElementVNode("h3", _hoisted_5, toDisplayString(post.title), 1)
606
+ ]),
607
+ _: 2
608
+ }, 1032, ["to"]),
609
+ createElementVNode("p", _hoisted_6, toDisplayString(post.description), 1),
610
+ createElementVNode("div", _hoisted_7, [
611
+ createVNode(_component_NuxtLinkLocale, {
612
+ to: post.path
613
+ }, {
614
+ default: withCtx(() => [
615
+ createVNode(unref(_sfc_main$g), {
616
+ variant: "primary",
617
+ class: "w-full sm:w-auto"
618
+ }, {
619
+ default: withCtx(() => [
620
+ createVNode(unref(HugeiconsIcon), {
621
+ icon: unref(Nn),
622
+ class: "size-4"
623
+ }, null, 8, ["icon"]),
624
+ createTextVNode(" " + toDisplayString(unref(t)("uiVintage.blog.goToPost")), 1)
625
+ ]),
626
+ _: 1
627
+ })
628
+ ]),
629
+ _: 2
630
+ }, 1032, ["to"]),
631
+ props.featuredPosts.length > 1 ? (openBlock(), createElementBlock("div", {
632
+ key: 0,
633
+ class: "flex w-full justify-center gap-3 sm:w-auto",
634
+ role: "tablist",
635
+ "aria-label": unref(t)("uiVintage.blog.carouselNavigation")
636
+ }, [
637
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.featuredPosts, (_, idx) => {
638
+ return openBlock(), createElementBlock("button", {
639
+ key: idx,
640
+ onClick: ($event) => goToSlide(idx),
641
+ class: normalizeClass(["h-5 w-5 sm:!h-4 sm:!w-4 shrink-0 rounded-[2px] transition-all duration-300 cursor-pointer bg-[var(--border-light)] dark:bg-[var(--border-dark)]", currentSlide.value === idx ? "!w-8 sm:!w-7 !bg-[var(--text-primary-light)] dark:!bg-[var(--text-primary-dark)]" : ""]),
642
+ "aria-label": unref(t)("uiVintage.blog.goToSlide", { index: idx + 1 }),
643
+ "aria-current": currentSlide.value === idx,
644
+ role: "tab",
645
+ "aria-controls": `carousel-slide-${idx}`
646
+ }, null, 10, _hoisted_9);
647
+ }), 128))
648
+ ], 8, _hoisted_8)) : createCommentVNode("", true)
649
+ ])
650
+ ])
651
+ ]),
652
+ _: 2
653
+ }, 1024)
654
+ ]),
655
+ _: 2
656
+ }, 1024)
657
+ ], 8, _hoisted_2$2)), [
658
+ [vShow, currentSlide.value === index]
659
+ ]);
660
+ }), 128))
661
+ ]),
662
+ _: 1
663
+ })
664
+ ]),
665
+ props.featuredPosts.length > 1 ? (openBlock(), createElementBlock("button", {
666
+ key: 0,
667
+ onClick: prevSlide,
668
+ "aria-label": unref(t)("uiVintage.blog.previousSlide"),
669
+ class: "absolute left-2 top-[calc(50%-4rem)] -translate-y-1/2 z-10 border border-[var(--border-light)] dark:border-[var(--border-dark)] bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] px-3 py-3 rounded-none transition-colors duration-200 hover:border-[var(--border-hover-light)] dark:hover:border-[var(--border-hover-dark)] cursor-pointer"
670
+ }, [
671
+ createVNode(unref(HugeiconsIcon), {
672
+ icon: unref(mn),
673
+ class: "size-4 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]"
674
+ }, null, 8, ["icon"])
675
+ ], 8, _hoisted_10)) : createCommentVNode("", true),
676
+ props.featuredPosts.length > 1 ? (openBlock(), createElementBlock("button", {
677
+ key: 1,
678
+ onClick: nextSlide,
679
+ "aria-label": unref(t)("uiVintage.blog.nextSlide"),
680
+ class: "absolute right-2 top-[calc(50%-4rem)] -translate-y-1/2 z-10 border border-[var(--border-light)] dark:border-[var(--border-dark)] bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] px-3 py-3 rounded-none transition-colors duration-200 hover:border-[var(--border-hover-light)] dark:hover:border-[var(--border-hover-dark)] cursor-pointer"
681
+ }, [
682
+ createVNode(unref(HugeiconsIcon), {
683
+ icon: unref(Nn),
684
+ class: "size-4 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]"
685
+ }, null, 8, ["icon"])
686
+ ], 8, _hoisted_11)) : createCommentVNode("", true)
687
+ ], 32)) : createCommentVNode("", true);
688
+ };
689
+ }
690
+ };
691
+ const HeaderCarousel = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-dac6f921"]]);
692
+ const _hoisted_1$1 = { class: "fixed right-[calc(50%-600px)] top-[140px] z-10 hidden xl:!block" };
693
+ const _hoisted_2$1 = { class: "fixed bottom-4 left-1/2 z-10 -translate-x-1/2 xl:hidden" };
694
+ const _sfc_main$1 = {
695
+ __name: "SocialShareSidebar",
696
+ props: {
697
+ title: { type: String, required: true },
698
+ url: { type: String, required: true }
699
+ },
700
+ setup(__props) {
701
+ const props = __props;
702
+ const { t } = useI18n();
703
+ const socialPlatforms = computed(() => {
704
+ const encodedUrl = encodeURIComponent(props.url);
705
+ const encodedTitle = encodeURIComponent(props.title);
706
+ return [{
707
+ name: "facebook",
708
+ url: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`,
709
+ icon: ZB,
710
+ color: "bg-blue-700 hover:bg-blue-800",
711
+ label: t("uiVintage.blog.share.facebook")
712
+ }, {
713
+ name: "twitter",
714
+ url: `https://twitter.com/intent/tweet?url=${encodedUrl}&text=${encodedTitle}`,
715
+ icon: t9,
716
+ color: "bg-black hover:bg-gray-800",
717
+ label: t("uiVintage.blog.share.x")
718
+ }, {
719
+ name: "whatsapp",
720
+ url: `https://api.whatsapp.com/send?text=${encodedTitle}%20${encodedUrl}`,
721
+ icon: MSr,
722
+ color: "bg-green-500 hover:bg-green-600",
723
+ label: t("uiVintage.blog.share.whatsapp")
724
+ }, {
725
+ name: "linkedin",
726
+ url: `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`,
727
+ icon: nK,
728
+ color: "bg-blue-700 hover:bg-blue-800",
729
+ label: t("uiVintage.blog.share.linkedin")
730
+ }, {
731
+ name: "telegram",
732
+ url: `https://t.me/share/url?url=${encodedUrl}&text=${encodedTitle}`,
733
+ icon: oyr,
734
+ color: "bg-blue-400 hover:bg-blue-500",
735
+ label: t("uiVintage.blog.share.telegram")
736
+ }];
737
+ });
738
+ return (_ctx, _cache) => {
739
+ const _component_NuxtLink = resolveComponent("NuxtLink");
740
+ return openBlock(), createElementBlock(Fragment, null, [
741
+ createElementVNode("div", _hoisted_1$1, [
742
+ createVNode(unref(_sfc_main$d), { class: "!p-5 flex flex-col space-y-4 items-center" }, {
743
+ default: withCtx(() => [
744
+ createVNode(unref(_sfc_main$e), { class: "!p-0 gap-4 items-center" }, {
745
+ default: withCtx(() => [
746
+ createVNode(unref(HugeiconsIcon), {
747
+ icon: unref(Nsr),
748
+ class: "size-5 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] mb-2"
749
+ }, null, 8, ["icon"]),
750
+ (openBlock(true), createElementBlock(Fragment, null, renderList(socialPlatforms.value, (platform) => {
751
+ return openBlock(), createBlock(_component_NuxtLink, {
752
+ key: platform.name,
753
+ to: platform.url,
754
+ target: "_blank",
755
+ rel: "noopener noreferrer",
756
+ "aria-label": platform.label,
757
+ class: normalizeClass(["w-10 h-10 rounded flex items-center justify-center text-white transition-all duration-200 hover:opacity-80 hover:scale-105", platform.color])
758
+ }, {
759
+ default: withCtx(() => [
760
+ createVNode(unref(HugeiconsIcon), {
761
+ icon: platform.icon,
762
+ class: "size-4"
763
+ }, null, 8, ["icon"])
764
+ ]),
765
+ _: 2
766
+ }, 1032, ["to", "aria-label", "class"]);
767
+ }), 128))
768
+ ]),
769
+ _: 1
770
+ })
771
+ ]),
772
+ _: 1
773
+ })
774
+ ]),
775
+ createElementVNode("div", _hoisted_2$1, [
776
+ createVNode(unref(_sfc_main$d), { class: "!p-3 w-fit" }, {
777
+ default: withCtx(() => [
778
+ createVNode(unref(_sfc_main$e), { class: "!flex-row !p-0 items-center justify-center gap-3" }, {
779
+ default: withCtx(() => [
780
+ (openBlock(true), createElementBlock(Fragment, null, renderList(socialPlatforms.value, (platform) => {
781
+ return openBlock(), createBlock(_component_NuxtLink, {
782
+ key: platform.name,
783
+ to: platform.url,
784
+ target: "_blank",
785
+ rel: "noopener noreferrer",
786
+ "aria-label": platform.label,
787
+ class: normalizeClass(["w-10 h-10 rounded flex items-center justify-center text-white transition-all duration-200 hover:opacity-80 hover:scale-105", platform.color])
788
+ }, {
789
+ default: withCtx(() => [
790
+ createVNode(unref(HugeiconsIcon), {
791
+ icon: platform.icon,
792
+ class: "size-4"
793
+ }, null, 8, ["icon"])
794
+ ]),
795
+ _: 2
796
+ }, 1032, ["to", "aria-label", "class"]);
797
+ }), 128))
798
+ ]),
799
+ _: 1
800
+ })
801
+ ]),
802
+ _: 1
803
+ })
804
+ ])
805
+ ], 64);
806
+ };
807
+ }
808
+ };
809
+ const _hoisted_1 = { class: "flex items-center gap-3 min-w-0" };
810
+ const _hoisted_2 = { class: "flex items-center justify-center w-8 h-8 md:!w-10 md:!h-10 bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] border border-[var(--border-light)] dark:border-[var(--border-dark)] rounded-none flex-shrink-0" };
811
+ const _hoisted_3 = { class: "text-sm md:!text-base font-semibold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)]" };
812
+ const _hoisted_4 = ["onClick"];
813
+ const _sfc_main = {
814
+ __name: "TableOfContents",
815
+ props: {
816
+ content: { type: Object, required: true }
817
+ },
818
+ setup(__props) {
819
+ const props = __props;
820
+ const { t } = useI18n();
821
+ const isExpanded = ref(false);
822
+ const contentBodyRef = ref(null);
823
+ const headings = computed(() => {
824
+ var _a, _b, _c, _d, _e;
825
+ const tocLinks = ((_c = (_b = (_a = props.content) == null ? void 0 : _a.body) == null ? void 0 : _b.toc) == null ? void 0 : _c.links) || ((_e = (_d = props.content) == null ? void 0 : _d.toc) == null ? void 0 : _e.links) || [];
826
+ const flattenLinks = (links) => {
827
+ return links.flatMap((link) => {
828
+ var _a2;
829
+ const currentHeading = {
830
+ id: link.id,
831
+ text: link.text,
832
+ level: link.depth
833
+ };
834
+ const children = ((_a2 = link.children) == null ? void 0 : _a2.length) ? flattenLinks(link.children) : [];
835
+ return [currentHeading, ...children];
836
+ });
837
+ };
838
+ return flattenLinks(tocLinks).filter((heading) => heading.id && heading.text && heading.level >= 2 && heading.level <= 3);
839
+ });
840
+ const scrollToHeading = (id) => {
841
+ const element = document.getElementById(id);
842
+ if (element) {
843
+ element.scrollIntoView({
844
+ behavior: "smooth",
845
+ block: "start",
846
+ inline: "nearest"
847
+ });
848
+ }
849
+ };
850
+ const toggleExpanded = () => {
851
+ isExpanded.value = !isExpanded.value;
852
+ };
853
+ const contentHeight = computed(() => {
854
+ var _a;
855
+ return ((_a = contentBodyRef.value) == null ? void 0 : _a.scrollHeight) ?? 0;
856
+ });
857
+ const getHeadingButtonClasses = (heading) => {
858
+ const baseClasses = "block w-full text-left px-0 py-2 md:px-3 md:py-2 rounded transition-all duration-200 hover:bg-[var(--bg-selected-light)] dark:hover:bg-[var(--bg-selected-dark)] cursor-pointer";
859
+ let levelClasses = "";
860
+ if (heading.level === 2) {
861
+ levelClasses = "text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] font-semibold text-xs md:text-sm";
862
+ } else {
863
+ levelClasses = "text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] !pl-6 text-xs md:text-sm";
864
+ }
865
+ return [baseClasses, levelClasses];
866
+ };
867
+ return (_ctx, _cache) => {
868
+ return headings.value.length > 0 ? (openBlock(), createBlock(unref(_sfc_main$d), {
869
+ key: 0,
870
+ class: "!p-0 overflow-hidden"
871
+ }, {
872
+ default: withCtx(() => [
873
+ createVNode(unref(_sfc_main$e), { class: "!p-0 gap-0" }, {
874
+ default: withCtx(() => [
875
+ createElementVNode("button", {
876
+ onClick: toggleExpanded,
877
+ class: "flex items-center justify-between w-full p-5 gap-4 text-left cursor-pointer"
878
+ }, [
879
+ createElementVNode("div", _hoisted_1, [
880
+ createElementVNode("div", _hoisted_2, [
881
+ createVNode(unref(HugeiconsIcon), {
882
+ icon: unref(Au),
883
+ class: "size-4 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]"
884
+ }, null, 8, ["icon"])
885
+ ]),
886
+ createElementVNode("span", _hoisted_3, toDisplayString(unref(t)("uiVintage.blog.tableOfContents")), 1)
887
+ ]),
888
+ createElementVNode("div", {
889
+ class: normalizeClass(["flex-shrink-0 w-8 h-8 flex items-center justify-center rounded bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] border border-[var(--border-light)] dark:border-[var(--border-dark)] transition-transform duration-300", { "rotate-180": isExpanded.value }])
890
+ }, [
891
+ createVNode(unref(HugeiconsIcon), {
892
+ icon: unref(dn),
893
+ class: "size-4 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]"
894
+ }, null, 8, ["icon"])
895
+ ], 2)
896
+ ]),
897
+ createElementVNode("div", {
898
+ class: normalizeClass(["overflow-hidden transition-[height,opacity] duration-300 ease-in-out", isExpanded.value ? "opacity-100" : "opacity-0"]),
899
+ style: normalizeStyle({ height: isExpanded.value ? `${contentHeight.value}px` : "0px" })
900
+ }, [
901
+ createElementVNode("nav", {
902
+ ref_key: "contentBodyRef",
903
+ ref: contentBodyRef,
904
+ class: "px-5 pb-5 space-y-1"
905
+ }, [
906
+ (openBlock(true), createElementBlock(Fragment, null, renderList(headings.value, (heading) => {
907
+ return openBlock(), createElementBlock("button", {
908
+ key: heading.id,
909
+ onClick: ($event) => scrollToHeading(heading.id),
910
+ class: normalizeClass(getHeadingButtonClasses(heading))
911
+ }, toDisplayString(heading.text), 11, _hoisted_4);
912
+ }), 128))
913
+ ], 512)
914
+ ], 6)
915
+ ]),
916
+ _: 1
917
+ })
918
+ ]),
919
+ _: 1
920
+ })) : createCommentVNode("", true);
921
+ };
922
+ }
923
+ };
924
+ export {
925
+ _sfc_main$a as AllPostsSection,
926
+ _sfc_main$8 as BlogFAQSection,
927
+ _sfc_main$6 as BlogHeaderSection,
928
+ _sfc_main$7 as BlogInfoSection,
929
+ _sfc_main$9 as BlogSectionTitle,
930
+ _sfc_main$4 as CategoriesList,
931
+ _sfc_main$3 as CategoriesSection,
932
+ _sfc_main$5 as CategoryCard,
933
+ HeaderCarousel,
934
+ _sfc_main$c as PostCard,
935
+ _sfc_main$b as PostsList,
936
+ _sfc_main$1 as SocialShareSidebar,
937
+ _sfc_main as TableOfContents
938
+ };