negodesign 0.0.26 → 0.0.27

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 (112) hide show
  1. package/dist/components/core/breadcrumb/breadcrumb-list.svelte +31 -31
  2. package/dist/components/core/button/ButtonBack.svelte +18 -18
  3. package/dist/components/core/button/ButtonLogin.svelte +15 -15
  4. package/dist/components/core/button/ButtonLoginWith.svelte +57 -57
  5. package/dist/components/core/button/ButtonSend.svelte +15 -15
  6. package/dist/components/core/card/highlight/01/CardHighlight01.svelte +91 -91
  7. package/dist/components/core/card/highlight/02/CardHighlight02.svelte +93 -93
  8. package/dist/components/core/card/highlight/CardHighlight.svelte +22 -22
  9. package/dist/components/core/card/media/01/CardMedia01.svelte +111 -111
  10. package/dist/components/core/card/media/02/CardMedia02.svelte +110 -110
  11. package/dist/components/core/card/media/CardMedia.svelte +17 -17
  12. package/dist/components/core/card/profile/01/CardProfile01.svelte +98 -98
  13. package/dist/components/core/card/profile/02/CardProfile02.svelte +98 -98
  14. package/dist/components/core/card/profile/CardProfile.svelte +17 -17
  15. package/dist/components/core/card/promotion/CardPromotion.svelte +112 -112
  16. package/dist/components/core/card/shared/CardButton.svelte +30 -30
  17. package/dist/components/core/card/shared/CardCart.svelte +36 -36
  18. package/dist/components/core/card/shared/CardDescription.svelte +38 -38
  19. package/dist/components/core/card/shared/CardFavorite.svelte +33 -33
  20. package/dist/components/core/card/shared/CardStarRating.svelte +20 -20
  21. package/dist/components/core/card/shared/CardStartPrice.svelte +34 -34
  22. package/dist/components/core/card/shared/CardTags.svelte +73 -73
  23. package/dist/components/core/card/shared/CardThumbnailVideo.svelte +169 -169
  24. package/dist/components/core/card/shared/TruncatableText.svelte +55 -55
  25. package/dist/components/core/carousel/badge/ui/CarouselBadge.svelte +82 -83
  26. package/dist/components/core/carousel/hero/CarouselHero.svelte +158 -158
  27. package/dist/components/core/carousel/highlights/ui/CarouselHighlights.svelte +63 -63
  28. package/dist/components/core/carousel/promotion/ui/CarouselPromotion.svelte +64 -64
  29. package/dist/components/core/carousel/shared/ui/CarouselHeader.svelte +55 -55
  30. package/dist/components/core/datatable/ui/DataTableActions.svelte +28 -28
  31. package/dist/components/core/datatable/ui/DataTableCheckbox.svelte +22 -22
  32. package/dist/components/core/datatable/ui/DataTableContent.svelte +59 -59
  33. package/dist/components/core/datatable/ui/DataTableCore.svelte +151 -151
  34. package/dist/components/core/datatable/ui/DataTableDragHandle.svelte +8 -8
  35. package/dist/components/core/datatable/ui/DataTableListFilter.svelte +59 -59
  36. package/dist/components/core/datatable/ui/DataTableListPagination.svelte +35 -35
  37. package/dist/components/core/form/ui/input-base.svelte +81 -81
  38. package/dist/components/core/form/ui/input-email-or-phone.svelte +23 -23
  39. package/dist/components/core/form/ui/input-email.svelte +23 -23
  40. package/dist/components/core/form/ui/input-password-confirm.svelte +23 -23
  41. package/dist/components/core/form/ui/input-password.svelte +23 -23
  42. package/dist/components/core/form/ui/input-phone.svelte +33 -33
  43. package/dist/components/core/form/ui/input-username.svelte +22 -22
  44. package/dist/components/core/hero/SimpleHero.svelte +65 -65
  45. package/dist/components/core/label/LabelOr.svelte +25 -25
  46. package/dist/components/core/link/link-forget-password.svelte +12 -12
  47. package/dist/components/core/link/link-privacy-polity.svelte +12 -12
  48. package/dist/components/core/link/link-terms-of-service.svelte +12 -12
  49. package/dist/components/core/nav/ui/menu-links.svelte +27 -27
  50. package/dist/components/core/nav/ui/mobile/nav-menu-drawer.svelte +85 -85
  51. package/dist/components/core/nav/ui/nav-menu-bottom-sidebar.svelte +33 -33
  52. package/dist/components/core/nav/ui/nav-menu-sidebar.svelte +97 -97
  53. package/dist/components/core/nav/ui/nav-menu-top-bar-sidebar.svelte +103 -103
  54. package/dist/components/core/nav/ui/nav-menu.svelte +106 -106
  55. package/dist/components/core/panel/CarouselSlot.svelte +63 -63
  56. package/dist/components/core/panel/LeftHero.svelte +116 -116
  57. package/dist/components/core/search/SearchInput.svelte +32 -32
  58. package/dist/components/core/search/shared/SearchInputCore.svelte +66 -66
  59. package/dist/components/core/sidebar/MenuBarSidebar.svelte +70 -70
  60. package/dist/components/core/tabs/ui/tab-underline.svelte +43 -43
  61. package/dist/components/pages/admin/01/ui/AdminContent.svelte +14 -14
  62. package/dist/components/pages/admin/01/ui/AdminPanel.svelte +46 -46
  63. package/dist/components/pages/security/login/01/ui/FormRegister.svelte +28 -28
  64. package/dist/components/pages/security/login/01/ui/LoginCard.svelte +107 -107
  65. package/dist/components/pages/security/login/PageLogin.svelte +22 -22
  66. package/dist/components/ui/badge/badge.svelte +49 -49
  67. package/dist/components/ui/button/button.svelte +82 -82
  68. package/dist/components/ui/chart/chart-container.svelte +80 -80
  69. package/dist/components/ui/chart/chart-style.svelte +37 -37
  70. package/dist/components/ui/chart/chart-tooltip.svelte +184 -184
  71. package/dist/components/ui/checkbox/checkbox.svelte +40 -40
  72. package/dist/components/ui/data-table/flex-render.svelte +40 -40
  73. package/dist/components/ui/drawer/drawer-close.svelte +7 -7
  74. package/dist/components/ui/drawer/drawer-content.svelte +33 -33
  75. package/dist/components/ui/drawer/drawer-description.svelte +17 -17
  76. package/dist/components/ui/drawer/drawer-footer.svelte +20 -20
  77. package/dist/components/ui/drawer/drawer-header.svelte +20 -20
  78. package/dist/components/ui/drawer/drawer-nested.svelte +12 -12
  79. package/dist/components/ui/drawer/drawer-overlay.svelte +17 -17
  80. package/dist/components/ui/drawer/drawer-portal.svelte +7 -7
  81. package/dist/components/ui/drawer/drawer-title.svelte +17 -17
  82. package/dist/components/ui/drawer/drawer-trigger.svelte +7 -7
  83. package/dist/components/ui/drawer/drawer.svelte +12 -12
  84. package/dist/components/ui/select/select-content.svelte +45 -45
  85. package/dist/components/ui/select/select-group-heading.svelte +21 -21
  86. package/dist/components/ui/select/select-group.svelte +17 -17
  87. package/dist/components/ui/select/select-item.svelte +41 -41
  88. package/dist/components/ui/select/select-label.svelte +20 -20
  89. package/dist/components/ui/select/select-portal.svelte +7 -7
  90. package/dist/components/ui/select/select-scroll-down-button.svelte +21 -21
  91. package/dist/components/ui/select/select-scroll-up-button.svelte +21 -21
  92. package/dist/components/ui/select/select-separator.svelte +18 -18
  93. package/dist/components/ui/select/select-trigger.svelte +30 -30
  94. package/dist/components/ui/select/select.svelte +11 -11
  95. package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +39 -39
  96. package/dist/components/ui/star-rating/star-rating-star.svelte +41 -41
  97. package/dist/components/ui/star-rating/star-rating.svelte +20 -20
  98. package/dist/components/ui/table/table-body.svelte +15 -15
  99. package/dist/components/ui/table/table-caption.svelte +20 -20
  100. package/dist/components/ui/table/table-cell.svelte +15 -15
  101. package/dist/components/ui/table/table-footer.svelte +20 -20
  102. package/dist/components/ui/table/table-head.svelte +15 -15
  103. package/dist/components/ui/table/table-header.svelte +20 -20
  104. package/dist/components/ui/table/table-row.svelte +15 -15
  105. package/dist/components/ui/table/table.svelte +17 -17
  106. package/dist/components/ui/tabs/tabs-content.svelte +17 -17
  107. package/dist/components/ui/tabs/tabs-list.svelte +40 -40
  108. package/dist/components/ui/tabs/tabs-trigger.svelte +23 -23
  109. package/dist/components/ui/tabs/tabs.svelte +19 -19
  110. package/dist/globals.css +3 -0
  111. package/dist/styles/globals.css +149 -149
  112. package/package.json +113 -113
