@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
package/dist/calendar.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { Sn as e, ar as t, ir as n, rr as r, vr as i, xn as a } from "./vendor-Cr0eKZrm.mjs";
4
- import { t as o } from "./utils-BtI8Nf6i.mjs";
3
+ import { Sn as e, ar as t, ir as n, rr as r, vr as i, xn as a } from "./vendor-ChPUVHXi.mjs";
4
+ import { t as o } from "./utils-BsD1_fYL.mjs";
5
5
  import { Button as s, buttonVariants as c } from "./button.mjs";
6
6
  import * as l from "react";
7
7
  //#region packages/ui-web/src/calendar.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.mjs","names":[],"sources":["../packages/ui-web/src/calendar.tsx"],"sourcesContent":["'use client';\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { CalendarBaseProps } from '@gv-tech/ui-core';\nimport { Button, buttonVariants } from './button';\nimport { cn } from './lib/utils';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> &\n CalendarBaseProps & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n }) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'bg-background group/calendar p-3 [--cell-size:2.5rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n 'relative',\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-4 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-2 flex items-center justify-between pointer-events-none px-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-[--cell-size] w-full items-center justify-center text-sm font-medium',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label'\n ? 'text-sm'\n : '[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5',\n defaultClassNames.caption_label,\n ),\n table: 'w-full border-collapse grow',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'text-muted-foreground pt-1 flex-1 select-none rounded-md text-[0.8rem] font-normal uppercase',\n defaultClassNames.weekday,\n ),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('w-[--cell-size] select-none', defaultClassNames.week_number_header),\n week_number: cn('text-muted-foreground select-none text-[0.8rem]', defaultClassNames.week_number),\n day: cn(\n 'group/day relative flex aspect-square h-10 w-10 select-none items-center justify-center p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md',\n defaultClassNames.day,\n ),\n range_start: cn('bg-accent rounded-l-md', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('bg-accent rounded-r-md', defaultClassNames.range_end),\n today: cn(\n 'bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none',\n defaultClassNames.today,\n ),\n outside: cn('text-muted-foreground aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-[--cell-size] items-center justify-center text-center\">{children}</div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) {\n ref.current?.focus();\n }\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-full w-full min-w-[--cell-size] items-center justify-center leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md [&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\nexport type { CalendarBaseProps as CalendarProps };\n"],"mappings":";;;;;;;;AASA,SAAS,EAAS,EAChB,cACA,eACA,qBAAkB,IAClB,mBAAgB,SAChB,mBAAgB,SAChB,eACA,eACA,GAAG,KAIA;CACH,IAAM,IAAoB,GAAsB;AAEhD,QACE,iBAAA,GAAA,EAAA,KAAC,GAAD;EACmB;EACjB,WAAW,EACT,oJACA,OAAO,GAAG,6CACV,OAAO,GAAG,iDACV,YACA,EACD;EACc;EACf,YAAY;GACV,sBAAsB,MAAS,EAAK,eAAe,WAAW,EAAE,OAAO,SAAS,CAAC;GACjF,GAAG;GACJ;EACD,YAAY;GACV,MAAM,EAAG,SAAS,EAAkB,KAAK;GACzC,QAAQ,EAAG,4CAA4C,EAAkB,OAAO;GAChF,OAAO,EAAG,8BAA8B,EAAkB,MAAM;GAChE,KAAK,EACH,uFACA,EAAkB,IACnB;GACD,iBAAiB,EACf,EAAe,EAAE,SAAS,GAAe,CAAC,EAC1C,wEACA,EAAkB,gBACnB;GACD,aAAa,EACX,EAAe,EAAE,SAAS,GAAe,CAAC,EAC1C,wEACA,EAAkB,YACnB;GACD,eAAe,EACb,+EACA,EAAkB,cACnB;GACD,WAAW,EACT,uFACA,EAAkB,UACnB;GACD,eAAe,EACb,uHACA,EAAkB,cACnB;GACD,UAAU,EAAG,yCAAyC,EAAkB,SAAS;GACjF,eAAe,EACb,2BACA,MAAkB,UACd,YACA,2GACJ,EAAkB,cACnB;GACD,OAAO;GACP,UAAU,EAAG,QAAQ,EAAkB,SAAS;GAChD,SAAS,EACP,gGACA,EAAkB,QACnB;GACD,MAAM,EAAG,oBAAoB,EAAkB,KAAK;GACpD,oBAAoB,EAAG,+BAA+B,EAAkB,mBAAmB;GAC3F,aAAa,EAAG,mDAAmD,EAAkB,YAAY;GACjG,KAAK,EACH,0NACA,EAAkB,IACnB;GACD,aAAa,EAAG,0BAA0B,EAAkB,YAAY;GACxE,cAAc,EAAG,gBAAgB,EAAkB,aAAa;GAChE,WAAW,EAAG,0BAA0B,EAAkB,UAAU;GACpE,OAAO,EACL,iFACA,EAAkB,MACnB;GACD,SAAS,EAAG,6DAA6D,EAAkB,QAAQ;GACnG,UAAU,EAAG,oCAAoC,EAAkB,SAAS;GAC5E,QAAQ,EAAG,aAAa,EAAkB,OAAO;GACjD,GAAG;GACJ;EACD,YAAY;GACV,OAAO,EAAE,cAAW,YAAS,GAAG,QACvB,iBAAA,GAAA,EAAA,KAAC,OAAD;IAAK,aAAU;IAAW,KAAK;IAAS,WAAW,EAAG,EAAU;IAAE,GAAI;IAAS,CAAA;GAExF,UAAU,EAAE,cAAW,gBAAa,GAAG,QACjC,MAAgB,SACX,iBAAA,GAAA,EAAA,KAAC,GAAD;IAAiB,WAAW,EAAG,UAAU,EAAU;IAAE,GAAI;IAAS,CAAA,GAGvE,MAAgB,UACX,iBAAA,GAAA,EAAA,KAAC,GAAD;IAAkB,WAAW,EAAG,UAAU,EAAU;IAAE,GAAI;IAAS,CAAA,GAGrE,iBAAA,GAAA,EAAA,KAAC,GAAD;IAAiB,WAAW,EAAG,UAAU,EAAU;IAAE,GAAI;IAAS,CAAA;GAE3E,WAAW;GACX,aAAa,EAAE,aAAU,GAAG,QAExB,iBAAA,GAAA,EAAA,KAAC,MAAD;IAAI,GAAI;cACN,iBAAA,GAAA,EAAA,KAAC,OAAD;KAAK,WAAU;KAAmE;KAAe,CAAA;IAC9F,CAAA;GAGT,GAAG;GACJ;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,EAAkB,EAAE,cAAW,QAAK,cAAW,GAAG,KAAiD;CAC1G,IAAM,IAAoB,GAAsB,EAE1C,IAAM,EAAM,OAA0B,KAAK;AAOjD,QANA,EAAM,gBAAgB;AACpB,EAAI,EAAU,WACZ,EAAI,SAAS,OAAO;IAErB,CAAC,EAAU,QAAQ,CAAC,EAGrB,iBAAA,GAAA,EAAA,KAAC,GAAD;EACO;EACL,SAAQ;EACR,MAAK;EACL,YAAU,EAAI,KAAK,oBAAoB;EACvC,wBACE,EAAU,YAAY,CAAC,EAAU,eAAe,CAAC,EAAU,aAAa,CAAC,EAAU;EAErF,oBAAkB,EAAU;EAC5B,kBAAgB,EAAU;EAC1B,qBAAmB,EAAU;EAC7B,WAAW,EACT,oxBACA,EAAkB,KAClB,EACD;EACD,GAAI;EACJ,CAAA"}
