pukaad-ui-lib 1.282.2 → 1.284.0

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 (344) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/assets/json/social-icon.json +76 -76
  3. package/dist/runtime/assets/svg/bell-outline.svg +3 -3
  4. package/dist/runtime/assets/svg/bookmark-solid.svg +2 -2
  5. package/dist/runtime/assets/svg/box.svg +22 -22
  6. package/dist/runtime/assets/svg/camera-plus.svg +9 -9
  7. package/dist/runtime/assets/svg/clock-fading.svg +46 -46
  8. package/dist/runtime/assets/svg/coin.svg +20 -20
  9. package/dist/runtime/assets/svg/empty-document.svg +15 -15
  10. package/dist/runtime/assets/svg/map-location-dot.svg +9 -9
  11. package/dist/runtime/assets/svg/map-pin.svg +6 -6
  12. package/dist/runtime/assets/svg/memsg-circle.svg +7 -7
  13. package/dist/runtime/assets/svg/memsg-fade.svg +5 -5
  14. package/dist/runtime/assets/svg/memsg-logo-outline.svg +3 -3
  15. package/dist/runtime/assets/svg/memsg-square.svg +9 -9
  16. package/dist/runtime/assets/svg/message.svg +3 -3
  17. package/dist/runtime/assets/svg/page-not-found.svg +9 -9
  18. package/dist/runtime/assets/svg/share-from-square.svg +3 -3
  19. package/dist/runtime/assets/svg/share.svg +2 -2
  20. package/dist/runtime/assets/svg/shopping-cart.svg +16 -16
  21. package/dist/runtime/assets/svg/socials/Email.svg +12 -12
  22. package/dist/runtime/assets/svg/socials/Facebook.svg +4 -4
  23. package/dist/runtime/assets/svg/socials/{instagram.svg → Instagram.svg} +14 -14
  24. package/dist/runtime/assets/svg/socials/Line.svg +11 -11
  25. package/dist/runtime/assets/svg/socials/LinkedIn.svg +5 -5
  26. package/dist/runtime/assets/svg/socials/Pinterest.svg +4 -4
  27. package/dist/runtime/assets/svg/socials/SnapChat.svg +5 -5
  28. package/dist/runtime/assets/svg/socials/Threads.svg +12 -12
  29. package/dist/runtime/assets/svg/socials/{Tiktok.svg → TikTok.svg} +6 -6
  30. package/dist/runtime/assets/svg/socials/Tumblr.svg +4 -4
  31. package/dist/runtime/assets/svg/socials/Website.svg +11 -11
  32. package/dist/runtime/assets/svg/socials/{Whatsapp.svg → WhatsApp.svg} +5 -5
  33. package/dist/runtime/assets/svg/socials/X.svg +4 -4
  34. package/dist/runtime/assets/svg/socials/{Youtube.svg → YouTube.svg} +5 -5
  35. package/dist/runtime/assets/svg/tag-empty.svg +25 -25
  36. package/dist/runtime/assets/svg/thumbs-up-regular.svg +9 -9
  37. package/dist/runtime/assets/svg/thumbs-up-solid.svg +2 -2
  38. package/dist/runtime/assets/svg/vector.svg +2 -2
  39. package/dist/runtime/assets/svg/verify.svg +10 -10
  40. package/dist/runtime/assets/svg/write-review.svg +15 -15
  41. package/dist/runtime/components/avatar-profile.vue +29 -29
  42. package/dist/runtime/components/avatar.vue +20 -20
  43. package/dist/runtime/components/button.vue +9 -9
  44. package/dist/runtime/components/card/card-announce2.vue +104 -102
  45. package/dist/runtime/components/card/card-blog.vue +45 -45
  46. package/dist/runtime/components/card/card-place-detail.vue +51 -51
  47. package/dist/runtime/components/card/card-place.vue +28 -28
  48. package/dist/runtime/components/card/card-profile-about.vue +81 -81
  49. package/dist/runtime/components/card/card-profile-header.d.vue.ts +1 -1
  50. package/dist/runtime/components/card/card-profile-header.vue +94 -94
  51. package/dist/runtime/components/card/card-profile-header.vue.d.ts +1 -1
  52. package/dist/runtime/components/card/card-reaction.d.vue.ts +1 -1
  53. package/dist/runtime/components/card/card-reaction.vue +23 -23
  54. package/dist/runtime/components/card/card-reaction.vue.d.ts +1 -1
  55. package/dist/runtime/components/card/card-recommend-blog.vue +42 -42
  56. package/dist/runtime/components/card/card-recommend-place.vue +45 -45
  57. package/dist/runtime/components/card/card-recommend-profile.vue +46 -46
  58. package/dist/runtime/components/card/card-review.vue +57 -57
  59. package/dist/runtime/components/card/card-user-blog.vue +76 -76
  60. package/dist/runtime/components/card/card-user-item.vue +24 -24
  61. package/dist/runtime/components/card/card.vue +29 -29
  62. package/dist/runtime/components/carousel.vue +31 -31
  63. package/dist/runtime/components/chip.vue +10 -10
  64. package/dist/runtime/components/collapse/collapse-multiple.vue +42 -42
  65. package/dist/runtime/components/collapse/collapse.vue +23 -23
  66. package/dist/runtime/components/comment.vue +204 -204
  67. package/dist/runtime/components/data-list.vue +49 -49
  68. package/dist/runtime/components/data-table.vue +131 -131
  69. package/dist/runtime/components/display/display-image-place.d.vue.ts +1 -1
  70. package/dist/runtime/components/display/display-image-place.vue +88 -88
  71. package/dist/runtime/components/display/display-image-place.vue.d.ts +1 -1
  72. package/dist/runtime/components/display/display-image-review.vue +10 -10
  73. package/dist/runtime/components/display/display-image.vue +49 -49
  74. package/dist/runtime/components/display/display-rating-summary.vue +34 -34
  75. package/dist/runtime/components/divider.vue +8 -8
  76. package/dist/runtime/components/draggable.vue +15 -15
  77. package/dist/runtime/components/drawer/drawer-post-blog.vue +111 -96
  78. package/dist/runtime/components/drawer/drawer-post-review.vue +67 -67
  79. package/dist/runtime/components/drawer/drawer-profile-about.vue +52 -52
  80. package/dist/runtime/components/drawer/drawer-profile-network.d.vue.ts +1 -1
  81. package/dist/runtime/components/drawer/drawer-profile-network.vue +136 -136
  82. package/dist/runtime/components/drawer/drawer-profile-network.vue.d.ts +1 -1
  83. package/dist/runtime/components/drawer/drawer-suggest-place/drawer-suggest-place.vue +92 -92
  84. package/dist/runtime/components/drawer/drawer-suggest-place/suggest-place-form.vue +70 -70
  85. package/dist/runtime/components/drawer/drawer-suggest-place/suggest-place-map.vue +5 -5
  86. package/dist/runtime/components/drawer/drawer.vue +24 -24
  87. package/dist/runtime/components/dropdown.vue +8 -8
  88. package/dist/runtime/components/filter/filter-list-chip.vue +10 -10
  89. package/dist/runtime/components/filter/filter-list.vue +17 -17
  90. package/dist/runtime/components/icons.vue +1 -1
  91. package/dist/runtime/components/image/image-cropper.vue +9 -9
  92. package/dist/runtime/components/image/image.vue +27 -27
  93. package/dist/runtime/components/input/input-OTP.vue +27 -27
  94. package/dist/runtime/components/input/input-address.vue +147 -147
  95. package/dist/runtime/components/input/input-autocomplete.d.vue.ts +2 -2
  96. package/dist/runtime/components/input/input-autocomplete.vue +80 -80
  97. package/dist/runtime/components/input/input-autocomplete.vue.d.ts +2 -2
  98. package/dist/runtime/components/input/input-birth-date.vue +20 -20
  99. package/dist/runtime/components/input/input-checkbox.vue +17 -17
  100. package/dist/runtime/components/input/input-combobox.vue +100 -100
  101. package/dist/runtime/components/input/input-comment.vue +6 -6
  102. package/dist/runtime/components/input/input-content.vue +32 -32
  103. package/dist/runtime/components/input/input-date-opening.vue +96 -96
  104. package/dist/runtime/components/input/input-date-picker.vue +102 -102
  105. package/dist/runtime/components/input/input-email.vue +9 -9
  106. package/dist/runtime/components/input/input-file.vue +125 -125
  107. package/dist/runtime/components/input/input-link.vue +35 -35
  108. package/dist/runtime/components/input/input-media.vue +36 -36
  109. package/dist/runtime/components/input/input-password.vue +43 -43
  110. package/dist/runtime/components/input/input-phone.vue +11 -11
  111. package/dist/runtime/components/input/input-profile-name.vue +10 -10
  112. package/dist/runtime/components/input/input-radio.vue +55 -55
  113. package/dist/runtime/components/input/input-rating.vue +13 -13
  114. package/dist/runtime/components/input/input-recaptcha.vue +19 -19
  115. package/dist/runtime/components/input/input-search.vue +71 -71
  116. package/dist/runtime/components/input/input-select-province.vue +94 -94
  117. package/dist/runtime/components/input/input-select-tag.vue +51 -51
  118. package/dist/runtime/components/input/input-select.vue +52 -52
  119. package/dist/runtime/components/input/input-slider.vue +19 -19
  120. package/dist/runtime/components/input/input-switch.vue +25 -25
  121. package/dist/runtime/components/input/input-tag.vue +145 -145
  122. package/dist/runtime/components/input/input-text-field.vue +90 -90
  123. package/dist/runtime/components/input/input-textarea.vue +58 -58
  124. package/dist/runtime/components/label/label-announce-time.vue +9 -9
  125. package/dist/runtime/components/label/label-card-atom.vue +8 -8
  126. package/dist/runtime/components/list/list-menu.vue +13 -13
  127. package/dist/runtime/components/loading.vue +8 -8
  128. package/dist/runtime/components/modal/modal-2FA-generate.vue +48 -48
  129. package/dist/runtime/components/modal/modal-2FA.vue +28 -28
  130. package/dist/runtime/components/modal/modal-account-disabled-alert.vue +33 -33
  131. package/dist/runtime/components/modal/modal-account-disabled-confirmed.vue +32 -32
  132. package/dist/runtime/components/modal/modal-account-disabled-reason.vue +45 -45
  133. package/dist/runtime/components/modal/modal-account-disabled.vue +9 -9
  134. package/dist/runtime/components/modal/modal-display-image.vue +38 -38
  135. package/dist/runtime/components/modal/modal-email-OTP.vue +32 -32
  136. package/dist/runtime/components/modal/modal-forgot-password.vue +9 -9
  137. package/dist/runtime/components/modal/modal-media-view.vue +12 -12
  138. package/dist/runtime/components/modal/modal-password-confirmed.vue +30 -30
  139. package/dist/runtime/components/modal/modal-password-new.vue +34 -17
  140. package/dist/runtime/components/modal/modal-password-verify.vue +13 -13
  141. package/dist/runtime/components/modal/modal-personal-card-ID.vue +167 -167
  142. package/dist/runtime/components/modal/modal-phone-OTP.vue +49 -49
  143. package/dist/runtime/components/modal/modal-profile-edit.vue +71 -69
  144. package/dist/runtime/components/modal/modal-province-domain.vue +23 -23
  145. package/dist/runtime/components/modal/modal-report.vue +47 -47
  146. package/dist/runtime/components/modal/modal-review-detail.vue +118 -118
  147. package/dist/runtime/components/modal/modal-secure.d.vue.ts +1 -1
  148. package/dist/runtime/components/modal/modal-secure.vue +7 -7
  149. package/dist/runtime/components/modal/modal-secure.vue.d.ts +1 -1
  150. package/dist/runtime/components/modal/modal-share.vue +20 -20
  151. package/dist/runtime/components/modal/modal-user-account-search.vue +69 -69
  152. package/dist/runtime/components/modal/modal.vue +27 -27
  153. package/dist/runtime/components/pagination.vue +47 -47
  154. package/dist/runtime/components/picker/picker-image-cover-profile.vue +80 -80
  155. package/dist/runtime/components/picker/picker-image-profile.vue +102 -102
  156. package/dist/runtime/components/picker/picker-option-menu/picker-option-menu-user.vue +18 -18
  157. package/dist/runtime/components/picker/picker-option-menu/picker-option-menu.vue +26 -26
  158. package/dist/runtime/components/profile-cover.vue +80 -80
  159. package/dist/runtime/components/progress-bar.vue +9 -9
  160. package/dist/runtime/components/read-more-text.vue +1 -1
  161. package/dist/runtime/components/tab_old.vue +78 -78
  162. package/dist/runtime/components/table.vue +79 -79
  163. package/dist/runtime/components/tooltip.vue +12 -12
  164. package/dist/runtime/components/ui/accordion/Accordion.vue +3 -3
  165. package/dist/runtime/components/ui/accordion/AccordionContent.vue +9 -9
  166. package/dist/runtime/components/ui/accordion/AccordionItem.vue +8 -8
  167. package/dist/runtime/components/ui/accordion/AccordionTrigger.vue +16 -16
  168. package/dist/runtime/components/ui/alert/Alert.vue +7 -7
  169. package/dist/runtime/components/ui/alert/AlertDescription.vue +6 -6
  170. package/dist/runtime/components/ui/alert/AlertTitle.vue +6 -6
  171. package/dist/runtime/components/ui/alert-dialog/AlertDialog.vue +3 -3
  172. package/dist/runtime/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  173. package/dist/runtime/components/ui/alert-dialog/AlertDialogCancel.vue +6 -6
  174. package/dist/runtime/components/ui/alert-dialog/AlertDialogContent.d.vue.ts +4 -4
  175. package/dist/runtime/components/ui/alert-dialog/AlertDialogContent.vue +13 -13
  176. package/dist/runtime/components/ui/alert-dialog/AlertDialogContent.vue.d.ts +4 -4
  177. package/dist/runtime/components/ui/alert-dialog/AlertDialogDescription.vue +7 -7
  178. package/dist/runtime/components/ui/alert-dialog/AlertDialogFooter.vue +6 -6
  179. package/dist/runtime/components/ui/alert-dialog/AlertDialogHeader.vue +6 -6
  180. package/dist/runtime/components/ui/alert-dialog/AlertDialogTitle.vue +7 -7
  181. package/dist/runtime/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  182. package/dist/runtime/components/ui/avatar/Avatar.vue +6 -6
  183. package/dist/runtime/components/ui/avatar/AvatarFallback.vue +7 -7
  184. package/dist/runtime/components/ui/avatar/AvatarImage.vue +7 -7
  185. package/dist/runtime/components/ui/badge/Badge.vue +7 -7
  186. package/dist/runtime/components/ui/breadcrumb/Breadcrumb.vue +7 -7
  187. package/dist/runtime/components/ui/breadcrumb/BreadcrumbEllipsis.vue +11 -11
  188. package/dist/runtime/components/ui/breadcrumb/BreadcrumbItem.vue +6 -6
  189. package/dist/runtime/components/ui/breadcrumb/BreadcrumbLink.vue +8 -8
  190. package/dist/runtime/components/ui/breadcrumb/BreadcrumbList.vue +6 -6
  191. package/dist/runtime/components/ui/breadcrumb/BreadcrumbPage.vue +9 -9
  192. package/dist/runtime/components/ui/breadcrumb/BreadcrumbSeparator.vue +10 -10
  193. package/dist/runtime/components/ui/button/Button.vue +8 -8
  194. package/dist/runtime/components/ui/calendar/Calendar.vue +128 -128
  195. package/dist/runtime/components/ui/calendar/CalendarCell.vue +7 -7
  196. package/dist/runtime/components/ui/calendar/CalendarCellTrigger.vue +7 -7
  197. package/dist/runtime/components/ui/calendar/CalendarGrid.vue +7 -7
  198. package/dist/runtime/components/ui/calendar/CalendarGridBody.vue +6 -6
  199. package/dist/runtime/components/ui/calendar/CalendarGridHead.vue +6 -6
  200. package/dist/runtime/components/ui/calendar/CalendarGridRow.vue +6 -6
  201. package/dist/runtime/components/ui/calendar/CalendarHeadCell.vue +7 -7
  202. package/dist/runtime/components/ui/calendar/CalendarHeader.vue +7 -7
  203. package/dist/runtime/components/ui/calendar/CalendarHeading.vue +10 -10
  204. package/dist/runtime/components/ui/calendar/CalendarNextButton.vue +9 -9
  205. package/dist/runtime/components/ui/calendar/CalendarPrevButton.vue +9 -9
  206. package/dist/runtime/components/ui/card/Card.vue +8 -8
  207. package/dist/runtime/components/ui/card/CardAction.vue +6 -6
  208. package/dist/runtime/components/ui/card/CardContent.vue +6 -6
  209. package/dist/runtime/components/ui/card/CardDescription.vue +6 -6
  210. package/dist/runtime/components/ui/card/CardFooter.vue +6 -6
  211. package/dist/runtime/components/ui/card/CardHeader.vue +6 -6
  212. package/dist/runtime/components/ui/card/CardTitle.vue +6 -6
  213. package/dist/runtime/components/ui/carousel/Carousel.vue +10 -10
  214. package/dist/runtime/components/ui/carousel/CarouselContent.vue +12 -12
  215. package/dist/runtime/components/ui/carousel/CarouselItem.vue +8 -8
  216. package/dist/runtime/components/ui/carousel/CarouselNext.vue +13 -13
  217. package/dist/runtime/components/ui/carousel/CarouselPrevious.vue +13 -13
  218. package/dist/runtime/components/ui/checkbox/Checkbox.vue +8 -8
  219. package/dist/runtime/components/ui/command/Command.vue +7 -7
  220. package/dist/runtime/components/ui/command/CommandDialog.vue +11 -11
  221. package/dist/runtime/components/ui/command/CommandEmpty.vue +16 -16
  222. package/dist/runtime/components/ui/command/CommandGroup.vue +16 -16
  223. package/dist/runtime/components/ui/command/CommandInput.vue +13 -13
  224. package/dist/runtime/components/ui/command/CommandItem.vue +11 -11
  225. package/dist/runtime/components/ui/command/CommandList.vue +9 -9
  226. package/dist/runtime/components/ui/command/CommandSeparator.vue +7 -7
  227. package/dist/runtime/components/ui/command/CommandShortcut.vue +6 -6
  228. package/dist/runtime/components/ui/dialog/Dialog.vue +3 -3
  229. package/dist/runtime/components/ui/dialog/DialogClose.vue +3 -3
  230. package/dist/runtime/components/ui/dialog/DialogContent.d.vue.ts +4 -4
  231. package/dist/runtime/components/ui/dialog/DialogContent.vue +26 -26
  232. package/dist/runtime/components/ui/dialog/DialogContent.vue.d.ts +4 -4
  233. package/dist/runtime/components/ui/dialog/DialogDescription.vue +7 -7
  234. package/dist/runtime/components/ui/dialog/DialogFooter.vue +6 -6
  235. package/dist/runtime/components/ui/dialog/DialogHeader.vue +6 -6
  236. package/dist/runtime/components/ui/dialog/DialogOverlay.vue +7 -7
  237. package/dist/runtime/components/ui/dialog/DialogScrollContent.d.vue.ts +4 -4
  238. package/dist/runtime/components/ui/dialog/DialogScrollContent.vue +20 -20
  239. package/dist/runtime/components/ui/dialog/DialogScrollContent.vue.d.ts +4 -4
  240. package/dist/runtime/components/ui/dialog/DialogTitle.vue +7 -7
  241. package/dist/runtime/components/ui/dialog/DialogTrigger.vue +3 -3
  242. package/dist/runtime/components/ui/dropdown-menu/DropdownMenu.vue +6 -6
  243. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +12 -12
  244. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.d.vue.ts +2 -2
  245. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.vue +10 -10
  246. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +2 -2
  247. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuGroup.vue +6 -6
  248. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuItem.vue +9 -9
  249. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuLabel.vue +8 -8
  250. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +6 -6
  251. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +16 -16
  252. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSeparator.vue +5 -5
  253. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuShortcut.vue +6 -6
  254. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  255. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.d.vue.ts +4 -4
  256. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.vue +7 -7
  257. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +4 -4
  258. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +8 -8
  259. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuTrigger.vue +6 -6
  260. package/dist/runtime/components/ui/form/FormControl.vue +8 -8
  261. package/dist/runtime/components/ui/form/FormDescription.vue +7 -7
  262. package/dist/runtime/components/ui/form/FormItem.vue +3 -3
  263. package/dist/runtime/components/ui/form/FormLabel.vue +8 -8
  264. package/dist/runtime/components/ui/form/FormMessage.vue +7 -7
  265. package/dist/runtime/components/ui/input/Input.vue +7 -7
  266. package/dist/runtime/components/ui/input-group/InputGroup.vue +7 -7
  267. package/dist/runtime/components/ui/input-group/InputGroupAddon.vue +9 -9
  268. package/dist/runtime/components/ui/input-group/InputGroupButton.vue +8 -8
  269. package/dist/runtime/components/ui/input-group/InputGroupInput.vue +5 -5
  270. package/dist/runtime/components/ui/input-group/InputGroupText.vue +5 -5
  271. package/dist/runtime/components/ui/input-group/InputGroupTextarea.vue +4 -4
  272. package/dist/runtime/components/ui/label/Label.vue +7 -7
  273. package/dist/runtime/components/ui/native-select/NativeSelect.vue +19 -19
  274. package/dist/runtime/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  275. package/dist/runtime/components/ui/native-select/NativeSelectOption.vue +3 -3
  276. package/dist/runtime/components/ui/pagination/Pagination.vue +8 -8
  277. package/dist/runtime/components/ui/pagination/PaginationContent.vue +8 -8
  278. package/dist/runtime/components/ui/pagination/PaginationEllipsis.vue +10 -10
  279. package/dist/runtime/components/ui/pagination/PaginationFirst.vue +10 -10
  280. package/dist/runtime/components/ui/pagination/PaginationItem.vue +7 -7
  281. package/dist/runtime/components/ui/pagination/PaginationLast.vue +10 -10
  282. package/dist/runtime/components/ui/pagination/PaginationNext.vue +10 -10
  283. package/dist/runtime/components/ui/pagination/PaginationPrevious.vue +10 -10
  284. package/dist/runtime/components/ui/pin-input/PinInput.vue +7 -7
  285. package/dist/runtime/components/ui/pin-input/PinInputGroup.vue +7 -7
  286. package/dist/runtime/components/ui/pin-input/PinInputSeparator.vue +3 -3
  287. package/dist/runtime/components/ui/pin-input/PinInputSlot.vue +5 -5
  288. package/dist/runtime/components/ui/popover/Popover.vue +7 -7
  289. package/dist/runtime/components/ui/popover/PopoverAnchor.vue +6 -6
  290. package/dist/runtime/components/ui/popover/PopoverContent.d.vue.ts +4 -4
  291. package/dist/runtime/components/ui/popover/PopoverContent.vue +9 -9
  292. package/dist/runtime/components/ui/popover/PopoverContent.vue.d.ts +4 -4
  293. package/dist/runtime/components/ui/popover/PopoverTrigger.vue +6 -6
  294. package/dist/runtime/components/ui/scroll-area/ScrollArea.vue +14 -14
  295. package/dist/runtime/components/ui/scroll-area/ScrollBar.vue +10 -10
  296. package/dist/runtime/components/ui/select/Select.vue +7 -7
  297. package/dist/runtime/components/ui/select/SelectContent.d.vue.ts +2 -2
  298. package/dist/runtime/components/ui/select/SelectContent.vue +10 -10
  299. package/dist/runtime/components/ui/select/SelectContent.vue.d.ts +2 -2
  300. package/dist/runtime/components/ui/select/SelectGroup.vue +6 -6
  301. package/dist/runtime/components/ui/select/SelectItem.vue +17 -17
  302. package/dist/runtime/components/ui/select/SelectItemText.vue +6 -6
  303. package/dist/runtime/components/ui/select/SelectLabel.vue +6 -6
  304. package/dist/runtime/components/ui/select/SelectScrollDownButton.vue +9 -9
  305. package/dist/runtime/components/ui/select/SelectScrollUpButton.vue +9 -9
  306. package/dist/runtime/components/ui/select/SelectSeparator.vue +5 -5
  307. package/dist/runtime/components/ui/select/SelectTrigger.vue +11 -11
  308. package/dist/runtime/components/ui/select/SelectValue.vue +6 -6
  309. package/dist/runtime/components/ui/separator/Separator.vue +5 -5
  310. package/dist/runtime/components/ui/sheet/Sheet.vue +3 -3
  311. package/dist/runtime/components/ui/sheet/SheetClose.vue +3 -3
  312. package/dist/runtime/components/ui/sheet/SheetContent.d.vue.ts +4 -4
  313. package/dist/runtime/components/ui/sheet/SheetContent.vue +26 -26
  314. package/dist/runtime/components/ui/sheet/SheetContent.vue.d.ts +4 -4
  315. package/dist/runtime/components/ui/sheet/SheetDescription.vue +7 -7
  316. package/dist/runtime/components/ui/sheet/SheetFooter.vue +6 -6
  317. package/dist/runtime/components/ui/sheet/SheetHeader.vue +6 -6
  318. package/dist/runtime/components/ui/sheet/SheetOverlay.vue +7 -7
  319. package/dist/runtime/components/ui/sheet/SheetTitle.vue +7 -7
  320. package/dist/runtime/components/ui/sheet/SheetTrigger.vue +3 -3
  321. package/dist/runtime/components/ui/skeleton/Skeleton.vue +4 -4
  322. package/dist/runtime/components/ui/spinner/Spinner.vue +6 -6
  323. package/dist/runtime/components/ui/table/Table.vue +5 -5
  324. package/dist/runtime/components/ui/table/TableBody.vue +6 -6
  325. package/dist/runtime/components/ui/table/TableCaption.vue +6 -6
  326. package/dist/runtime/components/ui/table/TableCell.vue +6 -6
  327. package/dist/runtime/components/ui/table/TableEmpty.vue +15 -15
  328. package/dist/runtime/components/ui/table/TableFooter.vue +6 -6
  329. package/dist/runtime/components/ui/table/TableHead.vue +6 -6
  330. package/dist/runtime/components/ui/table/TableHeader.vue +6 -6
  331. package/dist/runtime/components/ui/table/TableRow.vue +6 -6
  332. package/dist/runtime/components/ui/tabs/Tabs.vue +8 -8
  333. package/dist/runtime/components/ui/tabs/TabsContent.vue +7 -7
  334. package/dist/runtime/components/ui/tabs/TabsList.vue +7 -7
  335. package/dist/runtime/components/ui/tabs/TabsTrigger.vue +7 -7
  336. package/dist/runtime/components/ui/textarea/Textarea.vue +5 -5
  337. package/dist/runtime/components/ui/tooltip/Tooltip.vue +7 -7
  338. package/dist/runtime/components/ui/tooltip/TooltipContent.vue +13 -13
  339. package/dist/runtime/components/ui/tooltip/TooltipProvider.vue +3 -3
  340. package/dist/runtime/components/ui/tooltip/TooltipTrigger.vue +6 -6
  341. package/dist/runtime/components/video.vue +2 -2
  342. package/dist/runtime/geo/README.md +87 -87
  343. package/dist/runtime/geo/postal_codes.json +5569 -5569
  344. package/package.json +2 -2
