@gv-tech/design-system 2.21.0 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/accordion.cjs +1 -1
  2. package/dist/accordion.cjs.map +1 -1
  3. package/dist/accordion.mjs +2 -2
  4. package/dist/accordion.mjs.map +1 -1
  5. package/dist/alert-dialog.cjs +1 -1
  6. package/dist/alert-dialog.cjs.map +1 -1
  7. package/dist/alert-dialog.mjs +2 -2
  8. package/dist/alert-dialog.mjs.map +1 -1
  9. package/dist/alert.cjs +1 -1
  10. package/dist/alert.cjs.map +1 -1
  11. package/dist/alert.mjs +2 -2
  12. package/dist/alert.mjs.map +1 -1
  13. package/dist/aspect-ratio.cjs +1 -1
  14. package/dist/aspect-ratio.cjs.map +1 -1
  15. package/dist/aspect-ratio.mjs +1 -1
  16. package/dist/avatar.cjs +1 -1
  17. package/dist/avatar.cjs.map +1 -1
  18. package/dist/avatar.mjs +2 -2
  19. package/dist/avatar.mjs.map +1 -1
  20. package/dist/badge.cjs +1 -1
  21. package/dist/badge.cjs.map +1 -1
  22. package/dist/badge.mjs +2 -2
  23. package/dist/badge.mjs.map +1 -1
  24. package/dist/breadcrumb.cjs +1 -1
  25. package/dist/breadcrumb.cjs.map +1 -1
  26. package/dist/breadcrumb.mjs +2 -2
  27. package/dist/breadcrumb.mjs.map +1 -1
  28. package/dist/button.cjs +1 -1
  29. package/dist/button.cjs.map +1 -1
  30. package/dist/button.mjs +2 -2
  31. package/dist/button.mjs.map +1 -1
  32. package/dist/calendar.cjs +1 -1
  33. package/dist/calendar.cjs.map +1 -1
  34. package/dist/calendar.mjs +2 -2
  35. package/dist/calendar.mjs.map +1 -1
  36. package/dist/card.cjs +1 -1
  37. package/dist/card.cjs.map +1 -1
  38. package/dist/card.mjs +2 -2
  39. package/dist/card.mjs.map +1 -1
  40. package/dist/carousel.cjs +1 -1
  41. package/dist/carousel.cjs.map +1 -1
  42. package/dist/carousel.mjs +2 -2
  43. package/dist/carousel.mjs.map +1 -1
  44. package/dist/chart.cjs +3 -3
  45. package/dist/chart.cjs.map +1 -1
  46. package/dist/chart.mjs +55 -45
  47. package/dist/chart.mjs.map +1 -1
  48. package/dist/checkbox.cjs +1 -1
  49. package/dist/checkbox.cjs.map +1 -1
  50. package/dist/checkbox.mjs +2 -2
  51. package/dist/checkbox.mjs.map +1 -1
  52. package/dist/collapsible.cjs +1 -1
  53. package/dist/collapsible.mjs +1 -1
  54. package/dist/command.cjs +1 -1
  55. package/dist/command.cjs.map +1 -1
  56. package/dist/command.mjs +2 -2
  57. package/dist/command.mjs.map +1 -1
  58. package/dist/context-menu.cjs +1 -1
  59. package/dist/context-menu.cjs.map +1 -1
  60. package/dist/context-menu.mjs +2 -2
  61. package/dist/context-menu.mjs.map +1 -1
  62. package/dist/design-system.css +2 -2
  63. package/dist/dialog.cjs +1 -1
  64. package/dist/dialog.cjs.map +1 -1
  65. package/dist/dialog.mjs +2 -2
  66. package/dist/dialog.mjs.map +1 -1
  67. package/dist/drawer.cjs +1 -1
  68. package/dist/drawer.cjs.map +1 -1
  69. package/dist/drawer.mjs +2 -2
  70. package/dist/drawer.mjs.map +1 -1
  71. package/dist/dropdown-menu.cjs +1 -1
  72. package/dist/dropdown-menu.cjs.map +1 -1
  73. package/dist/dropdown-menu.mjs +2 -2
  74. package/dist/dropdown-menu.mjs.map +1 -1
  75. package/dist/form.cjs +1 -1
  76. package/dist/form.cjs.map +1 -1
  77. package/dist/form.mjs +2 -2
  78. package/dist/form.mjs.map +1 -1
  79. package/dist/hover-card.cjs +1 -1
  80. package/dist/hover-card.cjs.map +1 -1
  81. package/dist/hover-card.mjs +2 -2
  82. package/dist/hover-card.mjs.map +1 -1
  83. package/dist/index.cjs +1 -1
  84. package/dist/index.mjs +4 -4
  85. package/dist/input.cjs +1 -1
  86. package/dist/input.cjs.map +1 -1
  87. package/dist/input.mjs +2 -2
  88. package/dist/input.mjs.map +1 -1
  89. package/dist/label.cjs +1 -1
  90. package/dist/label.cjs.map +1 -1
  91. package/dist/label.mjs +2 -2
  92. package/dist/label.mjs.map +1 -1
  93. package/dist/menubar.cjs +1 -1
  94. package/dist/menubar.cjs.map +1 -1
  95. package/dist/menubar.mjs +2 -2
  96. package/dist/menubar.mjs.map +1 -1
  97. package/dist/navigation-menu.cjs +1 -1
  98. package/dist/navigation-menu.cjs.map +1 -1
  99. package/dist/navigation-menu.mjs +2 -2
  100. package/dist/navigation-menu.mjs.map +1 -1
  101. package/dist/pagination.cjs +1 -1
  102. package/dist/pagination.cjs.map +1 -1
  103. package/dist/pagination.mjs +2 -2
  104. package/dist/pagination.mjs.map +1 -1
  105. package/dist/popover.cjs +1 -1
  106. package/dist/popover.cjs.map +1 -1
  107. package/dist/popover.mjs +2 -2
  108. package/dist/popover.mjs.map +1 -1
  109. package/dist/progress.cjs +1 -1
  110. package/dist/progress.cjs.map +1 -1
  111. package/dist/progress.mjs +2 -2
  112. package/dist/progress.mjs.map +1 -1
  113. package/dist/radio-group.cjs +1 -1
  114. package/dist/radio-group.cjs.map +1 -1
  115. package/dist/radio-group.mjs +2 -2
  116. package/dist/radio-group.mjs.map +1 -1
  117. package/dist/resizable.cjs +1 -1
  118. package/dist/resizable.cjs.map +1 -1
  119. package/dist/resizable.mjs +2 -2
  120. package/dist/resizable.mjs.map +1 -1
  121. package/dist/{rolldown-runtime-C0IHAABJ.mjs → rolldown-runtime-CWhphoD1.mjs} +1 -1
  122. package/dist/rolldown-runtime-mLOUI7ql.js +1 -0
  123. package/dist/scroll-area.cjs +1 -1
  124. package/dist/scroll-area.cjs.map +1 -1
  125. package/dist/scroll-area.mjs +2 -2
  126. package/dist/scroll-area.mjs.map +1 -1
  127. package/dist/scroll-to-top.cjs +1 -1
  128. package/dist/scroll-to-top.cjs.map +1 -1
  129. package/dist/scroll-to-top.mjs +2 -2
  130. package/dist/scroll-to-top.mjs.map +1 -1
  131. package/dist/search.cjs +1 -1
  132. package/dist/search.cjs.map +1 -1
  133. package/dist/search.mjs +2 -2
  134. package/dist/search.mjs.map +1 -1
  135. package/dist/select.cjs +1 -1
  136. package/dist/select.cjs.map +1 -1
  137. package/dist/select.mjs +2 -2
  138. package/dist/select.mjs.map +1 -1
  139. package/dist/separator.cjs +1 -1
  140. package/dist/separator.cjs.map +1 -1
  141. package/dist/separator.mjs +2 -2
  142. package/dist/separator.mjs.map +1 -1
  143. package/dist/sheet.cjs +1 -1
  144. package/dist/sheet.cjs.map +1 -1
  145. package/dist/sheet.mjs +2 -2
  146. package/dist/sheet.mjs.map +1 -1
  147. package/dist/skeleton.cjs +1 -1
  148. package/dist/skeleton.cjs.map +1 -1
  149. package/dist/skeleton.mjs +2 -2
  150. package/dist/skeleton.mjs.map +1 -1
  151. package/dist/slider.cjs +1 -1
  152. package/dist/slider.cjs.map +1 -1
  153. package/dist/slider.mjs +2 -2
  154. package/dist/slider.mjs.map +1 -1
  155. package/dist/sonner.cjs +1 -1
  156. package/dist/sonner.cjs.map +1 -1
  157. package/dist/sonner.mjs +1 -1
  158. package/dist/sonner.mjs.map +1 -1
  159. package/dist/{src-B8AA-nU4.js → src-D3IDWqE2.js} +2 -2
  160. package/dist/{src-B8AA-nU4.js.map → src-D3IDWqE2.js.map} +1 -1
  161. package/dist/{src-C65A5RuY.mjs → src-N08I3kfW.mjs} +2 -2
  162. package/dist/{src-C65A5RuY.mjs.map → src-N08I3kfW.mjs.map} +1 -1
  163. package/dist/support-fab.cjs +1 -1
  164. package/dist/support-fab.cjs.map +1 -1
  165. package/dist/support-fab.mjs +2 -2
  166. package/dist/support-fab.mjs.map +1 -1
  167. package/dist/switch.cjs +1 -1
  168. package/dist/switch.cjs.map +1 -1
  169. package/dist/switch.mjs +2 -2
  170. package/dist/switch.mjs.map +1 -1
  171. package/dist/table-of-contents.cjs +1 -1
  172. package/dist/table-of-contents.cjs.map +1 -1
  173. package/dist/table-of-contents.mjs +2 -2
  174. package/dist/table-of-contents.mjs.map +1 -1
  175. package/dist/table.cjs +1 -1
  176. package/dist/table.cjs.map +1 -1
  177. package/dist/table.mjs +2 -2
  178. package/dist/table.mjs.map +1 -1
  179. package/dist/tabs.cjs +1 -1
  180. package/dist/tabs.cjs.map +1 -1
  181. package/dist/tabs.mjs +2 -2
  182. package/dist/tabs.mjs.map +1 -1
  183. package/dist/text.cjs +1 -1
  184. package/dist/text.cjs.map +1 -1
  185. package/dist/text.mjs +2 -2
  186. package/dist/text.mjs.map +1 -1
  187. package/dist/textarea.cjs +1 -1
  188. package/dist/textarea.cjs.map +1 -1
  189. package/dist/textarea.mjs +2 -2
  190. package/dist/textarea.mjs.map +1 -1
  191. package/dist/theme-provider.cjs +1 -1
  192. package/dist/theme-provider.cjs.map +1 -1
  193. package/dist/theme-provider.mjs +1 -1
  194. package/dist/theme-provider.mjs.map +1 -1
  195. package/dist/{theme-toggle-DoAVRoyO.mjs → theme-toggle-B6QS2aTS.mjs} +3 -3
  196. package/dist/{theme-toggle-DoAVRoyO.mjs.map → theme-toggle-B6QS2aTS.mjs.map} +1 -1
  197. package/dist/theme-toggle-CbtfA8aG.js +2 -0
  198. package/dist/{theme-toggle-B8UiizQB.js.map → theme-toggle-CbtfA8aG.js.map} +1 -1
  199. package/dist/theme-toggle.cjs +1 -1
  200. package/dist/theme-toggle.mjs +1 -1
  201. package/dist/toast.cjs +1 -1
  202. package/dist/toast.cjs.map +1 -1
  203. package/dist/toast.mjs +2 -2
  204. package/dist/toast.mjs.map +1 -1
  205. package/dist/{toaster-DnZKPR-G.js → toaster-C-1djNvf.js} +2 -2
  206. package/dist/{toaster-DnZKPR-G.js.map → toaster-C-1djNvf.js.map} +1 -1
  207. package/dist/{toaster-BgZxvlTL.mjs → toaster-CEa33QUH.mjs} +2 -2
  208. package/dist/{toaster-BgZxvlTL.mjs.map → toaster-CEa33QUH.mjs.map} +1 -1
  209. package/dist/toaster.cjs +1 -1
  210. package/dist/toaster.mjs +1 -1
  211. package/dist/toggle-group.cjs +1 -1
  212. package/dist/toggle-group.cjs.map +1 -1
  213. package/dist/toggle-group.mjs +3 -3
  214. package/dist/toggle-group.mjs.map +1 -1
  215. package/dist/toggle.cjs +1 -1
  216. package/dist/toggle.cjs.map +1 -1
  217. package/dist/toggle.mjs +3 -3
  218. package/dist/toggle.mjs.map +1 -1
  219. package/dist/tooltip.cjs +1 -1
  220. package/dist/tooltip.cjs.map +1 -1
  221. package/dist/tooltip.mjs +2 -2
  222. package/dist/tooltip.mjs.map +1 -1
  223. package/dist/{utils-BtI8Nf6i.mjs → utils-BsD1_fYL.mjs} +2 -2
  224. package/dist/{utils-BtI8Nf6i.mjs.map → utils-BsD1_fYL.mjs.map} +1 -1
  225. package/dist/utils-DU-Y_pvO.js +2 -0
  226. package/dist/{utils-CbSX47LV.js.map → utils-DU-Y_pvO.js.map} +1 -1
  227. package/dist/{vendor-D3ZzLf8D.js → vendor-3cr8xz0x.js} +8 -8
  228. package/dist/{vendor-D3ZzLf8D.js.map → vendor-3cr8xz0x.js.map} +1 -1
  229. package/dist/{vendor-Cr0eKZrm.mjs → vendor-ChPUVHXi.mjs} +7 -6
  230. package/dist/{vendor-Cr0eKZrm.mjs.map → vendor-ChPUVHXi.mjs.map} +1 -1
  231. package/package.json +22 -22
  232. package/dist/rolldown-runtime-CacfPODE.js +0 -1
  233. package/dist/theme-toggle-B8UiizQB.js +0 -2
  234. package/dist/utils-CbSX47LV.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"slider.cjs","names":[],"sources":["../packages/ui-web/src/slider.tsx"],"sourcesContent":["'use client';\n\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport * as React from 'react';\n\nimport { SliderBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & SliderBaseProps\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn('relative flex w-full touch-none items-center select-none', className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full\">\n <SliderPrimitive.Range className=\"bg-primary absolute h-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n));\nSlider.displayName = SliderPrimitive.Root?.displayName || 'Slider';\n\nexport { Slider };\nexport type { SliderBaseProps as SliderProps };\n"],"mappings":"+PAQM,EAAS,EAAM,YAGlB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,MAAA,EAAA,EAAA,CACO,MACL,UAAW,EAAA,EAAG,2DAA4D,EAAU,CACpF,GAAI,WAHN,EAKE,EAAA,EAAA,KAAA,EAAA,EAAA,CAAuB,UAAU,kFAC/B,EAAA,EAAA,KAAA,EAAA,EAAA,CAAuB,UAAU,6BAA+B,CAAA,CAC1C,CAAA,EACxB,EAAA,EAAA,KAAA,EAAA,EAAA,CAAuB,UAAU,sNAAwN,CAAA,CACpO,GACvB,CACF,EAAO,YAAA,EAAA,GAAoC,aAAe"}
