negodesign 0.0.70 → 0.0.72

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 (393) hide show
  1. package/README.md +115 -23
  2. package/dist/components/NegoDesign.svelte +7 -2
  3. package/dist/components/core/banner/CtaCardImageBanner.svelte +10 -25
  4. package/dist/components/core/carousel/badge/ui/CarouselBadge.svelte +3 -5
  5. package/dist/components/core/carousel/grid/shared/ui/CarouselGridSlot.svelte +2 -2
  6. package/dist/components/core/carousel/highlights/ui/CarouselHighlights.svelte +2 -2
  7. package/dist/components/core/carousel/product/ui/CarouselProduct.svelte +2 -2
  8. package/dist/components/core/carousel/promotion/ui/CarouselPromotion.svelte +2 -2
  9. package/dist/components/core/datatable/data/columns-create.d.ts +1 -1
  10. package/dist/components/core/datatable/data/data-table.d.ts +3 -3
  11. package/dist/components/core/datatable/data/resolve-cell-badge.svelte.d.ts +2 -2
  12. package/dist/components/core/datatable/data/resolve-cell-badge.svelte.js +2 -1
  13. package/dist/components/core/datatable/data/resolve-cell.svelte.d.ts +2 -2
  14. package/dist/components/core/datatable/data/resolve-header.svelte.d.ts +2 -2
  15. package/dist/components/core/datatable/ui/DataTableActions.svelte +1 -1
  16. package/dist/components/core/datatable/ui/DataTableActions.svelte.d.ts +1 -1
  17. package/dist/components/core/datatable/ui/DataTableContent.svelte +1 -1
  18. package/dist/components/core/datatable/ui/DataTableContent.svelte.d.ts +1 -1
  19. package/dist/components/core/datatable/ui/DataTableCore.svelte +23 -26
  20. package/dist/components/core/datatable/ui/DataTableListFilter.svelte +3 -2
  21. package/dist/components/core/datatable/ui/DataTableListFilter.svelte.d.ts +1 -1
  22. package/dist/components/core/datatable/ui/DataTableListPagination.svelte +1 -1
  23. package/dist/components/core/datatable/ui/DataTableListPagination.svelte.d.ts +1 -1
  24. package/dist/components/core/datatable/ui/columns-create.svelte.d.ts +1 -1
  25. package/dist/components/core/panel/LeftHero.svelte +2 -2
  26. package/dist/components/core/sidebar/data/nav-top-bar-sidebar.d.ts +13 -4
  27. package/dist/components/core/sidebar/ui/navbar/NavMenuBarSidebar.svelte +3 -3
  28. package/dist/components/core/sidebar/ui/navbar/NavMenuTopBarSidebar.svelte +0 -2
  29. package/dist/components/core/sidebar/ui/navbar/nav-menu-header-sidebar.svelte +4 -5
  30. package/dist/components/pages/product-details/shared/ProductDetailFilesVertical.svelte +0 -1
  31. package/dist/components/pages/profile-user/shared/ProfileUserAddress.svelte +2 -3
  32. package/dist/components/pages/profile-user/shared/ProfileUserTabs.svelte +3 -1
  33. package/dist/components/ui/avatar/avatar-fallback.svelte +22 -12
  34. package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +3 -2
  35. package/dist/components/ui/avatar/avatar-image.svelte +31 -9
  36. package/dist/components/ui/avatar/avatar-image.svelte.d.ts +3 -2
  37. package/dist/components/ui/avatar/avatar.svelte +23 -9
  38. package/dist/components/ui/avatar/avatar.svelte.d.ts +6 -3
  39. package/dist/components/ui/avatar/context.svelte.d.ts +7 -0
  40. package/dist/components/ui/avatar/context.svelte.js +10 -0
  41. package/dist/components/ui/badge/badge.svelte +24 -26
  42. package/dist/components/ui/badge/badge.svelte.d.ts +15 -33
  43. package/dist/components/ui/button/button.svelte +35 -31
  44. package/dist/components/ui/button/button.svelte.d.ts +24 -61
  45. package/dist/components/ui/carousel/autoplay.d.ts +7 -0
  46. package/dist/components/ui/carousel/autoplay.js +7 -0
  47. package/dist/components/ui/carousel/carousel-content.svelte +31 -17
  48. package/dist/components/ui/carousel/carousel-item.svelte +2 -3
  49. package/dist/components/ui/carousel/carousel-next.svelte +1 -1
  50. package/dist/components/ui/carousel/carousel-previous.svelte +1 -1
  51. package/dist/components/ui/carousel/carousel.svelte +155 -30
  52. package/dist/components/ui/carousel/context.d.ts +23 -14
  53. package/dist/components/ui/carousel/context.js +4 -4
  54. package/dist/components/ui/carousel/index.d.ts +2 -0
  55. package/dist/components/ui/carousel/index.js +1 -0
  56. package/dist/components/ui/checkbox/checkbox.svelte +74 -17
  57. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +17 -2
  58. package/dist/components/ui/collapsible/collapsible-content.svelte +27 -3
  59. package/dist/components/ui/collapsible/collapsible-content.svelte.d.ts +8 -2
  60. package/dist/components/ui/collapsible/collapsible-trigger.svelte +48 -3
  61. package/dist/components/ui/collapsible/collapsible-trigger.svelte.d.ts +10 -2
  62. package/dist/components/ui/collapsible/collapsible.svelte +62 -6
  63. package/dist/components/ui/collapsible/collapsible.svelte.d.ts +21 -2
  64. package/dist/components/ui/data-table/data-table.svelte.d.ts +2 -40
  65. package/dist/components/ui/data-table/data-table.svelte.js +1 -110
  66. package/dist/components/ui/data-table/flex-render.svelte +5 -5
  67. package/dist/components/ui/data-table/flex-render.svelte.d.ts +2 -2
  68. package/dist/components/ui/data-table/index.d.ts +2 -1
  69. package/dist/components/ui/data-table/index.js +1 -1
  70. package/dist/components/ui/data-table/table-core.svelte.d.ts +117 -0
  71. package/dist/components/ui/data-table/table-core.svelte.js +260 -0
  72. package/dist/components/ui/drawer/drawer-close.svelte +38 -3
  73. package/dist/components/ui/drawer/drawer-close.svelte.d.ts +10 -2
  74. package/dist/components/ui/drawer/drawer-content.svelte +67 -18
  75. package/dist/components/ui/drawer/drawer-content.svelte.d.ts +5 -4
  76. package/dist/components/ui/drawer/drawer-description.svelte +9 -6
  77. package/dist/components/ui/drawer/drawer-description.svelte.d.ts +3 -2
  78. package/dist/components/ui/drawer/drawer-nested.svelte +28 -5
  79. package/dist/components/ui/drawer/drawer-nested.svelte.d.ts +8 -1
  80. package/dist/components/ui/drawer/drawer-overlay.svelte +18 -9
  81. package/dist/components/ui/drawer/drawer-overlay.svelte.d.ts +3 -2
  82. package/dist/components/ui/drawer/drawer-portal.svelte +16 -3
  83. package/dist/components/ui/drawer/drawer-portal.svelte.d.ts +3 -1
  84. package/dist/components/ui/drawer/drawer-title.svelte +9 -6
  85. package/dist/components/ui/drawer/drawer-title.svelte.d.ts +3 -2
  86. package/dist/components/ui/drawer/drawer-trigger.svelte +39 -3
  87. package/dist/components/ui/drawer/drawer-trigger.svelte.d.ts +10 -2
  88. package/dist/components/ui/drawer/drawer.svelte +67 -4
  89. package/dist/components/ui/drawer/drawer.svelte.d.ts +23 -1
  90. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +18 -8
  91. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +8 -2
  92. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +53 -28
  93. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +8 -3
  94. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +93 -17
  95. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -6
  96. package/dist/components/ui/dropdown-menu/dropdown-menu-context.svelte.d.ts +26 -0
  97. package/dist/components/ui/dropdown-menu/dropdown-menu-context.svelte.js +27 -0
  98. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +14 -8
  99. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +6 -3
  100. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +18 -3
  101. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +7 -2
  102. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +42 -8
  103. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +9 -2
  104. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +9 -5
  105. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +5 -2
  106. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +3 -3
  107. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte.d.ts +5 -1
  108. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +36 -8
  109. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +9 -2
  110. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +59 -23
  111. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +12 -2
  112. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +11 -7
  113. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +6 -2
  114. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +26 -9
  115. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +8 -2
  116. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +39 -11
  117. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -2
  118. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +73 -3
  119. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte.d.ts +8 -1
  120. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +65 -3
  121. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +12 -2
  122. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +50 -3
  123. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +9 -1
  124. package/dist/components/ui/empty/empty-content.svelte +2 -5
  125. package/dist/components/ui/empty/empty-description.svelte +2 -5
  126. package/dist/components/ui/empty/empty-header.svelte +2 -2
  127. package/dist/components/ui/empty/empty-media.svelte +17 -16
  128. package/dist/components/ui/empty/empty-media.svelte.d.ts +10 -19
  129. package/dist/components/ui/empty/empty-title.svelte +2 -2
  130. package/dist/components/ui/empty/empty.svelte +2 -5
  131. package/dist/components/ui/input-otp/context.svelte.d.ts +22 -0
  132. package/dist/components/ui/input-otp/context.svelte.js +8 -0
  133. package/dist/components/ui/input-otp/input-otp-group.svelte +5 -2
  134. package/dist/components/ui/input-otp/input-otp-separator.svelte +5 -5
  135. package/dist/components/ui/input-otp/input-otp-slot.svelte +50 -17
  136. package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +7 -2
  137. package/dist/components/ui/input-otp/input-otp.svelte +167 -8
  138. package/dist/components/ui/input-otp/input-otp.svelte.d.ts +17 -2
  139. package/dist/components/ui/label/label.svelte +10 -10
  140. package/dist/components/ui/label/label.svelte.d.ts +3 -2
  141. package/dist/components/ui/language-switcher/language-switcher.svelte +4 -3
  142. package/dist/components/ui/light-switch/light-switch.svelte +12 -6
  143. package/dist/components/ui/phone-input/country-selector.svelte +64 -78
  144. package/dist/components/ui/phone-input/country-selector.svelte.d.ts +6 -6
  145. package/dist/components/ui/phone-input/flag.svelte +3 -12
  146. package/dist/components/ui/phone-input/flag.svelte.d.ts +1 -1
  147. package/dist/components/ui/phone-input/flags.d.ts +2 -1
  148. package/dist/components/ui/phone-input/flags.js +4 -8
  149. package/dist/components/ui/phone-input/index.d.ts +1 -1
  150. package/dist/components/ui/phone-input/phone-input.svelte +106 -21
  151. package/dist/components/ui/phone-input/phone-input.svelte.d.ts +1 -2
  152. package/dist/components/ui/phone-input/types.d.ts +16 -1
  153. package/dist/components/ui/popover/popover-close.svelte +22 -3
  154. package/dist/components/ui/popover/popover-close.svelte.d.ts +7 -2
  155. package/dist/components/ui/popover/popover-content.svelte +80 -18
  156. package/dist/components/ui/popover/popover-content.svelte.d.ts +10 -6
  157. package/dist/components/ui/popover/popover-context.svelte.d.ts +13 -0
  158. package/dist/components/ui/popover/popover-context.svelte.js +13 -0
  159. package/dist/components/ui/popover/popover-portal.svelte +3 -3
  160. package/dist/components/ui/popover/popover-portal.svelte.d.ts +5 -1
  161. package/dist/components/ui/popover/popover-trigger.svelte +62 -10
  162. package/dist/components/ui/popover/popover-trigger.svelte.d.ts +12 -2
  163. package/dist/components/ui/popover/popover.svelte +50 -3
  164. package/dist/components/ui/popover/popover.svelte.d.ts +9 -1
  165. package/dist/components/ui/separator/separator.svelte +17 -11
  166. package/dist/components/ui/separator/separator.svelte.d.ts +7 -2
  167. package/dist/components/ui/sidebar/context.svelte.d.ts +15 -23
  168. package/dist/components/ui/sidebar/context.svelte.js +33 -21
  169. package/dist/components/ui/sidebar/sidebar-content.svelte +1 -1
  170. package/dist/components/ui/sidebar/sidebar-footer.svelte +1 -1
  171. package/dist/components/ui/sidebar/sidebar-group-content.svelte +1 -1
  172. package/dist/components/ui/sidebar/sidebar-menu-action.svelte +3 -2
  173. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +35 -66
  174. package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +9 -38
  175. package/dist/components/ui/sidebar/sidebar-provider.svelte +28 -18
  176. package/dist/components/ui/sidebar/sidebar-provider.svelte.d.ts +3 -0
  177. package/dist/components/ui/sidebar/sidebar-rail.svelte +1 -1
  178. package/dist/components/ui/sidebar/sidebar-separator.svelte +11 -8
  179. package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +3 -11
  180. package/dist/components/ui/sidebar/sidebar-trigger.svelte +2 -2
  181. package/dist/components/ui/sidebar/sidebar.svelte +34 -23
  182. package/dist/components/ui/sidebar/sidebar.svelte.d.ts +1 -1
  183. package/dist/components/ui/skeleton/skeleton.svelte +7 -4
  184. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +1 -1
  185. package/dist/components/ui/star-rating/star-rating-star.svelte +57 -31
  186. package/dist/components/ui/star-rating/star-rating-star.svelte.d.ts +1 -1
  187. package/dist/components/ui/star-rating/star-rating.svelte +143 -13
  188. package/dist/components/ui/star-rating/star-rating.svelte.d.ts +31 -2
  189. package/dist/components/ui/star-rating/types.d.ts +6 -1
  190. package/dist/components/ui/underline-tabs/underline-tabs-content.svelte +26 -9
  191. package/dist/components/ui/underline-tabs/underline-tabs-content.svelte.d.ts +9 -2
  192. package/dist/components/ui/underline-tabs/underline-tabs-list.svelte +15 -8
  193. package/dist/components/ui/underline-tabs/underline-tabs-list.svelte.d.ts +8 -2
  194. package/dist/components/ui/underline-tabs/underline-tabs-trigger.svelte +65 -34
  195. package/dist/components/ui/underline-tabs/underline-tabs-trigger.svelte.d.ts +14 -2
  196. package/dist/components/ui/underline-tabs/underline-tabs.svelte +49 -20
  197. package/dist/components/ui/underline-tabs/underline-tabs.svelte.d.ts +10 -2
  198. package/dist/components/ui/underline-tabs/underline-tabs.svelte.js +6 -59
  199. package/dist/docs/ApiTable.svelte +42 -0
  200. package/dist/docs/ApiTable.svelte.d.ts +7 -0
  201. package/dist/docs/CodeBlock.svelte +26 -0
  202. package/dist/docs/CodeBlock.svelte.d.ts +7 -0
  203. package/dist/docs/DocsHeader.svelte +25 -0
  204. package/dist/docs/DocsHeader.svelte.d.ts +6 -0
  205. package/dist/docs/DocsSidebar.svelte +99 -0
  206. package/dist/docs/DocsSidebar.svelte.d.ts +3 -0
  207. package/dist/docs/components.d.ts +27 -0
  208. package/dist/docs/components.js +897 -0
  209. package/dist/globals.css +460 -1617
  210. package/dist/styles/globals.css +136 -2
  211. package/dist/theme.svelte.d.ts +7 -0
  212. package/dist/theme.svelte.js +33 -0
  213. package/dist/utils.d.ts +4 -4
  214. package/dist/utils.js +18 -3
  215. package/package.json +4 -34
  216. package/dist/components/ui/chart/chart-container.svelte +0 -80
  217. package/dist/components/ui/chart/chart-container.svelte.d.ts +0 -9
  218. package/dist/components/ui/chart/chart-style.svelte +0 -37
  219. package/dist/components/ui/chart/chart-style.svelte.d.ts +0 -8
  220. package/dist/components/ui/chart/chart-tooltip.svelte +0 -184
  221. package/dist/components/ui/chart/chart-tooltip.svelte.d.ts +0 -27
  222. package/dist/components/ui/chart/chart-utils.d.ts +0 -36
  223. package/dist/components/ui/chart/chart-utils.js +0 -38
  224. package/dist/components/ui/chart/index.d.ts +0 -4
  225. package/dist/components/ui/chart/index.js +0 -4
  226. package/dist/components/ui/command/command-dialog.svelte +0 -42
  227. package/dist/components/ui/command/command-dialog.svelte.d.ts +0 -14
  228. package/dist/components/ui/command/command-empty.svelte +0 -17
  229. package/dist/components/ui/command/command-empty.svelte.d.ts +0 -4
  230. package/dist/components/ui/command/command-group.svelte +0 -33
  231. package/dist/components/ui/command/command-group.svelte.d.ts +0 -7
  232. package/dist/components/ui/command/command-input.svelte +0 -33
  233. package/dist/components/ui/command/command-input.svelte.d.ts +0 -4
  234. package/dist/components/ui/command/command-item.svelte +0 -27
  235. package/dist/components/ui/command/command-item.svelte.d.ts +0 -4
  236. package/dist/components/ui/command/command-link-item.svelte +0 -20
  237. package/dist/components/ui/command/command-link-item.svelte.d.ts +0 -4
  238. package/dist/components/ui/command/command-list.svelte +0 -20
  239. package/dist/components/ui/command/command-list.svelte.d.ts +0 -4
  240. package/dist/components/ui/command/command-loading.svelte +0 -7
  241. package/dist/components/ui/command/command-loading.svelte.d.ts +0 -4
  242. package/dist/components/ui/command/command-separator.svelte +0 -17
  243. package/dist/components/ui/command/command-separator.svelte.d.ts +0 -4
  244. package/dist/components/ui/command/command-shortcut.svelte +0 -23
  245. package/dist/components/ui/command/command-shortcut.svelte.d.ts +0 -5
  246. package/dist/components/ui/command/command.svelte +0 -28
  247. package/dist/components/ui/command/command.svelte.d.ts +0 -8
  248. package/dist/components/ui/command/index.d.ts +0 -12
  249. package/dist/components/ui/command/index.js +0 -14
  250. package/dist/components/ui/dialog/dialog-close.svelte +0 -11
  251. package/dist/components/ui/dialog/dialog-close.svelte.d.ts +0 -4
  252. package/dist/components/ui/dialog/dialog-content.svelte +0 -48
  253. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +0 -13
  254. package/dist/components/ui/dialog/dialog-description.svelte +0 -20
  255. package/dist/components/ui/dialog/dialog-description.svelte.d.ts +0 -4
  256. package/dist/components/ui/dialog/dialog-footer.svelte +0 -32
  257. package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +0 -8
  258. package/dist/components/ui/dialog/dialog-header.svelte +0 -20
  259. package/dist/components/ui/dialog/dialog-header.svelte.d.ts +0 -5
  260. package/dist/components/ui/dialog/dialog-overlay.svelte +0 -20
  261. package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +0 -4
  262. package/dist/components/ui/dialog/dialog-portal.svelte +0 -7
  263. package/dist/components/ui/dialog/dialog-portal.svelte.d.ts +0 -3
  264. package/dist/components/ui/dialog/dialog-title.svelte +0 -17
  265. package/dist/components/ui/dialog/dialog-title.svelte.d.ts +0 -4
  266. package/dist/components/ui/dialog/dialog-trigger.svelte +0 -11
  267. package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +0 -4
  268. package/dist/components/ui/dialog/dialog.svelte +0 -7
  269. package/dist/components/ui/dialog/dialog.svelte.d.ts +0 -3
  270. package/dist/components/ui/dialog/index.d.ts +0 -11
  271. package/dist/components/ui/dialog/index.js +0 -13
  272. package/dist/components/ui/input-group/index.d.ts +0 -7
  273. package/dist/components/ui/input-group/index.js +0 -9
  274. package/dist/components/ui/input-group/input-group-addon.svelte +0 -59
  275. package/dist/components/ui/input-group/input-group-addon.svelte.d.ts +0 -38
  276. package/dist/components/ui/input-group/input-group-button.svelte +0 -49
  277. package/dist/components/ui/input-group/input-group-button.svelte.d.ts +0 -32
  278. package/dist/components/ui/input-group/input-group-input.svelte +0 -23
  279. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +0 -11
  280. package/dist/components/ui/input-group/input-group-text.svelte +0 -22
  281. package/dist/components/ui/input-group/input-group-text.svelte.d.ts +0 -5
  282. package/dist/components/ui/input-group/input-group-textarea.svelte +0 -23
  283. package/dist/components/ui/input-group/input-group-textarea.svelte.d.ts +0 -3
  284. package/dist/components/ui/input-group/input-group.svelte +0 -24
  285. package/dist/components/ui/input-group/input-group.svelte.d.ts +0 -5
  286. package/dist/components/ui/navigation-menu/index.d.ts +0 -9
  287. package/dist/components/ui/navigation-menu/index.js +0 -11
  288. package/dist/components/ui/navigation-menu/navigation-menu-content.svelte +0 -20
  289. package/dist/components/ui/navigation-menu/navigation-menu-content.svelte.d.ts +0 -4
  290. package/dist/components/ui/navigation-menu/navigation-menu-indicator.svelte +0 -22
  291. package/dist/components/ui/navigation-menu/navigation-menu-indicator.svelte.d.ts +0 -4
  292. package/dist/components/ui/navigation-menu/navigation-menu-item.svelte +0 -17
  293. package/dist/components/ui/navigation-menu/navigation-menu-item.svelte.d.ts +0 -4
  294. package/dist/components/ui/navigation-menu/navigation-menu-link.svelte +0 -17
  295. package/dist/components/ui/navigation-menu/navigation-menu-link.svelte.d.ts +0 -4
  296. package/dist/components/ui/navigation-menu/navigation-menu-list.svelte +0 -20
  297. package/dist/components/ui/navigation-menu/navigation-menu-list.svelte.d.ts +0 -4
  298. package/dist/components/ui/navigation-menu/navigation-menu-trigger.svelte +0 -30
  299. package/dist/components/ui/navigation-menu/navigation-menu-trigger.svelte.d.ts +0 -5
  300. package/dist/components/ui/navigation-menu/navigation-menu-viewport.svelte +0 -22
  301. package/dist/components/ui/navigation-menu/navigation-menu-viewport.svelte.d.ts +0 -4
  302. package/dist/components/ui/navigation-menu/navigation-menu.svelte +0 -31
  303. package/dist/components/ui/navigation-menu/navigation-menu.svelte.d.ts +0 -7
  304. package/dist/components/ui/scroll-area/index.d.ts +0 -3
  305. package/dist/components/ui/scroll-area/index.js +0 -5
  306. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +0 -30
  307. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +0 -4
  308. package/dist/components/ui/scroll-area/scroll-area.svelte +0 -43
  309. package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +0 -11
  310. package/dist/components/ui/select/index.d.ts +0 -12
  311. package/dist/components/ui/select/index.js +0 -14
  312. package/dist/components/ui/select/select-content.svelte +0 -45
  313. package/dist/components/ui/select/select-content.svelte.d.ts +0 -11
  314. package/dist/components/ui/select/select-group-heading.svelte +0 -21
  315. package/dist/components/ui/select/select-group-heading.svelte.d.ts +0 -10
  316. package/dist/components/ui/select/select-group.svelte +0 -17
  317. package/dist/components/ui/select/select-group.svelte.d.ts +0 -4
  318. package/dist/components/ui/select/select-item.svelte +0 -41
  319. package/dist/components/ui/select/select-item.svelte.d.ts +0 -4
  320. package/dist/components/ui/select/select-label.svelte +0 -20
  321. package/dist/components/ui/select/select-label.svelte.d.ts +0 -6
  322. package/dist/components/ui/select/select-portal.svelte +0 -7
  323. package/dist/components/ui/select/select-portal.svelte.d.ts +0 -3
  324. package/dist/components/ui/select/select-scroll-down-button.svelte +0 -21
  325. package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +0 -4
  326. package/dist/components/ui/select/select-scroll-up-button.svelte +0 -21
  327. package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +0 -4
  328. package/dist/components/ui/select/select-separator.svelte +0 -18
  329. package/dist/components/ui/select/select-separator.svelte.d.ts +0 -4
  330. package/dist/components/ui/select/select-trigger.svelte +0 -30
  331. package/dist/components/ui/select/select-trigger.svelte.d.ts +0 -8
  332. package/dist/components/ui/select/select.svelte +0 -11
  333. package/dist/components/ui/select/select.svelte.d.ts +0 -3
  334. package/dist/components/ui/sheet/index.d.ts +0 -11
  335. package/dist/components/ui/sheet/index.js +0 -13
  336. package/dist/components/ui/sheet/sheet-close.svelte +0 -7
  337. package/dist/components/ui/sheet/sheet-close.svelte.d.ts +0 -4
  338. package/dist/components/ui/sheet/sheet-content.svelte +0 -56
  339. package/dist/components/ui/sheet/sheet-content.svelte.d.ts +0 -15
  340. package/dist/components/ui/sheet/sheet-description.svelte +0 -17
  341. package/dist/components/ui/sheet/sheet-description.svelte.d.ts +0 -4
  342. package/dist/components/ui/sheet/sheet-footer.svelte +0 -20
  343. package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +0 -5
  344. package/dist/components/ui/sheet/sheet-header.svelte +0 -20
  345. package/dist/components/ui/sheet/sheet-header.svelte.d.ts +0 -5
  346. package/dist/components/ui/sheet/sheet-overlay.svelte +0 -17
  347. package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +0 -4
  348. package/dist/components/ui/sheet/sheet-portal.svelte +0 -7
  349. package/dist/components/ui/sheet/sheet-portal.svelte.d.ts +0 -3
  350. package/dist/components/ui/sheet/sheet-title.svelte +0 -17
  351. package/dist/components/ui/sheet/sheet-title.svelte.d.ts +0 -4
  352. package/dist/components/ui/sheet/sheet-trigger.svelte +0 -7
  353. package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +0 -4
  354. package/dist/components/ui/sheet/sheet.svelte +0 -7
  355. package/dist/components/ui/sheet/sheet.svelte.d.ts +0 -3
  356. package/dist/components/ui/spinner/index.d.ts +0 -1
  357. package/dist/components/ui/spinner/index.js +0 -1
  358. package/dist/components/ui/spinner/spinner.svelte +0 -26
  359. package/dist/components/ui/spinner/spinner.svelte.d.ts +0 -4
  360. package/dist/components/ui/tabs/index.d.ts +0 -5
  361. package/dist/components/ui/tabs/index.js +0 -7
  362. package/dist/components/ui/tabs/tabs-content.svelte +0 -17
  363. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +0 -4
  364. package/dist/components/ui/tabs/tabs-list.svelte +0 -40
  365. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +0 -25
  366. package/dist/components/ui/tabs/tabs-trigger.svelte +0 -23
  367. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +0 -4
  368. package/dist/components/ui/tabs/tabs.svelte +0 -19
  369. package/dist/components/ui/tabs/tabs.svelte.d.ts +0 -4
  370. package/dist/components/ui/textarea/index.d.ts +0 -2
  371. package/dist/components/ui/textarea/index.js +0 -4
  372. package/dist/components/ui/textarea/textarea.svelte +0 -23
  373. package/dist/components/ui/textarea/textarea.svelte.d.ts +0 -5
  374. package/dist/components/ui/tooltip/index.d.ts +0 -6
  375. package/dist/components/ui/tooltip/index.js +0 -8
  376. package/dist/components/ui/tooltip/tooltip-content.svelte +0 -52
  377. package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +0 -11
  378. package/dist/components/ui/tooltip/tooltip-portal.svelte +0 -7
  379. package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +0 -4
  380. package/dist/components/ui/tooltip/tooltip-provider.svelte +0 -7
  381. package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +0 -4
  382. package/dist/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  383. package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +0 -25
  384. package/dist/components/ui/tooltip/tooltip.svelte +0 -7
  385. package/dist/components/ui/tooltip/tooltip.svelte.d.ts +0 -25
  386. package/dist/vitest-examples/Welcome.svelte +0 -8
  387. package/dist/vitest-examples/Welcome.svelte.d.ts +0 -13
  388. package/dist/vitest-examples/Welcome.svelte.spec.d.ts +0 -1
  389. package/dist/vitest-examples/Welcome.svelte.spec.js +0 -11
  390. package/dist/vitest-examples/greet.d.ts +0 -1
  391. package/dist/vitest-examples/greet.js +0 -3
  392. package/dist/vitest-examples/greet.spec.d.ts +0 -1
  393. package/dist/vitest-examples/greet.spec.js +0 -7
