negodesign 0.0.69 → 0.0.70

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.
package/dist/globals.css CHANGED
@@ -555,6 +555,9 @@
555
555
  .mt-5 {
556
556
  margin-top: calc(var(--spacing) * 5);
557
557
  }
558
+ .mt-6 {
559
+ margin-top: calc(var(--spacing) * 6);
560
+ }
558
561
  .mt-7 {
559
562
  margin-top: calc(var(--spacing) * 7);
560
563
  }
@@ -564,6 +567,9 @@
564
567
  .mt-12 {
565
568
  margin-top: calc(var(--spacing) * 12);
566
569
  }
570
+ .mt-16 {
571
+ margin-top: calc(var(--spacing) * 16);
572
+ }
567
573
  .mt-auto {
568
574
  margin-top: auto;
569
575
  }
@@ -753,6 +759,10 @@
753
759
  width: calc(var(--spacing) * 24);
754
760
  height: calc(var(--spacing) * 24);
755
761
  }
762
+ .size-256 {
763
+ width: calc(var(--spacing) * 256);
764
+ height: calc(var(--spacing) * 256);
765
+ }
756
766
  .size-full {
757
767
  width: 100%;
758
768
  height: 100%;
@@ -850,6 +860,9 @@
850
860
  .h-75 {
851
861
  height: calc(var(--spacing) * 75);
852
862
  }
863
+ .h-80 {
864
+ height: calc(var(--spacing) * 80);
865
+ }
853
866
  .h-\[65px\] {
854
867
  height: 65px;
855
868
  }
@@ -1030,6 +1043,9 @@
1030
1043
  .w-144\.25 {
1031
1044
  width: calc(var(--spacing) * 144.25);
1032
1045
  }
1046
+ .w-228 {
1047
+ width: calc(var(--spacing) * 228);
1048
+ }
1033
1049
  .w-\[15px\] {
1034
1050
  width: 15px;
1035
1051
  }
@@ -1096,6 +1112,9 @@
1096
1112
  .max-w-md {
1097
1113
  max-width: var(--container-md);
1098
1114
  }
1115
+ .max-w-none {
1116
+ max-width: none;
1117
+ }
1099
1118
  .max-w-sm {
1100
1119
  max-width: var(--container-sm);
1101
1120
  }
@@ -1906,6 +1925,9 @@
1906
1925
  .bg-red-500 {
1907
1926
  background-color: var(--color-red-500);
1908
1927
  }
1928
+ .bg-red-600 {
1929
+ background-color: var(--color-red-600);
1930
+ }
1909
1931
  .bg-red-900\/50 {
1910
1932
  background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 50%, transparent);
1911
1933
  @supports (color: color-mix(in lab, red, red)) {
@@ -1930,6 +1952,12 @@
1930
1952
  .bg-white {
1931
1953
  background-color: var(--color-white);
1932
1954
  }
1955
+ .bg-white\/5 {
1956
+ background-color: color-mix(in srgb, #fff 5%, transparent);
1957
+ @supports (color: color-mix(in lab, red, red)) {
1958
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
1959
+ }
1960
+ }
1933
1961
  .bg-white\/10 {
1934
1962
  background-color: color-mix(in srgb, #fff 10%, transparent);
1935
1963
  @supports (color: color-mix(in lab, red, red)) {
@@ -2010,6 +2038,9 @@
2010
2038
  --tw-gradient-to: var(--muted);
2011
2039
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
2012
2040
  }
2041
+ .mask-\[radial-gradient\(closest-side\,white\,transparent\)\] {
2042
+ mask-image: radial-gradient(closest-side,white,transparent);
2043
+ }
2013
2044
  .bg-clip-padding {
2014
2045
  background-clip: padding-box;
2015
2046
  }
@@ -2145,6 +2176,9 @@
2145
2176
  .py-12 {
2146
2177
  padding-block: calc(var(--spacing) * 12);
2147
2178
  }
2179
+ .py-24 {
2180
+ padding-block: calc(var(--spacing) * 24);
2181
+ }
2148
2182
  .ps-4 {
2149
2183
  padding-inline-start: calc(var(--spacing) * 4);
2150
2184
  }
@@ -2169,6 +2203,9 @@
2169
2203
  .pt-8 {
2170
2204
  padding-top: calc(var(--spacing) * 8);
2171
2205
  }
2206
+ .pt-16 {
2207
+ padding-top: calc(var(--spacing) * 16);
2208
+ }
2172
2209
  .pr-2 {
2173
2210
  padding-right: calc(var(--spacing) * 2);
2174
2211
  }
@@ -2264,6 +2301,10 @@
2264
2301
  font-size: var(--text-lg);
2265
2302
  line-height: var(--tw-leading, var(--text-lg--line-height));
2266
2303
  }
2304
+ .text-lg\/8 {
2305
+ font-size: var(--text-lg);
2306
+ line-height: calc(var(--spacing) * 8);
2307
+ }
2267
2308
  .text-sm {
2268
2309
  font-size: var(--text-sm);
2269
2310
  line-height: var(--tw-leading, var(--text-sm--line-height));
@@ -2364,6 +2405,9 @@
2364
2405
  .text-balance {
2365
2406
  text-wrap: balance;
2366
2407
  }
2408
+ .text-pretty {
2409
+ text-wrap: pretty;
2410
+ }
2367
2411
  .wrap-break-word {
2368
2412
  overflow-wrap: break-word;
2369
2413
  }
@@ -2433,12 +2477,18 @@
2433
2477
  .text-gray-200 {
2434
2478
  color: var(--color-gray-200);
2435
2479
  }
2480
+ .text-gray-300 {
2481
+ color: var(--color-gray-300);
2482
+ }
2436
2483
  .text-gray-400 {
2437
2484
  color: var(--color-gray-400);
2438
2485
  }
2439
2486
  .text-gray-800 {
2440
2487
  color: var(--color-gray-800);
2441
2488
  }
2489
+ .text-gray-900 {
2490
+ color: var(--color-gray-900);
2491
+ }
2442
2492
  .text-green-500 {
2443
2493
  color: var(--color-green-500);
2444
2494
  }
@@ -2641,6 +2691,12 @@
2641
2691
  .ring-sidebar-ring {
2642
2692
  --tw-ring-color: var(--sidebar-ring);
2643
2693
  }
2694
+ .ring-white\/10 {
2695
+ --tw-ring-color: color-mix(in srgb, #fff 10%, transparent);
2696
+ @supports (color: color-mix(in lab, red, red)) {
2697
+ --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2698
+ }
2699
+ }
2644
2700
  .ring-white\/30 {
2645
2701
  --tw-ring-color: color-mix(in srgb, #fff 30%, transparent);
2646
2702
  @supports (color: color-mix(in lab, red, red)) {
@@ -3444,6 +3500,9 @@
3444
3500
  .hover\:text-foreground:hover {
3445
3501
  color: var(--foreground);
3446
3502
  }
3503
+ .hover\:text-gray-100:hover {
3504
+ color: var(--color-gray-100);
3505
+ }
3447
3506
  .hover\:text-muted-foreground:hover {
3448
3507
  color: var(--muted-foreground);
3449
3508
  }
@@ -4183,6 +4242,12 @@
4183
4242
  .sm\:right-6 {
4184
4243
  right: calc(var(--spacing) * 6);
4185
4244
  }
4245
+ .sm\:left-full {
4246
+ left: 100%;
4247
+ }
4248
+ .sm\:-ml-80 {
4249
+ margin-left: calc(var(--spacing) * -80);
4250
+ }
4186
4251
  .sm\:flex {
4187
4252
  display: flex;
4188
4253
  }
@@ -4213,6 +4278,9 @@
4213
4278
  .sm\:gap-2\.5 {
4214
4279
  gap: calc(var(--spacing) * 2.5);
4215
4280
  }
4281
+ .sm\:rounded-3xl {
4282
+ border-radius: calc(var(--radius) * 2.2);
4283
+ }
4216
4284
  .sm\:px-3\.5 {
4217
4285
  padding-inline: calc(var(--spacing) * 3.5);
4218
4286
  }
@@ -4222,12 +4290,18 @@
4222
4290
  .sm\:px-10 {
4223
4291
  padding-inline: calc(var(--spacing) * 10);
4224
4292
  }
4293
+ .sm\:px-16 {
4294
+ padding-inline: calc(var(--spacing) * 16);
4295
+ }
4225
4296
  .sm\:py-12 {
4226
4297
  padding-block: calc(var(--spacing) * 12);
4227
4298
  }
4228
4299
  .sm\:py-14 {
4229
4300
  padding-block: calc(var(--spacing) * 14);
4230
4301
  }
4302
+ .sm\:py-32 {
4303
+ padding-block: calc(var(--spacing) * 32);
4304
+ }
4231
4305
  .sm\:text-2xl {
4232
4306
  font-size: var(--text-2xl);
4233
4307
  line-height: var(--tw-leading, var(--text-2xl--line-height));
@@ -4473,6 +4547,9 @@
4473
4547
  .md\:pt-10 {
4474
4548
  padding-top: calc(var(--spacing) * 10);
4475
4549
  }
4550
+ .md\:pt-24 {
4551
+ padding-top: calc(var(--spacing) * 24);
4552
+ }
4476
4553
  .md\:pb-10 {
4477
4554
  padding-bottom: calc(var(--spacing) * 10);
4478
4555
  }
@@ -4568,12 +4645,27 @@
4568
4645
  .lg\:-bottom-3 {
4569
4646
  bottom: calc(var(--spacing) * -3);
4570
4647
  }
4648
+ .lg\:left-1\/2 {
4649
+ left: calc(1 / 2 * 100%);
4650
+ }
4651
+ .lg\:mx-0 {
4652
+ margin-inline: 0px;
4653
+ }
4571
4654
  .lg\:mt-5 {
4572
4655
  margin-top: calc(var(--spacing) * 5);
4573
4656
  }
4657
+ .lg\:mt-8 {
4658
+ margin-top: calc(var(--spacing) * 8);
4659
+ }
4660
+ .lg\:ml-0 {
4661
+ margin-left: 0px;
4662
+ }
4574
4663
  .lg\:block {
4575
4664
  display: block;
4576
4665
  }
4666
+ .lg\:flex {
4667
+ display: flex;
4668
+ }
4577
4669
  .lg\:h-20 {
4578
4670
  height: calc(var(--spacing) * 20);
4579
4671
  }
@@ -4622,6 +4714,17 @@
4622
4714
  .lg\:min-w-150 {
4623
4715
  min-width: calc(var(--spacing) * 150);
4624
4716
  }
4717
+ .lg\:flex-auto {
4718
+ flex: auto;
4719
+ }
4720
+ .lg\:-translate-x-1\/2 {
4721
+ --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
4722
+ translate: var(--tw-translate-x) var(--tw-translate-y);
4723
+ }
4724
+ .lg\:translate-y-0 {
4725
+ --tw-translate-y: 0px;
4726
+ translate: var(--tw-translate-x) var(--tw-translate-y);
4727
+ }
4625
4728
  .lg\:grid-cols-2 {
4626
4729
  grid-template-columns: repeat(2, minmax(0, 1fr));
4627
4730
  }
@@ -4637,24 +4740,42 @@
4637
4740
  .lg\:grid-cols-\[1fr_26rem\] {
4638
4741
  grid-template-columns: 1fr 26rem;
4639
4742
  }
4743
+ .lg\:justify-start {
4744
+ justify-content: flex-start;
4745
+ }
4640
4746
  .lg\:gap-10 {
4641
4747
  gap: calc(var(--spacing) * 10);
4642
4748
  }
4643
4749
  .lg\:gap-15 {
4644
4750
  gap: calc(var(--spacing) * 15);
4645
4751
  }
4752
+ .lg\:gap-x-20 {
4753
+ column-gap: calc(var(--spacing) * 20);
4754
+ }
4646
4755
  .lg\:self-start {
4647
4756
  align-self: flex-start;
4648
4757
  }
4649
4758
  .lg\:px-8 {
4650
4759
  padding-inline: calc(var(--spacing) * 8);
4651
4760
  }
4761
+ .lg\:px-24 {
4762
+ padding-inline: calc(var(--spacing) * 24);
4763
+ }
4764
+ .lg\:py-32 {
4765
+ padding-block: calc(var(--spacing) * 32);
4766
+ }
4767
+ .lg\:pt-0 {
4768
+ padding-top: 0px;
4769
+ }
4652
4770
  .lg\:pt-20 {
4653
4771
  padding-top: calc(var(--spacing) * 20);
4654
4772
  }
4655
4773
  .lg\:pl-12 {
4656
4774
  padding-left: calc(var(--spacing) * 12);
4657
4775
  }
4776
+ .lg\:text-left {
4777
+ text-align: left;
4778
+ }
4658
4779
  .lg\:text-\[80px\] {
4659
4780
  font-size: 80px;
4660
4781
  }
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ import AdminContent from "./components/pages/admin/01/ui/AdminContent.svelte";
12
12
  import AdminPanel from "./components/pages/admin/01/ui/AdminPanel.svelte";
13
13
  import AdCardBanner from "./components/core/banner/AdCardBanner.svelte";
14
14
  import CtaCardBanner from "./components/core/banner/CtaCardBanner.svelte";
15
+ import CtaCardImageBanner from "./components/core/banner/CtaCardImageBanner.svelte";
15
16
  import NotificationBanner from "./components/core/banner/NotificationBanner.svelte";
16
17
  import PrivacyPolicyOrTermsOfUse from "./components/pages/privacy-policy-or-terms-of-use/PrivacyPolicyOrTermsOfUse.svelte";
17
18
  import ProductDetails from "./components/pages/product-details/ProductDetails.svelte";
@@ -46,7 +47,41 @@ export { t } from "./i18n";
46
47
  export { getMergedTranslations } from "./i18n/config";
47
48
  /** Retorna a lista de idiomas disponíveis. */
48
49
  export { getLocales } from "./i18n/config";
49
- export { Menu, ItemsSimpleGrid, ItemsPanel,
50
+ export {
51
+ /**
52
+ * Barra de navegação responsiva que alterna entre as variantes Simples
53
+ * (links) e Complexa (menus) consoante o dispositivo (mobile ou desktop).
54
+ * Inclui logo, botões de ação, light switch e language switcher.
55
+ * @property {NavMenuLogoProps} logo - Logotipo do menu
56
+ * @property {MenuVarientProps} navMenu - Variante de navegação (Simples ou Complexa)
57
+ * @property {NavMenuButtonProps} navMenuButton - Botão de ação (login/registo)
58
+ * @property {boolean} isBorder - Exibe borda inferior no menu
59
+ * @property {boolean} isLightSwitch - Exibe o interruptor de tema (claro/escuro)
60
+ * @property {boolean} isLanguageSwitcher - Exibe o seletor de idioma
61
+ * @see MenuProps
62
+ */
63
+ Menu,
64
+ /**
65
+ * Grid de itens (cards) com variantes visuais 1 e 2.
66
+ * Em mobile vira uma lista de scroll horizontal; em desktop usa colunas
67
+ * dinâmicas baseadas no número de itens. Suporta estado de carregamento.
68
+ * @property {ItemGridProps[]} items - Lista de itens a exibir
69
+ * @property {1|2} variant - Variante visual dos cards (padrão: 1)
70
+ * @property {boolean} isLoading - Exibe skeletons de carregamento
71
+ * @property {(id) => void} onClick - Callback ao clicar num item
72
+ * @property {string} className - Classe CSS adicional do container
73
+ * @see GridProps
74
+ */
75
+ ItemsSimpleGrid,
76
+ /**
77
+ * Contentor de itens que pode renderizar numa grade (grid) ou num carousel
78
+ * (inline) com seleção ativa. Cada clique normaliza o id e dispara `onClick`.
79
+ * @property {ItemGridProps[]} items - Lista de itens a exibir
80
+ * @property {"grid"|"inline"} style - Estilo de exibição (padrão: "grid")
81
+ * @property {(id) => void} onClick - Callback ao selecionar um item
82
+ * @see GridProps
83
+ */
84
+ ItemsPanel,
50
85
  /**
51
86
  * Componente raiz do Negodesign.
52
87
  * Configura o tema, idioma e traduções da aplicação.
@@ -55,138 +90,227 @@ export { Menu, ItemsSimpleGrid, ItemsPanel,
55
90
  */
56
91
  NegoDesign,
57
92
  /**
58
- * Banner de anúncio com faixa lateral colorida, título destacado e botão CTA.
59
- * Ideal para publicidade, chamadas de atenção ou ofertas especiais.
93
+ * Banner de anúncio com faixa lateral colorida, título destacado (duas cores)
94
+ * e botão CTA. Ideal para publicidade, chamadas de atenção ou ofertas especiais.
95
+ * @property {string} tagText - Texto da faixa lateral colorida
96
+ * @property {string} titleHighlight - Primeira parte do título (cor âmbar)
97
+ * @property {string} titleMain - Segunda parte do título (cor verde)
98
+ * @property {string} buttonText - Texto do botão CTA
99
+ * @property {() => void} onClickButton - Chamado ao clicar no CTA
100
+ * @property {string} href - Link que torna todo o card clicável
60
101
  * @see AdCardBannerProps
61
102
  */
62
103
  AdCardBanner,
63
104
  /**
64
105
  * Banner CTA "Vamos entrar em contacto" com título bold, descrição de apoio
65
106
  * e até 2 botões em formato de pílula com decoração de anéis concêntricos.
107
+ * @property {string} title - Título principal do banner
108
+ * @property {string} description - Texto de apoio/descrição
109
+ * @property {string} primaryText - Texto do botão primário
110
+ * @property {string} secondaryText - Texto do botão secundário
111
+ * @property {() => void} onClickPrimary - Callback do botão primário
112
+ * @property {() => void} onClickSecondary - Callback do botão secundário
113
+ * @property {string} primaryHref - Link do botão primário
114
+ * @property {string} secondaryHref - Link do botão secundário
66
115
  * @see CtaCardBannerProps
67
116
  */
68
117
  CtaCardBanner,
118
+ /**
119
+ * Banner CTA com imagem de destaque em fundo gradiente (`bg-gradient`).
120
+ * Título, descrição e até dois CTAs, cada um com link e/ou callback de clique,
121
+ * além da imagem e seus atributos.
122
+ * @property {string} title - Título principal do banner
123
+ * @property {string} description - Texto de apoio/descrição
124
+ * @property {string} primaryText - Texto do CTA primário
125
+ * @property {string} primaryHref - Link do CTA primário
126
+ * @property {() => void} onClickPrimary - Callback do CTA primário
127
+ * @property {string} secondaryText - Texto do CTA secundário
128
+ * @property {string} secondaryHref - Link do CTA secundário
129
+ * @property {() => void} onClickSecondary - Callback do CTA secundário
130
+ * @property {string} imageSrc - URL da imagem de destaque
131
+ * @property {string} imageAlt - Texto alternativo da imagem
132
+ * @property {number} imageWidth - Largura da imagem
133
+ * @property {number} imageHeight - Altura da imagem
134
+ * @see CtaCardImageBannerProps
135
+ */
136
+ CtaCardImageBanner,
69
137
  /**
70
138
  * Banner de notificação com texto em destaque, descrição, CTA e botão dismiss.
71
139
  * Usado para comunicar novidades, promoções ou mensagens importantes.
140
+ * @property {string} strongText - Texto em destaque antes do separador
141
+ * @property {string} description - Descrição principal
142
+ * @property {string} ctaText - Texto do botão CTA
143
+ * @property {string} ctaHref - Link do botão CTA
144
+ * @property {() => void} onCtaClick - Chamado ao clicar no CTA
145
+ * @property {() => void} onDismiss - Chamado ao clicar no dismiss
72
146
  * @see NotificationBannerProps
73
147
  */
74
148
  NotificationBanner,
75
- /** @see NotFoundEmpty */
149
+ /**
150
+ * Estado vazio (empty state) com ícone, título, descrição e uma ação
151
+ * (link ou botão) para quando não há conteúdo a exibir.
152
+ * @property {string} title - Título do estado vazio
153
+ * @property {string} description - Descrição de apoio
154
+ * @property {IconSvgElement} icon - Ícone exibido na área de media
155
+ * @property {string} actionHref - URL de destino da ação (link)
156
+ * @property {string} actionLabel - Texto da ação
157
+ * @property {() => void} onAction - Callback ao clicar na ação (botão)
158
+ * @property {boolean} showAction - Exibe a ação de suporte
159
+ * @property {Snippet} children - Conteúdo customizado no lugar da ação padrão
160
+ * @see NotFoundEmptyProps
161
+ */
76
162
  NotFoundEmpty,
77
163
  /**
78
164
  * Campo de input de busca com 2 variantes visuais (borda completa ou underline).
79
165
  * Inclui botão de submissão e callback onSubmit.
166
+ * @property {1|2} variant - Variante visual (1: borda completa, 2: underline)
167
+ * @property {(value) => void} onSubmit - Chamado ao submeter a busca
80
168
  * @see SearchInputProps
81
169
  */
82
170
  SearchInput,
83
171
  /**
84
- * CompanyProfile de perfil empresa.
172
+ * Página de perfil da empresa com informações detalhadas, descrição,
173
+ * galeria, localização e contactos.
85
174
  * @see CompanyProfileProps
86
175
  */
87
176
  CompanyProfile,
88
177
  /**
89
178
  * Carousel de badges/categorias com orientação horizontal ou vertical.
90
179
  * Cada item pode ter ícone, imagem, label e callback de clique.
180
+ * @property {ItemCarousel[]} items - Lista de itens/categorias
181
+ * @property {boolean} isVertical - Orientação vertical
182
+ * @property {(item) => void} onClick - Callback ao clicar num item
91
183
  * @see CarouselBadgeProps
92
184
  */
93
185
  CarouselBadge,
94
186
  /**
95
187
  * Carousel hero em fullscreen com slides de imagem, título, descrição
96
188
  * e menu de navegação sobreposto. Ideal para páginas de login.
189
+ * @property {CarouselHeroItem[]} items - Lista de slides
97
190
  * @see CarouselHeroProps
98
191
  */
99
192
  CarouselHero,
100
193
  /**
101
194
  * Rodapé completo com múltiplas colunas de links, logo, ícones de redes sociais
102
195
  * e formulário de newsletter opcional.
196
+ * @property {FooterColumnProps[]} columns - Colunas de links do rodapé
197
+ * @property {FooterSocialItem[]} social - Redes sociais
198
+ * @property {boolean} hasNewsletter - Exibe o formulário de newsletter
103
199
  * @see FooterProps
104
200
  */
105
201
  Footer,
106
202
  /**
107
203
  * Carousel de cards de promoção com preços antigo/novo, botão de comprar,
108
204
  * favoritar e adicionar ao carrinho.
205
+ * @property {CardPromotionProps[]} items - Cards de promoção
206
+ * @property {CarouselHeaderProps} header - Cabeçalho do carousel
109
207
  * @see CarouselPromotionProps
110
208
  */
111
209
  CarouselPromotion,
112
210
  /**
113
211
  * Carousel de cards de destaque para organizações, serviços ou locais em evidência.
114
212
  * Suporta duas variantes visuais.
213
+ * @property {CardHighlightProps[]} items - Cards de destaque
214
+ * @property {CarouselHeaderProps} header - Cabeçalho do carousel
215
+ * @property {1|2} variant - Variante visual
115
216
  * @see CarouselHighlightsProps
116
217
  */
117
218
  CarouselHighlights,
118
219
  /**
119
220
  * Layout em grid responsivo de cards de mídia (imagens ou vídeos).
120
221
  * Em telas mobile transforma-se num carousel com swipe.
121
- * @see CarouselMediaProps
222
+ * @property {CardMediaProps[]} items - Cards de mídia
223
+ * @property {CarouselHeaderProps} header - Cabeçalho do carousel
224
+ * @see CarouselGridMediaProps
122
225
  */
123
226
  CarouselGridMedia,
124
227
  /**
125
228
  * Layout em grid responsivo de cards de perfil (guias, intérpretes, organizações).
126
229
  * Em telas mobile transforma-se num carousel com swipe.
127
- * @see CarouselProfileProps
230
+ * @property {CardProfileProps[]} items - Cards de perfil
231
+ * @property {CarouselHeaderProps} header - Cabeçalho do carousel
232
+ * @see CarouselGridProfileProps
128
233
  */
129
234
  CarouselGridProfile,
130
235
  /**
131
236
  * Layout em grid responsivo de cards de produto (imagens ou vídeos).
132
237
  * Em telas mobile transforma-se num carousel com swipe.
133
- * @see CarouselProductProps
238
+ * @property {CardProductProps[]} items - Cards de produto
239
+ * @property {CarouselHeaderProps} header - Cabeçalho do carousel
240
+ * @see CarouselGridProductProps
134
241
  */
135
242
  CarouselGridProduct,
136
243
  /**
137
- * Layout em grid responsivo de cards de produto in promotion (imagens ou vídeos).
244
+ * Layout em grid responsivo de cards de produto em promoção (imagens ou vídeos).
138
245
  * Em telas mobile transforma-se num carousel com swipe.
139
- * @see CarouselGridPromotion
246
+ * @property {CardProductProps[]} items - Cards de produto em promoção
247
+ * @property {CarouselHeaderProps} header - Cabeçalho do carousel
248
+ * @see CarouselGridPromotionProps
140
249
  */
141
250
  CarouselGridPromotion,
142
251
  /**
143
252
  * Componente de abas com estilo underline. Troca o conteúdo (Snippet)
144
253
  * conforme a aba selecionada.
254
+ * @property {TabItem[]} items - Lista de abas (valor identificador e label)
255
+ * @property {Record<string, Snippet>} contents - Snippets de conteúdo por aba
145
256
  * @see TabUnderlineProps
146
257
  */
147
258
  TabUnderline,
148
259
  /**
149
260
  * Página de login completa com carousel hero ao fundo e card de autenticação
150
261
  * com múltiplas variantes (email, username, telefone) e formulário de registo.
262
+ * @property {LoginVariant} variant - Variante do formulário de login
263
+ * @property {LoginRequestDto} initialData - Valores iniciais do formulário
151
264
  * @see PageLoginProps
152
265
  */
153
266
  PageLogin,
154
267
  /**
155
268
  * Página de recuperação de senha com hero carousel e card de solicitação
156
269
  * de link de recuperação por email.
270
+ * @property {ForgetPasswordVariant} variant - Variante do formulário
271
+ * @property {(data) => Promise<void>} onSubmit - Chamado ao submeter
157
272
  * @see PageForgetPasswordProps
158
273
  */
159
274
  PageForgetPassword,
160
275
  /**
161
276
  * Página de redefinição de senha com hero carousel e card para introduzir
162
277
  * e confirmar a nova palavra-passe.
278
+ * @property {(data) => Promise<void>} onSubmit - Chamado ao submeter
163
279
  * @see PageResetPasswordProps
164
280
  */
165
281
  PageResetPassword,
166
282
  /**
167
283
  * Página de política de privacidade ou termos de utilização com sidebar,
168
284
  * tabela de conteúdos e blocos de conteúdo navegáveis.
285
+ * @property {DocSection[]} sections - Secções de conteúdo do documento
286
+ * @property {BreadcrumbItem[]} breadcrumb - Navegação breadcrumb
169
287
  * @see PrivacyPolicyOrTermsOfUseProps
170
288
  */
171
289
  PrivacyPolicyOrTermsOfUse,
172
290
  /**
173
291
  * Página de detalhes do produto com 4 variantes de layout, galeria de imagens,
174
292
  * avaliações, mapa, ficheiros, tabs e painel de compra.
293
+ * @property {ProductDetailsData} data - Dados completos do produto
294
+ * @property {1|2|3} variant - Variante de layout
175
295
  * @see ProductDetailsProps
176
296
  */
177
297
  ProductDetails,
178
298
  /**
179
299
  * Página de perfil de utilizador com 3 variantes de layout.
180
300
  * Inclui informação básica, alterar senha, preferências e experiência.
181
- * - varient=1: Header colorido com dados admin, tabs e painel de detalhes.
182
- * - varient=2: Banner com avatar sobreposto, formulário alterar senha (Security).
183
- * - varient=3: Header roxo com tabs de experiência e timeline.
301
+ * - variant=1: Header colorido com dados admin, tabs e painel de detalhes.
302
+ * - variant=2: Banner com avatar sobreposto, formulário alterar senha (Security).
303
+ * - variant=3: Header roxo com tabs de experiência e timeline.
304
+ * @property {ProfileUserData} data - Dados do utilizador
305
+ * @property {ProfileUserVariant} variant - Variante de layout
184
306
  * @see ProfileUserProps
185
307
  */
186
308
  ProfileUser,
187
309
  /**
188
310
  * Página de verificação OTP com hero carousel e card de input de código
189
311
  * de 6 dígitos para validação de login ou recuperação.
312
+ * @property {OtpVerificationRequestDto} initialData - Valores iniciais
313
+ * @property {(data) => Promise<void>} onSubmit - Chamado ao validar o OTP
190
314
  * @see PageOtpVerificationProps
191
315
  */
192
316
  PageOtpVerification,
@@ -194,13 +318,19 @@ PageOtpVerification,
194
318
  * Tabela de dados genérica construída sobre o TanStack Table.
195
319
  * Inclui paginação, ordenação, filtros, badges, coluna de seleção,
196
320
  * drag handle e ações personalizadas por linha.
197
- * @template T Tipo genérico dos itens/linhas
321
+ * @template T - Tipo genérico dos itens/linhas
322
+ * @property {DataTableItem<T>} item - Definição da tabela (colunas, filtros, ações)
198
323
  * @see DataTableCoreProps
199
324
  */
200
325
  DataTableCore,
201
326
  /**
202
327
  * Sidebar de navegação administrativa com menu colapsável, cabeçalho customizável,
203
328
  * lista de menus/submenus, botões do rodapé e bloco de utilizador logado.
329
+ * @property {NavMenuItem[]} menus - Itens de navegação principal (com ou sem submenus)
330
+ * @property {NavUserSidebarProps} user - Bloco de utilizador logado
331
+ * @property {NavMenuSidebarProps[]} menusButtons - Botões do rodapé da sidebar (ex: logout)
332
+ * @property {Snippet} header - Snippet customizado do cabeçalho da sidebar
333
+ * @property {Snippet} footer - Snippet customizado do rodapé da sidebar
204
334
  * @see MenuBarSidebarProps
205
335
  */
206
336
  MenuBarSidebar,
@@ -211,12 +341,14 @@ MenuBarSidebar,
211
341
  * @property {Snippet} appsidebar - Snippet com a sidebar da aplicação
212
342
  * @property {Snippet} content - Snippet com o conteúdo principal
213
343
  * @property {Snippet} breadcrumb - Snippet com a navegação breadcrumb
344
+ * @see AdminPanelProps
214
345
  */
215
346
  AdminPanel,
216
347
  /**
217
348
  * Wrapper de conteúdo para páginas administrativas.
218
349
  * Aplica padding, layout flex colunar e gaps consistentes entre secções.
219
350
  * @property {Snippet} children - Snippet com o conteúdo interno da página
351
+ * @see AdminContentProps
220
352
  */
221
353
  AdminContent,
222
354
  /**
@@ -224,6 +356,8 @@ AdminContent,
224
356
  * Suporta two-way binding via prop `value`.
225
357
  * @property {string} value - Valor vinculado do input
226
358
  * @property {string} label - Rótulo personalizado do campo
359
+ * @property {string} placeholder - Texto de exemplo do campo
360
+ * @see InputLabelProps
227
361
  */
228
362
  InputEmail,
229
363
  /**
@@ -231,6 +365,8 @@ InputEmail,
231
365
  * e validação do formato.
232
366
  * @property {string} value - Valor vinculado do input
233
367
  * @property {string} label - Rótulo personalizado do campo
368
+ * @property {string} placeholder - Texto de exemplo do campo
369
+ * @see InputLabelProps
234
370
  */
235
371
  InputPhone,
236
372
  /**
@@ -238,13 +374,19 @@ InputPhone,
238
374
  * Detecta automaticamente o tipo com base no valor introduzido.
239
375
  * @property {string} value - Valor vinculado do input
240
376
  * @property {string} label - Rótulo personalizado do campo
377
+ * @property {string} placeholder - Texto de exemplo do campo
378
+ * @see InputLabelProps
241
379
  */
242
380
  InputEmailOrPhone,
243
381
  /**
244
382
  * Campo de input para código OTP (One-Time Password) com N caixas de dígitos separadas.
245
383
  * Suporta separador visual entre grupos de dígitos.
384
+ * @property {string} value - Valor vinculado do input
385
+ * @property {string} label - Rótulo personalizado do campo (opcional)
246
386
  * @property {number} length - Quantidade de caixas de dígitos (padrão: 6)
247
387
  * @property {boolean} separator - Exibir separador visual entre grupos
388
+ * @property {string} placeholder - Texto de exemplo do campo
389
+ * @see InputLabelProps
248
390
  */
249
391
  InputCodeOtp,
250
392
  /**
@@ -252,12 +394,16 @@ InputCodeOtp,
252
394
  * Suporta two-way binding e validações customizadas.
253
395
  * @property {string} value - Valor vinculado do input
254
396
  * @property {string} label - Rótulo personalizado do campo
397
+ * @property {string} placeholder - Texto de exemplo do campo
398
+ * @see InputLabelProps
255
399
  */
256
400
  InputPassword,
257
401
  /**
258
402
  * Campo de input para nome de utilizador com ícone e label integrados.
259
403
  * @property {string} value - Valor vinculado do input
260
404
  * @property {string} label - Rótulo personalizado do campo
405
+ * @property {string} placeholder - Texto de exemplo do campo
406
+ * @see InputLabelProps
261
407
  */
262
408
  InputUsername,
263
409
  /**
@@ -265,5 +411,7 @@ InputUsername,
265
411
  * para validar correspondência entre os dois campos.
266
412
  * @property {string} value - Valor vinculado do input
267
413
  * @property {string} label - Rótulo personalizado do campo
414
+ * @property {string} placeholder - Texto de exemplo do campo
415
+ * @see InputLabelProps
268
416
  */
269
417
  InputPasswordConfirm };