negodesign 0.0.12 → 0.0.13

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 (26) hide show
  1. package/dist/components/core/card/promotion/CardPromotion.svelte +44 -0
  2. package/dist/components/core/card/promotion/CardPromotion.svelte.d.ts +8 -0
  3. package/dist/components/core/card/promotion/data.d.ts +3 -0
  4. package/dist/components/core/card/promotion/data.js +31 -0
  5. package/dist/components/core/card/shared/CardFavorite.svelte +20 -20
  6. package/dist/components/core/card/shared/CardFavorite.svelte.d.ts +1 -1
  7. package/dist/components/core/card/types.d.ts +10 -0
  8. package/dist/components/core/carousel/promotion/ui/CarouselPromotion.svelte +53 -0
  9. package/dist/components/core/carousel/promotion/ui/CarouselPromotion.svelte.d.ts +4 -0
  10. package/dist/components/core/carousel/shared/ui/SimpleBadgeCarousel.svelte +59 -0
  11. package/dist/components/core/carousel/shared/ui/SimpleBadgeCarousel.svelte.d.ts +4 -0
  12. package/dist/components/core/carousel/types.d.ts +12 -1
  13. package/dist/components/core/panel/CarouselSlot.svelte +38 -0
  14. package/dist/components/core/panel/CarouselSlot.svelte.d.ts +11 -0
  15. package/dist/globals.css +44 -1
  16. package/dist/i18n/langs/en.d.ts +1 -0
  17. package/dist/i18n/langs/en.js +1 -0
  18. package/dist/i18n/langs/pt.d.ts +1 -0
  19. package/dist/i18n/langs/pt.js +1 -0
  20. package/dist/i18n/translations.d.ts +2 -0
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.js +2 -1
  23. package/dist/styles/globals.css +6 -2
  24. package/package.json +1 -1
  25. package/dist/components/core/carousel/ui/SimpleCarousel.svelte +0 -62
  26. package/dist/components/core/carousel/ui/SimpleCarousel.svelte.d.ts +0 -4