@@ -1,101 +1,87 @@
1
+ <script lang="ts" module>
2
+ import type { Country } from './types';
3
+
4
+ export const COUNTRIES: Country[] = [
5
+ { id: 'ao', iso2: 'ao', name: 'Angola', dialCode: '244' },
6
+ { id: 'br', iso2: 'br', name: 'Brazil', dialCode: '55' },
7
+ { id: 'cv', iso2: 'cv', name: 'Cape Verde', dialCode: '238' },
8
+ { id: 'cn', iso2: 'cn', name: 'China', dialCode: '86' },
9
+ { id: 'fr', iso2: 'fr', name: 'France', dialCode: '33' },
10
+ { id: 'gw', iso2: 'gw', name: 'Guinea-Bissau', dialCode: '245' },
11
+ { id: 'jp', iso2: 'jp', name: 'Japan', dialCode: '81' },
12
+ { id: 'mz', iso2: 'mz', name: 'Mozambique', dialCode: '258' },
13
+ { id: 'pt', iso2: 'pt', name: 'Portugal', dialCode: '351' },
14
+ { id: 'st', iso2: 'st', name: 'São Tomé and Príncipe', dialCode: '239' },
15
+ { id: 'za', iso2: 'za', name: 'South Africa', dialCode: '27' },
16
+ { id: 'es', iso2: 'es', name: 'Spain', dialCode: '34' },
17
+ { id: 'gb', iso2: 'gb', name: 'United Kingdom', dialCode: '44' },
18
+ { id: 'us', iso2: 'us', name: 'United States', dialCode: '1' }
19
+ ];
20
+ </script>
21
+
1
22
  <script lang="ts">