1
+ {"version":3,"file":"calendar.mjs","names":[],"sources":["../packages/ui-web/src/calendar.tsx"],"sourcesContent":["'use client';\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { CalendarBaseProps } from '@gv-tech/ui-core';\nimport { Button, buttonVariants } from './button';\nimport { cn } from './lib/utils';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> &\n CalendarBaseProps & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n }) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'bg-background group/calendar p-3 [--cell-size:2.5rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n 'relative',\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-4 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-2 flex items-center justify-between pointer-events-none px-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-[--cell-size] w-full items-center justify-center text-sm font-medium',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label'\n ? 'text-sm'\n : '[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5',\n defaultClassNames.caption_label,\n ),\n table: 'w-full border-collapse grow',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'text-muted-foreground pt-1 flex-1 select-none rounded-md text-[0.8rem] font-normal uppercase',\n defaultClassNames.weekday,\n ),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('w-[--cell-size] select-none', defaultClassNames.week_number_header),\n week_number: cn('text-muted-foreground select-none text-[0.8rem]', defaultClassNames.week_number),\n day: cn(\n 'group/day relative flex aspect-square h-10 w-10 select-none items-center justify-center p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md',\n defaultClassNames.day,\n ),\n range_start: cn('bg-accent rounded-l-md', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('bg-accent rounded-r-md', defaultClassNames.range_end),\n today: cn(\n 'bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none',\n defaultClassNames.today,\n ),\n outside: cn('text-muted-foreground aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-[--cell-size] items-center justify-center text-center\">{children}</div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) {\n ref.current?.focus();\n }\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-full w-full min-w-[--cell-size] items-center justify-center leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md [&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\nexport type { CalendarBaseProps as CalendarProps };\n"],"mappings":"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"}
package/dist/card.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`,{ref:r,className:n.t(`bg-card text-card-foreground rounded-xl border shadow`,e),...t}));a.displayName=`Card`;var o=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`flex flex-col space-y-1.5 p-6`,e),...t}));o.displayName=`CardHeader`;var s=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`leading-none font-semibold tracking-tight`,e),...t}));s.displayName=`CardTitle`;var c=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`text-muted-foreground text-sm`,e),...t}));c.displayName=`CardDescription`;var l=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`p-6 pt-0`,e),...t}));l.displayName=`CardContent`;var u=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`flex items-center p-6 pt-0`,e),...t}));u.displayName=`CardFooter`,exports.Card=a,exports.CardContent=l,exports.CardDescription=c,exports.CardFooter=u,exports.CardHeader=o,exports.CardTitle=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=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`bg-card text-card-foreground rounded-xl border shadow`,e),...t}));a.displayName=`Card`;var o=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`flex flex-col space-y-1.5 p-6`,e),...t}));o.displayName=`CardHeader`;var s=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`leading-none font-semibold tracking-tight`,e),...t}));s.displayName=`CardTitle`;var c=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`text-muted-foreground text-sm`,e),...t}));c.displayName=`CardDescription`;var l=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`p-6 pt-0`,e),...t}));l.displayName=`CardContent`;var u=r.forwardRef(({className:e,...t},r)=>(0,i.jsx)(`div`,{ref:r,className:n.t(`flex items-center p-6 pt-0`,e),...t}));u.displayName=`CardFooter`,exports.Card=a,exports.CardContent=l,exports.CardDescription=c,exports.CardFooter=u,exports.CardHeader=o,exports.CardTitle=s;
2
2
  //# sourceMappingURL=card.cjs.map
package/dist/card.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"card.cjs","names":[],"sources":["../packages/ui-web/src/card.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport type { CardBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement>, CardBaseProps {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('bg-card text-card-foreground rounded-xl border shadow', className)} {...props} />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('leading-none font-semibold tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":"+PAQM,EAAO,EAAM,YAAuC,CAAE,YAAW,GAAG,GAAS,KACjF,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,wDAAyD,EAAU,CAAE,GAAI,EAAS,CAAA,CAC/G,CACF,EAAK,YAAc,OAEnB,IAAM,EAAa,EAAM,YACtB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,gCAAiC,EAAU,CAAE,GAAI,EAAS,CAAA,CAE1F,CACD,EAAW,YAAc,aAEzB,IAAM,EAAY,EAAM,YACrB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,4CAA6C,EAAU,CAAE,GAAI,EAAS,CAAA,CAEtG,CACD,EAAU,YAAc,YAExB,IAAM,EAAkB,EAAM,YAC3B,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,gCAAiC,EAAU,CAAE,GAAI,EAAS,CAAA,CAE1F,CACD,EAAgB,YAAc,kBAE9B,IAAM,EAAc,EAAM,YACvB,CAAE,YAAW,GAAG,GAAS,KAAQ,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,WAAY,EAAU,CAAE,GAAI,EAAS,CAAA,CACrG,CACD,EAAY,YAAc,cAE1B,IAAM,EAAa,EAAM,YACtB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,6BAA8B,EAAU,CAAE,GAAI,EAAS,CAAA,CAEvF,CACD,EAAW,YAAc"}
1
+ {"version":3,"file":"card.cjs","names":[],"sources":["../packages/ui-web/src/card.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport type { CardBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement>, CardBaseProps {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('bg-card text-card-foreground rounded-xl border shadow', className)} {...props} />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('leading-none font-semibold tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":"+PAQM,EAAO,EAAM,YAAuC,CAAE,YAAW,GAAG,GAAS,KACjF,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,wDAAyD,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC/G,EACD,EAAK,YAAc,OAEnB,IAAM,EAAa,EAAM,YACtB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,gCAAiC,CAAS,EAAG,GAAI,CAAQ,CAAA,CAE1F,EACA,EAAW,YAAc,aAEzB,IAAM,EAAY,EAAM,YACrB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,4CAA6C,CAAS,EAAG,GAAI,CAAQ,CAAA,CAEtG,EACA,EAAU,YAAc,YAExB,IAAM,EAAkB,EAAM,YAC3B,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,gCAAiC,CAAS,EAAG,GAAI,CAAQ,CAAA,CAE1F,EACA,EAAgB,YAAc,kBAE9B,IAAM,EAAc,EAAM,YACvB,CAAE,YAAW,GAAG,GAAS,KAAQ,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,WAAY,CAAS,EAAG,GAAI,CAAQ,CAAA,CACrG,EACA,EAAY,YAAc,cAE1B,IAAM,EAAa,EAAM,YACtB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,UAAW,EAAA,EAAG,6BAA8B,CAAS,EAAG,GAAI,CAAQ,CAAA,CAEvF,EACA,EAAW,YAAc"}
package/dist/card.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/card.tsx
7
7
  var r = e(), i = n.forwardRef(({ className: e, ...n }, i) => /* @__PURE__ */ (0, r.jsx)("div", {
package/dist/card.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"card.mjs","names":[],"sources":["../packages/ui-web/src/card.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport type { CardBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement>, CardBaseProps {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('bg-card text-card-foreground rounded-xl border shadow', className)} {...props} />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('leading-none font-semibold tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":";;;;;;aAQM,IAAO,EAAM,YAAuC,EAAE,cAAW,GAAG,KAAS,MACjF,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,yDAAyD,EAAU;CAAE,GAAI;CAAS,CAAA,CAC/G;AACF,EAAK,cAAc;AAEnB,IAAM,IAAa,EAAM,YACtB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,iCAAiC,EAAU;CAAE,GAAI;CAAS,CAAA,CAE1F;AACD,EAAW,cAAc;AAEzB,IAAM,IAAY,EAAM,YACrB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,6CAA6C,EAAU;CAAE,GAAI;CAAS,CAAA,CAEtG;AACD,EAAU,cAAc;AAExB,IAAM,IAAkB,EAAM,YAC3B,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,iCAAiC,EAAU;CAAE,GAAI;CAAS,CAAA,CAE1F;AACD,EAAgB,cAAc;AAE9B,IAAM,IAAc,EAAM,YACvB,EAAE,cAAW,GAAG,KAAS,MAAQ,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,YAAY,EAAU;CAAE,GAAI;CAAS,CAAA,CACrG;AACD,EAAY,cAAc;AAE1B,IAAM,IAAa,EAAM,YACtB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,8BAA8B,EAAU;CAAE,GAAI;CAAS,CAAA,CAEvF;AACD,EAAW,cAAc"}
1
+ {"version":3,"file":"card.mjs","names":[],"sources":["../packages/ui-web/src/card.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport type { CardBaseProps } from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement>, CardBaseProps {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('bg-card text-card-foreground rounded-xl border shadow', className)} {...props} />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('leading-none font-semibold tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":";;;;;;aAQM,IAAO,EAAM,YAAuC,EAAE,cAAW,GAAG,KAAS,MACjF,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,yDAAyD,CAAS;CAAG,GAAI;AAAQ,CAAA,CAC/G;AACD,EAAK,cAAc;AAEnB,IAAM,IAAa,EAAM,YACtB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,iCAAiC,CAAS;CAAG,GAAI;AAAQ,CAAA,CAE1F;AACA,EAAW,cAAc;AAEzB,IAAM,IAAY,EAAM,YACrB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,6CAA6C,CAAS;CAAG,GAAI;AAAQ,CAAA,CAEtG;AACA,EAAU,cAAc;AAExB,IAAM,IAAkB,EAAM,YAC3B,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,iCAAiC,CAAS;CAAG,GAAI;AAAQ,CAAA,CAE1F;AACA,EAAgB,cAAc;AAE9B,IAAM,IAAc,EAAM,YACvB,EAAE,cAAW,GAAG,KAAS,MAAQ,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,YAAY,CAAS;CAAG,GAAI;AAAQ,CAAA,CACrG;AACA,EAAY,cAAc;AAE1B,IAAM,IAAa,EAAM,YACtB,EAAE,cAAW,GAAG,KAAS,MACxB,iBAAA,GAAA,EAAA,KAAC,OAAD;CAAU;CAAK,WAAW,EAAG,8BAA8B,CAAS;CAAG,GAAI;AAAQ,CAAA,CAEvF;AACA,EAAW,cAAc"}
package/dist/carousel.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`),r=require(`./button.cjs`);let i=require(`react`);i=e.r(i);var a=t.vr(),o=i.createContext(null);function s(){let e=i.useContext(o);if(!e)throw Error(`useCarousel must be used within a <Carousel />`);return e}var c=i.forwardRef(({orientation:e=`horizontal`,opts:r,setApi:s,plugins:c,className:l,children:u,...d},f)=>{let[p,m]=t.bn({...r,axis:e===`horizontal`?`x`:`y`},c),[h,g]=i.useState(!1),[_,v]=i.useState(!1),y=i.useCallback(e=>{e&&(g(e.canScrollPrev()),v(e.canScrollNext()))},[]),b=i.useCallback(()=>{m?.scrollPrev()},[m]),x=i.useCallback(()=>{m?.scrollNext()},[m]),S=i.useCallback(e=>{e.key===`ArrowLeft`?(e.preventDefault(),b()):e.key===`ArrowRight`&&(e.preventDefault(),x())},[b,x]);return i.useEffect(()=>{!m||!s||s(m)},[m,s]),i.useEffect(()=>{if(m)return y(m),m.on(`reInit`,y),m.on(`select`,y),()=>{m?.off(`select`,y)}},[m,y]),(0,a.jsx)(o.Provider,{value:{carouselRef:p,api:m,opts:r,orientation:e||(r?.axis===`y`?`vertical`:`horizontal`),scrollPrev:b,scrollNext:x,canScrollPrev:h,canScrollNext:_},children:(0,a.jsx)(`div`,{ref:f,onKeyDownCapture:S,className:n.t(`relative`,l),role:`region`,"aria-roledescription":`carousel`,...d,children:u})})});c.displayName=`Carousel`;var l=i.forwardRef(({className:e,...t},r)=>{let{carouselRef:i,orientation:o}=s();return(0,a.jsx)(`div`,{ref:i,className:`overflow-hidden`,children:(0,a.jsx)(`div`,{ref:r,className:n.t(`flex`,o===`horizontal`?`-ml-4`:`-mt-4 flex-col`,e),...t})})});l.displayName=`CarouselContent`;var u=i.forwardRef(({className:e,...t},r)=>{let{orientation:i}=s();return(0,a.jsx)(`div`,{ref:r,role:`group`,"aria-roledescription":`slide`,className:n.t(`min-w-0 shrink-0 grow-0 basis-full`,i===`horizontal`?`pl-4`:`pt-4`,e),...t})});u.displayName=`CarouselItem`;var d=i.forwardRef(({className:e,variant:i=`outline`,size:o=`icon`,...c},l)=>{let{orientation:u,scrollPrev:d,canScrollPrev:f}=s();return(0,a.jsxs)(r.Button,{ref:l,variant:i,size:o,className:n.t(`absolute h-8 w-8 rounded-full`,u===`horizontal`?`top-1/2 -left-12 -translate-y-1/2`:`-top-12 left-1/2 -translate-x-1/2 rotate-90`,e),disabled:!f,onClick:d,...c,children:[(0,a.jsx)(t.lr,{className:`h-4 w-4`}),(0,a.jsx)(`span`,{className:`sr-only`,children:`Previous slide`})]})});d.displayName=`CarouselPrevious`;var f=i.forwardRef(({className:e,variant:i=`outline`,size:o=`icon`,...c},l)=>{let{orientation:u,scrollNext:d,canScrollNext:f}=s();return(0,a.jsxs)(r.Button,{ref:l,variant:i,size:o,className:n.t(`absolute h-8 w-8 rounded-full`,u===`horizontal`?`top-1/2 -right-12 -translate-y-1/2`:`-bottom-12 left-1/2 -translate-x-1/2 rotate-90`,e),disabled:!f,onClick:d,...c,children:[(0,a.jsx)(t.cr,{className:`h-4 w-4`}),(0,a.jsx)(`span`,{className:`sr-only`,children:`Next slide`})]})});f.displayName=`CarouselNext`,exports.Carousel=c,exports.CarouselContent=l,exports.CarouselItem=u,exports.CarouselNext=f,exports.CarouselPrevious=d;
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");let i=require("react");i=e.r(i);var a=t.vr(),o=i.createContext(null);function s(){let e=i.useContext(o);if(!e)throw Error(`useCarousel must be used within a <Carousel />`);return e}var c=i.forwardRef(({orientation:e=`horizontal`,opts:r,setApi:s,plugins:c,className:l,children:u,...d},f)=>{let[p,m]=t.bn({...r,axis:e===`horizontal`?`x`:`y`},c),[h,g]=i.useState(!1),[_,v]=i.useState(!1),y=i.useCallback(e=>{e&&(g(e.canScrollPrev()),v(e.canScrollNext()))},[]),b=i.useCallback(()=>{m?.scrollPrev()},[m]),x=i.useCallback(()=>{m?.scrollNext()},[m]),S=i.useCallback(e=>{e.key===`ArrowLeft`?(e.preventDefault(),b()):e.key===`ArrowRight`&&(e.preventDefault(),x())},[b,x]);return i.useEffect(()=>{!m||!s||s(m)},[m,s]),i.useEffect(()=>{if(m)return y(m),m.on(`reInit`,y),m.on(`select`,y),()=>{m?.off(`select`,y)}},[m,y]),(0,a.jsx)(o.Provider,{value:{carouselRef:p,api:m,opts:r,orientation:e||(r?.axis===`y`?`vertical`:`horizontal`),scrollPrev:b,scrollNext:x,canScrollPrev:h,canScrollNext:_},children:(0,a.jsx)(`div`,{ref:f,onKeyDownCapture:S,className:n.t(`relative`,l),role:`region`,"aria-roledescription":`carousel`,...d,children:u})})});c.displayName=`Carousel`;var l=i.forwardRef(({className:e,...t},r)=>{let{carouselRef:i,orientation:o}=s();return(0,a.jsx)(`div`,{ref:i,className:`overflow-hidden`,children:(0,a.jsx)(`div`,{ref:r,className:n.t(`flex`,o===`horizontal`?`-ml-4`:`-mt-4 flex-col`,e),...t})})});l.displayName=`CarouselContent`;var u=i.forwardRef(({className:e,...t},r)=>{let{orientation:i}=s();return(0,a.jsx)(`div`,{ref:r,role:`group`,"aria-roledescription":`slide`,className:n.t(`min-w-0 shrink-0 grow-0 basis-full`,i===`horizontal`?`pl-4`:`pt-4`,e),...t})});u.displayName=`CarouselItem`;var d=i.forwardRef(({className:e,variant:i=`outline`,size:o=`icon`,...c},l)=>{let{orientation:u,scrollPrev:d,canScrollPrev:f}=s();return(0,a.jsxs)(r.Button,{ref:l,variant:i,size:o,className:n.t(`absolute h-8 w-8 rounded-full`,u===`horizontal`?`top-1/2 -left-12 -translate-y-1/2`:`-top-12 left-1/2 -translate-x-1/2 rotate-90`,e),disabled:!f,onClick:d,...c,children:[(0,a.jsx)(t.lr,{className:`h-4 w-4`}),(0,a.jsx)(`span`,{className:`sr-only`,children:`Previous slide`})]})});d.displayName=`CarouselPrevious`;var f=i.forwardRef(({className:e,variant:i=`outline`,size:o=`icon`,...c},l)=>{let{orientation:u,scrollNext:d,canScrollNext:f}=s();return(0,a.jsxs)(r.Button,{ref:l,variant:i,size:o,className:n.t(`absolute h-8 w-8 rounded-full`,u===`horizontal`?`top-1/2 -right-12 -translate-y-1/2`:`-bottom-12 left-1/2 -translate-x-1/2 rotate-90`,e),disabled:!f,onClick:d,...c,children:[(0,a.jsx)(t.cr,{className:`h-4 w-4`}),(0,a.jsx)(`span`,{className:`sr-only`,children:`Next slide`})]})});f.displayName=`CarouselNext`,exports.Carousel=c,exports.CarouselContent=l,exports.CarouselItem=u,exports.CarouselNext=f,exports.CarouselPrevious=d;
2
2
  //# sourceMappingURL=carousel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.cjs","names":[],"sources":["../packages/ui-web/src/carousel.tsx"],"sourcesContent":["'use client';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n CarouselBaseProps,\n CarouselContentBaseProps,\n CarouselItemBaseProps,\n CarouselNextBaseProps,\n CarouselPreviousBaseProps,\n} from '@gv-tech/ui-core';\nimport { Button } from './button';\nimport { cn } from './lib/utils';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = React.HTMLAttributes<HTMLDivElement> &\n CarouselBaseProps & {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n setApi?: (api: CarouselApi) => void;\n };\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselContentBaseProps\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = 'CarouselContent';\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselItemBaseProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n );\n },\n);\nCarouselItem.displayName = 'CarouselItem';\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button> & CarouselPreviousBaseProps\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n});\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button> & CarouselNextBaseProps>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n\nexport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi };\nexport type { CarouselProps };\n"],"mappings":"yRAoCM,EAAkB,EAAM,cAA2C,KAAK,CAE9E,SAAS,GAAc,CACrB,IAAM,EAAU,EAAM,WAAW,EAAgB,CAEjD,GAAI,CAAC,EACH,MAAU,MAAM,iDAAiD,CAGnE,OAAO,EAGT,IAAM,EAAW,EAAM,YACpB,CAAE,cAAc,aAAc,OAAM,SAAQ,UAAS,YAAW,WAAU,GAAG,GAAS,IAAQ,CAC7F,GAAM,CAAC,EAAa,GAAO,EAAA,GACzB,CACE,GAAG,EACH,KAAM,IAAgB,aAAe,IAAM,IAC5C,CACD,EACD,CACK,CAAC,EAAe,GAAoB,EAAM,SAAS,GAAM,CACzD,CAAC,EAAe,GAAoB,EAAM,SAAS,GAAM,CAEzD,EAAW,EAAM,YAAa,GAAqB,CAClD,IAIL,EAAiB,EAAI,eAAe,CAAC,CACrC,EAAiB,EAAI,eAAe,CAAC,GACpC,EAAE,CAAC,CAEA,EAAa,EAAM,gBAAkB,CACzC,GAAK,YAAY,EAChB,CAAC,EAAI,CAAC,CAEH,EAAa,EAAM,gBAAkB,CACzC,GAAK,YAAY,EAChB,CAAC,EAAI,CAAC,CAEH,EAAgB,EAAM,YACzB,GAA+C,CAC1C,EAAM,MAAQ,aAChB,EAAM,gBAAgB,CACtB,GAAY,EACH,EAAM,MAAQ,eACvB,EAAM,gBAAgB,CACtB,GAAY,GAGhB,CAAC,EAAY,EAAW,CACzB,CAwBD,OAtBA,EAAM,cAAgB,CAChB,CAAC,GAAO,CAAC,GAIb,EAAO,EAAI,EACV,CAAC,EAAK,EAAO,CAAC,CAEjB,EAAM,cAAgB,CACf,KAQL,OAJA,EAAS,EAAI,CACb,EAAI,GAAG,SAAU,EAAS,CAC1B,EAAI,GAAG,SAAU,EAAS,KAEb,CACX,GAAK,IAAI,SAAU,EAAS,GAE7B,CAAC,EAAK,EAAS,CAAC,EAGjB,EAAA,EAAA,KAAC,EAAgB,SAAjB,CACE,MAAO,CACL,cACK,MACL,OACA,YAAa,IAAgB,GAAM,OAAS,IAAM,WAAa,cAC/D,aACA,aACA,gBACA,gBACD,WAED,EAAA,EAAA,KAAC,MAAD,CACO,MACL,iBAAkB,EAClB,UAAW,EAAA,EAAG,WAAY,EAAU,CACpC,KAAK,SACL,uBAAqB,WACrB,GAAI,EAEH,WACG,CAAA,CACmB,CAAA,EAGhC,CACD,EAAS,YAAc,WAEvB,IAAM,EAAkB,EAAM,YAG3B,CAAE,YAAW,GAAG,GAAS,IAAQ,CAClC,GAAM,CAAE,cAAa,eAAgB,GAAa,CAElD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAa,UAAU,4BAC/B,EAAA,EAAA,KAAC,MAAD,CACO,MACL,UAAW,EAAA,EAAG,OAAQ,IAAgB,aAAe,QAAU,iBAAkB,EAAU,CAC3F,GAAI,EACJ,CAAA,CACE,CAAA,EAER,CACF,EAAgB,YAAc,kBAE9B,IAAM,EAAe,EAAM,YACxB,CAAE,YAAW,GAAG,GAAS,IAAQ,CAChC,GAAM,CAAE,eAAgB,GAAa,CAErC,OACE,EAAA,EAAA,KAAC,MAAD,CACO,MACL,KAAK,QACL,uBAAqB,QACrB,UAAW,EAAA,EAAG,qCAAsC,IAAgB,aAAe,OAAS,OAAQ,EAAU,CAC9G,GAAI,EACJ,CAAA,EAGP,CACD,EAAa,YAAc,eAE3B,IAAM,EAAmB,EAAM,YAG5B,CAAE,YAAW,UAAU,UAAW,OAAO,OAAQ,GAAG,GAAS,IAAQ,CACtE,GAAM,CAAE,cAAa,aAAY,iBAAkB,GAAa,CAEhE,OACE,EAAA,EAAA,MAAC,EAAA,OAAD,CACO,MACI,UACH,OACN,UAAW,EAAA,EACT,gCACA,IAAgB,aACZ,oCACA,8CACJ,EACD,CACD,SAAU,CAAC,EACX,QAAS,EACT,GAAI,WAbN,EAeE,EAAA,EAAA,KAAC,EAAA,GAAD,CAAW,UAAU,UAAY,CAAA,EACjC,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mBAAU,iBAAqB,CAAA,CACxC,IAEX,CACF,EAAiB,YAAc,mBAE/B,IAAM,EAAe,EAAM,YACxB,CAAE,YAAW,UAAU,UAAW,OAAO,OAAQ,GAAG,GAAS,IAAQ,CACpE,GAAM,CAAE,cAAa,aAAY,iBAAkB,GAAa,CAEhE,OACE,EAAA,EAAA,MAAC,EAAA,OAAD,CACO,MACI,UACH,OACN,UAAW,EAAA,EACT,gCACA,IAAgB,aACZ,qCACA,iDACJ,EACD,CACD,SAAU,CAAC,EACX,QAAS,EACT,GAAI,WAbN,EAeE,EAAA,EAAA,KAAC,EAAA,GAAD,CAAY,UAAU,UAAY,CAAA,EAClC,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mBAAU,aAAiB,CAAA,CACpC,IAGd,CACD,EAAa,YAAc"}