@@ -0,0 +1,44 @@
1
+ <script lang="ts">
2
+ import CardFavorite from "../shared/CardFavorite.svelte";
3
+ /**
4
+ * Card component with a title and content.
5
+ * @component
6
+ */
7
+ import type { CardPromotionProps } from "../types";
8
+
9
+ let {
10
+ logo,
11
+ imageUrl,
12
+ title,
13
+ isFavorite = false,
14
+ }: CardPromotionProps = $props();
15
+ </script>
16
+
17
+ <article class="relative rounded-sm">
18
+ {#if logo}
19
+ <div class="absolute top-1 left-1 z-2 flex gap-1 p-2">
20
+ <img src={logo} width={30} height={30} alt={title} class="rounded-lg" />
21
+ </div>
22
+ {/if}
23
+
24
+ <div class="absolute top-1 right-1 z-2 flex gap-1 p-2">
25
+ <CardFavorite {isFavorite} />
26
+ </div>
27
+
28
+ {#if imageUrl}
29
+ <img
30
+ src={imageUrl}
31
+ alt={imageUrl}
32
+ class="rounded-lg md:h-37.5 md:w-37.5 lg:h-50 lg:w-50 object-cover object-center"
33
+ />
34
+ {/if}
35
+ <div class="absolute inset-0 bg-black/5 rounded-sm h-full w-full"></div>
36
+
37
+ <div
38
+ class="absolute bottom-1 inset-x-0 flex justify-center m-auto bg-black/10 backdrop-blur-sm max-w-11/12 p-2 rounded-md"
39
+ >
40
+ {#if title}
41
+ <div class="text-center font-semibold text-[12px]">{title}</div>
42
+ {/if}
43
+ </div>
44
+ </article>
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Card component with a title and content.
3
+ * @component
4
+ */
5
+ import type { CardPromotionProps } from "../types";
6
+ declare const CardPromotion: import("svelte").Component<CardPromotionProps, {}, "">;
7
+ type CardPromotion = ReturnType<typeof CardPromotion>;
8
+ export default CardPromotion;
@@ -0,0 +1,3 @@
1
+ import type { CardPromotionProps } from "../types";
2
+ declare const items: CardPromotionProps[];
3
+ export default items;
@@ -0,0 +1,31 @@
1
+ const items = [
2
+ {
3
+ id: 1,
4
+ imageUrl: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=1170&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
5
+ title: 'Hotel Baía Azul',
6
+ isFavorite: true,
7
+ },
8
+ {
9
+ id: 2,
10
+ imageUrl: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=1170&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
11
+ title: 'Miramar Suites',
12
+ },
13
+ {
14
+ id: 3,
15
+ imageUrl: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=1170&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
16
+ title: 'Palm Resort & Spa',
17
+ isFavorite: true
18
+ },
19
+ {
20
+ id: 4,
21
+ imageUrl: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=1170&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
22
+ title: 'Hotel Central Park',
23
+ },
24
+ {
25
+ id: 5,
26
+ imageUrl: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=1170&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
27
+ title: 'Villa Serena Boutique',
28
+ isFavorite: true,
29
+ },
30
+ ];
31
+ export default items;
@@ -1,28 +1,28 @@
1
1
  <script lang="ts">
2
- import { Button } from "../../../ui/button/index.js";
3
- import { HeartAddIcon, HeartRemoveIcon } from "@hugeicons/core-free-icons";
4
- import { HugeiconsIcon } from "@hugeicons/svelte";
2
+ import { Button } from "../../../ui/button/index.js";
3
+ import { HeartAddIcon, HeartRemoveIcon } from "@hugeicons/core-free-icons";
4
+ import { HugeiconsIcon } from "@hugeicons/svelte";
5
5
 
6
- type Props = {
7
- isFavorite: boolean;
8
- onFavoriteClick: () => void;
9
- };
6
+ type Props = {
7
+ isFavorite: boolean;
8
+ onFavoriteClick?: () => void;
9
+ };
10
10
 
11
- let { isFavorite, onFavoriteClick }: Props = $props();
11
+ let { isFavorite, onFavoriteClick }: Props = $props();
12
12
  </script>
13
13
 
14
14
  {#if isFavorite}
15
- <Button
16
- class="w-8 h-8 rounded-full bg-[#ce2356]"
17
- onclick={() => onFavoriteClick!()}
18
- >
19
- <HugeiconsIcon icon={HeartRemoveIcon} />
20
- </Button>
15
+ <Button
16
+ class="w-8 h-8 rounded-full bg-[#ce2356]"
17
+ onclick={() => onFavoriteClick!()}
18
+ >
19
+ <HugeiconsIcon icon={HeartRemoveIcon} />
20
+ </Button>
21
21
  {:else}
22
- <Button
23
- class="w-8 h-8 rounded-full bg-[#808080]"
24
- onclick={() => onFavoriteClick!()}
25
- >
26
- <HugeiconsIcon icon={HeartAddIcon} />
27
- </Button>
22
+ <Button
23
+ class="w-8 h-8 rounded-full bg-[#808080]"
24
+ onclick={() => onFavoriteClick!()}
25
+ >
26
+ <HugeiconsIcon icon={HeartAddIcon} />
27
+ </Button>
28
28
  {/if}
@@ -1,6 +1,6 @@
1
1
  type Props = {
2
2
  isFavorite: boolean;
3
- onFavoriteClick: () => void;
3
+ onFavoriteClick?: () => void;
4
4
  };
5
5
  declare const CardFavorite: import("svelte").Component<Props, {}, "">;
6
6
  type CardFavorite = ReturnType<typeof CardFavorite>;
@@ -42,3 +42,13 @@ export interface CardProfileProps {
42
42
  onButtonProfile?: (id: string | number) => void;
43
43
  onButtonDetails?: (id: string | number) => void;
44
44
  }
45
+ export interface CardPromotionProps {
46
+ id: string | number;
47
+ logo?: string;
48
+ imageUrl?: string;
49
+ title?: string;
50
+ className?: string;
51
+ isFavorite?: boolean;
52
+ oldPrice?: string | number;
53
+ newPrice?: string | number;
54
+ }
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ import CardPromotion from "../../../card/promotion/CardPromotion.svelte";
3
+ import type { CarouselPromotionProps } from "../../types.js";
4
+ import Button from "../../../../ui/button/button.svelte";
5
+ import CarouselSlot from "../../../panel/CarouselSlot.svelte";
6
+ import { t } from "../../../../../i18n";
7
+ import { HugeiconsIcon } from "@hugeicons/svelte";
8
+ import { ArrowRight02Icon } from "@hugeicons/core-free-icons";
9
+
10
+ const {
11
+ title,
12
+ items,
13
+ isButtonPreviousAndNext = true,
14
+ buttonPreviousAndNextClass = "",
15
+ containerClass = "",
16
+ onButtonViewAll,
17
+ }: CarouselPromotionProps = $props();
18
+ </script>
19
+
20
+ <div class="w-full flex justify-center">
21
+ <div class="w-[95%] p-2 rounded-xl {containerClass}">
22
+ <div class="ml-10 flex flex-col gap-1">
23
+ <div class="flex justify-between">
24
+ <div class="text-xl">{title ?? $t("label.promotion")}</div>
25
+ {#if onButtonViewAll}
26
+ <div>
27
+ <Button
28
+ variant="ghost"
29
+ size="sm"
30
+ class="flex items-center gap-0.5"
31
+ onclick={onButtonViewAll}
32
+ >
33
+ {$t("label.view.full")}
34
+ <HugeiconsIcon icon={ArrowRight02Icon} />
35
+ </Button>
36
+ </div>
37
+ {/if}
38
+ </div>
39
+ </div>
40
+ <CarouselSlot
41
+ isBorderBottom={false}
42
+ {isButtonPreviousAndNext}
43
+ {buttonPreviousAndNextClass}
44
+ containerClass="w-full"
45
+ >
46
+ {#each items as item (item.id)}
47
+ <div class="mx-2">
48
+ <CardPromotion {...item} />
49
+ </div>
50
+ {/each}
51
+ </CarouselSlot>
52
+ </div>
53
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { CarouselPromotionProps } from "../../types.js";
2
+ declare const CarouselPromotion: import("svelte").Component<CarouselPromotionProps, {}, "">;
3
+ type CarouselPromotion = ReturnType<typeof CarouselPromotion>;
4
+ export default CarouselPromotion;
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ import * as Carousel from "../../../../ui/carousel/index.js";
3
+ import type { SimpleBadgeCarouselProps } from "../../types.js";
4
+ import { HugeiconsIcon } from "@hugeicons/svelte";
5
+ import CarouselSlot from "../../../panel/CarouselSlot.svelte";
6
+
7
+ const {
8
+ items,
9
+ imageClass,
10
+ iconClass,
11
+ labelClass,
12
+ activeClass,
13
+ valueActive,
14
+ orientation = "horizontal",
15
+ isBorderItem = true,
16
+ isBorderBottom = true,
17
+ isButtonPreviousAndNext = true,
18
+ buttonPreviousAndNextClass = "",
19
+ }: SimpleBadgeCarouselProps = $props();
20
+
21
+ const DEFAULT_IMG_OR_ICON_CLASS = "size-5 rounded-lg";
22
+ </script>
23
+
24
+ <CarouselSlot
25
+ {isBorderBottom}
26
+ {isButtonPreviousAndNext}
27
+ {buttonPreviousAndNextClass}
28
+ >
29
+ {#each items as item (item.value)}
30
+ <Carousel.Item
31
+ onclick={() => item.onClick?.(item.value)}
32
+ class={`
33
+ flex cursor-pointer items-center justify-center gap-1 basis-auto mx-3 pl-0
34
+ ${isBorderItem ? "border border-solid border-gray-300 rounded-lg" : ""}
35
+ ${item.value === valueActive ? activeClass : ""}`}
36
+ >
37
+ <div
38
+ class={`
39
+ flex gap-1 mx-2 p-0.5 justify-center items-center
40
+ ${orientation === "horizontal" ? "flex-row" : "flex-col"}
41
+ `}
42
+ >
43
+ {#if item.image}
44
+ <img
45
+ src={item.image}
46
+ alt={item.label}
47
+ class={imageClass || DEFAULT_IMG_OR_ICON_CLASS}
48
+ />
49
+ {:else if item.icon}
50
+ <HugeiconsIcon
51
+ icon={item.icon}
52
+ class={iconClass || DEFAULT_IMG_OR_ICON_CLASS}
53
+ />
54
+ {/if}
55
+ <div class={`${labelClass}`}>{item.label}</div>
56
+ </div>
57
+ </Carousel.Item>
58
+ {/each}
59
+ </CarouselSlot>
@@ -0,0 +1,4 @@
1
+ import type { SimpleBadgeCarouselProps } from "../../types.js";
2
+ declare const SimpleBadgeCarousel: import("svelte").Component<SimpleBadgeCarouselProps, {}, "">;
3
+ type SimpleBadgeCarousel = ReturnType<typeof SimpleBadgeCarousel>;
4
+ export default SimpleBadgeCarousel;
@@ -1,4 +1,5 @@
1
1
  import type { IconSvgElement } from "@hugeicons/svelte";
2
+ import type { CardPromotionProps } from "../card/types";
2
3
  export interface ItemCarousel {
3
4
  value: string;
4
5
  label: string;
@@ -8,7 +9,7 @@ export interface ItemCarousel {
8
9
  isActive?: boolean;
9
10
  onClick?: (value: string) => void;
10
11
  }
11
- export interface SimpleCarouselProps {
12
+ export interface SimpleBadgeCarouselProps {
12
13
  items: ItemCarousel[];
13
14
  orientation?: "horizontal" | "vertical";
14
15
  imageClass?: string;
@@ -21,3 +22,13 @@ export interface SimpleCarouselProps {
21
22
  isButtonPreviousAndNext?: boolean;
22
23
  buttonPreviousAndNextClass?: string;
23
24
  }
25
+ export interface CarouselPromotionProps {
26
+ title?: string;
27
+ description?: string;
28
+ items: CardPromotionProps[];
29
+ isBorderBottom?: boolean;
30
+ isButtonPreviousAndNext?: boolean;
31
+ buttonPreviousAndNextClass?: string;
32
+ containerClass?: string;
33
+ onButtonViewAll?: () => void;
34
+ }
@@ -0,0 +1,38 @@
1
+ <script lang="ts">
2
+ import * as Carousel from "../../ui/carousel/index.js";
3
+ import type { Snippet } from "svelte";
4
+
5
+ type Props = {
6
+ isBorderBottom?: boolean;
7
+ isButtonPreviousAndNext?: boolean;
8
+ buttonPreviousAndNextClass?: string;
9
+ containerClass?: string;
10
+ children: Snippet;
11
+ };
12
+
13
+ const {
14
+ isBorderBottom = true,
15
+ isButtonPreviousAndNext = true,
16
+ buttonPreviousAndNextClass = "",
17
+ containerClass = "",
18
+ children,
19
+ }: Props = $props();
20
+ </script>
21
+
22
+ <div
23
+ class={`relative py-3 px-2 ${isBorderBottom ? "border-b" : ""} ${containerClass}`}
24
+ >
25
+ <Carousel.Root>
26
+ <Carousel.Content class="ml-10">
27
+ {@render children()}
28
+ </Carousel.Content>
29
+ {#if isButtonPreviousAndNext}
30
+ <Carousel.Previous
31
+ class={`absolute top-1/2 -translate-y-1/2 left-1 mt-0.5 ${buttonPreviousAndNextClass}`}
32
+ />
33
+ <Carousel.Next
34
+ class={`absolute top-1/2 -translate-y-1/2 right-1 mt-0.5 ${buttonPreviousAndNextClass}`}
35
+ />
36
+ {/if}
37
+ </Carousel.Root>
38
+ </div>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from "svelte";
2
+ type Props = {
3
+ isBorderBottom?: boolean;
4
+ isButtonPreviousAndNext?: boolean;
5
+ buttonPreviousAndNextClass?: string;
6
+ containerClass?: string;
7
+ children: Snippet;
8
+ };
9
+ declare const CarouselSlot: import("svelte").Component<Props, {}, "">;
10
+ type CarouselSlot = ReturnType<typeof CarouselSlot>;
11
+ export default CarouselSlot;
package/dist/globals.css CHANGED
@@ -9,6 +9,7 @@
9
9
  --color-red-900: oklch(39.6% 0.141 25.723);
10
10
  --color-yellow-500: oklch(79.5% 0.184 86.047);
11
11
  --color-green-500: oklch(72.3% 0.219 149.579);
12
+ --color-blue-50: oklch(97% 0.014 254.604);
12
13
  --color-blue-500: oklch(62.3% 0.214 259.815);
13
14
  --color-blue-900: oklch(37.9% 0.146 265.522);
14
15
  --color-slate-400: oklch(70.4% 0.04 256.788);
@@ -256,6 +257,9 @@
256
257
  .inset-0 {
257
258
  inset: 0px;
258
259
  }
260
+ .inset-x-0 {
261
+ inset-inline: 0px;
262
+ }
259
263
  .inset-y-0 {
260
264
  inset-block: 0px;
261
265
  }
@@ -283,6 +287,9 @@
283
287
  .top-0 {
284
288
  top: 0px;
285
289
  }
290
+ .top-1 {
291
+ top: var(--spacing);
292
+ }
286
293
  .top-1\.5 {
287
294
  top: calc(var(--spacing) * 1.5);
288
295
  }
@@ -331,6 +338,9 @@
331
338
  .bottom-0 {
332
339
  bottom: 0px;
333
340
  }
341
+ .bottom-1 {
342
+ bottom: var(--spacing);
343
+ }
334
344
  .bottom-2 {
335
345
  bottom: calc(var(--spacing) * 2);
336
346
  }
@@ -765,6 +775,9 @@
765
775
  .w-\[15px\] {
766
776
  width: 15px;
767
777
  }
778
+ .w-\[95\%\] {
779
+ width: 95%;
780
+ }
768
781
  .w-\[100px\] {
769
782
  width: 100px;
770
783
  }
@@ -801,6 +814,9 @@
801
814
  .max-w-7xl {
802
815
  max-width: var(--container-7xl);
803
816
  }
817
+ .max-w-11\/12 {
818
+ max-width: calc(11 / 12 * 100%);
819
+ }
804
820
  .max-w-\[calc\(100\%-2rem\)\] {
805
821
  max-width: calc(100% - 2rem);
806
822
  }
@@ -1281,6 +1297,12 @@
1281
1297
  .bg-background {
1282
1298
  background-color: var(--background);
1283
1299
  }
1300
+ .bg-black\/5 {
1301
+ background-color: color-mix(in srgb, #000 5%, transparent);
1302
+ @supports (color: color-mix(in lab, red, red)) {
1303
+ background-color: color-mix(in oklab, var(--color-black) 5%, transparent);
1304
+ }
1305
+ }
1284
1306
  .bg-black\/10 {
1285
1307
  background-color: color-mix(in srgb, #000 10%, transparent);
1286
1308
  @supports (color: color-mix(in lab, red, red)) {
@@ -1305,6 +1327,9 @@
1305
1327
  background-color: color-mix(in oklab, var(--color-black) 80%, transparent);
1306
1328
  }
1307
1329
  }
1330
+ .bg-blue-50 {
1331
+ background-color: var(--color-blue-50);
1332
+ }
1308
1333
  .bg-blue-500 {
1309
1334
  background-color: var(--color-blue-500);
1310
1335
  }
@@ -1419,6 +1444,9 @@
1419
1444
  .object-cover {
1420
1445
  object-fit: cover;
1421
1446
  }
1447
+ .object-center {
1448
+ object-position: center;
1449
+ }
1422
1450
  .p-0 {
1423
1451
  padding: 0px;
1424
1452
  }
@@ -3152,6 +3180,9 @@
3152
3180
  .md\:flex {
3153
3181
  display: flex;
3154
3182
  }
3183
+ .md\:h-37\.5 {
3184
+ height: calc(var(--spacing) * 37.5);
3185
+ }
3155
3186
  .md\:min-h-15 {
3156
3187
  min-height: calc(var(--spacing) * 15);
3157
3188
  }
@@ -3164,6 +3195,9 @@
3164
3195
  .md\:w-11\/12 {
3165
3196
  width: calc(11 / 12 * 100%);
3166
3197
  }
3198
+ .md\:w-37\.5 {
3199
+ width: calc(var(--spacing) * 37.5);
3200
+ }
3167
3201
  .md\:max-w-md {
3168
3202
  max-width: var(--container-md);
3169
3203
  }
@@ -3252,9 +3286,15 @@
3252
3286
  .lg\:block {
3253
3287
  display: block;
3254
3288
  }
3289
+ .lg\:h-50 {
3290
+ height: calc(var(--spacing) * 50);
3291
+ }
3255
3292
  .lg\:h-105 {
3256
3293
  height: calc(var(--spacing) * 105);
3257
3294
  }
3295
+ .lg\:w-50 {
3296
+ width: calc(var(--spacing) * 50);
3297
+ }
3258
3298
  .lg\:w-105 {
3259
3299
  width: calc(var(--spacing) * 105);
3260
3300
  }
@@ -3318,6 +3358,9 @@
3318
3358
  background-color: color-mix(in oklab, var(--destructive) 20%, transparent);
3319
3359
  }
3320
3360
  }
3361
+ .dark\:bg-gray-800:is(.dark *) {
3362
+ background-color: var(--color-gray-800);
3363
+ }
3321
3364
  .dark\:bg-input\/30:is(.dark *) {
3322
3365
  background-color: var(--input);
3323
3366
  @supports (color: color-mix(in lab, red, red)) {
@@ -4050,7 +4093,7 @@
4050
4093
  .container-fixed {
4051
4094
  width: calc(11 / 12 * 100%);
4052
4095
  @media (width >= 64rem) {
4053
- width: calc(var(--spacing) * 300);
4096
+ width: calc(11 / 12 * 100%);
4054
4097
  }
4055
4098
  }
4056
4099
  }
@@ -55,6 +55,7 @@ declare const _default: {
55
55
  "label.close": string;
56
56
  "label.navigation": string;
57
57
  "label.navigation.text": string;
58
+ "label.promotion": string;
58
59
  "text.login": string;
59
60
  "text.register": string;
60
61
  "text.forget-password": string;
@@ -55,6 +55,7 @@ export default {
55
55
  "label.close": "Close",
56
56
  "label.navigation": "Navigation",
57
57
  "label.navigation.text": "Navigate through our application to access all features features and content",
58
+ "label.promotion": "Promotions",
58
59
  "text.login": "Enter your credentials below to securely access your account and continue where you left off.",
59
60
  "text.register": "Fill in the fields below with your information to create your new account and enjoy all our features.",
60
61
  "text.forget-password": "Enter your email address below and we will send you a link to reset your password.",
@@ -55,6 +55,7 @@ declare const _default: {
55
55
  "label.close": string;
56
56
  "label.navigation": string;
57
57
  "label.navigation.text": string;
58
+ "label.promotion": string;
58
59
  "text.login": string;
59
60
  "text.register": string;
60
61
  "text.forget-password": string;
@@ -55,6 +55,7 @@ export default {
55
55
  "label.close": "Fechar",
56
56
  "label.navigation": "Navegação",
57
57
  "label.navigation.text": "Navega pela nossa aplicação",
58
+ "label.promotion": "Promoções",
58
59
  "text.login": "Insira as suas credenciais abaixo para aceder à sua conta com segurança e continuar de onde parou.",
59
60
  "text.register": "Preencha os campos abaixo com as suas informações para criar a sua nova conta e aproveitar todos os nossos recursos.",
60
61
  "text.forget-password": "Insira o seu endereço de email abaixo e enviaremos um link para redefinir a sua senha.",
@@ -56,6 +56,7 @@ declare const _default: {
56
56
  "label.close": string;
57
57
  "label.navigation": string;
58
58
  "label.navigation.text": string;
59
+ "label.promotion": string;
59
60
  "text.login": string;
60
61
  "text.register": string;
61
62
  "text.forget-password": string;
@@ -145,6 +146,7 @@ declare const _default: {
145
146
  "label.close": string;
146
147
  "label.navigation": string;
147
148
  "label.navigation.text": string;
149
+ "label.promotion": string;
148
150
  "text.login": string;
149
151
  "text.register": string;
150
152
  "text.forget-password": string;
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ import PrivacyPolicyOrTermsOfUse from "./components/pages/privacy-policy-or-term
13
13
  import PageOtpVerification from "./components/pages/security/otp-verification/PageOtpVerification.svelte";
14
14
  import PageForgetPassword from "./components/pages/security/forget-password/PageForgetPassword.svelte";
15
15
  import PageResetPassword from "./components/pages/security/reset-password/PageResetPassword.svelte";
16
+ import SimpleBadgeCarousel from "./components/core/carousel/shared/ui/SimpleBadgeCarousel.svelte";
16
17
  import PageLogin from "./components/pages/security/login/PageLogin.svelte";
17
18
  import SearchInput from "./components/core/search/SearchInput.svelte";
18
19
  import NavMenu from "./components/core/nav/ui/nav-menu.svelte";
@@ -29,7 +30,7 @@ export { getMergedTranslations } from "./i18n/config";
29
30
  export { getLocales } from "./i18n/config";
30
31
  export {
31
32
  /** Componente raiz do Negodesign. Configura o tema, idioma e traduções. @property {Record<string, Record<string, string>>} translations - Traduções customizadas @property {Snippet} children - Conteúdo da aplicação */
32
- NegoDesign, NavMenu, SearchInput,
33
+ NegoDesign, NavMenu, SearchInput, SimpleBadgeCarousel,
33
34
  /** Página de login com carousel hero e card de autenticação. @see PageLoginProps */
34
35
  PageLogin,
35
36
  /** Página de recuperação de senha com carousel hero e card de recuperação. @see PageForgetPasswordProps */
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ import PrivacyPolicyOrTermsOfUse from "./components/pages/privacy-policy-or-term
13
13
  import PageOtpVerification from "./components/pages/security/otp-verification/PageOtpVerification.svelte";
14
14
  import PageForgetPassword from "./components/pages/security/forget-password/PageForgetPassword.svelte";
15
15
  import PageResetPassword from "./components/pages/security/reset-password/PageResetPassword.svelte";
16
+ import SimpleBadgeCarousel from "./components/core/carousel/shared/ui/SimpleBadgeCarousel.svelte";
16
17
  import PageLogin from "./components/pages/security/login/PageLogin.svelte";
17
18
  import SearchInput from "./components/core/search/SearchInput.svelte";
18
19
  import NavMenu from "./components/core/nav/ui/nav-menu.svelte";
@@ -29,7 +30,7 @@ export { getMergedTranslations } from "./i18n/config";
29
30
  export { getLocales } from "./i18n/config";
30
31
  export {
31
32
  /** Componente raiz do Negodesign. Configura o tema, idioma e traduções. @property {Record<string, Record<string, string>>} translations - Traduções customizadas @property {Snippet} children - Conteúdo da aplicação */
32
- NegoDesign, NavMenu, SearchInput,
33
+ NegoDesign, NavMenu, SearchInput, SimpleBadgeCarousel,
33
34
  /** Página de login com carousel hero e card de autenticação. @see PageLoginProps */
34
35
  PageLogin,
35
36
  /** Página de recuperação de senha com carousel hero e card de recuperação. @see PageForgetPasswordProps */
@@ -16,7 +16,9 @@
16
16
  @apply max-md:bg-linear-to-r max-md:from-[#0077b6] max-md:via-[#219ebc] max-md:to-[#219ebc] dark:max-md:from-[#06344d] dark:max-md:via-[#023845] dark:max-md:to-[#074656];
17
17
  }
18
18
 
19
- .container-fixed { @apply w-11/12 lg:w-300; }
19
+ .container-fixed {
20
+ @apply w-11/12 lg:w-11/12;
21
+ }
20
22
  }
21
23
 
22
24
  :root {
@@ -134,10 +136,12 @@
134
136
  * {
135
137
  @apply border-border outline-ring/50;
136
138
  }
139
+
137
140
  body {
138
141
  @apply bg-background text-foreground;
139
142
  }
143
+
140
144
  html {
141
145
  @apply font-sans;
142
146
  }
143
- }
147
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "negodesign",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "sideEffects": [
@@ -1,62 +0,0 @@
1
- <script lang="ts">
2
- import * as Carousel from "../../../ui/carousel/index.js";
3
- import type { SimpleCarouselProps } from "../types.js";
4
- import { HugeiconsIcon } from "@hugeicons/svelte";
5
-
6
- const {
7
- items,
8
- imageClass,
9
- iconClass,
10
- labelClass,
11
- activeClass,
12
- valueActive,
13
- orientation = "horizontal",
14
- isBorderItem = true,
15
- isBorderBottom = true,
16
- isButtonPreviousAndNext = true,
17
- buttonPreviousAndNextClass = "",
18
- }: SimpleCarouselProps = $props();
19
-
20
- const DEFAULT_IMG_OR_ICON_CLASS = "size-5 rounded-lg";
21
- </script>
22
-
23
- <nav class={`relative py-3 px-2 ${isBorderBottom ? "border-b" : ""}`}>
24
- <Carousel.Root>
25
- <Carousel.Content class="ml-10">
26
- {#each items as item (item.value)}
27
- <Carousel.Item
28
- onclick={() => item.onClick?.(item.value)}
29
- class={`
30
- flex cursor-pointer items-center justify-center gap-1 basis-auto mx-3 pl-0
31
- ${isBorderItem ? "border border-solid border-gray-300 rounded-lg" : ""}
32
- ${item.value === valueActive ? activeClass : ""}`}
33
- >
34
- <div class={`
35
- flex gap-1 mx-2 p-0.5 justify-center items-center
36
- ${orientation === "horizontal" ? "flex-row" : "flex-col"}
37
- `}>
38
- {#if item.image}
39
- <img
40
- src={item.image}
41
- alt={item.label}
42
- class={imageClass || DEFAULT_IMG_OR_ICON_CLASS}
43
- />
44
- {:else if item.icon}
45
- <HugeiconsIcon
46
- icon={item.icon}
47
- class={iconClass || DEFAULT_IMG_OR_ICON_CLASS}
48
- />
49
- {/if}
50
- <div class={`${labelClass}`}>{item.label}</div>
51
- </div>
52
- </Carousel.Item>
53
- {/each}
54
- </Carousel.Content>
55
- {#if isButtonPreviousAndNext}
56
- <Carousel.Previous
57
- class={`absolute top-1/2 -translate-y-1/2 left-1 mt-0.5 ${buttonPreviousAndNextClass}`}
58
- />
59
- <Carousel.Next class={`absolute top-1/2 -translate-y-1/2 right-1 mt-0.5 ${buttonPreviousAndNextClass}`} />
60
- {/if}
61
- </Carousel.Root>
62
- </nav>
@@ -1,4 +0,0 @@
1
- import type { SimpleCarouselProps } from "../types.js";
2
- declare const SimpleCarousel: import("svelte").Component<SimpleCarouselProps, {}, "">;
3
- type SimpleCarousel = ReturnType<typeof SimpleCarousel>;
4
- export default SimpleCarousel;