1
+ {"version":3,"file":"slider.cjs","names":[],"sources":["../packages/ui-web/src/slider.tsx"],"sourcesContent":["'use client';\n\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport * as React from 'react';\n\nimport { SliderBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & SliderBaseProps\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn('relative flex w-full touch-none items-center select-none', className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full\">\n <SliderPrimitive.Range className=\"bg-primary absolute h-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n));\nSlider.displayName = SliderPrimitive.Root?.displayName || 'Slider';\n\nexport { Slider };\nexport type { SliderBaseProps as SliderProps };\n"],"mappings":"+PAQM,EAAS,EAAM,YAGlB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,MAAA,EAAA,EAAA,CACO,MACL,UAAW,EAAA,EAAG,2DAA4D,CAAS,EACnF,GAAI,WAHN,EAKE,EAAA,EAAA,KAAA,EAAA,EAAA,CAAuB,UAAU,kFAC/B,EAAA,EAAA,KAAA,EAAA,EAAA,CAAuB,UAAU,4BAA8B,CAAA,CAC1C,CAAA,GACvB,EAAA,EAAA,KAAA,EAAA,EAAA,CAAuB,UAAU,qNAAuN,CAAA,CACpO,GACvB,EACD,EAAO,YAAA,EAAA,GAAoC,aAAe"}
package/dist/slider.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { C as e, S as t, T as n, vr as r, w as i } from "./vendor-Cr0eKZrm.mjs";
4
- import { t as a } from "./utils-BtI8Nf6i.mjs";
3
+ import { C as e, S as t, T as n, vr as r, w as i } from "./vendor-ChPUVHXi.mjs";
4
+ import { t as a } from "./utils-BsD1_fYL.mjs";
5
5
  import * as o from "react";
6
6
  //#region packages/ui-web/src/slider.tsx