@@ -1,63 +1,63 @@
1
- <script lang="ts">
2
- import * as Carousel from "../../ui/carousel/index.js";
3
- import type { Snippet } from "svelte";
4
- import type { CarouselPlugins } from "../../ui/carousel/context.js";
5
-
6
- type Props = {
7
- positionButtonPreviousAndNext?: "center" | "top_right";
8
- buttonPreviousAndNextClass?: string;
9
- isButtonPreviousAndNext?: boolean;
10
- isBorderBottom?: boolean;
11
- containerClass?: string;
12
- plugins?: CarouselPlugins;
13
- children: Snippet;
14
- };
15
-
16
- const {
17
- positionButtonPreviousAndNext = "center",
18
- isButtonPreviousAndNext = true,
19
- buttonPreviousAndNextClass = "",
20
- isBorderBottom = true,
21
- containerClass = "",
22
- plugins = [],
23
- children,
24
- }: Props = $props();
25
-
26
- const styleTopCenter = "bg-blue-700! text-white! cursor-pointer!";
27
- const styleCenter =
28
- "absolute top-1/2 -translate-y-1/2 mt-0.5 mr-0 z-50 bg-blue-700! text-white! cursor-pointer!";
29
- </script>
30
-
31
- <div
32
- class={`relative py-3 px-2 ${isBorderBottom ? "border-b" : ""} ${containerClass}`}
33
- >
34
- <Carousel.Root {plugins}>
35
- <Carousel.Content
36
- class={positionButtonPreviousAndNext == "top_right" ? "" : "ml-0"}
37
- >
38
- {@render children()}
39
- </Carousel.Content>
40
- {#if positionButtonPreviousAndNext == "center"}
41
- {#if isButtonPreviousAndNext}
42
- <Carousel.Previous
43
- class={`-left-8 ${styleCenter} ${buttonPreviousAndNextClass}`}
44
- />
45
- <Carousel.Next
46
- class={`-right-8 ${styleCenter} ${buttonPreviousAndNextClass}`}
47
- />
48
- {/if}
49
- {/if}
50
- {#if positionButtonPreviousAndNext == "top_right"}
51
- {#if isButtonPreviousAndNext}
52
- <div class="absolute -top-6 right-10 md:right-10 lg:right-12 z-20">
53
- <Carousel.Previous
54
- class={`${styleTopCenter} ${buttonPreviousAndNextClass}`}
55
- />
56
- <Carousel.Next
57
- class={`${styleTopCenter} ${buttonPreviousAndNextClass}`}
58
- />
59
- </div>
60
- {/if}
61
- {/if}
62
- </Carousel.Root>
63
- </div>
1
+ <script lang="ts">
2
+ import * as Carousel from "../../ui/carousel/index.js";
3
+ import type { Snippet } from "svelte";
4
+ import type { CarouselPlugins } from "../../ui/carousel/context.js";
5
+
6
+ type Props = {
7
+ positionButtonPreviousAndNext?: "center" | "top_right";
8
+ buttonPreviousAndNextClass?: string;
9
+ isButtonPreviousAndNext?: boolean;
10
+ isBorderBottom?: boolean;
11
+ containerClass?: string;
12
+ plugins?: CarouselPlugins;
13
+ children: Snippet;
14
+ };
15
+
16
+ const {
17
+ positionButtonPreviousAndNext = "center",
18
+ isButtonPreviousAndNext = true,
19
+ buttonPreviousAndNextClass = "",
20
+ isBorderBottom = true,
21
+ containerClass = "",
22
+ plugins = [],
23
+ children,
24
+ }: Props = $props();
25
+
26
+ const styleTopCenter = "bg-blue-700! text-white! cursor-pointer!";
27
+ const styleCenter =
28
+ "absolute top-1/2 -translate-y-1/2 mt-0.5 mr-0 z-50 bg-blue-700! text-white! cursor-pointer!";
29
+ </script>
30
+
31
+ <div
32
+ class={`relative py-3 px-2 ${isBorderBottom ? "border-b" : ""} ${containerClass}`}
33
+ >
34
+ <Carousel.Root {plugins}>
35
+ <Carousel.Content
36
+ class={positionButtonPreviousAndNext == "top_right" ? "" : "ml-0"}
37
+ >
38
+ {@render children()}
39
+ </Carousel.Content>
40
+ {#if positionButtonPreviousAndNext == "center"}
41
+ {#if isButtonPreviousAndNext}
42
+ <Carousel.Previous
43
+ class={`-left-8 ${styleCenter} ${buttonPreviousAndNextClass}`}
44
+ />
45
+ <Carousel.Next
46
+ class={`-right-8 ${styleCenter} ${buttonPreviousAndNextClass}`}
47
+ />
48
+ {/if}
49
+ {/if}
50
+ {#if positionButtonPreviousAndNext == "top_right"}
51
+ {#if isButtonPreviousAndNext}
52
+ <div class="absolute -top-6 right-10 md:right-10 lg:right-12 z-20">
53
+ <Carousel.Previous
54
+ class={`${styleTopCenter} ${buttonPreviousAndNextClass}`}
55
+ />
56
+ <Carousel.Next
57
+ class={`${styleTopCenter} ${buttonPreviousAndNextClass}`}
58
+ />
59
+ </div>
60
+ {/if}
61
+ {/if}
62
+ </Carousel.Root>
63
+ </div>
@@ -1,117 +1,117 @@
1
- <script lang="ts">
2
- import { HugeiconsIcon } from "@hugeicons/svelte";
3
- import { ArrowRight01Icon } from "@hugeicons/core-free-icons";
1
+ <script lang="ts">
2
+ import { HugeiconsIcon } from "@hugeicons/svelte";
3
+ import { ArrowRight01Icon } from "@hugeicons/core-free-icons";
4
4
  import type { LoginCarouselProps } from "../../pages/security/login/types";
5
- import type { Snippet } from "svelte";
6
- import Button from "../../ui/button/button.svelte";
7
- import { t } from "../../../i18n";
8
- import Logo from "../../../assets/login-01-admin.webp";
9
-
10
- type Props = {
11
- title?: string | Snippet;
12
- variant?: "NUMBER" | "DOT";
13
- autoPlayInterval?: number;
14
- };
15
-
16
- let {
17
- title,
18
- items = [],
19
- variant = "DOT",
20
- autoPlayInterval = 5000,
21
- }: Props & LoginCarouselProps = $props();
22
-
23
- let currentIndex = $state(0);
24
- let currentItem = $derived(items[currentIndex] ?? items[0]);
25
-
26
- function goTo(index: number) {
27
- currentIndex = index;
28
- }
29
-
30
- function next() {
31
- if (items.length === 0) return;
32
- currentIndex = (currentIndex + 1) % items.length;
33
- }
34
-
35
- $effect(() => {
36
- if (items.length <= 1) return;
37
- const timer = setInterval(next, autoPlayInterval);
38
- return () => clearInterval(timer);
39
- });
40
- </script>
41
-
42
- <div
43
- class="relative flex flex-col justify-between overflow-hidden h-screen p-8 bg-gradient-left text-white"
44
- >
45
- <div class="flex items-center gap-2">
46
- <div class="font-bold text-xl tracking-wider flex items-center gap-2">
47
- {#if typeof title === "function"}
48
- {@render title()}
49
- {:else}
50
- {title || $t("label.welcome")}
51
- {/if}
52
- </div>
53
- </div>
54
-
55
- <section class="flex flex-col gap-5">
56
- <div class="my-auto max-w-sm md:max-w-md lg:max-w-100">
57
- {#if currentItem}
58
- {#key currentIndex}
59
- <div
60
- class="text-xl md:text-2xl font-bold tracking-tight mb-4 leading-tight animate-in fade-in duration-300"
61
- >
62
- {currentItem.title}
63
- </div>
64
- <p
65
- class=" text-sm mb-6 leading-relaxed animate-in fade-in duration-300"
66
- >
67
- {currentItem.description}
68
- </p>
69
- {/key}
70
- <Button
71
- variant="outline"
72
- class="inline-flex items-center gap-2 text-sm font-semibold bg-primary"
73
- >
74
- {currentItem.buttonText}
75
- <HugeiconsIcon icon={ArrowRight01Icon} size={16} />
76
- </Button>
77
- {/if}
78
- </div>
79
-
80
- <div class="flex items-center gap-2 mb-2">
81
- {#each items as it, i (it.title)}
82
- <button
83
- type="button"
84
- onclick={() => goTo(i)}
85
- aria-label={`Ir para o item ${i + 1}`}
86
- aria-current={currentIndex === i}
87
- class="transition-all duration-300 focus:outline-none flex items-center justify-center {currentIndex ===
88
- i
89
- ? 'opacity-100 scale-110'
90
- : 'opacity-50 hover:opacity-75'}"
91
- >
92
- {#if variant === "NUMBER"}
93
- <span
94
- class="w-6 h-6 text-xs font-semibold rounded-full text-primary flex items-center justify-center"
95
- >
96
- {i + 1}
97
- </span>
98
- {:else}
99
- <span class="w-2 h-2 rounded-full bg-white"></span>
100
- {/if}
101
- </button>
102
- {/each}
103
- </div>
104
- </section>
105
-
106
- <aside
107
- class="hidden z-50 lg:block lg:absolute lg:right-0 lg:-bottom-3 lg:w-105 lg:h-105"
108
- >
109
- <img
110
- src={Logo}
111
- alt=""
112
- class="shadow rounded-tl-lg rounded-bl-lg lg:w-105 lg:h-105"
113
- />
114
- </aside>
115
- </div>
116
-
117
- <aside class="absolute grid-pattern p-0 top-0 h-screen w-8/12"></aside>
5
+ import type { Snippet } from "svelte";
6
+ import Button from "../../ui/button/button.svelte";
7
+ import { t } from "../../../i18n";
8
+ import Logo from "../../../assets/login-01-admin.webp";
9
+
10
+ type Props = {
11
+ title?: string | Snippet;
12
+ variant?: "NUMBER" | "DOT";
13
+ autoPlayInterval?: number;
14
+ };
15
+
16
+ let {
17
+ title,
18
+ items = [],
19
+ variant = "DOT",
20
+ autoPlayInterval = 5000,
21
+ }: Props & LoginCarouselProps = $props();
22
+
23
+ let currentIndex = $state(0);
24
+ let currentItem = $derived(items[currentIndex] ?? items[0]);
25
+
26
+ function goTo(index: number) {
27
+ currentIndex = index;
28
+ }
29
+
30
+ function next() {
31
+ if (items.length === 0) return;
32
+ currentIndex = (currentIndex + 1) % items.length;
33
+ }
34
+
35
+ $effect(() => {
36
+ if (items.length <= 1) return;
37
+ const timer = setInterval(next, autoPlayInterval);
38
+ return () => clearInterval(timer);
39
+ });
40
+ </script>
41
+
42
+ <div
43
+ class="relative flex flex-col justify-between overflow-hidden h-screen p-8 bg-gradient-left text-white"
44
+ >
45
+ <div class="flex items-center gap-2">
46
+ <div class="font-bold text-xl tracking-wider flex items-center gap-2">
47
+ {#if typeof title === "function"}
48
+ {@render title()}
49
+ {:else}
50
+ {title || $t("label.welcome")}
51
+ {/if}
52
+ </div>
53
+ </div>
54
+
55
+ <section class="flex flex-col gap-5">
56
+ <div class="my-auto max-w-sm md:max-w-md lg:max-w-100">
57
+ {#if currentItem}
58
+ {#key currentIndex}
59
+ <div
60
+ class="text-xl md:text-2xl font-bold tracking-tight mb-4 leading-tight animate-in fade-in duration-300"
61
+ >
62
+ {currentItem.title}
63
+ </div>
64
+ <p
65
+ class=" text-sm mb-6 leading-relaxed animate-in fade-in duration-300"
66
+ >
67
+ {currentItem.description}
68
+ </p>
69
+ {/key}
70
+ <Button
71
+ variant="outline"
72
+ class="inline-flex items-center gap-2 text-sm font-semibold bg-primary"
73
+ >
74
+ {currentItem.buttonText}
75
+ <HugeiconsIcon icon={ArrowRight01Icon} size={16} />
76
+ </Button>
77
+ {/if}
78
+ </div>
79
+
80
+ <div class="flex items-center gap-2 mb-2">
81
+ {#each items as it, i (it.title)}
82
+ <button
83
+ type="button"
84
+ onclick={() => goTo(i)}
85
+ aria-label={`Ir para o item ${i + 1}`}
86
+ aria-current={currentIndex === i}
87
+ class="transition-all duration-300 focus:outline-none flex items-center justify-center {currentIndex ===
88
+ i
89
+ ? 'opacity-100 scale-110'
90
+ : 'opacity-50 hover:opacity-75'}"
91
+ >
92
+ {#if variant === "NUMBER"}
93
+ <span
94
+ class="w-6 h-6 text-xs font-semibold rounded-full text-primary flex items-center justify-center"
95
+ >
96
+ {i + 1}
97
+ </span>
98
+ {:else}
99
+ <span class="w-2 h-2 rounded-full bg-white"></span>
100
+ {/if}
101
+ </button>
102
+ {/each}
103
+ </div>
104
+ </section>
105
+
106
+ <aside
107
+ class="hidden z-50 lg:block lg:absolute lg:right-0 lg:-bottom-3 lg:w-105 lg:h-105"
108
+ >
109
+ <img
110
+ src={Logo}
111
+ alt=""
112
+ class="shadow rounded-tl-lg rounded-bl-lg lg:w-105 lg:h-105"
113
+ />
114
+ </aside>
115
+ </div>
116
+
117
+ <aside class="absolute grid-pattern p-0 top-0 h-screen w-8/12"></aside>
@@ -1,32 +1,32 @@
1
- <script lang="ts" module>
2
- /**
3
- * Main Privacy Policy / Terms of Use component.
4
- * Allows choosing between two layout variants:
5
- * - **1**: Three-column layout with sidebar, content, and TOC (scroll-spy).
6
- * - **2**: Simple layout with colored hero and centered content.
7
- *
8
- * @component
9
- * @example
10
- * ```svelte
11
- * <!-- Variant 1 (default) — docs layout with sidebar -->
12
- * <PrivacyPolicyOrTermsOfUse variant={1} data={pageData} />
13
- *
14
- * <!-- Variant 2 — layout with hero -->
15
- * <PrivacyPolicyOrTermsOfUse variant={2} data={pageData} />
16
- * ```
17
- */
18
- </script>
19
-
20
- <script lang="ts">
21
- import Search01 from "./01/Search01.svelte";
22
- import Search02 from "./02/Search02.svelte";
23
- import type { SearchInputProps } from "./types";
24
-
25
- let { variant = 1, ...restProps }: SearchInputProps = $props();
26
- </script>
27
-
28
- {#if variant === 2}
29
- <Search02 {...restProps} />
30
- {:else}
31
- <Search01 {...restProps} />
32
- {/if}
1
+ <script lang="ts" module>
2
+ /**
3
+ * Main Privacy Policy / Terms of Use component.
4
+ * Allows choosing between two layout variants:
5
+ * - **1**: Three-column layout with sidebar, content, and TOC (scroll-spy).
6
+ * - **2**: Simple layout with colored hero and centered content.
7
+ *
8
+ * @component
9
+ * @example
10
+ * ```svelte
11
+ * <!-- Variant 1 (default) — docs layout with sidebar -->
12
+ * <PrivacyPolicyOrTermsOfUse variant={1} data={pageData} />
13
+ *
14
+ * <!-- Variant 2 — layout with hero -->
15
+ * <PrivacyPolicyOrTermsOfUse variant={2} data={pageData} />
16
+ * ```
17
+ */
18
+ </script>
19
+
20
+ <script lang="ts">
21
+ import Search01 from "./01/Search01.svelte";
22
+ import Search02 from "./02/Search02.svelte";
23
+ import type { SearchInputProps } from "./types";
24
+
25
+ let { variant = 1, ...restProps }: SearchInputProps = $props();
26
+ </script>
27
+
28
+ {#if variant === 2}
29
+ <Search02 {...restProps} />
30
+ {:else}
31
+ <Search01 {...restProps} />
32
+ {/if}
@@ -1,66 +1,66 @@
1
- <script lang="ts" module>
2
- /**
3
- * Reusable search input component used by Search01 and Search02.
4
- * Renders a text input with a search icon and submit button.
5
- * @component
6
- */
7
- </script>
8
-
9
- <script lang="ts">
10
- import { HugeiconsIcon } from "@hugeicons/svelte";
11
- import { Search01Icon } from "@hugeicons/core-free-icons";
12
- import Button from "../../../ui/button/button.svelte";
13
- import { Separator } from "../../../ui/separator/index";
14
- import { t } from "../../../../i18n";
15
- import type { SearchInputProps } from "../types";
16
-
17
- let { onSubmit, placeholder, variant = 1, buttonClass, inputClass, iconClass }: SearchInputProps = $props();
18
-
19
- let value = $state("");
20
-
21
- function handleKeydown(e: KeyboardEvent) {
22
- if (e.key === "Enter") onSubmit?.(value);
23
- }
24
- </script>
25
-
26
- <div class="container relative">
27
- <div
28
- class="mx-auto md:w-11/12 z-10 {variant === 2
29
- ? 'border-b'
30
- : 'border bg-input rounded-lg shadow'} m-auto"
31
- >
32
- <div class="flex items-center gap-2 py-1 px-2 w-full md:min-h-15">
33
- <div class="items-center gap-2 hidden md:flex">
34
- <HugeiconsIcon
35
- icon={Search01Icon}
36
- size={20}
37
- color="currentColor"
38
- strokeWidth={1.5}
39
- class={iconClass}
40
- />
41
- </div>
42
- <input
43
- type="search"
44
- bind:value
45
- onkeydown={handleKeydown}
46
- class="text-sm w-full bg-transparent border-none outline-none focus:outline-none focus:ring-0 focus:border-transparent {inputClass}"
47
- placeholder={placeholder || $t("label.search.placeholder")}
48
- />
49
- <div class="flex gap-1">
50
- <Separator class="w-full" orientation="vertical" />
51
- <Button
52
- onclick={() => onSubmit?.(value)}
53
- class={`flex justify-center items-center cursor-pointer ${buttonClass}`}
54
- >
55
- <HugeiconsIcon
56
- icon={Search01Icon}
57
- size={15}
58
- color="currentColor"
59
- strokeWidth={2}
60
- />
61
- <span class="hidden md:block">{$t("label.search")}</span>
62
- </Button>
63
- </div>
64
- </div>
65
- </div>
66
- </div>
1
+ <script lang="ts" module>
2
+ /**
3
+ * Reusable search input component used by Search01 and Search02.
4
+ * Renders a text input with a search icon and submit button.
5
+ * @component
6
+ */
7
+ </script>
8
+
9
+ <script lang="ts">
10
+ import { HugeiconsIcon } from "@hugeicons/svelte";
11
+ import { Search01Icon } from "@hugeicons/core-free-icons";
12
+ import Button from "../../../ui/button/button.svelte";
13
+ import { Separator } from "../../../ui/separator/index";
14
+ import { t } from "../../../../i18n";
15
+ import type { SearchInputProps } from "../types";
16
+
17
+ let { onSubmit, placeholder, variant = 1, buttonClass, inputClass, iconClass }: SearchInputProps = $props();
18
+
19
+ let value = $state("");
20
+
21
+ function handleKeydown(e: KeyboardEvent) {
22
+ if (e.key === "Enter") onSubmit?.(value);
23
+ }
24
+ </script>
25
+
26
+ <div class="container relative">
27
+ <div
28
+ class="mx-auto md:w-11/12 z-10 {variant === 2
29
+ ? 'border-b'
30
+ : 'border bg-input rounded-lg shadow'} m-auto"
31
+ >
32
+ <div class="flex items-center gap-2 py-1 px-2 w-full md:min-h-15">
33
+ <div class="items-center gap-2 hidden md:flex">
34
+ <HugeiconsIcon
35
+ icon={Search01Icon}
36
+ size={20}
37
+ color="currentColor"
38
+ strokeWidth={1.5}
39
+ class={iconClass}
40
+ />
41
+ </div>
42
+ <input
43
+ type="search"
44
+ bind:value
45
+ onkeydown={handleKeydown}
46
+ class="text-sm w-full bg-transparent border-none outline-none focus:outline-none focus:ring-0 focus:border-transparent {inputClass}"
47
+ placeholder={placeholder || $t("label.search.placeholder")}
48
+ />
49
+ <div class="flex gap-1">
50
+ <Separator class="w-full" orientation="vertical" />
51
+ <Button
52
+ onclick={() => onSubmit?.(value)}
53
+ class={`flex justify-center items-center cursor-pointer ${buttonClass}`}
54
+ >
55
+ <HugeiconsIcon
56
+ icon={Search01Icon}
57
+ size={15}
58
+ color="currentColor"
59
+ strokeWidth={2}
60
+ />
61
+ <span class="hidden md:block">{$t("label.search")}</span>
62
+ </Button>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </div>