@agroshine/ags-web-ui-kit 1.0.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 (109) hide show
  1. package/README.md +75 -0
  2. package/dist/atoms/index.cjs +134 -0
  3. package/dist/atoms/index.cjs.map +1 -0
  4. package/dist/atoms/index.d.cts +583 -0
  5. package/dist/atoms/index.d.ts +583 -0
  6. package/dist/atoms/index.js +9 -0
  7. package/dist/atoms/index.js.map +1 -0
  8. package/dist/chunk-2KRMLIJQ.cjs +52 -0
  9. package/dist/chunk-2KRMLIJQ.cjs.map +1 -0
  10. package/dist/chunk-2TBYPKQ3.cjs +79 -0
  11. package/dist/chunk-2TBYPKQ3.cjs.map +1 -0
  12. package/dist/chunk-5FWELSEZ.js +1296 -0
  13. package/dist/chunk-5FWELSEZ.js.map +1 -0
  14. package/dist/chunk-5PEOJVY7.cjs +1502 -0
  15. package/dist/chunk-5PEOJVY7.cjs.map +1 -0
  16. package/dist/chunk-6LUGTNMH.js +259 -0
  17. package/dist/chunk-6LUGTNMH.js.map +1 -0
  18. package/dist/chunk-6O2IDBTX.js +112 -0
  19. package/dist/chunk-6O2IDBTX.js.map +1 -0
  20. package/dist/chunk-6YUNWKT3.js +26 -0
  21. package/dist/chunk-6YUNWKT3.js.map +1 -0
  22. package/dist/chunk-7R6OXNES.cjs +321 -0
  23. package/dist/chunk-7R6OXNES.cjs.map +1 -0
  24. package/dist/chunk-A3A7PJWG.cjs +13 -0
  25. package/dist/chunk-A3A7PJWG.cjs.map +1 -0
  26. package/dist/chunk-A7TDGQAB.js +557 -0
  27. package/dist/chunk-A7TDGQAB.js.map +1 -0
  28. package/dist/chunk-C4LX3XTN.cjs +1187 -0
  29. package/dist/chunk-C4LX3XTN.cjs.map +1 -0
  30. package/dist/chunk-DZW4GS2T.cjs +1340 -0
  31. package/dist/chunk-DZW4GS2T.cjs.map +1 -0
  32. package/dist/chunk-E3BTK736.cjs +174 -0
  33. package/dist/chunk-E3BTK736.cjs.map +1 -0
  34. package/dist/chunk-ERGKCXM2.cjs +267 -0
  35. package/dist/chunk-ERGKCXM2.cjs.map +1 -0
  36. package/dist/chunk-FOA46NSG.cjs +574 -0
  37. package/dist/chunk-FOA46NSG.cjs.map +1 -0
  38. package/dist/chunk-JTFCE6RA.js +1156 -0
  39. package/dist/chunk-JTFCE6RA.js.map +1 -0
  40. package/dist/chunk-KINOE57L.js +225 -0
  41. package/dist/chunk-KINOE57L.js.map +1 -0
  42. package/dist/chunk-MOED3QPY.js +11 -0
  43. package/dist/chunk-MOED3QPY.js.map +1 -0
  44. package/dist/chunk-NVR34DY2.cjs +4 -0
  45. package/dist/chunk-NVR34DY2.cjs.map +1 -0
  46. package/dist/chunk-PI3IJWBG.js +79 -0
  47. package/dist/chunk-PI3IJWBG.js.map +1 -0
  48. package/dist/chunk-PXAMTGYY.js +3 -0
  49. package/dist/chunk-PXAMTGYY.js.map +1 -0
  50. package/dist/chunk-QAZMI5VH.js +151 -0
  51. package/dist/chunk-QAZMI5VH.js.map +1 -0
  52. package/dist/chunk-QEG27NX6.js +30 -0
  53. package/dist/chunk-QEG27NX6.js.map +1 -0
  54. package/dist/chunk-THTOUSMG.cjs +52 -0
  55. package/dist/chunk-THTOUSMG.cjs.map +1 -0
  56. package/dist/chunk-UAXKB6IH.cjs +32 -0
  57. package/dist/chunk-UAXKB6IH.cjs.map +1 -0
  58. package/dist/chunk-W5IHWAMM.js +48 -0
  59. package/dist/chunk-W5IHWAMM.js.map +1 -0
  60. package/dist/chunk-X2UJQVZJ.cjs +139 -0
  61. package/dist/chunk-X2UJQVZJ.cjs.map +1 -0
  62. package/dist/chunk-X43C5OJD.js +1460 -0
  63. package/dist/chunk-X43C5OJD.js.map +1 -0
  64. package/dist/chunk-XCYSBWV4.js +56 -0
  65. package/dist/chunk-XCYSBWV4.js.map +1 -0
  66. package/dist/chunk-XX4CBCEB.cjs +102 -0
  67. package/dist/chunk-XX4CBCEB.cjs.map +1 -0
  68. package/dist/hooks/index.cjs +33 -0
  69. package/dist/hooks/index.cjs.map +1 -0
  70. package/dist/hooks/index.d.cts +59 -0
  71. package/dist/hooks/index.d.ts +59 -0
  72. package/dist/hooks/index.js +4 -0
  73. package/dist/hooks/index.js.map +1 -0
  74. package/dist/index.cjs +366 -0
  75. package/dist/index.cjs.map +1 -0
  76. package/dist/index.d.cts +13 -0
  77. package/dist/index.d.ts +13 -0
  78. package/dist/index.js +17 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/interface-DnK5S6ww.d.cts +51 -0
  81. package/dist/interface-DnK5S6ww.d.ts +51 -0
  82. package/dist/lib/index.cjs +13 -0
  83. package/dist/lib/index.cjs.map +1 -0
  84. package/dist/lib/index.d.cts +5 -0
  85. package/dist/lib/index.d.ts +5 -0
  86. package/dist/lib/index.js +4 -0
  87. package/dist/lib/index.js.map +1 -0
  88. package/dist/molecules/index.cjs +123 -0
  89. package/dist/molecules/index.cjs.map +1 -0
  90. package/dist/molecules/index.d.cts +449 -0
  91. package/dist/molecules/index.d.ts +449 -0
  92. package/dist/molecules/index.js +10 -0
  93. package/dist/molecules/index.js.map +1 -0
  94. package/dist/organisms/index.cjs +102 -0
  95. package/dist/organisms/index.cjs.map +1 -0
  96. package/dist/organisms/index.d.cts +396 -0
  97. package/dist/organisms/index.d.ts +396 -0
  98. package/dist/organisms/index.js +9 -0
  99. package/dist/organisms/index.js.map +1 -0
  100. package/dist/tooltip-Bl2ZTtfg.d.cts +16 -0
  101. package/dist/tooltip-Bl2ZTtfg.d.ts +16 -0
  102. package/dist/ui/index.cjs +955 -0
  103. package/dist/ui/index.cjs.map +1 -0
  104. package/dist/ui/index.d.cts +252 -0
  105. package/dist/ui/index.d.ts +252 -0
  106. package/dist/ui/index.js +642 -0
  107. package/dist/ui/index.js.map +1 -0
  108. package/package.json +200 -0
  109. package/tailwind.preset.cjs +134 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/dropdown-menu.tsx","../../src/ui/label.tsx","../../src/ui/progress.tsx","../../src/ui/sidebar-hooks.ts","../../src/ui/sidebar.tsx","../../src/ui/slider.tsx","../../src/ui/switch.tsx"],"names":["React","Label","React2","jsx","React3","React4","jsxs","cva","React6","React7"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Check, ChevronRight, Circle } from 'lucide-react';\n\nimport { cn } from '../lib/cn';\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center gap-2 rounded-sm px-2.5 py-1.5 text-[13.5px] text-foreground outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-3 w-3 text-muted-foreground\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n // Canon Components.html `.dmenu` → border-radius 6px (rounded-md), min-w 220, p-1, shadow-md\n 'z-50 min-w-[220px] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n // Canon Components.html `.dmenu` → border-radius 6px (rounded-md), min-w 220, p-1, shadow-md\n 'z-50 min-w-[220px] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'danger';\n }\n>(({ className, inset, variant = 'default', ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n // Canon `.dmenu-item` → padding 6px 10px, radius 4px (rounded-sm), font 13.5px\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2.5 py-1.5 text-[13.5px] text-foreground outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n variant === 'danger' && 'text-destructive focus:bg-destructive/[0.08] focus:text-destructive',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n // Canon `.dmenu-item:has(.check-mark)` → pl-8 (32px), resto igual a item\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2.5 text-[13.5px] text-foreground outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2.5 flex h-3.5 w-3.5 items-center justify-center text-primary\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-3.5 w-3.5\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n // Canon `.dmenu-item.radio-item` → pl-8, dot 6px primary\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2.5 text-[13.5px] text-foreground outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-3.5 flex h-1.5 w-1.5 items-center justify-center text-primary\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-1.5 w-1.5 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n // Canon `.dmenu-label` → px-2 py-1.5 text-[13px] font-semibold text-foreground\n 'px-2 py-1.5 text-[13px] font-semibold text-foreground',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n // Canon `.dmenu-sep { background: var(--border); margin: 4px -4px; }`\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\n/**\n * Canon `.dmenu-shortcut` + `kbd` style.\n * Uso recomendado:\n * <DropdownMenuShortcut><kbd>⌘</kbd><kbd>N</kbd></DropdownMenuShortcut>\n * Si pasas string plano se renderiza sin kbd-chips (modo legacy shadcn).\n */\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\n 'ml-auto inline-flex items-center gap-1',\n // Estilo kbd: chip border-border bg-muted rounded-sm 3px, mono, 10.5px\n '[&_kbd]:inline-block [&_kbd]:rounded-sm [&_kbd]:border [&_kbd]:border-border [&_kbd]:bg-muted',\n '[&_kbd]:px-1.5 [&_kbd]:py-px [&_kbd]:min-w-[18px] [&_kbd]:text-center',\n '[&_kbd]:font-mono [&_kbd]:text-[10.5px] [&_kbd]:font-medium [&_kbd]:leading-tight [&_kbd]:text-muted-foreground',\n // Fallback (string plano) — mantiene look shadcn legacy\n '[&:not(:has(kbd))]:text-xs [&:not(:has(kbd))]:tracking-widest [&:not(:has(kbd))]:opacity-60',\n className,\n )}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../lib/cn';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\n\nimport { cn } from '../lib/cn';\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn('relative h-2 w-full overflow-hidden rounded-full bg-default-200', className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","import * as React from 'react';\n\n/**\n * Constantes compartidas del sistema Sidebar (shadcn canon adaptado AgroShine).\n * Width/height tokens vienen de Components.html (aside 240/56).\n */\nexport const SIDEBAR_COOKIE_NAME = 'sidebar:state';\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nexport const SIDEBAR_WIDTH = '15rem'; // 240px (expanded, canon Components.html)\nexport const SIDEBAR_WIDTH_MOBILE = '18rem'; // drawer mobile\nexport const SIDEBAR_WIDTH_ICON = '3.5rem'; // 56px (collapsed icon-only)\nexport const SIDEBAR_KEYBOARD_SHORTCUT = 'b';\nexport const SIDEBAR_MOBILE_BREAKPOINT = 768;\n\n/**\n * Hook media-query simple para detectar mobile.\n * Devuelve `false` durante SSR para evitar mismatch de hidratación.\n */\nexport function useIsMobile(breakpoint: number = SIDEBAR_MOBILE_BREAKPOINT): boolean {\n const [isMobile, setIsMobile] = React.useState<boolean>(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n const onChange = () => setIsMobile(window.innerWidth < breakpoint);\n onChange();\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n }, [breakpoint]);\n\n return isMobile;\n}\n\nexport type SidebarState = 'expanded' | 'collapsed';\n\nexport interface SidebarContextValue {\n state: SidebarState;\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n}\n\nexport const SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n/**\n * Acceso al estado/acciones del Sidebar. Debe usarse dentro de `<SidebarProvider>`.\n */\nexport function useSidebar(): SidebarContextValue {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) throw new Error('useSidebar must be used within a SidebarProvider.');\n return ctx;\n}\n","/* eslint-disable max-lines */\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { PanelLeft } from 'lucide-react';\n\nimport { cn } from '../lib/cn';\n\nimport { Sheet, SheetContent } from './sheet';\nimport {\n SIDEBAR_COOKIE_MAX_AGE,\n SIDEBAR_COOKIE_NAME,\n SIDEBAR_KEYBOARD_SHORTCUT,\n SIDEBAR_WIDTH,\n SIDEBAR_WIDTH_ICON,\n SIDEBAR_WIDTH_MOBILE,\n SidebarContext,\n type SidebarContextValue,\n type SidebarState,\n useIsMobile,\n useSidebar,\n} from './sidebar-hooks';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * SidebarProvider — estado open/mobile + cookie persistence + shortcut Cmd/Ctrl+B\n * ────────────────────────────────────────────────────────────────────────── */\n\ninterface SidebarProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (setOpenProp) setOpenProp(value);\n else _setOpen(value);\n if (typeof document !== 'undefined') {\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n }\n },\n [setOpenProp],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) setOpenMobile((v) => !v);\n else setOpen(!open);\n }, [isMobile, open, setOpen]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state: SidebarState = open ? 'expanded' : 'collapsed';\n\n const ctx = React.useMemo<SidebarContextValue>(\n () => ({ state, open, setOpen, openMobile, setOpenMobile, isMobile, toggleSidebar }),\n [state, open, setOpen, openMobile, isMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={ctx}>\n <TooltipProvider delayDuration={0}>\n <div\n ref={ref}\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-default-100',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = 'SidebarProvider';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Sidebar — desktop aside + mobile Sheet drawer\n * ────────────────────────────────────────────────────────────────────────── */\n\ninterface SidebarRootProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarRootProps>(\n (\n {\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex h-full w-[--sidebar-width] flex-col border-r border-default-200 bg-default-50 text-default-900',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n side={side}\n hideCloseButton\n className=\"w-[--sidebar-width] bg-default-50 p-0 text-default-900 [&>button]:hidden\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n >\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer hidden text-default-900 md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n >\n <div\n className={cn(\n 'duration-200 relative h-svh w-[--sidebar-width] bg-transparent transition-[width] ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'\n : 'group-data-[collapsible=icon]:w-[--sidebar-width-icon]',\n )}\n />\n <div\n className={cn(\n 'duration-200 fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'\n : 'group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l border-default-200',\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col bg-default-50 group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-default-200\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nSidebar.displayName = 'Sidebar';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * SidebarTrigger / SidebarInset\n * ────────────────────────────────────────────────────────────────────────── */\n\nconst SidebarTrigger = React.forwardRef<HTMLButtonElement, React.ComponentProps<'button'>>(\n ({ className, onClick, ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-sidebar=\"trigger\"\n aria-label=\"Toggle sidebar\"\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-default-700 hover:bg-default-100 hover:text-default-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500',\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeft className=\"h-4 w-4\" />\n </button>\n );\n },\n);\nSidebarTrigger.displayName = 'SidebarTrigger';\n\nconst SidebarInset = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <main\n ref={ref}\n className={cn(\n 'relative flex min-h-svh flex-1 flex-col bg-default-50',\n 'peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow',\n className,\n )}\n {...props}\n />\n ),\n);\nSidebarInset.displayName = 'SidebarInset';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Slots: Header / Content / Footer / Separator\n * ────────────────────────────────────────────────────────────────────────── */\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\n 'flex items-center gap-3 border-b border-default-200 px-4 py-4 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-2',\n className,\n )}\n {...props}\n />\n ),\n);\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto py-2 group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n ),\n);\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\n 'border-t border-default-200 px-4 py-3 text-sm text-default-700 group-data-[collapsible=icon]:px-2 group-data-[collapsible=icon]:text-center',\n className,\n )}\n {...props}\n />\n ),\n);\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"separator\"\n className={cn('mx-2 my-1 h-px bg-default-200', className)}\n {...props}\n />\n ),\n);\nSidebarSeparator.displayName = 'SidebarSeparator';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Group / GroupLabel / GroupContent\n * ────────────────────────────────────────────────────────────────────────── */\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col', className)}\n {...props}\n />\n ),\n);\nSidebarGroup.displayName = 'SidebarGroup';\n\ninterface SidebarGroupLabelProps extends React.HTMLAttributes<HTMLDivElement> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(\n ({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'div';\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n 'px-4 pt-4 pb-1 text-[11px] font-semibold uppercase tracking-wider text-default-600',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn('flex w-full min-w-0 flex-col', className)}\n {...props}\n />\n ),\n);\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Menu / MenuItem / MenuButton / MenuBadge\n * ────────────────────────────────────────────────────────────────────────── */\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn('flex w-full min-w-0 flex-col', className)}\n {...props}\n />\n ),\n);\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, React.HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n ),\n);\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'group/menu-button peer/menu-button relative flex w-full items-center gap-3 overflow-hidden border-l-2 border-transparent px-4 py-2 text-left text-sm font-medium outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-primary-500',\n 'data-[active=true]:bg-primary-50 data-[active=true]:text-primary-700 data-[active=true]:border-l-primary-500',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-40',\n 'group-data-[collapsible=icon]:!size-10 group-data-[collapsible=icon]:!justify-center group-data-[collapsible=icon]:!p-0 group-data-[collapsible=icon]:border-l-0',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n ].join(' '),\n {\n variants: {\n variant: {\n default: 'text-default-800 hover:bg-default-100 hover:text-default-900',\n ghost: 'text-default-700 hover:bg-default-100',\n },\n size: {\n default: 'h-9 text-sm',\n sm: 'h-8 text-xs',\n lg: 'h-11 text-sm',\n },\n },\n defaultVariants: { variant: 'default', size: 'default' },\n },\n);\n\ninterface SidebarMenuButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof sidebarMenuButtonVariants> {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n}\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n (\n {\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : 'button';\n const { state, isMobile } = useSidebar();\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) return button;\n\n const tooltipProps: React.ComponentProps<typeof TooltipContent> =\n typeof tooltip === 'string' ? { children: tooltip } : tooltip;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== 'collapsed' || isMobile}\n {...tooltipProps}\n />\n </Tooltip>\n );\n },\n);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\n\nconst SidebarMenuBadge = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 inline-flex min-w-5 select-none items-center justify-center rounded-full bg-secondary-100 px-1.5 py-0.5 text-[10px] font-semibold text-secondary-700',\n 'peer-data-[active=true]/menu-button:bg-white peer-data-[active=true]/menu-button:text-primary-700',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n ),\n);\nSidebarMenuBadge.displayName = 'SidebarMenuBadge';\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Exports\n * ────────────────────────────────────────────────────────────────────────── */\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n sidebarMenuButtonVariants,\n SidebarMenuItem,\n SidebarProvider,\n SidebarSeparator,\n SidebarTrigger,\n};\nexport { useSidebar } from './sidebar-hooks';\nexport type {\n SidebarGroupLabelProps,\n SidebarMenuButtonProps,\n SidebarProviderProps,\n SidebarRootProps,\n};\nexport type { SidebarContextValue, SidebarState } from './sidebar-hooks';\n","import * as React from 'react';\nimport * as SliderPrimitive from '@radix-ui/react-slider';\n\nimport { cn } from '../lib/cn';\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn('relative flex w-full touch-none select-none items-center', className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-2 w-full grow overflow-hidden rounded-full bg-default-200\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n {Array.from({\n length:\n (Array.isArray(props.value) && props.value.length) ||\n (Array.isArray(props.defaultValue) && props.defaultValue.length) ||\n 1,\n }).map((_, i) => (\n <SliderPrimitive.Thumb\n key={i}\n className=\"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n));\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","import * as React from 'react';\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\n\nimport { cn } from '../lib/cn';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border border-border transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=unchecked]:bg-default-200',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n"]}
