negodesign 0.0.81 → 0.0.82

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 (278) hide show
  1. package/README.md +133 -133
  2. package/dist/components/NegoDesign.svelte +21 -21
  3. package/dist/components/pages/admin/01/ui/AdminContent.svelte +14 -14
  4. package/dist/components/pages/admin/01/ui/AdminPanel.svelte +46 -46
  5. package/dist/components/pages/product-details/shared/ProductDetailFilesVertical.svelte +103 -103
  6. package/dist/components/pages/profile-user/shared/ProfileUserAddress.svelte +83 -83
  7. package/dist/components/pages/profile-user/shared/ProfileUserTabs.svelte +80 -80
  8. package/dist/components/pages/security/auth/PageAuth01.svelte +62 -62
  9. package/dist/components/pages/security/auth/PageAuth02.svelte +40 -40
  10. package/dist/components/pages/security/auth/PageAuth03.svelte +40 -40
  11. package/dist/components/pages/security/login/01/ui/FormLogin.svelte +91 -63
  12. package/dist/components/pages/security/login/01/ui/FormLogin.svelte.d.ts +2 -0
  13. package/dist/components/pages/security/login/01/ui/FormLoginEmailPassword.svelte +49 -26
  14. package/dist/components/pages/security/login/01/ui/FormLoginEmailPassword.svelte.d.ts +2 -0
  15. package/dist/components/pages/security/login/01/ui/FormLoginPhonePassword.svelte +49 -26
  16. package/dist/components/pages/security/login/01/ui/FormLoginPhonePassword.svelte.d.ts +2 -0
  17. package/dist/components/pages/security/login/01/ui/FormLoginUsernamePassword.svelte +49 -26
  18. package/dist/components/pages/security/login/01/ui/FormLoginUsernamePassword.svelte.d.ts +2 -0
  19. package/dist/components/pages/security/login/01/ui/LoginCard01.svelte +148 -132
  20. package/dist/components/pages/security/login/01/ui/LoginCard01.svelte.d.ts +2 -0
  21. package/dist/components/pages/security/login/01/ui/PageLogin01.svelte +66 -64
  22. package/dist/components/pages/security/login/02/ui/FormLogin02.svelte +82 -72
  23. package/dist/components/pages/security/login/02/ui/FormLogin02.svelte.d.ts +1 -0
  24. package/dist/components/pages/security/login/02/ui/FormLoginEmailPassword02.svelte +27 -26
  25. package/dist/components/pages/security/login/02/ui/FormLoginEmailPassword02.svelte.d.ts +1 -0
  26. package/dist/components/pages/security/login/02/ui/FormLoginPhonePassword02.svelte +27 -26
  27. package/dist/components/pages/security/login/02/ui/FormLoginPhonePassword02.svelte.d.ts +1 -0
  28. package/dist/components/pages/security/login/02/ui/FormLoginUsernamePassword02.svelte +27 -26
  29. package/dist/components/pages/security/login/02/ui/FormLoginUsernamePassword02.svelte.d.ts +1 -0
  30. package/dist/components/pages/security/login/02/ui/LoginCard02.svelte +15 -2
  31. package/dist/components/pages/security/login/02/ui/LoginCard02.svelte.d.ts +1 -0
  32. package/dist/components/pages/security/login/02/ui/PageLogin02.svelte +2 -0
  33. package/dist/components/pages/security/login/03/ui/FormLogin03.svelte +94 -91
  34. package/dist/components/pages/security/login/03/ui/FormLogin03.svelte.d.ts +1 -0
  35. package/dist/components/pages/security/login/03/ui/FormLoginEmailPassword03.svelte +27 -26
  36. package/dist/components/pages/security/login/03/ui/FormLoginEmailPassword03.svelte.d.ts +1 -0
  37. package/dist/components/pages/security/login/03/ui/FormLoginPhonePassword03.svelte +27 -26
  38. package/dist/components/pages/security/login/03/ui/FormLoginPhonePassword03.svelte.d.ts +1 -0
  39. package/dist/components/pages/security/login/03/ui/FormLoginUsernamePassword03.svelte +27 -26
  40. package/dist/components/pages/security/login/03/ui/FormLoginUsernamePassword03.svelte.d.ts +1 -0
  41. package/dist/components/pages/security/login/03/ui/LoginCard03.svelte +15 -2
  42. package/dist/components/pages/security/login/03/ui/LoginCard03.svelte.d.ts +1 -0
  43. package/dist/components/pages/security/login/03/ui/PageLogin03.svelte +2 -0
  44. package/dist/components/pages/security/login/PageLogin.svelte +30 -30
  45. package/dist/components/pages/security/login/types.d.ts +1 -0
  46. package/dist/components/pages/security/register/01/ui/PageRegister01.svelte +78 -76
  47. package/dist/components/pages/security/register/01/ui/RegisterCard01.svelte +107 -104
  48. package/dist/components/pages/security/register/01/ui/RegisterCard01.svelte.d.ts +1 -0
  49. package/dist/components/pages/security/register/02/ui/PageRegister02.svelte +2 -0
  50. package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte +3 -1
  51. package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte.d.ts +1 -0
  52. package/dist/components/pages/security/register/03/ui/PageRegister03.svelte +2 -0
  53. package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte +3 -1
  54. package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte.d.ts +1 -0
  55. package/dist/components/pages/security/register/FormRegister.svelte +148 -146
  56. package/dist/components/pages/security/register/FormRegister.svelte.d.ts +1 -0
  57. package/dist/components/pages/security/register/types.d.ts +1 -0
  58. package/dist/components/ui/avatar/avatar-fallback.svelte +29 -29
  59. package/dist/components/ui/avatar/avatar-image.svelte +38 -38
  60. package/dist/components/ui/avatar/avatar.svelte +39 -39
  61. package/dist/components/ui/badge/badge.svelte +46 -46
  62. package/dist/components/ui/banner/AdCardBanner.svelte +74 -74
  63. package/dist/components/ui/banner/CtaCardBanner.svelte +118 -118
  64. package/dist/components/ui/banner/CtaCardImageBanner.svelte +94 -94
  65. package/dist/components/ui/breadcrumb/core/breadcrumb-list.svelte +31 -31
  66. package/dist/components/ui/button/ButtonBack.svelte +18 -18
  67. package/dist/components/ui/button/ButtonLogin.svelte +19 -15
  68. package/dist/components/ui/button/ButtonLoginWith.svelte +57 -57
  69. package/dist/components/ui/button/ButtonSend.svelte +15 -15
  70. package/dist/components/ui/button/button.svelte +100 -86
  71. package/dist/components/ui/button/button.svelte.d.ts +1 -0
  72. package/dist/components/ui/card/core/highlight/01/CardHighlight01.svelte +103 -103
  73. package/dist/components/ui/card/core/highlight/02/CardHighlight02.svelte +99 -99
  74. package/dist/components/ui/card/core/highlight/CardHighlight.svelte +22 -22
  75. package/dist/components/ui/card/core/media/01/CardMedia01.svelte +133 -133
  76. package/dist/components/ui/card/core/media/02/CardMedia02.svelte +127 -127
  77. package/dist/components/ui/card/core/media/CardMedia.svelte +18 -18
  78. package/dist/components/ui/card/core/product/01/CardProduct01.svelte +136 -136
  79. package/dist/components/ui/card/core/product/02/CardProduct02.svelte +124 -124
  80. package/dist/components/ui/card/core/product/CardProduct.svelte +22 -22
  81. package/dist/components/ui/card/core/profile/01/CardProfile01.svelte +134 -134
  82. package/dist/components/ui/card/core/profile/02/CardProfile02.svelte +132 -132
  83. package/dist/components/ui/card/core/profile/CardProfile.svelte +18 -18
  84. package/dist/components/ui/card/core/promotion/CardPromotion.svelte +139 -139
  85. package/dist/components/ui/card/core/promotion/CardPromotionPrice.svelte +32 -32
  86. package/dist/components/ui/card/core/shared/CardButton.svelte +42 -42
  87. package/dist/components/ui/card/core/shared/CardCart.svelte +36 -36
  88. package/dist/components/ui/card/core/shared/CardDescription.svelte +41 -41
  89. package/dist/components/ui/card/core/shared/CardFavorite.svelte +33 -33
  90. package/dist/components/ui/card/core/shared/CardLogo.svelte +19 -19
  91. package/dist/components/ui/card/core/shared/CardPhoneOrWhatsapp.svelte +45 -45
  92. package/dist/components/ui/card/core/shared/CardStarRating.svelte +24 -24
  93. package/dist/components/ui/card/core/shared/CardTags.svelte +95 -95
  94. package/dist/components/ui/card/core/shared/CardThumbnailVideo.svelte +232 -232
  95. package/dist/components/ui/card/core/shared/CardTitlePrice.svelte +24 -24
  96. package/dist/components/ui/card/core/shared/TruncatableText.svelte +49 -49
  97. package/dist/components/ui/carousel/carousel-content.svelte +56 -56
  98. package/dist/components/ui/carousel/carousel-item.svelte +29 -29
  99. package/dist/components/ui/carousel/carousel-next.svelte +40 -40
  100. package/dist/components/ui/carousel/carousel-previous.svelte +40 -40
  101. package/dist/components/ui/carousel/carousel.svelte +225 -225
  102. package/dist/components/ui/carousel/core/badge/ui/CarouselBadge.svelte +108 -108
  103. package/dist/components/ui/carousel/core/grid/shared/ui/CarouselGridSlot.svelte +38 -38
  104. package/dist/components/ui/carousel/core/hero/ui/CarouselHero.svelte +181 -181
  105. package/dist/components/ui/carousel/core/highlights/ui/CarouselHighlights.svelte +67 -67
  106. package/dist/components/ui/carousel/core/product/ui/CarouselProduct.svelte +57 -57
  107. package/dist/components/ui/carousel/core/promotion/ui/CarouselPromotion.svelte +67 -67
  108. package/dist/components/ui/carousel/core/shared/ui/CarouselHeader.svelte +59 -59
  109. package/dist/components/ui/checkbox/checkbox.svelte +96 -96
  110. package/dist/components/ui/collapsible/collapsible-content.svelte +30 -30
  111. package/dist/components/ui/collapsible/collapsible-trigger.svelte +51 -51
  112. package/dist/components/ui/collapsible/collapsible.svelte +66 -66
  113. package/dist/components/ui/data-table/flex-render.svelte +40 -40
  114. package/dist/components/ui/datatable/ui/DataTableActions.svelte +28 -28
  115. package/dist/components/ui/datatable/ui/DataTableCheckbox.svelte +22 -22
  116. package/dist/components/ui/datatable/ui/DataTableContent.svelte +59 -59
  117. package/dist/components/ui/datatable/ui/DataTableCore.svelte +148 -148
  118. package/dist/components/ui/datatable/ui/DataTableDragHandle.svelte +8 -8
  119. package/dist/components/ui/datatable/ui/DataTableListFilter.svelte +60 -60
  120. package/dist/components/ui/datatable/ui/DataTableListPagination.svelte +35 -35
  121. package/dist/components/ui/drawer/drawer-close.svelte +41 -41
  122. package/dist/components/ui/drawer/drawer-content.svelte +81 -81
  123. package/dist/components/ui/drawer/drawer-description.svelte +19 -19
  124. package/dist/components/ui/drawer/drawer-footer.svelte +20 -20
  125. package/dist/components/ui/drawer/drawer-header.svelte +20 -20
  126. package/dist/components/ui/drawer/drawer-nested.svelte +34 -34
  127. package/dist/components/ui/drawer/drawer-overlay.svelte +25 -25
  128. package/dist/components/ui/drawer/drawer-portal.svelte +19 -19
  129. package/dist/components/ui/drawer/drawer-title.svelte +19 -19
  130. package/dist/components/ui/drawer/drawer-trigger.svelte +42 -42
  131. package/dist/components/ui/drawer/drawer.svelte +74 -74
  132. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +25 -25
  133. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +69 -69
  134. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +106 -106
  135. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +27 -27
  136. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +21 -21
  137. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +60 -60
  138. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +27 -27
  139. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +6 -6
  140. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +43 -43
  141. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +70 -70
  142. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +20 -20
  143. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +33 -33
  144. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +57 -57
  145. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +76 -76
  146. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +68 -68
  147. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +53 -53
  148. package/dist/components/ui/empty/empty-content.svelte +19 -19
  149. package/dist/components/ui/empty/empty-description.svelte +19 -19
  150. package/dist/components/ui/empty/empty-header.svelte +19 -19
  151. package/dist/components/ui/empty/empty-media.svelte +41 -41
  152. package/dist/components/ui/empty/empty-title.svelte +19 -19
  153. package/dist/components/ui/empty/empty.svelte +19 -19
  154. package/dist/components/ui/footer/ui/Footer.svelte +18 -18
  155. package/dist/components/ui/form/ui/calendar/Calendar.svelte +193 -193
  156. package/dist/components/ui/form/ui/calendar/CalendarCard.svelte +89 -89
  157. package/dist/components/ui/form/ui/calendar/DaysGrid.svelte +75 -75
  158. package/dist/components/ui/form/ui/calendar/MonthSelect.svelte +49 -49
  159. package/dist/components/ui/form/ui/calendar/YearSelect.svelte +116 -116
  160. package/dist/components/ui/form/ui/input-base.svelte +83 -83
  161. package/dist/components/ui/form/ui/input-calendar-interval.svelte +178 -178
  162. package/dist/components/ui/form/ui/input-calendar.svelte +109 -109
  163. package/dist/components/ui/form/ui/input-email-or-phone.svelte +23 -23
  164. package/dist/components/ui/form/ui/input-email.svelte +23 -23
  165. package/dist/components/ui/form/ui/input-password-confirm.svelte +23 -23
  166. package/dist/components/ui/form/ui/input-password.svelte +23 -23
  167. package/dist/components/ui/form/ui/input-phone.svelte +43 -37
  168. package/dist/components/ui/form/ui/input-select.svelte +246 -246
  169. package/dist/components/ui/form/ui/input-username.svelte +22 -22
  170. package/dist/components/ui/grid/core/ui/01/Grid01.svelte +30 -30
  171. package/dist/components/ui/grid/core/ui/02/Grid02.svelte +30 -30
  172. package/dist/components/ui/grid/core/ui/ItemsPanel.svelte +26 -26
  173. package/dist/components/ui/grid/core/ui/ItemsPanelCarousel.svelte +37 -37
  174. package/dist/components/ui/grid/core/ui/ItemsPanelGrid.svelte +43 -43
  175. package/dist/components/ui/grid/core/ui/ItemsSimpleGrid.svelte +45 -45
  176. package/dist/components/ui/grid/core/ui/shared/DescriptionGrid.svelte +23 -23
  177. package/dist/components/ui/grid/core/ui/shared/IconRenderGrid.svelte +23 -23
  178. package/dist/components/ui/grid/core/ui/shared/TitleGrid.svelte +19 -19
  179. package/dist/components/ui/hero/SimpleHero.svelte +65 -65
  180. package/dist/components/ui/input-otp/input-otp-group.svelte +22 -22
  181. package/dist/components/ui/input-otp/input-otp-separator.svelte +27 -27
  182. package/dist/components/ui/input-otp/input-otp-slot.svelte +63 -63
  183. package/dist/components/ui/input-otp/input-otp.svelte +181 -181
  184. package/dist/components/ui/label/core/LabelOr.svelte +25 -25
  185. package/dist/components/ui/label/label.svelte +19 -19
  186. package/dist/components/ui/language-switcher/language-switcher.svelte +48 -48
  187. package/dist/components/ui/light-switch/light-switch.svelte +48 -48
  188. package/dist/components/ui/link/link-forget-password.svelte +12 -12
  189. package/dist/components/ui/link/link-privacy-polity.svelte +12 -12
  190. package/dist/components/ui/link/link-terms-of-service.svelte +12 -12
  191. package/dist/components/ui/modal/core/ui/ModalCore.svelte +132 -132
  192. package/dist/components/ui/modal/form/index.d.ts +3 -2
  193. package/dist/components/ui/modal/form/index.js +2 -1
  194. package/dist/components/ui/modal/form/types.d.ts +41 -0
  195. package/dist/components/ui/modal/form/ui/ModalForm.svelte +11 -6
  196. package/dist/components/ui/modal/form/ui/ModalFormEmailOrPhone.svelte +204 -0
  197. package/dist/components/ui/modal/form/ui/ModalFormEmailOrPhone.svelte.d.ts +4 -0
  198. package/dist/components/ui/modal/grid/ui/02/ModalGridSelection02.svelte +146 -146
  199. package/dist/components/ui/modal/share/ui/ModalShareSelection.svelte +156 -156
  200. package/dist/components/ui/nav/ui/ComplexMenu.svelte +51 -51
  201. package/dist/components/ui/nav/ui/Menu.svelte +72 -72
  202. package/dist/components/ui/nav/ui/SimpleMenu.svelte +14 -14
  203. package/dist/components/ui/nav/ui/mobile/ComplexMenuMobile.svelte +125 -125
  204. package/dist/components/ui/nav/ui/mobile/MenuMobile.svelte +54 -54
  205. package/dist/components/ui/nav/ui/shared/MenuButton.svelte +51 -51
  206. package/dist/components/ui/nav/ui/shared/MenuLinks.svelte +40 -40
  207. package/dist/components/ui/nav/ui/shared/MenuListItem.svelte +44 -44
  208. package/dist/components/ui/nav/ui/shared/MenuLogo.svelte +13 -13
  209. package/dist/components/ui/nav/ui/shared/dropdown/DropdownNavigationMenuItemGrid.svelte +30 -30
  210. package/dist/components/ui/nav/ui/shared/navigation/NavDropdown.svelte +88 -88
  211. package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItem.svelte +17 -17
  212. package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItemCard.svelte +53 -53
  213. package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItemGrid.svelte +35 -35
  214. package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItemList.svelte +24 -24
  215. package/dist/components/ui/nav/ui/shared/navigation/NavigationMenuItems.svelte +21 -21
  216. package/dist/components/ui/panel/CarouselSlot.svelte +57 -57
  217. package/dist/components/ui/panel/LeftHero.svelte +114 -114
  218. package/dist/components/ui/panel/NotFoundEmpty.svelte +66 -66
  219. package/dist/components/ui/phone-input/country-selector.svelte +87 -87
  220. package/dist/components/ui/phone-input/flag.svelte +11 -11
  221. package/dist/components/ui/phone-input/phone-input.svelte +163 -163
  222. package/dist/components/ui/popover/popover-close.svelte +25 -25
  223. package/dist/components/ui/popover/popover-content.svelte +92 -92
  224. package/dist/components/ui/popover/popover-portal.svelte +6 -6
  225. package/dist/components/ui/popover/popover-trigger.svelte +68 -68
  226. package/dist/components/ui/popover/popover.svelte +53 -53
  227. package/dist/components/ui/search/SearchInput.svelte +32 -32
  228. package/dist/components/ui/search/shared/SearchInputCore.svelte +66 -66
  229. package/dist/components/ui/separator/separator.svelte +28 -28
  230. package/dist/components/ui/sidebar/core/MenuBarSidebar.svelte +70 -70
  231. package/dist/components/ui/sidebar/core/ui/navbar/NavMenuBarSidebar.svelte +97 -97
  232. package/dist/components/ui/sidebar/core/ui/navbar/NavMenuBottomSidebar.svelte +33 -33
  233. package/dist/components/ui/sidebar/core/ui/navbar/NavMenuTopBarSidebar.svelte +101 -101
  234. package/dist/components/ui/sidebar/core/ui/navbar/nav-menu-header-sidebar.svelte +77 -77
  235. package/dist/components/ui/sidebar/sidebar-content.svelte +24 -24
  236. package/dist/components/ui/sidebar/sidebar-footer.svelte +21 -21
  237. package/dist/components/ui/sidebar/sidebar-group-content.svelte +21 -21
  238. package/dist/components/ui/sidebar/sidebar-menu-action.svelte +38 -38
  239. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +70 -70
  240. package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +39 -39
  241. package/dist/components/ui/sidebar/sidebar-provider.svelte +62 -62
  242. package/dist/components/ui/sidebar/sidebar-rail.svelte +36 -36
  243. package/dist/components/ui/sidebar/sidebar-separator.svelte +21 -21
  244. package/dist/components/ui/sidebar/sidebar-trigger.svelte +36 -36
  245. package/dist/components/ui/sidebar/sidebar.svelte +118 -118
  246. package/dist/components/ui/skeleton/skeleton.svelte +19 -19
  247. package/dist/components/ui/star-rating/star-rating-star.svelte +66 -66
  248. package/dist/components/ui/star-rating/star-rating.svelte +149 -149
  249. package/dist/components/ui/table/table-body.svelte +15 -15
  250. package/dist/components/ui/table/table-caption.svelte +20 -20
  251. package/dist/components/ui/table/table-cell.svelte +15 -15
  252. package/dist/components/ui/table/table-footer.svelte +20 -20
  253. package/dist/components/ui/table/table-head.svelte +15 -15
  254. package/dist/components/ui/table/table-header.svelte +20 -20
  255. package/dist/components/ui/table/table-row.svelte +15 -15
  256. package/dist/components/ui/table/table.svelte +17 -17
  257. package/dist/components/ui/tabs/data/TabModel.d.ts +1 -0
  258. package/dist/components/ui/tabs/ui/tab-underline.svelte +47 -43
  259. package/dist/components/ui/underline-tabs/underline-tabs-content.svelte +33 -33
  260. package/dist/components/ui/underline-tabs/underline-tabs-list.svelte +40 -40
  261. package/dist/components/ui/underline-tabs/underline-tabs-trigger.svelte +91 -91
  262. package/dist/components/ui/underline-tabs/underline-tabs.svelte +61 -61
  263. package/dist/docs/ApiTable.svelte +42 -42
  264. package/dist/docs/CodeBlock.svelte +26 -26
  265. package/dist/docs/DocsHeader.svelte +25 -25
  266. package/dist/docs/DocsSidebar.svelte +108 -108
  267. package/dist/docs/components.js +624 -584
  268. package/dist/globals.css +27 -7
  269. package/dist/i18n/langs/en.d.ts +3 -1
  270. package/dist/i18n/langs/en.js +3 -1
  271. package/dist/i18n/langs/pt.d.ts +3 -1
  272. package/dist/i18n/langs/pt.js +3 -1
  273. package/dist/i18n/translations.d.ts +6 -2
  274. package/dist/index.d.ts +12 -0
  275. package/dist/index.js +12 -0
  276. package/dist/styles/globals.css +283 -283
  277. package/dist/types/index.d.ts +3 -1
  278. package/package.json +81 -81
