negodesign 0.0.29 → 0.0.31

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 (131) hide show
  1. package/dist/assets/lonely-404.mp4 +0 -0
  2. package/dist/components/core/banner/AdCardBanner.svelte.d.ts +4 -0
  3. package/dist/components/core/banner/CtaCardBanner.svelte +118 -0
  4. package/dist/components/core/banner/CtaCardBanner.svelte.d.ts +4 -0
  5. package/dist/components/core/banner/{BannerNotification.svelte → NotificationBanner.svelte} +4 -3
  6. package/dist/components/core/banner/NotificationBanner.svelte.d.ts +4 -0
  7. package/dist/components/core/banner/types.d.ts +38 -7
  8. package/dist/components/core/card/highlight/01/CardHighlight01.svelte +15 -26
  9. package/dist/components/core/card/highlight/02/CardHighlight02.svelte +13 -24
  10. package/dist/components/core/card/media/01/CardMedia01.svelte +2 -12
  11. package/dist/components/core/card/media/02/CardMedia02.svelte +2 -12
  12. package/dist/components/core/card/promotion/CardPromotion.svelte +5 -1
  13. package/dist/components/core/card/shared/CardButton.svelte +9 -3
  14. package/dist/components/core/card/shared/CardButton.svelte.d.ts +1 -1
  15. package/dist/components/core/card/shared/CardLogo.svelte +19 -0
  16. package/dist/components/core/card/shared/CardLogo.svelte.d.ts +7 -0
  17. package/dist/components/core/card/shared/CardThumbnailVideo.svelte +3 -0
  18. package/dist/components/core/card/types.d.ts +97 -0
  19. package/dist/components/core/carousel/grid/media/types.d.ts +11 -0
  20. package/dist/components/core/carousel/grid/media/ui/CarouselGridMedia.svelte +2 -1
  21. package/dist/components/core/carousel/grid/profile/types.d.ts +11 -0
  22. package/dist/components/core/carousel/grid/profile/ui/CarouselGridProfile.svelte +3 -5
  23. package/dist/components/core/carousel/grid/shared/ui/CarouselGridSlot.svelte +4 -9
  24. package/dist/components/core/carousel/grid/shared/ui/CarouselGridSlot.svelte.d.ts +1 -0
  25. package/dist/components/core/carousel/highlights/types.d.ts +11 -0
  26. package/dist/components/core/carousel/promotion/types.d.ts +10 -0
  27. package/dist/components/core/carousel/types.d.ts +56 -0
  28. package/dist/components/core/datatable/data/data-table.d.ts +25 -0
  29. package/dist/components/core/footer/types.d.ts +51 -0
  30. package/dist/components/core/footer/types.js +1 -0
  31. package/dist/components/core/footer/ui/01/Footer01.svelte +76 -0
  32. package/dist/components/core/footer/ui/01/Footer01.svelte.d.ts +4 -0
  33. package/dist/components/core/footer/ui/02/Footer02.svelte +53 -0
  34. package/dist/components/core/footer/ui/02/Footer02.svelte.d.ts +4 -0
  35. package/dist/components/core/footer/ui/Footer.svelte +18 -0
  36. package/dist/components/core/footer/ui/Footer.svelte.d.ts +7 -0
  37. package/dist/components/core/footer/ui/shared/FooterColumn.svelte +18 -0
  38. package/dist/components/core/footer/ui/shared/FooterColumn.svelte.d.ts +4 -0
  39. package/dist/components/core/footer/ui/shared/FooterNewsLetter.svelte +57 -0
  40. package/dist/components/core/footer/ui/shared/FooterNewsLetter.svelte.d.ts +9 -0
  41. package/dist/components/core/footer/ui/shared/FooterSocialIcon.svelte +62 -0
  42. package/dist/components/core/footer/ui/shared/FooterSocialIcon.svelte.d.ts +4 -0
  43. package/dist/components/core/nav/data/nav-menu-sidebar.d.ts +29 -0
  44. package/dist/components/core/nav/data/nav-menu.d.ts +43 -0
  45. package/dist/components/core/nav/data/nav-user-sidebar.d.ts +14 -0
  46. package/dist/components/core/nav/ui/menu-links.svelte +1 -1
  47. package/dist/components/core/panel/CarouselSlot.svelte +2 -2
  48. package/dist/components/core/panel/LeftHero.svelte +2 -2
  49. package/dist/components/core/panel/type.d.ts +11 -0
  50. package/dist/components/core/search/types.d.ts +17 -5
  51. package/dist/components/core/sidebar/types.d.ts +19 -0
  52. package/dist/components/core/sidebar/types.js +1 -0
  53. package/dist/components/core/tabs/data/TabModel.d.ts +11 -0
  54. package/dist/components/core/tabs/types.d.ts +11 -0
  55. package/dist/components/core/tabs/types.js +1 -0
  56. package/dist/components/pages/admin/01/ui/types.d.ts +21 -0
  57. package/dist/components/pages/admin/01/ui/types.js +1 -0
  58. package/dist/components/pages/product-details/01/ProductDetails01.svelte +71 -0
  59. package/dist/components/pages/product-details/01/ProductDetails01.svelte.d.ts +11 -0
  60. package/dist/components/pages/product-details/02/ProductDetails02.svelte +88 -0
  61. package/dist/components/pages/product-details/02/ProductDetails02.svelte.d.ts +11 -0
  62. package/dist/components/pages/product-details/03/ProductDetails03.svelte +77 -0
  63. package/dist/components/pages/product-details/03/ProductDetails03.svelte.d.ts +11 -0
  64. package/dist/components/pages/product-details/04/ProductDetails04.svelte +65 -0
  65. package/dist/components/pages/product-details/04/ProductDetails04.svelte.d.ts +11 -0
  66. package/dist/components/pages/product-details/ProductDetails.svelte +38 -0
  67. package/dist/components/pages/product-details/ProductDetails.svelte.d.ts +4 -0
  68. package/dist/components/pages/product-details/shared/ProductDetailActions.svelte +82 -0
  69. package/dist/components/pages/product-details/shared/ProductDetailActions.svelte.d.ts +13 -0
  70. package/dist/components/pages/product-details/shared/ProductDetailBreadcrumb.svelte +46 -0
  71. package/dist/components/pages/product-details/shared/ProductDetailBreadcrumb.svelte.d.ts +8 -0
  72. package/dist/components/pages/product-details/shared/ProductDetailDescription.svelte +38 -0
  73. package/dist/components/pages/product-details/shared/ProductDetailDescription.svelte.d.ts +8 -0
  74. package/dist/components/pages/product-details/shared/ProductDetailFeatures.svelte +40 -0
  75. package/dist/components/pages/product-details/shared/ProductDetailFeatures.svelte.d.ts +7 -0
  76. package/dist/components/pages/product-details/shared/ProductDetailFilesVertical.svelte +72 -0
  77. package/dist/components/pages/product-details/shared/ProductDetailFilesVertical.svelte.d.ts +9 -0
  78. package/dist/components/pages/product-details/shared/ProductDetailHeader.svelte +41 -0
  79. package/dist/components/pages/product-details/shared/ProductDetailHeader.svelte.d.ts +9 -0
  80. package/dist/components/pages/product-details/shared/ProductDetailImage.svelte +70 -0
  81. package/dist/components/pages/product-details/shared/ProductDetailImage.svelte.d.ts +9 -0
  82. package/dist/components/pages/product-details/shared/ProductDetailMap.svelte +57 -0
  83. package/dist/components/pages/product-details/shared/ProductDetailMap.svelte.d.ts +9 -0
  84. package/dist/components/pages/product-details/shared/ProductDetailPrice.svelte +44 -0
  85. package/dist/components/pages/product-details/shared/ProductDetailPrice.svelte.d.ts +9 -0
  86. package/dist/components/pages/product-details/shared/ProductDetailRating.svelte +42 -0
  87. package/dist/components/pages/product-details/shared/ProductDetailRating.svelte.d.ts +8 -0
  88. package/dist/components/pages/product-details/shared/ProductDetailReviews.svelte +70 -0
  89. package/dist/components/pages/product-details/shared/ProductDetailReviews.svelte.d.ts +8 -0
  90. package/dist/components/pages/product-details/shared/ProductDetailTabs.svelte +96 -0
  91. package/dist/components/pages/product-details/shared/ProductDetailTabs.svelte.d.ts +12 -0
  92. package/dist/components/pages/product-details/shared/ProductDetailTags.svelte +35 -0
  93. package/dist/components/pages/product-details/shared/ProductDetailTags.svelte.d.ts +8 -0
  94. package/dist/components/pages/product-details/shared/ProductPurchasePanel.svelte +58 -0
  95. package/dist/components/pages/product-details/shared/ProductPurchasePanel.svelte.d.ts +11 -0
  96. package/dist/components/pages/product-details/types.d.ts +170 -0
  97. package/dist/components/pages/product-details/types.js +1 -0
  98. package/dist/components/pages/profile-user/01/ProfileUser01.svelte +113 -0
  99. package/dist/components/pages/profile-user/01/ProfileUser01.svelte.d.ts +27 -0
  100. package/dist/components/pages/profile-user/02/ProfileUser02.svelte +83 -0
  101. package/dist/components/pages/profile-user/02/ProfileUser02.svelte.d.ts +20 -0
  102. package/dist/components/pages/profile-user/03/ProfileUser03.svelte +85 -0
  103. package/dist/components/pages/profile-user/03/ProfileUser03.svelte.d.ts +20 -0
  104. package/dist/components/pages/profile-user/ProfileUser.svelte +53 -0
  105. package/dist/components/pages/profile-user/ProfileUser.svelte.d.ts +4 -0
  106. package/dist/components/pages/profile-user/shared/ProfileUserAddress.svelte +84 -0
  107. package/dist/components/pages/profile-user/shared/ProfileUserAddress.svelte.d.ts +8 -0
  108. package/dist/components/pages/profile-user/shared/ProfileUserHeader.svelte +104 -0
  109. package/dist/components/pages/profile-user/shared/ProfileUserHeader.svelte.d.ts +9 -0
  110. package/dist/components/pages/profile-user/shared/ProfileUserResetPassword.svelte +116 -0
  111. package/dist/components/pages/profile-user/shared/ProfileUserResetPassword.svelte.d.ts +7 -0
  112. package/dist/components/pages/profile-user/shared/ProfileUserSetting.svelte +176 -0
  113. package/dist/components/pages/profile-user/shared/ProfileUserSetting.svelte.d.ts +14 -0
  114. package/dist/components/pages/profile-user/shared/ProfileUserTabs.svelte +78 -0
  115. package/dist/components/pages/profile-user/shared/ProfileUserTabs.svelte.d.ts +22 -0
  116. package/dist/components/pages/profile-user/types.d.ts +144 -0
  117. package/dist/components/pages/profile-user/types.js +1 -0
  118. package/dist/globals.css +319 -4
  119. package/dist/i18n/langs/en.d.ts +87 -0
  120. package/dist/i18n/langs/en.js +87 -0
  121. package/dist/i18n/langs/pt.d.ts +87 -0
  122. package/dist/i18n/langs/pt.js +93 -6
  123. package/dist/i18n/translations.d.ts +174 -0
  124. package/dist/index.d.ts +194 -27
  125. package/dist/index.js +194 -27
  126. package/dist/styles/globals.css +1 -1
  127. package/dist/types/index.d.ts +196 -5
  128. package/package.json +1 -1
  129. package/dist/components/core/banner/BannerNotification.svelte.d.ts +0 -4
  130. package/dist/components/core/banner/CardAdBanner.svelte.d.ts +0 -4
  131. /package/dist/components/core/banner/{CardAdBanner.svelte → AdCardBanner.svelte} +0 -0
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ import { t } from "../../../../../i18n";
3
+ import type { FooterProps } from "../../types";
4
+ import FooterColumn from "../shared/FooterColumn.svelte";
5
+ import FooterNewsLetter from "../shared/FooterNewsLetter.svelte";
6
+ import SocialIcon from "../shared/FooterSocialIcon.svelte";
7
+
8
+ let {
9
+ items,
10
+ isNewsletter = false,
11
+ socialsMedia,
12
+ companyName,
13
+ newsletterTitle,
14
+ newsletterDescription,
15
+ onSubscribe,
16
+ }: FooterProps = $props();
17
+
18
+ const year = new Date().getFullYear();
19
+ </script>
20
+
21
+ <footer class="p-10">
22
+ <div class="flex flex-wrap justify-between gap-10">
23
+ {#each items as column, i (i)}
24
+ <FooterColumn title={column.title} items={column.items} />
25
+ {/each}
26
+
27
+ {#if isNewsletter}
28
+ <div class="min-w-60">
29
+ <FooterNewsLetter
30
+ {isNewsletter}
31
+ {newsletterTitle}
32
+ {newsletterDescription}
33
+ {onSubscribe}
34
+ />
35
+ </div>
36
+ {/if}
37
+ </div>
38
+
39
+ <div
40
+ class="mt-10 flex flex-col gap-4 border-t border-gray/10 pt-6 md:flex-row md:items-center md:justify-between"
41
+ >
42
+ <p class="text-sm">
43
+ © {year}
44
+ {companyName}
45
+ {$t("footer.copyr")}
46
+ </p>
47
+ <div class="flex items-center gap-4">
48
+ {#each socialsMedia as social, i (i)}
49
+ <SocialIcon icon={social.icon} text={social.text} />
50
+ {/each}
51
+ </div>
52
+ </div>
53
+ </footer>
@@ -0,0 +1,4 @@
1
+ import type { FooterProps } from "../../types";
2
+ declare const Footer02: import("svelte").Component<FooterProps, {}, "">;
3
+ type Footer02 = ReturnType<typeof Footer02>;
4
+ export default Footer02;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import Footer01 from "./01/Footer01.svelte";
3
+ import Footer02 from "./02/Footer02.svelte";
4
+ import type { FooterProps } from "../types";
5
+
6
+ let {
7
+ variant = 1,
8
+ ...restProps
9
+ }: FooterProps & {
10
+ variant?: 1 | 2;
11
+ } = $props();
12
+ </script>
13
+
14
+ {#if variant === 2}
15
+ <Footer02 {...restProps} />
16
+ {:else}
17
+ <Footer01 {...restProps} />
18
+ {/if}
@@ -0,0 +1,7 @@
1
+ import type { FooterProps } from "../types";
2
+ type $$ComponentProps = FooterProps & {
3
+ variant?: 1 | 2;
4
+ };
5
+ declare const Footer: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type Footer = ReturnType<typeof Footer>;
7
+ export default Footer;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import type { FooterColumnProps } from "../../types";
3
+
4
+ let { title, items }: FooterColumnProps = $props();
5
+ </script>
6
+
7
+ <div class="min-w-27.5">
8
+ <h3 class="mb-4 text-sm font-semibold">{title}</h3>
9
+ <ul class="space-y-3">
10
+ {#each items as item, i (i)}
11
+ <li>
12
+ <a href={item.href ?? "#"} class="text-sm transition-colors">
13
+ {item.text}
14
+ </a>
15
+ </li>
16
+ {/each}
17
+ </ul>
18
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { FooterColumnProps } from "../../types";
2
+ declare const FooterColumn: import("svelte").Component<FooterColumnProps, {}, "">;
3
+ type FooterColumn = ReturnType<typeof FooterColumn>;
4
+ export default FooterColumn;
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import { t } from "../../../../../i18n";
3
+ import type { FooterProps } from "../../types";
4
+
5
+ type Props = {
6
+ isNewsletter?: boolean;
7
+ newsletterTitle?: string;
8
+ newsletterDescription?: string;
9
+ onSubscribe?: (email: string) => void;
10
+ };
11
+
12
+ let {
13
+ isNewsletter = false,
14
+ newsletterTitle,
15
+ newsletterDescription,
16
+ onSubscribe,
17
+ }: Props = $props();
18
+
19
+ let email = $state("");
20
+
21
+ function handleSubscribe(e: SubmitEvent) {
22
+ e.preventDefault();
23
+ const value = email.trim();
24
+ if (!value) return;
25
+ onSubscribe?.(value);
26
+ email = "";
27
+ }
28
+ </script>
29
+
30
+ {#if isNewsletter}
31
+ <div>
32
+ <h3 class="mb-1 text-sm font-semibold">
33
+ {newsletterTitle ?? $t("footer.subscribe.title")}
34
+ </h3>
35
+ <p class="text-sm leading-relaxed">
36
+ {newsletterDescription ?? $t("footer.subscribe.text")}
37
+ </p>
38
+ <form
39
+ onsubmit={handleSubscribe}
40
+ class="flex flex-col items-stretch gap-2 sm:flex-row"
41
+ >
42
+ <input
43
+ type="email"
44
+ bind:value={email}
45
+ placeholder="Enter your email"
46
+ required
47
+ class="w-56 rounded-lg border border-gray px-3.5 py-2 text-sm placeholder:text-slate-500 outline-none"
48
+ />
49
+ <button
50
+ type="submit"
51
+ class="shrink-0 rounded-lg px-4 py-2 text-sm font-medium text-white transition-colors bg-gradient"
52
+ >
53
+ {$t("footer.subscribe")}
54
+ </button>
55
+ </form>
56
+ </div>
57
+ {/if}
@@ -0,0 +1,9 @@
1
+ type Props = {
2
+ isNewsletter?: boolean;
3
+ newsletterTitle?: string;
4
+ newsletterDescription?: string;
5
+ onSubscribe?: (email: string) => void;
6
+ };
7
+ declare const FooterNewsLetter: import("svelte").Component<Props, {}, "">;
8
+ type FooterNewsLetter = ReturnType<typeof FooterNewsLetter>;
9
+ export default FooterNewsLetter;
@@ -0,0 +1,62 @@
1
+ <script lang="ts">
2
+ import type { FooterSocialItem } from "../../types";
3
+
4
+ let { icon, text, href }: FooterSocialItem = $props();
5
+ </script>
6
+
7
+ <a
8
+ {href}
9
+ aria-label={text}
10
+ title={text}
11
+ target="_blank"
12
+ class="transition-color"
13
+ >
14
+ {#if icon === "facebook"}
15
+ <svg viewBox="0 0 24 24" fill="currentColor" class="h-4.5 w-4.5">
16
+ <path
17
+ d="M22 12.06C22 6.5 17.52 2 12 2S2 6.5 2 12.06c0 5 3.66 9.15 8.44 9.94v-7.03H7.9v-2.91h2.54V9.85c0-2.5 1.49-3.89 3.77-3.89 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.77-1.63 1.56v1.88h2.78l-.44 2.91h-2.34V22c4.78-.79 8.44-4.94 8.44-9.94Z"
18
+ />
19
+ </svg>
20
+ {:else if icon === "instagram"}
21
+ <svg
22
+ viewBox="0 0 24 24"
23
+ fill="none"
24
+ stroke="currentColor"
25
+ stroke-width="1.8"
26
+ class="h-4.5 w-4.5"
27
+ >
28
+ <rect x="3" y="3" width="18" height="18" rx="5" />
29
+ <circle cx="12" cy="12" r="4" />
30
+ <circle cx="17.2" cy="6.8" r="1" fill="currentColor" stroke="none" />
31
+ </svg>
32
+ {:else if icon === "x"}
33
+ <svg viewBox="0 0 24 24" fill="currentColor" class="h-4 w-4">
34
+ <path
35
+ d="M18.9 2H22l-7.6 8.7L23.3 22h-7.3l-5.7-7.1L3.7 22H.6l8.1-9.3L.9 2h7.5l5.2 6.5L18.9 2Zm-1.3 18h1.8L6.5 3.9H4.6L17.6 20Z"
36
+ />
37
+ </svg>
38
+ {:else if icon === "github"}
39
+ <svg viewBox="0 0 24 24" fill="currentColor" class="h-4.5 w-4.5">
40
+ <path
41
+ d="M12 2a10 10 0 0 0-3.16 19.49c.5.1.68-.22.68-.48v-1.7c-2.78.6-3.37-1.34-3.37-1.34-.46-1.15-1.11-1.46-1.11-1.46-.9-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.9 1.52 2.34 1.08 2.91.83.09-.66.35-1.08.63-1.33-2.22-.25-4.56-1.11-4.56-4.93 0-1.09.39-1.98 1.03-2.68-.1-.25-.45-1.27.1-2.65 0 0 .84-.27 2.75 1.02a9.6 9.6 0 0 1 5 0c1.9-1.3 2.74-1.02 2.74-1.02.56 1.38.2 2.4.1 2.65.65.7 1.03 1.59 1.03 2.68 0 3.83-2.34 4.68-4.57 4.92.36.31.68.92.68 1.85v2.74c0 .27.18.58.69.48A10 10 0 0 0 12 2Z"
42
+ />
43
+ </svg>
44
+ {:else if icon === "youtube"}
45
+ <svg viewBox="0 0 24 24" fill="currentColor" class="h-4.5 w-4.5">
46
+ <path
47
+ d="M22.5 7.2a2.9 2.9 0 0 0-2-2.05C18.7 4.7 12 4.7 12 4.7s-6.7 0-8.5.45a2.9 2.9 0 0 0-2 2.05A30 30 0 0 0 1 12a30 30 0 0 0 .5 4.8 2.9 2.9 0 0 0 2 2.05c1.8.45 8.5.45 8.5.45s6.7 0 8.5-.45a2.9 2.9 0 0 0 2-2.05A30 30 0 0 0 23 12a30 30 0 0 0-.5-4.8ZM9.8 15.2V8.8L15.5 12l-5.7 3.2Z"
48
+ />
49
+ </svg>
50
+ {:else if icon == "linkedin"}
51
+ <svg
52
+ xmlns="http://www.w3.org/2000/svg"
53
+ viewBox="0 0 384 512"
54
+ fill="currentColor"
55
+ class="h-4.5 w-4.5"
56
+ >
57
+ <path
58
+ d="M204.1 0H180.1C161.9 0 147 14.1 147 32.3V177c0 4.7 0 9.3 1.6 13.7l3.8 11.1-12.2 12.6c-9.3 9.6-16.8 19.7-22.5 30.2-5.7 10.6-8.5 21.5-8.5 32.6V480c0 17.7 14.3 32 32 32h43.3c17.7 0 32-14.3 32-32V256c0-10.7-2.5-21.2-7.5-30.7-5-9.5-12.7-17.2-22.6-22.6l-12.6-6.5 4-11.5c2.5-7.5 4-15.4 4-23.5V32.3c0-17.7-14.1-32.3-32-32.3zM432 0H408c-17.7 0-32 14.3-32 32V256c0 17.7 14.3 32 32 32h44c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32zm0 192H408v320h44c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM147 323c0-8.4 2.2-16.6 6.4-23.8l13.3-21.7 12.7-6.6c5.5-2.8 11-6.3 16.3-10.4 5.2-4.1 9.6-9 13-14.6 3.4-5.7 5-11.7 5.4-17.9V32.3c0-8.4-2.2-16.6-6.4-23.8l-13.3-21.7-12.7-6.6c-5.5-2.8-11-6.3-16.3-10.4-5.2-4.1-9.6-9-13-14.6-3.4-5.7-5-11.7-5.4-17.9V0c17.7 0 32 14.3 32 32v90.3c0 8.4 2.2 16.6 6.4 23.8l13.3 21.7 12.7 6.6c5.5 2.8 11 6.3 16.3 10.4 5.2 4.1 9.6 9 13 14.6 3.4 5.7 5 11.7 5.4 17.9v90.3c0 17.7-14.3 32-32 32h-44c-17.7 0-32-14.3-32-32v-90.4z"
59
+ />
60
+ </svg>
61
+ {/if}
62
+ </a>
@@ -0,0 +1,4 @@
1
+ import type { FooterSocialItem } from "../../types";
2
+ declare const FooterSocialIcon: import("svelte").Component<FooterSocialItem, {}, "">;
3
+ type FooterSocialIcon = ReturnType<typeof FooterSocialIcon>;
4
+ export default FooterSocialIcon;
@@ -1,21 +1,50 @@
1
1
  import type { IconSvgElement } from "@hugeicons/svelte";
2
+ /**
3
+ * Grupo/categoria de menus na sidebar (ex: "Gestão", "Relatórios").
4
+ */
2
5
  export interface GroupMenuSidebarProps {
6
+ /** Nome/título do grupo de menus */
3
7
  name: string;
4
8
  }
9
+ /**
10
+ * Submenu de um item principal da sidebar.
11
+ */
5
12
  export interface SubMenuSidebarProps {
13
+ /** Título do submenu */
6
14
  title: string;
15
+ /** URL de destino do submenu */
7
16
  url: string;
17
+ /** Ícone SVG do submenu */
8
18
  icon: IconSvgElement;
19
+ /** Indica se o submenu está ativo/selecionado */
9
20
  isActive?: boolean;
10
21
  }
22
+ /**
23
+ * Item de menu principal da sidebar.
24
+ * Pode ser um item simples ou ter submenus.
25
+ */
11
26
  export interface NavMenuSidebarProps {
27
+ /** Título/nome do item de menu */
12
28
  title: string;
29
+ /** URL de destino (se não tiver submenus) */
13
30
  url?: string;
31
+ /** Ícone SVG do item de menu */
14
32
  icon: IconSvgElement;
33
+ /** Indica se o item está ativo/selecionado */
15
34
  isActive?: boolean;
35
+ /** Grupo/categoria a que o menu pertence */
16
36
  group?: GroupMenuSidebarProps;
17
37
  }
38
+ /**
39
+ * Item de menu com submenus aninhados.
40
+ * Estende NavMenuSidebarProps adicionando suporte a submenus.
41
+ */
18
42
  export interface NavMenuAndSubmenuSidebarProps extends NavMenuSidebarProps {
43
+ /** Lista de submenus abaixo do item principal */
19
44
  submenus?: SubMenuSidebarProps[];
20
45
  }
46
+ /**
47
+ * Tipo união para itens da barra lateral — pode ser
48
+ * um item simples ou um item com submenus.
49
+ */
21
50
  export type NavMenuItem = NavMenuSidebarProps | NavMenuAndSubmenuSidebarProps;
@@ -1,36 +1,79 @@
1
1
  import type { IconSvgElement } from "@hugeicons/svelte";
2
+ /**
3
+ * Props do logotipo no NavMenu.
4
+ */
2
5
  export interface NavMenuLogoProps {
6
+ /** URL da imagem do logotipo */
3
7
  img?: string;
8
+ /** URL de destino ao clicar no logo */
4
9
  url?: string;
10
+ /** Texto alternativo / label do logo */
5
11
  label: string;
12
+ /** Classe CSS adicional */
6
13
  className?: string;
14
+ /** Callback ao clicar no logo */
7
15
  onclick?: () => void;
8
16
  }
17
+ /**
18
+ * Props de um link individual no menu de navegação.
19
+ */
9
20
  export interface NavMenuLinksProps {
21
+ /** URL de destino do link */
10
22
  url?: string;
23
+ /** Alias de `url` — URL de destino do link (compatibilidade) */
24
+ href?: string;
25
+ /** Texto exibido no link */
11
26
  label: string;
27
+ /** Ícone SVG opcional antes do label */
12
28
  icon?: IconSvgElement;
29
+ /** Callback ao clicar no link */
13
30
  onclick?: () => void;
14
31
  }
32
+ /**
33
+ * Props de um item de ação (botão ou link) no menu de navegação.
34
+ * Usado para login, registo, etc.
35
+ */
15
36
  export interface NavMenuActionsProps {
37
+ /** URL de destino da ação */
16
38
  url?: string;
39
+ /** Texto exibido na ação */
17
40
  label: string;
41
+ /** Tipo de elemento: botão estilizado ou link simples */
18
42
  type?: 'BUTTON' | 'LINK';
43
+ /** Classe CSS adicional */
19
44
  className?: string;
45
+ /** Ícone SVG opcional */
20
46
  icon?: IconSvgElement;
47
+ /** Callback ao clicar na ação */
21
48
  onclick?: () => void;
22
49
  }
50
+ /**
51
+ * Props do componente NavMenu — barra de navegação principal
52
+ * com logo, links, ações (login/registo), language switcher e light switch.
53
+ */
23
54
  export interface NavMenuProps {
55
+ /** Classe CSS adicional para o container do nav */
24
56
  navClass?: string;
57
+ /** Classe CSS personalizada para cada link */
25
58
  linkClass?: string;
59
+ /** Classe CSS personalizada para o grupo de links/açōes */
26
60
  groupClass?: string;
61
+ /** Classe CSS personalizada para os botões */
27
62
  buttonClass?: string;
63
+ /** Configuração do logotipo */
28
64
  logo?: NavMenuLogoProps;
65
+ /** Lista de links de navegação */
29
66
  links: NavMenuLinksProps[];
67
+ /** Lista de ações (ex: Login, Registar) */
30
68
  actions?: NavMenuActionsProps[];
69
+ /** Alinhamento dos links e das ações */
31
70
  align?: 'LINK_SEPARATED_ACTIONS' | 'LINK_INTO_ACTIONS';
71
+ /** Exibe o interruptor de tema (claro/escuro) */
32
72
  isLightSwitch?: boolean;
73
+ /** Exibe o seletor de idioma */
33
74
  isLanguageSwitcher?: boolean;
75
+ /** Callback ao clicar no botão Login */
34
76
  onclickButtonLogin?: () => void;
77
+ /** Callback ao clicar no botão Registar */
35
78
  onclickButtonRegister?: () => void;
36
79
  }
@@ -1,14 +1,28 @@
1
1
  import type { IconSvgElement } from "@hugeicons/svelte";
2
+ /**
3
+ * Props do bloco de usuário logado na sidebar.
4
+ * Contém dados do usuário (nome, email, avatar), ações rápidas
5
+ * e callback de logout.
6
+ */
2
7
  export interface NavUserSidebarProps {
8
+ /** Dados do utilizador autenticado */
3
9
  user: {
10
+ /** Nome completo do utilizador */
4
11
  name: string;
12
+ /** Email do utilizador */
5
13
  email: string;
14
+ /** URL da imagem de perfil/avatar (opcional) */
6
15
  avatar?: string;
7
16
  };
17
+ /** Lista de ações rápidas (ex: "Perfil", "Definições") */
8
18
  actions?: {
19
+ /** Texto exibido na ação */
9
20
  label: string;
21
+ /** Ícone SVG da ação */
10
22
  icon: IconSvgElement;
23
+ /** Callback acionado ao clicar na ação */
11
24
  onclick?: () => void;
12
25
  }[];
26
+ /** Callback acionado ao clicar no botão de terminar sessão */
13
27
  onLogout?: () => void;
14
28
  }
@@ -16,7 +16,7 @@
16
16
  <li>
17
17
  <a
18
18
  class={`flex items-center gap-1 ${linkClass}`}
19
- href={item.url || "#"}
19
+ href={item.url ?? item.href ?? "#"}
20
20
  >
21
21
  {#if item.icon}
22
22
  <HugeiconsIcon icon={item.icon} size={15} />
@@ -6,7 +6,7 @@
6
6
  positionButtonPreviousAndNext = "center",
7
7
  isButtonPreviousAndNext = true,
8
8
  buttonPreviousAndNextClass = "",
9
- isBorderBottom = true,
9
+ isBorderBottom = false,
10
10
  containerClass = "w-full",
11
11
  plugins = [],
12
12
  children,
@@ -24,7 +24,7 @@
24
24
  <Carousel.Content
25
25
  class={positionButtonPreviousAndNext == "top_right" ? "" : "ml-0"}
26
26
  >
27
- {@render children()}
27
+ {@render children?.()}
28
28
  </Carousel.Content>
29
29
  {#if positionButtonPreviousAndNext == "center"}
30
30
  {#if isButtonPreviousAndNext}
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { HugeiconsIcon } from "@hugeicons/svelte";
3
3
  import { ArrowRight01Icon } from "@hugeicons/core-free-icons";
4
- import type { LoginCarouselProps } from "../../pages/security/login/types";
4
+ import type { LoginCarouselProps } from "../../pages/security/login/types";
5
5
  import type { Snippet } from "svelte";
6
6
  import Button from "../../ui/button/button.svelte";
7
7
  import { t } from "../../../i18n";
@@ -40,7 +40,7 @@
40
40
  </script>
41
41
 
42
42
  <div
43
- class="relative flex flex-col justify-between overflow-hidden h-screen p-8 bg-gradient-left text-white"
43
+ class="relative flex flex-col justify-between overflow-hidden h-screen p-8 bg-gradient text-white"
44
44
  >
45
45
  <div class="flex items-center gap-2">
46
46
  <div class="font-bold text-xl tracking-wider flex items-center gap-2">
@@ -1,11 +1,22 @@
1
1
  import type { CarouselPlugins } from "../../ui/carousel/context";
2
2
  import type { Snippet } from "svelte";
3
+ /**
4
+ * Props do slot/container de carousel (CarouselSlot).
5
+ * Controla botões de navegação, bordas, plugins e conteúdo customizado.
6
+ */
3
7
  export type CarouselSlotProps = {
8
+ /** Posição dos botões anterior/próximo: centro ou canto superior direito */
4
9
  positionButtonPreviousAndNext?: "center" | "top_right";
10
+ /** Classe CSS personalizada para botões anterior/próximo */
5
11
  buttonPreviousAndNextClass?: string;
12
+ /** Exibe os botões anterior/próximo */
6
13
  isButtonPreviousAndNext?: boolean;
14
+ /** Exibe borda inferior no slot */
7
15
  isBorderBottom?: boolean;
16
+ /** Classe CSS adicional para o container */
8
17
  containerClass?: string;
18
+ /** Plugins do carousel (ex: autoplay, loop) */
9
19
  plugins?: CarouselPlugins;
20
+ /** Snippet de conteúdo customizado renderizado dentro do slot */
10
21
  children?: Snippet;
11
22
  };
@@ -1,15 +1,27 @@
1
- /** Props for the search input component. */
1
+ /**
2
+ * Props base para o componente de input de busca.
3
+ */
2
4
  export interface SearchItemProps {
3
- /** Callback fired when the user submits the search. */
5
+ /** Callback acionado ao submeter a busca (enter ou clique no botão) */
4
6
  onSubmit?: (q: string) => void;
5
- /** Placeholder text for the input field. */
7
+ /** Classe CSS personalizada para o botão de busca */
6
8
  buttonClass?: string;
9
+ /** Placeholder exibido no campo de input */
7
10
  placeholder?: string;
11
+ /** Classe CSS personalizada para o campo de input */
8
12
  inputClass?: string;
13
+ /** Classe CSS personalizada para o ícone de busca */
9
14
  iconClass?: string;
10
15
  }
11
- /** Extended search input props with a visual variant option. */
16
+ /**
17
+ * Props do SearchInput — input de busca completo com duas variantes visuais.
18
+ * @extends SearchItemProps
19
+ */
12
20
  export interface SearchInputProps extends SearchItemProps {
13
- /** Visual variant: 1 = full border, 2 = bottom border only. */
21
+ /**
22
+ * Variante visual do input de busca.
23
+ * 1 = borda completa ao redor;
24
+ * 2 = apenas borda inferior (underline style).
25
+ */
14
26
  variant?: 1 | 2;
15
27
  }
@@ -0,0 +1,19 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { NavUserSidebarProps } from "../nav/data/nav-user-sidebar";
3
+ import type { NavMenuItem, NavMenuSidebarProps } from "../nav/data/nav-menu-sidebar";
4
+ /**
5
+ * Props do componente MenuBarSidebar — sidebar de navegação admin
6
+ * com menus, usuário logado e botões de ação (ex: logout).
7
+ */
8
+ export interface MenuBarSidebarProps {
9
+ /** Botões do rodapé da sidebar (ex: logout) */
10
+ menusButtons?: NavMenuSidebarProps[];
11
+ /** Itens de navegação principal */
12
+ menus: NavMenuItem[];
13
+ /** Dados do usuário logado */
14
+ user: NavUserSidebarProps;
15
+ /** Snippet customizado para o footer da sidebar */
16
+ footer?: Snippet;
17
+ /** Snippet customizado para o header da sidebar */
18
+ header?: Snippet;
19
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,20 @@
1
1
  import type { Snippet } from "svelte";
2
+ /**
3
+ * Item básico de uma aba — valor identificador e label visível.
4
+ */
2
5
  export interface TabItem {
6
+ /** Texto exibido na aba */
3
7
  label: string;
8
+ /** Valor único identificador da aba */
4
9
  value: string;
5
10
  }
11
+ /**
12
+ * Props completas de uma aba no TabUnderline — item (label/value)
13
+ * mais o conteúdo (Snippet) renderizado quando a aba está ativa.
14
+ */
6
15
  export interface TabProps {
16
+ /** Dados da aba (label + valor) */
7
17
  item: TabItem;
18
+ /** Snippet com o conteúdo exibido ao selecionar a aba */
8
19
  children?: Snippet;
9
20
  }
@@ -0,0 +1,11 @@
1
+ import type { TabProps } from "./data/TabModel";
2
+ /**
3
+ * Props do componente TabUnderline — abas com estilo underline
4
+ * que trocam o conteúdo conforme a aba selecionada.
5
+ */
6
+ export interface TabUnderlineProps {
7
+ /** Lista de abas com seu conteúdo (Snippet) */
8
+ items?: TabProps[];
9
+ /** Classe CSS adicional para o container */
10
+ className?: string;
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import type { Snippet } from "svelte";
2
+ /**
3
+ * Props do componente AdminPanel — layout principal de administração
4
+ * com sidebar, header (breadcrumb, language switcher, light switch) e área de conteúdo.
5
+ */
6
+ export interface AdminPanelProps {
7
+ /** Snippet com a sidebar da aplicação */
8
+ appsidebar?: Snippet;
9
+ /** Snippet com o conteúdo principal */
10
+ content?: Snippet;
11
+ /** Snippet com a navegação breadcrumb */
12
+ breadcrumb?: Snippet;
13
+ }
14
+ /**
15
+ * Props do componente AdminContent — wrapper de conteúdo
16
+ * para páginas admin com padding e layout flex.
17
+ */
18
+ export interface AdminContentProps {
19
+ /** Snippet com o conteúdo interno da página */
20
+ children?: Snippet;
21
+ }
@@ -0,0 +1 @@
1
+ export {};