1
+ {"version":3,"file":"carousel.cjs","names":[],"sources":["../packages/ui-web/src/carousel.tsx"],"sourcesContent":["'use client';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n CarouselBaseProps,\n CarouselContentBaseProps,\n CarouselItemBaseProps,\n CarouselNextBaseProps,\n CarouselPreviousBaseProps,\n} from '@gv-tech/ui-core';\nimport { Button } from './button';\nimport { cn } from './lib/utils';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = React.HTMLAttributes<HTMLDivElement> &\n CarouselBaseProps & {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n setApi?: (api: CarouselApi) => void;\n };\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselContentBaseProps\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = 'CarouselContent';\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselItemBaseProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n );\n },\n);\nCarouselItem.displayName = 'CarouselItem';\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button> & CarouselPreviousBaseProps\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n});\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button> & CarouselNextBaseProps>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n\nexport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi };\nexport type { CarouselProps };\n"],"mappings":"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"}
package/dist/carousel.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
- import { bn as e, cr as t, lr as n, vr as r } from "./vendor-Cr0eKZrm.mjs";
4
- import { t as i } from "./utils-BtI8Nf6i.mjs";
3
+ import { bn as e, cr as t, lr as n, vr as r } from "./vendor-ChPUVHXi.mjs";
4
+ import { t as i } from "./utils-BsD1_fYL.mjs";
5
5
  import { Button as a } from "./button.mjs";