@@ -1,38 +1,38 @@
1
1
  <template>
2
- <div class="flex gap-[24px] items-center">
3
- <!-- Left: คะแนนรวม -->
4
- <div class="flex flex-col items-center text-primary flex-shrink-0 w-[100px]">
5
- <div class="text-[56px] font-bold leading-none">
6
- {{ Number(props.rating).toFixed(1) }}
7
- </div>
8
- <div class="font-body-large mt-[4px]">
9
- {{ convertNumber(Number(props.totalReviews)) }} รีวิว
10
- </div>
11
- </div>
12
-
13
- <!-- Right: แถบการกระจายคะแนน -->
14
- <div class="flex flex-col gap-[8px] flex-1">
15
- <div v-for="(item, idx) in sortedDistribution" :key="item.stars" class="flex items-center gap-[12px]">
16
- <!-- badge แสดงบน row แรก (5 ดาว) -->
17
- <div class="relative flex-shrink-0">
18
- <InputRating :size="16" readonly :model-value="item.stars" />
19
- <div v-if="idx === 0 && props.badge != null"
20
- class="absolute -top-[10px] -left-[10px] min-w-[22px] h-[22px] px-[4px] rounded-full bg-error flex items-center justify-center">
21
- <span class="text-white text-[11px] font-bold leading-none">{{ props.badge }}</span>
22
- </div>
23
- </div>
24
-
25
- <div class="flex-1 max-w-[260px]">
26
- <ProgressBar :value="maxCount > 0 ? item.count / maxCount * 100 : 0" full-width :height="8"
27
- color-active="#FBC02D" color-background="#E0E0E0" />
28
- </div>
29
-
30
- <div class="text-gray font-body-large w-[72px]">
31
- {{ convertNumber(item.count) }}
32
- </div>
33
- </div>
34
- </div>
35
- </div>
2
+ <div class="flex gap-[24px] items-center">
3
+ <!-- Left: คะแนนรวม -->
4
+ <div class="flex flex-col items-center text-primary flex-shrink-0 w-[100px]">
5
+ <div class="text-[56px] font-bold leading-none">
6
+ {{ Number(props.rating).toFixed(1) }}
7
+ </div>
8
+ <div class="font-body-large mt-[4px]">
9
+ {{ convertNumber(Number(props.totalReviews)) }} รีวิว
10
+ </div>
11
+ </div>
12
+
13
+ <!-- Right: แถบการกระจายคะแนน -->
14
+ <div class="flex flex-col gap-[8px] flex-1">
15
+ <div v-for="(item, idx) in sortedDistribution" :key="item.stars" class="flex items-center gap-[12px]">
16
+ <!-- badge แสดงบน row แรก (5 ดาว) -->
17
+ <div class="relative flex-shrink-0">
18
+ <InputRating :size="16" readonly :model-value="item.stars" />
19
+ <div v-if="idx === 0 && props.badge != null"
20
+ class="absolute -top-[10px] -left-[10px] min-w-[22px] h-[22px] px-[4px] rounded-full bg-error flex items-center justify-center">
21
+ <span class="text-white text-[11px] font-bold leading-none">{{ props.badge }}</span>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="flex-1 max-w-[260px]">
26
+ <ProgressBar :value="maxCount > 0 ? item.count / maxCount * 100 : 0" full-width :height="8"
27
+ color-active="#FBC02D" color-background="#E0E0E0" />
28
+ </div>
29
+
30
+ <div class="text-gray font-body-large w-[72px]">
31
+ {{ convertNumber(item.count) }}
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </div>
36
36
  </template>
