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/components/core/banner/CtaCardImageBanner.svelte +109 -0
- package/dist/components/core/banner/CtaCardImageBanner.svelte.d.ts +4 -0
- package/dist/components/core/banner/types.d.ts +37 -0
- package/dist/components/core/nav/data/types.d.ts +6 -0
- package/dist/components/core/nav/ui/ComplexMenu.svelte +23 -7
- package/dist/components/core/nav/ui/shared/navigation/NavDropdown.svelte +23 -14
- package/dist/components/core/nav/ui/shared/navigation/NavDropdown.svelte.d.ts +3 -1
- package/dist/components/core/nav/ui/shared/navigation/NavigationMenuItem.svelte +12 -9
- package/dist/components/core/nav/ui/shared/navigation/NavigationMenuItemCard.svelte +2 -3
- package/dist/components/core/nav/ui/shared/navigation/NavigationMenuItemGrid.svelte +2 -1
- package/dist/components/core/nav/ui/shared/navigation/NavigationMenuItemList.svelte +2 -2
- package/dist/components/core/nav/ui/shared/navigation/NavigationMenuItems.svelte +2 -2
- package/dist/components/core/panel/NotFoundEmpty.svelte +2 -15
- package/dist/components/core/panel/NotFoundEmpty.svelte.d.ts +2 -14
- package/dist/components/core/panel/type.d.ts +25 -0
- package/dist/globals.css +121 -0
- package/dist/index.d.ts +162 -14
- package/dist/index.js +162 -14
- package/dist/types/index.d.ts +14 -4
- package/package.json +1 -1
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 {
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
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
|
|
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
|
-
* @
|
|
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
|
-
* -
|
|
182
|
-
* -
|
|
183
|
-
* -
|
|
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 };
|