negodesign 0.0.69 → 0.0.71

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
  }
@@ -841,6 +847,9 @@
841
847
  .h-36 {
842
848
  height: calc(var(--spacing) * 36);
843
849
  }
850
+ .h-40 {
851
+ height: calc(var(--spacing) * 40);
852
+ }
844
853
  .h-50 {
845
854
  height: calc(var(--spacing) * 50);
846
855
  }
@@ -1030,6 +1039,9 @@
1030
1039
  .w-144\.25 {
1031
1040
  width: calc(var(--spacing) * 144.25);
1032
1041
  }
1042
+ .w-228 {
1043
+ width: calc(var(--spacing) * 228);
1044
+ }
1033
1045
  .w-\[15px\] {
1034
1046
  width: 15px;
1035
1047
  }
@@ -1096,6 +1108,9 @@
1096
1108
  .max-w-md {
1097
1109
  max-width: var(--container-md);
1098
1110
  }
1111
+ .max-w-none {
1112
+ max-width: none;
1113
+ }
1099
1114
  .max-w-sm {
1100
1115
  max-width: var(--container-sm);
1101
1116
  }
@@ -1906,6 +1921,9 @@
1906
1921
  .bg-red-500 {
1907
1922
  background-color: var(--color-red-500);
1908
1923
  }
1924
+ .bg-red-600 {
1925
+ background-color: var(--color-red-600);
1926
+ }
1909
1927
  .bg-red-900\/50 {
1910
1928
  background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 50%, transparent);