6
6
  import * as o from "react";
7
7
  //#region packages/ui-web/src/carousel.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.mjs","names":[],"sources":["../packages/ui-web/src/carousel.tsx"],"sourcesContent":["'use client';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n CarouselBaseProps,\n CarouselContentBaseProps,\n CarouselItemBaseProps,\n CarouselNextBaseProps,\n CarouselPreviousBaseProps,\n} from '@gv-tech/ui-core';\nimport { Button } from './button';\nimport { cn } from './lib/utils';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = React.HTMLAttributes<HTMLDivElement> &\n CarouselBaseProps & {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n setApi?: (api: CarouselApi) => void;\n };\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselContentBaseProps\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = 'CarouselContent';\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselItemBaseProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n );\n },\n);\nCarouselItem.displayName = 'CarouselItem';\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button> & CarouselPreviousBaseProps\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n});\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button> & CarouselNextBaseProps>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n\nexport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi };\nexport type { CarouselProps };\n"],"mappings":"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"}
1
+ {"version":3,"file":"carousel.mjs","names":[],"sources":["../packages/ui-web/src/carousel.tsx"],"sourcesContent":["'use client';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n CarouselBaseProps,\n CarouselContentBaseProps,\n CarouselItemBaseProps,\n CarouselNextBaseProps,\n CarouselPreviousBaseProps,\n} from '@gv-tech/ui-core';\nimport { Button } from './button';\nimport { cn } from './lib/utils';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = React.HTMLAttributes<HTMLDivElement> &\n CarouselBaseProps & {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n setApi?: (api: CarouselApi) => void;\n };\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselContentBaseProps\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = 'CarouselContent';\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselItemBaseProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n );\n },\n);\nCarouselItem.displayName = 'CarouselItem';\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button> & CarouselPreviousBaseProps\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n});\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button> & CarouselNextBaseProps>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n\nexport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi };\nexport type { CarouselProps };\n"],"mappings":"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"}
package/dist/chart.cjs CHANGED
@@ -1,8 +1,8 @@
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={light:``,dark:`.dark`},o=r.createContext(null);function s(){let e=r.useContext(o);if(!e)throw Error(`useChart must be used within a <ChartContainer />`);return e}var c=r.forwardRef(({id:e,className:a,children:s,config:c,...u},d)=>{let f=r.useId(),p=`chart-${e||f.replace(/:/g,``)}`;return(0,i.jsx)(o.Provider,{value:{config:c},children:(0,i.jsxs)(`div`,{"data-chart":p,ref:d,className:n.t(`[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-sector]:outline-none [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-none`,a),...u,children:[(0,i.jsx)(l,{id:p,config:c}),(0,i.jsx)(t.yn,{children:s})]})})});c.displayName=`Chart`;var l=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme||e.color);return n.length?(0,i.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries(a).map(([t,r])=>`
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={light:``,dark:`.dark`},o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s=r.createContext(null);function c(){let e=r.useContext(s);if(!e)throw Error(`useChart must be used within a <ChartContainer />`);return e}var l=r.forwardRef(({id:e,className:a,children:o,config:c,style:l,role:d,tabIndex:f,"aria-label":p,"aria-labelledby":m,"aria-describedby":h,onClick:g,onKeyDown:_,onKeyUp:v,onFocus:y,onBlur:b},x)=>{let S=r.useId(),C=`chart-${e||S.replace(/:/g,``)}`;return(0,i.jsx)(s.Provider,{value:{config:c},children:(0,i.jsxs)(`div`,{"data-chart":C,ref:x,className:n.t(`[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-sector]:outline-none [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-none`,a),style:l,role:d,tabIndex:f,"aria-label":p,"aria-labelledby":m,"aria-describedby":h,onClick:g,onKeyDown:_,onKeyUp:v,onFocus:y,onBlur:b,children:[(0,i.jsx)(u,{id:C,config:c}),(0,i.jsx)(t.yn,{children:o})]})})});l.displayName=`Chart`;var u=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme||e.color);return n.length?(0,i.jsx)(`style`,{children:Object.entries(a).map(([t,r])=>`
2
2
  ${r} [data-chart=${e}] {
3
- ${n.map(([e,n])=>{let r=n.theme?.[t]||n.color;return r?` --color-${e}: ${r};`:null}).join(`
3
+ ${n.map(([e,n])=>{let r=(t in a&&o(a,t)?n.theme?.[t]:void 0)||n.color;return r?` --color-${e}: ${r};`:null}).join(`
4
4
  `)}
5
5
  }
6
6
  `).join(`
7
- `)}}):null},u=t._n,d=r.forwardRef(({active:e,payload:t,className:a,indicator:o=`dot`,hideLabel:c=!1,hideIndicator:l=!1,label:u,labelFormatter:d,labelClassName:f,formatter:p,color:h,nameKey:g,labelKey:_},v)=>{let{config:y}=s(),b=r.useMemo(()=>{if(c||!t?.length)return null;let[e]=t,r=m(y,e,`${_||e?.dataKey||e?.name||`value`}`),a=!_&&typeof u==`string`?y[u]?.label||u:r?.label;return d?(0,i.jsx)(`div`,{className:n.t(`font-medium`,f),children:d(a,t)}):a?(0,i.jsx)(`div`,{className:n.t(`font-medium`,f),children:a}):null},[u,d,t,c,f,y,_]);if(!e||!t?.length)return null;let x=t.length===1&&o!==`dot`;return(0,i.jsxs)(`div`,{ref:v,className:n.t(`border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl`,a),children:[x?null:b,(0,i.jsx)(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let r=m(y,e,`${g||e.name||e.dataKey||`value`}`),a=h||e.payload.fill||e.color;return(0,i.jsx)(`div`,{className:n.t(`[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5`,o===`dot`&&`items-center`),children:p&&e?.value!==void 0&&e.name?p(e.value,e.name,e,t,e.payload):(0,i.jsxs)(i.Fragment,{children:[r?.icon?(0,i.jsx)(r.icon,{}):!l&&(0,i.jsx)(`div`,{className:n.t(`shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]`,{"h-2.5 w-2.5":o===`dot`,"w-1":o===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":o===`dashed`,"my-0.5":x&&o===`dashed`}),style:{"--color-bg":a,"--color-border":a}}),(0,i.jsxs)(`div`,{className:n.t(`flex flex-1 justify-between leading-none`,x?`items-end`:`items-center`),children:[(0,i.jsxs)(`div`,{className:`grid gap-1.5`,children:[x?b:null,(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:r?.label||e.name})]}),e.value&&(0,i.jsx)(`span`,{className:`text-foreground font-mono font-medium tabular-nums`,children:e.value.toLocaleString()})]})]})},typeof e.dataKey==`function`?t:e.dataKey??t)})})]})});d.displayName=`ChartTooltip`;var f=t.vn,p=r.forwardRef(({className:e,hideIcon:t=!1,payload:r,verticalAlign:a=`bottom`,nameKey:o},c)=>{let{config:l}=s();return r?.length?(0,i.jsx)(`div`,{ref:c,className:n.t(`flex items-center justify-center gap-4`,a===`top`?`pb-3`:`pt-3`,e),children:r.filter(e=>e.type!==`none`).map(e=>{let r=m(l,e,`${o||e.dataKey||`value`}`);return(0,i.jsxs)(`div`,{className:n.t(`[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3`),children:[r?.icon&&!t?(0,i.jsx)(r.icon,{}):(0,i.jsx)(`div`,{className:`h-2 w-2 shrink-0 rounded-[2px]`,style:{backgroundColor:e.color}}),r?.label]},e.value)})}):null});p.displayName=`ChartLegend`;function m(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}exports.ChartContainer=c,exports.ChartLegend=f,exports.ChartLegendContent=p,exports.ChartStyle=l,exports.ChartTooltip=u,exports.ChartTooltipContent=d;
7
+ `)}):null},d=t._n,f=r.forwardRef(({active:e,payload:t,className:a,indicator:s=`dot`,hideLabel:l=!1,hideIndicator:u=!1,label:d,labelFormatter:f,labelClassName:p,formatter:m,color:g,nameKey:_,labelKey:v},y)=>{let{config:b}=c(),x=r.useMemo(()=>{if(l||!t?.length)return null;let[e]=t,r=h(b,e,`${v||e?.dataKey||e?.name||`value`}`),a=!v&&typeof d==`string`?(o(b,d)?b[d]?.label:void 0)??d:r?.label;return f?(0,i.jsx)(`div`,{className:n.t(`font-medium`,p),children:f(a,t)}):a?(0,i.jsx)(`div`,{className:n.t(`font-medium`,p),children:a}):null},[d,f,t,l,p,b,v]);if(!e||!t?.length)return null;let S=t.length===1&&s!==`dot`;return(0,i.jsxs)(`div`,{ref:y,className:n.t(`border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl`,a),children:[S?null:x,(0,i.jsx)(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let r=h(b,e,`${_||e.name||e.dataKey||`value`}`),a=g||e.payload.fill||e.color;return(0,i.jsx)(`div`,{className:n.t(`[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5`,s===`dot`&&`items-center`),children:m&&e?.value!==void 0&&e.name?m(e.value,e.name,e,t,e.payload):(0,i.jsxs)(i.Fragment,{children:[r?.icon?(0,i.jsx)(r.icon,{}):!u&&(0,i.jsx)(`div`,{className:n.t(`shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]`,{"h-2.5 w-2.5":s===`dot`,"w-1":s===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":s===`dashed`,"my-0.5":S&&s===`dashed`}),style:{"--color-bg":a,"--color-border":a}}),(0,i.jsxs)(`div`,{className:n.t(`flex flex-1 justify-between leading-none`,S?`items-end`:`items-center`),children:[(0,i.jsxs)(`div`,{className:`grid gap-1.5`,children:[S?x:null,(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:r?.label||e.name})]}),e.value&&(0,i.jsx)(`span`,{className:`text-foreground font-mono font-medium tabular-nums`,children:e.value.toLocaleString()})]})]})},typeof e.dataKey==`function`?t:e.dataKey??t)})})]})});f.displayName=`ChartTooltip`;var p=t.vn,m=r.forwardRef(({className:e,hideIcon:t=!1,payload:r,verticalAlign:a=`bottom`,nameKey:o},s)=>{let{config:l}=c();return r?.length?(0,i.jsx)(`div`,{ref:s,className:n.t(`flex items-center justify-center gap-4`,a===`top`?`pb-3`:`pt-3`,e),children:r.filter(e=>e.type!==`none`).map(e=>{let r=h(l,e,`${o||e.dataKey||`value`}`);return(0,i.jsxs)(`div`,{className:n.t(`[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3`),children:[r?.icon&&!t?(0,i.jsx)(r.icon,{}):(0,i.jsx)(`div`,{className:`h-2 w-2 shrink-0 rounded-[2px]`,style:{backgroundColor:e.color}}),r?.label]},e.value)})}):null});m.displayName=`ChartLegend`;function h(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return o(t,n)&&typeof t[n]==`string`?i=t[n]:r&&o(r,n)&&typeof r[n]==`string`&&(i=r[n]),o(e,i)?e[i]:o(e,n)?e[n]:void 0}exports.ChartContainer=l,exports.ChartLegend=p,exports.ChartLegendContent=m,exports.ChartStyle=u,exports.ChartTooltip=d,exports.ChartTooltipContent=f;
8
8
  //# sourceMappingURL=chart.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart.cjs","names":[],"sources":["../packages/ui-web/src/chart.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport {\n ChartConfig,\n ChartContainerBaseProps,\n ChartLegendContentBaseProps,\n ChartTooltipContentBaseProps,\n} from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n ChartContainerBaseProps & {\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n }\n>(({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-sector]:outline-none [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-none\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n});\nChartContainer.displayName = 'Chart';\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, itemConfig]) => itemConfig.theme || itemConfig.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.[theme as keyof typeof THEMES] || itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n'),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n Partial<RechartsPrimitive.TooltipContentProps> & React.ComponentProps<'div'> & ChartTooltipContentBaseProps\n>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref,\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item: RechartsPrimitive.TooltipPayloadEntry) => item.type !== 'none')\n .map((item: RechartsPrimitive.TooltipPayloadEntry, index: number) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || ((item.payload as Record<string, unknown>).fill as string) || item.color;\n\n return (\n <div\n key={typeof item.dataKey === 'function' ? index : (item.dataKey ?? index)}\n className={cn(\n '[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label || item.name}</span>\n </div>\n {item.value && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nChartTooltipContent.displayName = 'ChartTooltip';\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n Pick<RechartsPrimitive.DefaultLegendContentProps, 'payload' | 'verticalAlign'> &\n ChartLegendContentBaseProps\n>(({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}\n >\n {payload\n .filter((item: RechartsPrimitive.LegendPayload) => item.type !== 'none')\n .map((item: RechartsPrimitive.LegendPayload) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn('[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n});\nChartLegendContent.displayName = 'ChartLegend';\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload &&\n typeof (payload as { payload: unknown }).payload === 'object' &&\n (payload as { payload: unknown }).payload !== null\n ? ((payload as { payload: unknown }).payload as Record<string, unknown>)\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in payload && typeof (payload as Record<string, unknown>)[key] === 'string') {\n configLabelKey = (payload as Record<string, unknown>)[key] as string;\n } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === 'string') {\n configLabelKey = payloadPayload[key] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\nexport { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent };\nexport type { ChartConfig };\n"],"mappings":"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"}
1
+ {"version":3,"file":"chart.cjs","names":[],"sources":["../packages/ui-web/src/chart.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport {\n ChartConfig,\n ChartContainerBaseProps,\n ChartLegendContentBaseProps,\n ChartTooltipContentBaseProps,\n} from '@gv-tech/ui-core';\nimport { cn } from './lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\n/** Safe own-property check — prevents prototype-chain traversal via dynamic keys. */\nconst hasOwnProp = (obj: object, key: string): boolean => Object.prototype.hasOwnProperty.call(obj, key);\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n ChartContainerBaseProps & {\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n }\n>(\n (\n {\n id,\n className,\n children,\n config,\n style,\n role,\n tabIndex,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n onClick,\n onKeyDown,\n onKeyUp,\n onFocus,\n onBlur,\n },\n ref,\n ) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-sector]:outline-none [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-none\",\n className,\n )}\n style={style}\n role={role}\n tabIndex={tabIndex}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n onClick={onClick}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n },\n);\nChartContainer.displayName = 'Chart';\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, itemConfig]) => itemConfig.theme || itemConfig.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style>\n {Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n (theme in THEMES && hasOwnProp(THEMES, theme) ? itemConfig.theme?.[theme as keyof typeof THEMES] : undefined) ||\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n')}\n </style>\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n Partial<RechartsPrimitive.TooltipContentProps> & React.ComponentProps<'div'> & ChartTooltipContentBaseProps\n>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref,\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? ((hasOwnProp(config, label) ? config[label as keyof typeof config]?.label : undefined) ?? label)\n : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item: RechartsPrimitive.TooltipPayloadEntry) => item.type !== 'none')\n .map((item: RechartsPrimitive.TooltipPayloadEntry, index: number) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || ((item.payload as Record<string, unknown>).fill as string) || item.color;\n\n return (\n <div\n key={typeof item.dataKey === 'function' ? index : (item.dataKey ?? index)}\n className={cn(\n '[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label || item.name}</span>\n </div>\n {item.value && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nChartTooltipContent.displayName = 'ChartTooltip';\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n Pick<RechartsPrimitive.DefaultLegendContentProps, 'payload' | 'verticalAlign'> &\n ChartLegendContentBaseProps\n>(({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}\n >\n {payload\n .filter((item: RechartsPrimitive.LegendPayload) => item.type !== 'none')\n .map((item: RechartsPrimitive.LegendPayload) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn('[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n});\nChartLegendContent.displayName = 'ChartLegend';\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload &&\n typeof (payload as { payload: unknown }).payload === 'object' &&\n (payload as { payload: unknown }).payload !== null\n ? ((payload as { payload: unknown }).payload as Record<string, unknown>)\n : undefined;\n\n let configLabelKey: string = key;\n\n if (hasOwnProp(payload as object, key) && typeof (payload as Record<string, unknown>)[key] === 'string') {\n configLabelKey = (payload as Record<string, unknown>)[key] as string;\n } else if (payloadPayload && hasOwnProp(payloadPayload, key) && typeof payloadPayload[key] === 'string') {\n configLabelKey = payloadPayload[key] as string;\n }\n\n return hasOwnProp(config, configLabelKey)\n ? config[configLabelKey as keyof typeof config]\n : hasOwnProp(config, key)\n ? config[key as keyof typeof config]\n : undefined;\n}\n\nexport { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent };\nexport type { ChartConfig };\n"],"mappings":"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"}
package/dist/chart.mjs CHANGED
@@ -1,92 +1,102 @@
1
1
  "use client";
2
2
  "use client";
3
- import { _n as e, vn as t, vr as n, yn as r } from "./vendor-Cr0eKZrm.mjs";
4
- import { t as i } from "./utils-BtI8Nf6i.mjs";
3
+ import { _n as e, vn as t, vr as n, yn as r } from "./vendor-ChPUVHXi.mjs";
4
+ import { t as i } from "./utils-BsD1_fYL.mjs";
5
5
  import * as a from "react";
6
6
  //#region packages/ui-web/src/chart.tsx
7
7
  var o = n(), s = {
8
8
  light: "",
9
9
  dark: ".dark"
10
- }, c = a.createContext(null);
11
- function l() {
12
- let e = a.useContext(c);
10
+ }, c = (e, t) => Object.prototype.hasOwnProperty.call(e, t), l = a.createContext(null);
11
+ function u() {
12
+ let e = a.useContext(l);
13
13
  if (!e) throw Error("useChart must be used within a <ChartContainer />");
14
14
  return e;
15
15
  }
16
- var u = a.forwardRef(({ id: e, className: t, children: n, config: s, ...l }, u) => {
17
- let f = a.useId(), p = `chart-${e || f.replace(/:/g, "")}`;
18
- return /* @__PURE__ */ (0, o.jsx)(c.Provider, {
16
+ var d = a.forwardRef(({ id: e, className: t, children: n, config: s, style: c, role: u, tabIndex: d, "aria-label": p, "aria-labelledby": m, "aria-describedby": h, onClick: g, onKeyDown: _, onKeyUp: v, onFocus: y, onBlur: b }, x) => {
17
+ let S = a.useId(), C = `chart-${e || S.replace(/:/g, "")}`;
18
+ return /* @__PURE__ */ (0, o.jsx)(l.Provider, {
19
19
  value: { config: s },
20
20
  children: /* @__PURE__ */ (0, o.jsxs)("div", {
21
- "data-chart": p,
22
- ref: u,
21
+ "data-chart": C,
22
+ ref: x,
23
23
  className: i("[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-sector]:outline-none [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-none", t),
24
- ...l,
25
- children: [/* @__PURE__ */ (0, o.jsx)(d, {
26
- id: p,
24
+ style: c,
25
+ role: u,
26
+ tabIndex: d,
27
+ "aria-label": p,
28
+ "aria-labelledby": m,
29
+ "aria-describedby": h,
30
+ onClick: g,
31
+ onKeyDown: _,
32
+ onKeyUp: v,
33
+ onFocus: y,
34
+ onBlur: b,
35
+ children: [/* @__PURE__ */ (0, o.jsx)(f, {
36
+ id: C,
27
37
  config: s
28
38
  }), /* @__PURE__ */ (0, o.jsx)(r, { children: n })]
29
39
  })
30
40
  });
31
41
  });
32
- u.displayName = "Chart";
33
- var d = ({ id: e, config: t }) => {
42
+ d.displayName = "Chart";
43
+ var f = ({ id: e, config: t }) => {
34
44
  let n = Object.entries(t).filter(([, e]) => e.theme || e.color);
35
- return n.length ? /* @__PURE__ */ (0, o.jsx)("style", { dangerouslySetInnerHTML: { __html: Object.entries(s).map(([t, r]) => `
45
+ return n.length ? /* @__PURE__ */ (0, o.jsx)("style", { children: Object.entries(s).map(([t, r]) => `
36
46
  ${r} [data-chart=${e}] {
37
47
  ${n.map(([e, n]) => {
38
- let r = n.theme?.[t] || n.color;
48
+ let r = (t in s && c(s, t) ? n.theme?.[t] : void 0) || n.color;
39
49
  return r ? ` --color-${e}: ${r};` : null;
40
50
  }).join("\n")}
41
51
  }
42
- `).join("\n") } }) : null;
43
- }, f = e, p = a.forwardRef(({ active: e, payload: t, className: n, indicator: r = "dot", hideLabel: s = !1, hideIndicator: c = !1, label: u, labelFormatter: d, labelClassName: f, formatter: p, color: m, nameKey: h, labelKey: _ }, v) => {
44
- let { config: y } = l(), b = a.useMemo(() => {
52
+ `).join("\n") }) : null;
53
+ }, p = e, m = a.forwardRef(({ active: e, payload: t, className: n, indicator: r = "dot", hideLabel: s = !1, hideIndicator: l = !1, label: d, labelFormatter: f, labelClassName: p, formatter: m, color: h, nameKey: g, labelKey: v }, y) => {
54
+ let { config: b } = u(), x = a.useMemo(() => {
45
55
  if (s || !t?.length) return null;
46
- let [e] = t, n = g(y, e, `${_ || e?.dataKey || e?.name || "value"}`), r = !_ && typeof u == "string" ? y[u]?.label || u : n?.label;
47
- return d ? /* @__PURE__ */ (0, o.jsx)("div", {
48
- className: i("font-medium", f),
49
- children: d(r, t)
56
+ let [e] = t, n = _(b, e, `${v || e?.dataKey || e?.name || "value"}`), r = !v && typeof d == "string" ? (c(b, d) ? b[d]?.label : void 0) ?? d : n?.label;
57
+ return f ? /* @__PURE__ */ (0, o.jsx)("div", {
58
+ className: i("font-medium", p),
59
+ children: f(r, t)
50
60
  }) : r ? /* @__PURE__ */ (0, o.jsx)("div", {
51
- className: i("font-medium", f),
61
+ className: i("font-medium", p),
52
62
  children: r
53
63
  }) : null;
54
64
  }, [
55
- u,
56
65
  d,
66
+ f,
57
67
  t,
58
68
  s,
59
- f,
60
- y,
61
- _
69
+ p,
70
+ b,
71
+ v
62
72
  ]);
63
73
  if (!e || !t?.length) return null;
64
- let x = t.length === 1 && r !== "dot";
74
+ let S = t.length === 1 && r !== "dot";
65
75
  return /* @__PURE__ */ (0, o.jsxs)("div", {
66
- ref: v,
76
+ ref: y,
67
77
  className: i("border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl", n),
68
- children: [x ? null : b, /* @__PURE__ */ (0, o.jsx)("div", {
78
+ children: [S ? null : x, /* @__PURE__ */ (0, o.jsx)("div", {
69
79
  className: "grid gap-1.5",
70
80
  children: t.filter((e) => e.type !== "none").map((e, t) => {
71
- let n = g(y, e, `${h || e.name || e.dataKey || "value"}`), a = m || e.payload.fill || e.color;
81
+ let n = _(b, e, `${g || e.name || e.dataKey || "value"}`), a = h || e.payload.fill || e.color;
72
82
  return /* @__PURE__ */ (0, o.jsx)("div", {
73
83
  className: i("[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5", r === "dot" && "items-center"),
74
- children: p && e?.value !== void 0 && e.name ? p(e.value, e.name, e, t, e.payload) : /* @__PURE__ */ (0, o.jsxs)(o.Fragment, { children: [n?.icon ? /* @__PURE__ */ (0, o.jsx)(n.icon, {}) : !c && /* @__PURE__ */ (0, o.jsx)("div", {
84
+ children: m && e?.value !== void 0 && e.name ? m(e.value, e.name, e, t, e.payload) : /* @__PURE__ */ (0, o.jsxs)(o.Fragment, { children: [n?.icon ? /* @__PURE__ */ (0, o.jsx)(n.icon, {}) : !l && /* @__PURE__ */ (0, o.jsx)("div", {
75
85
  className: i("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]", {
76
86
  "h-2.5 w-2.5": r === "dot",
77
87
  "w-1": r === "line",
78
88
  "w-0 border-[1.5px] border-dashed bg-transparent": r === "dashed",
79
- "my-0.5": x && r === "dashed"
89
+ "my-0.5": S && r === "dashed"
80
90
  }),
81
91
  style: {
82
92
  "--color-bg": a,
83
93
  "--color-border": a
84
94
  }
85
95
  }), /* @__PURE__ */ (0, o.jsxs)("div", {
86
- className: i("flex flex-1 justify-between leading-none", x ? "items-end" : "items-center"),
96
+ className: i("flex flex-1 justify-between leading-none", S ? "items-end" : "items-center"),
87
97
  children: [/* @__PURE__ */ (0, o.jsxs)("div", {
88
98
  className: "grid gap-1.5",
89
- children: [x ? b : null, /* @__PURE__ */ (0, o.jsx)("span", {
99
+ children: [S ? x : null, /* @__PURE__ */ (0, o.jsx)("span", {
90
100
  className: "text-muted-foreground",
91
101
  children: n?.label || e.name
92
102
  })]
@@ -100,14 +110,14 @@ ${n.map(([e, n]) => {
100
110
  })]
101
111
  });
102
112
  });
103
- p.displayName = "ChartTooltip";
104
- var m = t, h = a.forwardRef(({ className: e, hideIcon: t = !1, payload: n, verticalAlign: r = "bottom", nameKey: a }, s) => {
105
- let { config: c } = l();
113
+ m.displayName = "ChartTooltip";
114
+ var h = t, g = a.forwardRef(({ className: e, hideIcon: t = !1, payload: n, verticalAlign: r = "bottom", nameKey: a }, s) => {
115
+ let { config: c } = u();
106
116
  return n?.length ? /* @__PURE__ */ (0, o.jsx)("div", {
107
117
  ref: s,
108
118
  className: i("flex items-center justify-center gap-4", r === "top" ? "pb-3" : "pt-3", e),
109
119
  children: n.filter((e) => e.type !== "none").map((e) => {
110
- let n = g(c, e, `${a || e.dataKey || "value"}`);
120
+ let n = _(c, e, `${a || e.dataKey || "value"}`);
111
121
  return /* @__PURE__ */ (0, o.jsxs)("div", {
112
122
  className: i("[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"),
113
123
  children: [n?.icon && !t ? /* @__PURE__ */ (0, o.jsx)(n.icon, {}) : /* @__PURE__ */ (0, o.jsx)("div", {
@@ -118,13 +128,13 @@ var m = t, h = a.forwardRef(({ className: e, hideIcon: t = !1, payload: n, verti
118
128
  })
119
129
  }) : null;
120
130
  });
121
- h.displayName = "ChartLegend";
122
- function g(e, t, n) {
131
+ g.displayName = "ChartLegend";
132
+ function _(e, t, n) {
123
133
  if (typeof t != "object" || !t) return;
124
134
  let r = "payload" in t && typeof t.payload == "object" && t.payload !== null ? t.payload : void 0, i = n;
125
- return n in t && typeof t[n] == "string" ? i = t[n] : r && n in r && typeof r[n] == "string" && (i = r[n]), i in e ? e[i] : e[n];
135
+ return c(t, n) && typeof t[n] == "string" ? i = t[n] : r && c(r, n) && typeof r[n] == "string" && (i = r[n]), c(e, i) ? e[i] : c(e, n) ? e[n] : void 0;
126
136
  }
127
137
  //#endregion
128
- export { u as ChartContainer, m as ChartLegend, h as ChartLegendContent, d as ChartStyle, f as ChartTooltip, p as ChartTooltipContent };
138
+ export { d as ChartContainer, h as ChartLegend, g as ChartLegendContent, f as ChartStyle, p as ChartTooltip, m as ChartTooltipContent };
129
139
 
130
140
  //# sourceMappingURL=chart.mjs.map