negodesign 0.0.71 → 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 (392) hide show
  1. package/README.md +115 -23
  2. package/dist/components/NegoDesign.svelte +7 -2
  3. package/dist/components/core/carousel/badge/ui/CarouselBadge.svelte +3 -5
  4. package/dist/components/core/carousel/grid/shared/ui/CarouselGridSlot.svelte +2 -2
  5. package/dist/components/core/carousel/highlights/ui/CarouselHighlights.svelte +2 -2
  6. package/dist/components/core/carousel/product/ui/CarouselProduct.svelte +2 -2
  7. package/dist/components/core/carousel/promotion/ui/CarouselPromotion.svelte +2 -2
  8. package/dist/components/core/datatable/data/columns-create.d.ts +1 -1
  9. package/dist/components/core/datatable/data/data-table.d.ts +3 -3
  10. package/dist/components/core/datatable/data/resolve-cell-badge.svelte.d.ts +2 -2
  11. package/dist/components/core/datatable/data/resolve-cell-badge.svelte.js +2 -1
  12. package/dist/components/core/datatable/data/resolve-cell.svelte.d.ts +2 -2
  13. package/dist/components/core/datatable/data/resolve-header.svelte.d.ts +2 -2
  14. package/dist/components/core/datatable/ui/DataTableActions.svelte +1 -1
  15. package/dist/components/core/datatable/ui/DataTableActions.svelte.d.ts +1 -1
  16. package/dist/components/core/datatable/ui/DataTableContent.svelte +1 -1
  17. package/dist/components/core/datatable/ui/DataTableContent.svelte.d.ts +1 -1
  18. package/dist/components/core/datatable/ui/DataTableCore.svelte +23 -26
  19. package/dist/components/core/datatable/ui/DataTableListFilter.svelte +3 -2
  20. package/dist/components/core/datatable/ui/DataTableListFilter.svelte.d.ts +1 -1
  21. package/dist/components/core/datatable/ui/DataTableListPagination.svelte +1 -1
  22. package/dist/components/core/datatable/ui/DataTableListPagination.svelte.d.ts +1 -1
  23. package/dist/components/core/datatable/ui/columns-create.svelte.d.ts +1 -1
  24. package/dist/components/core/panel/LeftHero.svelte +2 -2
  25. package/dist/components/core/sidebar/data/nav-top-bar-sidebar.d.ts +13 -4
  26. package/dist/components/core/sidebar/ui/navbar/NavMenuBarSidebar.svelte +3 -3
  27. package/dist/components/core/sidebar/ui/navbar/NavMenuTopBarSidebar.svelte +0 -2
  28. package/dist/components/core/sidebar/ui/navbar/nav-menu-header-sidebar.svelte +4 -5
  29. package/dist/components/pages/product-details/shared/ProductDetailFilesVertical.svelte +0 -1
  30. package/dist/components/pages/profile-user/shared/ProfileUserAddress.svelte +2 -3
  31. package/dist/components/pages/profile-user/shared/ProfileUserTabs.svelte +3 -1
  32. package/dist/components/ui/avatar/avatar-fallback.svelte +22 -12
  33. package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +3 -2
  34. package/dist/components/ui/avatar/avatar-image.svelte +31 -9
  35. package/dist/components/ui/avatar/avatar-image.svelte.d.ts +3 -2
  36. package/dist/components/ui/avatar/avatar.svelte +23 -9
  37. package/dist/components/ui/avatar/avatar.svelte.d.ts +6 -3
  38. package/dist/components/ui/avatar/context.svelte.d.ts +7 -0
  39. package/dist/components/ui/avatar/context.svelte.js +10 -0
  40. package/dist/components/ui/badge/badge.svelte +24 -26
  41. package/dist/components/ui/badge/badge.svelte.d.ts +15 -33
  42. package/dist/components/ui/button/button.svelte +35 -31
  43. package/dist/components/ui/button/button.svelte.d.ts +24 -61
  44. package/dist/components/ui/carousel/autoplay.d.ts +7 -0
  45. package/dist/components/ui/carousel/autoplay.js +7 -0
  46. package/dist/components/ui/carousel/carousel-content.svelte +31 -17
  47. package/dist/components/ui/carousel/carousel-item.svelte +2 -3
  48. package/dist/components/ui/carousel/carousel-next.svelte +1 -1
  49. package/dist/components/ui/carousel/carousel-previous.svelte +1 -1
  50. package/dist/components/ui/carousel/carousel.svelte +155 -30
  51. package/dist/components/ui/carousel/context.d.ts +23 -14
  52. package/dist/components/ui/carousel/context.js +4 -4
  53. package/dist/components/ui/carousel/index.d.ts +2 -0
  54. package/dist/components/ui/carousel/index.js +1 -0
  55. package/dist/components/ui/checkbox/checkbox.svelte +74 -17
  56. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +17 -2
  57. package/dist/components/ui/collapsible/collapsible-content.svelte +27 -3
  58. package/dist/components/ui/collapsible/collapsible-content.svelte.d.ts +8 -2
  59. package/dist/components/ui/collapsible/collapsible-trigger.svelte +48 -3
  60. package/dist/components/ui/collapsible/collapsible-trigger.svelte.d.ts +10 -2
  61. package/dist/components/ui/collapsible/collapsible.svelte +62 -6
  62. package/dist/components/ui/collapsible/collapsible.svelte.d.ts +21 -2
  63. package/dist/components/ui/data-table/data-table.svelte.d.ts +2 -40
  64. package/dist/components/ui/data-table/data-table.svelte.js +1 -110
  65. package/dist/components/ui/data-table/flex-render.svelte +5 -5
  66. package/dist/components/ui/data-table/flex-render.svelte.d.ts +2 -2
  67. package/dist/components/ui/data-table/index.d.ts +2 -1
  68. package/dist/components/ui/data-table/index.js +1 -1
  69. package/dist/components/ui/data-table/table-core.svelte.d.ts +117 -0
  70. package/dist/components/ui/data-table/table-core.svelte.js +260 -0
  71. package/dist/components/ui/drawer/drawer-close.svelte +38 -3
  72. package/dist/components/ui/drawer/drawer-close.svelte.d.ts +10 -2
  73. package/dist/components/ui/drawer/drawer-content.svelte +67 -18
  74. package/dist/components/ui/drawer/drawer-content.svelte.d.ts +5 -4
  75. package/dist/components/ui/drawer/drawer-description.svelte +9 -6
  76. package/dist/components/ui/drawer/drawer-description.svelte.d.ts +3 -2
  77. package/dist/components/ui/drawer/drawer-nested.svelte +28 -5
  78. package/dist/components/ui/drawer/drawer-nested.svelte.d.ts +8 -1
  79. package/dist/components/ui/drawer/drawer-overlay.svelte +18 -9
  80. package/dist/components/ui/drawer/drawer-overlay.svelte.d.ts +3 -2
  81. package/dist/components/ui/drawer/drawer-portal.svelte +16 -3
  82. package/dist/components/ui/drawer/drawer-portal.svelte.d.ts +3 -1
  83. package/dist/components/ui/drawer/drawer-title.svelte +9 -6
  84. package/dist/components/ui/drawer/drawer-title.svelte.d.ts +3 -2
  85. package/dist/components/ui/drawer/drawer-trigger.svelte +39 -3
  86. package/dist/components/ui/drawer/drawer-trigger.svelte.d.ts +10 -2
  87. package/dist/components/ui/drawer/drawer.svelte +67 -4
  88. package/dist/components/ui/drawer/drawer.svelte.d.ts +23 -1
  89. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +18 -8
  90. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +8 -2
  91. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +53 -28
  92. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +8 -3
  93. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +93 -17
  94. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -6
  95. package/dist/components/ui/dropdown-menu/dropdown-menu-context.svelte.d.ts +26 -0
  96. package/dist/components/ui/dropdown-menu/dropdown-menu-context.svelte.js +27 -0
  97. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +14 -8
  98. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +6 -3
  99. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +18 -3
  100. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +7 -2
  101. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +42 -8
  102. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +9 -2
  103. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +9 -5
  104. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +5 -2
  105. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +3 -3
  106. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte.d.ts +5 -1
  107. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +36 -8
  108. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +9 -2
  109. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +59 -23
  110. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +12 -2
  111. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +11 -7
  112. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +6 -2
  113. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +26 -9
  114. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +8 -2
  115. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +39 -11
  116. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -2
  117. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +73 -3
  118. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte.d.ts +8 -1
  119. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +65 -3
  120. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +12 -2
  121. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +50 -3
  122. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +9 -1
  123. package/dist/components/ui/empty/empty-content.svelte +2 -5
  124. package/dist/components/ui/empty/empty-description.svelte +2 -5
  125. package/dist/components/ui/empty/empty-header.svelte +2 -2
  126. package/dist/components/ui/empty/empty-media.svelte +17 -16
  127. package/dist/components/ui/empty/empty-media.svelte.d.ts +10 -19
  128. package/dist/components/ui/empty/empty-title.svelte +2 -2
  129. package/dist/components/ui/empty/empty.svelte +2 -5
  130. package/dist/components/ui/input-otp/context.svelte.d.ts +22 -0
  131. package/dist/components/ui/input-otp/context.svelte.js +8 -0
  132. package/dist/components/ui/input-otp/input-otp-group.svelte +5 -2
  133. package/dist/components/ui/input-otp/input-otp-separator.svelte +5 -5
  134. package/dist/components/ui/input-otp/input-otp-slot.svelte +50 -17
  135. package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +7 -2
  136. package/dist/components/ui/input-otp/input-otp.svelte +167 -8
  137. package/dist/components/ui/input-otp/input-otp.svelte.d.ts +17 -2
  138. package/dist/components/ui/label/label.svelte +10 -10
  139. package/dist/components/ui/label/label.svelte.d.ts +3 -2
  140. package/dist/components/ui/language-switcher/language-switcher.svelte +4 -3
  141. package/dist/components/ui/light-switch/light-switch.svelte +12 -6
  142. package/dist/components/ui/phone-input/country-selector.svelte +64 -78
  143. package/dist/components/ui/phone-input/country-selector.svelte.d.ts +6 -6
  144. package/dist/components/ui/phone-input/flag.svelte +3 -12
  145. package/dist/components/ui/phone-input/flag.svelte.d.ts +1 -1
  146. package/dist/components/ui/phone-input/flags.d.ts +2 -1
  147. package/dist/components/ui/phone-input/flags.js +4 -8
  148. package/dist/components/ui/phone-input/index.d.ts +1 -1
  149. package/dist/components/ui/phone-input/phone-input.svelte +106 -21
  150. package/dist/components/ui/phone-input/phone-input.svelte.d.ts +1 -2
  151. package/dist/components/ui/phone-input/types.d.ts +16 -1
  152. package/dist/components/ui/popover/popover-close.svelte +22 -3
  153. package/dist/components/ui/popover/popover-close.svelte.d.ts +7 -2
  154. package/dist/components/ui/popover/popover-content.svelte +80 -18
  155. package/dist/components/ui/popover/popover-content.svelte.d.ts +10 -6
  156. package/dist/components/ui/popover/popover-context.svelte.d.ts +13 -0
  157. package/dist/components/ui/popover/popover-context.svelte.js +13 -0
  158. package/dist/components/ui/popover/popover-portal.svelte +3 -3
  159. package/dist/components/ui/popover/popover-portal.svelte.d.ts +5 -1
  160. package/dist/components/ui/popover/popover-trigger.svelte +62 -10
  161. package/dist/components/ui/popover/popover-trigger.svelte.d.ts +12 -2
  162. package/dist/components/ui/popover/popover.svelte +50 -3
  163. package/dist/components/ui/popover/popover.svelte.d.ts +9 -1
  164. package/dist/components/ui/separator/separator.svelte +17 -11
  165. package/dist/components/ui/separator/separator.svelte.d.ts +7 -2
  166. package/dist/components/ui/sidebar/context.svelte.d.ts +15 -23
  167. package/dist/components/ui/sidebar/context.svelte.js +33 -21
  168. package/dist/components/ui/sidebar/sidebar-content.svelte +1 -1
  169. package/dist/components/ui/sidebar/sidebar-footer.svelte +1 -1
  170. package/dist/components/ui/sidebar/sidebar-group-content.svelte +1 -1
  171. package/dist/components/ui/sidebar/sidebar-menu-action.svelte +3 -2
  172. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +35 -66
  173. package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +9 -38
  174. package/dist/components/ui/sidebar/sidebar-provider.svelte +28 -18
  175. package/dist/components/ui/sidebar/sidebar-provider.svelte.d.ts +3 -0
  176. package/dist/components/ui/sidebar/sidebar-rail.svelte +1 -1
  177. package/dist/components/ui/sidebar/sidebar-separator.svelte +11 -8
  178. package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +3 -11
  179. package/dist/components/ui/sidebar/sidebar-trigger.svelte +2 -2
  180. package/dist/components/ui/sidebar/sidebar.svelte +34 -23
  181. package/dist/components/ui/sidebar/sidebar.svelte.d.ts +1 -1
  182. package/dist/components/ui/skeleton/skeleton.svelte +7 -4
  183. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +1 -1
  184. package/dist/components/ui/star-rating/star-rating-star.svelte +57 -31
  185. package/dist/components/ui/star-rating/star-rating-star.svelte.d.ts +1 -1
  186. package/dist/components/ui/star-rating/star-rating.svelte +143 -13
  187. package/dist/components/ui/star-rating/star-rating.svelte.d.ts +31 -2
  188. package/dist/components/ui/star-rating/types.d.ts +6 -1
  189. package/dist/components/ui/underline-tabs/underline-tabs-content.svelte +26 -9
  190. package/dist/components/ui/underline-tabs/underline-tabs-content.svelte.d.ts +9 -2
  191. package/dist/components/ui/underline-tabs/underline-tabs-list.svelte +15 -8
  192. package/dist/components/ui/underline-tabs/underline-tabs-list.svelte.d.ts +8 -2
  193. package/dist/components/ui/underline-tabs/underline-tabs-trigger.svelte +65 -34
  194. package/dist/components/ui/underline-tabs/underline-tabs-trigger.svelte.d.ts +14 -2
  195. package/dist/components/ui/underline-tabs/underline-tabs.svelte +49 -20
  196. package/dist/components/ui/underline-tabs/underline-tabs.svelte.d.ts +10 -2
  197. package/dist/components/ui/underline-tabs/underline-tabs.svelte.js +6 -59
  198. package/dist/docs/ApiTable.svelte +42 -0
  199. package/dist/docs/ApiTable.svelte.d.ts +7 -0
  200. package/dist/docs/CodeBlock.svelte +26 -0
  201. package/dist/docs/CodeBlock.svelte.d.ts +7 -0
  202. package/dist/docs/DocsHeader.svelte +25 -0
  203. package/dist/docs/DocsHeader.svelte.d.ts +6 -0
  204. package/dist/docs/DocsSidebar.svelte +99 -0
  205. package/dist/docs/DocsSidebar.svelte.d.ts +3 -0
  206. package/dist/docs/components.d.ts +27 -0
  207. package/dist/docs/components.js +897 -0
  208. package/dist/globals.css +466 -1590
  209. package/dist/styles/globals.css +136 -2
  210. package/dist/theme.svelte.d.ts +7 -0
  211. package/dist/theme.svelte.js +33 -0
  212. package/dist/utils.d.ts +4 -4
  213. package/dist/utils.js +18 -3
  214. package/package.json +4 -34
  215. package/dist/components/ui/chart/chart-container.svelte +0 -80
  216. package/dist/components/ui/chart/chart-container.svelte.d.ts +0 -9
  217. package/dist/components/ui/chart/chart-style.svelte +0 -37
  218. package/dist/components/ui/chart/chart-style.svelte.d.ts +0 -8
  219. package/dist/components/ui/chart/chart-tooltip.svelte +0 -184
  220. package/dist/components/ui/chart/chart-tooltip.svelte.d.ts +0 -27
  221. package/dist/components/ui/chart/chart-utils.d.ts +0 -36
  222. package/dist/components/ui/chart/chart-utils.js +0 -38
  223. package/dist/components/ui/chart/index.d.ts +0 -4
  224. package/dist/components/ui/chart/index.js +0 -4
  225. package/dist/components/ui/command/command-dialog.svelte +0 -42
  226. package/dist/components/ui/command/command-dialog.svelte.d.ts +0 -14
  227. package/dist/components/ui/command/command-empty.svelte +0 -17
  228. package/dist/components/ui/command/command-empty.svelte.d.ts +0 -4
  229. package/dist/components/ui/command/command-group.svelte +0 -33
  230. package/dist/components/ui/command/command-group.svelte.d.ts +0 -7
  231. package/dist/components/ui/command/command-input.svelte +0 -33
  232. package/dist/components/ui/command/command-input.svelte.d.ts +0 -4
  233. package/dist/components/ui/command/command-item.svelte +0 -27
  234. package/dist/components/ui/command/command-item.svelte.d.ts +0 -4
  235. package/dist/components/ui/command/command-link-item.svelte +0 -20
  236. package/dist/components/ui/command/command-link-item.svelte.d.ts +0 -4
  237. package/dist/components/ui/command/command-list.svelte +0 -20
  238. package/dist/components/ui/command/command-list.svelte.d.ts +0 -4
  239. package/dist/components/ui/command/command-loading.svelte +0 -7
  240. package/dist/components/ui/command/command-loading.svelte.d.ts +0 -4
  241. package/dist/components/ui/command/command-separator.svelte +0 -17
  242. package/dist/components/ui/command/command-separator.svelte.d.ts +0 -4
  243. package/dist/components/ui/command/command-shortcut.svelte +0 -23
  244. package/dist/components/ui/command/command-shortcut.svelte.d.ts +0 -5
  245. package/dist/components/ui/command/command.svelte +0 -28
  246. package/dist/components/ui/command/command.svelte.d.ts +0 -8
  247. package/dist/components/ui/command/index.d.ts +0 -12
  248. package/dist/components/ui/command/index.js +0 -14
  249. package/dist/components/ui/dialog/dialog-close.svelte +0 -11
  250. package/dist/components/ui/dialog/dialog-close.svelte.d.ts +0 -4
  251. package/dist/components/ui/dialog/dialog-content.svelte +0 -48
  252. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +0 -13
  253. package/dist/components/ui/dialog/dialog-description.svelte +0 -20
  254. package/dist/components/ui/dialog/dialog-description.svelte.d.ts +0 -4
  255. package/dist/components/ui/dialog/dialog-footer.svelte +0 -32
  256. package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +0 -8
  257. package/dist/components/ui/dialog/dialog-header.svelte +0 -20
  258. package/dist/components/ui/dialog/dialog-header.svelte.d.ts +0 -5
  259. package/dist/components/ui/dialog/dialog-overlay.svelte +0 -20
  260. package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +0 -4
  261. package/dist/components/ui/dialog/dialog-portal.svelte +0 -7
  262. package/dist/components/ui/dialog/dialog-portal.svelte.d.ts +0 -3
  263. package/dist/components/ui/dialog/dialog-title.svelte +0 -17
  264. package/dist/components/ui/dialog/dialog-title.svelte.d.ts +0 -4
  265. package/dist/components/ui/dialog/dialog-trigger.svelte +0 -11
  266. package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +0 -4
  267. package/dist/components/ui/dialog/dialog.svelte +0 -7
  268. package/dist/components/ui/dialog/dialog.svelte.d.ts +0 -3
  269. package/dist/components/ui/dialog/index.d.ts +0 -11
  270. package/dist/components/ui/dialog/index.js +0 -13
  271. package/dist/components/ui/input-group/index.d.ts +0 -7
  272. package/dist/components/ui/input-group/index.js +0 -9
  273. package/dist/components/ui/input-group/input-group-addon.svelte +0 -59
  274. package/dist/components/ui/input-group/input-group-addon.svelte.d.ts +0 -38
  275. package/dist/components/ui/input-group/input-group-button.svelte +0 -49
  276. package/dist/components/ui/input-group/input-group-button.svelte.d.ts +0 -32
  277. package/dist/components/ui/input-group/input-group-input.svelte +0 -23
  278. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +0 -11
  279. package/dist/components/ui/input-group/input-group-text.svelte +0 -22
  280. package/dist/components/ui/input-group/input-group-text.svelte.d.ts +0 -5
  281. package/dist/components/ui/input-group/input-group-textarea.svelte +0 -23
  282. package/dist/components/ui/input-group/input-group-textarea.svelte.d.ts +0 -3
  283. package/dist/components/ui/input-group/input-group.svelte +0 -24
  284. package/dist/components/ui/input-group/input-group.svelte.d.ts +0 -5
  285. package/dist/components/ui/navigation-menu/index.d.ts +0 -9
  286. package/dist/components/ui/navigation-menu/index.js +0 -11
  287. package/dist/components/ui/navigation-menu/navigation-menu-content.svelte +0 -20
  288. package/dist/components/ui/navigation-menu/navigation-menu-content.svelte.d.ts +0 -4
  289. package/dist/components/ui/navigation-menu/navigation-menu-indicator.svelte +0 -22
  290. package/dist/components/ui/navigation-menu/navigation-menu-indicator.svelte.d.ts +0 -4
  291. package/dist/components/ui/navigation-menu/navigation-menu-item.svelte +0 -17
  292. package/dist/components/ui/navigation-menu/navigation-menu-item.svelte.d.ts +0 -4
  293. package/dist/components/ui/navigation-menu/navigation-menu-link.svelte +0 -17
  294. package/dist/components/ui/navigation-menu/navigation-menu-link.svelte.d.ts +0 -4
  295. package/dist/components/ui/navigation-menu/navigation-menu-list.svelte +0 -20
  296. package/dist/components/ui/navigation-menu/navigation-menu-list.svelte.d.ts +0 -4
  297. package/dist/components/ui/navigation-menu/navigation-menu-trigger.svelte +0 -30
  298. package/dist/components/ui/navigation-menu/navigation-menu-trigger.svelte.d.ts +0 -5
  299. package/dist/components/ui/navigation-menu/navigation-menu-viewport.svelte +0 -22
  300. package/dist/components/ui/navigation-menu/navigation-menu-viewport.svelte.d.ts +0 -4
  301. package/dist/components/ui/navigation-menu/navigation-menu.svelte +0 -31
  302. package/dist/components/ui/navigation-menu/navigation-menu.svelte.d.ts +0 -7
  303. package/dist/components/ui/scroll-area/index.d.ts +0 -3
  304. package/dist/components/ui/scroll-area/index.js +0 -5
  305. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +0 -30
  306. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +0 -4
  307. package/dist/components/ui/scroll-area/scroll-area.svelte +0 -43
  308. package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +0 -11
  309. package/dist/components/ui/select/index.d.ts +0 -12
  310. package/dist/components/ui/select/index.js +0 -14
  311. package/dist/components/ui/select/select-content.svelte +0 -45
  312. package/dist/components/ui/select/select-content.svelte.d.ts +0 -11
  313. package/dist/components/ui/select/select-group-heading.svelte +0 -21
  314. package/dist/components/ui/select/select-group-heading.svelte.d.ts +0 -10
  315. package/dist/components/ui/select/select-group.svelte +0 -17
  316. package/dist/components/ui/select/select-group.svelte.d.ts +0 -4
  317. package/dist/components/ui/select/select-item.svelte +0 -41
  318. package/dist/components/ui/select/select-item.svelte.d.ts +0 -4
  319. package/dist/components/ui/select/select-label.svelte +0 -20
  320. package/dist/components/ui/select/select-label.svelte.d.ts +0 -6
  321. package/dist/components/ui/select/select-portal.svelte +0 -7
  322. package/dist/components/ui/select/select-portal.svelte.d.ts +0 -3
  323. package/dist/components/ui/select/select-scroll-down-button.svelte +0 -21
  324. package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +0 -4
  325. package/dist/components/ui/select/select-scroll-up-button.svelte +0 -21
  326. package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +0 -4
  327. package/dist/components/ui/select/select-separator.svelte +0 -18
  328. package/dist/components/ui/select/select-separator.svelte.d.ts +0 -4
  329. package/dist/components/ui/select/select-trigger.svelte +0 -30
  330. package/dist/components/ui/select/select-trigger.svelte.d.ts +0 -8
  331. package/dist/components/ui/select/select.svelte +0 -11
  332. package/dist/components/ui/select/select.svelte.d.ts +0 -3
  333. package/dist/components/ui/sheet/index.d.ts +0 -11
  334. package/dist/components/ui/sheet/index.js +0 -13
  335. package/dist/components/ui/sheet/sheet-close.svelte +0 -7
  336. package/dist/components/ui/sheet/sheet-close.svelte.d.ts +0 -4
  337. package/dist/components/ui/sheet/sheet-content.svelte +0 -56
  338. package/dist/components/ui/sheet/sheet-content.svelte.d.ts +0 -15
  339. package/dist/components/ui/sheet/sheet-description.svelte +0 -17
  340. package/dist/components/ui/sheet/sheet-description.svelte.d.ts +0 -4
  341. package/dist/components/ui/sheet/sheet-footer.svelte +0 -20
  342. package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +0 -5
  343. package/dist/components/ui/sheet/sheet-header.svelte +0 -20
  344. package/dist/components/ui/sheet/sheet-header.svelte.d.ts +0 -5
  345. package/dist/components/ui/sheet/sheet-overlay.svelte +0 -17
  346. package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +0 -4
  347. package/dist/components/ui/sheet/sheet-portal.svelte +0 -7
  348. package/dist/components/ui/sheet/sheet-portal.svelte.d.ts +0 -3
  349. package/dist/components/ui/sheet/sheet-title.svelte +0 -17
  350. package/dist/components/ui/sheet/sheet-title.svelte.d.ts +0 -4
  351. package/dist/components/ui/sheet/sheet-trigger.svelte +0 -7
  352. package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +0 -4
  353. package/dist/components/ui/sheet/sheet.svelte +0 -7
  354. package/dist/components/ui/sheet/sheet.svelte.d.ts +0 -3
  355. package/dist/components/ui/spinner/index.d.ts +0 -1
  356. package/dist/components/ui/spinner/index.js +0 -1
  357. package/dist/components/ui/spinner/spinner.svelte +0 -26
  358. package/dist/components/ui/spinner/spinner.svelte.d.ts +0 -4
  359. package/dist/components/ui/tabs/index.d.ts +0 -5
  360. package/dist/components/ui/tabs/index.js +0 -7
  361. package/dist/components/ui/tabs/tabs-content.svelte +0 -17
  362. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +0 -4
  363. package/dist/components/ui/tabs/tabs-list.svelte +0 -40
  364. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +0 -25
  365. package/dist/components/ui/tabs/tabs-trigger.svelte +0 -23
  366. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +0 -4
  367. package/dist/components/ui/tabs/tabs.svelte +0 -19
  368. package/dist/components/ui/tabs/tabs.svelte.d.ts +0 -4
  369. package/dist/components/ui/textarea/index.d.ts +0 -2
  370. package/dist/components/ui/textarea/index.js +0 -4
  371. package/dist/components/ui/textarea/textarea.svelte +0 -23
  372. package/dist/components/ui/textarea/textarea.svelte.d.ts +0 -5
  373. package/dist/components/ui/tooltip/index.d.ts +0 -6
  374. package/dist/components/ui/tooltip/index.js +0 -8
  375. package/dist/components/ui/tooltip/tooltip-content.svelte +0 -52
  376. package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +0 -11
  377. package/dist/components/ui/tooltip/tooltip-portal.svelte +0 -7
  378. package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +0 -4
  379. package/dist/components/ui/tooltip/tooltip-provider.svelte +0 -7
  380. package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +0 -4
  381. package/dist/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  382. package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +0 -25
  383. package/dist/components/ui/tooltip/tooltip.svelte +0 -7
  384. package/dist/components/ui/tooltip/tooltip.svelte.d.ts +0 -25
  385. package/dist/vitest-examples/Welcome.svelte +0 -8
  386. package/dist/vitest-examples/Welcome.svelte.d.ts +0 -13
  387. package/dist/vitest-examples/Welcome.svelte.spec.d.ts +0 -1
  388. package/dist/vitest-examples/Welcome.svelte.spec.js +0 -11
  389. package/dist/vitest-examples/greet.d.ts +0 -1
  390. package/dist/vitest-examples/greet.js +0 -3
  391. package/dist/vitest-examples/greet.spec.d.ts +0 -1
  392. package/dist/vitest-examples/greet.spec.js +0 -7