37
37
 
38
38
  <script setup>
@@ -1,23 +1,23 @@
1
1
  <template>
2
- <div
2
+ <div
3
3
  :style="{
4
4
  paddingLeft: props.width && `${props.width}px`,
5
5
  paddingRight: props.width && `${props.width}px`,
6
6
  paddingTop: props.height && `${props.height}px`,
7
7
  paddingBottom: props.height && `${props.height}px`
8
- }"
9
- >
10
- <hr
11
- :class="[props.alignment === 'vertical' ? 'h-full' : 'w-full']"
8
+ }"
9
+ >
10
+ <hr
11
+ :class="[props.alignment === 'vertical' ? 'h-full' : 'w-full']"
12
12
  :style="{
13
13
  border: 0,
14
14
  borderLeft: props.alignment === 'vertical' ? `${props.size}px` : '',
15
15
  borderBottom: props.alignment === 'horizontal' ? `${props.size}px` : '',
16
16
  borderStyle: props.style,
17
17
  borderColor: color
18
- }"
19
- />
20
- </div>
18
+ }"
19
+ />
20
+ </div>
21
21
  </template>
22
22
 
23
23
  <script setup>
@@ -1,19 +1,19 @@
1
1
  <template>
2
- <div v-bind="$attrs">
3
- <div
4
- v-for="(n, i) in items"
5
- :key="i"
6
- class="cursor-grab active:cursor-grabbing"
7
- draggable="true"
8
- @dragstart="onDragStart($event, i)"
9
- @dragover.prevent="onDragOver($event, i)"
10
- @dragend="onDragEnd($event, i)"
11
- @dragenter.prevent
12
- @dragleave.prevent
13
- >
14
- <slot name="item" :item="n" :index="i"></slot>
15
- </div>
16
- </div>
2
+ <div v-bind="$attrs">
3
+ <div
4
+ v-for="(n, i) in items"
5
+ :key="i"
6
+ class="cursor-grab active:cursor-grabbing"
7
+ draggable="true"
8
+ @dragstart="onDragStart($event, i)"
9
+ @dragover.prevent="onDragOver($event, i)"
10
+ @dragend="onDragEnd($event, i)"
11
+ @dragenter.prevent
12
+ @dragleave.prevent
13
+ >
14
+ <slot name="item" :item="n" :index="i"></slot>
15
+ </div>
16
+ </div>
17
17
  </template>
