@ginia/ui 0.1.25 → 0.1.26

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.
@@ -25,15 +25,21 @@ module.exports = __toCommonJS(calendar_exports);
25
25
  var import_jsx_runtime = require("react/jsx-runtime");
26
26
  var import_react_day_picker = require("react-day-picker");
27
27
  var import_locale = require("date-fns/locale");
28
+ var import_lucide_react = require("lucide-react");
28
29
  var import_utils = require("../../../lib/utils");
29
30
  var import_button = require("../button");
30
- function Calendar({ className, classNames, showOutsideDays = true, locale = import_locale.es, ...props }) {
31
+ function Calendar({ className, classNames, showOutsideDays = true, locale = import_locale.enUS, components, ...props }) {
31
32
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
32
33
  import_react_day_picker.DayPicker,
33
34
  {
34
35
  showOutsideDays,
35
36
  locale,
36
37
  className: (0, import_utils.cn)("rounded-md bg-white p-3 dark:bg-card", className),
38
+ components: {
39
+ IconLeft: () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronLeft, { className: "h-4 w-4" }),
40
+ IconRight: () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronRight, { className: "h-4 w-4" }),
41
+ ...components
42
+ },
37
43
  classNames: {
38
44
  months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
39
45
  month: "space-y-4",
@@ -41,8 +47,8 @@ function Calendar({ className, classNames, showOutsideDays = true, locale = impo
41
47
  caption_label: "text-sm font-medium",
42
48
  nav: "space-x-1 flex items-center",
43
49
  nav_button: (0, import_utils.cn)(
44
- (0, import_button.buttonVariants)({ variant: "outline" }),
45
- "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
50
+ (0, import_button.buttonVariants)({ variant: "outline", size: "sm" }),
51
+ "h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground"
46
52
  ),
47
53
  nav_button_previous: "absolute left-1",
48
54
  nav_button_next: "absolute right-1",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/calendar/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { es } from \"date-fns/locale\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { buttonVariants } from \"../button\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, locale = es, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n locale={locale}\n className={cn(\"rounded-md bg-white p-3 dark:bg-card\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\",\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaI;AAVJ,8BAA0B;AAC1B,oBAAmB;AAEnB,mBAAmB;AACnB,oBAA+B;AAI/B,SAAS,SAAS,EAAE,WAAW,YAAY,kBAAkB,MAAM,SAAS,kBAAI,GAAG,MAAM,GAAkB;AACzG,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAW,iBAAG,wCAAwC,SAAS;AAAA,MAC/D,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,gBAAY;AAAA,cACV,8BAAe,EAAE,SAAS,UAAU,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,QACA,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,KAAK;AAAA,QACL,MAAM;AAAA,QACN,SAAK;AAAA,cACH,8BAAe,EAAE,SAAS,QAAQ,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,QACA,eAAe;AAAA,QACf,cACE;AAAA,QACF,WAAW;AAAA,QACX,aACE;AAAA,QACF,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/calendar/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { enUS } from \"date-fns/locale\";\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { buttonVariants } from \"../button\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, locale = enUS, components, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n locale={locale}\n className={cn(\"rounded-md bg-white p-3 dark:bg-card\", className)}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n ...components,\n }}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\", size: \"sm\" }),\n \"h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground\",\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\",\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBwB;AAjBxB,8BAA0B;AAC1B,oBAAqB;AAErB,0BAA0C;AAE1C,mBAAmB;AACnB,oBAA+B;AAI/B,SAAS,SAAS,EAAE,WAAW,YAAY,kBAAkB,MAAM,SAAS,oBAAM,YAAY,GAAG,MAAM,GAAkB;AACvH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAW,iBAAG,wCAAwC,SAAS;AAAA,MAC/D,YAAY;AAAA,QACV,UAAU,MAAM,4CAAC,mCAAY,WAAU,WAAU;AAAA,QACjD,WAAW,MAAM,4CAAC,oCAAa,WAAU,WAAU;AAAA,QACnD,GAAG;AAAA,MACL;AAAA,MACA,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,gBAAY;AAAA,cACV,8BAAe,EAAE,SAAS,WAAW,MAAM,KAAK,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,QACA,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,KAAK;AAAA,QACL,MAAM;AAAA,QACN,SAAK;AAAA,cACH,8BAAe,EAAE,SAAS,QAAQ,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,QACA,eAAe;AAAA,QACf,cACE;AAAA,QACF,WAAW;AAAA,QACX,aACE;AAAA,QACF,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -3,6 +3,6 @@ import * as React from 'react';
3
3
  import { DayPicker } from 'react-day-picker';
4
4
 
5
5
  type CalendarProps = React.ComponentProps<typeof DayPicker>;
6
- declare function Calendar({ className, classNames, showOutsideDays, locale, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
6
+ declare function Calendar({ className, classNames, showOutsideDays, locale, components, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
7
7
 
8
8
  export { Calendar, type CalendarProps };
@@ -3,6 +3,6 @@ import * as React from 'react';
3
3
  import { DayPicker } from 'react-day-picker';
4
4
 
5
5
  type CalendarProps = React.ComponentProps<typeof DayPicker>;
6
- declare function Calendar({ className, classNames, showOutsideDays, locale, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
6
+ declare function Calendar({ className, classNames, showOutsideDays, locale, components, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
7
7
 
8
8
  export { Calendar, type CalendarProps };
@@ -1,16 +1,22 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { DayPicker } from "react-day-picker";
4
- import { es } from "date-fns/locale";
4
+ import { enUS } from "date-fns/locale";
5
+ import { ChevronLeft, ChevronRight } from "lucide-react";
5
6
  import { cn } from "../../../lib/utils";
6
7
  import { buttonVariants } from "../button";
7
- function Calendar({ className, classNames, showOutsideDays = true, locale = es, ...props }) {
8
+ function Calendar({ className, classNames, showOutsideDays = true, locale = enUS, components, ...props }) {
8
9
  return /* @__PURE__ */ jsx(
9
10
  DayPicker,
10
11
  {
11
12
  showOutsideDays,
12
13
  locale,
13
14
  className: cn("rounded-md bg-white p-3 dark:bg-card", className),
15
+ components: {
16
+ IconLeft: () => /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" }),
17
+ IconRight: () => /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" }),
18
+ ...components
19
+ },
14
20
  classNames: {
15
21
  months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
16
22
  month: "space-y-4",
@@ -18,8 +24,8 @@ function Calendar({ className, classNames, showOutsideDays = true, locale = es,
18
24
  caption_label: "text-sm font-medium",
19
25
  nav: "space-x-1 flex items-center",
20
26
  nav_button: cn(
21
- buttonVariants({ variant: "outline" }),
22
- "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
27
+ buttonVariants({ variant: "outline", size: "sm" }),
28
+ "h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground"
23
29
  ),
24
30
  nav_button_previous: "absolute left-1",
25
31
  nav_button_next: "absolute right-1",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/calendar/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { es } from \"date-fns/locale\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { buttonVariants } from \"../button\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, locale = es, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n locale={locale}\n className={cn(\"rounded-md bg-white p-3 dark:bg-card\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\",\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar };\n"],"mappings":";AAaI;AAVJ,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AAEnB,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAI/B,SAAS,SAAS,EAAE,WAAW,YAAY,kBAAkB,MAAM,SAAS,IAAI,GAAG,MAAM,GAAkB;AACzG,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,GAAG,wCAAwC,SAAS;AAAA,MAC/D,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY;AAAA,UACV,eAAe,EAAE,SAAS,UAAU,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,QACA,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,KAAK;AAAA,QACL,MAAM;AAAA,QACN,KAAK;AAAA,UACH,eAAe,EAAE,SAAS,QAAQ,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,QACA,eAAe;AAAA,QACf,cACE;AAAA,QACF,WAAW;AAAA,QACX,aACE;AAAA,QACF,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/calendar/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { enUS } from \"date-fns/locale\";\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { buttonVariants } from \"../button\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, locale = enUS, components, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n locale={locale}\n className={cn(\"rounded-md bg-white p-3 dark:bg-card\", className)}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n ...components,\n }}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\", size: \"sm\" }),\n \"h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground\",\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\",\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar };\n"],"mappings":";AAoBwB;AAjBxB,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AAErB,SAAS,aAAa,oBAAoB;AAE1C,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAI/B,SAAS,SAAS,EAAE,WAAW,YAAY,kBAAkB,MAAM,SAAS,MAAM,YAAY,GAAG,MAAM,GAAkB;AACvH,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,GAAG,wCAAwC,SAAS;AAAA,MAC/D,YAAY;AAAA,QACV,UAAU,MAAM,oBAAC,eAAY,WAAU,WAAU;AAAA,QACjD,WAAW,MAAM,oBAAC,gBAAa,WAAU,WAAU;AAAA,QACnD,GAAG;AAAA,MACL;AAAA,MACA,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY;AAAA,UACV,eAAe,EAAE,SAAS,WAAW,MAAM,KAAK,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,QACA,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,KAAK;AAAA,QACL,MAAM;AAAA,QACN,KAAK;AAAA,UACH,eAAe,EAAE,SAAS,QAAQ,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,QACA,eAAe;AAAA,QACf,cACE;AAAA,QACF,WAAW;AAAA,QACX,aACE;AAAA,QACF,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -91,36 +91,48 @@ function DatePickerSelect({
91
91
  children,
92
92
  ...props
93
93
  }) {
94
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_utils.cn)("relative", wrapperClassName), children: [
95
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
96
- "select",
97
- {
98
- ...props,
99
- className: (0, import_utils.cn)(
100
- "h-9 w-full min-w-0 cursor-pointer appearance-none rounded-md border border-input bg-card py-0 pl-2 pr-9 text-left text-sm shadow-xs outline-none",
101
- "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
102
- "disabled:cursor-not-allowed disabled:opacity-50",
103
- className
94
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
95
+ "div",
96
+ {
97
+ className: (0, import_utils.cn)(
98
+ "relative flex min-h-9 w-full min-w-0 items-center rounded-md border border-input bg-card shadow-xs transition-colors",
99
+ /* Los navegadores suelen ignorar hover:bg en <select>; el hover va en el wrapper */
100
+ "hover:bg-muted/80",
101
+ "focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50",
102
+ "has-[:disabled]:opacity-50",
103
+ wrapperClassName
104
+ ),
105
+ children: [
106
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
107
+ "select",
108
+ {
109
+ ...props,
110
+ className: (0, import_utils.cn)(
111
+ "h-9 w-full min-w-0 flex-1 cursor-pointer appearance-none border-0 bg-transparent py-0 pl-2 pr-9 text-left text-sm text-foreground outline-none",
112
+ "disabled:cursor-not-allowed",
113
+ className
114
+ ),
115
+ children
116
+ }
104
117
  ),
105
- children
106
- }
107
- ),
108
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
109
- import_lucide_react.ChevronDown,
110
- {
111
- className: "pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80",
112
- "aria-hidden": true
113
- }
114
- )
115
- ] });
118
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
119
+ import_lucide_react.ChevronDown,
120
+ {
121
+ className: "pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80",
122
+ "aria-hidden": true
123
+ }
124
+ )
125
+ ]
126
+ }
127
+ );
116
128
  }
117
129
  function DatePicker({
118
130
  value,
119
131
  onChange,
120
- placeholder = "Seleccionar fecha",
132
+ placeholder = "Pick a date",
121
133
  disabled = false,
122
134
  className,
123
- locale = import_locale.es,
135
+ locale = import_locale.enUS,
124
136
  fromYear,
125
137
  toYear
126
138
  }) {
@@ -183,6 +195,8 @@ function DatePicker({
183
195
  "data-slot": "date-picker",
184
196
  className: (0, import_utils.cn)(
185
197
  "w-full justify-start text-left font-normal",
198
+ /* outline usa hover:bg-primary; aquí queremos un hover neutro */
199
+ "hover:bg-muted hover:text-foreground",
186
200
  !value && "text-muted-foreground",
187
201
  className
188
202
  ),
@@ -202,7 +216,7 @@ function DatePicker({
202
216
  variant: "outline",
203
217
  size: "sm",
204
218
  onClick: goToPreviousMonth,
205
- className: "h-9 w-9 shrink-0 p-0",
219
+ className: "h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground",
206
220
  "aria-label": locale.code?.startsWith("es") ? "Mes anterior" : "Previous month",
207
221
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronLeft, { className: "h-4 w-4" })
208
222
  }
@@ -235,7 +249,7 @@ function DatePicker({
235
249
  variant: "outline",
236
250
  size: "sm",
237
251
  onClick: goToNextMonth,
238
- className: "h-9 w-9 shrink-0 p-0",
252
+ className: "h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground",
239
253
  "aria-label": locale.code?.startsWith("es") ? "Mes siguiente" : "Next month",
240
254
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronRight, { className: "h-4 w-4" })
241
255
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/date-picker/date-picker.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { addDays, format, startOfWeek } from \"date-fns\";\nimport type { Locale } from \"date-fns\";\nimport { es } from \"date-fns/locale\";\nimport {\n Calendar as CalendarIcon,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n} from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover\";\n\nexport interface DatePickerProps {\n value?: Date;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /**\n * Locale de `date-fns` para nombres de mes/día y formato de la fecha en el botón.\n * Por defecto español (`es`).\n */\n locale?: Locale;\n /** Año mínimo en el selector (inclusive). */\n fromYear?: number;\n /** Año máximo en el selector (inclusive). */\n toYear?: number;\n}\n\nfunction getWeekStartsOn(locale: Locale): 0 | 1 | 2 | 3 | 4 | 5 | 6 {\n const w = locale.options?.weekStartsOn;\n if (w === undefined) return 1;\n return w as 0 | 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/** Meses abreviados (`LLL`) para que el `<select>` sea compacto dentro del popover. */\nfunction useMonthLabels(locale: Locale) {\n return React.useMemo(\n () => Array.from({ length: 12 }, (_, i) => format(new Date(2024, i, 1), \"LLL\", { locale })),\n [locale],\n );\n}\n\n/** Abreviatura del día en exactamente dos caracteres visibles (p. ej. lun → lu, Wed → We). */\nfunction weekdayTwoLetterLabel(abbrev: string): string {\n const graphemes = [...abbrev.normalize(\"NFC\")];\n if (graphemes.length <= 2) {\n return abbrev;\n }\n return graphemes.slice(0, 2).join(\"\");\n}\n\nfunction useWeekdayLabels(locale: Locale) {\n return React.useMemo(() => {\n const weekStartsOn = getWeekStartsOn(locale);\n const start = startOfWeek(new Date(2024, 0, 3), { weekStartsOn });\n return Array.from({ length: 7 }, (_, i) => {\n const abbrev = format(addDays(start, i), \"EEE\", { locale });\n return weekdayTwoLetterLabel(abbrev);\n });\n }, [locale]);\n}\n\nfunction getDaysInMonth(date: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const firstDay = new Date(year, month, 1);\n const startingDayOfWeek = firstDay.getDay();\n const offset = (startingDayOfWeek - weekStartsOn + 7) % 7;\n\n const days: (Date | null)[] = [];\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n return days;\n}\n\n/** Select nativo sin flecha del sistema: el chevron es un icono con margen fijo (padding fiable en todos los navegadores). */\nfunction DatePickerSelect({\n className,\n wrapperClassName,\n children,\n ...props\n}: React.ComponentProps<\"select\"> & { wrapperClassName?: string }) {\n return (\n <div className={cn(\"relative\", wrapperClassName)}>\n <select\n {...props}\n className={cn(\n \"h-9 w-full min-w-0 cursor-pointer appearance-none rounded-md border border-input bg-card py-0 pl-2 pr-9 text-left text-sm shadow-xs outline-none\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n {children}\n </select>\n <ChevronDown\n className=\"pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80\"\n aria-hidden\n />\n </div>\n );\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = \"Seleccionar fecha\",\n disabled = false,\n className,\n locale = es,\n fromYear,\n toYear,\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [currentMonth, setCurrentMonth] = React.useState(() => {\n const base = value ?? new Date();\n return new Date(base.getFullYear(), base.getMonth(), 1);\n });\n\n const monthLabels = useMonthLabels(locale);\n const weekdayLabels = useWeekdayLabels(locale);\n const weekStartsOn = getWeekStartsOn(locale);\n\n React.useEffect(() => {\n if (value) {\n setCurrentMonth(new Date(value.getFullYear(), value.getMonth(), 1));\n }\n }, [value]);\n\n const days = React.useMemo(\n () => getDaysInMonth(currentMonth, weekStartsOn),\n [currentMonth, weekStartsOn],\n );\n\n const yearOptions = React.useMemo(() => {\n const y = new Date().getFullYear();\n const from = fromYear ?? y - 100;\n const to = toYear ?? y + 10;\n const list: number[] = [];\n for (let i = from; i <= to; i++) {\n list.push(i);\n }\n return list;\n }, [fromYear, toYear]);\n\n const handleDateSelect = (date: Date) => {\n onChange?.(date);\n setOpen(false);\n };\n\n const goToPreviousMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n };\n\n const setMonthFromSelect = (monthIndex: number) => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), monthIndex, 1));\n };\n\n const setYearFromSelect = (year: number) => {\n setCurrentMonth(new Date(year, currentMonth.getMonth(), 1));\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n );\n };\n\n const isSelected = (date: Date) => {\n if (!value) return false;\n return (\n date.getFullYear() === value.getFullYear() &&\n date.getMonth() === value.getMonth() &&\n date.getDate() === value.getDate()\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n data-slot=\"date-picker\"\n className={cn(\n \"w-full justify-start text-left font-normal\",\n !value && \"text-muted-foreground\",\n className,\n )}\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n {value ? format(value, \"P\", { locale }) : placeholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto bg-white p-0 dark:bg-card\" align=\"start\">\n <div className=\"p-3\">\n <div className=\"mb-3 flex flex-wrap items-center justify-center gap-1.5\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousMonth}\n className=\"h-9 w-9 shrink-0 p-0\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes anterior\" : \"Previous month\"}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <DatePickerSelect\n wrapperClassName=\"w-[6.75rem] shrink-0\"\n value={currentMonth.getMonth()}\n onChange={(e) => setMonthFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes\" : \"Month\"}\n >\n {monthLabels.map((label, i) => (\n <option key={label} value={i}>\n {label}\n </option>\n ))}\n </DatePickerSelect>\n <DatePickerSelect\n wrapperClassName=\"w-[5.5rem] shrink-0\"\n className=\"tabular-nums text-center\"\n value={currentMonth.getFullYear()}\n onChange={(e) => setYearFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Año\" : \"Year\"}\n >\n {yearOptions.map((y) => (\n <option key={y} value={y}>\n {y}\n </option>\n ))}\n </DatePickerSelect>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextMonth}\n className=\"h-9 w-9 shrink-0 p-0\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes siguiente\" : \"Next month\"}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"mb-2 grid grid-cols-7 gap-1\">\n {weekdayLabels.map((day, i) => (\n <div\n key={i}\n className=\"px-0.5 py-2 text-center text-sm font-medium capitalize leading-tight text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <div key={index} className=\"flex h-9 w-9 items-center justify-center\">\n {day ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-9 w-9 p-0 font-normal\",\n isSelected(day) &&\n \"bg-primary text-primary-foreground hover:bg-primary-dark hover:text-primary-foreground\",\n isToday(day) &&\n !isSelected(day) &&\n \"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground\",\n !isSelected(day) && !isToday(day) && \"hover:bg-muted hover:text-foreground\",\n )}\n onClick={() => handleDateSelect(day)}\n >\n {day.getDate()}\n </Button>\n ) : (\n <div className=\"h-9 w-9\" />\n )}\n </div>\n ))}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+FI;AA7FJ,YAAuB;AACvB,sBAA6C;AAE7C,oBAAmB;AACnB,0BAKO;AAEP,mBAAmB;AACnB,oBAAuB;AACvB,qBAAwD;AAmBxD,SAAS,gBAAgB,QAA2C;AAClE,QAAM,IAAI,OAAO,SAAS;AAC1B,MAAI,MAAM,OAAW,QAAO;AAC5B,SAAO;AACT;AAGA,SAAS,eAAe,QAAgB;AACtC,SAAO,MAAM;AAAA,IACX,MAAM,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,UAAM,wBAAO,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;AAAA,IAC1F,CAAC,MAAM;AAAA,EACT;AACF;AAGA,SAAS,sBAAsB,QAAwB;AACrD,QAAM,YAAY,CAAC,GAAG,OAAO,UAAU,KAAK,CAAC;AAC7C,MAAI,UAAU,UAAU,GAAG;AACzB,WAAO;AAAA,EACT;AACA,SAAO,UAAU,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE;AACtC;AAEA,SAAS,iBAAiB,QAAgB;AACxC,SAAO,MAAM,QAAQ,MAAM;AACzB,UAAM,eAAe,gBAAgB,MAAM;AAC3C,UAAM,YAAQ,6BAAY,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;AAChE,WAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM;AACzC,YAAM,aAAS,4BAAO,yBAAQ,OAAO,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC;AAC1D,aAAO,sBAAsB,MAAM;AAAA,IACrC,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,CAAC;AACb;AAEA,SAAS,eAAe,MAAY,cAAyC;AAC3E,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,UAAU,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC3C,QAAM,cAAc,QAAQ,QAAQ;AACpC,QAAM,WAAW,IAAI,KAAK,MAAM,OAAO,CAAC;AACxC,QAAM,oBAAoB,SAAS,OAAO;AAC1C,QAAM,UAAU,oBAAoB,eAAe,KAAK;AAExD,QAAM,OAAwB,CAAC;AAC/B,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,SAAK,KAAK,IAAI;AAAA,EAChB;AACA,WAAS,MAAM,GAAG,OAAO,aAAa,OAAO;AAC3C,SAAK,KAAK,IAAI,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,EACtC;AACA,SAAO;AACT;AAGA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmE;AACjE,SACE,6CAAC,SAAI,eAAW,iBAAG,YAAY,gBAAgB,GAC7C;AAAA;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,eAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAW;AAAA;AAAA,IACb;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAAoB;AAClB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,MAAM;AAC3D,UAAM,OAAO,SAAS,oBAAI,KAAK;AAC/B,WAAO,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,CAAC;AAAA,EACxD,CAAC;AAED,QAAM,cAAc,eAAe,MAAM;AACzC,QAAM,gBAAgB,iBAAiB,MAAM;AAC7C,QAAM,eAAe,gBAAgB,MAAM;AAE3C,QAAM,UAAU,MAAM;AACpB,QAAI,OAAO;AACT,sBAAgB,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,CAAC,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,OAAO,MAAM;AAAA,IACjB,MAAM,eAAe,cAAc,YAAY;AAAA,IAC/C,CAAC,cAAc,YAAY;AAAA,EAC7B;AAEA,QAAM,cAAc,MAAM,QAAQ,MAAM;AACtC,UAAM,KAAI,oBAAI,KAAK,GAAE,YAAY;AACjC,UAAM,OAAO,YAAY,IAAI;AAC7B,UAAM,KAAK,UAAU,IAAI;AACzB,UAAM,OAAiB,CAAC;AACxB,aAAS,IAAI,MAAM,KAAK,IAAI,KAAK;AAC/B,WAAK,KAAK,CAAC;AAAA,IACb;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,MAAM,CAAC;AAErB,QAAM,mBAAmB,CAAC,SAAe;AACvC,eAAW,IAAI;AACf,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,oBAAoB,MAAM;AAC9B,oBAAgB,IAAI,KAAK,aAAa,YAAY,GAAG,aAAa,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EACtF;AAEA,QAAM,gBAAgB,MAAM;AAC1B,oBAAgB,IAAI,KAAK,aAAa,YAAY,GAAG,aAAa,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EACtF;AAEA,QAAM,qBAAqB,CAAC,eAAuB;AACjD,oBAAgB,IAAI,KAAK,aAAa,YAAY,GAAG,YAAY,CAAC,CAAC;AAAA,EACrE;AAEA,QAAM,oBAAoB,CAAC,SAAiB;AAC1C,oBAAgB,IAAI,KAAK,MAAM,aAAa,SAAS,GAAG,CAAC,CAAC;AAAA,EAC5D;AAEA,QAAM,UAAU,CAAC,SAAe;AAC9B,UAAM,QAAQ,oBAAI,KAAK;AACvB,WACE,KAAK,YAAY,MAAM,MAAM,YAAY,KACzC,KAAK,SAAS,MAAM,MAAM,SAAS,KACnC,KAAK,QAAQ,MAAM,MAAM,QAAQ;AAAA,EAErC;AAEA,QAAM,aAAa,CAAC,SAAe;AACjC,QAAI,CAAC,MAAO,QAAO;AACnB,WACE,KAAK,YAAY,MAAM,MAAM,YAAY,KACzC,KAAK,SAAS,MAAM,MAAM,SAAS,KACnC,KAAK,QAAQ,MAAM,MAAM,QAAQ;AAAA,EAErC;AAEA,SACE,6CAAC,0BAAQ,MAAY,cAAc,SACjC;AAAA,gDAAC,iCAAe,SAAO,MACrB;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAU;AAAA,QACV,eAAW;AAAA,UACT;AAAA,UACA,CAAC,SAAS;AAAA,UACV;AAAA,QACF;AAAA,QACA;AAAA,QAEA;AAAA,sDAAC,oBAAAA,UAAA,EAAa,WAAU,yBAAwB;AAAA,UAC/C,YAAQ,wBAAO,OAAO,KAAK,EAAE,OAAO,CAAC,IAAI;AAAA;AAAA;AAAA,IAC5C,GACF;AAAA,IACA,4CAAC,iCAAe,WAAU,oCAAmC,OAAM,SACjE,uDAAC,SAAI,WAAU,OACb;AAAA,mDAAC,SAAI,WAAU,2DACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,iBAAiB;AAAA,YAE7D,sDAAC,mCAAY,WAAU,WAAU;AAAA;AAAA,QACnC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,kBAAiB;AAAA,YACjB,OAAO,aAAa,SAAS;AAAA,YAC7B,UAAU,CAAC,MAAM,mBAAmB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,YAC1D,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,QAAQ;AAAA,YAEnD,sBAAY,IAAI,CAAC,OAAO,MACvB,4CAAC,YAAmB,OAAO,GACxB,mBADU,KAEb,CACD;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,kBAAiB;AAAA,YACjB,WAAU;AAAA,YACV,OAAO,aAAa,YAAY;AAAA,YAChC,UAAU,CAAC,MAAM,kBAAkB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,YACzD,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,WAAQ;AAAA,YAEnD,sBAAY,IAAI,CAAC,MAChB,4CAAC,YAAe,OAAO,GACpB,eADU,CAEb,CACD;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,kBAAkB;AAAA,YAE9D,sDAAC,oCAAa,WAAU,WAAU;AAAA;AAAA,QACpC;AAAA,SACF;AAAA,MAEA,4CAAC,SAAI,WAAU,+BACZ,wBAAc,IAAI,CAAC,KAAK,MACvB;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAET;AAAA;AAAA,QAHI;AAAA,MAIP,CACD,GACH;AAAA,MAEA,4CAAC,SAAI,WAAU,0BACZ,eAAK,IAAI,CAAC,KAAK,UACd,4CAAC,SAAgB,WAAU,4CACxB,gBACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,eAAW;AAAA,YACT;AAAA,YACA,WAAW,GAAG,KACZ;AAAA,YACF,QAAQ,GAAG,KACT,CAAC,WAAW,GAAG,KACf;AAAA,YACF,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK;AAAA,UACvC;AAAA,UACA,SAAS,MAAM,iBAAiB,GAAG;AAAA,UAElC,cAAI,QAAQ;AAAA;AAAA,MACf,IAEA,4CAAC,SAAI,WAAU,WAAU,KApBnB,KAsBV,CACD,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":["CalendarIcon"]}
1
+ {"version":3,"sources":["../../../../src/components/ui/date-picker/date-picker.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { addDays, format, startOfWeek } from \"date-fns\";\nimport type { Locale } from \"date-fns\";\nimport { enUS } from \"date-fns/locale\";\nimport {\n Calendar as CalendarIcon,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n} from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover\";\n\nexport interface DatePickerProps {\n value?: Date;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /**\n * Locale de `date-fns` para nombres de mes/día y formato de la fecha en el botón.\n * Por defecto español (`es`).\n */\n locale?: Locale;\n /** Año mínimo en el selector (inclusive). */\n fromYear?: number;\n /** Año máximo en el selector (inclusive). */\n toYear?: number;\n}\n\nfunction getWeekStartsOn(locale: Locale): 0 | 1 | 2 | 3 | 4 | 5 | 6 {\n const w = locale.options?.weekStartsOn;\n if (w === undefined) return 1;\n return w as 0 | 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/** Meses abreviados (`LLL`) para que el `<select>` sea compacto dentro del popover. */\nfunction useMonthLabels(locale: Locale) {\n return React.useMemo(\n () => Array.from({ length: 12 }, (_, i) => format(new Date(2024, i, 1), \"LLL\", { locale })),\n [locale],\n );\n}\n\n/** Abreviatura del día en exactamente dos caracteres visibles (p. ej. lun → lu, Wed → We). */\nfunction weekdayTwoLetterLabel(abbrev: string): string {\n const graphemes = [...abbrev.normalize(\"NFC\")];\n if (graphemes.length <= 2) {\n return abbrev;\n }\n return graphemes.slice(0, 2).join(\"\");\n}\n\nfunction useWeekdayLabels(locale: Locale) {\n return React.useMemo(() => {\n const weekStartsOn = getWeekStartsOn(locale);\n const start = startOfWeek(new Date(2024, 0, 3), { weekStartsOn });\n return Array.from({ length: 7 }, (_, i) => {\n const abbrev = format(addDays(start, i), \"EEE\", { locale });\n return weekdayTwoLetterLabel(abbrev);\n });\n }, [locale]);\n}\n\nfunction getDaysInMonth(date: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const firstDay = new Date(year, month, 1);\n const startingDayOfWeek = firstDay.getDay();\n const offset = (startingDayOfWeek - weekStartsOn + 7) % 7;\n\n const days: (Date | null)[] = [];\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n return days;\n}\n\n/** Select nativo sin flecha del sistema: el chevron es un icono con margen fijo (padding fiable en todos los navegadores). */\nfunction DatePickerSelect({\n className,\n wrapperClassName,\n children,\n ...props\n}: React.ComponentProps<\"select\"> & { wrapperClassName?: string }) {\n return (\n <div\n className={cn(\n \"relative flex min-h-9 w-full min-w-0 items-center rounded-md border border-input bg-card shadow-xs transition-colors\",\n /* Los navegadores suelen ignorar hover:bg en <select>; el hover va en el wrapper */\n \"hover:bg-muted/80\",\n \"focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50\",\n \"has-[:disabled]:opacity-50\",\n wrapperClassName,\n )}\n >\n <select\n {...props}\n className={cn(\n \"h-9 w-full min-w-0 flex-1 cursor-pointer appearance-none border-0 bg-transparent py-0 pl-2 pr-9 text-left text-sm text-foreground outline-none\",\n \"disabled:cursor-not-allowed\",\n className,\n )}\n >\n {children}\n </select>\n <ChevronDown\n className=\"pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80\"\n aria-hidden\n />\n </div>\n );\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = \"Pick a date\",\n disabled = false,\n className,\n locale = enUS,\n fromYear,\n toYear,\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [currentMonth, setCurrentMonth] = React.useState(() => {\n const base = value ?? new Date();\n return new Date(base.getFullYear(), base.getMonth(), 1);\n });\n\n const monthLabels = useMonthLabels(locale);\n const weekdayLabels = useWeekdayLabels(locale);\n const weekStartsOn = getWeekStartsOn(locale);\n\n React.useEffect(() => {\n if (value) {\n setCurrentMonth(new Date(value.getFullYear(), value.getMonth(), 1));\n }\n }, [value]);\n\n const days = React.useMemo(\n () => getDaysInMonth(currentMonth, weekStartsOn),\n [currentMonth, weekStartsOn],\n );\n\n const yearOptions = React.useMemo(() => {\n const y = new Date().getFullYear();\n const from = fromYear ?? y - 100;\n const to = toYear ?? y + 10;\n const list: number[] = [];\n for (let i = from; i <= to; i++) {\n list.push(i);\n }\n return list;\n }, [fromYear, toYear]);\n\n const handleDateSelect = (date: Date) => {\n onChange?.(date);\n setOpen(false);\n };\n\n const goToPreviousMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n };\n\n const setMonthFromSelect = (monthIndex: number) => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), monthIndex, 1));\n };\n\n const setYearFromSelect = (year: number) => {\n setCurrentMonth(new Date(year, currentMonth.getMonth(), 1));\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n );\n };\n\n const isSelected = (date: Date) => {\n if (!value) return false;\n return (\n date.getFullYear() === value.getFullYear() &&\n date.getMonth() === value.getMonth() &&\n date.getDate() === value.getDate()\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n data-slot=\"date-picker\"\n className={cn(\n \"w-full justify-start text-left font-normal\",\n /* outline usa hover:bg-primary; aquí queremos un hover neutro */\n \"hover:bg-muted hover:text-foreground\",\n !value && \"text-muted-foreground\",\n className,\n )}\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n {value ? format(value, \"P\", { locale }) : placeholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto bg-white p-0 dark:bg-card\" align=\"start\">\n <div className=\"p-3\">\n <div className=\"mb-3 flex flex-wrap items-center justify-center gap-1.5\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousMonth}\n className=\"h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes anterior\" : \"Previous month\"}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <DatePickerSelect\n wrapperClassName=\"w-[6.75rem] shrink-0\"\n value={currentMonth.getMonth()}\n onChange={(e) => setMonthFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes\" : \"Month\"}\n >\n {monthLabels.map((label, i) => (\n <option key={label} value={i}>\n {label}\n </option>\n ))}\n </DatePickerSelect>\n <DatePickerSelect\n wrapperClassName=\"w-[5.5rem] shrink-0\"\n className=\"tabular-nums text-center\"\n value={currentMonth.getFullYear()}\n onChange={(e) => setYearFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Año\" : \"Year\"}\n >\n {yearOptions.map((y) => (\n <option key={y} value={y}>\n {y}\n </option>\n ))}\n </DatePickerSelect>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextMonth}\n className=\"h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes siguiente\" : \"Next month\"}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"mb-2 grid grid-cols-7 gap-1\">\n {weekdayLabels.map((day, i) => (\n <div\n key={i}\n className=\"px-0.5 py-2 text-center text-sm font-medium capitalize leading-tight text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <div key={index} className=\"flex h-9 w-9 items-center justify-center\">\n {day ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-9 w-9 p-0 font-normal\",\n isSelected(day) &&\n \"bg-primary text-primary-foreground hover:bg-primary-dark hover:text-primary-foreground\",\n isToday(day) &&\n !isSelected(day) &&\n \"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground\",\n !isSelected(day) && !isToday(day) && \"hover:bg-muted hover:text-foreground\",\n )}\n onClick={() => handleDateSelect(day)}\n >\n {day.getDate()}\n </Button>\n ) : (\n <div className=\"h-9 w-9\" />\n )}\n </div>\n ))}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\n"],"mappings":"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","names":["CalendarIcon"]}
@@ -2,7 +2,7 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { addDays, format, startOfWeek } from "date-fns";
5
- import { es } from "date-fns/locale";
5
+ import { enUS } from "date-fns/locale";
6
6
  import {
7
7
  Calendar as CalendarIcon,
8
8
  ChevronDown,
@@ -63,36 +63,48 @@ function DatePickerSelect({
63
63
  children,
64
64
  ...props
65
65
  }) {
66
- return /* @__PURE__ */ jsxs("div", { className: cn("relative", wrapperClassName), children: [
67
- /* @__PURE__ */ jsx(
68
- "select",
69
- {
70
- ...props,
71
- className: cn(
72
- "h-9 w-full min-w-0 cursor-pointer appearance-none rounded-md border border-input bg-card py-0 pl-2 pr-9 text-left text-sm shadow-xs outline-none",
73
- "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
74
- "disabled:cursor-not-allowed disabled:opacity-50",
75
- className
66
+ return /* @__PURE__ */ jsxs(
67
+ "div",
68
+ {
69
+ className: cn(
70
+ "relative flex min-h-9 w-full min-w-0 items-center rounded-md border border-input bg-card shadow-xs transition-colors",
71
+ /* Los navegadores suelen ignorar hover:bg en <select>; el hover va en el wrapper */
72
+ "hover:bg-muted/80",
73
+ "focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50",
74
+ "has-[:disabled]:opacity-50",
75
+ wrapperClassName
76
+ ),
77
+ children: [
78
+ /* @__PURE__ */ jsx(
79
+ "select",
80
+ {
81
+ ...props,
82
+ className: cn(
83
+ "h-9 w-full min-w-0 flex-1 cursor-pointer appearance-none border-0 bg-transparent py-0 pl-2 pr-9 text-left text-sm text-foreground outline-none",
84
+ "disabled:cursor-not-allowed",
85
+ className
86
+ ),
87
+ children
88
+ }
76
89
  ),
77
- children
78
- }
79
- ),
80
- /* @__PURE__ */ jsx(
81
- ChevronDown,
82
- {
83
- className: "pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80",
84
- "aria-hidden": true
85
- }
86
- )
87
- ] });
90
+ /* @__PURE__ */ jsx(
91
+ ChevronDown,
92
+ {
93
+ className: "pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80",
94
+ "aria-hidden": true
95
+ }
96
+ )
97
+ ]
98
+ }
99
+ );
88
100
  }
89
101
  function DatePicker({
90
102
  value,
91
103
  onChange,
92
- placeholder = "Seleccionar fecha",
104
+ placeholder = "Pick a date",
93
105
  disabled = false,
94
106
  className,
95
- locale = es,
107
+ locale = enUS,
96
108
  fromYear,
97
109
  toYear
98
110
  }) {
@@ -155,6 +167,8 @@ function DatePicker({
155
167
  "data-slot": "date-picker",
156
168
  className: cn(
157
169
  "w-full justify-start text-left font-normal",
170
+ /* outline usa hover:bg-primary; aquí queremos un hover neutro */
171
+ "hover:bg-muted hover:text-foreground",
158
172
  !value && "text-muted-foreground",
159
173
  className
160
174
  ),
@@ -174,7 +188,7 @@ function DatePicker({
174
188
  variant: "outline",
175
189
  size: "sm",
176
190
  onClick: goToPreviousMonth,
177
- className: "h-9 w-9 shrink-0 p-0",
191
+ className: "h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground",
178
192
  "aria-label": locale.code?.startsWith("es") ? "Mes anterior" : "Previous month",
179
193
  children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
180
194
  }
@@ -207,7 +221,7 @@ function DatePicker({
207
221
  variant: "outline",
208
222
  size: "sm",
209
223
  onClick: goToNextMonth,
210
- className: "h-9 w-9 shrink-0 p-0",
224
+ className: "h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground",
211
225
  "aria-label": locale.code?.startsWith("es") ? "Mes siguiente" : "Next month",
212
226
  children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
213
227
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/date-picker/date-picker.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { addDays, format, startOfWeek } from \"date-fns\";\nimport type { Locale } from \"date-fns\";\nimport { es } from \"date-fns/locale\";\nimport {\n Calendar as CalendarIcon,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n} from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover\";\n\nexport interface DatePickerProps {\n value?: Date;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /**\n * Locale de `date-fns` para nombres de mes/día y formato de la fecha en el botón.\n * Por defecto español (`es`).\n */\n locale?: Locale;\n /** Año mínimo en el selector (inclusive). */\n fromYear?: number;\n /** Año máximo en el selector (inclusive). */\n toYear?: number;\n}\n\nfunction getWeekStartsOn(locale: Locale): 0 | 1 | 2 | 3 | 4 | 5 | 6 {\n const w = locale.options?.weekStartsOn;\n if (w === undefined) return 1;\n return w as 0 | 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/** Meses abreviados (`LLL`) para que el `<select>` sea compacto dentro del popover. */\nfunction useMonthLabels(locale: Locale) {\n return React.useMemo(\n () => Array.from({ length: 12 }, (_, i) => format(new Date(2024, i, 1), \"LLL\", { locale })),\n [locale],\n );\n}\n\n/** Abreviatura del día en exactamente dos caracteres visibles (p. ej. lun → lu, Wed → We). */\nfunction weekdayTwoLetterLabel(abbrev: string): string {\n const graphemes = [...abbrev.normalize(\"NFC\")];\n if (graphemes.length <= 2) {\n return abbrev;\n }\n return graphemes.slice(0, 2).join(\"\");\n}\n\nfunction useWeekdayLabels(locale: Locale) {\n return React.useMemo(() => {\n const weekStartsOn = getWeekStartsOn(locale);\n const start = startOfWeek(new Date(2024, 0, 3), { weekStartsOn });\n return Array.from({ length: 7 }, (_, i) => {\n const abbrev = format(addDays(start, i), \"EEE\", { locale });\n return weekdayTwoLetterLabel(abbrev);\n });\n }, [locale]);\n}\n\nfunction getDaysInMonth(date: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const firstDay = new Date(year, month, 1);\n const startingDayOfWeek = firstDay.getDay();\n const offset = (startingDayOfWeek - weekStartsOn + 7) % 7;\n\n const days: (Date | null)[] = [];\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n return days;\n}\n\n/** Select nativo sin flecha del sistema: el chevron es un icono con margen fijo (padding fiable en todos los navegadores). */\nfunction DatePickerSelect({\n className,\n wrapperClassName,\n children,\n ...props\n}: React.ComponentProps<\"select\"> & { wrapperClassName?: string }) {\n return (\n <div className={cn(\"relative\", wrapperClassName)}>\n <select\n {...props}\n className={cn(\n \"h-9 w-full min-w-0 cursor-pointer appearance-none rounded-md border border-input bg-card py-0 pl-2 pr-9 text-left text-sm shadow-xs outline-none\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n {children}\n </select>\n <ChevronDown\n className=\"pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80\"\n aria-hidden\n />\n </div>\n );\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = \"Seleccionar fecha\",\n disabled = false,\n className,\n locale = es,\n fromYear,\n toYear,\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [currentMonth, setCurrentMonth] = React.useState(() => {\n const base = value ?? new Date();\n return new Date(base.getFullYear(), base.getMonth(), 1);\n });\n\n const monthLabels = useMonthLabels(locale);\n const weekdayLabels = useWeekdayLabels(locale);\n const weekStartsOn = getWeekStartsOn(locale);\n\n React.useEffect(() => {\n if (value) {\n setCurrentMonth(new Date(value.getFullYear(), value.getMonth(), 1));\n }\n }, [value]);\n\n const days = React.useMemo(\n () => getDaysInMonth(currentMonth, weekStartsOn),\n [currentMonth, weekStartsOn],\n );\n\n const yearOptions = React.useMemo(() => {\n const y = new Date().getFullYear();\n const from = fromYear ?? y - 100;\n const to = toYear ?? y + 10;\n const list: number[] = [];\n for (let i = from; i <= to; i++) {\n list.push(i);\n }\n return list;\n }, [fromYear, toYear]);\n\n const handleDateSelect = (date: Date) => {\n onChange?.(date);\n setOpen(false);\n };\n\n const goToPreviousMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n };\n\n const setMonthFromSelect = (monthIndex: number) => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), monthIndex, 1));\n };\n\n const setYearFromSelect = (year: number) => {\n setCurrentMonth(new Date(year, currentMonth.getMonth(), 1));\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n );\n };\n\n const isSelected = (date: Date) => {\n if (!value) return false;\n return (\n date.getFullYear() === value.getFullYear() &&\n date.getMonth() === value.getMonth() &&\n date.getDate() === value.getDate()\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n data-slot=\"date-picker\"\n className={cn(\n \"w-full justify-start text-left font-normal\",\n !value && \"text-muted-foreground\",\n className,\n )}\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n {value ? format(value, \"P\", { locale }) : placeholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto bg-white p-0 dark:bg-card\" align=\"start\">\n <div className=\"p-3\">\n <div className=\"mb-3 flex flex-wrap items-center justify-center gap-1.5\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousMonth}\n className=\"h-9 w-9 shrink-0 p-0\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes anterior\" : \"Previous month\"}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <DatePickerSelect\n wrapperClassName=\"w-[6.75rem] shrink-0\"\n value={currentMonth.getMonth()}\n onChange={(e) => setMonthFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes\" : \"Month\"}\n >\n {monthLabels.map((label, i) => (\n <option key={label} value={i}>\n {label}\n </option>\n ))}\n </DatePickerSelect>\n <DatePickerSelect\n wrapperClassName=\"w-[5.5rem] shrink-0\"\n className=\"tabular-nums text-center\"\n value={currentMonth.getFullYear()}\n onChange={(e) => setYearFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Año\" : \"Year\"}\n >\n {yearOptions.map((y) => (\n <option key={y} value={y}>\n {y}\n </option>\n ))}\n </DatePickerSelect>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextMonth}\n className=\"h-9 w-9 shrink-0 p-0\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes siguiente\" : \"Next month\"}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"mb-2 grid grid-cols-7 gap-1\">\n {weekdayLabels.map((day, i) => (\n <div\n key={i}\n className=\"px-0.5 py-2 text-center text-sm font-medium capitalize leading-tight text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <div key={index} className=\"flex h-9 w-9 items-center justify-center\">\n {day ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-9 w-9 p-0 font-normal\",\n isSelected(day) &&\n \"bg-primary text-primary-foreground hover:bg-primary-dark hover:text-primary-foreground\",\n isToday(day) &&\n !isSelected(day) &&\n \"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground\",\n !isSelected(day) && !isToday(day) && \"hover:bg-muted hover:text-foreground\",\n )}\n onClick={() => handleDateSelect(day)}\n >\n {day.getDate()}\n </Button>\n ) : (\n <div className=\"h-9 w-9\" />\n )}\n </div>\n ))}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/date-picker/date-picker.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { addDays, format, startOfWeek } from \"date-fns\";\nimport type { Locale } from \"date-fns\";\nimport { enUS } from \"date-fns/locale\";\nimport {\n Calendar as CalendarIcon,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n} from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover\";\n\nexport interface DatePickerProps {\n value?: Date;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /**\n * Locale de `date-fns` para nombres de mes/día y formato de la fecha en el botón.\n * Por defecto español (`es`).\n */\n locale?: Locale;\n /** Año mínimo en el selector (inclusive). */\n fromYear?: number;\n /** Año máximo en el selector (inclusive). */\n toYear?: number;\n}\n\nfunction getWeekStartsOn(locale: Locale): 0 | 1 | 2 | 3 | 4 | 5 | 6 {\n const w = locale.options?.weekStartsOn;\n if (w === undefined) return 1;\n return w as 0 | 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/** Meses abreviados (`LLL`) para que el `<select>` sea compacto dentro del popover. */\nfunction useMonthLabels(locale: Locale) {\n return React.useMemo(\n () => Array.from({ length: 12 }, (_, i) => format(new Date(2024, i, 1), \"LLL\", { locale })),\n [locale],\n );\n}\n\n/** Abreviatura del día en exactamente dos caracteres visibles (p. ej. lun → lu, Wed → We). */\nfunction weekdayTwoLetterLabel(abbrev: string): string {\n const graphemes = [...abbrev.normalize(\"NFC\")];\n if (graphemes.length <= 2) {\n return abbrev;\n }\n return graphemes.slice(0, 2).join(\"\");\n}\n\nfunction useWeekdayLabels(locale: Locale) {\n return React.useMemo(() => {\n const weekStartsOn = getWeekStartsOn(locale);\n const start = startOfWeek(new Date(2024, 0, 3), { weekStartsOn });\n return Array.from({ length: 7 }, (_, i) => {\n const abbrev = format(addDays(start, i), \"EEE\", { locale });\n return weekdayTwoLetterLabel(abbrev);\n });\n }, [locale]);\n}\n\nfunction getDaysInMonth(date: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const firstDay = new Date(year, month, 1);\n const startingDayOfWeek = firstDay.getDay();\n const offset = (startingDayOfWeek - weekStartsOn + 7) % 7;\n\n const days: (Date | null)[] = [];\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n return days;\n}\n\n/** Select nativo sin flecha del sistema: el chevron es un icono con margen fijo (padding fiable en todos los navegadores). */\nfunction DatePickerSelect({\n className,\n wrapperClassName,\n children,\n ...props\n}: React.ComponentProps<\"select\"> & { wrapperClassName?: string }) {\n return (\n <div\n className={cn(\n \"relative flex min-h-9 w-full min-w-0 items-center rounded-md border border-input bg-card shadow-xs transition-colors\",\n /* Los navegadores suelen ignorar hover:bg en <select>; el hover va en el wrapper */\n \"hover:bg-muted/80\",\n \"focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50\",\n \"has-[:disabled]:opacity-50\",\n wrapperClassName,\n )}\n >\n <select\n {...props}\n className={cn(\n \"h-9 w-full min-w-0 flex-1 cursor-pointer appearance-none border-0 bg-transparent py-0 pl-2 pr-9 text-left text-sm text-foreground outline-none\",\n \"disabled:cursor-not-allowed\",\n className,\n )}\n >\n {children}\n </select>\n <ChevronDown\n className=\"pointer-events-none absolute right-2 top-1/2 size-4 -translate-y-1/2 shrink-0 text-muted-foreground opacity-80\"\n aria-hidden\n />\n </div>\n );\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = \"Pick a date\",\n disabled = false,\n className,\n locale = enUS,\n fromYear,\n toYear,\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [currentMonth, setCurrentMonth] = React.useState(() => {\n const base = value ?? new Date();\n return new Date(base.getFullYear(), base.getMonth(), 1);\n });\n\n const monthLabels = useMonthLabels(locale);\n const weekdayLabels = useWeekdayLabels(locale);\n const weekStartsOn = getWeekStartsOn(locale);\n\n React.useEffect(() => {\n if (value) {\n setCurrentMonth(new Date(value.getFullYear(), value.getMonth(), 1));\n }\n }, [value]);\n\n const days = React.useMemo(\n () => getDaysInMonth(currentMonth, weekStartsOn),\n [currentMonth, weekStartsOn],\n );\n\n const yearOptions = React.useMemo(() => {\n const y = new Date().getFullYear();\n const from = fromYear ?? y - 100;\n const to = toYear ?? y + 10;\n const list: number[] = [];\n for (let i = from; i <= to; i++) {\n list.push(i);\n }\n return list;\n }, [fromYear, toYear]);\n\n const handleDateSelect = (date: Date) => {\n onChange?.(date);\n setOpen(false);\n };\n\n const goToPreviousMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n };\n\n const setMonthFromSelect = (monthIndex: number) => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), monthIndex, 1));\n };\n\n const setYearFromSelect = (year: number) => {\n setCurrentMonth(new Date(year, currentMonth.getMonth(), 1));\n };\n\n const isToday = (date: Date) => {\n const today = new Date();\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n );\n };\n\n const isSelected = (date: Date) => {\n if (!value) return false;\n return (\n date.getFullYear() === value.getFullYear() &&\n date.getMonth() === value.getMonth() &&\n date.getDate() === value.getDate()\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n data-slot=\"date-picker\"\n className={cn(\n \"w-full justify-start text-left font-normal\",\n /* outline usa hover:bg-primary; aquí queremos un hover neutro */\n \"hover:bg-muted hover:text-foreground\",\n !value && \"text-muted-foreground\",\n className,\n )}\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n {value ? format(value, \"P\", { locale }) : placeholder}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto bg-white p-0 dark:bg-card\" align=\"start\">\n <div className=\"p-3\">\n <div className=\"mb-3 flex flex-wrap items-center justify-center gap-1.5\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousMonth}\n className=\"h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes anterior\" : \"Previous month\"}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <DatePickerSelect\n wrapperClassName=\"w-[6.75rem] shrink-0\"\n value={currentMonth.getMonth()}\n onChange={(e) => setMonthFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes\" : \"Month\"}\n >\n {monthLabels.map((label, i) => (\n <option key={label} value={i}>\n {label}\n </option>\n ))}\n </DatePickerSelect>\n <DatePickerSelect\n wrapperClassName=\"w-[5.5rem] shrink-0\"\n className=\"tabular-nums text-center\"\n value={currentMonth.getFullYear()}\n onChange={(e) => setYearFromSelect(Number(e.target.value))}\n aria-label={locale.code?.startsWith(\"es\") ? \"Año\" : \"Year\"}\n >\n {yearOptions.map((y) => (\n <option key={y} value={y}>\n {y}\n </option>\n ))}\n </DatePickerSelect>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextMonth}\n className=\"h-9 w-9 shrink-0 p-0 hover:bg-muted hover:text-foreground\"\n aria-label={locale.code?.startsWith(\"es\") ? \"Mes siguiente\" : \"Next month\"}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"mb-2 grid grid-cols-7 gap-1\">\n {weekdayLabels.map((day, i) => (\n <div\n key={i}\n className=\"px-0.5 py-2 text-center text-sm font-medium capitalize leading-tight text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <div key={index} className=\"flex h-9 w-9 items-center justify-center\">\n {day ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-9 w-9 p-0 font-normal\",\n isSelected(day) &&\n \"bg-primary text-primary-foreground hover:bg-primary-dark hover:text-primary-foreground\",\n isToday(day) &&\n !isSelected(day) &&\n \"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground\",\n !isSelected(day) && !isToday(day) && \"hover:bg-muted hover:text-foreground\",\n )}\n onClick={() => handleDateSelect(day)}\n >\n {day.getDate()}\n </Button>\n ) : (\n <div className=\"h-9 w-9\" />\n )}\n </div>\n ))}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\n"],"mappings":";AA+FI,SAUE,KAVF;AA7FJ,YAAY,WAAW;AACvB,SAAS,SAAS,QAAQ,mBAAmB;AAE7C,SAAS,YAAY;AACrB;AAAA,EACE,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,UAAU;AACnB,SAAS,cAAc;AACvB,SAAS,SAAS,gBAAgB,sBAAsB;AAmBxD,SAAS,gBAAgB,QAA2C;AAClE,QAAM,IAAI,OAAO,SAAS;AAC1B,MAAI,MAAM,OAAW,QAAO;AAC5B,SAAO;AACT;AAGA,SAAS,eAAe,QAAgB;AACtC,SAAO,MAAM;AAAA,IACX,MAAM,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,OAAO,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;AAAA,IAC1F,CAAC,MAAM;AAAA,EACT;AACF;AAGA,SAAS,sBAAsB,QAAwB;AACrD,QAAM,YAAY,CAAC,GAAG,OAAO,UAAU,KAAK,CAAC;AAC7C,MAAI,UAAU,UAAU,GAAG;AACzB,WAAO;AAAA,EACT;AACA,SAAO,UAAU,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE;AACtC;AAEA,SAAS,iBAAiB,QAAgB;AACxC,SAAO,MAAM,QAAQ,MAAM;AACzB,UAAM,eAAe,gBAAgB,MAAM;AAC3C,UAAM,QAAQ,YAAY,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;AAChE,WAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM;AACzC,YAAM,SAAS,OAAO,QAAQ,OAAO,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC;AAC1D,aAAO,sBAAsB,MAAM;AAAA,IACrC,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,CAAC;AACb;AAEA,SAAS,eAAe,MAAY,cAAyC;AAC3E,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,UAAU,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC3C,QAAM,cAAc,QAAQ,QAAQ;AACpC,QAAM,WAAW,IAAI,KAAK,MAAM,OAAO,CAAC;AACxC,QAAM,oBAAoB,SAAS,OAAO;AAC1C,QAAM,UAAU,oBAAoB,eAAe,KAAK;AAExD,QAAM,OAAwB,CAAC;AAC/B,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,SAAK,KAAK,IAAI;AAAA,EAChB;AACA,WAAS,MAAM,GAAG,OAAO,aAAa,OAAO;AAC3C,SAAK,KAAK,IAAI,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,EACtC;AACA,SAAO;AACT;AAGA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmE;AACjE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAW;AAAA;AAAA,QACb;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAAoB;AAClB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,MAAM;AAC3D,UAAM,OAAO,SAAS,oBAAI,KAAK;AAC/B,WAAO,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,CAAC;AAAA,EACxD,CAAC;AAED,QAAM,cAAc,eAAe,MAAM;AACzC,QAAM,gBAAgB,iBAAiB,MAAM;AAC7C,QAAM,eAAe,gBAAgB,MAAM;AAE3C,QAAM,UAAU,MAAM;AACpB,QAAI,OAAO;AACT,sBAAgB,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,CAAC,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,OAAO,MAAM;AAAA,IACjB,MAAM,eAAe,cAAc,YAAY;AAAA,IAC/C,CAAC,cAAc,YAAY;AAAA,EAC7B;AAEA,QAAM,cAAc,MAAM,QAAQ,MAAM;AACtC,UAAM,KAAI,oBAAI,KAAK,GAAE,YAAY;AACjC,UAAM,OAAO,YAAY,IAAI;AAC7B,UAAM,KAAK,UAAU,IAAI;AACzB,UAAM,OAAiB,CAAC;AACxB,aAAS,IAAI,MAAM,KAAK,IAAI,KAAK;AAC/B,WAAK,KAAK,CAAC;AAAA,IACb;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,MAAM,CAAC;AAErB,QAAM,mBAAmB,CAAC,SAAe;AACvC,eAAW,IAAI;AACf,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,oBAAoB,MAAM;AAC9B,oBAAgB,IAAI,KAAK,aAAa,YAAY,GAAG,aAAa,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EACtF;AAEA,QAAM,gBAAgB,MAAM;AAC1B,oBAAgB,IAAI,KAAK,aAAa,YAAY,GAAG,aAAa,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EACtF;AAEA,QAAM,qBAAqB,CAAC,eAAuB;AACjD,oBAAgB,IAAI,KAAK,aAAa,YAAY,GAAG,YAAY,CAAC,CAAC;AAAA,EACrE;AAEA,QAAM,oBAAoB,CAAC,SAAiB;AAC1C,oBAAgB,IAAI,KAAK,MAAM,aAAa,SAAS,GAAG,CAAC,CAAC;AAAA,EAC5D;AAEA,QAAM,UAAU,CAAC,SAAe;AAC9B,UAAM,QAAQ,oBAAI,KAAK;AACvB,WACE,KAAK,YAAY,MAAM,MAAM,YAAY,KACzC,KAAK,SAAS,MAAM,MAAM,SAAS,KACnC,KAAK,QAAQ,MAAM,MAAM,QAAQ;AAAA,EAErC;AAEA,QAAM,aAAa,CAAC,SAAe;AACjC,QAAI,CAAC,MAAO,QAAO;AACnB,WACE,KAAK,YAAY,MAAM,MAAM,YAAY,KACzC,KAAK,SAAS,MAAM,MAAM,SAAS,KACnC,KAAK,QAAQ,MAAM,MAAM,QAAQ;AAAA,EAErC;AAEA,SACE,qBAAC,WAAQ,MAAY,cAAc,SACjC;AAAA,wBAAC,kBAAe,SAAO,MACrB;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA;AAAA,UAEA;AAAA,UACA,CAAC,SAAS;AAAA,UACV;AAAA,QACF;AAAA,QACA;AAAA,QAEA;AAAA,8BAAC,gBAAa,WAAU,yBAAwB;AAAA,UAC/C,QAAQ,OAAO,OAAO,KAAK,EAAE,OAAO,CAAC,IAAI;AAAA;AAAA;AAAA,IAC5C,GACF;AAAA,IACA,oBAAC,kBAAe,WAAU,oCAAmC,OAAM,SACjE,+BAAC,SAAI,WAAU,OACb;AAAA,2BAAC,SAAI,WAAU,2DACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,iBAAiB;AAAA,YAE7D,8BAAC,eAAY,WAAU,WAAU;AAAA;AAAA,QACnC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,kBAAiB;AAAA,YACjB,OAAO,aAAa,SAAS;AAAA,YAC7B,UAAU,CAAC,MAAM,mBAAmB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,YAC1D,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,QAAQ;AAAA,YAEnD,sBAAY,IAAI,CAAC,OAAO,MACvB,oBAAC,YAAmB,OAAO,GACxB,mBADU,KAEb,CACD;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,kBAAiB;AAAA,YACjB,WAAU;AAAA,YACV,OAAO,aAAa,YAAY;AAAA,YAChC,UAAU,CAAC,MAAM,kBAAkB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,YACzD,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,WAAQ;AAAA,YAEnD,sBAAY,IAAI,CAAC,MAChB,oBAAC,YAAe,OAAO,GACpB,eADU,CAEb,CACD;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,cAAY,OAAO,MAAM,WAAW,IAAI,IAAI,kBAAkB;AAAA,YAE9D,8BAAC,gBAAa,WAAU,WAAU;AAAA;AAAA,QACpC;AAAA,SACF;AAAA,MAEA,oBAAC,SAAI,WAAU,+BACZ,wBAAc,IAAI,CAAC,KAAK,MACvB;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAET;AAAA;AAAA,QAHI;AAAA,MAIP,CACD,GACH;AAAA,MAEA,oBAAC,SAAI,WAAU,0BACZ,eAAK,IAAI,CAAC,KAAK,UACd,oBAAC,SAAgB,WAAU,4CACxB,gBACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA,WAAW,GAAG,KACZ;AAAA,YACF,QAAQ,GAAG,KACT,CAAC,WAAW,GAAG,KACf;AAAA,YACF,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK;AAAA,UACvC;AAAA,UACA,SAAS,MAAM,iBAAiB,GAAG;AAAA,UAElC,cAAI,QAAQ;AAAA;AAAA,MACf,IAEA,oBAAC,SAAI,WAAU,WAAU,KApBnB,KAsBV,CACD,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ginia/ui",
3
- "version": "0.1.25",
3
+ "version": "0.1.26",
4
4
  "description": "Ginia Design System — Unified UI component library for all Ginia hubs",
5
5
  "license": "MIT",
6
6
  "private": false,