@@ -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?.()}
@@ -1,3 +1,7 @@
1
- declare const PopoverPortal: import("svelte").Component<import("bits-ui").PortalProps, {}, "">;
1
+ import type { Snippet } from "svelte";
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ };
5
+ declare const PopoverPortal: import("svelte").Component<$$ComponentProps, {}, "">;
2
6
  type PopoverPortal = ReturnType<typeof PopoverPortal>;
3
7
  export default PopoverPortal;
@@ -1,17 +1,69 @@
1
1
  <script lang="ts">
2
- import { cn } from '../../../utils.js';
3
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
+ import { getPopoverContext } from "./popover-context.svelte.js";
3
+ import { cn } from "../../../utils.js";
4
+ import type { Snippet } from "svelte";
5
+ import type { HTMLButtonAttributes } from "svelte/elements";
4
6
 
5
7
  let {
6
- ref = $bindable(null),
8
+ // eslint-disable-next-line no-useless-assignment
9
+ ref = $bindable<HTMLButtonElement | null>(null),
7
10
  class: className,
11
+ children,
12
+ child,
13
+ onclick,
8
14
  ...restProps
9
- }: PopoverPrimitive.TriggerProps = $props();
15
+ }: HTMLButtonAttributes & {
16
+ ref?: HTMLButtonElement | null;
17
+ class?: string;
18
+ children?: Snippet;
19
+ child?: Snippet<[{ props: Record<string, unknown> }]>;
20
+ onclick?: (event: MouseEvent) => void;
21
+ } = $props();
22
+
23
+ const store = getPopoverContext();
24
+
25
+ let anchorEl = $state<HTMLButtonElement | null>(null);
26
+
27
+ function handleClick(event: MouseEvent) {
28
+ store.clickEvent = event;
29
+ store.toggle();
30
+ onclick?.(event);
31
+ }
32
+
33
+ $effect(() => {
34
+ const el = (anchorEl ?? document.getElementById(store.anchorId)) as HTMLButtonElement | null;
35
+ if (el) {
36
+ store.setAnchor(el);
37
+ ref = el;
38
+ anchorEl = el;
39
+ }
40
+ });
10
41
  </script>