18
18
 
19
19
  <script setup>
@@ -1,74 +1,74 @@
1
1
  <template>
2
- <Drawer
3
- class="w-[748px]"
4
- :title="drawerTitle"
5
- @close="onClose"
6
- disabled-auto-close
7
- @submit="onSubmit"
8
- v-model="isOpen"
9
- >
10
- <div class="flex flex-col gap-[16px]">
11
- <InputTextField
12
- name="title"
13
- label="หัวข้อ"
14
- placeholder="ตั้งชื่อบทความให้น่าสนใจ"
15
- showCounter
16
- :limit="180"
17
- v-model="form.title"
18
- disabled-border
19
- required
20
- />
21
-
22
- <InputContent
23
- placeholder="อยากเล่าอะไร"
24
- :height="288"
25
- v-model="form.content"
26
- />
27
-
28
- <InputTag
29
- v-model="form.tags"
30
- name="tags"
31
- label="แท็ก"
32
- placeholder="เพิ่มแท็ก"
33
- :limit="5"
34
- />
35
-
36
- <!-- <InputCheckbox
37
- name="disableComment"
38
- label="ไม่อนุญาตให้แสดงความคิดเห็น"
39
- v-model="form.disableComment"
40
- /> -->
41
-
42
- <div class="flex flex-col gap-[8px]">
43
- <div class="text-gray font-body-large">ภาพหน้าปก</div>
44
- <InputFile
45
- :limit="1"
46
- name="coverImage"
47
- accept="image/jpeg,image/png,image/webp,image/bmp,image/gif"
48
- v-model="form.coverImage"
49
- />
50
- <div class="flex flex-col text-gray font-body-small">
51
- <div>รองรับไฟล์ *.jpg *.jpeg *.png *.webp *.bmp *.gif</div>
52
- <div>ขนาดไม่เกิน 30 mb</div>
53
- </div>
54
- </div>
55
- </div>
56
-
57
- <template #footer="{ meta }">
58
- <div class="flex justify-end gap-[16px] items-center">
59
- <Button variant="outline" @click="onClose">ยกเลิก</Button>
60
- <Button @click="onSaveDraft"> บันทึกแบบร่าง </Button>
61
- <Button
62
- type="submit"
63
- color="primary"
64
- :disabled="!meta.valid || isLoading"
65
- >
66
- <span v-if="isLoading">กำลังบันทึก...</span>
67
- <span v-else>เผยแพร่</span>
68
- </Button>
69
- </div>
70
- </template>
71
- </Drawer>
2
+ <Drawer
3
+ class="w-[748px]"
4
+ :title="drawerTitle"
5
+ @close="onClose"
6
+ disabled-auto-close
7
+ @submit="onSubmit"
8
+ v-model="isOpen"
9
+ >
10
+ <div class="flex flex-col gap-[16px]">
11
+ <InputTextField
12
+ name="title"
13
+ label="หัวข้อ"
14
+ placeholder="ตั้งชื่อบทความให้น่าสนใจ"
15
+ showCounter
16
+ :limit="180"
17
+ v-model="form.title"
18
+ disabled-border
19
+ required
20
+ />
21
+
22
+ <InputContent
23
+ placeholder="อยากเล่าอะไร"
24
+ :height="288"
25
+ v-model="form.content"
26
+ />
27
+
28
+ <InputTag
29
+ v-model="form.tags"
30
+ name="tags"
31
+ label="แท็ก"
32
+ placeholder="เพิ่มแท็ก"
33
+ :limit="5"
34
+ />
35
+
36
+ <!-- <InputCheckbox
37
+ name="disableComment"
38
+ label="ไม่อนุญาตให้แสดงความคิดเห็น"
39
+ v-model="form.disableComment"
40
+ /> -->
41
+
42
+ <div class="flex flex-col gap-[8px]">
43
+ <div class="text-gray font-body-large">ภาพหน้าปก</div>
44
+ <InputFile
45
+ :limit="1"
46
+ name="coverImage"
47
+ accept="image/jpeg,image/png,image/webp,image/bmp,image/gif"
48
+ v-model="form.coverImage"
49
+ />
50
+ <div class="flex flex-col text-gray font-body-small">
51
+ <div>รองรับไฟล์ *.jpg *.jpeg *.png *.webp *.bmp *.gif</div>
52
+ <div>ขนาดไม่เกิน 30 mb</div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <template #footer="{ meta }">
58
+ <div class="flex justify-end gap-[16px] items-center">
59
+ <Button variant="outline" @click="onClose">ยกเลิก</Button>
60
+ <Button @click="onSaveDraft"> บันทึกแบบร่าง </Button>
61
+ <Button
62
+ type="submit"
63
+ color="primary"
64
+ :disabled="!meta.valid || loading"
65
+ >
66
+ <span v-if="loading">กำลังบันทึก...</span>
67
+ <span v-else>เผยแพร่</span>
68
+ </Button>
69
+ </div>
70
+ </template>
71
+ </Drawer>
72
72
  </template>
