negodesign 0.0.77 → 0.0.79
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/README.md +133 -133
- package/dist/components/NegoDesign.svelte +21 -21
- package/dist/components/pages/admin/01/ui/AdminContent.svelte +14 -14
- package/dist/components/pages/admin/01/ui/AdminPanel.svelte +46 -46
- package/dist/components/pages/product-details/shared/ProductDetailFilesVertical.svelte +103 -103
- package/dist/components/pages/profile-user/shared/ProfileUserAddress.svelte +83 -83
- package/dist/components/pages/profile-user/shared/ProfileUserTabs.svelte +80 -80
- package/dist/components/pages/security/auth/PageAuth01.svelte +21 -24
- package/dist/components/pages/security/auth/PageAuth02.svelte +11 -16
- package/dist/components/pages/security/auth/PageAuth03.svelte +11 -16
- package/dist/components/pages/security/login/01/ui/FormLogin.svelte +7 -5
- package/dist/components/pages/security/login/01/ui/FormLogin.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/01/ui/FormLoginEmailPassword.svelte +4 -2
- package/dist/components/pages/security/login/01/ui/FormLoginEmailPassword.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/01/ui/FormLoginPhonePassword.svelte +4 -2
- package/dist/components/pages/security/login/01/ui/FormLoginPhonePassword.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/01/ui/FormLoginUsernamePassword.svelte +4 -2
- package/dist/components/pages/security/login/01/ui/FormLoginUsernamePassword.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/01/ui/{LoginCard.svelte → LoginCard01.svelte} +132 -109
- package/dist/components/pages/security/login/01/ui/{LoginCard.svelte.d.ts → LoginCard01.svelte.d.ts} +3 -3
- package/dist/components/pages/security/login/01/ui/PageLogin01.svelte +2 -2
- package/dist/components/pages/security/login/02/ui/FormLogin02.svelte +7 -5
- package/dist/components/pages/security/login/02/ui/FormLogin02.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/02/ui/FormLoginEmailPassword02.svelte +4 -2
- package/dist/components/pages/security/login/02/ui/FormLoginEmailPassword02.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/02/ui/FormLoginPhonePassword02.svelte +4 -2
- package/dist/components/pages/security/login/02/ui/FormLoginPhonePassword02.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/02/ui/FormLoginUsernamePassword02.svelte +4 -2
- package/dist/components/pages/security/login/02/ui/FormLoginUsernamePassword02.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/03/ui/FormLogin03.svelte +8 -4
- package/dist/components/pages/security/login/03/ui/FormLogin03.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/03/ui/FormLoginEmailPassword03.svelte +4 -2
- package/dist/components/pages/security/login/03/ui/FormLoginEmailPassword03.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/03/ui/FormLoginPhonePassword03.svelte +4 -2
- package/dist/components/pages/security/login/03/ui/FormLoginPhonePassword03.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/03/ui/FormLoginUsernamePassword03.svelte +4 -2
- package/dist/components/pages/security/login/03/ui/FormLoginUsernamePassword03.svelte.d.ts +2 -0
- package/dist/components/pages/security/login/PageLogin.svelte +30 -30
- package/dist/components/pages/security/register/01/ui/PageRegister01.svelte +21 -9
- package/dist/components/pages/security/register/01/ui/PageRegister01.svelte.d.ts +1 -0
- package/dist/components/pages/security/register/01/ui/{RegisterCard.svelte → RegisterCard01.svelte} +26 -22
- package/dist/components/pages/security/register/01/ui/{RegisterCard.svelte.d.ts → RegisterCard01.svelte.d.ts} +3 -3
- package/dist/components/pages/security/register/FormRegister.svelte +40 -14
- package/dist/components/pages/security/register/FormRegister.svelte.d.ts +3 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte +29 -29
- package/dist/components/ui/avatar/avatar-image.svelte +38 -38
- package/dist/components/ui/avatar/avatar.svelte +39 -39
- package/dist/components/ui/badge/badge.svelte +46 -46
- package/dist/components/ui/banner/AdCardBanner.svelte +74 -74
- package/dist/components/ui/banner/CtaCardBanner.svelte +118 -118
- package/dist/components/ui/banner/CtaCardImageBanner.svelte +94 -94
- package/dist/components/ui/breadcrumb/core/breadcrumb-list.svelte +31 -31
- package/dist/components/ui/button/ButtonBack.svelte +18 -18
- package/dist/components/ui/button/ButtonLogin.svelte +15 -15
- package/dist/components/ui/button/ButtonLoginWith.svelte +57 -57
- package/dist/components/ui/button/ButtonSend.svelte +15 -15
- package/dist/components/ui/button/button.svelte +85 -85
- package/dist/components/ui/card/core/highlight/01/CardHighlight01.svelte +103 -103
- package/dist/components/ui/card/core/highlight/02/CardHighlight02.svelte +99 -99
- package/dist/components/ui/card/core/highlight/CardHighlight.svelte +22 -22
- package/dist/components/ui/card/core/media/01/CardMedia01.svelte +133 -133
- package/dist/components/ui/card/core/media/02/CardMedia02.svelte +127 -127
- package/dist/components/ui/card/core/media/CardMedia.svelte +18 -18
- package/dist/components/ui/card/core/product/01/CardProduct01.svelte +136 -136
- package/dist/components/ui/card/core/product/02/CardProduct02.svelte +124 -124
- package/dist/components/ui/card/core/product/CardProduct.svelte +22 -22
- package/dist/components/ui/card/core/profile/01/CardProfile01.svelte +134 -134
- package/dist/components/ui/card/core/profile/02/CardProfile02.svelte +132 -132
- package/dist/components/ui/card/core/profile/CardProfile.svelte +18 -18
- package/dist/components/ui/card/core/promotion/CardPromotion.svelte +139 -139
- package/dist/components/ui/card/core/promotion/CardPromotionPrice.svelte +32 -32
- package/dist/components/ui/card/core/shared/CardButton.svelte +42 -42
- package/dist/components/ui/card/core/shared/CardCart.svelte +36 -36
- package/dist/components/ui/card/core/shared/CardDescription.svelte +41 -41
- package/dist/components/ui/card/core/shared/CardFavorite.svelte +33 -33
- package/dist/components/ui/card/core/shared/CardLogo.svelte +19 -19
- package/dist/components/ui/card/core/shared/CardPhoneOrWhatsapp.svelte +45 -45
- package/dist/components/ui/card/core/shared/CardStarRating.svelte +24 -24
- package/dist/components/ui/card/core/shared/CardTags.svelte +95 -95
- package/dist/components/ui/card/core/shared/CardThumbnailVideo.svelte +232 -232
- package/dist/components/ui/card/core/shared/CardTitlePrice.svelte +24 -24
- package/dist/components/ui/card/core/shared/TruncatableText.svelte +49 -49
- package/dist/components/ui/carousel/carousel-content.svelte +56 -56
- package/dist/components/ui/carousel/carousel-item.svelte +29 -29
- package/dist/components/ui/carousel/carousel-next.svelte +40 -40
- package/dist/components/ui/carousel/carousel-previous.svelte +40 -40
- package/dist/components/ui/carousel/carousel.svelte +225 -225
- package/dist/components/ui/carousel/core/badge/ui/CarouselBadge.svelte +108 -108
- package/dist/components/ui/carousel/core/grid/shared/ui/CarouselGridSlot.svelte +38 -38
- package/dist/components/ui/carousel/core/hero/ui/CarouselHero.svelte +181 -181
- package/dist/components/ui/carousel/core/highlights/ui/CarouselHighlights.svelte +67 -67
- package/dist/components/ui/carousel/core/product/ui/CarouselProduct.svelte +57 -57
- package/dist/components/ui/carousel/core/promotion/ui/CarouselPromotion.svelte +67 -67
- package/dist/components/ui/carousel/core/shared/ui/CarouselHeader.svelte +59 -59
- package/dist/components/ui/checkbox/checkbox.svelte +96 -96
- package/dist/components/ui/collapsible/collapsible-content.svelte +30 -30
- package/dist/components/ui/collapsible/collapsible-trigger.svelte +51 -51
- package/dist/components/ui/collapsible/collapsible.svelte +66 -66
- package/dist/components/ui/data-table/flex-render.svelte +40 -40
- package/dist/components/ui/datatable/ui/DataTableActions.svelte +28 -28
- package/dist/components/ui/datatable/ui/DataTableCheckbox.svelte +22 -22
- package/dist/components/ui/datatable/ui/DataTableContent.svelte +59 -59
- package/dist/components/ui/datatable/ui/DataTableCore.svelte +148 -148
- package/dist/components/ui/datatable/ui/DataTableDragHandle.svelte +8 -8
- package/dist/components/ui/datatable/ui/DataTableListFilter.svelte +60 -60
- package/dist/components/ui/datatable/ui/DataTableListPagination.svelte +35 -35
- package/dist/components/ui/drawer/drawer-close.svelte +41 -41
- package/dist/components/ui/drawer/drawer-content.svelte +81 -81
- package/dist/components/ui/drawer/drawer-description.svelte +19 -19
- package/dist/components/ui/drawer/drawer-footer.svelte +20 -20
- package/dist/components/ui/drawer/drawer-header.svelte +20 -20
- package/dist/components/ui/drawer/drawer-nested.svelte +34 -34
- package/dist/components/ui/drawer/drawer-overlay.svelte +25 -25
- package/dist/components/ui/drawer/drawer-portal.svelte +19 -19
- package/dist/components/ui/drawer/drawer-title.svelte +19 -19
- package/dist/components/ui/drawer/drawer-trigger.svelte +42 -42
- package/dist/components/ui/drawer/drawer.svelte +74 -74
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +25 -25
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +69 -69
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +106 -106
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +27 -27
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +21 -21
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +60 -60
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +27 -27
- package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +6 -6
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +43 -43
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +70 -70
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +20 -20
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +33 -33
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +57 -57
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +76 -76
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +68 -68
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +53 -53
- package/dist/components/ui/empty/empty-content.svelte +19 -19
- package/dist/components/ui/empty/empty-description.svelte +19 -19
- package/dist/components/ui/empty/empty-header.svelte +19 -19
- package/dist/components/ui/empty/empty-media.svelte +41 -41
- package/dist/components/ui/empty/empty-title.svelte +19 -19
- package/dist/components/ui/empty/empty.svelte +19 -19
- package/dist/components/ui/footer/ui/Footer.svelte +18 -18
- package/dist/components/ui/form/data/InputIconDefault.svelte.js +2 -1
- package/dist/components/ui/form/data/InputLabel.svelte.d.ts +3 -0
- package/dist/components/ui/form/ui/calendar/Calendar.svelte +194 -0
- package/dist/components/ui/form/ui/calendar/Calendar.svelte.d.ts +15 -0
- package/dist/components/ui/form/ui/calendar/CalendarCard.svelte +90 -0
- package/dist/components/ui/form/ui/calendar/CalendarCard.svelte.d.ts +20 -0
- package/dist/components/ui/form/ui/calendar/DaysGrid.svelte +76 -0
- package/dist/components/ui/form/ui/calendar/DaysGrid.svelte.d.ts +17 -0
- package/dist/components/ui/form/ui/calendar/MonthSelect.svelte +50 -0
- package/dist/components/ui/form/ui/calendar/MonthSelect.svelte.d.ts +10 -0
- package/dist/components/ui/form/ui/calendar/YearSelect.svelte +117 -0
- package/dist/components/ui/form/ui/calendar/YearSelect.svelte.d.ts +15 -0
- package/dist/components/ui/form/ui/calendar/index.d.ts +5 -0
- package/dist/components/ui/form/ui/calendar/index.js +5 -0
- package/dist/components/ui/form/ui/calendar/utils.d.ts +26 -0
- package/dist/components/ui/form/ui/calendar/utils.js +89 -0
- package/dist/components/ui/form/ui/input-base.svelte +83 -81
- package/dist/components/ui/form/ui/input-calendar-interval.svelte +179 -0
- package/dist/components/ui/form/ui/input-calendar-interval.svelte.d.ts +14 -0
- package/dist/components/ui/form/ui/input-calendar.svelte +110 -0
- package/dist/components/ui/form/ui/input-calendar.svelte.d.ts +9 -0
- package/dist/components/ui/form/ui/input-email-or-phone.svelte +23 -23
- package/dist/components/ui/form/ui/input-email.svelte +23 -23
- package/dist/components/ui/form/ui/input-password-confirm.svelte +23 -23
- package/dist/components/ui/form/ui/input-password.svelte +23 -23
- package/dist/components/ui/form/ui/input-phone.svelte +37 -33
- package/dist/components/ui/form/ui/input-select.svelte +210 -158
- package/dist/components/ui/form/ui/input-select.svelte.d.ts +5 -9
- package/dist/components/ui/form/ui/input-username.svelte +22 -22
- package/dist/components/ui/grid/core/ui/01/Grid01.svelte +30 -30
- package/dist/components/ui/grid/core/ui/02/Grid02.svelte +30 -30
- package/dist/components/ui/grid/core/ui/ItemsPanel.svelte +26 -26
- package/dist/components/ui/grid/core/ui/ItemsPanelCarousel.svelte +37 -37
- package/dist/components/ui/grid/core/ui/ItemsPanelGrid.svelte +43 -43
- package/dist/components/ui/grid/core/ui/ItemsSimpleGrid.svelte +45 -45
- package/dist/components/ui/grid/core/ui/shared/DescriptionGrid.svelte +23 -23
- package/dist/components/ui/grid/core/ui/shared/IconRenderGrid.svelte +23 -23
- package/dist/components/ui/grid/core/ui/shared/TitleGrid.svelte +19 -19
- package/dist/components/ui/hero/SimpleHero.svelte +65 -65
- package/dist/components/ui/input-otp/input-otp-group.svelte +22 -22
- package/dist/components/ui/input-otp/input-otp-separator.svelte +27 -27
- package/dist/components/ui/input-otp/input-otp-slot.svelte +63 -63
- package/dist/components/ui/input-otp/input-otp.svelte +181 -181
- package/dist/components/ui/label/core/LabelOr.svelte +25 -25
- package/dist/components/ui/label/label.svelte +19 -19
- package/dist/components/ui/language-switcher/language-switcher.svelte +48 -48
- package/dist/components/ui/light-switch/light-switch.svelte +48 -48
- package/dist/components/ui/link/link-forget-password.svelte +12 -12
- package/dist/components/ui/link/link-privacy-polity.svelte +12 -12
- package/dist/components/ui/link/link-terms-of-service.svelte +12 -12
- package/dist/components/ui/modal/core/index.d.ts +1 -1
- package/dist/components/ui/modal/core/types.d.ts +2 -1
- package/dist/components/ui/modal/core/ui/ModalCore.svelte +132 -132
- package/dist/components/ui/modal/grid/types.d.ts +6 -5
- package/dist/components/ui/modal/grid/ui/02/ModalGridSelection02.svelte +146 -146
- package/dist/components/ui/modal/share/ui/ModalShareSelection.svelte +156 -156
- package/dist/components/ui/nav/ui/ComplexMenu.svelte +51 -51
- package/dist/components/ui/nav/ui/Menu.svelte +72 -72
- package/dist/components/ui/nav/ui/SimpleMenu.svelte +14 -14
- package/dist/components/ui/nav/ui/mobile/ComplexMenuMobile.svelte +125 -125
- package/dist/components/ui/nav/ui/mobile/MenuMobile.svelte +54 -54
- package/dist/components/ui/nav/ui/shared/MenuButton.svelte +51 -51
- package/dist/components/ui/nav/ui/shared/MenuLinks.svelte +40 -40
- package/dist/components/ui/nav/ui/shared/MenuListItem.svelte +44 -44
- package/dist/components/ui/nav/ui/shared/MenuLogo.svelte +13 -13
- package/dist/components/ui/nav/ui/shared/dropdown/DropdownNavigationMenuItemGrid.svelte +30 -30
- package/dist/components/ui/nav/ui/shared/navigation/NavDropdown.svelte +87 -87
- package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItem.svelte +17 -17
- package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItemCard.svelte +53 -53
- package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItemGrid.svelte +36 -36
- package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItemList.svelte +24 -24
- package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItems.svelte +21 -21
- package/dist/components/ui/panel/CarouselSlot.svelte +57 -57
- package/dist/components/ui/panel/LeftHero.svelte +114 -114
- package/dist/components/ui/panel/NotFoundEmpty.svelte +66 -66
- package/dist/components/ui/phone-input/country-selector.svelte +87 -87
- package/dist/components/ui/phone-input/country-selector.svelte.d.ts +2 -2
- package/dist/components/ui/phone-input/flag.svelte +11 -11
- package/dist/components/ui/phone-input/phone-input.svelte +163 -148
- package/dist/components/ui/phone-input/phone-input.svelte.d.ts +2 -2
- package/dist/components/ui/popover/popover-close.svelte +25 -25
- package/dist/components/ui/popover/popover-content.svelte +92 -92
- package/dist/components/ui/popover/popover-portal.svelte +6 -6
- package/dist/components/ui/popover/popover-trigger.svelte +68 -68
- package/dist/components/ui/popover/popover.svelte +53 -53
- package/dist/components/ui/search/SearchInput.svelte +32 -32
- package/dist/components/ui/search/shared/SearchInputCore.svelte +66 -66
- package/dist/components/ui/separator/separator.svelte +28 -28
- package/dist/components/ui/sidebar/core/MenuBarSidebar.svelte +70 -70
- package/dist/components/ui/sidebar/core/ui/navbar/NavMenuBarSidebar.svelte +97 -97
- package/dist/components/ui/sidebar/core/ui/navbar/NavMenuBottomSidebar.svelte +33 -33
- package/dist/components/ui/sidebar/core/ui/navbar/NavMenuTopBarSidebar.svelte +101 -101
- package/dist/components/ui/sidebar/core/ui/navbar/nav-menu-header-sidebar.svelte +77 -77
- package/dist/components/ui/sidebar/sidebar-content.svelte +24 -24
- package/dist/components/ui/sidebar/sidebar-footer.svelte +21 -21
- package/dist/components/ui/sidebar/sidebar-group-content.svelte +21 -21
- package/dist/components/ui/sidebar/sidebar-menu-action.svelte +38 -38
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte +70 -70
- package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +39 -39
- package/dist/components/ui/sidebar/sidebar-provider.svelte +62 -62
- package/dist/components/ui/sidebar/sidebar-rail.svelte +36 -36
- package/dist/components/ui/sidebar/sidebar-separator.svelte +21 -21
- package/dist/components/ui/sidebar/sidebar-trigger.svelte +36 -36
- package/dist/components/ui/sidebar/sidebar.svelte +118 -118
- package/dist/components/ui/skeleton/skeleton.svelte +19 -19
- package/dist/components/ui/star-rating/star-rating-star.svelte +66 -66
- package/dist/components/ui/star-rating/star-rating.svelte +149 -149
- package/dist/components/ui/table/table-body.svelte +15 -15
- package/dist/components/ui/table/table-caption.svelte +20 -20
- package/dist/components/ui/table/table-cell.svelte +15 -15
- package/dist/components/ui/table/table-footer.svelte +20 -20
- package/dist/components/ui/table/table-head.svelte +15 -15
- package/dist/components/ui/table/table-header.svelte +20 -20
- package/dist/components/ui/table/table-row.svelte +15 -15
- package/dist/components/ui/table/table.svelte +17 -17
- package/dist/components/ui/tabs/ui/tab-underline.svelte +43 -43
- package/dist/components/ui/underline-tabs/underline-tabs-content.svelte +33 -33
- package/dist/components/ui/underline-tabs/underline-tabs-list.svelte +40 -40
- package/dist/components/ui/underline-tabs/underline-tabs-trigger.svelte +91 -91
- package/dist/components/ui/underline-tabs/underline-tabs.svelte +61 -61
- package/dist/docs/ApiTable.svelte +42 -42
- package/dist/docs/CodeBlock.svelte +26 -26
- package/dist/docs/DocsHeader.svelte +25 -25
- package/dist/docs/DocsSidebar.svelte +108 -156
- package/dist/docs/components.js +638 -563
- package/dist/globals.css +68 -10
- package/dist/i18n/langs/en.d.ts +7 -0
- package/dist/i18n/langs/en.js +7 -0
- package/dist/i18n/langs/pt.d.ts +7 -0
- package/dist/i18n/langs/pt.js +7 -0
- package/dist/i18n/translations.d.ts +14 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +23 -0
- package/dist/styles/globals.css +283 -283
- package/dist/types/index.d.ts +3 -1
- package/package.json +81 -81
- package/dist/components/pages/security/login/01/ui/FormRegister.svelte +0 -28
- package/dist/components/pages/security/login/01/ui/FormRegister.svelte.d.ts +0 -3
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Button from "./button.svelte";
|
|
3
|
-
import { ArrowLeft01Icon } from "@hugeicons/core-free-icons";
|
|
4
|
-
import { HugeiconsIcon } from "@hugeicons/svelte";
|
|
5
|
-
import { t } from "../../../i18n";
|
|
6
|
-
import type { ButtonProps } from "./";
|
|
7
|
-
|
|
8
|
-
let { ...restProps }: ButtonProps = $props();
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<Button
|
|
12
|
-
variant="outline"
|
|
13
|
-
class="inline-flex items-center gap-1 text-sm text-slate-600 hover:text-slate-900 transition-colors rounded-full bg-input"
|
|
14
|
-
{...restProps}
|
|
15
|
-
>
|
|
16
|
-
<HugeiconsIcon icon={ArrowLeft01Icon} size={16} />
|
|
17
|
-
<span class="sr-only">{$t("label.back")}</span>
|
|
18
|
-
</Button>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Button from "./button.svelte";
|
|
3
|
+
import { ArrowLeft01Icon } from "@hugeicons/core-free-icons";
|
|
4
|
+
import { HugeiconsIcon } from "@hugeicons/svelte";
|
|
5
|
+
import { t } from "../../../i18n";
|
|
6
|
+
import type { ButtonProps } from "./";
|
|
7
|
+
|
|
8
|
+
let { ...restProps }: ButtonProps = $props();
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<Button
|
|
12
|
+
variant="outline"
|
|
13
|
+
class="inline-flex items-center gap-1 text-sm text-slate-600 hover:text-slate-900 transition-colors rounded-full bg-input"
|
|
14
|
+
{...restProps}
|
|
15
|
+
>
|
|
16
|
+
<HugeiconsIcon icon={ArrowLeft01Icon} size={16} />
|
|
17
|
+
<span class="sr-only">{$t("label.back")}</span>
|
|
18
|
+
</Button>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Button, {
|
|
3
|
-
type ButtonProps,
|
|
4
|
-
} from "./button.svelte";
|
|
5
|
-
import { t } from "../../../i18n";
|
|
6
|
-
import { Login02Icon } from "@hugeicons/core-free-icons";
|
|
7
|
-
import { HugeiconsIcon } from "@hugeicons/svelte";
|
|
8
|
-
|
|
9
|
-
let { ...restProps }: ButtonProps = $props();
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<Button class="w-full flex items-center gap-2" {...restProps}>
|
|
13
|
-
<HugeiconsIcon icon={Login02Icon} size={16} />
|
|
14
|
-
{$t("label.login")}
|
|
15
|
-
</Button>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Button, {
|
|
3
|
+
type ButtonProps,
|
|
4
|
+
} from "./button.svelte";
|
|
5
|
+
import { t } from "../../../i18n";
|
|
6
|
+
import { Login02Icon } from "@hugeicons/core-free-icons";
|
|
7
|
+
import { HugeiconsIcon } from "@hugeicons/svelte";
|
|
8
|
+
|
|
9
|
+
let { ...restProps }: ButtonProps = $props();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<Button class="w-full flex items-center gap-2" {...restProps}>
|
|
13
|
+
<HugeiconsIcon icon={Login02Icon} size={16} />
|
|
14
|
+
{$t("label.login")}
|
|
15
|
+
</Button>
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Button, {
|
|
3
|
-
type ButtonProps,
|
|
4
|
-
} from "./button.svelte";
|
|
5
|
-
import { HugeiconsIcon, type IconSvgElement } from "@hugeicons/svelte";
|
|
6
|
-
import { t } from "../../../i18n";
|
|
7
|
-
import {
|
|
8
|
-
GoogleIcon,
|
|
9
|
-
Facebook01Icon as Facebook,
|
|
10
|
-
Linkedin01Icon as Linkedin,
|
|
11
|
-
} from "@hugeicons/core-free-icons";
|
|
12
|
-
import type { Snippet } from "svelte";
|
|
13
|
-
|
|
14
|
-
type IconDefault = "GOOGLE" | "FACEBOOK" | "LINKEDLN";
|
|
15
|
-
|
|
16
|
-
type Props = {
|
|
17
|
-
icon?: IconSvgElement | IconDefault | Snippet;
|
|
18
|
-
label?: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
let { icon, label, ...restProps }: Props & ButtonProps = $props();
|
|
22
|
-
|
|
23
|
-
const defaultIconMap: Record<IconDefault, IconSvgElement> = {
|
|
24
|
-
GOOGLE: GoogleIcon,
|
|
25
|
-
FACEBOOK: Facebook,
|
|
26
|
-
LINKEDLN: Linkedin,
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const defaultLabelMap: Record<IconDefault, string> = {
|
|
30
|
-
GOOGLE: "Google",
|
|
31
|
-
FACEBOOK: "Facebook",
|
|
32
|
-
LINKEDLN: "Linkedin",
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
function isIconDefault(value: unknown): value is IconDefault {
|
|
36
|
-
return typeof value === "string" && value in defaultLabelMap;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
let resolvedIcon = $derived(
|
|
40
|
-
isIconDefault(icon) ? defaultIconMap[icon] : icon,
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
let resolvedLabel = $derived(
|
|
44
|
-
label ?? (isIconDefault(icon) ? defaultLabelMap[icon] : ""),
|
|
45
|
-
);
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<Button variant="outline" class="w-full flex items-center gap-2" {...restProps}>
|
|
49
|
-
{#if resolvedIcon}
|
|
50
|
-
{#if typeof resolvedIcon === "function"}
|
|
51
|
-
{@render resolvedIcon()}
|
|
52
|
-
{:else}
|
|
53
|
-
<HugeiconsIcon icon={resolvedIcon} size={16} />
|
|
54
|
-
{/if}
|
|
55
|
-
{/if}
|
|
56
|
-
{$t("label.login.with", { name: resolvedLabel })}
|
|
57
|
-
</Button>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Button, {
|
|
3
|
+
type ButtonProps,
|
|
4
|
+
} from "./button.svelte";
|
|
5
|
+
import { HugeiconsIcon, type IconSvgElement } from "@hugeicons/svelte";
|
|
6
|
+
import { t } from "../../../i18n";
|
|
7
|
+
import {
|
|
8
|
+
GoogleIcon,
|
|
9
|
+
Facebook01Icon as Facebook,
|
|
10
|
+
Linkedin01Icon as Linkedin,
|
|
11
|
+
} from "@hugeicons/core-free-icons";
|
|
12
|
+
import type { Snippet } from "svelte";
|
|
13
|
+
|
|
14
|
+
type IconDefault = "GOOGLE" | "FACEBOOK" | "LINKEDLN";
|
|
15
|
+
|
|
16
|
+
type Props = {
|
|
17
|
+
icon?: IconSvgElement | IconDefault | Snippet;
|
|
18
|
+
label?: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
let { icon, label, ...restProps }: Props & ButtonProps = $props();
|
|
22
|
+
|
|
23
|
+
const defaultIconMap: Record<IconDefault, IconSvgElement> = {
|
|
24
|
+
GOOGLE: GoogleIcon,
|
|
25
|
+
FACEBOOK: Facebook,
|
|
26
|
+
LINKEDLN: Linkedin,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const defaultLabelMap: Record<IconDefault, string> = {
|
|
30
|
+
GOOGLE: "Google",
|
|
31
|
+
FACEBOOK: "Facebook",
|
|
32
|
+
LINKEDLN: "Linkedin",
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function isIconDefault(value: unknown): value is IconDefault {
|
|
36
|
+
return typeof value === "string" && value in defaultLabelMap;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let resolvedIcon = $derived(
|
|
40
|
+
isIconDefault(icon) ? defaultIconMap[icon] : icon,
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
let resolvedLabel = $derived(
|
|
44
|
+
label ?? (isIconDefault(icon) ? defaultLabelMap[icon] : ""),
|
|
45
|
+
);
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<Button variant="outline" class="w-full flex items-center gap-2" {...restProps}>
|
|
49
|
+
{#if resolvedIcon}
|
|
50
|
+
{#if typeof resolvedIcon === "function"}
|
|
51
|
+
{@render resolvedIcon()}
|
|
52
|
+
{:else}
|
|
53
|
+
<HugeiconsIcon icon={resolvedIcon} size={16} />
|
|
54
|
+
{/if}
|
|
55
|
+
{/if}
|
|
56
|
+
{$t("label.login.with", { name: resolvedLabel })}
|
|
57
|
+
</Button>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Button, {
|
|
3
|
-
type ButtonProps,
|
|
4
|
-
} from "./button.svelte";
|
|
5
|
-
import { t } from "../../../i18n";
|
|
6
|
-
import { Login02Icon } from "@hugeicons/core-free-icons";
|
|
7
|
-
import { HugeiconsIcon } from "@hugeicons/svelte";
|
|
8
|
-
|
|
9
|
-
let { ...restProps }: ButtonProps = $props();
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<Button class="w-full flex items-center gap-2" {...restProps}>
|
|
13
|
-
<HugeiconsIcon icon={Login02Icon} size={16} />
|
|
14
|
-
{$t("label.send")}
|
|
15
|
-
</Button>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Button, {
|
|
3
|
+
type ButtonProps,
|
|
4
|
+
} from "./button.svelte";
|
|
5
|
+
import { t } from "../../../i18n";
|
|
6
|
+
import { Login02Icon } from "@hugeicons/core-free-icons";
|
|
7
|
+
import { HugeiconsIcon } from "@hugeicons/svelte";
|
|
8
|
+
|
|
9
|
+
let { ...restProps }: ButtonProps = $props();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<Button class="w-full flex items-center gap-2" {...restProps}>
|
|
13
|
+
<HugeiconsIcon icon={Login02Icon} size={16} />
|
|
14
|
+
{$t("label.send")}
|
|
15
|
+
</Button>
|
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
import { cn, type WithElementRef } from "../../../utils.js";
|
|
3
|
-
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from "svelte/elements";
|
|
4
|
-
|
|
5
|
-
const buttonBase =
|
|
6
|
-
"rounded-sm border border-transparent bg-clip-padding text-sm font-medium focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
|
|
7
|
-
|
|
8
|
-
const buttonVariantClasses = {
|
|
9
|
-
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
|
10
|
-
outline:
|
|
11
|
-
"border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
12
|
-
secondary:
|
|
13
|
-
"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
14
|
-
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
15
|
-
destructive:
|
|
16
|
-
"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
17
|
-
link: "text-primary underline-offset-4 hover:underline",
|
|
18
|
-
} as const;
|
|
19
|
-
|
|
20
|
-
const buttonSizeClasses = {
|
|
21
|
-
default:
|
|
22
|
-
"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
|
|
23
|
-
xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
|
|
24
|
-
sm: "h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
25
|
-
lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
|
|
26
|
-
icon: "size-9",
|
|
27
|
-
"icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
|
|
28
|
-
"icon-sm": "size-8",
|
|
29
|
-
"icon-lg": "size-10",
|
|
30
|
-
} as const;
|
|
31
|
-
|
|
32
|
-
export type ButtonVariant = keyof typeof buttonVariantClasses;
|
|
33
|
-
export type ButtonSize = keyof typeof buttonSizeClasses;
|
|
34
|
-
|
|
35
|
-
export function buttonVariants(opts: { variant?: ButtonVariant; size?: ButtonSize } = {}): string {
|
|
36
|
-
const variant = opts.variant ?? "default";
|
|
37
|
-
const size = opts.size ?? "default";
|
|
38
|
-
return cn(buttonBase, buttonVariantClasses[variant], buttonSizeClasses[size]);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
|
|
42
|
-
WithElementRef<HTMLAnchorAttributes> & {
|
|
43
|
-
variant?: ButtonVariant;
|
|
44
|
-
size?: ButtonSize;
|
|
45
|
-
};
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<script lang="ts">
|
|
49
|
-
let {
|
|
50
|
-
class: className,
|
|
51
|
-
variant = "default",
|
|
52
|
-
size = "default",
|
|
53
|
-
ref = $bindable(null),
|
|
54
|
-
href = undefined,
|
|
55
|
-
type = "button",
|
|
56
|
-
disabled,
|
|
57
|
-
children,
|
|
58
|
-
...restProps
|
|
59
|
-
}: ButtonProps = $props();
|
|
60
|
-
</script>
|
|
61
|
-
|
|
62
|
-
{#if href}
|
|
63
|
-
<a
|
|
64
|
-
bind:this={ref}
|
|
65
|
-
data-slot="button"
|
|
66
|
-
class={cn(buttonVariants({ variant, size }), className)}
|
|
67
|
-
href={disabled ? undefined : href}
|
|
68
|
-
aria-disabled={disabled}
|
|
69
|
-
role={disabled ? "link" : undefined}
|
|
70
|
-
tabindex={disabled ? -1 : undefined}
|
|
71
|
-
{...restProps}
|
|
72
|
-
>
|
|
73
|
-
{@render children?.()}
|
|
74
|
-
</a>
|
|
75
|
-
{:else}
|
|
76
|
-
<button
|
|
77
|
-
bind:this={ref}
|
|
78
|
-
data-slot="button"
|
|
79
|
-
class={cn(buttonVariants({ variant, size }), className)}
|
|
80
|
-
{type}
|
|
81
|
-
{disabled}
|
|
82
|
-
{...restProps}
|
|
83
|
-
>
|
|
84
|
-
{@render children?.()}
|
|
85
|
-
</button>
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { cn, type WithElementRef } from "../../../utils.js";
|
|
3
|
+
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from "svelte/elements";
|
|
4
|
+
|
|
5
|
+
const buttonBase =
|
|
6
|
+
"rounded-sm border border-transparent bg-clip-padding text-sm font-medium focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
|
|
7
|
+
|
|
8
|
+
const buttonVariantClasses = {
|
|
9
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
|
10
|
+
outline:
|
|
11
|
+
"border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
12
|
+
secondary:
|
|
13
|
+
"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
14
|
+
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
15
|
+
destructive:
|
|
16
|
+
"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
17
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
const buttonSizeClasses = {
|
|
21
|
+
default:
|
|
22
|
+
"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
|
|
23
|
+
xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
|
|
24
|
+
sm: "h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
25
|
+
lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
|
|
26
|
+
icon: "size-9",
|
|
27
|
+
"icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
|
|
28
|
+
"icon-sm": "size-8",
|
|
29
|
+
"icon-lg": "size-10",
|
|
30
|
+
} as const;
|
|
31
|
+
|
|
32
|
+
export type ButtonVariant = keyof typeof buttonVariantClasses;
|
|
33
|
+
export type ButtonSize = keyof typeof buttonSizeClasses;
|
|
34
|
+
|
|
35
|
+
export function buttonVariants(opts: { variant?: ButtonVariant; size?: ButtonSize } = {}): string {
|
|
36
|
+
const variant = opts.variant ?? "default";
|
|
37
|
+
const size = opts.size ?? "default";
|
|
38
|
+
return cn(buttonBase, buttonVariantClasses[variant], buttonSizeClasses[size]);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
|
|
42
|
+
WithElementRef<HTMLAnchorAttributes> & {
|
|
43
|
+
variant?: ButtonVariant;
|
|
44
|
+
size?: ButtonSize;
|
|
45
|
+
};
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<script lang="ts">
|
|
49
|
+
let {
|
|
50
|
+
class: className,
|
|
51
|
+
variant = "default",
|
|
52
|
+
size = "default",
|
|
53
|
+
ref = $bindable(null),
|
|
54
|
+
href = undefined,
|
|
55
|
+
type = "button",
|
|
56
|
+
disabled,
|
|
57
|
+
children,
|
|
58
|
+
...restProps
|
|
59
|
+
}: ButtonProps = $props();
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
{#if href}
|
|
63
|
+
<a
|
|
64
|
+
bind:this={ref}
|
|
65
|
+
data-slot="button"
|
|
66
|
+
class={cn(buttonVariants({ variant, size }), className)}
|
|
67
|
+
href={disabled ? undefined : href}
|
|
68
|
+
aria-disabled={disabled}
|
|
69
|
+
role={disabled ? "link" : undefined}
|
|
70
|
+
tabindex={disabled ? -1 : undefined}
|
|
71
|
+
{...restProps}
|
|
72
|
+
>
|
|
73
|
+
{@render children?.()}
|
|
74
|
+
</a>
|
|
75
|
+
{:else}
|
|
76
|
+
<button
|
|
77
|
+
bind:this={ref}
|
|
78
|
+
data-slot="button"
|
|
79
|
+
class={cn(buttonVariants({ variant, size }), className)}
|
|
80
|
+
{type}
|
|
81
|
+
{disabled}
|
|
82
|
+
{...restProps}
|
|
83
|
+
>
|
|
84
|
+
{@render children?.()}
|
|
85
|
+
</button>
|
|
86
86
|
{/if}
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Skeleton from "../../../../skeleton/skeleton.svelte";
|
|
3
|
-
import ImgPlaceholder from "../../../../../../assets/placeholder-image.png";
|
|
4
|
-
import CardDescription from "../../shared/CardDescription.svelte";
|
|
5
|
-
import CardFavorite from "../../shared/CardFavorite.svelte";
|
|
6
|
-
import CardTags from "../../shared/CardTags.svelte";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Card component with a title and content.
|
|
10
|
-
* @component
|
|
11
|
-
*/
|
|
12
|
-
import type { CardHighlightProps } from "../../types";
|
|
13
|
-
import CardButton from "../../shared/CardButton.svelte";
|
|
14
|
-
import CardLogo from "../../shared/CardLogo.svelte";
|
|
15
|
-
import { t } from "../../../../../../i18n";
|
|
16
|
-
|
|
17
|
-
let {
|
|
18
|
-
id,
|
|
19
|
-
logo,
|
|
20
|
-
tags,
|
|
21
|
-
title,
|
|
22
|
-
content,
|
|
23
|
-
imageUrl,
|
|
24
|
-
isLoading = false,
|
|
25
|
-
isFavorite = false,
|
|
26
|
-
buttonText,
|
|
27
|
-
buttonClass,
|
|
28
|
-
isDescriptionIcon,
|
|
29
|
-
isDescriptionLabel,
|
|
30
|
-
isExpandButton = false,
|
|
31
|
-
onClickBtn,
|
|
32
|
-
onClickFavorite,
|
|
33
|
-
}: CardHighlightProps = $props();
|
|
34
|
-
</script>
|
|
35
|
-
|
|
36
|
-
<article
|
|
37
|
-
class="flex gap-1 bg-white dark:bg-background p-3 rounded-lg shadow border"
|
|
38
|
-
>
|
|
39
|
-
<aside class="relative rounded-lg border h-50">
|
|
40
|
-
<div class="absolute top-3 left-1 z-2 flex gap-1 w-50">
|
|
41
|
-
<CardLogo {isLoading} {logo} />
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<div class="absolute top-3 right-1 z-2">
|
|
45
|
-
<CardFavorite
|
|
46
|
-
{id}
|
|
47
|
-
{isFavorite}
|
|
48
|
-
{isLoading}
|
|
49
|
-
onFavoriteClick={() => onClickFavorite?.(id)}
|
|
50
|
-
/>
|
|
51
|
-
</div>
|
|
52
|
-
|
|
53
|
-
{#if isLoading}
|
|
54
|
-
<Skeleton class="rounded-lg w-50 h-full object-cover object-center" />
|
|
55
|
-
{:else if imageUrl}
|
|
56
|
-
<img
|
|
57
|
-
src={imageUrl}
|
|
58
|
-
alt={imageUrl}
|
|
59
|
-
class="rounded-lg w-50 h-full object-cover object-center"
|
|
60
|
-
/>
|
|
61
|
-
{:else}
|
|
62
|
-
<img
|
|
63
|
-
src={ImgPlaceholder}
|
|
64
|
-
alt={imageUrl}
|
|
65
|
-
class="rounded-lg w-50 h-full object-cover object-center"
|
|
66
|
-
/>
|
|
67
|
-
{/if}
|
|
68
|
-
<div class="absolute inset-0 bg-black/5 rounded-sm h-full w-full"></div>
|
|
69
|
-
</aside>
|
|
70
|
-
<div class="px-5">
|
|
71
|
-
<div class="p-2 rounded-md">
|
|
72
|
-
{#if isLoading}
|
|
73
|
-
<Skeleton class="h-4 w-30 rounded-lg" />
|
|
74
|
-
{:else if title}
|
|
75
|
-
<div class="font-semibold">{title}</div>
|
|
76
|
-
{/if}
|
|
77
|
-
</div>
|
|
78
|
-
|
|
79
|
-
<div class="w-75">
|
|
80
|
-
<CardDescription
|
|
81
|
-
{content}
|
|
82
|
-
{isLoading}
|
|
83
|
-
{isDescriptionIcon}
|
|
84
|
-
{isDescriptionLabel}
|
|
85
|
-
/>
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
{#if tags && tags.length > 0}
|
|
89
|
-
<div class="w-full mb-2">
|
|
90
|
-
<CardTags {tags} />
|
|
91
|
-
</div>
|
|
92
|
-
{/if}
|
|
93
|
-
|
|
94
|
-
<CardButton
|
|
95
|
-
{id}
|
|
96
|
-
{isLoading}
|
|
97
|
-
className={buttonClass}
|
|
98
|
-
isFlex={isExpandButton}
|
|
99
|
-
onClick={() => onClickBtn!(id)}
|
|
100
|
-
text={buttonText || $t("label.buy")}
|
|
101
|
-
/>
|
|
102
|
-
</div>
|
|
103
|
-
</article>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Skeleton from "../../../../skeleton/skeleton.svelte";
|
|
3
|
+
import ImgPlaceholder from "../../../../../../assets/placeholder-image.png";
|
|
4
|
+
import CardDescription from "../../shared/CardDescription.svelte";
|
|
5
|
+
import CardFavorite from "../../shared/CardFavorite.svelte";
|
|
6
|
+
import CardTags from "../../shared/CardTags.svelte";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Card component with a title and content.
|
|
10
|
+
* @component
|
|
11
|
+
*/
|
|
12
|
+
import type { CardHighlightProps } from "../../types";
|
|
13
|
+
import CardButton from "../../shared/CardButton.svelte";
|
|
14
|
+
import CardLogo from "../../shared/CardLogo.svelte";
|
|
15
|
+
import { t } from "../../../../../../i18n";
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
id,
|
|
19
|
+
logo,
|
|
20
|
+
tags,
|
|
21
|
+
title,
|
|
22
|
+
content,
|
|
23
|
+
imageUrl,
|
|
24
|
+
isLoading = false,
|
|
25
|
+
isFavorite = false,
|
|
26
|
+
buttonText,
|
|
27
|
+
buttonClass,
|
|
28
|
+
isDescriptionIcon,
|
|
29
|
+
isDescriptionLabel,
|
|
30
|
+
isExpandButton = false,
|
|
31
|
+
onClickBtn,
|
|
32
|
+
onClickFavorite,
|
|
33
|
+
}: CardHighlightProps = $props();
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<article
|
|
37
|
+
class="flex gap-1 bg-white dark:bg-background p-3 rounded-lg shadow border"
|
|
38
|
+
>
|
|
39
|
+
<aside class="relative rounded-lg border h-50">
|
|
40
|
+
<div class="absolute top-3 left-1 z-2 flex gap-1 w-50">
|
|
41
|
+
<CardLogo {isLoading} {logo} />
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="absolute top-3 right-1 z-2">
|
|
45
|
+
<CardFavorite
|
|
46
|
+
{id}
|
|
47
|
+
{isFavorite}
|
|
48
|
+
{isLoading}
|
|
49
|
+
onFavoriteClick={() => onClickFavorite?.(id)}
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
{#if isLoading}
|
|
54
|
+
<Skeleton class="rounded-lg w-50 h-full object-cover object-center" />
|
|
55
|
+
{:else if imageUrl}
|
|
56
|
+
<img
|
|
57
|
+
src={imageUrl}
|
|
58
|
+
alt={imageUrl}
|
|
59
|
+
class="rounded-lg w-50 h-full object-cover object-center"
|
|
60
|
+
/>
|
|
61
|
+
{:else}
|
|
62
|
+
<img
|
|
63
|
+
src={ImgPlaceholder}
|
|
64
|
+
alt={imageUrl}
|
|
65
|
+
class="rounded-lg w-50 h-full object-cover object-center"
|
|
66
|
+
/>
|
|
67
|
+
{/if}
|
|
68
|
+
<div class="absolute inset-0 bg-black/5 rounded-sm h-full w-full"></div>
|
|
69
|
+
</aside>
|
|
70
|
+
<div class="px-5">
|
|
71
|
+
<div class="p-2 rounded-md">
|
|
72
|
+
{#if isLoading}
|
|
73
|
+
<Skeleton class="h-4 w-30 rounded-lg" />
|
|
74
|
+
{:else if title}
|
|
75
|
+
<div class="font-semibold">{title}</div>
|
|
76
|
+
{/if}
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div class="w-75">
|
|
80
|
+
<CardDescription
|
|
81
|
+
{content}
|
|
82
|
+
{isLoading}
|
|
83
|
+
{isDescriptionIcon}
|
|
84
|
+
{isDescriptionLabel}
|
|
85
|
+
/>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
{#if tags && tags.length > 0}
|
|
89
|
+
<div class="w-full mb-2">
|
|
90
|
+
<CardTags {tags} />
|
|
91
|
+
</div>
|
|
92
|
+
{/if}
|
|
93
|
+
|
|
94
|
+
<CardButton
|
|
95
|
+
{id}
|
|
96
|
+
{isLoading}
|
|
97
|
+
className={buttonClass}
|
|
98
|
+
isFlex={isExpandButton}
|
|
99
|
+
onClick={() => onClickBtn!(id)}
|
|
100
|
+
text={buttonText || $t("label.buy")}
|
|
101
|
+
/>
|
|
102
|
+
</div>
|
|
103
|
+
</article>
|