7
7
  var s = r(), c = o.forwardRef(({ className: r, ...o }, c) => /* @__PURE__ */ (0, s.jsxs)(e, {
@@ -1 +1 @@
1
- {"version":3,"file":"slider.mjs","names":[],"sources":["../packages/ui-web/src/slider.tsx"],"sourcesContent":["'use client';\n\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport * as React from 'react';\n\nimport { SliderBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & SliderBaseProps\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn('relative flex w-full touch-none items-center select-none', className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full\">\n <SliderPrimitive.Range className=\"bg-primary absolute h-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n));\nSlider.displayName = SliderPrimitive.Root?.displayName || 'Slider';\n\nexport { Slider };\nexport type { SliderBaseProps as SliderProps };\n"],"mappings":";;;;;;aAQM,IAAS,EAAM,YAGlB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,MAAC,GAAD;CACO;CACL,WAAW,EAAG,4DAA4D,EAAU;CACpF,GAAI;WAHN,CAKE,iBAAA,GAAA,EAAA,KAAC,GAAD;EAAuB,WAAU;YAC/B,iBAAA,GAAA,EAAA,KAAC,GAAD,EAAuB,WAAU,8BAA+B,CAAA;EAC1C,CAAA,EACxB,iBAAA,GAAA,EAAA,KAAC,GAAD,EAAuB,WAAU,uNAAwN,CAAA,CACpO;GACvB;AACF,EAAO,cAAA,GAAoC,eAAe"}
1
+ {"version":3,"file":"slider.mjs","names":[],"sources":["../packages/ui-web/src/slider.tsx"],"sourcesContent":["'use client';\n\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport * as React from 'react';\n\nimport { SliderBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & SliderBaseProps\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn('relative flex w-full touch-none items-center select-none', className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full\">\n <SliderPrimitive.Range className=\"bg-primary absolute h-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n));\nSlider.displayName = SliderPrimitive.Root?.displayName || 'Slider';\n\nexport { Slider };\nexport type { SliderBaseProps as SliderProps };\n"],"mappings":";;;;;;aAQM,IAAS,EAAM,YAGlB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,MAAC,GAAD;CACO;CACL,WAAW,EAAG,4DAA4D,CAAS;CACnF,GAAI;WAHN,CAKE,iBAAA,GAAA,EAAA,KAAC,GAAD;EAAuB,WAAU;YAC/B,iBAAA,GAAA,EAAA,KAAC,GAAD,EAAuB,WAAU,6BAA8B,CAAA;CAC1C,CAAA,GACvB,iBAAA,GAAA,EAAA,KAAC,GAAD,EAAuB,WAAU,sNAAuN,CAAA,CACpO;EACvB;AACD,EAAO,cAAA,GAAoC,eAAe"}
package/dist/sonner.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rolldown-runtime-CacfPODE.js`),t=require(`./vendor-D3ZzLf8D.js`);let n=require(`react`);n=e.r(n);let r=require(`next-themes`);var i=t.vr(),a=({...e})=>{let{theme:n=`system`}=(0,r.useTheme)();return(0,i.jsx)(t.x,{theme:n,className:`toaster group`,toastOptions:{classNames:{toast:`group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg`,description:`group-[.toast]:text-muted-foreground`,actionButton:`group-[.toast]:bg-primary group-[.toast]:text-primary-foreground`,cancelButton:`group-[.toast]:bg-muted group-[.toast]:text-muted-foreground`}},...e})};exports.Toaster=a;
1
+ "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-mLOUI7ql.js"),t=require("./vendor-3cr8xz0x.js");let n=require("react");n=e.r(n);let r=require("next-themes");var i=t.vr(),a=({...e})=>{let{theme:n=`system`}=(0,r.useTheme)();return(0,i.jsx)(t.x,{theme:n,className:`toaster group`,toastOptions:{classNames:{toast:`group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg`,description:`group-[.toast]:text-muted-foreground`,actionButton:`group-[.toast]:bg-primary group-[.toast]:text-primary-foreground`,cancelButton:`group-[.toast]:bg-muted group-[.toast]:text-muted-foreground`}},...e})};exports.Toaster=a;
2
2
  //# sourceMappingURL=sonner.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sonner.cjs","names":[],"sources":["../packages/ui-web/src/sonner.tsx"],"sourcesContent":["'use client';\n\nimport { SonnerBaseProps } from '@gv-tech/ui-core';\nimport { useTheme } from 'next-themes';\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner> & SonnerBaseProps;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\nexport type { ToasterProps };\n"],"mappings":"2PASM,GAAW,CAAE,GAAG,KAA0B,CAC9C,GAAM,CAAE,QAAQ,WAAA,EAAA,EAAA,WAAuB,CAEvC,OACE,EAAA,EAAA,KAAC,EAAA,EAAD,CACS,QACP,UAAU,gBACV,aAAc,CACZ,WAAY,CACV,MACE,wIACF,YAAa,uCACb,aAAc,mEACd,aAAc,+DACf,CACF,CACD,GAAI,EACJ,CAAA"}
1
+ {"version":3,"file":"sonner.cjs","names":[],"sources":["../packages/ui-web/src/sonner.tsx"],"sourcesContent":["'use client';\n\nimport { SonnerBaseProps } from '@gv-tech/ui-core';\nimport { useTheme } from 'next-themes';\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner> & SonnerBaseProps;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\nexport type { ToasterProps };\n"],"mappings":"2PASM,GAAW,CAAE,GAAG,KAA0B,CAC9C,GAAM,CAAE,QAAQ,WAAA,EAAA,EAAA,UAAsB,EAEtC,OACE,EAAA,EAAA,KAAC,EAAA,EAAD,CACS,QACP,UAAU,gBACV,aAAc,CACZ,WAAY,CACV,MACE,wIACF,YAAa,uCACb,aAAc,mEACd,aAAc,8DAChB,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
package/dist/sonner.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  "use client";
3
- import { vr as e, x as t } from "./vendor-Cr0eKZrm.mjs";
3
+ import { vr as e, x as t } from "./vendor-ChPUVHXi.mjs";
4
4
  import "react";
5
5
  import { useTheme as n } from "next-themes";
6
6
  //#region packages/ui-web/src/sonner.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"sonner.mjs","names":[],"sources":["../packages/ui-web/src/sonner.tsx"],"sourcesContent":["'use client';\n\nimport { SonnerBaseProps } from '@gv-tech/ui-core';\nimport { useTheme } from 'next-themes';\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner> & SonnerBaseProps;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\nexport type { ToasterProps };\n"],"mappings":";;;;;;aASM,KAAW,EAAE,GAAG,QAA0B;CAC9C,IAAM,EAAE,WAAQ,aAAa,GAAU;AAEvC,QACE,iBAAA,GAAA,EAAA,KAAC,GAAD;EACS;EACP,WAAU;EACV,cAAc,EACZ,YAAY;GACV,OACE;GACF,aAAa;GACb,cAAc;GACd,cAAc;GACf,EACF;EACD,GAAI;EACJ,CAAA"}
1
+ {"version":3,"file":"sonner.mjs","names":[],"sources":["../packages/ui-web/src/sonner.tsx"],"sourcesContent":["'use client';\n\nimport { SonnerBaseProps } from '@gv-tech/ui-core';\nimport { useTheme } from 'next-themes';\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner> & SonnerBaseProps;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\nexport type { ToasterProps };\n"],"mappings":";;;;;;aASM,KAAW,EAAE,GAAG,QAA0B;CAC9C,IAAM,EAAE,WAAQ,aAAa,EAAS;CAEtC,OACE,iBAAA,GAAA,EAAA,KAAC,GAAD;EACS;EACP,WAAU;EACV,cAAc,EACZ,YAAY;GACV,OACE;GACF,aAAa;GACb,cAAc;GACd,cAAc;EAChB,EACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- var e=require(`./vendor-D3ZzLf8D.js`).Gn(`inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,outline:`border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground`},size:{default:`h-9 px-2 min-w-9`,sm:`h-8 px-1.5 min-w-8`,lg:`h-10 px-2.5 min-w-10`}},defaultVariants:{variant:`default`,size:`default`}});Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return e}});
2
- //# sourceMappingURL=src-B8AA-nU4.js.map
1
+ var e=require("./vendor-3cr8xz0x.js").Gn(`inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,outline:`border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground`},size:{default:`h-9 px-2 min-w-9`,sm:`h-8 px-1.5 min-w-8`,lg:`h-10 px-2.5 min-w-10`}},defaultVariants:{variant:`default`,size:`default`}});Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return e}});
2
+ //# sourceMappingURL=src-D3IDWqE2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src-B8AA-nU4.js","names":[],"sources":["../packages/ui-core/src/contracts/toggle.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nexport const toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const toggleVariantValues = {\n variant: {\n default: 'default',\n outline: 'outline',\n },\n size: {\n default: 'default',\n sm: 'sm',\n lg: 'lg',\n },\n} as const;\n\nexport type ToggleVariant = keyof typeof toggleVariantValues.variant;\nexport type ToggleSize = keyof typeof toggleVariantValues.size;\n\nexport interface ToggleBaseProps {\n children?: React.ReactNode;\n className?: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n disabled?: boolean;\n}\n"],"mappings":"AAGA,IAAa,kCAAiB,GAC5B,kYACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,iBACT,QAAS,4FACV,CACD,KAAM,CACJ,QAAS,mBACT,GAAI,qBACJ,GAAI,uBACL,CACF,CACD,gBAAiB,CACf,QAAS,UACT,KAAM,UACP,CACF,CACF"}
1
+ {"version":3,"file":"src-D3IDWqE2.js","names":[],"sources":["../packages/ui-core/src/contracts/toggle.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nexport const toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const toggleVariantValues = {\n variant: {\n default: 'default',\n outline: 'outline',\n },\n size: {\n default: 'default',\n sm: 'sm',\n lg: 'lg',\n },\n} as const;\n\nexport type ToggleVariant = keyof typeof toggleVariantValues.variant;\nexport type ToggleSize = keyof typeof toggleVariantValues.size;\n\nexport interface ToggleBaseProps {\n children?: React.ReactNode;\n className?: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n disabled?: boolean;\n}\n"],"mappings":"AAGA,IAAa,gCAAiB,EAAA,GAC5B,kYACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,iBACT,QAAS,2FACX,EACA,KAAM,CACJ,QAAS,mBACT,GAAI,qBACJ,GAAI,sBACN,CACF,EACA,gBAAiB,CACf,QAAS,UACT,KAAM,SACR,CACF,CACF"}
@@ -1,4 +1,4 @@
1
- import { Gn as e } from "./vendor-Cr0eKZrm.mjs";
1
+ import { Gn as e } from "./vendor-ChPUVHXi.mjs";
2
2
  //#region packages/ui-core/src/contracts/toggle.ts
3
3
  var t = e("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", {
4
4
  variants: {
@@ -20,4 +20,4 @@ var t = e("inline-flex items-center justify-center gap-2 rounded-md text-sm font
20
20
  //#endregion
21
21
  export { t };
22
22
 
23
- //# sourceMappingURL=src-C65A5RuY.mjs.map
23
+ //# sourceMappingURL=src-N08I3kfW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"src-C65A5RuY.mjs","names":[],"sources":["../packages/ui-core/src/contracts/toggle.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nexport const toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const toggleVariantValues = {\n variant: {\n default: 'default',\n outline: 'outline',\n },\n size: {\n default: 'default',\n sm: 'sm',\n lg: 'lg',\n },\n} as const;\n\nexport type ToggleVariant = keyof typeof toggleVariantValues.variant;\nexport type ToggleSize = keyof typeof toggleVariantValues.size;\n\nexport interface ToggleBaseProps {\n children?: React.ReactNode;\n className?: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n disabled?: boolean;\n}\n"],"mappings":";;AAGA,IAAa,IAAiB,EAC5B,mYACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,SAAS;GACV;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF"}
1
+ {"version":3,"file":"src-N08I3kfW.mjs","names":[],"sources":["../packages/ui-core/src/contracts/toggle.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nexport const toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport const toggleVariantValues = {\n variant: {\n default: 'default',\n outline: 'outline',\n },\n size: {\n default: 'default',\n sm: 'sm',\n lg: 'lg',\n },\n} as const;\n\nexport type ToggleVariant = keyof typeof toggleVariantValues.variant;\nexport type ToggleSize = keyof typeof toggleVariantValues.size;\n\nexport interface ToggleBaseProps {\n children?: React.ReactNode;\n className?: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n disabled?: boolean;\n}\n"],"mappings":";;AAGA,IAAa,IAAiB,EAC5B,mYACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,SAAS;EACX;EACA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;EACN;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF"}
@@ -1,2 +1,2 @@
1
- "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rolldown-runtime-CacfPODE.js`),t=require(`./vendor-D3ZzLf8D.js`),n=require(`./utils-CbSX47LV.js`),r=require(`./button.cjs`),i=require(`./dialog.cjs`),a=require(`./drawer.cjs`);let o=require(`react`);o=e.r(o);var s=t.vr(),c=`(max-width: 767px)`,l=e=>{let t=e.trim();return t.endsWith(`/`)?t.slice(0,-1):t},u=e=>e.trim().replace(/^@+/,``),d=(e,t)=>`${l(e)}/${encodeURIComponent(u(t))}`,f=(e,t)=>`${l(e)}/widget/page/${encodeURIComponent(u(t))}`,p=()=>{let[e,t]=o.useState(()=>typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(c).matches);return o.useEffect(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(c),n=e=>t(e.matches);return t(e.matches),e.addEventListener(`change`,n),()=>{e.removeEventListener(`change`,n)}},[]),e};function m({supportUrl:e=`https://www.buymeacoffee.com`,creatorId:c,title:l=`Buy me a coffee`,description:u=`Support the project directly from this panel.`,iframeTitle:m=`Buy Me a Coffee support form`,open:h,defaultOpen:g=!1,onOpenChange:_,positionClassName:v,buttonClassName:y,panelClassName:b,className:x,type:S,onClick:C,...w}){let T=p(),E=h!==void 0,[D,O]=o.useState(g),k=E?h:D,A=o.useCallback(e=>{E||O(e),_?.(e)},[E,_]),j=o.useMemo(()=>d(e,c),[c,e]),M=(0,s.jsxs)(`div`,{className:`flex max-h-[75vh] flex-col gap-3`,children:[(0,s.jsx)(`div`,{className:`overflow-hidden rounded-md border`,children:(0,s.jsx)(`iframe`,{title:m,src:o.useMemo(()=>f(e,c),[c,e]),className:`h-[560px] w-full border-0`,loading:`lazy`,referrerPolicy:`strict-origin-when-cross-origin`})}),(0,s.jsxs)(`div`,{className:`text-muted-foreground flex items-center justify-between gap-2 text-xs`,children:[(0,s.jsx)(`span`,{children:`If the embedded checkout is unavailable, open the support page directly.`}),(0,s.jsxs)(`a`,{href:j,target:`_blank`,rel:`noopener noreferrer`,className:`text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2`,children:[`Open Buy Me a Coffee`,(0,s.jsx)(t.Qn,{className:`h-3.5 w-3.5`})]})]})]}),N=(0,s.jsx)(`div`,{className:n.t(`fixed right-6 bottom-6 z-50`,v),children:(0,s.jsxs)(r.Button,{"aria-label":`Support this project`,type:S??`button`,className:n.t(`inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95`,y,x),onClick:e=>{C?.(e),e.defaultPrevented||A(!0)},...w,children:[(0,s.jsx)(t.er,{className:`h-6 w-6`}),(0,s.jsx)(`span`,{className:`sr-only`,children:`Support this project`})]})});return T?(0,s.jsxs)(s.Fragment,{children:[N,(0,s.jsx)(a.Drawer,{open:k,onOpenChange:A,children:(0,s.jsxs)(a.DrawerContent,{className:n.t(`mx-auto w-full max-w-xl`,b),children:[(0,s.jsxs)(a.DrawerHeader,{children:[(0,s.jsx)(a.DrawerTitle,{children:l}),(0,s.jsx)(a.DrawerDescription,{children:u})]}),(0,s.jsx)(`div`,{className:`px-4 pb-4`,children:M})]})})]}):(0,s.jsxs)(s.Fragment,{children:[N,(0,s.jsx)(i.Dialog,{open:k,onOpenChange:A,children:(0,s.jsxs)(i.DialogContent,{className:n.t(`max-w-xl p-5`,b),children:[(0,s.jsxs)(i.DialogHeader,{children:[(0,s.jsx)(i.DialogTitle,{children:l}),(0,s.jsx)(i.DialogDescription,{children:u})]}),M]})})]})}exports.SupportFab=m;
1
+ "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-mLOUI7ql.js"),t=require("./vendor-3cr8xz0x.js"),n=require("./utils-DU-Y_pvO.js"),r=require("./button.cjs"),i=require("./dialog.cjs"),a=require("./drawer.cjs");let o=require("react");o=e.r(o);var s=t.vr(),c=`(max-width: 767px)`,l=e=>{let t=e.trim();return t.endsWith(`/`)?t.slice(0,-1):t},u=e=>e.trim().replace(/^@+/,``),d=(e,t)=>`${l(e)}/${encodeURIComponent(u(t))}`,f=(e,t)=>`${l(e)}/widget/page/${encodeURIComponent(u(t))}`,p=()=>{let[e,t]=o.useState(()=>typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(c).matches);return o.useEffect(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(c),n=e=>t(e.matches);return t(e.matches),e.addEventListener(`change`,n),()=>{e.removeEventListener(`change`,n)}},[]),e};function m({supportUrl:e=`https://www.buymeacoffee.com`,creatorId:c,title:l=`Buy me a coffee`,description:u=`Support the project directly from this panel.`,iframeTitle:m=`Buy Me a Coffee support form`,open:h,defaultOpen:g=!1,onOpenChange:_,positionClassName:v,buttonClassName:y,panelClassName:b,className:x,type:S,onClick:C,...w}){let T=p(),E=h!==void 0,[D,O]=o.useState(g),k=E?h:D,A=o.useCallback(e=>{E||O(e),_?.(e)},[E,_]),j=o.useMemo(()=>d(e,c),[c,e]),M=(0,s.jsxs)(`div`,{className:`flex max-h-[75vh] flex-col gap-3`,children:[(0,s.jsx)(`div`,{className:`overflow-hidden rounded-md border`,children:(0,s.jsx)(`iframe`,{title:m,src:o.useMemo(()=>f(e,c),[c,e]),className:`h-[560px] w-full border-0`,loading:`lazy`,referrerPolicy:`strict-origin-when-cross-origin`})}),(0,s.jsxs)(`div`,{className:`text-muted-foreground flex items-center justify-between gap-2 text-xs`,children:[(0,s.jsx)(`span`,{children:`If the embedded checkout is unavailable, open the support page directly.`}),(0,s.jsxs)(`a`,{href:j,target:`_blank`,rel:`noopener noreferrer`,className:`text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2`,children:[`Open Buy Me a Coffee`,(0,s.jsx)(t.Qn,{className:`h-3.5 w-3.5`})]})]})]}),N=(0,s.jsx)(`div`,{className:n.t(`fixed right-6 bottom-6 z-50`,v),children:(0,s.jsxs)(r.Button,{"aria-label":`Support this project`,type:S??`button`,className:n.t(`inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95`,y,x),onClick:e=>{C?.(e),e.defaultPrevented||A(!0)},...w,children:[(0,s.jsx)(t.er,{className:`h-6 w-6`}),(0,s.jsx)(`span`,{className:`sr-only`,children:`Support this project`})]})});return T?(0,s.jsxs)(s.Fragment,{children:[N,(0,s.jsx)(a.Drawer,{open:k,onOpenChange:A,children:(0,s.jsxs)(a.DrawerContent,{className:n.t(`mx-auto w-full max-w-xl`,b),children:[(0,s.jsxs)(a.DrawerHeader,{children:[(0,s.jsx)(a.DrawerTitle,{children:l}),(0,s.jsx)(a.DrawerDescription,{children:u})]}),(0,s.jsx)(`div`,{className:`px-4 pb-4`,children:M})]})})]}):(0,s.jsxs)(s.Fragment,{children:[N,(0,s.jsx)(i.Dialog,{open:k,onOpenChange:A,children:(0,s.jsxs)(i.DialogContent,{className:n.t(`max-w-xl p-5`,b),children:[(0,s.jsxs)(i.DialogHeader,{children:[(0,s.jsx)(i.DialogTitle,{children:l}),(0,s.jsx)(i.DialogDescription,{children:u})]}),M]})})]})}exports.SupportFab=m;
2
2
  //# sourceMappingURL=support-fab.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"support-fab.cjs","names":[],"sources":["../packages/ui-web/src/support-fab.tsx"],"sourcesContent":["'use client';\n\nimport { Coffee, ExternalLink } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from './drawer';\nimport { cn } from './lib/utils';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nconst normalizeBaseUrl = (url: string) => {\n const trimmed = url.trim();\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;\n};\n\nconst sanitizeCreator = (creatorId: string) => creatorId.trim().replace(/^@+/, '');\n\nconst buildPageUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/${creator}`;\n};\n\nconst buildEmbedUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/widget/page/${creator}`;\n};\n\nconst useIsMobile = () => {\n const getInitial = () => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(MOBILE_QUERY).matches;\n };\n\n const [isMobile, setIsMobile] = React.useState(getInitial);\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(MOBILE_QUERY);\n const onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\n setIsMobile(mediaQuery.matches);\n mediaQuery.addEventListener('change', onChange);\n\n return () => {\n mediaQuery.removeEventListener('change', onChange);\n };\n }, []);\n\n return isMobile;\n};\n\nexport interface SupportFabProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n supportUrl?: string;\n creatorId: string;\n title?: string;\n description?: string;\n iframeTitle?: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n positionClassName?: string;\n buttonClassName?: string;\n panelClassName?: string;\n}\n\nexport function SupportFab({\n supportUrl = 'https://www.buymeacoffee.com',\n creatorId,\n title = 'Buy me a coffee',\n description = 'Support the project directly from this panel.',\n iframeTitle = 'Buy Me a Coffee support form',\n open,\n defaultOpen = false,\n onOpenChange,\n positionClassName,\n buttonClassName,\n panelClassName,\n className,\n type,\n onClick,\n ...buttonProps\n}: SupportFabProps) {\n const isMobile = useIsMobile();\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const pageUrl = React.useMemo(() => buildPageUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n const embedUrl = React.useMemo(() => buildEmbedUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n\n const panelBody = (\n <div className=\"flex max-h-[75vh] flex-col gap-3\">\n <div className=\"overflow-hidden rounded-md border\">\n <iframe\n title={iframeTitle}\n src={embedUrl}\n className=\"h-[560px] w-full border-0\"\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n <div className=\"text-muted-foreground flex items-center justify-between gap-2 text-xs\">\n <span>If the embedded checkout is unavailable, open the support page directly.</span>\n <a\n href={pageUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2\"\n >\n Open Buy Me a Coffee\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n </div>\n </div>\n );\n\n const trigger = (\n <div className={cn('fixed right-6 bottom-6 z-50', positionClassName)}>\n <Button\n aria-label=\"Support this project\"\n type={type ?? 'button'}\n className={cn(\n 'inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95',\n buttonClassName,\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...buttonProps}\n >\n <Coffee className=\"h-6 w-6\" />\n <span className=\"sr-only\">Support this project</span>\n </Button>\n </div>\n );\n\n if (isMobile) {\n return (\n <>\n {trigger}\n <Drawer open={isOpen} onOpenChange={setOpen}>\n <DrawerContent className={cn('mx-auto w-full max-w-xl', panelClassName)}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription>{description}</DrawerDescription>\n </DrawerHeader>\n <div className=\"px-4 pb-4\">{panelBody}</div>\n </DrawerContent>\n </Drawer>\n </>\n );\n }\n\n return (\n <>\n {trigger}\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent className={cn('max-w-xl p-5', panelClassName)}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {panelBody}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"support-fab.cjs","names":[],"sources":["../packages/ui-web/src/support-fab.tsx"],"sourcesContent":["'use client';\n\nimport { Coffee, ExternalLink } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from './drawer';\nimport { cn } from './lib/utils';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nconst normalizeBaseUrl = (url: string) => {\n const trimmed = url.trim();\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;\n};\n\nconst sanitizeCreator = (creatorId: string) => creatorId.trim().replace(/^@+/, '');\n\nconst buildPageUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/${creator}`;\n};\n\nconst buildEmbedUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/widget/page/${creator}`;\n};\n\nconst useIsMobile = () => {\n const getInitial = () => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(MOBILE_QUERY).matches;\n };\n\n const [isMobile, setIsMobile] = React.useState(getInitial);\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(MOBILE_QUERY);\n const onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\n setIsMobile(mediaQuery.matches);\n mediaQuery.addEventListener('change', onChange);\n\n return () => {\n mediaQuery.removeEventListener('change', onChange);\n };\n }, []);\n\n return isMobile;\n};\n\nexport interface SupportFabProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n supportUrl?: string;\n creatorId: string;\n title?: string;\n description?: string;\n iframeTitle?: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n positionClassName?: string;\n buttonClassName?: string;\n panelClassName?: string;\n}\n\nexport function SupportFab({\n supportUrl = 'https://www.buymeacoffee.com',\n creatorId,\n title = 'Buy me a coffee',\n description = 'Support the project directly from this panel.',\n iframeTitle = 'Buy Me a Coffee support form',\n open,\n defaultOpen = false,\n onOpenChange,\n positionClassName,\n buttonClassName,\n panelClassName,\n className,\n type,\n onClick,\n ...buttonProps\n}: SupportFabProps) {\n const isMobile = useIsMobile();\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const pageUrl = React.useMemo(() => buildPageUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n const embedUrl = React.useMemo(() => buildEmbedUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n\n const panelBody = (\n <div className=\"flex max-h-[75vh] flex-col gap-3\">\n <div className=\"overflow-hidden rounded-md border\">\n <iframe\n title={iframeTitle}\n src={embedUrl}\n className=\"h-[560px] w-full border-0\"\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n <div className=\"text-muted-foreground flex items-center justify-between gap-2 text-xs\">\n <span>If the embedded checkout is unavailable, open the support page directly.</span>\n <a\n href={pageUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2\"\n >\n Open Buy Me a Coffee\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n </div>\n </div>\n );\n\n const trigger = (\n <div className={cn('fixed right-6 bottom-6 z-50', positionClassName)}>\n <Button\n aria-label=\"Support this project\"\n type={type ?? 'button'}\n className={cn(\n 'inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95',\n buttonClassName,\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...buttonProps}\n >\n <Coffee className=\"h-6 w-6\" />\n <span className=\"sr-only\">Support this project</span>\n </Button>\n </div>\n );\n\n if (isMobile) {\n return (\n <>\n {trigger}\n <Drawer open={isOpen} onOpenChange={setOpen}>\n <DrawerContent className={cn('mx-auto w-full max-w-xl', panelClassName)}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription>{description}</DrawerDescription>\n </DrawerHeader>\n <div className=\"px-4 pb-4\">{panelBody}</div>\n </DrawerContent>\n </Drawer>\n </>\n );\n }\n\n return (\n <>\n {trigger}\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent className={cn('max-w-xl p-5', panelClassName)}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {panelBody}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { Qn as e, er as t, vr as n } from "./vendor-Cr0eKZrm.mjs";