1911
1929
  @supports (color: color-mix(in lab, red, red)) {
@@ -1930,6 +1948,12 @@
1930
1948
  .bg-white {
1931
1949
  background-color: var(--color-white);
1932
1950
  }
1951
+ .bg-white\/5 {
1952
+ background-color: color-mix(in srgb, #fff 5%, transparent);
1953
+ @supports (color: color-mix(in lab, red, red)) {
1954
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
1955
+ }
1956
+ }
1933
1957
  .bg-white\/10 {
1934
1958
  background-color: color-mix(in srgb, #fff 10%, transparent);
1935
1959
  @supports (color: color-mix(in lab, red, red)) {
@@ -2169,6 +2193,9 @@
2169
2193
  .pt-8 {
2170
2194
  padding-top: calc(var(--spacing) * 8);
2171
2195
  }
2196
+ .pt-16 {
2197
+ padding-top: calc(var(--spacing) * 16);
2198
+ }
2172
2199
  .pr-2 {
2173
2200
  padding-right: calc(var(--spacing) * 2);
2174
2201
  }
@@ -2264,6 +2291,10 @@
2264
2291
  font-size: var(--text-lg);
2265
2292
  line-height: var(--tw-leading, var(--text-lg--line-height));
2266
2293
  }
2294
+ .text-lg\/8 {
2295
+ font-size: var(--text-lg);
2296
+ line-height: calc(var(--spacing) * 8);
2297
+ }
2267
2298
  .text-sm {
2268
2299
  font-size: var(--text-sm);
2269
2300
  line-height: var(--tw-leading, var(--text-sm--line-height));
@@ -2364,6 +2395,9 @@
2364
2395
  .text-balance {
2365
2396
  text-wrap: balance;
2366
2397
  }
2398
+ .text-pretty {
2399
+ text-wrap: pretty;
2400
+ }
2367
2401
  .wrap-break-word {
2368
2402
  overflow-wrap: break-word;
2369
2403
  }
@@ -2433,12 +2467,18 @@
2433
2467
  .text-gray-200 {
2434
2468
  color: var(--color-gray-200);
2435
2469
  }
2470
+ .text-gray-300 {
2471
+ color: var(--color-gray-300);
2472
+ }
2436
2473
  .text-gray-400 {
2437
2474
  color: var(--color-gray-400);
2438
2475
  }
2439
2476
  .text-gray-800 {
2440
2477
  color: var(--color-gray-800);
2441
2478
  }
2479
+ .text-gray-900 {
2480
+ color: var(--color-gray-900);
2481
+ }
2442
2482
  .text-green-500 {
2443
2483
  color: var(--color-green-500);
2444
2484
  }
@@ -2641,6 +2681,12 @@
2641
2681
  .ring-sidebar-ring {
2642
2682
  --tw-ring-color: var(--sidebar-ring);
2643
2683
  }
2684
+ .ring-white\/10 {
2685
+ --tw-ring-color: color-mix(in srgb, #fff 10%, transparent);
2686
+ @supports (color: color-mix(in lab, red, red)) {
2687
+ --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2688
+ }
2689
+ }
2644
2690
  .ring-white\/30 {
2645
2691
  --tw-ring-color: color-mix(in srgb, #fff 30%, transparent);
2646
2692
  @supports (color: color-mix(in lab, red, red)) {
@@ -3444,6 +3490,9 @@
3444
3490
  .hover\:text-foreground:hover {
3445
3491
  color: var(--foreground);
3446
3492
  }
3493
+ .hover\:text-gray-100:hover {
3494
+ color: var(--color-gray-100);
3495
+ }
3447
3496
  .hover\:text-muted-foreground:hover {
3448
3497
  color: var(--muted-foreground);
3449
3498
  }
@@ -4213,6 +4262,9 @@
4213
4262
  .sm\:gap-2\.5 {
4214
4263
  gap: calc(var(--spacing) * 2.5);
4215
4264
  }
4265
+ .sm\:rounded-3xl {
4266
+ border-radius: calc(var(--radius) * 2.2);
4267
+ }
4216
4268
  .sm\:px-3\.5 {
4217
4269
  padding-inline: calc(var(--spacing) * 3.5);
4218
4270
  }
@@ -4222,6 +4274,9 @@
4222
4274
  .sm\:px-10 {
4223
4275
  padding-inline: calc(var(--spacing) * 10);
4224
4276
  }
4277
+ .sm\:px-16 {
4278
+ padding-inline: calc(var(--spacing) * 16);
4279
+ }
4225
4280
  .sm\:py-12 {
4226
4281
  padding-block: calc(var(--spacing) * 12);
4227
4282
  }
@@ -4473,6 +4528,9 @@
4473
4528
  .md\:pt-10 {
4474
4529
  padding-top: calc(var(--spacing) * 10);
4475
4530
  }
4531
+ .md\:pt-24 {
4532
+ padding-top: calc(var(--spacing) * 24);
4533
+ }
4476
4534
  .md\:pb-10 {
4477
4535
  padding-bottom: calc(var(--spacing) * 10);
4478
4536
  }
@@ -4568,12 +4626,21 @@
4568
4626
  .lg\:-bottom-3 {
4569
4627
  bottom: calc(var(--spacing) * -3);
4570
4628
  }
4629
+ .lg\:mx-0 {
4630
+ margin-inline: 0px;
4631
+ }
4571
4632
  .lg\:mt-5 {
4572
4633
  margin-top: calc(var(--spacing) * 5);
4573
4634
  }
4635
+ .lg\:mt-8 {
4636
+ margin-top: calc(var(--spacing) * 8);
4637
+ }
4574
4638
  .lg\:block {
4575
4639
  display: block;
4576
4640
  }
4641
+ .lg\:flex {
4642
+ display: flex;
4643
+ }
4577
4644
  .lg\:h-20 {
4578
4645
  height: calc(var(--spacing) * 20);
4579
4646
  }
@@ -4622,6 +4689,9 @@
4622
4689
  .lg\:min-w-150 {
4623
4690
  min-width: calc(var(--spacing) * 150);
4624
4691
  }
4692
+ .lg\:flex-auto {
4693
+ flex: auto;
4694
+ }
4625
4695
  .lg\:grid-cols-2 {
4626
4696
  grid-template-columns: repeat(2, minmax(0, 1fr));
4627
4697
  }
@@ -4637,24 +4707,42 @@
4637
4707
  .lg\:grid-cols-\[1fr_26rem\] {
4638
4708
  grid-template-columns: 1fr 26rem;
4639
4709
  }
4710
+ .lg\:justify-start {
4711
+ justify-content: flex-start;
4712
+ }
4640
4713
  .lg\:gap-10 {
4641
4714
  gap: calc(var(--spacing) * 10);
4642
4715
  }
4643
4716
  .lg\:gap-15 {
4644
4717
  gap: calc(var(--spacing) * 15);
4645
4718
  }
4719
+ .lg\:gap-x-20 {
4720
+ column-gap: calc(var(--spacing) * 20);
4721
+ }
4646
4722
  .lg\:self-start {
4647
4723
  align-self: flex-start;
4648
4724
  }
4649
4725
  .lg\:px-8 {
4650
4726
  padding-inline: calc(var(--spacing) * 8);
4651
4727
  }
4728
+ .lg\:px-24 {
4729
+ padding-inline: calc(var(--spacing) * 24);
4730
+ }
4731
+ .lg\:py-10 {
4732
+ padding-block: calc(var(--spacing) * 10);
4733
+ }
4734
+ .lg\:pt-0 {
4735
+ padding-top: 0px;
4736
+ }
4652
4737
  .lg\:pt-20 {
4653
4738
  padding-top: calc(var(--spacing) * 20);
4654
4739
  }
4655
4740
  .lg\:pl-12 {
4656
4741
  padding-left: calc(var(--spacing) * 12);
4657
4742
  }
4743
+ .lg\:text-left {
4744
+ text-align: left;
4745
+ }
4658
4746
  .lg\:text-\[80px\] {
4659
4747
  font-size: 80px;
4660
4748
  }
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 };