73
73
 
74
74
  <script setup>
@@ -77,6 +77,8 @@ import { useNuxtApp, useRuntimeConfig, useCookie } from "nuxt/app";
77
77
  import { useApi } from "../../composables/useApi";
78
78
  const { $alert, $toast } = useNuxtApp();
79
79
  const api = useApi();
80
+ const config = useRuntimeConfig();
81
+ const isOffice = config.public.APP_TYPE === "OFFICE";
80
82
  const emit = defineEmits(["submit", "success", "saveDraft"]);
81
83
  const props = defineProps({
82
84
  item: { type: Object, required: false, default: () => ({
@@ -95,11 +97,14 @@ function cloneItem(item) {
95
97
  };
96
98
  }
97
99
  const form = ref(cloneItem(props.item));
98
- const isLoading = ref(false);
100
+ const loading = ref(false);
99
101
  const isOpen = defineModel({ type: Boolean, ...{
100
102
  default: false
101
103
  } });
102
- const isEditMode = computed(() => !!props.item?.id);
104
+ const isEditMode = computed(() => {
105
+ const id = props.item?.id;
106
+ return !!id && !String(id).startsWith("draft_");
107
+ });
103
108
  const drawerTitle = computed(() => {
104
109
  return isEditMode.value ? "\u0E41\u0E01\u0E49\u0E44\u0E02\u0E1A\u0E25\u0E47\u0E2D\u0E01" : "\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E1A\u0E25\u0E47\u0E2D\u0E01";
105
110
  });
@@ -108,6 +113,19 @@ watch(isOpen, (newVal) => {
108
113
  form.value = cloneItem(props.item);
109
114
  }
110
115
  });
116
+ const deleteDraftFromIndexedDB = (draftId) => {
117
+ try {
118
+ const req = indexedDB.open("PukaadDraftsDB", 1);
119
+ req.onsuccess = (e) => {
120
+ const db = e.target.result;
121
+ if (!db.objectStoreNames.contains("blogDrafts")) return;
122
+ const tx = db.transaction("blogDrafts", "readwrite");
123
+ tx.objectStore("blogDrafts").delete(draftId);
124
+ };
125
+ } catch (e) {
126
+ console.error("Failed to delete draft:", e);
127
+ }
128
+ };
111
129
  const onClose = async () => {
112
130
  const isModified = JSON.stringify(form.value) !== JSON.stringify(props.item);
113
131
  if (isModified) {
@@ -120,6 +138,8 @@ const onClose = async () => {
120
138
  showCancelBtn: true
121
139
  });
122
140
  if (isConfirmed) {
141
+ const draftId = form.value.id && String(form.value.id).startsWith("draft_") ? form.value.id : null;
142
+ if (draftId) deleteDraftFromIndexedDB(draftId);
123
143
  isOpen.value = false;
124
144
  }
125
145
  } else {
@@ -127,10 +147,8 @@ const onClose = async () => {
127
147
  }
128
148
  };
129
149
  const onSaveDraft = async () => {
130
- const config = useRuntimeConfig();
131
- const isOffice = config.public.APP_TYPE === "OFFICE";
132
150
  if (isOffice) {
133
- isLoading.value = true;
151
+ loading.value = true;
134
152
  try {
135
153
  let coverImageUrl = "";
136
154
  if (form.value.coverImage?.[0]?.file) {
@@ -160,13 +178,12 @@ const onSaveDraft = async () => {
160
178
  error?.data?.message?.description || "\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E41\u0E1A\u0E1A\u0E23\u0E48\u0E32\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08"
161
179
  );
162
180
  } finally {
163
- isLoading.value = false;
181
+ loading.value = false;
164
182
  }
165
183
  } else {
166
184
  try {
167
185
  const rawCoverImage = form.value.coverImage?.map((img) => ({
168
186
  file: img.file,
169
- // File object is not a proxy, safe to copy reference
170
187
  url: img.url
171
188
  })) || [];
172
189
  const draftData = {
@@ -207,7 +224,6 @@ const onSaveDraft = async () => {
207
224
  };
208
225
  const uploadImage = async (file) => {
209
226
  try {
210
- const config = useRuntimeConfig();
211
227
  const baseURL = config.public.BASE_URL_API;
212
228
  const res = await $fetch(`${baseURL}/storage/presigned-urls`, {
213
229
  method: "POST",
@@ -216,13 +232,10 @@ const uploadImage = async (file) => {
216
232
  },
217
233
  body: JSON.stringify({
218
234
  file_name: [file.name],
219
- state: config.public.APP_TYPE === "OFFICE" ? "office-blog-cover" : "blog-cover"
235
+ state: isOffice ? "office-blog-cover" : "blog-cover"
220
236
  }),
221
237
  onRequest({ options }) {
222
- const { APP_TYPE } = config.public;
223
- const secId = useCookie(
224
- APP_TYPE === "OFFICE" ? "OFFICE_SEC_ID" : "SEC_ID"
225
- );
238
+ const secId = useCookie(isOffice ? "OFFICE_SEC_ID" : "SEC_ID");
226
239
  if (secId.value) {
227
240
  options.headers = new Headers(options.headers);
228
241
  options.headers.set("Authorization", `Bearer ${secId.value}`);
@@ -247,7 +260,7 @@ const uploadImage = async (file) => {
247
260
  }
248
261
  };
249
262
  const onSubmit = async () => {
250
- isLoading.value = true;
263
+ loading.value = true;
251
264
  try {
252
265
  let coverImageUrl = "";
253
266
  if (form.value.coverImage && form.value.coverImage.length > 0) {
@@ -258,31 +271,33 @@ const onSubmit = async () => {
258
271
  coverImageUrl = fileItem.url;
259
272
  }
260
273
  }
261
- const payload = {
262
- title: form.value.title,
263
- content: JSON.stringify(form.value.content),
264
- tags: form.value.tags.map((t) => t.name || t),
265
- cover_image_url: coverImageUrl
266
- };
267
- const config = useRuntimeConfig();
268
- const isOffice = config.public.APP_TYPE === "OFFICE";
269
274
  const createEndpoint = isOffice ? "/office/blogs" : "/profiles/me/blog";
270
275
  const res = await api(isEditMode.value ? `/blogs/${form.value.id}` : createEndpoint, {
271
276
  method: isEditMode.value ? "PUT" : "POST",
272
- body: payload
277
+ body: {
278
+ title: form.value.title,
279
+ content: JSON.stringify(form.value.content),
280
+ tags: form.value.tags.map((t) => t.name || t),
281
+ cover_image_url: coverImageUrl
282
+ }
273
283
  });
274
284
  $toast.success(
275
285
  isEditMode.value ? "\u0E2D\u0E31\u0E1B\u0E40\u0E14\u0E15\u0E1A\u0E17\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08" : "\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E1A\u0E17\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08"
276
286
  );
287
+ const draftId = props.item?.id;
288
+ if (draftId && String(draftId).startsWith("draft_")) {
289
+ deleteDraftFromIndexedDB(draftId);
290
+ }
277
291
  emit("submit", form.value);
278
292
  emit("success", res.data);
279
293
  isOpen.value = false;
280
294
  } catch (error) {
281
- const msg = error?.data?.message?.description || error?.message || "\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E1A\u0E17\u0E04\u0E27\u0E32\u0E21";
282
- $toast.error(msg);
295
+ $toast.error(
296
+ error?.data?.message?.description || error?.message || "\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E1A\u0E17\u0E04\u0E27\u0E32\u0E21"
297
+ );
283
298
  console.error("Submit error:", error);
284
299
  } finally {
285
- isLoading.value = false;
300
+ loading.value = false;
286
301
  }
287
302
  };
288
303
  </script>
@@ -1,71 +1,71 @@
1
1
  <template>
2
- <Drawer
3
- class="w-[748px]"
4
- :title="drawerTitle"
5
- @close="onClose"
6
- disabled-auto-close
7
- @submit="onSubmit"
8
- v-model="isOpen"
9
- >
10
- <div class="flex flex-col gap-[16px]">
11
- <div class="flex gap-[16px]">
12
- <div
13
- class="w-[178px] h-[100px] rounded-[8px] overflow-hidden flex-shrink-0"
14
- >
15
- <Image
16
- v-if="form.coverImage"
17
- :src="form.coverImage"
18
- width="auto"
19
- height="auto"
20
- fit="cover"
21
- />
22
- </div>
23
- <div class="flex flex-col gap-[4px]">
24
- <div class="font-body-large-prominent">
25
- {{ form.placeName }}
26
- </div>
27
- <div class="font-body-small text-gray">
28
- {{ form.address }}
29
- </div>
30
- </div>
31
- </div>
32
- <div class="flex items-center justify-center">
33
- <InputRating v-model="form.rating" :size="40" />
34
- </div>
35
- <InputTextarea
36
- name="description"
37
- label="คำอธิบาย"
38
- placeholder="เขียนรีวิวของคุณ"
39
- showCounter
40
- v-model="form.description"
41
- class="min-h-[120px]"
42
- />
43
- <div class="flex flex-col gap-[8px]">
44
- <div class="flex flex-col gap-[4px]">
45
- <div class="text-gray font-body-large">เพิ่มภาพถ่าย</div>
46
- <div class="text-gray font-body-small">อัปโหลด 9 รายการ</div>
47
- </div>
48
- <InputFile
49
- :limit="9"
50
- name="photos"
51
- accept="image/jpeg,image/png,image/webp,image/bmp,image/gif"
52
- v-model="form.photos"
53
- />
54
- <div class="flex flex-col text-gray font-body-small">
55
- <div>รองรับไฟล์ *.jpg *.jpeg *.png *.webp *.bmp *.gif</div>
56
- <div>ขนาดไฟล์สูงสุด 30 mb</div>
57
- </div>
58
- </div>
59
- </div>
60
- <template #footer="{ meta }">
61
- <div class="flex justify-end gap-[16px] items-center">
62
- <Button variant="outline" @click="onClose">ยกเลิก</Button>
63
- <Button type="submit" color="primary" :disabled="form.rating === 0">
64
- ยืนยัน
65
- </Button>
66
- </div>
67
- </template>
68
- </Drawer>
2
+ <Drawer
3
+ class="w-[748px]"
4
+ :title="drawerTitle"
5
+ @close="onClose"
6
+ disabled-auto-close
7
+ @submit="onSubmit"
8
+ v-model="isOpen"
9
+ >
10
+ <div class="flex flex-col gap-[16px]">
11
+ <div class="flex gap-[16px]">
12
+ <div
13
+ class="w-[178px] h-[100px] rounded-[8px] overflow-hidden flex-shrink-0"
14
+ >
15
+ <Image
16
+ v-if="form.coverImage"
17
+ :src="form.coverImage"
18
+ width="auto"
19
+ height="auto"
20
+ fit="cover"
21
+ />
22
+ </div>
23
+ <div class="flex flex-col gap-[4px]">
24
+ <div class="font-body-large-prominent">
25
+ {{ form.placeName }}
26
+ </div>
27
+ <div class="font-body-small text-gray">
28
+ {{ form.address }}
29
+ </div>
30
+ </div>
31
+ </div>
32
+ <div class="flex items-center justify-center">
33
+ <InputRating v-model="form.rating" :size="40" />
34
+ </div>
35
+ <InputTextarea
36
+ name="description"
37
+ label="คำอธิบาย"
38
+ placeholder="เขียนรีวิวของคุณ"
39
+ showCounter
40
+ v-model="form.description"
41
+ class="min-h-[120px]"
42
+ />
43
+ <div class="flex flex-col gap-[8px]">
44
+ <div class="flex flex-col gap-[4px]">
45
+ <div class="text-gray font-body-large">เพิ่มภาพถ่าย</div>
46
+ <div class="text-gray font-body-small">อัปโหลด 9 รายการ</div>
47
+ </div>
48
+ <InputFile
49
+ :limit="9"
50
+ name="photos"
51
+ accept="image/jpeg,image/png,image/webp,image/bmp,image/gif"
52
+ v-model="form.photos"
53
+ />
54
+ <div class="flex flex-col text-gray font-body-small">
55
+ <div>รองรับไฟล์ *.jpg *.jpeg *.png *.webp *.bmp *.gif</div>
56
+ <div>ขนาดไฟล์สูงสุด 30 mb</div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ <template #footer="{ meta }">
61
+ <div class="flex justify-end gap-[16px] items-center">
62
+ <Button variant="outline" @click="onClose">ยกเลิก</Button>
63
+ <Button type="submit" color="primary" :disabled="form.rating === 0">
64
+ ยืนยัน
65
+ </Button>
66
+ </div>
67
+ </template>
68
+ </Drawer>
69
69
  </template>
70
70
 
71
71
  <script setup>