4
- import { t as r } from "./utils-BtI8Nf6i.mjs";
3
+ import { Qn as e, er as t, vr as n } from "./vendor-ChPUVHXi.mjs";
4
+ import { t as r } from "./utils-BsD1_fYL.mjs";
5
5
  import { Button as i } from "./button.mjs";
6
6
  import { Dialog as a, DialogContent as o, DialogDescription as s, DialogHeader as c, DialogTitle as l } from "./dialog.mjs";
7
7
  import { Drawer as u, DrawerContent as d, DrawerDescription as f, DrawerHeader as p, DrawerTitle as m } from "./drawer.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"support-fab.mjs","names":[],"sources":["../packages/ui-web/src/support-fab.tsx"],"sourcesContent":["'use client';\n\nimport { Coffee, ExternalLink } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from './drawer';\nimport { cn } from './lib/utils';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nconst normalizeBaseUrl = (url: string) => {\n const trimmed = url.trim();\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;\n};\n\nconst sanitizeCreator = (creatorId: string) => creatorId.trim().replace(/^@+/, '');\n\nconst buildPageUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/${creator}`;\n};\n\nconst buildEmbedUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/widget/page/${creator}`;\n};\n\nconst useIsMobile = () => {\n const getInitial = () => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(MOBILE_QUERY).matches;\n };\n\n const [isMobile, setIsMobile] = React.useState(getInitial);\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(MOBILE_QUERY);\n const onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\n setIsMobile(mediaQuery.matches);\n mediaQuery.addEventListener('change', onChange);\n\n return () => {\n mediaQuery.removeEventListener('change', onChange);\n };\n }, []);\n\n return isMobile;\n};\n\nexport interface SupportFabProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n supportUrl?: string;\n creatorId: string;\n title?: string;\n description?: string;\n iframeTitle?: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n positionClassName?: string;\n buttonClassName?: string;\n panelClassName?: string;\n}\n\nexport function SupportFab({\n supportUrl = 'https://www.buymeacoffee.com',\n creatorId,\n title = 'Buy me a coffee',\n description = 'Support the project directly from this panel.',\n iframeTitle = 'Buy Me a Coffee support form',\n open,\n defaultOpen = false,\n onOpenChange,\n positionClassName,\n buttonClassName,\n panelClassName,\n className,\n type,\n onClick,\n ...buttonProps\n}: SupportFabProps) {\n const isMobile = useIsMobile();\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const pageUrl = React.useMemo(() => buildPageUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n const embedUrl = React.useMemo(() => buildEmbedUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n\n const panelBody = (\n <div className=\"flex max-h-[75vh] flex-col gap-3\">\n <div className=\"overflow-hidden rounded-md border\">\n <iframe\n title={iframeTitle}\n src={embedUrl}\n className=\"h-[560px] w-full border-0\"\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n <div className=\"text-muted-foreground flex items-center justify-between gap-2 text-xs\">\n <span>If the embedded checkout is unavailable, open the support page directly.</span>\n <a\n href={pageUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2\"\n >\n Open Buy Me a Coffee\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n </div>\n </div>\n );\n\n const trigger = (\n <div className={cn('fixed right-6 bottom-6 z-50', positionClassName)}>\n <Button\n aria-label=\"Support this project\"\n type={type ?? 'button'}\n className={cn(\n 'inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95',\n buttonClassName,\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...buttonProps}\n >\n <Coffee className=\"h-6 w-6\" />\n <span className=\"sr-only\">Support this project</span>\n </Button>\n </div>\n );\n\n if (isMobile) {\n return (\n <>\n {trigger}\n <Drawer open={isOpen} onOpenChange={setOpen}>\n <DrawerContent className={cn('mx-auto w-full max-w-xl', panelClassName)}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription>{description}</DrawerDescription>\n </DrawerHeader>\n <div className=\"px-4 pb-4\">{panelBody}</div>\n </DrawerContent>\n </Drawer>\n </>\n );\n }\n\n return (\n <>\n {trigger}\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent className={cn('max-w-xl p-5', panelClassName)}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {panelBody}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"support-fab.mjs","names":[],"sources":["../packages/ui-web/src/support-fab.tsx"],"sourcesContent":["'use client';\n\nimport { Coffee, ExternalLink } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from './drawer';\nimport { cn } from './lib/utils';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nconst normalizeBaseUrl = (url: string) => {\n const trimmed = url.trim();\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;\n};\n\nconst sanitizeCreator = (creatorId: string) => creatorId.trim().replace(/^@+/, '');\n\nconst buildPageUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/${creator}`;\n};\n\nconst buildEmbedUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/widget/page/${creator}`;\n};\n\nconst useIsMobile = () => {\n const getInitial = () => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(MOBILE_QUERY).matches;\n };\n\n const [isMobile, setIsMobile] = React.useState(getInitial);\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(MOBILE_QUERY);\n const onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\n setIsMobile(mediaQuery.matches);\n mediaQuery.addEventListener('change', onChange);\n\n return () => {\n mediaQuery.removeEventListener('change', onChange);\n };\n }, []);\n\n return isMobile;\n};\n\nexport interface SupportFabProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n supportUrl?: string;\n creatorId: string;\n title?: string;\n description?: string;\n iframeTitle?: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n positionClassName?: string;\n buttonClassName?: string;\n panelClassName?: string;\n}\n\nexport function SupportFab({\n supportUrl = 'https://www.buymeacoffee.com',\n creatorId,\n title = 'Buy me a coffee',\n description = 'Support the project directly from this panel.',\n iframeTitle = 'Buy Me a Coffee support form',\n open,\n defaultOpen = false,\n onOpenChange,\n positionClassName,\n buttonClassName,\n panelClassName,\n className,\n type,\n onClick,\n ...buttonProps\n}: SupportFabProps) {\n const isMobile = useIsMobile();\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const pageUrl = React.useMemo(() => buildPageUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n const embedUrl = React.useMemo(() => buildEmbedUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n\n const panelBody = (\n <div className=\"flex max-h-[75vh] flex-col gap-3\">\n <div className=\"overflow-hidden rounded-md border\">\n <iframe\n title={iframeTitle}\n src={embedUrl}\n className=\"h-[560px] w-full border-0\"\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n <div className=\"text-muted-foreground flex items-center justify-between gap-2 text-xs\">\n <span>If the embedded checkout is unavailable, open the support page directly.</span>\n <a\n href={pageUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2\"\n >\n Open Buy Me a Coffee\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n </div>\n </div>\n );\n\n const trigger = (\n <div className={cn('fixed right-6 bottom-6 z-50', positionClassName)}>\n <Button\n aria-label=\"Support this project\"\n type={type ?? 'button'}\n className={cn(\n 'inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95',\n buttonClassName,\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...buttonProps}\n >\n <Coffee className=\"h-6 w-6\" />\n <span className=\"sr-only\">Support this project</span>\n </Button>\n </div>\n );\n\n if (isMobile) {\n return (\n <>\n {trigger}\n <Drawer open={isOpen} onOpenChange={setOpen}>\n <DrawerContent className={cn('mx-auto w-full max-w-xl', panelClassName)}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription>{description}</DrawerDescription>\n </DrawerHeader>\n <div className=\"px-4 pb-4\">{panelBody}</div>\n </DrawerContent>\n </Drawer>\n </>\n );\n }\n\n return (\n <>\n {trigger}\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent className={cn('max-w-xl p-5', panelClassName)}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {panelBody}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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"}
package/dist/switch.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rolldown-runtime-CacfPODE.js`),t=require(`./vendor-D3ZzLf8D.js`),n=require(`./utils-CbSX47LV.js`);let r=require(`react`);r=e.r(r);var i=t.vr(),a=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.y,{className:n.t(`peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50`,e),...r,ref:a,children:(0,i.jsx)(t.b,{className:n.t(`bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0`)})}));a.displayName=t.y?.displayName||`Switch`,exports.Switch=a;
1
+ "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-mLOUI7ql.js"),t=require("./vendor-3cr8xz0x.js"),n=require("./utils-DU-Y_pvO.js");let r=require("react");r=e.r(r);var i=t.vr(),a=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.y,{className:n.t(`peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50`,e),...r,ref:a,children:(0,i.jsx)(t.b,{className:n.t(`bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0`)})}));a.displayName=t.y?.displayName||`Switch`,exports.Switch=a;
2
2
  //# sourceMappingURL=switch.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch.cjs","names":[],"sources":["../packages/ui-web/src/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { SwitchBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchBaseProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root?.displayName || 'Switch';\n\nexport { Switch };\nexport type { SwitchBaseProps as SwitchProps };\n"],"mappings":"+PAQM,EAAS,EAAM,YAGlB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAA,EAAA,EAAA,CACE,UAAW,EAAA,EACT,8XACA,EACD,CACD,GAAI,EACC,gBAEL,EAAA,EAAA,KAAA,EAAA,EAAA,CACE,UAAW,EAAA,EACT,6KACD,CACD,CAAA,CACoB,CAAA,CACxB,CACF,EAAO,YAAA,EAAA,GAAqC,aAAe"}
1
+ {"version":3,"file":"switch.cjs","names":[],"sources":["../packages/ui-web/src/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { SwitchBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchBaseProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root?.displayName || 'Switch';\n\nexport { Switch };\nexport type { SwitchBaseProps as SwitchProps };\n"],"mappings":"+PAQM,EAAS,EAAM,YAGlB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAA,EAAA,EAAA,CACE,UAAW,EAAA,EACT,8XACA,CACF,EACA,GAAI,EACC,gBAEL,EAAA,EAAA,KAAA,EAAA,EAAA,CACE,UAAW,EAAA,EACT,4KACF,CACD,CAAA,CACoB,CAAA,CACxB,EACD,EAAO,YAAA,EAAA,GAAqC,aAAe"}
package/dist/switch.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { b as e, vr as t, y as n } from "./vendor-Cr0eKZrm.mjs";
4
- import { t as r } from "./utils-BtI8Nf6i.mjs";
3
+ import { b as e, vr as t, y as n } from "./vendor-ChPUVHXi.mjs";
4
+ import { t as r } from "./utils-BsD1_fYL.mjs";
5
5
  import * as i from "react";
6
6
  //#region packages/ui-web/src/switch.tsx
7
7
  var a = t(), o = i.forwardRef(({ className: t, ...i }, o) => /* @__PURE__ */ (0, a.jsx)(n, {
@@ -1 +1 @@
1
- {"version":3,"file":"switch.mjs","names":[],"sources":["../packages/ui-web/src/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { SwitchBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchBaseProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root?.displayName || 'Switch';\n\nexport { Switch };\nexport type { SwitchBaseProps as SwitchProps };\n"],"mappings":";;;;;;aAQM,IAAS,EAAM,YAGlB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,GAAD;CACE,WAAW,EACT,+XACA,EACD;CACD,GAAI;CACC;WAEL,iBAAA,GAAA,EAAA,KAAC,GAAD,EACE,WAAW,EACT,6KACD,EACD,CAAA;CACoB,CAAA,CACxB;AACF,EAAO,cAAA,GAAqC,eAAe"}
1
+ {"version":3,"file":"switch.mjs","names":[],"sources":["../packages/ui-web/src/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { SwitchBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchBaseProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root?.displayName || 'Switch';\n\nexport { Switch };\nexport type { SwitchBaseProps as SwitchProps };\n"],"mappings":";;;;;;aAQM,IAAS,EAAM,YAGlB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,GAAD;CACE,WAAW,EACT,+XACA,CACF;CACA,GAAI;CACC;WAEL,iBAAA,GAAA,EAAA,KAAC,GAAD,EACE,WAAW,EACT,4KACF,EACD,CAAA;AACoB,CAAA,CACxB;AACD,EAAO,cAAA,GAAqC,eAAe"}
@@ -1,2 +1,2 @@
1
- "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rolldown-runtime-CacfPODE.js`),t=require(`./vendor-D3ZzLf8D.js`),n=require(`./utils-CbSX47LV.js`);let r=require(`react`);r=e.r(r);var i=t.vr(),a=r.createContext(null);function o(){let e=r.useContext(a);if(!e)throw Error(`TOC components must be used within a TableOfContents provider`);return e}function s({children:e,className:t,activeId:o,minLevel:s=1,maxLevel:u=4,selector:d=`h1, h2, h3, h4, h5, h6`}){let[f,p]=r.useState([]),[m,h]=r.useState(null),g=r.useMemo(()=>f.find(e=>e.id===m)?.text||null,[f,m]),_=r.useCallback(e=>{p(t=>JSON.stringify(t)===JSON.stringify(e)?t:e)},[]),v=r.useMemo(()=>({headings:f,activeId:o||m,activeHeadingText:g,registerHeadings:_,setActiveId:h,config:{minLevel:s,maxLevel:u,selector:d,className:t}}),[f,m,o,g,_,s,u,d,t]);return(0,i.jsx)(a.Provider,{value:v,children:(0,i.jsx)(`div`,{className:n.t(`relative`,t),children:e||(0,i.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,i.jsx)(c,{}),(0,i.jsx)(l,{children:null})]})})})}function c({className:e}){let{headings:t,activeId:a,activeHeadingText:s}=o(),[c,l]=r.useState(!1);if(r.useEffect(()=>{if(!c)return;let e=()=>{l(!1)};return window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[c]),t.length===0)return null;let u=Math.min(...t.map(e=>e.level)),d=(0,i.jsx)(`ul`,{className:`m-0 list-none text-sm`,children:t.map(e=>{let t=a===e.id,r=`${(e.level-u)*1}rem`;return(0,i.jsx)(`li`,{className:`mt-0 pt-2`,children:(0,i.jsx)(`a`,{href:`#${e.id}`,onClick:()=>l(!1),className:n.t(`hover:text-foreground inline-block no-underline transition-colors`,t?`text-primary font-medium`:`text-muted-foreground`),style:{paddingLeft:r},children:e.text})},e.id)})});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(`div`,{className:n.t(`bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden`,e),children:[(0,i.jsxs)(`button`,{onClick:()=>l(!c),className:`flex w-full items-center justify-between px-4 py-3 text-left`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-2 overflow-hidden`,children:[(0,i.jsx)(`span`,{className:`text-muted-foreground text-xs font-semibold tracking-wider uppercase`,children:`On this page:`}),(0,i.jsx)(`span`,{className:`truncate text-sm font-medium`,children:s||`Overview`})]}),(0,i.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,className:n.t(`shrink-0 transition-transform duration-200`,c&&`rotate-180`),children:(0,i.jsx)(`path`,{d:`m6 9 6 6 6-6`})})]}),c&&(0,i.jsx)(`div`,{className:`bg-background border-t px-4 pt-2 pb-6`,children:(0,i.jsx)(`nav`,{"aria-label":`Table of contents mobile`,children:d})})]}),(0,i.jsx)(`nav`,{className:n.t(`hidden xl:block`,e),"aria-label":`Table of contents`,children:d})]})}function l({children:e,className:t}){let{registerHeadings:a,setActiveId:s,config:c}=o(),l=r.useRef(null);return r.useEffect(()=>{let e=l.current;if(!e)return;let t=()=>{let t=Array.from(e.querySelectorAll(c.selector||`h1, h2, h3, h4, h5, h6`)).filter(e=>{let t=parseInt(e.tagName.charAt(1),10);return t>=(c.minLevel??1)&&t<=(c.maxLevel??4)});return a(t.map(e=>(e.id||=n.n(e.textContent||`heading`),{id:e.id,text:e.textContent||``,level:parseInt(e.tagName.charAt(1),10)}))),t},r=t(),i=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&s(e.target.id)})},{rootMargin:`0px 0px -80% 0px`,threshold:.1});r.forEach(e=>i.observe(e));let o=new MutationObserver(()=>{let e=t();i.disconnect(),e.forEach(e=>i.observe(e))});return o.observe(e,{childList:!0,subtree:!0,characterData:!0}),()=>{i.disconnect(),o.disconnect()}},[c.selector,c.minLevel,c.maxLevel,a,s]),(0,i.jsx)(`div`,{ref:l,className:t,children:e})}s.List=c,s.Content=l,exports.TableOfContents=s,exports.TableOfContentsContent=l,exports.TableOfContentsList=c;
1
+ "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-mLOUI7ql.js"),t=require("./vendor-3cr8xz0x.js"),n=require("./utils-DU-Y_pvO.js");let r=require("react");r=e.r(r);var i=t.vr(),a=r.createContext(null);function o(){let e=r.useContext(a);if(!e)throw Error(`TOC components must be used within a TableOfContents provider`);return e}function s({children:e,className:t,activeId:o,minLevel:s=1,maxLevel:u=4,selector:d=`h1, h2, h3, h4, h5, h6`}){let[f,p]=r.useState([]),[m,h]=r.useState(null),g=r.useMemo(()=>f.find(e=>e.id===m)?.text||null,[f,m]),_=r.useCallback(e=>{p(t=>JSON.stringify(t)===JSON.stringify(e)?t:e)},[]),v=r.useMemo(()=>({headings:f,activeId:o||m,activeHeadingText:g,registerHeadings:_,setActiveId:h,config:{minLevel:s,maxLevel:u,selector:d,className:t}}),[f,m,o,g,_,s,u,d,t]);return(0,i.jsx)(a.Provider,{value:v,children:(0,i.jsx)(`div`,{className:n.t(`relative`,t),children:e||(0,i.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,i.jsx)(c,{}),(0,i.jsx)(l,{children:null})]})})})}function c({className:e}){let{headings:t,activeId:a,activeHeadingText:s}=o(),[c,l]=r.useState(!1);if(r.useEffect(()=>{if(!c)return;let e=()=>{l(!1)};return window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[c]),t.length===0)return null;let u=Math.min(...t.map(e=>e.level)),d=(0,i.jsx)(`ul`,{className:`m-0 list-none text-sm`,children:t.map(e=>{let t=a===e.id,r=`${(e.level-u)*1}rem`;return(0,i.jsx)(`li`,{className:`mt-0 pt-2`,children:(0,i.jsx)(`a`,{href:`#${e.id}`,onClick:()=>l(!1),className:n.t(`hover:text-foreground inline-block no-underline transition-colors`,t?`text-primary font-medium`:`text-muted-foreground`),style:{paddingLeft:r},children:e.text})},e.id)})});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(`div`,{className:n.t(`bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden`,e),children:[(0,i.jsxs)(`button`,{onClick:()=>l(!c),className:`flex w-full items-center justify-between px-4 py-3 text-left`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-2 overflow-hidden`,children:[(0,i.jsx)(`span`,{className:`text-muted-foreground text-xs font-semibold tracking-wider uppercase`,children:`On this page:`}),(0,i.jsx)(`span`,{className:`truncate text-sm font-medium`,children:s||`Overview`})]}),(0,i.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,className:n.t(`shrink-0 transition-transform duration-200`,c&&`rotate-180`),children:(0,i.jsx)(`path`,{d:`m6 9 6 6 6-6`})})]}),c&&(0,i.jsx)(`div`,{className:`bg-background border-t px-4 pt-2 pb-6`,children:(0,i.jsx)(`nav`,{"aria-label":`Table of contents mobile`,children:d})})]}),(0,i.jsx)(`nav`,{className:n.t(`hidden xl:block`,e),"aria-label":`Table of contents`,children:d})]})}function l({children:e,className:t}){let{registerHeadings:a,setActiveId:s,config:c}=o(),l=r.useRef(null);return r.useEffect(()=>{let e=l.current;if(!e)return;let t=()=>{let t=Array.from(e.querySelectorAll(c.selector||`h1, h2, h3, h4, h5, h6`)).filter(e=>{let t=parseInt(e.tagName.charAt(1),10);return t>=(c.minLevel??1)&&t<=(c.maxLevel??4)});return a(t.map(e=>(e.id||=n.n(e.textContent||`heading`),{id:e.id,text:e.textContent||``,level:parseInt(e.tagName.charAt(1),10)}))),t},r=t(),i=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&s(e.target.id)})},{rootMargin:`0px 0px -80% 0px`,threshold:.1});r.forEach(e=>i.observe(e));let o=new MutationObserver(()=>{let e=t();i.disconnect(),e.forEach(e=>i.observe(e))});return o.observe(e,{childList:!0,subtree:!0,characterData:!0}),()=>{i.disconnect(),o.disconnect()}},[c.selector,c.minLevel,c.maxLevel,a,s]),(0,i.jsx)(`div`,{ref:l,className:t,children:e})}s.List=c,s.Content=l,exports.TableOfContents=s,exports.TableOfContentsContent=l,exports.TableOfContentsList=c;
2
2
  //# sourceMappingURL=table-of-contents.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-of-contents.cjs","names":[],"sources":["../packages/ui-web/src/table-of-contents.tsx"],"sourcesContent":["'use client';\n\nimport {\n HeadingItem,\n TableOfContentsBaseProps,\n TableOfContentsContentBaseProps,\n TableOfContentsListBaseProps,\n TableOfContentsRootBaseProps,\n} from '@gv-tech/ui-core';\nimport * as React from 'react';\nimport { cn, slugify } from './lib/utils';\n\n// Context for sharing heading data\ninterface TOCContextValue {\n headings: HeadingItem[];\n activeId: string | null;\n activeHeadingText: string | null;\n registerHeadings: (headings: HeadingItem[]) => void;\n setActiveId: (id: string | null) => void;\n config: TableOfContentsBaseProps;\n}\n\nconst TOCContext = React.createContext<TOCContextValue | null>(null);\n\nfunction useTOC() {\n const context = React.useContext(TOCContext);\n if (!context) {\n throw new Error('TOC components must be used within a TableOfContents provider');\n }\n return context;\n}\n\nexport type TableOfContentsProps = TableOfContentsRootBaseProps;\n\n/**\n * Root component that provides the Table of Contents context.\n * Can be used as a wrapper OR standalone.\n * If used as a wrapper: <TableOfContents><List /><Content>{children}</Content></TableOfContents>\n * If used standalone: <TableOfContents /> (requires container ref or defaults to document)\n */\nfunction TableOfContents({\n children,\n className,\n activeId: activeIdOverride,\n minLevel = 1,\n maxLevel = 4,\n selector = 'h1, h2, h3, h4, h5, h6',\n}: TableOfContentsProps) {\n const [headings, setHeadings] = React.useState<HeadingItem[]>([]);\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n const activeHeadingText = React.useMemo(() => {\n return headings.find((h) => h.id === activeId)?.text || null;\n }, [headings, activeId]);\n\n const registerHeadings = React.useCallback((newHeadings: HeadingItem[]) => {\n setHeadings((prev) => {\n if (JSON.stringify(prev) === JSON.stringify(newHeadings)) {\n return prev;\n }\n return newHeadings;\n });\n }, []);\n\n const value = React.useMemo(\n () => ({\n headings,\n activeId: activeIdOverride || activeId,\n activeHeadingText,\n registerHeadings,\n setActiveId,\n config: { minLevel, maxLevel, selector, className },\n }),\n [\n headings,\n activeId,\n activeIdOverride,\n activeHeadingText,\n registerHeadings,\n minLevel,\n maxLevel,\n selector,\n className,\n ],\n );\n\n return (\n <TOCContext.Provider value={value}>\n <div className={cn('relative', className)}>\n {children || (\n <div className=\"flex flex-col gap-4\">\n <TableOfContentsList />\n <TableOfContentsContent>{null}</TableOfContentsContent>\n </div>\n )}\n </div>\n </TOCContext.Provider>\n );\n}\n\n/**\n * Renders the actual list of links.\n */\nfunction TableOfContentsList({ className }: TableOfContentsListBaseProps) {\n const { headings, activeId, activeHeadingText } = useTOC();\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Auto-collapse on scroll\n React.useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = () => {\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [isOpen]);\n\n if (headings.length === 0) {\n return null;\n }\n\n const currentMinLevel = Math.min(...headings.map((h) => h.level));\n\n const listContent = (\n <ul className=\"m-0 list-none text-sm\">\n {headings.map((heading) => {\n const isActive = activeId === heading.id;\n const paddingLeft = `${(heading.level - currentMinLevel) * 1}rem`;\n\n return (\n <li key={heading.id} className=\"mt-0 pt-2\">\n <a\n href={`#${heading.id}`}\n onClick={() => setIsOpen(false)}\n className={cn(\n 'hover:text-foreground inline-block no-underline transition-colors',\n isActive ? 'text-primary font-medium' : 'text-muted-foreground',\n )}\n style={{ paddingLeft }}\n >\n {heading.text}\n </a>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <>\n {/* Mobile Sticky Header */}\n <div className={cn('bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n >\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">On this page:</span>\n <span className=\"truncate text-sm font-medium\">{activeHeadingText || 'Overview'}</span>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn('shrink-0 transition-transform duration-200', isOpen && 'rotate-180')}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"bg-background border-t px-4 pt-2 pb-6\">\n <nav aria-label=\"Table of contents mobile\">{listContent}</nav>\n </div>\n )}\n </div>\n\n {/* Desktop Hidden List */}\n <nav className={cn('hidden xl:block', className)} aria-label=\"Table of contents\">\n {listContent}\n </nav>\n </>\n );\n}\n\n/**\n * Wraps the content area and automatically detects headings within it.\n */\nfunction TableOfContentsContent({ children, className }: TableOfContentsContentBaseProps) {\n const { registerHeadings, setActiveId, config } = useTOC();\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const root = contentRef.current;\n if (!root) {\n return;\n }\n\n const queryHeadings = () => {\n const elements = Array.from(root.querySelectorAll(config.selector || 'h1, h2, h3, h4, h5, h6')).filter(\n (element) => {\n const level = parseInt(element.tagName.charAt(1), 10);\n return level >= (config.minLevel ?? 1) && level <= (config.maxLevel ?? 4);\n },\n );\n\n const headingItems: HeadingItem[] = elements.map((element) => {\n if (!element.id) {\n element.id = slugify(element.textContent || 'heading');\n }\n return {\n id: element.id,\n text: element.textContent || '',\n level: parseInt(element.tagName.charAt(1), 10),\n };\n });\n\n registerHeadings(headingItems);\n return elements;\n };\n\n // Initial query\n const elements = queryHeadings();\n\n // Intersection Observer for active ID\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n });\n },\n {\n rootMargin: '0px 0px -80% 0px',\n threshold: 0.1,\n },\n );\n\n elements.forEach((el) => observer.observe(el));\n\n // Mutation Observer for dynamic content\n const mutationObserver = new MutationObserver(() => {\n const newElements = queryHeadings();\n observer.disconnect();\n newElements.forEach((el) => observer.observe(el));\n });\n\n mutationObserver.observe(root, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n return () => {\n observer.disconnect();\n mutationObserver.disconnect();\n };\n }, [config.selector, config.minLevel, config.maxLevel, registerHeadings, setActiveId]);\n\n return (\n <div ref={contentRef} className={className}>\n {children}\n </div>\n );\n}\n\nTableOfContents.List = TableOfContentsList;\nTableOfContents.Content = TableOfContentsContent;\n\nexport type {\n TableOfContentsContentBaseProps as TableOfContentsContentProps,\n TableOfContentsListBaseProps as TableOfContentsListProps,\n} from '@gv-tech/ui-core';\nexport { TableOfContents, TableOfContentsContent, TableOfContentsList };\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-of-contents.cjs","names":[],"sources":["../packages/ui-web/src/table-of-contents.tsx"],"sourcesContent":["'use client';\n\nimport {\n HeadingItem,\n TableOfContentsBaseProps,\n TableOfContentsContentBaseProps,\n TableOfContentsListBaseProps,\n TableOfContentsRootBaseProps,\n} from '@gv-tech/ui-core';\nimport * as React from 'react';\nimport { cn, slugify } from './lib/utils';\n\n// Context for sharing heading data\ninterface TOCContextValue {\n headings: HeadingItem[];\n activeId: string | null;\n activeHeadingText: string | null;\n registerHeadings: (headings: HeadingItem[]) => void;\n setActiveId: (id: string | null) => void;\n config: TableOfContentsBaseProps;\n}\n\nconst TOCContext = React.createContext<TOCContextValue | null>(null);\n\nfunction useTOC() {\n const context = React.useContext(TOCContext);\n if (!context) {\n throw new Error('TOC components must be used within a TableOfContents provider');\n }\n return context;\n}\n\nexport type TableOfContentsProps = TableOfContentsRootBaseProps;\n\n/**\n * Root component that provides the Table of Contents context.\n * Can be used as a wrapper OR standalone.\n * If used as a wrapper: <TableOfContents><List /><Content>{children}</Content></TableOfContents>\n * If used standalone: <TableOfContents /> (requires container ref or defaults to document)\n */\nfunction TableOfContents({\n children,\n className,\n activeId: activeIdOverride,\n minLevel = 1,\n maxLevel = 4,\n selector = 'h1, h2, h3, h4, h5, h6',\n}: TableOfContentsProps) {\n const [headings, setHeadings] = React.useState<HeadingItem[]>([]);\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n const activeHeadingText = React.useMemo(() => {\n return headings.find((h) => h.id === activeId)?.text || null;\n }, [headings, activeId]);\n\n const registerHeadings = React.useCallback((newHeadings: HeadingItem[]) => {\n setHeadings((prev) => {\n if (JSON.stringify(prev) === JSON.stringify(newHeadings)) {\n return prev;\n }\n return newHeadings;\n });\n }, []);\n\n const value = React.useMemo(\n () => ({\n headings,\n activeId: activeIdOverride || activeId,\n activeHeadingText,\n registerHeadings,\n setActiveId,\n config: { minLevel, maxLevel, selector, className },\n }),\n [\n headings,\n activeId,\n activeIdOverride,\n activeHeadingText,\n registerHeadings,\n minLevel,\n maxLevel,\n selector,\n className,\n ],\n );\n\n return (\n <TOCContext.Provider value={value}>\n <div className={cn('relative', className)}>\n {children || (\n <div className=\"flex flex-col gap-4\">\n <TableOfContentsList />\n <TableOfContentsContent>{null}</TableOfContentsContent>\n </div>\n )}\n </div>\n </TOCContext.Provider>\n );\n}\n\n/**\n * Renders the actual list of links.\n */\nfunction TableOfContentsList({ className }: TableOfContentsListBaseProps) {\n const { headings, activeId, activeHeadingText } = useTOC();\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Auto-collapse on scroll\n React.useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = () => {\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [isOpen]);\n\n if (headings.length === 0) {\n return null;\n }\n\n const currentMinLevel = Math.min(...headings.map((h) => h.level));\n\n const listContent = (\n <ul className=\"m-0 list-none text-sm\">\n {headings.map((heading) => {\n const isActive = activeId === heading.id;\n const paddingLeft = `${(heading.level - currentMinLevel) * 1}rem`;\n\n return (\n <li key={heading.id} className=\"mt-0 pt-2\">\n <a\n href={`#${heading.id}`}\n onClick={() => setIsOpen(false)}\n className={cn(\n 'hover:text-foreground inline-block no-underline transition-colors',\n isActive ? 'text-primary font-medium' : 'text-muted-foreground',\n )}\n style={{ paddingLeft }}\n >\n {heading.text}\n </a>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <>\n {/* Mobile Sticky Header */}\n <div className={cn('bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n >\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">On this page:</span>\n <span className=\"truncate text-sm font-medium\">{activeHeadingText || 'Overview'}</span>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn('shrink-0 transition-transform duration-200', isOpen && 'rotate-180')}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"bg-background border-t px-4 pt-2 pb-6\">\n <nav aria-label=\"Table of contents mobile\">{listContent}</nav>\n </div>\n )}\n </div>\n\n {/* Desktop Hidden List */}\n <nav className={cn('hidden xl:block', className)} aria-label=\"Table of contents\">\n {listContent}\n </nav>\n </>\n );\n}\n\n/**\n * Wraps the content area and automatically detects headings within it.\n */\nfunction TableOfContentsContent({ children, className }: TableOfContentsContentBaseProps) {\n const { registerHeadings, setActiveId, config } = useTOC();\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const root = contentRef.current;\n if (!root) {\n return;\n }\n\n const queryHeadings = () => {\n const elements = Array.from(root.querySelectorAll(config.selector || 'h1, h2, h3, h4, h5, h6')).filter(\n (element) => {\n const level = parseInt(element.tagName.charAt(1), 10);\n return level >= (config.minLevel ?? 1) && level <= (config.maxLevel ?? 4);\n },\n );\n\n const headingItems: HeadingItem[] = elements.map((element) => {\n if (!element.id) {\n element.id = slugify(element.textContent || 'heading');\n }\n return {\n id: element.id,\n text: element.textContent || '',\n level: parseInt(element.tagName.charAt(1), 10),\n };\n });\n\n registerHeadings(headingItems);\n return elements;\n };\n\n // Initial query\n const elements = queryHeadings();\n\n // Intersection Observer for active ID\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n });\n },\n {\n rootMargin: '0px 0px -80% 0px',\n threshold: 0.1,\n },\n );\n\n elements.forEach((el) => observer.observe(el));\n\n // Mutation Observer for dynamic content\n const mutationObserver = new MutationObserver(() => {\n const newElements = queryHeadings();\n observer.disconnect();\n newElements.forEach((el) => observer.observe(el));\n });\n\n mutationObserver.observe(root, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n return () => {\n observer.disconnect();\n mutationObserver.disconnect();\n };\n }, [config.selector, config.minLevel, config.maxLevel, registerHeadings, setActiveId]);\n\n return (\n <div ref={contentRef} className={className}>\n {children}\n </div>\n );\n}\n\nTableOfContents.List = TableOfContentsList;\nTableOfContents.Content = TableOfContentsContent;\n\nexport type {\n TableOfContentsContentBaseProps as TableOfContentsContentProps,\n TableOfContentsListBaseProps as TableOfContentsListProps,\n} from '@gv-tech/ui-core';\nexport { TableOfContents, TableOfContentsContent, TableOfContentsList };\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { vr as e } from "./vendor-Cr0eKZrm.mjs";
4
- import { n as t, t as n } from "./utils-BtI8Nf6i.mjs";
3
+ import { vr as e } from "./vendor-ChPUVHXi.mjs";
4
+ import { n as t, t as n } from "./utils-BsD1_fYL.mjs";
5
5
  import * as r from "react";
6
6
  //#region packages/ui-web/src/table-of-contents.tsx
7
7
  var i = e(), a = r.createContext(null);
@@ -1 +1 @@
1
- {"version":3,"file":"table-of-contents.mjs","names":[],"sources":["../packages/ui-web/src/table-of-contents.tsx"],"sourcesContent":["'use client';\n\nimport {\n HeadingItem,\n TableOfContentsBaseProps,\n TableOfContentsContentBaseProps,\n TableOfContentsListBaseProps,\n TableOfContentsRootBaseProps,\n} from '@gv-tech/ui-core';\nimport * as React from 'react';\nimport { cn, slugify } from './lib/utils';\n\n// Context for sharing heading data\ninterface TOCContextValue {\n headings: HeadingItem[];\n activeId: string | null;\n activeHeadingText: string | null;\n registerHeadings: (headings: HeadingItem[]) => void;\n setActiveId: (id: string | null) => void;\n config: TableOfContentsBaseProps;\n}\n\nconst TOCContext = React.createContext<TOCContextValue | null>(null);\n\nfunction useTOC() {\n const context = React.useContext(TOCContext);\n if (!context) {\n throw new Error('TOC components must be used within a TableOfContents provider');\n }\n return context;\n}\n\nexport type TableOfContentsProps = TableOfContentsRootBaseProps;\n\n/**\n * Root component that provides the Table of Contents context.\n * Can be used as a wrapper OR standalone.\n * If used as a wrapper: <TableOfContents><List /><Content>{children}</Content></TableOfContents>\n * If used standalone: <TableOfContents /> (requires container ref or defaults to document)\n */\nfunction TableOfContents({\n children,\n className,\n activeId: activeIdOverride,\n minLevel = 1,\n maxLevel = 4,\n selector = 'h1, h2, h3, h4, h5, h6',\n}: TableOfContentsProps) {\n const [headings, setHeadings] = React.useState<HeadingItem[]>([]);\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n const activeHeadingText = React.useMemo(() => {\n return headings.find((h) => h.id === activeId)?.text || null;\n }, [headings, activeId]);\n\n const registerHeadings = React.useCallback((newHeadings: HeadingItem[]) => {\n setHeadings((prev) => {\n if (JSON.stringify(prev) === JSON.stringify(newHeadings)) {\n return prev;\n }\n return newHeadings;\n });\n }, []);\n\n const value = React.useMemo(\n () => ({\n headings,\n activeId: activeIdOverride || activeId,\n activeHeadingText,\n registerHeadings,\n setActiveId,\n config: { minLevel, maxLevel, selector, className },\n }),\n [\n headings,\n activeId,\n activeIdOverride,\n activeHeadingText,\n registerHeadings,\n minLevel,\n maxLevel,\n selector,\n className,\n ],\n );\n\n return (\n <TOCContext.Provider value={value}>\n <div className={cn('relative', className)}>\n {children || (\n <div className=\"flex flex-col gap-4\">\n <TableOfContentsList />\n <TableOfContentsContent>{null}</TableOfContentsContent>\n </div>\n )}\n </div>\n </TOCContext.Provider>\n );\n}\n\n/**\n * Renders the actual list of links.\n */\nfunction TableOfContentsList({ className }: TableOfContentsListBaseProps) {\n const { headings, activeId, activeHeadingText } = useTOC();\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Auto-collapse on scroll\n React.useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = () => {\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [isOpen]);\n\n if (headings.length === 0) {\n return null;\n }\n\n const currentMinLevel = Math.min(...headings.map((h) => h.level));\n\n const listContent = (\n <ul className=\"m-0 list-none text-sm\">\n {headings.map((heading) => {\n const isActive = activeId === heading.id;\n const paddingLeft = `${(heading.level - currentMinLevel) * 1}rem`;\n\n return (\n <li key={heading.id} className=\"mt-0 pt-2\">\n <a\n href={`#${heading.id}`}\n onClick={() => setIsOpen(false)}\n className={cn(\n 'hover:text-foreground inline-block no-underline transition-colors',\n isActive ? 'text-primary font-medium' : 'text-muted-foreground',\n )}\n style={{ paddingLeft }}\n >\n {heading.text}\n </a>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <>\n {/* Mobile Sticky Header */}\n <div className={cn('bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n >\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">On this page:</span>\n <span className=\"truncate text-sm font-medium\">{activeHeadingText || 'Overview'}</span>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn('shrink-0 transition-transform duration-200', isOpen && 'rotate-180')}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"bg-background border-t px-4 pt-2 pb-6\">\n <nav aria-label=\"Table of contents mobile\">{listContent}</nav>\n </div>\n )}\n </div>\n\n {/* Desktop Hidden List */}\n <nav className={cn('hidden xl:block', className)} aria-label=\"Table of contents\">\n {listContent}\n </nav>\n </>\n );\n}\n\n/**\n * Wraps the content area and automatically detects headings within it.\n */\nfunction TableOfContentsContent({ children, className }: TableOfContentsContentBaseProps) {\n const { registerHeadings, setActiveId, config } = useTOC();\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const root = contentRef.current;\n if (!root) {\n return;\n }\n\n const queryHeadings = () => {\n const elements = Array.from(root.querySelectorAll(config.selector || 'h1, h2, h3, h4, h5, h6')).filter(\n (element) => {\n const level = parseInt(element.tagName.charAt(1), 10);\n return level >= (config.minLevel ?? 1) && level <= (config.maxLevel ?? 4);\n },\n );\n\n const headingItems: HeadingItem[] = elements.map((element) => {\n if (!element.id) {\n element.id = slugify(element.textContent || 'heading');\n }\n return {\n id: element.id,\n text: element.textContent || '',\n level: parseInt(element.tagName.charAt(1), 10),\n };\n });\n\n registerHeadings(headingItems);\n return elements;\n };\n\n // Initial query\n const elements = queryHeadings();\n\n // Intersection Observer for active ID\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n });\n },\n {\n rootMargin: '0px 0px -80% 0px',\n threshold: 0.1,\n },\n );\n\n elements.forEach((el) => observer.observe(el));\n\n // Mutation Observer for dynamic content\n const mutationObserver = new MutationObserver(() => {\n const newElements = queryHeadings();\n observer.disconnect();\n newElements.forEach((el) => observer.observe(el));\n });\n\n mutationObserver.observe(root, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n return () => {\n observer.disconnect();\n mutationObserver.disconnect();\n };\n }, [config.selector, config.minLevel, config.maxLevel, registerHeadings, setActiveId]);\n\n return (\n <div ref={contentRef} className={className}>\n {children}\n </div>\n );\n}\n\nTableOfContents.List = TableOfContentsList;\nTableOfContents.Content = TableOfContentsContent;\n\nexport type {\n TableOfContentsContentBaseProps as TableOfContentsContentProps,\n TableOfContentsListBaseProps as TableOfContentsListProps,\n} from '@gv-tech/ui-core';\nexport { TableOfContents, TableOfContentsContent, TableOfContentsList };\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-of-contents.mjs","names":[],"sources":["../packages/ui-web/src/table-of-contents.tsx"],"sourcesContent":["'use client';\n\nimport {\n HeadingItem,\n TableOfContentsBaseProps,\n TableOfContentsContentBaseProps,\n TableOfContentsListBaseProps,\n TableOfContentsRootBaseProps,\n} from '@gv-tech/ui-core';\nimport * as React from 'react';\nimport { cn, slugify } from './lib/utils';\n\n// Context for sharing heading data\ninterface TOCContextValue {\n headings: HeadingItem[];\n activeId: string | null;\n activeHeadingText: string | null;\n registerHeadings: (headings: HeadingItem[]) => void;\n setActiveId: (id: string | null) => void;\n config: TableOfContentsBaseProps;\n}\n\nconst TOCContext = React.createContext<TOCContextValue | null>(null);\n\nfunction useTOC() {\n const context = React.useContext(TOCContext);\n if (!context) {\n throw new Error('TOC components must be used within a TableOfContents provider');\n }\n return context;\n}\n\nexport type TableOfContentsProps = TableOfContentsRootBaseProps;\n\n/**\n * Root component that provides the Table of Contents context.\n * Can be used as a wrapper OR standalone.\n * If used as a wrapper: <TableOfContents><List /><Content>{children}</Content></TableOfContents>\n * If used standalone: <TableOfContents /> (requires container ref or defaults to document)\n */\nfunction TableOfContents({\n children,\n className,\n activeId: activeIdOverride,\n minLevel = 1,\n maxLevel = 4,\n selector = 'h1, h2, h3, h4, h5, h6',\n}: TableOfContentsProps) {\n const [headings, setHeadings] = React.useState<HeadingItem[]>([]);\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n const activeHeadingText = React.useMemo(() => {\n return headings.find((h) => h.id === activeId)?.text || null;\n }, [headings, activeId]);\n\n const registerHeadings = React.useCallback((newHeadings: HeadingItem[]) => {\n setHeadings((prev) => {\n if (JSON.stringify(prev) === JSON.stringify(newHeadings)) {\n return prev;\n }\n return newHeadings;\n });\n }, []);\n\n const value = React.useMemo(\n () => ({\n headings,\n activeId: activeIdOverride || activeId,\n activeHeadingText,\n registerHeadings,\n setActiveId,\n config: { minLevel, maxLevel, selector, className },\n }),\n [\n headings,\n activeId,\n activeIdOverride,\n activeHeadingText,\n registerHeadings,\n minLevel,\n maxLevel,\n selector,\n className,\n ],\n );\n\n return (\n <TOCContext.Provider value={value}>\n <div className={cn('relative', className)}>\n {children || (\n <div className=\"flex flex-col gap-4\">\n <TableOfContentsList />\n <TableOfContentsContent>{null}</TableOfContentsContent>\n </div>\n )}\n </div>\n </TOCContext.Provider>\n );\n}\n\n/**\n * Renders the actual list of links.\n */\nfunction TableOfContentsList({ className }: TableOfContentsListBaseProps) {\n const { headings, activeId, activeHeadingText } = useTOC();\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Auto-collapse on scroll\n React.useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = () => {\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [isOpen]);\n\n if (headings.length === 0) {\n return null;\n }\n\n const currentMinLevel = Math.min(...headings.map((h) => h.level));\n\n const listContent = (\n <ul className=\"m-0 list-none text-sm\">\n {headings.map((heading) => {\n const isActive = activeId === heading.id;\n const paddingLeft = `${(heading.level - currentMinLevel) * 1}rem`;\n\n return (\n <li key={heading.id} className=\"mt-0 pt-2\">\n <a\n href={`#${heading.id}`}\n onClick={() => setIsOpen(false)}\n className={cn(\n 'hover:text-foreground inline-block no-underline transition-colors',\n isActive ? 'text-primary font-medium' : 'text-muted-foreground',\n )}\n style={{ paddingLeft }}\n >\n {heading.text}\n </a>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <>\n {/* Mobile Sticky Header */}\n <div className={cn('bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n >\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">On this page:</span>\n <span className=\"truncate text-sm font-medium\">{activeHeadingText || 'Overview'}</span>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn('shrink-0 transition-transform duration-200', isOpen && 'rotate-180')}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"bg-background border-t px-4 pt-2 pb-6\">\n <nav aria-label=\"Table of contents mobile\">{listContent}</nav>\n </div>\n )}\n </div>\n\n {/* Desktop Hidden List */}\n <nav className={cn('hidden xl:block', className)} aria-label=\"Table of contents\">\n {listContent}\n </nav>\n </>\n );\n}\n\n/**\n * Wraps the content area and automatically detects headings within it.\n */\nfunction TableOfContentsContent({ children, className }: TableOfContentsContentBaseProps) {\n const { registerHeadings, setActiveId, config } = useTOC();\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const root = contentRef.current;\n if (!root) {\n return;\n }\n\n const queryHeadings = () => {\n const elements = Array.from(root.querySelectorAll(config.selector || 'h1, h2, h3, h4, h5, h6')).filter(\n (element) => {\n const level = parseInt(element.tagName.charAt(1), 10);\n return level >= (config.minLevel ?? 1) && level <= (config.maxLevel ?? 4);\n },\n );\n\n const headingItems: HeadingItem[] = elements.map((element) => {\n if (!element.id) {\n element.id = slugify(element.textContent || 'heading');\n }\n return {\n id: element.id,\n text: element.textContent || '',\n level: parseInt(element.tagName.charAt(1), 10),\n };\n });\n\n registerHeadings(headingItems);\n return elements;\n };\n\n // Initial query\n const elements = queryHeadings();\n\n // Intersection Observer for active ID\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n });\n },\n {\n rootMargin: '0px 0px -80% 0px',\n threshold: 0.1,\n },\n );\n\n elements.forEach((el) => observer.observe(el));\n\n // Mutation Observer for dynamic content\n const mutationObserver = new MutationObserver(() => {\n const newElements = queryHeadings();\n observer.disconnect();\n newElements.forEach((el) => observer.observe(el));\n });\n\n mutationObserver.observe(root, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n return () => {\n observer.disconnect();\n mutationObserver.disconnect();\n };\n }, [config.selector, config.minLevel, config.maxLevel, registerHeadings, setActiveId]);\n\n return (\n <div ref={contentRef} className={className}>\n {children}\n </div>\n );\n}\n\nTableOfContents.List = TableOfContentsList;\nTableOfContents.Content = TableOfContentsContent;\n\nexport type {\n TableOfContentsContentBaseProps as TableOfContentsContentProps,\n TableOfContentsListBaseProps as TableOfContentsListProps,\n} from '@gv-tech/ui-core';\nexport { TableOfContents, TableOfContentsContent, TableOfContentsList };\n"],"mappings":";;;;;;aAsBM,IAAa,EAAM,cAAsC,IAAI;AAEnE,SAAS,IAAS;CAChB,IAAM,IAAU,EAAM,WAAW,CAAU;CAC3C,IAAI,CAAC,GACH,MAAU,MAAM,+DAA+D;CAEjF,OAAO;AACT;AAUA,SAAS,EAAgB,EACvB,aACA,cACA,UAAU,GACV,cAAW,GACX,cAAW,GACX,cAAW,4BACY;CACvB,IAAM,CAAC,GAAU,KAAe,EAAM,SAAwB,CAAC,CAAC,GAC1D,CAAC,GAAU,KAAe,EAAM,SAAwB,IAAI,GAE5D,IAAoB,EAAM,cACvB,EAAS,MAAM,MAAM,EAAE,OAAO,CAAQ,GAAG,QAAQ,MACvD,CAAC,GAAU,CAAQ,CAAC,GAEjB,IAAmB,EAAM,aAAa,MAA+B;EACzE,GAAa,MACP,KAAK,UAAU,CAAI,MAAM,KAAK,UAAU,CAAW,IAC9C,IAEF,CACR;CACH,GAAG,CAAC,CAAC,GAEC,IAAQ,EAAM,eACX;EACL;EACA,UAAU,KAAoB;EAC9B;EACA;EACA;EACA,QAAQ;GAAE;GAAU;GAAU;GAAU;EAAU;CACpD,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,OACE,iBAAA,GAAA,EAAA,KAAC,EAAW,UAAZ;EAA4B;YAC1B,iBAAA,GAAA,EAAA,KAAC,OAAD;GAAK,WAAW,EAAG,YAAY,CAAS;aACrC,KACC,iBAAA,GAAA,EAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,EAAA,KAAC,GAAD,CAAsB,CAAA,GACtB,iBAAA,GAAA,EAAA,KAAC,GAAD,EAAA,UAAyB,KAA6B,CAAA,CACnD;;EAEJ,CAAA;CACc,CAAA;AAEzB;AAKA,SAAS,EAAoB,EAAE,gBAA2C;CACxE,IAAM,EAAE,aAAU,aAAU,yBAAsB,EAAO,GACnD,CAAC,GAAQ,KAAa,EAAM,SAAS,EAAK;CAgBhD,IAbA,EAAM,gBAAgB;EACpB,IAAI,CAAC,GACH;EAGF,IAAM,UAAqB;GACzB,EAAU,EAAK;EACjB;EAGA,OADA,OAAO,iBAAiB,UAAU,GAAc,EAAE,SAAS,GAAK,CAAC,SACpD,OAAO,oBAAoB,UAAU,CAAY;CAChE,GAAG,CAAC,CAAM,CAAC,GAEP,EAAS,WAAW,GACtB,OAAO;CAGT,IAAM,IAAkB,KAAK,IAAI,GAAG,EAAS,KAAK,MAAM,EAAE,KAAK,CAAC,GAE1D,IACJ,iBAAA,GAAA,EAAA,KAAC,MAAD;EAAI,WAAU;YACX,EAAS,KAAK,MAAY;GACzB,IAAM,IAAW,MAAa,EAAQ,IAChC,IAAc,IAAI,EAAQ,QAAQ,KAAmB,EAAE;GAE7D,OACE,iBAAA,GAAA,EAAA,KAAC,MAAD;IAAqB,WAAU;cAC7B,iBAAA,GAAA,EAAA,KAAC,KAAD;KACE,MAAM,IAAI,EAAQ;KAClB,eAAe,EAAU,EAAK;KAC9B,WAAW,EACT,qEACA,IAAW,6BAA6B,uBAC1C;KACA,OAAO,EAAE,eAAY;eAEpB,EAAQ;IACR,CAAA;GACD,GAZK,EAAQ,EAYb;EAER,CAAC;CACC,CAAA;CAGN,OACE,iBAAA,GAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAEE,iBAAA,GAAA,EAAA,MAAC,OAAD;EAAK,WAAW,EAAG,uEAAuE,CAAS;YAAnG,CACE,iBAAA,GAAA,EAAA,MAAC,UAAD;GACE,eAAe,EAAU,CAAC,CAAM;GAChC,WAAU;aAFZ,CAIE,iBAAA,GAAA,EAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,EAAA,KAAC,QAAD;KAAM,WAAU;eAAuE;IAAmB,CAAA,GAC1G,iBAAA,GAAA,EAAA,KAAC,QAAD;KAAM,WAAU;eAAgC,KAAqB;IAAiB,CAAA,CACnF;OACL,iBAAA,GAAA,EAAA,KAAC,OAAD;IACE,OAAM;IACN,OAAM;IACN,QAAO;IACP,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf,WAAW,EAAG,8CAA8C,KAAU,YAAY;cAElF,iBAAA,GAAA,EAAA,KAAC,QAAD,EAAM,GAAE,eAAgB,CAAA;GACrB,CAAA,CACC;MAEP,KACC,iBAAA,GAAA,EAAA,KAAC,OAAD;GAAK,WAAU;aACb,iBAAA,GAAA,EAAA,KAAC,OAAD;IAAK,cAAW;cAA4B;GAAiB,CAAA;EAC1D,CAAA,CAEJ;KAGL,iBAAA,GAAA,EAAA,KAAC,OAAD;EAAK,WAAW,EAAG,mBAAmB,CAAS;EAAG,cAAW;YAC1D;CACE,CAAA,CACL,EAAA,CAAA;AAEN;AAKA,SAAS,EAAuB,EAAE,aAAU,gBAA8C;CACxF,IAAM,EAAE,qBAAkB,gBAAa,cAAW,EAAO,GACnD,IAAa,EAAM,OAAuB,IAAI;CAsEpD,OApEA,EAAM,gBAAgB;EACpB,IAAM,IAAO,EAAW;EACxB,IAAI,CAAC,GACH;EAGF,IAAM,UAAsB;GAC1B,IAAM,IAAW,MAAM,KAAK,EAAK,iBAAiB,EAAO,YAAY,wBAAwB,CAAC,EAAE,QAC7F,MAAY;IACX,IAAM,IAAQ,SAAS,EAAQ,QAAQ,OAAO,CAAC,GAAG,EAAE;IACpD,OAAO,MAAU,EAAO,YAAY,MAAM,MAAU,EAAO,YAAY;GACzE,CACF;GAcA,OADA,EAXoC,EAAS,KAAK,OAChD,AACE,EAAQ,OAAK,EAAQ,EAAQ,eAAe,SAAS,GAEhD;IACL,IAAI,EAAQ;IACZ,MAAM,EAAQ,eAAe;IAC7B,OAAO,SAAS,EAAQ,QAAQ,OAAO,CAAC,GAAG,EAAE;GAC/C,EAGe,CAAY,GACtB;EACT,GAGM,IAAW,EAAc,GAGzB,IAAW,IAAI,sBAClB,MAAY;GACX,EAAQ,SAAS,MAAU;IACzB,AAAI,EAAM,kBACR,EAAY,EAAM,OAAO,EAAE;GAE/B,CAAC;EACH,GACA;GACE,YAAY;GACZ,WAAW;EACb,CACF;EAEA,EAAS,SAAS,MAAO,EAAS,QAAQ,CAAE,CAAC;EAG7C,IAAM,IAAmB,IAAI,uBAAuB;GAClD,IAAM,IAAc,EAAc;GAElC,AADA,EAAS,WAAW,GACpB,EAAY,SAAS,MAAO,EAAS,QAAQ,CAAE,CAAC;EAClD,CAAC;EAQD,OANA,EAAiB,QAAQ,GAAM;GAC7B,WAAW;GACX,SAAS;GACT,eAAe;EACjB,CAAC,SAEY;GAEX,AADA,EAAS,WAAW,GACpB,EAAiB,WAAW;EAC9B;CACF,GAAG;EAAC,EAAO;EAAU,EAAO;EAAU,EAAO;EAAU;EAAkB;CAAW,CAAC,GAGnF,iBAAA,GAAA,EAAA,KAAC,OAAD;EAAK,KAAK;EAAuB;EAC9B;CACE,CAAA;AAET;AAEA,EAAgB,OAAO,GACvB,EAAgB,UAAU"}
package/dist/table.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rolldown-runtime-CacfPODE.js`),t=require(`./vendor-D3ZzLf8D.js`),n=require(`./utils-CbSX47LV.js`);let r=require(`react`);r=e.r(r);var i=t.vr(),a=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{className:`relative w-full overflow-auto`,children:(0,i.jsx)(`table`,{ref:r,className:n.t(`w-full caption-bottom text-sm`,e),...t})}));a.displayName=`Table`;var o=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`thead`,{ref:r,className:n.t(`[&_tr]:border-b`,e),...t}));o.displayName=`TableHeader`;var s=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`tbody`,{ref:r,className:n.t(`[&_tr:last-child]:border-0`,e),...t}));s.displayName=`TableBody`;var c=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`tfoot`,{ref:r,className:n.t(`bg-muted/50 border-t font-medium [&>tr]:last:border-b-0`,e),...t}));c.displayName=`TableFooter`;var l=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`tr`,{ref:r,className:n.t(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,e),...t}));l.displayName=`TableRow`;var u=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`th`,{ref:r,className:n.t(`text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));u.displayName=`TableHead`;var d=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`td`,{ref:r,className:n.t(`p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));d.displayName=`TableCell`;var f=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`caption`,{ref:r,className:n.t(`text-muted-foreground mt-4 text-sm`,e),...t}));f.displayName=`TableCaption`,exports.Table=a,exports.TableBody=s,exports.TableCaption=f,exports.TableCell=d,exports.TableFooter=c,exports.TableHead=u,exports.TableHeader=o,exports.TableRow=l;
1
+ "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-mLOUI7ql.js"),t=require("./vendor-3cr8xz0x.js"),n=require("./utils-DU-Y_pvO.js");let r=require("react");r=e.r(r);var i=t.vr(),a=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{className:`relative w-full overflow-auto`,children:(0,i.jsx)(`table`,{ref:r,className:n.t(`w-full caption-bottom text-sm`,e),...t})}));a.displayName=`Table`;var o=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`thead`,{ref:r,className:n.t(`[&_tr]:border-b`,e),...t}));o.displayName=`TableHeader`;var s=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`tbody`,{ref:r,className:n.t(`[&_tr:last-child]:border-0`,e),...t}));s.displayName=`TableBody`;var c=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`tfoot`,{ref:r,className:n.t(`bg-muted/50 border-t font-medium [&>tr]:last:border-b-0`,e),...t}));c.displayName=`TableFooter`;var l=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`tr`,{ref:r,className:n.t(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,e),...t}));l.displayName=`TableRow`;var u=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`th`,{ref:r,className:n.t(`text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));u.displayName=`TableHead`;var d=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`td`,{ref:r,className:n.t(`p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));d.displayName=`TableCell`;var f=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`caption`,{ref:r,className:n.t(`text-muted-foreground mt-4 text-sm`,e),...t}));f.displayName=`TableCaption`,exports.Table=a,exports.TableBody=s,exports.TableCaption=f,exports.TableCell=d,exports.TableFooter=c,exports.TableHead=u,exports.TableHeader=o,exports.TableRow=l;
2
2
  //# sourceMappingURL=table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.cjs","names":[],"sources":["../packages/ui-web/src/table.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport {\n TableBaseProps,\n TableBodyBaseProps,\n TableCaptionBaseProps,\n TableCellBaseProps,\n TableFooterBaseProps,\n TableHeadBaseProps,\n TableHeaderBaseProps,\n TableRowBaseProps,\n} from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement> & TableBaseProps>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n ),\n);\nTable.displayName = 'Table';\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableHeaderBaseProps\n>(({ className, ...props }, ref) => <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />);\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableBodyBaseProps\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableFooterBaseProps\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)} {...props} />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement> & TableRowBaseProps>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn('hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', className)}\n {...props}\n />\n ),\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement> & TableHeadBaseProps\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement> & TableCellBaseProps\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement> & TableCaptionBaseProps\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('text-muted-foreground mt-4 text-sm', className)} {...props} />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };\nexport type {\n TableBodyBaseProps as TableBodyProps,\n TableCaptionBaseProps as TableCaptionProps,\n TableCellBaseProps as TableCellProps,\n TableFooterBaseProps as TableFooterProps,\n TableHeaderBaseProps as TableHeaderProps,\n TableHeadBaseProps as TableHeadProps,\n TableBaseProps as TableProps,\n TableRowBaseProps as TableRowProps,\n};\n"],"mappings":"+PAgBM,EAAQ,EAAM,YACjB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACb,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,gCAAiC,EAAU,CAAE,GAAI,EAAS,CAAA,CACrF,CAAA,CAET,CACD,EAAM,YAAc,QAEpB,IAAM,EAAc,EAAM,YAGvB,CAAE,YAAW,GAAG,GAAS,KAAQ,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,kBAAmB,EAAU,CAAE,GAAI,EAAS,CAAA,CAAC,CAChH,EAAY,YAAc,cAE1B,IAAM,EAAY,EAAM,YAGrB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,6BAA8B,EAAU,CAAE,GAAI,EAAS,CAAA,CACtF,CACF,EAAU,YAAc,YAExB,IAAM,EAAc,EAAM,YAGvB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,0DAA2D,EAAU,CAAE,GAAI,EAAS,CAAA,CACnH,CACF,EAAY,YAAc,cAE1B,IAAM,EAAW,EAAM,YACpB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,KAAD,CACO,MACL,UAAW,EAAA,EAAG,8EAA+E,EAAU,CACvG,GAAI,EACJ,CAAA,CAEL,CACD,EAAS,YAAc,WAEvB,IAAM,EAAY,EAAM,YAGrB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,KAAD,CACO,MACL,UAAW,EAAA,EACT,yIACA,EACD,CACD,GAAI,EACJ,CAAA,CACF,CACF,EAAU,YAAc,YAExB,IAAM,EAAY,EAAM,YAGrB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,KAAD,CACO,MACL,UAAW,EAAA,EAAG,uFAAwF,EAAU,CAChH,GAAI,EACJ,CAAA,CACF,CACF,EAAU,YAAc,YAExB,IAAM,EAAe,EAAM,YAGxB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,UAAD,CAAc,MAAK,UAAW,EAAA,EAAG,qCAAsC,EAAU,CAAE,GAAI,EAAS,CAAA,CAChG,CACF,EAAa,YAAc"}
1
+ {"version":3,"file":"table.cjs","names":[],"sources":["../packages/ui-web/src/table.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport {\n TableBaseProps,\n TableBodyBaseProps,\n TableCaptionBaseProps,\n TableCellBaseProps,\n TableFooterBaseProps,\n TableHeadBaseProps,\n TableHeaderBaseProps,\n TableRowBaseProps,\n} from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement> & TableBaseProps>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n ),\n);\nTable.displayName = 'Table';\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableHeaderBaseProps\n>(({ className, ...props }, ref) => <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />);\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableBodyBaseProps\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableFooterBaseProps\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)} {...props} />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement> & TableRowBaseProps>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn('hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', className)}\n {...props}\n />\n ),\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement> & TableHeadBaseProps\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement> & TableCellBaseProps\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement> & TableCaptionBaseProps\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('text-muted-foreground mt-4 text-sm', className)} {...props} />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };\nexport type {\n TableBodyBaseProps as TableBodyProps,\n TableCaptionBaseProps as TableCaptionProps,\n TableCellBaseProps as TableCellProps,\n TableFooterBaseProps as TableFooterProps,\n TableHeaderBaseProps as TableHeaderProps,\n TableHeadBaseProps as TableHeadProps,\n TableBaseProps as TableProps,\n TableRowBaseProps as TableRowProps,\n};\n"],"mappings":"+PAgBM,EAAQ,EAAM,YACjB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACb,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,gCAAiC,CAAS,EAAG,GAAI,CAAQ,CAAA,CACrF,CAAA,CAET,EACA,EAAM,YAAc,QAEpB,IAAM,EAAc,EAAM,YAGvB,CAAE,YAAW,GAAG,GAAS,KAAQ,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,kBAAmB,CAAS,EAAG,GAAI,CAAQ,CAAA,CAAC,EAC/G,EAAY,YAAc,cAE1B,IAAM,EAAY,EAAM,YAGrB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,6BAA8B,CAAS,EAAG,GAAI,CAAQ,CAAA,CACtF,EACD,EAAU,YAAc,YAExB,IAAM,EAAc,EAAM,YAGvB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,QAAD,CAAY,MAAK,UAAW,EAAA,EAAG,0DAA2D,CAAS,EAAG,GAAI,CAAQ,CAAA,CACnH,EACD,EAAY,YAAc,cAE1B,IAAM,EAAW,EAAM,YACpB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,KAAD,CACO,MACL,UAAW,EAAA,EAAG,8EAA+E,CAAS,EACtG,GAAI,CACL,CAAA,CAEL,EACA,EAAS,YAAc,WAEvB,IAAM,EAAY,EAAM,YAGrB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,KAAD,CACO,MACL,UAAW,EAAA,EACT,yIACA,CACF,EACA,GAAI,CACL,CAAA,CACF,EACD,EAAU,YAAc,YAExB,IAAM,EAAY,EAAM,YAGrB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,KAAD,CACO,MACL,UAAW,EAAA,EAAG,uFAAwF,CAAS,EAC/G,GAAI,CACL,CAAA,CACF,EACD,EAAU,YAAc,YAExB,IAAM,EAAe,EAAM,YAGxB,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,KAAC,UAAD,CAAc,MAAK,UAAW,EAAA,EAAG,qCAAsC,CAAS,EAAG,GAAI,CAAQ,CAAA,CAChG,EACD,EAAa,YAAc"}
package/dist/table.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { vr as e } from "./vendor-Cr0eKZrm.mjs";
4
- import { t } from "./utils-BtI8Nf6i.mjs";
3
+ import { vr as e } from "./vendor-ChPUVHXi.mjs";
4
+ import { t } from "./utils-BsD1_fYL.mjs";
5
5
  import * as n from "react";
6
6
  //#region packages/ui-web/src/table.tsx
7
7
  var r = e(), i = n.forwardRef(({ className: e, ...n }, i) => /* @__PURE__ */ (0, r.jsx)("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"table.mjs","names":[],"sources":["../packages/ui-web/src/table.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport {\n TableBaseProps,\n TableBodyBaseProps,\n TableCaptionBaseProps,\n TableCellBaseProps,\n TableFooterBaseProps,\n TableHeadBaseProps,\n TableHeaderBaseProps,\n TableRowBaseProps,\n} from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement> & TableBaseProps>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n ),\n);\nTable.displayName = 'Table';\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableHeaderBaseProps\n>(({ className, ...props }, ref) => <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />);\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableBodyBaseProps\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableFooterBaseProps\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)} {...props} />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement> & TableRowBaseProps>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn('hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', className)}\n {...props}\n />\n ),\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement> & TableHeadBaseProps\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement> & TableCellBaseProps\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement> & TableCaptionBaseProps\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('text-muted-foreground mt-4 text-sm', className)} {...props} />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };\nexport type {\n TableBodyBaseProps as TableBodyProps,\n TableCaptionBaseProps as TableCaptionProps,\n TableCellBaseProps as TableCellProps,\n TableFooterBaseProps as TableFooterProps,\n TableHeaderBaseProps as TableHeaderProps,\n TableHeadBaseProps as TableHeadProps,\n TableBaseProps as TableProps,\n TableRowBaseProps as TableRowProps,\n};\n"],"mappings":";;;;;;aAgBM,IAAQ,EAAM,YACjB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAK,WAAU;WACb,iBAAA,GAAA,EAAA,KAAC,SAAD;EAAY;EAAK,WAAW,EAAG,iCAAiC,EAAU;EAAE,GAAI;EAAS,CAAA;CACrF,CAAA,CAET;AACD,EAAM,cAAc;AAEpB,IAAM,IAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAAQ,iBAAA,GAAA,EAAA,KAAC,SAAD;CAAY;CAAK,WAAW,EAAG,mBAAmB,EAAU;CAAE,GAAI;CAAS,CAAA,CAAC;AAChH,EAAY,cAAc;AAE1B,IAAM,IAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,SAAD;CAAY;CAAK,WAAW,EAAG,8BAA8B,EAAU;CAAE,GAAI;CAAS,CAAA,CACtF;AACF,EAAU,cAAc;AAExB,IAAM,IAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,SAAD;CAAY;CAAK,WAAW,EAAG,2DAA2D,EAAU;CAAE,GAAI;CAAS,CAAA,CACnH;AACF,EAAY,cAAc;AAE1B,IAAM,IAAW,EAAM,YACpB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,MAAD;CACO;CACL,WAAW,EAAG,+EAA+E,EAAU;CACvG,GAAI;CACJ,CAAA,CAEL;AACD,EAAS,cAAc;AAEvB,IAAM,IAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,MAAD;CACO;CACL,WAAW,EACT,0IACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,EAAU,cAAc;AAExB,IAAM,IAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,MAAD;CACO;CACL,WAAW,EAAG,wFAAwF,EAAU;CAChH,GAAI;CACJ,CAAA,CACF;AACF,EAAU,cAAc;AAExB,IAAM,IAAe,EAAM,YAGxB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,WAAD;CAAc;CAAK,WAAW,EAAG,sCAAsC,EAAU;CAAE,GAAI;CAAS,CAAA,CAChG;AACF,EAAa,cAAc"}
1
+ {"version":3,"file":"table.mjs","names":[],"sources":["../packages/ui-web/src/table.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport {\n TableBaseProps,\n TableBodyBaseProps,\n TableCaptionBaseProps,\n TableCellBaseProps,\n TableFooterBaseProps,\n TableHeadBaseProps,\n TableHeaderBaseProps,\n TableRowBaseProps,\n} from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement> & TableBaseProps>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n ),\n);\nTable.displayName = 'Table';\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableHeaderBaseProps\n>(({ className, ...props }, ref) => <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />);\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableBodyBaseProps\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement> & TableFooterBaseProps\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)} {...props} />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement> & TableRowBaseProps>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn('hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', className)}\n {...props}\n />\n ),\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement> & TableHeadBaseProps\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement> & TableCellBaseProps\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement> & TableCaptionBaseProps\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('text-muted-foreground mt-4 text-sm', className)} {...props} />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };\nexport type {\n TableBodyBaseProps as TableBodyProps,\n TableCaptionBaseProps as TableCaptionProps,\n TableCellBaseProps as TableCellProps,\n TableFooterBaseProps as TableFooterProps,\n TableHeaderBaseProps as TableHeaderProps,\n TableHeadBaseProps as TableHeadProps,\n TableBaseProps as TableProps,\n TableRowBaseProps as TableRowProps,\n};\n"],"mappings":";;;;;;aAgBM,IAAQ,EAAM,YACjB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAK,WAAU;WACb,iBAAA,GAAA,EAAA,KAAC,SAAD;EAAY;EAAK,WAAW,EAAG,iCAAiC,CAAS;EAAG,GAAI;CAAQ,CAAA;AACrF,CAAA,CAET;AACA,EAAM,cAAc;AAEpB,IAAM,IAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAAQ,iBAAA,GAAA,EAAA,KAAC,SAAD;CAAY;CAAK,WAAW,EAAG,mBAAmB,CAAS;CAAG,GAAI;AAAQ,CAAA,CAAC;AAC/G,EAAY,cAAc;AAE1B,IAAM,IAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,SAAD;CAAY;CAAK,WAAW,EAAG,8BAA8B,CAAS;CAAG,GAAI;AAAQ,CAAA,CACtF;AACD,EAAU,cAAc;AAExB,IAAM,IAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,SAAD;CAAY;CAAK,WAAW,EAAG,2DAA2D,CAAS;CAAG,GAAI;AAAQ,CAAA,CACnH;AACD,EAAY,cAAc;AAE1B,IAAM,IAAW,EAAM,YACpB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,MAAD;CACO;CACL,WAAW,EAAG,+EAA+E,CAAS;CACtG,GAAI;AACL,CAAA,CAEL;AACA,EAAS,cAAc;AAEvB,IAAM,IAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,MAAD;CACO;CACL,WAAW,EACT,0IACA,CACF;CACA,GAAI;AACL,CAAA,CACF;AACD,EAAU,cAAc;AAExB,IAAM,IAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,MAAD;CACO;CACL,WAAW,EAAG,wFAAwF,CAAS;CAC/G,GAAI;AACL,CAAA,CACF;AACD,EAAU,cAAc;AAExB,IAAM,IAAe,EAAM,YAGxB,EAAE,cAAW,GAAG,KAAS,MAC1B,iBAAA,GAAA,EAAA,KAAC,WAAD;CAAc;CAAK,WAAW,EAAG,sCAAsC,CAAS;CAAG,GAAI;AAAQ,CAAA,CAChG;AACD,EAAa,cAAc"}
package/dist/tabs.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rolldown-runtime-CacfPODE.js`),t=require(`./vendor-D3ZzLf8D.js`),n=require(`./utils-CbSX47LV.js`);let r=require(`react`);r=e.r(r);var i=t.vr(),a=t._,o=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.g,{ref:a,className:n.t(`bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1`,e),...r}));o.displayName=t.g?.displayName||`TabsList`;var s=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.v,{ref:a,className:n.t(`ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow`,e),...r}));s.displayName=t.v?.displayName||`TabsTrigger`;var c=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.h,{ref:a,className:n.t(`ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none`,e),...r}));c.displayName=t.h?.displayName||`TabsContent`,exports.Tabs=a,exports.TabsContent=c,exports.TabsList=o,exports.TabsTrigger=s;
1
+ "use client";"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-mLOUI7ql.js"),t=require("./vendor-3cr8xz0x.js"),n=require("./utils-DU-Y_pvO.js");let r=require("react");r=e.r(r);var i=t.vr(),a=t._,o=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.g,{ref:a,className:n.t(`bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1`,e),...r}));o.displayName=t.g?.displayName||`TabsList`;var s=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.v,{ref:a,className:n.t(`ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow`,e),...r}));s.displayName=t.v?.displayName||`TabsTrigger`;var c=r.forwardRef(({className:e,...r},a)=>(0,i.jsx)(t.h,{ref:a,className:n.t(`ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none`,e),...r}));c.displayName=t.h?.displayName||`TabsContent`,exports.Tabs=a,exports.TabsContent=c,exports.TabsList=o,exports.TabsTrigger=s;
2
2
  //# sourceMappingURL=tabs.cjs.map