2
- import * as Popover from '../popover';
3
- import Button from '../button/button.svelte';
4
- import * as Command from '../command';
5
- import { ScrollArea } from '../scroll-area';
6
- import CheckIcon from '@lucide/svelte/icons/check';
7
- import ChevronsUpDownIcon from '@lucide/svelte/icons/chevrons-up-down';
8
23
  import { cn } from '../../../utils.js';
9
- import Flag from './flag.svelte';
10
- import type { Country, CountryCode } from 'svelte-tel-input/types';
24
+ import { HugeiconsIcon } from '@hugeicons/svelte';
25
+ import { GlobalIcon, UnfoldMoreIcon } from '@hugeicons/core-free-icons';
26
+ import type { CountryCode } from './types';
11
27
 
12
28
  interface Props {
13
- /** List of countries */
14
- countries: Country[];
15
- disabled?: boolean;
16
29
  selected?: CountryCode | null;
30
+ dialCode?: string;
31
+ disabled?: boolean;
17
32
  onselect?: (val: CountryCode | null) => void;
18
- /** Default ordering is alphabetical by country name supply this function to customize the sorting behavior */
19
33
  order?: (a: Country, b: Country) => number;
20
34
  }
21
35
 
22
36
  let {
23
- countries,
24
- disabled = false,
25
37
  selected = $bindable(null),
38
+ // eslint-disable-next-line no-useless-assignment
39
+ dialCode = $bindable(''),
40
+ disabled = false,
26
41
  onselect = undefined,
27
42
  order = (a, b) => {
28
43
  return a.name.localeCompare(b.name);
29
44
  }
30
45
  }: Props = $props();