package/package.json ADDED
@@ -0,0 +1,200 @@
1
+ {
2
+ "name": "@agroshine/ags-web-ui-kit",
3
+ "version": "1.0.0",
4
+ "description": "AgroShine · Luna Nueva · librería de componentes React reutilizables",
5
+ "license": "MIT",
6
+ "author": "AgroShine",
7
+ "packageManager": "pnpm@10.28.1",
8
+ "engines": {
9
+ "node": "20.x",
10
+ "pnpm": "10.x"
11
+ },
12
+ "homepage": "https://github.com/AgroShine/ags-web-ui-kit#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/AgroShine/ags-web-ui-kit/issues"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/AgroShine/ags-web-ui-kit.git"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "registry": "https://registry.npmjs.org/"
23
+ },
24
+ "type": "module",
25
+ "sideEffects": [
26
+ "**/*.css"
27
+ ],
28
+ "main": "./dist/index.cjs",
29
+ "module": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "files": [
32
+ "dist",
33
+ "tailwind.preset.cjs",
34
+ "README.md"
35
+ ],
36
+ "exports": {
37
+ ".": {
38
+ "types": "./dist/index.d.ts",
39
+ "import": "./dist/index.js",
40
+ "require": "./dist/index.cjs"
41
+ },
42
+ "./atoms": {
43
+ "types": "./dist/atoms/index.d.ts",
44
+ "import": "./dist/atoms/index.js",
45
+ "require": "./dist/atoms/index.cjs"
46
+ },
47
+ "./molecules": {
48
+ "types": "./dist/molecules/index.d.ts",
49
+ "import": "./dist/molecules/index.js",
50
+ "require": "./dist/molecules/index.cjs"
51
+ },
52
+ "./organisms": {
53
+ "types": "./dist/organisms/index.d.ts",
54
+ "import": "./dist/organisms/index.js",
55
+ "require": "./dist/organisms/index.cjs"
56
+ },
57
+ "./ui": {
58
+ "types": "./dist/ui/index.d.ts",
59
+ "import": "./dist/ui/index.js",
60
+ "require": "./dist/ui/index.cjs"
61
+ },
62
+ "./hooks": {
63
+ "types": "./dist/hooks/index.d.ts",
64
+ "import": "./dist/hooks/index.js",
65
+ "require": "./dist/hooks/index.cjs"
66
+ },
67
+ "./lib": {
68
+ "types": "./dist/lib/index.d.ts",
69
+ "import": "./dist/lib/index.js",
70
+ "require": "./dist/lib/index.cjs"
71
+ },
72
+ "./tailwind.preset": "./tailwind.preset.cjs",
73
+ "./styles/tokens.css": "./src/styles/tokens.css"
74
+ },
75
+ "scripts": {
76
+ "build": "tsup",
77
+ "dev": "tsup --watch",
78
+ "clean": "rm -rf dist",
79
+ "typecheck": "tsc --noEmit",
80
+ "lint": "eslint 'src/**/*.{ts,tsx}'",
81
+ "lint:fix": "eslint 'src/**/*.{ts,tsx}' --fix",
82
+ "format": "prettier --write 'src/**/*.{ts,tsx}'",
83
+ "format:check": "prettier --check 'src/**/*.{ts,tsx}'",
84
+ "format-check": "pnpm format:check",
85
+ "commit": "git cz",
86
+ "prepare": "husky install",
87
+ "release": "semantic-release",
88
+ "storybook": "storybook dev -p 6006",
89
+ "build-storybook": "storybook build"
90
+ },
91
+ "config": {
92
+ "commitizen": {
93
+ "path": "./node_modules/cz-customizable",
94
+ "config": ".cz-config.js"
95
+ }
96
+ },
97
+ "peerDependencies": {
98
+ "@fortawesome/fontawesome-svg-core": "^6.0.0",
99
+ "@fortawesome/free-solid-svg-icons": "^6.0.0",
100
+ "@fortawesome/react-fontawesome": "^0.2.0",
101
+ "@radix-ui/react-accordion": "^1.2.0",
102
+ "@radix-ui/react-avatar": "^1.0.0",
103
+ "@radix-ui/react-checkbox": "^1.0.0",
104
+ "@radix-ui/react-collapsible": "^1.1.0",
105
+ "@radix-ui/react-dialog": "^1.0.0",
106
+ "@radix-ui/react-dropdown-menu": "^2.0.0",
107
+ "@radix-ui/react-hover-card": "^1.1.0",
108
+ "@radix-ui/react-label": "^2.0.0",
109
+ "@radix-ui/react-popover": "^1.0.0",
110
+ "@radix-ui/react-progress": "^1.1.0",
111
+ "@radix-ui/react-radio-group": "^1.2.0",
112
+ "@radix-ui/react-scroll-area": "^1.2.0",
113
+ "@radix-ui/react-separator": "^1.1.0",
114
+ "@radix-ui/react-slider": "^1.2.0",
115
+ "@radix-ui/react-slot": "^1.0.0",
116
+ "@radix-ui/react-switch": "^1.1.0",
117
+ "@radix-ui/react-tabs": "^1.1.0",
118
+ "@radix-ui/react-toggle": "^1.1.0",
119
+ "@radix-ui/react-toggle-group": "^1.1.0",
120
+ "@radix-ui/react-tooltip": "^1.0.0",
121
+ "@rc-component/table": "^1.0.0",
122
+ "@rc-component/trigger": "^3.0.0",
123
+ "class-variance-authority": "^0.7.0",
124
+ "clsx": "^2.0.0",
125
+ "date-fns": "^4.0.0",
126
+ "dayjs": "^1.11.0",
127
+ "lucide-react": "^1.0.0 || ^0.300.0",
128
+ "rc-dropdown": "^4.0.0",
129
+ "rc-pagination": "^5.0.0",
130
+ "react": "^18.0.0 || ^19.0.0",
131
+ "react-day-picker": "^8.0.0",
132
+ "react-dom": "^18.0.0 || ^19.0.0",
133
+ "sonner": "^2.0.0",
134
+ "tailwind-merge": "^2.0.0 || ^3.0.0",
135
+ "tailwindcss": "^4.0.0",
136
+ "tailwindcss-animate": "^1.0.0"
137
+ },
138
+ "peerDependenciesMeta": {
139
+ "@fortawesome/fontawesome-svg-core": {
140
+ "optional": true
141
+ },
142
+ "@fortawesome/free-solid-svg-icons": {
143
+ "optional": true
144
+ },
145
+ "@fortawesome/react-fontawesome": {
146
+ "optional": true
147
+ },
148
+ "@rc-component/trigger": {
149
+ "optional": true
150
+ },
151
+ "react-day-picker": {
152
+ "optional": true
153
+ },
154
+ "sonner": {
155
+ "optional": true
156
+ },
157
+ "date-fns": {
158
+ "optional": true
159
+ },
160
+ "dayjs": {
161
+ "optional": true
162
+ }
163
+ },
164
+ "devDependencies": {
165
+ "@storybook/addon-a11y": "^8.5.0",
166
+ "@storybook/addon-essentials": "^8.5.0",
167
+ "@storybook/blocks": "^8.5.0",
168
+ "@storybook/react": "^8.5.0",
169
+ "@storybook/react-vite": "^8.5.0",
170
+ "@tailwindcss/vite": "^4.3.0",
171
+ "@commitlint/cli": "^19.6.1",
172
+ "@commitlint/config-conventional": "^19.6.0",
173
+ "@eslint/js": "^9.17.0",
174
+ "@semantic-release/changelog": "^6.0.3",
175
+ "@semantic-release/exec": "^7.1.0",
176
+ "@semantic-release/git": "^10.0.1",
177
+ "@semantic-release/github": "^11.0.1",
178
+ "@semantic-release/npm": "^12.0.1",
179
+ "@types/node": "^22.10.0",
180
+ "conventional-changelog-conventionalcommits": "^8.0.0",
181
+ "@types/react": "^18.3.18",
182
+ "@types/react-dom": "^18.3.5",
183
+ "commitizen": "^4.3.1",
184
+ "cz-customizable": "^7.4.0",
185
+ "eslint": "^9.17.0",
186
+ "eslint-plugin-react-hooks": "^5.0.0",
187
+ "eslint-plugin-simple-import-sort": "^12.1.1",
188
+ "globals": "^15.14.0",
189
+ "husky": "^8.0.3",
190
+ "prettier": "^3.4.2",
191
+ "semantic-release": "^24.2.1",
192
+ "storybook": "^8.5.0",
193
+ "tailwindcss": "^4.3.0",
194
+ "tailwindcss-animate": "^1.0.7",
195
+ "tsup": "^8.3.5",
196
+ "typescript": "~5.6.2",
197
+ "typescript-eslint": "^8.18.2",
198
+ "vite": "^6.0.5"
199
+ }
200
+ }
@@ -0,0 +1,134 @@
1
+ /**
2
+ * AgroShine · Luna Nueva — Tailwind preset
3
+ *
4
+ * Consumo desde una app:
5
+ *
6
+ * // tailwind.config.{js,ts} (Tailwind v3)
7
+ * module.exports = {
8
+ * presets: [require('ags-web-ui-kit/tailwind.preset')],
9
+ * content: [..., './node_modules/ags-web-ui-kit/dist/** /*.{js,cjs}']
10
+ * };
11
+ *
12
+ * En Tailwind v4 (config CSS-first), preferir importar
13
+ * `ags-web-ui-kit/styles/tokens.css`
14
+ * desde el CSS de la app y declarar los mismos tokens vía @theme.
15
+ */
16
+
17
+ const colors = {
18
+ default: {
19
+ 50: '#f6f8f7', 100: '#eaefec', 200: '#dee5e0', 300: '#d2dcd5',
20
+ 400: '#c5d2c9', 500: '#b9c9be', 600: '#99a69d', 700: '#78837c',
21
+ 800: '#585f5a', 900: '#383c39',
22
+ DEFAULT: '#d4d4d8', foreground: '#000',
23
+ },
24
+ primary: {
25
+ 50: '#e3e7e6', 100: '#bbc6c3', 200: '#94a5a0', 300: '#6c847c',
26
+ 400: '#456359', 500: '#1d4236', 600: '#18362d', 700: '#132b23',
27
+ 800: '#0e1f1a', 900: '#091410',
28
+ DEFAULT: '#1d4236', foreground: '#fff',
29
+ },
30
+ secondary: {
31
+ 50: '#fbf1e8', 100: '#f4dcc4', 200: '#e9c19a', 300: '#dea670',
32
+ 400: '#d38d4f', 500: '#c87a3c', 600: '#a86430', 700: '#834d25',
33
+ 800: '#5e371a', 900: '#3a210f',
34
+ DEFAULT: '#c87a3c', foreground: '#fff',
35
+ },
36
+ success: {
37
+ 50: '#e8faf0', 100: '#d1f4e0', 200: '#a2e9c1', 300: '#74dfa2',
38
+ 400: '#45d483', 500: '#17c964', 600: '#12a150', 700: '#0e793c',
39
+ 800: '#095028', 900: '#052814',
40
+ DEFAULT: '#405f54', foreground: '#fff',
41
+ },
42
+ warning: {
43
+ 50: '#fefce8', 100: '#fdedd3', 200: '#fbdba7', 300: '#f9c97c',
44
+ 400: '#f7b750', 500: '#f5a524', 600: '#f5a524', 700: '#936316',
45
+ 800: '#62420e', 900: '#312107',
46
+ DEFAULT: '#ebc40e', foreground: '#000',
47
+ },
48
+ danger: {
49
+ 50: '#fee7ef', 100: '#fdd0df', 200: '#faa0bf', 300: '#f871a0',
50
+ 400: '#f54180', 500: '#f31260', 600: '#c20e4d', 700: '#920b3a',
51
+ 800: '#610726', 900: '#310413',
52
+ DEFAULT: '#ed8688', foreground: '#000',
53
+ },
54
+ grey: {
55
+ 50: '#ffffff', 100: '#fefefe', 200: '#f4f4f5', 300: '#eaeaec',
56
+ 400: '#dfdfe2', 500: '#d5d5d9', 600: '#cbcbd0', 700: '#c1c1c6',
57
+ 800: '#b6b6bd', 900: '#acacb4',
58
+ DEFAULT: '#acacb4', foreground: '#000',
59
+ },
60
+ content1: { DEFAULT: '#ffffff', foreground: '#000' },
61
+ content2: { DEFAULT: '#f4f4f5', foreground: '#000' },
62
+ content3: { DEFAULT: '#e4e4e7', foreground: '#000' },
63
+ content4: { DEFAULT: '#d4d4d8', foreground: '#000' },
64
+ focus: '#456359',
65
+ overlay: '#000000',
66
+ };
67
+
68
+ /** @type {import('tailwindcss').Config} */
69
+ module.exports = {
70
+ theme: {
71
+ extend: {
72
+ colors: {
73
+ ...colors,
74
+ border: 'hsl(var(--border))',
75
+ input: 'hsl(var(--input))',
76
+ ring: 'hsl(var(--ring))',
77
+ background: 'hsl(var(--background))',
78
+ foreground: 'hsl(var(--foreground))',
79
+ muted: {
80
+ DEFAULT: 'hsl(var(--muted))',
81
+ foreground: 'hsl(var(--muted-foreground))',
82
+ },
83
+ accent: {
84
+ DEFAULT: 'hsl(var(--accent))',
85
+ foreground: 'hsl(var(--accent-foreground))',
86
+ },
87
+ popover: {
88
+ DEFAULT: 'hsl(var(--popover))',
89
+ foreground: 'hsl(var(--popover-foreground))',
90
+ },
91
+ card: {
92
+ DEFAULT: 'hsl(var(--card))',
93
+ foreground: 'hsl(var(--card-foreground))',
94
+ },
95
+ destructive: {
96
+ DEFAULT: 'hsl(var(--destructive))',
97
+ foreground: 'hsl(var(--destructive-foreground))',
98
+ },
99
+ },
100
+ fontFamily: {
101
+ roboto: ['Roboto', 'sans-serif'],
102
+ mono: ['JetBrains Mono', 'ui-monospace', 'monospace'],
103
+ },
104
+ borderRadius: {
105
+ lg: 'var(--radius)',
106
+ md: 'calc(var(--radius) - 2px)',
107
+ sm: 'calc(var(--radius) - 4px)',
108
+ },
109
+ fontSize: {
110
+ h2: ['20px', { fontWeight: '700' }],
111
+ subtitleLarge: ['16px', { fontWeight: '600' }],
112
+ subtitleMedium: ['14px', { fontWeight: '600' }],
113
+ bodyMedium: ['14px', { fontWeight: '500' }],
114
+ caption: ['12px', { fontWeight: '600' }],
115
+ buttons: ['14px', { fontWeight: '600' }],
116
+ },
117
+ keyframes: {
118
+ 'accordion-down': {
119
+ from: { height: '0' },
120
+ to: { height: 'var(--radix-accordion-content-height)' },
121
+ },
122
+ 'accordion-up': {
123
+ from: { height: 'var(--radix-accordion-content-height)' },
124
+ to: { height: '0' },
125
+ },
126
+ },
127
+ animation: {
128
+ 'accordion-down': 'accordion-down 0.2s ease-out',
129
+ 'accordion-up': 'accordion-up 0.2s ease-out',
130
+ },
131
+ },
132
+ },
133
+ plugins: [require('tailwindcss-animate')],
134
+ };