11
42
 
12
- <PopoverPrimitive.Trigger
13
- bind:ref
14
- data-slot="popover-trigger"
15
- class={cn('', className)}
16
- {...restProps}
17
- />
43
+ {#if child}
44
+ {@render child({
45
+ props: {
46
+ id: store.anchorId,
47
+ type: "button",
48
+ "aria-haspopup": "dialog",
49
+ "aria-expanded": store.open,
50
+ "data-state": store.open ? "open" : "closed",
51
+ onclick: handleClick,
52
+ },
53
+ })}
54
+ {:else}
55
+ <button
56
+ bind:this={anchorEl}
57
+ type="button"
58
+ id={store.anchorId}
59
+ aria-haspopup="dialog"
60
+ aria-expanded={store.open}
61
+ data-state={store.open ? "open" : "closed"}
62
+ onclick={handleClick}
63
+ data-slot="popover-trigger"
64
+ class={cn("", className)}
65
+ {...restProps}
66
+ >
67
+ {@render children?.()}
68
+ </button>
69
+ {/if}
@@ -1,4 +1,14 @@
1
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
- declare const PopoverTrigger: import("svelte").Component<PopoverPrimitive.TriggerProps, {}, "ref">;
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
+ type $$ComponentProps = HTMLButtonAttributes & {
4
+ ref?: HTMLButtonElement | null;
5
+ class?: string;
6
+ children?: Snippet;
7
+ child?: Snippet<[{
8
+ props: Record<string, unknown>;
9
+ }]>;
10
+ onclick?: (event: MouseEvent) => void;
11
+ };
12
+ declare const PopoverTrigger: import("svelte").Component<$$ComponentProps, {}, "ref">;
3
13
  type PopoverTrigger = ReturnType<typeof PopoverTrigger>;
4
14
  export default PopoverTrigger;
@@ -1,7 +1,54 @@
1
1
  <script lang="ts">
2
- import { Popover as PopoverPrimitive } from 'bits-ui';
2
+ import { generatePopoverId, setPopoverContext, type PopoverStore } from "./popover-context.svelte.js";
3
+ import type { Snippet } from "svelte";
4
+ import type { HTMLAttributes } from "svelte/elements";
3
5
 
4
- let { open = $bindable(false), ...restProps }: PopoverPrimitive.RootProps = $props();
6
+ let {
7
+ open = $bindable<boolean>(),
8
+ defaultOpen = false,
9
+ onOpenChange,
10
+ children,
11
+ ...restProps
12
+ }: HTMLAttributes<HTMLDivElement> & {
13
+ open?: boolean;
14
+ defaultOpen?: boolean;
15
+ onOpenChange?: (open: boolean) => void;
16
+ children?: Snippet;
17
+ } = $props();
18
+
19
+ // svelte-ignore state_referenced_locally
20
+ let store: PopoverStore = $state({
21
+ open: open ?? defaultOpen ?? false,
22
+ anchorId: generatePopoverId(),
23
+ anchorEl: null,
24
+ clickEvent: null,
25
+ toggle: () => {
26
+ setOpen(!store.open);
27
+ },
28
+ openMenu: () => setOpen(true),
29
+ closeMenu: () => setOpen(false),
30
+ setAnchor: (el: HTMLElement | null) => {
31
+ store.anchorEl = el;
32
+ },
33
+ });
34
+
35
+ function setOpen(value: boolean) {
36
+ if (store.open === value) return;
37
+ store.open = value;
38
+ open = value;
39
+ onOpenChange?.(value);
40
+ }
41
+
42
+ $effect(() => {
43
+ if (open !== undefined && open !== store.open) {
44
+ store.open = open;
45
+ onOpenChange?.(open);
46
+ }
47
+ });
48
+
49
+ setPopoverContext(store);
5
50
  </script>
6
51
 
7
- <PopoverPrimitive.Root bind:open {...restProps} />
52
+ <div class="relative" {...restProps}>
53
+ {@render children?.()}
54
+ </div>
@@ -1,3 +1,11 @@
1
- declare const Popover: import("svelte").Component<import("bits-ui").PopoverRootPropsWithoutHTML, {}, "open">;
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
4
+ open?: boolean;
5
+ defaultOpen?: boolean;
6
+ onOpenChange?: (open: boolean) => void;
7
+ children?: Snippet;
8
+ };
9
+ declare const Popover: import("svelte").Component<$$ComponentProps, {}, "open">;
2
10
  type Popover = ReturnType<typeof Popover>;
3
11
  export default Popover;
@@ -1,23 +1,29 @@
1
1
  <script lang="ts">
2
- import { Separator as SeparatorPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
2
+ import { cn, type WithElementRef } from "../../../utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
7
+ orientation = "horizontal",
8
+ decorative = false,
7
9
  class: className,
8
- "data-slot": dataSlot = "separator",
9
10
  ...restProps
10
- }: SeparatorPrimitive.RootProps = $props();
11
+ }: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
12
+ orientation?: "horizontal" | "vertical";
13
+ decorative?: boolean;
14
+ } = $props();
11
15
  </script>
12
16
 
13
- <SeparatorPrimitive.Root
14
- bind:ref
15
- data-slot={dataSlot}
17
+ <div
18
+ bind:this={ref}
19
+ data-slot="separator"
20
+ data-orientation={orientation}
21
+ role={decorative ? undefined : "separator"}
22
+ aria-orientation={decorative ? undefined : orientation}
16
23
  class={cn(
17
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px",
18
- // this is different in shadcn/ui but self-stretch breaks things for us
19
- "data-[orientation=vertical]:h-full",
24
+ "shrink-0 bg-border",
25
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
20
26
  className
21
27
  )}
22
28
  {...restProps}
23
- />
29
+ ></div>