@@ -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,19 @@
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 { isLoading, ...restProps }: ButtonProps = $props();
10
+ </script>
11
+
12
+ <Button
13
+ class="w-full flex items-center gap-2"
14
+ {...restProps}
15
+ disabled={isLoading}
16
+ >
17
+ <HugeiconsIcon icon={Login02Icon} size={16} />
18
+ {$t("label.login")}
19
+ </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,100 @@
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
- {/if}
1
+ <script lang="ts" module>
2
+ import { cn, type WithElementRef } from "../../../utils.js";
3
+ import type {
4
+ HTMLAnchorAttributes,
5
+ HTMLButtonAttributes,
6
+ } from "svelte/elements";
7
+
8
+ const buttonBase =
9
+ "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";
10
+
11
+ const buttonVariantClasses = {
12
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
13
+ outline:
14
+ "border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
15
+ secondary:
16
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
17
+ ghost:
18
+ "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
19
+ destructive:
20
+ "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",
21
+ link: "text-primary underline-offset-4 hover:underline",
22
+ } as const;
23
+
24
+ const buttonSizeClasses = {
25
+ default:
26
+ "h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
27
+ 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",
28
+ sm: "h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
29
+ lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
30
+ icon: "size-9",
31
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
32
+ "icon-sm": "size-8",
33
+ "icon-lg": "size-10",
34
+ } as const;
35
+
36
+ export type ButtonVariant = keyof typeof buttonVariantClasses;
37
+ export type ButtonSize = keyof typeof buttonSizeClasses;
38
+
39
+ export function buttonVariants(
40
+ opts: { variant?: ButtonVariant; size?: ButtonSize } = {},
41
+ ): string {
42
+ const variant = opts.variant ?? "default";
43
+ const size = opts.size ?? "default";
44
+ return cn(
45
+ buttonBase,
46
+ buttonVariantClasses[variant],
47
+ buttonSizeClasses[size],
48
+ );
49
+ }
50
+
51
+ export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
52
+ WithElementRef<HTMLAnchorAttributes> & {
53
+ variant?: ButtonVariant;
54
+ size?: ButtonSize;
55
+ isLoading?: boolean;
56
+ };
57
+ </script>
58
+
59
+ <script lang="ts">
60
+ let {
61
+ class: className,
62
+ isLoading,
63
+ variant = "default",
64
+ size = "default",
65
+ ref = $bindable(null),
66
+ href = undefined,
67
+ type = "button",
68
+ disabled,
69
+ children,
70
+ ...restProps
71
+ }: ButtonProps = $props();
72
+
73
+ let isDisabled = $derived(disabled || isLoading);
74
+ </script>
75
+
76
+ {#if href}
77
+ <a
78
+ bind:this={ref}
79
+ data-slot="button"
80
+ class={cn(buttonVariants({ variant, size }), className)}
81
+ href={isDisabled ? undefined : href}
82
+ aria-disabled={isDisabled}
83
+ role={isDisabled ? "link" : undefined}
84
+ tabindex={isDisabled ? -1 : undefined}
85
+ {...restProps}
86
+ >
87
+ {@render children?.()}
88
+ </a>
89
+ {:else}
90
+ <button
91
+ bind:this={ref}
92
+ data-slot="button"
93
+ class={cn(buttonVariants({ variant, size }), className)}
94
+ {type}
95
+ disabled={isDisabled}
96
+ {...restProps}
97
+ >
98
+ {@render children?.()}
99
+ </button>
100
+ {/if}
@@ -27,6 +27,7 @@ export declare function buttonVariants(opts?: {
27
27
  export type ButtonProps = WithElementRef<HTMLButtonAttributes> & WithElementRef<HTMLAnchorAttributes> & {
28
28
  variant?: ButtonVariant;
29
29
  size?: ButtonSize;
30
+ isLoading?: boolean;
30
31
  };
31
32
  declare const Button: import("svelte").Component<ButtonProps, {}, "ref">;
32
33
  type Button = ReturnType<typeof Button>;
@@ -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>