31
46
 
32
- let selectedCountry = $derived(countries.find((a) => a.iso2 == selected));
47
+ let ordered = $derived(COUNTRIES.slice().sort(order));
33
48
 
34
- let open = $state(false);
35
- let selectedValue = $state(false);
36
-
37
- function selectCountry(country: Country) {
38
- selected = country.iso2;
39
- selectedValue = true;
40
- open = false;
49
+ function handleChange(e: Event) {
50
+ selected = (e.currentTarget as HTMLSelectElement).value;
41
51
  onselect?.(selected);
42
52
  }
53
+
54
+ $effect(() => {
55
+ const country = COUNTRIES.find((c) => c.iso2 === selected);
56
+ dialCode = country?.dialCode ?? '';
57
+ });
43
58
  </script>
44
59
 
45
- <Popover.Root bind:open>
46
- <Popover.Trigger>
47
- {#snippet child({ props })}
48
- <Button
49
- {...props}
50
- type="button"
51
- variant="outline"
52
- class={cn('flex shrink-0 gap-1 rounded-l-lg rounded-r-none px-3')}
53
- {disabled}
54
- >
55
- <Flag country={selectedCountry} />
56
- <ChevronsUpDownIcon
57
- class={cn('-mr-2 h-4 w-4 opacity-50', disabled ? 'hidden' : 'opacity-100')}
58
- />
59
- </Button>
60
- {/snippet}
61
- </Popover.Trigger>
62
- <Popover.Content
63
- class="w-[300px] p-0"
64
- align="start"
65
- onCloseAutoFocus={(e) => {
66
- if (selectedValue) {
67
- selectedValue = false;
68
- e.preventDefault();
69
- }
70
- }}
60
+ <div class="relative flex shrink-0 items-center">
61
+ <HugeiconsIcon
62
+ icon={GlobalIcon}
63
+ strokeWidth={2}
64
+ class="text-muted-foreground pointer-events-none absolute left-2.5 size-4"
65
+ />
66
+ <select
67
+ value={selected ?? ''}
68
+ onchange={handleChange}
69
+ aria-label="Country code"
70
+ {disabled}
71
+ class={cn(
72
+ 'border-input bg-input/30 focus-visible:ring-ring/50 dark:bg-input/30 focus-visible:border-ring h-9 w-fit appearance-none rounded-l-md rounded-r-none border py-1 pr-8 pl-8 text-sm transition-[color,box-shadow] focus-visible:ring-[3px] outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>option]:bg-background',
73
+ disabled ? 'cursor-not-allowed opacity-50' : ''
74
+ )}
71
75
  >
72
- <Command.Root>
73
- <Command.Input placeholder="Search..." />
74
- <Command.List>
75
- <ScrollArea class="h-72">
76
- <Command.Empty>No country found.</Command.Empty>
77
- <Command.Group class="overflow-clip">
78
- {#each countries.sort(order) as country (country.id)}
79
- <Command.Item
80
- class="gap-2 [&_.cn-command-item-indicator]:hidden"
81
- value={country.name}
82
- onSelect={() => selectCountry(country)}
83
- >
84
- <Flag {country} />
85
- <span class="flex-1 text-sm">{country.name}</span>
86
- <span class="text-foreground/50 text-sm">
87
- +{country.dialCode}
88
- </span>
89
- <div class="w-4">
90
- {#if country.iso2 == selected}
91
- <CheckIcon class="phone-input-check-icon size-4" />
92
- {/if}
93
- </div>
94
- </Command.Item>
95
- {/each}
96
- </Command.Group>
97
- </ScrollArea>
98
- </Command.List>
99
- </Command.Root>
100
- </Popover.Content>
101
- </Popover.Root>
76
+ {#each ordered as country (country.id)}
77
+ <option value={country.iso2}>
78
+ {country.name} (+{country.dialCode})
79
+ </option>
80
+ {/each}
81
+ </select>
82
+ <HugeiconsIcon
83
+ icon={UnfoldMoreIcon}
84
+ strokeWidth={2}
85
+ class="text-muted-foreground pointer-events-none absolute right-2.5 size-4"
86
+ />
87
+ </div>
@@ -1,13 +1,13 @@
1
- import type { Country, CountryCode } from 'svelte-tel-input/types';
1
+ import type { Country } from './types';
2
+ export declare const COUNTRIES: Country[];
3
+ import type { CountryCode } from './types';
2
4
  interface Props {
3
- /** List of countries */
4
- countries: Country[];
5
- disabled?: boolean;
6
5
  selected?: CountryCode | null;
6
+ dialCode?: string;
7
+ disabled?: boolean;
7
8
  onselect?: (val: CountryCode | null) => void;
8
- /** Default ordering is alphabetical by country name supply this function to customize the sorting behavior */
9
9
  order?: (a: Country, b: Country) => number;
10
10
  }
11
- declare const CountrySelector: import("svelte").Component<Props, {}, "selected">;
11
+ declare const CountrySelector: import("svelte").Component<Props, {}, "selected" | "dialCode">;
12
12
  type CountrySelector = ReturnType<typeof CountrySelector>;
13
13
  export default CountrySelector;
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
- import type { Country } from 'svelte-tel-input/types';
3
- import { getFlag } from './flags';
2
+ import type { Country } from './types';
4
3
 
5
4
  interface Props {
6
5
  country?: Country | null;
@@ -9,13 +8,5 @@
9
8
  let { country = null }: Props = $props();
10
9
  </script>
11
10
 
12
- <span
13
- class="bg-foreground/20 flex h-4 w-6 shrink-0 overflow-clip rounded-sm [&>svg]:h-4! [&>svg]:w-6!"
14
- >
15
- {#await getFlag(country) then flag}
16
- {#if flag}
17
- <!-- eslint-disable-next-line svelte/no-at-html-tags -->
18
- {@html flag}
19
- {/if}
20
- {/await}
21
- </span>
11
+ <span class="bg-foreground/20 flex h-4 w-6 shrink-0 overflow-clip rounded-sm">
12
+ </span>
@@ -1,4 +1,4 @@
1
- import type { Country } from 'svelte-tel-input/types';
1
+ import type { Country } from './types';
2
2
  interface Props {
3
3
  country?: Country | null;
4
4
  }
@@ -1,2 +1,3 @@
1
- import type { Country } from 'svelte-tel-input/types';
1
+ import type { Country, CountryCode } from './types';
2
+ export declare function hasFlag(code: CountryCode): boolean;
2
3
  export declare function getFlag(country: Country | null): Promise<string | null>;
@@ -1,10 +1,6 @@
1
- import { hasFlag } from 'country-flag-icons';
2
- let flagIcons = null;
1
+ export function hasFlag(code) {
2
+ return false;
3
+ }
3
4
  export async function getFlag(country) {
4
- if (!country)
5
- return null;
6
- if (!hasFlag(country.iso2))
7
- return null;
8
- flagIcons ??= await import('country-flag-icons/string/3x2');
9
- return flagIcons[country.iso2] ?? null;
5
+ return null;
10
6
  }
@@ -1,3 +1,3 @@
1
1
  import PhoneInput, { defaultOptions } from './phone-input.svelte';
2
2
  export { PhoneInput, defaultOptions };
3
- export type { PhoneInputProps } from './types';
3
+ export type { PhoneInputProps, Country, CountryCode, DetailedValue, TelInputOptions } from './types';
@@ -1,4 +1,6 @@
1
1
  <script lang="ts" module>
2
+ import type { TelInputOptions } from './types';
3
+
2
4
  export const defaultOptions: TelInputOptions = {
3
5
  spaces: true,
4
6
  autoPlaceholder: true
@@ -6,16 +8,13 @@
6
8
  </script>
7
9
 
8
10
  <script lang="ts">
9
- import CountrySelector from './country-selector.svelte';
11
+ import CountrySelector, { COUNTRIES } from './country-selector.svelte';
10
12
  import { type PhoneInputProps } from '.';
11
13
  import { cn } from '../../../utils.js';
12
- import { TelInput, countries } from 'svelte-tel-input';
13
- import 'svelte-tel-input/styles/flags.css';
14
- import type { TelInputOptions } from 'svelte-tel-input/types';
15
14
 
16
15
  let {
17
16
  class: className = undefined,
18
- defaultCountry = null,
17
+ defaultCountry = 'ao',
19
18
  country = $bindable(defaultCountry),
20
19
  options = defaultOptions,
21
20
  placeholder,
@@ -23,6 +22,7 @@
23
22
  disabled = false,
24
23
  value = $bindable(''),
25
24
  valid = $bindable(true),
25
+ // eslint-disable-next-line no-useless-assignment
26
26
  detailedValue = $bindable(null),
27
27
  order = undefined,
28
28
  name = undefined,
@@ -30,34 +30,119 @@
30
30
  }: PhoneInputProps = $props();
31
31
 
32
32
  let el: HTMLInputElement | undefined = $state();
33
+ let dialCode = $state('');
34
+ let number = $state('');
35
+ let displayNumber = $state('');
36
+ let lastEmitted = $state('');
37
+
38
+ const currentCountry = $derived(COUNTRIES.find((c) => c.iso2 === country) ?? null);
39
+
40
+ function nationalDigits(input: string): string {
41
+ return input.replace(/\D/g, '');
42
+ }
43
+
44
+ function formatNational(input: string): string {
45
+ const digits = nationalDigits(input);
46
+ if (!options?.spaces) return digits;
47
+ return digits.match(/.{1,3}/g)?.join(' ') ?? '';
48
+ }
49
+
50
+ function formatFull(code: string, input: string): string {
51
+ const national = nationalDigits(input);
52
+ if (!national) return '';
53
+ return options?.spaces ? `+${code} ${formatNational(national)}` : `+${code}${national}`;
54
+ }
55
+
56
+ function parseValue(input: string): { code: string; number: string } | null {
57
+ const digits = nationalDigits(input);
58
+ if (!digits) return null;
59
+ for (const c of COUNTRIES) {
60
+ if (digits.startsWith(c.dialCode) && digits.length > c.dialCode.length) {
61
+ return { code: c.dialCode, number: digits.slice(c.dialCode.length) };
62
+ }
63
+ }
64
+ const exact = COUNTRIES.find((c) => digits === c.dialCode);
65
+ if (exact) return { code: exact.dialCode, number: '' };
66
+ return { code: '', number: digits };
67
+ }
68
+
69
+ function isValidNumber(input: string): boolean {
70
+ const length = nationalDigits(input).length;
71
+ if (!length) return true;
72
+ return length >= 6 && length <= 15;
73
+ }
74
+
75
+ function handleNumberInput(e: Event) {
76
+ const input = (e.currentTarget as HTMLInputElement).value;
77
+ displayNumber = input;
78
+ number = input.replace(/[^\d]/g, '');
79
+ }
33
80
 
34
81
  function focus() {
35
- // sort of an after update kinda thing
36
82
  setTimeout(() => {
37
83
  el?.focus();
38
84
  }, 0);
39
85
  }
86
+
87
+ $effect(() => {
88
+ const full = formatFull(dialCode, number);
89
+ if (value !== full) {
90
+ value = full;
91
+ lastEmitted = full;
92
+ }
93
+ valid = isValidNumber(number);
94
+ detailedValue = {
95
+ country: currentCountry,
96
+ code: dialCode,
97
+ number: nationalDigits(number)
98
+ };
99
+ });
100
+
101
+ $effect(() => {
102
+ const incoming = value;
103
+ if (incoming === lastEmitted) return;
104
+ lastEmitted = incoming;
105
+ const parsed = parseValue(incoming);
106
+ if (!parsed) {
107
+ if (!nationalDigits(incoming)) {
108
+ number = '';
109
+ displayNumber = '';
110
+ }
111
+ return;
112
+ }
113
+ if (parsed.code) {
114
+ const matched = COUNTRIES.find((c) => c.dialCode === parsed.code);
115
+ if (matched && matched.iso2 !== country) country = matched.iso2;
116
+ }
117
+ dialCode = parsed.code;
118
+ number = parsed.number;
119
+ displayNumber = formatNational(parsed.number);
120
+ });
40
121
  </script>
41
122
 
42
- <div class="flex place-items-center">
43
- <CountrySelector {order} {countries} bind:selected={country} onselect={focus} />
44
- <TelInput
45
- {name}
46
- bind:country
47
- bind:detailedValue
48
- bind:value
49
- bind:valid
50
- {readonly}
123
+ <div class={cn('flex h-9 w-full min-w-0 items-center', className)}>
124
+ <CountrySelector
125
+ {order}
51
126
  {disabled}
127
+ bind:selected={country}
128
+ bind:dialCode
129
+ onselect={focus}
130
+ />
131
+ <input
132
+ type="tel"
133
+ {name}
134
+ bind:this={el}
135
+ bind:value={displayNumber}
136
+ oninput={handleNumberInput}
52
137
  {placeholder}
53
- bind:el
54
- {options}
138
+ readonly={readonly}
139
+ {disabled}
140
+ aria-invalid={!valid}
55
141
  class={cn(
56
- 'border-input border-l-none bg-background selection:bg-primary dark:bg-input/30 selection:text-primary-foreground ring-offset-background placeholder:text-muted-foreground flex h-9 w-full min-w-0 rounded-l-none rounded-r-md border-y border-r px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
142
+ 'border-input border-l-none bg-background selection:bg-primary dark:bg-input/30 selection:text-primary-foreground ring-offset-background placeholder:text-muted-foreground flex h-9 w-full min-w-0 flex-1 rounded-r-md rounded-l-none border-y border-r px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
57
143
  'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
58
- 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
59
- className
144
+ 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive'
60
145
  )}
61
146
  {...rest}
62
147
  />
63
- </div>
148
+ </div>
@@ -1,7 +1,6 @@
1
+ import type { TelInputOptions } from './types';
1
2
  export declare const defaultOptions: TelInputOptions;
2
3
  import { type PhoneInputProps } from '.';
3
- import 'svelte-tel-input/styles/flags.css';
4
- import type { TelInputOptions } from 'svelte-tel-input/types';
5
4
  declare const PhoneInput: import("svelte").Component<PhoneInputProps, {}, "value" | "country" | "valid" | "detailedValue">;
6
5
  type PhoneInput = ReturnType<typeof PhoneInput>;
7
6
  export default PhoneInput;
@@ -1,4 +1,19 @@
1
- import type { Country, CountryCode, DetailedValue, TelInputOptions } from 'svelte-tel-input/types';
1
+ export type CountryCode = string;
2
+ export type Country = {
3
+ id: string;
4
+ iso2: string;
5
+ name: string;
6
+ dialCode: string;
7
+ };
8
+ export type DetailedValue = {
9
+ country: Country | null;
10
+ code: string;
11
+ number: string;
12
+ };
13
+ export type TelInputOptions = {
14
+ spaces?: boolean;
15
+ autoPlaceholder?: boolean;
16
+ };
2
17
  export type PhoneInputProps = {
3
18
  country?: CountryCode | null;
4
19
  defaultCountry?: CountryCode | null;
@@ -1,7 +1,26 @@
1
1
  <script lang="ts">
2
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
+ import { getPopoverContext } from "./popover-context.svelte.js";
3
+ import type { Snippet } from "svelte";
4
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
5
 
4
- let { ref = $bindable(null), ...restProps }: PopoverPrimitive.CloseProps = $props();
6
+ let {
7
+ ref = $bindable<HTMLButtonElement | null>(null),
8
+ children,
9
+ ...restProps
10
+ }: HTMLButtonAttributes & {
11
+ ref?: HTMLButtonElement | null;
12
+ children?: Snippet;
13
+ } = $props();
14
+
15
+ const store = getPopoverContext();
5
16
  </script>
6
17
 
7
- <PopoverPrimitive.Close bind:ref data-slot="popover-close" {...restProps} />
18
+ <button
19
+ bind:this={ref}
20
+ type="button"
21
+ data-slot="popover-close"
22
+ onclick={() => store.closeMenu()}
23
+ {...restProps}
24
+ >
25
+ {@render children?.()}
26
+ </button>
@@ -1,4 +1,9 @@
1
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
- declare const PopoverClose: import("svelte").Component<PopoverPrimitive.CloseProps, {}, "ref">;
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
+ type $$ComponentProps = HTMLButtonAttributes & {
4
+ ref?: HTMLButtonElement | null;
5
+ children?: Snippet;
6
+ };
7
+ declare const PopoverClose: import("svelte").Component<$$ComponentProps, {}, "ref">;
3
8
  type PopoverClose = ReturnType<typeof PopoverClose>;
4
9
  export default PopoverClose;
@@ -1,31 +1,93 @@
1
1
  <script lang="ts">
2
- import { Popover as PopoverPrimitive } from 'bits-ui';
3
- import PopoverPortal from './popover-portal.svelte';
4
- import { cn, type WithoutChildrenOrChild } from '../../../utils.js';
5
- import type { ComponentProps } from 'svelte';
2
+ import { getPopoverContext } from "./popover-context.svelte.js";
3
+ import { cn } from "../../../utils.js";
4
+ import type { Snippet } from "svelte";
5
+ import type { HTMLAttributes } from "svelte/elements";
6
6
 
7
7
  let {
8
- ref = $bindable(null),
9
- class: className,
8
+ ref = $bindable<HTMLDivElement | null>(null),
9
+ align = "center",
10
+ side = "bottom",
10
11
  sideOffset = 4,
11
- align = 'center',
12
12
  portalProps,
13
+ class: className,
14
+ children,
13
15
  ...restProps
14
- }: PopoverPrimitive.ContentProps & {
15
- portalProps?: WithoutChildrenOrChild<ComponentProps<typeof PopoverPortal>>;
16
+ }: HTMLAttributes<HTMLDivElement> & {
17
+ ref?: HTMLDivElement | null;
18
+ align?: "start" | "center" | "end";
19
+ side?: "top" | "right" | "bottom" | "left";
20
+ sideOffset?: number;
21
+ portalProps?: Record<string, unknown>;
22
+ class?: string;
23
+ children?: Snippet;
16
24
  } = $props();
25
+
26
+ const store = getPopoverContext();
27
+
28
+ $effect(() => {
29
+ if (!store.open) return;
30
+ function handlePointerDown(event: PointerEvent) {
31
+ const target = event.target as Node;
32
+ if (store.anchorEl?.contains(target)) return;
33
+ if (ref?.contains(target)) return;
34
+ store.closeMenu();
35
+ }
36
+ function handleKeydown(event: KeyboardEvent) {
37
+ if (event.key === "Escape") {
38
+ store.closeMenu();
39
+ store.anchorEl?.focus();
40
+ }
41
+ }
42
+ document.addEventListener("pointerdown", handlePointerDown);
43
+ document.addEventListener("keydown", handleKeydown);
44
+ return () => {
45
+ document.removeEventListener("pointerdown", handlePointerDown);
46
+ document.removeEventListener("keydown", handleKeydown);
47
+ };
48
+ });
49
+
50
+ let positionClasses = $derived.by(() => {
51
+ const horizontal = side === "right" || side === "left";
52
+ if (horizontal) {
53
+ const sideClass = side === "left" ? "right-full" : "left-full";
54
+ const alignClass =
55
+ align === "end"
56
+ ? "bottom-0"
57
+ : align === "start"
58
+ ? "top-0"
59
+ : "top-1/2 -translate-y-1/2";
60
+ const margin =
61
+ side === "left"
62
+ ? `margin-right: ${sideOffset + 4}px`
63
+ : `margin-left: ${sideOffset + 4}px`;
64
+ return { sideClass, alignClass, margin };
65
+ }
66
+ const sideClass = side === "top" ? "bottom-full" : "top-full";
67
+ const alignClass =
68
+ align === "end" ? "end-0" : align === "start" ? "start-0" : "start-1/2 -translate-x-1/2";
69
+ const margin =
70
+ side === "top"
71
+ ? `margin-bottom: ${sideOffset + 4}px`
72
+ : `margin-top: ${sideOffset + 4}px`;
73
+ return { sideClass, alignClass, margin };
74
+ });
17
75
  </script>
18
76
 
19
- <PopoverPortal {...portalProps}>
20
- <PopoverPrimitive.Content
21
- bind:ref
77
+ {#if store.open}
78
+ <div
79
+ bind:this={ref}
22
80
  data-slot="popover-content"
23
- {sideOffset}
24
- {align}
81
+ data-state={store.open ? "open" : "closed"}
82
+ style={positionClasses.margin}
25
83
  class={cn(
26
- 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 flex w-72 origin-(--transform-origin) flex-col gap-4 rounded-md p-4 text-sm shadow-md ring-1 outline-hidden duration-100',
27
- className
84
+ "absolute z-50 w-72 rounded-md border bg-popover p-4 text-sm text-popover-foreground shadow-md outline-none animate-zoom-in",
85
+ positionClasses.sideClass,
86
+ positionClasses.alignClass,
87
+ className,
28
88
  )}
29
89
  {...restProps}
30
- />
31
- </PopoverPortal>
90
+ >
91
+ {@render children?.()}
92
+ </div>
93
+ {/if}
@@ -1,9 +1,13 @@
1
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
- import PopoverPortal from './popover-portal.svelte';
3
- import { type WithoutChildrenOrChild } from '../../../utils.js';
4
- import type { ComponentProps } from 'svelte';
5
- type $$ComponentProps = PopoverPrimitive.ContentProps & {
6
- portalProps?: WithoutChildrenOrChild<ComponentProps<typeof PopoverPortal>>;
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
4
+ ref?: HTMLDivElement | null;
5
+ align?: "start" | "center" | "end";
6
+ side?: "top" | "right" | "bottom" | "left";
7
+ sideOffset?: number;
8
+ portalProps?: Record<string, unknown>;
9
+ class?: string;
10
+ children?: Snippet;
7
11
  };
8
12
  declare const PopoverContent: import("svelte").Component<$$ComponentProps, {}, "ref">;
9
13
  type PopoverContent = ReturnType<typeof PopoverContent>;
@@ -0,0 +1,13 @@
1
+ export type PopoverStore = {
2
+ open: boolean;
3
+ anchorId: string;
4
+ anchorEl: HTMLElement | null;
5
+ clickEvent: MouseEvent | null;
6
+ toggle: () => void;
7
+ openMenu: () => void;
8
+ closeMenu: () => void;
9
+ setAnchor: (el: HTMLElement | null) => void;
10
+ };
11
+ export declare function generatePopoverId(): string;
12
+ export declare function setPopoverContext(store: PopoverStore): PopoverStore;
13
+ export declare function getPopoverContext(): PopoverStore;
@@ -0,0 +1,13 @@
1
+ import { getContext, setContext } from "svelte";
2
+ const POPOVER_CONTEXT_KEY = Symbol("popover-context");
3
+ let popoverIdCounter = 0;
4
+ export function generatePopoverId() {
5
+ popoverIdCounter += 1;
6
+ return `popover-${popoverIdCounter.toString(36)}`;
7
+ }
8
+ export function setPopoverContext(store) {
9
+ return setContext(POPOVER_CONTEXT_KEY, store);
10
+ }
11
+ export function getPopoverContext() {
12
+ return getContext(POPOVER_CONTEXT_KEY);
13
+ }
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
+ import type { Snippet } from "svelte";
3
3
 
4
- let { ...restProps }: PopoverPrimitive.PortalProps = $props();
4
+ let { children }: { children?: Snippet } = $props();
5
5
  </script>
6
6
 
7
- <PopoverPrimitive.Portal {...restProps} />
7
+ {@render children?.()}